विकिपीडिया hiwiki https://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0 MediaWiki 1.47.0-wmf.11 first-letter मीडिया विशेष वार्ता सदस्य सदस्य वार्ता विकिपीडिया विकिपीडिया वार्ता चित्र चित्र वार्ता मीडियाविकि मीडियाविकि वार्ता साँचा साँचा वार्ता सहायता सहायता वार्ता श्रेणी श्रेणी वार्ता प्रवेशद्वार प्रवेशद्वार वार्ता TimedText TimedText talk मॉड्यूल मॉड्यूल वार्ता Event Event talk आयुध 0 9436 6586931 6515564 2026-07-17T20:35:49Z Redaktor GLAM 848755 Higher resolution version of image 6586931 wikitext text/x-wiki [[चित्र:Armes de l'Indie, Nepaul, Turquie - Racinet (69457573).jpg|thumb|भारत में प्रयुक्त मध्ययुगीन हथियार]] {{युद्ध}} कोई भी उपकरण जिसका प्रयोग अपने शत्रु को चोट पहुँचाने, वश में करने या हत्या करने के लिये किया जाता है, '''शस्त्र''' या '''आयुध''' (weapon) कहलाता है। शस्त्र का प्रयोग आक्रमण करने, बचाव करने अथवा डराने-धमकाने के लिये किया जा सकता है। शस्त्र एक तरफ '''लाठी''' जितना सरल हो सकता है तो दूसरी तरफ '''[[बैलिस्टिक प्रक्षेपास्त्र]]''' जितना जटिल भी। == इतिहास == [[चित्र:Bronze age weapons Romania.jpg|right|thumb|300px|कांस्य युग के हथियार (रोमानिया)]] '''आयुध''' उन यंत्रों को कहते हैं जिनका प्रयोग [[युद्ध]] में होता है। इस प्रकार [[तीर]], [[तलवार]] से लेकर बड़ी-बड़ी [[तोप|तोपों]] तक सभी यंत्र आयुध हैं। आयुध के विकास का इतिहास उतना ही पुराना है जितना मानव जाति के विकास का। मानव जीवन आदिकाल से संघर्षपूर्ण रहा है। जीवनरक्षा के लिए उसे भयानक और शक्तिशाली जीवजंतुओं से लड़ना पड़ा होगा। मनुष्य के पास न तो उन जीवजंतुओं के बराबर बल था, न उतना मोटा और कठोर चर्म और न तीव्र तथा घातक दाँत तथा नख ही थे। अपने अनुभवों तथा बुद्धि से मनुष्य ने प्रथम शस्त्रों का आविष्कार किया होगा। एँडे या लाठी का विकास [[बरछा]], [[गदा]], [[तलवार]], [[बल्लभ]] और आधुनिक [[संगीन]] में हुआ। इसी प्रकार फेंककर मारनेवाले साधारण पत्थर का विकास [[भाला]], धनुष-बाण या [[धनुर्विद्या]], [[गुलेल]], [[गोला]], [[गोली]] तथा आधुनिक [[परमाणु बम]] में हुआ। आयुधों के विकास और बढ़ती शक्ति के साथ-साथ प्रतिरक्षा के उपकरणों की आवश्यकता हुई और उनका आविष्कार हुआ। संभवत: [[त्वचा|चर्म]] को लकड़ी के डंडों में फँसाकर [[ढाल]] बनाने की कला बहुत पुरानी होगी। कालांतर में [[गोला (प्रक्षेप्य)|कवच]] और आधुनिक युग में आकर [[टैंक|कवचयान]] ([[टैंक]]) का आविष्कार हुआ। यह देखा गया हे कि मनुष्य ने जब-जब संहार के साधनों का निर्माण किया, उसके साथ-साथ प्रतिरक्षा के साधनों का भी विकास हुआ। == आयुधों का वर्गीकरण == आयुधों का वर्गीकरण साधारणत: उनके प्रयोग, विधि ओर विशेषताओं के आधार पर किया जाता है। इनके अनुसार [[पाषाणयुग]] से [[बारूद]] के आविष्कार तक के आयुधों का वर्गीकरण इस प्रकार है : '''शस्त्र''' वे हथियार है जो फेंके नहीं जाते। इनके उपवर्गीकरण के अंतर्गत निम्नलिखित शस्त्र हैं : (अ) काटनेवाले शस्त्र; जैसे तलवार, परशु आदि; (आ) फेंकनेवाले शस्त्र, जैसे बरछा, त्रिशूल आदि; (इ) कुंद शस्त्र, जैसे [[गदा]]। '''अस्त्र''' वे हथियार हैं जो फेंके जाते हैं। इनके अंतर्गत ये अस्त्र हैं : :(अ) हाथ से फेंके जानेवाले अस्त्र, जैसे भाला; :(आ) वे अस्त्र जो यंत्र द्वारा फेंके जाते हैं, जैसे बाण, गुलेल से फेंके जानेवाले पत्थर आदि। पुरातत्ववेत्ताओं के मतानुसार समय के साथ-साथ मनुष्य का ज्ञान बढ़ा और वह सोच समझकर इच्छानुसार पत्थर और लकड़ी के शस्त्र बनाने लगा। फिर इन्हीं शस्त्रों को घिसकर सपाट, सुडौल, तीव्र और चमकीला बनाना आरंभ किया। इस काल के मुख्य शस्त्र पत्थर के कुल्हाड़े, गदाएँ और छुरे थे। सहस्रों वर्ष बाद उसने धनुष और भाले का भी निर्माण किया। लगभग 4,000 वर्ष ई.पू. तक मनुष्य [[धातु]] का पता पा चुका था। [[ताम्र|ताँबे]] और [[टिन|राँगे]] को मिलाकर उसने [[कांसा|काँसा]] बनाना जाना ओर तब धीरे-धीरे पत्थर के शस्त्रों का स्थान काँसे के शस्त्रों ने ले लिया। इस काल के शस्त्रों में विशेषत: धनुषबाण, बरछी, छुरी, भाला, कुल्हाड़ा और गदा के तथा रक्षात्मक साधनों में केवल काँसे की ढाल के प्रमाण मिले हैं। कांसे का स्थान प्राय: 1000 ई.पू. में [[लोहा|लोहे]] ने लिया। [[वैदिक सभ्यता|वैदिक काल]] में अस्त्रशस्त्रों का वर्गीकरण इस प्रकार था : (1) '''अमुक्ता''' - वे शस्त्र जो फेंके नहीं जाते थे। (2) '''मुक्ता''' - वे शस्त्र जो फेंके जाते थे। इनके भी दो प्रकार थे- :* '''पाणिमुक्ता''', अर्थात् हाथ से फेंके जानेवाले और :* '''यंत्रमुक्ता''', अर्थात् यंत्र द्वारा फेंके जानेवाले। (3) '''मुक्तामुक्त''' - वह शस्त्र जो फेंककर या बिना फेंके दोनों प्रकार से प्रयोग किए जाते थे। (4) '''मुक्तसंनिवृत्ती''' - वे शस्त्र जो फेंककर लौटाए जा सकते थे। [[आग्नेयास्त्र]] (फ़ायर-आर्म्स) का भी उल्लेख मिलता है, पर अधिक स्पष्ट नहीं। ===आधुनिक वर्गीकरण=== [[चित्र:Agni-II missile (Republic Day Parade 2004).jpeg|अंगूठाकार|भारत की अग्नि मिसाइल]] शस्त्रों का वर्गीकरण कई तरह से कर सकते हैं। ==== कार्यक्षमता एवं उपयोगिता के आधार पर ==== *(१) आक्रमणात्मक हथियार :* (क) आरक्षित हथियार :* (ख) भिड़त हथियार :* (ग) प्रक्षेप हथियार *(२) प्रतिरक्षात्मक हथियार ====दूसरा वर्गीकरण==== * (१) कूटियोजनात्मक हथियार (स्ट्ट्रेटेजिक वीपन्स) * (२) समरतांत्रिक हथियार ( टैक्टिकल वीपन) :* (क) आरक्षित हथियार :* (ख) भिड़त हथियार :* (ग) प्रक्षेप हथियार ===आग्नेय हथियारों का वर्गीकरण=== *(१) छोटे आग्नेय हथियार (स्माल आर्म्स) *(२) तोपें (आर्टिलरी) ==हथियारों की विशेषताएँ== कुछ विद्वानों ने हथियारों के निम्नलिखित ३ लक्षण बताये हैं- * सुरक्षा (प्रोटेक्शन) * प्रहारक क्षमता (स्ट्राइकिंग पॉवर) * गतिशीलता (मोबिलिटी) प्रसिद्ध सैन्य विचारक [[जे एफ सी फुलर]] ने हथियारों में निम्नलिखित विशेषताओं का होना अनिवार्य बताया है- * मार की दूरी (range of action) * प्रहारक क्षमता (स्ट्राइकिंग पॉवर) * फायर क्षमता (volume of fire) * अचूकता (accuracy of aim) * वहनीयता (पोर्टेबिलिटी) उपर्युक्त गुणों के साथ-साथ उत्तम हथियारों में निम्नलिखित गुणों का होना भी अत्यन्त आवश्यक होता है- * सरलता * अनुकूलता (adaptability) * दृढ़ता (endurance) * विश्वसनीयता (reliability) * मजबूती (sturdiness) == कवच == [[चित्र:Ballista-quadrirotis.jpeg|right|300px|thumb|चार पहियों वाला 'बैलिस्टिका' जो कवचित घोड़ों द्वारा खींची जा रही है (४०० ई)]] शरीर के विभिन्न अंगों की रक्षा का उल्लेख किया गया है। उदाहरणार्थ शरीर के लिए चर्म तथा कवच का, सिर के लिए '''शिरस्त्राण''' और गले के लिए '''कंठत्राण''' इत्यादि का। [[यूरोप]] में भी इसी प्रकार के शस्त्र बनते थे। 12वीं सदी का कवच लोहे की छोटी-छोटी कड़ियों को गूँथकर बनता था। जिरहबख्तर (जालिका, चेने मेल) सुंदर और सुविधाजनक अवश्य था, पर भारी शस्त्रों की चोट से पूर्णतया रक्षा नहीं कर सकता था। इसलिए 13वीं सदी ई. से यूरोप में लोहे की चादर के आवरण बनने लगे और उन्हें जालिका के ऊपर पहना जाने लगा। योद्धा अब सिर से पाँव तक [[पट्टकवच]] (प्लेट आरमर) से ढका रहता था। शरीर के अवयवों के सरल आंदोलन के लिए इन कवचों में जोड़ बने रहते थे। पीछे अश्व के लिए भी लिए भी ऐसा ही कवच बनने लगा। जालिका भी अश्व तथा मनुष्य दोनों के लिए बनती थी। सवार और अश्व के कवच का भार 200 से 300 पाउंड तक होता था। 13वीं शताब्दी में शस्त्रों की शक्ति में भी उन्नति हुई। अंग्रेजों का लंबा धनुष (लांग बो) इतना शक्तिशाली होता था कि उससे चलाया बाण साधारण कवचों को भेद देता था। यह धनुष छह फुट लंबा होता था और इसका छह फुट का बाण 250 गज तक सुगमता से मार कर सकता था। इसी प्रकार [[स्विट्ज़रलैण्ड|स्विट्ज़रलैंड]] का 'हैलबर्ड कुल्हाड़ा' था। इसका दस्ता आठ फुट का था और कुल्हाड़े के साथ-साथ इसमें [[बरछी]] और सवार को खींचकर गिराने के काम का एक टेढ़ा काँटा भी होता था। दक्ष लड़ाका इसकी चोट से अच्छे कवच को भी काट सकता था। == बारूद एवं आग्नेयास्त्र == [[बारूद]] के आविष्कार ने (1294 ई. में) मनुष्य के हाथ में एक ऐसी शक्ति दे दी जिसने युद्ध की रूपरेखा ही बदल दी। यह निश्चित है कि 14वीं शताब्दी के आरंभ में आग्नेयास्त्र बन चुके थे। प्रथम आग्नेयास्त्र [[तोप]] थी। यह मुख्यत: दो प्रकार की बनाई गई - एक छोटी नालवाली (मॉरटर) और दूसरी लंबी नालीवाली (बंबार्ड)। ये तोपें पहले ताँबे और काँसे की बनीं और फिर लोहे की बनने लगीं। 15वीं शताब्दी में तोपें 30 इंच परिधि की होती थीं और 1,200 से 1,500 पाउंड भार के पत्थर के गोले चलाती थीं। आधुनिक हाविट्ज़र और भारी फ़ील्डगन मॉरटर और बंबार्ड के ही विकसित रूप हैं। इसी शताब्दी के अंत तक छोटी हाथ की तोपें बनीं। इनका स्थान 15वीं शताब्दी के आरंभ में हाथ की [[बंदूक़|बंदूक]] ने लिया। इसी का विकास धीरे-धीरे मस्केट, मैचलॉक, फ्लिंटलॉक और आधुनिक [[राइफल]] में हुआ। तीव्र गति से लगातार गोली चलानेवाली बंदूक बनाने की चेष्टा और इस संबंध के प्रयोग 16वीं शताब्दी से होने लगे थे और इसी के फलस्वरूप 1884 में प्रथम सफल [[मशीन गन|मशीनगन]] बनी। आज की मशीनगन एक मिनट में कई सौ गोलियाँ तक चला सकती है। अन्य महत्वपूर्ण शस्त्रों का भी आविष्कार 14वीं से 16वीं शताब्दी में हुआ, जैसे हाथ का बम (1382 ई.), कांसे के विस्फोटक गोले, [[पिस्तौल]] (1483 ई.), दाहक गोले (1487 ई.), इत्यादि। शस्त्रों का अधिक विकास आधुनिक काल में हुआ। 16वीं शताब्दी तक आग्नेयास्त्र इतने प्रभावशाली बन चुके थे कि मनुष्य के स्वरक्षात्मक कवच व्यर्थ थे। सन् 1915 का मनुष्य आग्नेयास्त्र के सामने असहाय रहा, परंतु इसी वर्ष प्रथम [[टैंक|कवचयान]] (टेंक) का निर्माण हुआ। मनुष्य अब [[इस्पात]] की मोटी-मोटी चादरों से बनी इस गाड़ी में बैठकर हल्के आग्नेयास्त्र के प्रहार से बच सकता था। ; आग्नेयास्त्रों के कार्यकरण का सिद्धान्त [[बंदूक़|बंदूक]], [[राइफल]] और [[तोप|तोपों]] के कार्यकरण का सिद्धांत एक ही है। किसी तीन ओर दृढ़ता से बंद पात्र में बारूद रखी जाती है और इसके बाद छर्रा, गोली या [[गोला]] रखकर चौथी ओर से पात्र को अस्थायी रूप से बंद कर दिया जाता है। फिर बारूद में किसी युक्ति से [[आग]] लगा दी जाती है। तब बारूद तुरंत जलकर गैसों में परिवर्तित हो जाती है। अत्यंत कम स्थान में उत्पन्न होने के कारण ये गैसें बहुत संपीडित (दबी हुई) रहती हैं। इसलिए छरें, गोली या गोले को वे बहुत बलपूर्वक दबाती हैं। गोला जब तक यंत्र के नाल में चलता रहता है तब तक उसपर दाब पड़ती रहती है और उसका वेग बढ़ता रहता है। इस प्रकार उसमें बहुत अधिक वेग उत्पन्न हो जाता है। नाल के कारण उसकी दिशा भी निर्धारित हो जाती है; इसलिए नाल को घुमा फिराकर गोले को इच्छानुसार लक्ष्य पर मारा जा सकता है। == तोप == {{main|तोप}} सन् 1313 ई. से यूरोप में तोप के प्रयोग का पक्का प्रमाण मिलता है। [[भारत]] में [[बाबर]] ने [[पानीपत की लड़ाई]] (सन् 1526 ई.) में तोपों का पहले-पहले प्रयोग किया। पहले तोपें काँसे की बनती थीं और उनको ढाला जाता था। परंतु ऐसी तोपें पर्याप्त पुष्ट नहीं होती थीं। उनमें अधिक बारूद डालने से वे फट जाती थीं। इस दोष को दूर करने के लिए उनके ऊपर लोहे के छल्ले तप्त करके खूब कसकर चढ़ा दिए जाते थे। ठंढा होने पर ऐसे छल्ले सिकुड़कर बड़ी दृढ़ता से भीतरी नाल को दबाए रहते हैं, ठीक उसी प्रकार जैसे बैलगाड़ी के पहिए के ऊपर चढ़ी हाल पहिए को दबाए रहती है। अधिक पुष्टता के लिए छल्ले चढ़ाने के पहले नाल पर लंबाई के अनुदिश भी लोहे की छड़ें एक दूसरी से सटाकर रख दी जाती थीं। इस समय की एक प्रसिद्ध तोप मॉन्स मेग है, जो अब [[एडिनबर्ग|एडिनबरा]] के दुर्ग पर शोभा के लिए रखी है। इसके बाद लगभग 200 वर्षों तक तोप बनाने में कोई विशेष उन्नति नहीं हुई। इस युग में नालों का संछिद्र (बोर) चिकना होता था। परंतु लगभग सन् 1520 में [[जर्मनी]] के एक तोप बनानेवाले ने संछिद्र में सर्पिलाकार खाँचे बनाना आरंभ किया। इस तोप में गोलाकार गोले के बदले लंबोतर "गोले" प्रयुक्त होते थे। संछिद्र में सर्पिलाकार खाँचों के कारण प्रक्षिप्त पिंड वेग से नाचने लगता है। इस प्रकार नाचता (घूर्णन करता) पिंड [[वायु]] के प्रतिरोध से बहुत कम विचलित होता है और परिणामस्वरूप लक्ष्य पर अधिक सच्चाई से पड़ता है। 1855 ई. में [[लार्ड आर्मस्ट्रांग]] ने [[पिटवा लोहा|पिटवाँ लोहे]] की तोप का निर्माण किया, जिसमें पहले की तोपों की तरह मुंह की ओर से बारूद आदि भरी जाने के बदले पीछे की ओर से ढक्कन हटाकर यह सब सामग्री भरी जाती थी। इसमें 40 पाउंड के प्रक्षिप्त भरे जाते थे। साधारण तोपों में प्रक्षिप्त बड़े वेग से निकलता है और तोप की नाल को बहुत ऊँची दिशा में नहीं लाया जा सकता है। दूसरी ओर छोटी नाल की तोपें हल्की बनती हैं और उनसे निकले प्रक्षिप्त में बहुत वेग नहीं होता, परंतु इनमें यह गुण होता है कि प्रक्षिप्त बहुत ऊपर उठकर नीचे गिरता है और इसलिए इससे दीवार, पहाड़ी आदि के पीछे छिपे शत्रु को भी मार सकते हैं। इन्हें '''मॉर्टर''' कहते हैं। मझोली नाप की नालवाली तोप को हाउविट्ज़र कहते हैं। जैसे-जैसे तोपों के बनाने में उन्नति हुई वैसे-वैसे मॉर्टरों और हाउविट्ज़रों के बनाने में भी उन्नति हुई। प्राय: सभी देशों में एक ही प्रकार से तोपों के निर्माण में उन्नति हुई, क्योंकि बराबर होड़ लगी रहती थी। जब कोई एक देश आधिक भारी, अधिक शक्तिशाली या अधिक फुर्ती से गोला दागनेवाली तोप बनाता तो बात बहुत दिनों तक छिपी न रहती और प्रतिद्वंद्वी देशों की चेष्टा होती कि उससे भी अच्छी तोप बनाई जाय। 1898 ई. में [[फ़्रान्स|फ्रांसवालों]] ने एक ऐसी तोप बनाई जो उसके बाद बननेवाली तोपों की पथप्रदर्शक हुई। उससे निकले प्रक्षिप्त का वेग अधिक था; उसका आरोपण सराहनीय था; दागने पर पूर्णतया स्थिर रहता था, क्योंकि आरोपण में ऐसे डैने लगे थे जो भूमि में धँसकर तोप को किसी दिश में हिलने न देते थे। सभी तोपें दागने पर पीछे हटती हैं। इस धक्के (रि-कॉयल) के वेग को घटाने के लिए द्रवों का प्रयोग किया गया था। इसके प्रक्षिप्त पतली दीवार के बनाए थे। इनमें से प्रत्येक की तौल लगभग 12 पाउंड थी और उसमें लगभग साढ़े तीन पाउंड उच्च विस्फोटी बारूद रहती थी। प्रक्षिप्त में विशेष रसायनों से युक्त एक टोपी भी रहती थी, जिससे लक्ष्य पर पहुँचकर प्रक्षिप्त फट जाता था और टुकड़े बड़े वेग से इधर-उधर शत्रु को दूर तक घायल करते थे। यह दीवार के पीछे छिपे सैनिकों को भी मार सकती है। [[पहला विश्व युद्ध|प्रथम विश्वयुद्ध]] (1914-1918) में [[जर्मनी|जर्मनों]] ने 'बिग बर्था' नामक तोप बनाई, जिससे उन्होंने [[पेरिस]] पर 75 मील की दूरी से गोले बरसाना आरंभ किया। इस तोप में कोई नया सिद्धांत नहीं था। तोप केवल पर्याप्त बड़ी और पुष्ट थी। परंतु हवाई जहाजों तथा अन्य नवीन यंत्रों के आविष्कार से ऐसी तोपें अब लुप्तप्राय हो गई हैं। == अग्निबाण (रॉकेट) == अग्निबाण उसी सिद्धांत पर चलते हैं जिसपर दीपावली पर छोड़े जानेवाले बारूद भरे बाण। [[द्वितीय विश्वयुद्ध]] के अंतिम वर्ष में अग्निबाण बहुत कार्यकारी सिद्ध हुए। अग्निबाणप्रेक्षेपक में 30 अग्निबाण तीन-तीन इंच व्यास के लगे रहते थे और प्रत्येक में कॉर्डाइट नामक विस्फोटक भरा रहता था। प्रत्येक के सिर का भार 29 पाउंड था। दागने पर प्रत्येक अग्निबाण 3,900 से 8,000 गज तक जा सकता था। प्रत्येक बिजली के स्विच से दागा जाता था। इन स्विचों को या तो इस प्रकार व्यवस्थित किया जा सकता था कि अग्निबाण आध-आध सेकेंड पर अपने आप छूटते रहें या इच्छानुसार कई अग्निबाण या कुल अग्निबाण एक साथ ही छूटें। उच्च विस्फोटक के इस एकाएक धमाके से शत्रु की सेना को भारी क्षति पहुँचती थी और वह अत्यंत भयभीत हो जाया करती थी। ;दीर्घपरास अग्निबाण द्वितीय महायुद्ध के अंत में जर्मनी ने बिना मानवी संचालक के और बहुत दूर तक पहुँचनेवाले अग्निबाण बनाए, जिनका नाम वी-एस और वी-दो पड़ा। देखने में वी-एक वायुयान के समान होता था। इसमें 130 गैलन पेट्रोल आता था और मशीन का भार लगभग एक टन रहता था। उड़ते समय इसका वेग 350 मील प्रति घंटा हो जाता था और चलने में यह भयानक ध्वनि उत्पन्न करता था। साथ में वी-दो का चित्र दिखाया गया है। इसमें ऐल्कोहल और द्रव ऑक्सीजन का प्रयोग होता था। प्रत्येक बाण में लगभग तीन टन ऐल्कोहल और पाँच टन द्रव ऑक्सीजन भरा रहता था। इसका महत्तम वेग लगभग 3,000 मील प्रति घंटा था। यंत्र की आकृति सिगार की तरह होती थी और बिना ईंधन भार लगभग एक टन। == [[राडार]] == वायुयान इतने वेग से चलते रहते हैं कि उनको तोप से मार गिराना कठिन ही होता था, परंतु अमरीकी वैज्ञानिकों ने राडार और वायुयानघातक तोपों का ऐसा संबंध जोड़ा कि तोप अपने आप वायुयान पर सधी रहती थी। सन् 1944 के उड़न बमों पर विजय इसी से मिली, क्योंकि ये राडारयुक्त तोपें लगभग 70 प्रतिशत ऐसे बमों को मार गिराती थीं। == बम == ये कई प्रकार के होते हैं। कुछ प्रमुख बम जो आजकल के युद्ध में प्रयुक्त किए जाते हैं, निम्नलिखित हैं : 1. विखंडक बम 2. विध्वंसक बम 3. अग्निबम 4. रासायनिक बम 5. जीवाणु बम 6. विकिरण बम '''विखंडक बम''' - इसमें विशेष प्रकार के धातु के खोखले पात्र के भीतर विस्फोटक पदार्थ भरा होता है। जब यह वायुयान अथवा रॉकेट से गिराने पर पृथ्वी से टकराता है तो धमाके के साथ फट जाता है और इसके टुकड़ों से लोग घायल होते हैं। कभी-कभी यह वायुयान से गिराने पर पृथ्वी से कुछ ऊँचाई पर हवा में ही फूट जाता है। इन बमों का कुल भार 2 कि.ग्रा. से लेकर 50 कि.ग्रा. तक होता है। साधारणतया ये बम बड़े क्षेत्रों में गिराए जाते हैं। '''विध्वंसक बम''' - इसका भार 50 कि.ग्रा. से लेकर 1,000 कि.ग्रा. तक होता है। इसमें साधारण विस्फोटक भरा रहता है। '''अग्नि बम''' - ये घनी आबादीवाले शहरों तथा बड़े-बड़े कारखानों पर गिराए जाते हैं जिनसे वे जलकर नष्ट हो जाते हैं। इसमें आग लगानेवाला पदार्थ एक विशेष प्रकार के प्रज्वालक पलीते के साथ भरा होता है। आग लगाने के लिए फासफोरस, नेपाम और थर्माइट इलेक्ट्रान जैसे [[रासायनिक यौगिक]] प्रयुक्त किए जाते हैं और तब इनके नाम प्रयुक्त पदार्थ के अनुसार भी हो जाते हैं। ''''रासायनिक बम''' - यह एक प्रकार का बैलून होता है जिसकी दीवार पतली होती है। यह विषैली वस्तुओं से भरा हुआ होता है। यह बम जमीन अथवा जमीन से कुछ ऊपर हवा में विस्फोट करता है तो विषैली वस्तुएँ, गैस, तरल या ठोस जो भी होती हैं, खोल से बाहर निकलकर जमीन अथवा हवा में बिखर जाती हैं और कुछ ही क्षणों में उस विस्फोट स्थल के आसपास बादल का रूप धारण कर लेती हैं। '''जीवाणु बम''' - इसका भार लगभग 75 क्रि.ग्रा. तक होता है। इसमें कई कक्ष होते हैं। प्रत्येक कक्ष में जीवाणु, रोगग्रस्त कीड़े अथवा जुएँ भरे होते हैं। बम गिराने पर इसमें लगा फ्यूज जल उठता है और इसी समय इसके कक्षों का ढक्क्न, जो कब्जेदार होता है, झटके के साथ खुल जाता है और रोग फैलानेवाले जीवाणु हवा में बिखरकर फैल जाते हैं। यदि इस बम के खोल का ढक्कन जमीन से 30 फुट पर खुल जाता है तो ये जीवाणु लगभग 400 वर्ग मीटर में फैल जाते हैं। जिस क्षेत्र में जीवाणु बम गिराए जाते हैं उसमें मनुष्य, जीव जंतु और पेड़ पौधे आदि सभी रोग के शिकार हो सकते हैं क्योंकि सारा वातावरण दूषित हो जाता है। '''विकिरण बम''' - यह रासायनिक बम की तरह होता है लेकिन इसका खोल कुछ पतला रहता है। इसके भीतर रेडियमधर्मी पदार्थ विस्फोटक पदार्थ के साथ भरा होता है। विस्फोट होने पर ये पदार्थ धूल की तरह हवा में मिल जाते हैं जिससे वहाँ की हवा रेडियमधर्मी पदार्थों से संदूषित हो जाती है। इस प्रकार वहाँ के लोग रेडियमधर्मी विकिरणजन्य रोगों से ग्रस्त हो जाते हैं। == जीवाणु अस्त्र == ये [[परमाणु बम]] एवं [[परमाणु बम|हाइड्रोजन बम]] से भी अधिक भयानक सिद्ध हुए हैं। ये ऐसे अस्त्र हैं जिन्हें छोड़ने पर किसी प्रकार का धमाका नहीं होता है। जीवाणु अस्त्र में रोग फैलानेवाले जीवाणु होते हैं और जिस युद्ध में ये इस्तेमाल किए जाते हैं वह बहुत बीभत्स एवं संहारक होता है। प्रथम विश्वयुद्ध में युद्धभूमि में 51,259 अमरीकी सैनिक मरे थे, पर उसके बाद जीवाणुओं से फैली बीमारी से मरनेवालों की संख्या 51,447 थी। प्राचीन काल में लोग रोगी के शव को दुश्मनों के घेरे में डाल देते थे ताकि उनकी मृत्यु जीवाणुओं के माध्यम से होने लगे। ;जीवाणुकर्मक (रोग पैदा करनेवाले जीव) ये युद्ध में अस्त्रों के रूप में प्रयुक्त किए जाते हैं और कई प्रकार के होते हैं। ये मनुष्यों, पशुओं तथा पौधों में [[संक्रामक रोग]] फैलाते हैं। इनका प्रयोग दुश्मन की युद्ध करने की क्षमता घटाने के लिए होता है। ये जीवाणु उचित वातावरण पाने पर बहुत कम समय में लाखों सैनिकों को रोगग्रस्त कर देते हैं। युद्धास्त्र के रूप में नाना प्रकार के जीवाणु प्रयोग में लाए जाते हैं और प्रत्येक प्रकार के जीवाणु अलग-अलग प्रकार के संक्रामक रोग फैलाते हैं। रोग फैलानेवाले जीवाणुओं के लिए जिन विभिन्न साधनों का उपयोग संभव है उनमें से कुछ साधनों के नाम निम्नलिखित हैं : : ''1. रॉकेट, 2. वायुयान, 3. कीड़े, 4. जीवाणु बम, 5. एयरोसोल, 6. मिसाइल, 7. कुएँ में डालकर। एक बार छोड़ दिए जाने पर ये सूक्ष्मजीवी हवा में बिखर जाते हैं और वायु के साथ-साथ हजारों मील के क्षेत्र में फैल जाते हैं। उदाहरणार्थ बैसिलाई (बैक्टीरिया) को एयरोसोल के द्वारा समुद्रतट से 240 कि॰मी॰ की लंबाई में छोड़ दिया जाए तो ये अपने आप 1,30,800 वर्ग कि॰मी॰ भूभाग में फैल जाएँगे। इस प्रकार उस भूभाग में ये जीवाणु रोग फैलाते हैं। ऐसा पाया गया है कि अस्त्रों के हमले से मरनेवाले सैनिकों की अपेक्षा इन रोगाणुओं के संक्रमण से मरनेवाले सैनिकों की संख्या अधिक होती है। जीवाणुओं के प्रजनन की जो असीम क्षमता है वह जीवाणु अस्त्रों को और अधिक घातक बना देती है। यदि ये जीवाणु एक बार जाते हैं तो इन्हें नष्ट करना आसान नहीं होता। इन जीवाणुओं का कोई विशेष रंग, स्वाद और गंध नहीं होता। इन विशेषताओं के कारण जीवाणु अस्त्रों का महत्त्व दिन-प्रति-दिन बढ़ता जा रहा है। == इन्हें भी देखें == * [[शस्त्र उद्योग]] * [[शस्त्र व्यापार]] * [[आयुधों की सूची]] (List of weapons) * [[सूचना संग्राम]] (Information warfare) * [[बन्दूक]] == बाहरी कड़ियाँ == * [https://hi.wikibooks.org/wiki/शस्त्रास्त्रों_की_अवधारणा,_प्रकार_एवं_इतिहास शस्त्रास्त्रों की अवधारणा, प्रकार एवं इतिहास] * [https://web.archive.org/web/20161012145403/http://www.higgins.org/ Higgins Armory Museum] * [https://web.archive.org/web/20200526183415/https://modernfirearms.net/en/ Modern Firearms Encyclopedia] * [https://web.archive.org/web/20060105152729/http://www.militaryhorse.org/ Society of the Military Horse] * [https://web.archive.org/web/20071010032457/http://news.bbc.co.uk/1/hi/world/americas/4808342.stm Pentagon plans cyber-insect army] * [http://fas.org/man/dod-101/sys/index.html Weapon Systems] {{Webarchive|url=https://web.archive.org/web/20210816060542/http://fas.org/man/dod-101/sys/index.html |date=16 अगस्त 2021 }} * [https://web.archive.org/web/20110707151209/http://www.antiquestopic.com/category/antique-firearms/ Antique firearms] [[श्रेणी:आयुध]] [[श्रेणी:सुरक्षा]] [[श्रेणी:शस्त्र]] 3gnf0gr96tspobxpyi862rov4rlrrtd परीक्षित साहनी 0 25407 6587038 6165998 2026-07-18T11:10:31Z ~2026-39432-80 936826 /* */ 6587038 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name = परीक्षत साहनी | image = ParikshitSahni.jpg | imagesize = | alt = | caption = 2011 में परीक्षत साहनी | birthname = | birth_date = {{Birth date and age|1939|01|01}} | birth_place = मर्री, पंजाब, ब्रतानी भारत (वर्तमान में [[पाकिस्तान]] में) | death_date = <!-- {{Death date and age|YYYY|MM|DD|YYYY|MM|DD}} Death date then birth --> | death_place = | othername = | occupation = [[अभिनेता]] | yearsactive = 1968&ndash;वर्तमान | spouse = | domesticpartner = | website = }} '''परीक्षत साहनी''' [[हिन्दी]] फ़िल्मों के एक [[अभिनेता]] हैं। वह विख्यात अभिनेता [[बलराज साहनी]] के पुत्र हैं। == व्यक्तिगत जीवन परिक्षत सहनी का जन्म 1944 ई पाकिस्तान के प्रांत पंजाब के मरी मे हुआ था प्रमंभिक शिक्षा मैट्रिक पास की फिर 1958 मे भौतिक शास्त्र से स्नातक बम्बई से किया == == प्रमुख फिल्में== {| border="2" cellpadding="4" cellspacing="0" width="95%" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;" |- bgcolor="#CCCCCC" align="center" ! वर्ष !! फ़िल्म !! चरित्र !! टिप्पणी |- |[[:श्रेणी:2009 में बनी हिन्दी फ़िल्म|2009]] || [[थ्री इडियट (2009 फ़िल्म)|थ्री इडियट]] || मि• कुरैशी || |- |[[:श्रेणी:2007 में बनी हिन्दी फ़िल्म|2007]] || [[एकलव्य (2007 फ़िल्म)|एकलव्य]] || || |- |[[:श्रेणी:2006 में बनी हिन्दी फ़िल्म|2006]] || [[लगे रहो मुन्ना भाई]] || डिसूज़ा || |- |[[:श्रेणी:2006 में बनी हिन्दी फ़िल्म|2006]] || [[उमराव जान (2006 फ़िल्म)|उमराव जान]] || || |- |[[:श्रेणी:2002 में बनी हिन्दी फ़िल्म|2002]] || [[ये मोहब्बत है (2002 फ़िल्म)|ये मोहब्बत है]] || || |- |[[:श्रेणी:2002 में बनी हिन्दी फ़िल्म|2002]] || [[मुझसे दोस्ती करोगे]] || मिस्टर वर्मा || |- |[[:श्रेणी:2001 में बनी हिन्दी फ़िल्म|2001]] || [[कसम (2001 फ़िल्म)|कसम]] || ठाकुर जसवंत सिंह || |- |[[:श्रेणी:1998 में बनी हिन्दी फ़िल्म|1998]] || [[वजूद]] || || |- |[[:श्रेणी:1997 में बनी हिन्दी फ़िल्म|1997]] || [[साज़ (1997 फ़िल्म)|साज़]] || || |- |[[:श्रेणी:1997 में बनी हिन्दी फ़िल्म|1997]] || [[शेयर बाज़ार (1997 फ़िल्म)|शेयर बाज़ार]] || || |- |[[:श्रेणी:1996 में बनी हिन्दी फ़िल्म|1996]] || [[छोटा सा घर (1996 फ़िल्म)|छोटा सा घर]] || || |- |[[:श्रेणी:1995 में बनी हिन्दी फ़िल्म|1995]] || [[अब इंसाफ़ होगा (1995 फ़िल्म)|अब इंसाफ़ होगा]] || इंस्पेक्टर ख़ान || |- |[[:श्रेणी:1994 में बनी हिन्दी फ़िल्म|1994]] || [[यूंही कभी (1994 फ़िल्म)|यूंही कभी]] || जज || |- |[[:श्रेणी:1993 में बनी हिन्दी फ़िल्म|1993]] || [[शक्तिमान (1993 फ़िल्म)|शक्तिमान]] || || |- |[[:श्रेणी:1993 में बनी अंग्रेजी फ़िल्म|1993]] || [[इन कस्टडी (1993 फ़िल्म)|इन कस्टडी]] || || अंग्रेजी फ़िल्म |- |[[:श्रेणी:1993 में बनी हिन्दी फ़िल्म|1993]] || [[कुंदन (1993 फ़िल्म)|कुंदन]] || मुख्य मंत्री || |- |[[:श्रेणी:1993 में बनी हिन्दी फ़िल्म|1993]] || [[प्यार का तराना (1993 फ़िल्म)|प्यार का तराना]] || || |- |[[:श्रेणी:1992 में बनी हिन्दी फ़िल्म|1992]] || [[आज का गुंडाराज (1992 फ़िल्म)|आज का गुंडाराज]] || अमर || |- |[[:श्रेणी:1991 में बनी हिन्दी फ़िल्म|1991]] || [[फूल बने अंगारे (1991 फ़िल्म)|फूल बने अंगारे]] || दत्ता बाबू || |- |[[:श्रेणी:1990 में बनी हिन्दी फ़िल्म|1990]] || [[अव्वल नम्बर (1990 फ़िल्म)|अव्वल नम्बर]] || || |- |[[:श्रेणी:1989 में बनी हिन्दी फ़िल्म|1989]] || [[गलियों का बादशाह (१९८९ फ़िल्म)|गलियों का बादशाह]] || राना || |- |[[:श्रेणी:1988 में बनी हिन्दी फ़िल्म|1988]] || [[एक आदमी (1988 फ़िल्म)|एक आदमी]] || || |- |[[:श्रेणी:1988 में बनी हिन्दी फ़िल्म|1988]] || [[विजय (१९८८ फ़िल्म)|विजय]] || मेहरा || |- |[[:श्रेणी:1987 में बनी हिन्दी फ़िल्म|1987]] || [[शेर शिवाजी (1987 फ़िल्म)|शेर शिवाजी]] || || |- |[[:श्रेणी:1987 में बनी हिन्दी फ़िल्म|1987]] || [[दिल तुझको दिया (1987 फ़िल्म)|दिल तुझको दिया]] || अजय साहनी || |- |[[:श्रेणी:1987 में बनी हिन्दी फ़िल्म|1987]] || [[कलयुग और रामायण (1987 फ़िल्म)|कलयुग और रामायण]] || || |- |[[:श्रेणी:1987 में बनी हिन्दी फ़िल्म|1987]] || [[वतन के रखवाले (1987 फ़िल्म)|वतन के रखवाले]] || मदन || |- |[[:श्रेणी:1986 में बनी हिन्दी फ़िल्म|1986]] || [[कार थीफ (1986 फ़िल्म)|कार थीफ]] || || |- |[[:श्रेणी:1985 में बनी हिन्दी फ़िल्म|1985]] || [[मेरा जवाब (1985 फ़िल्म)|मेरा जवाब]] || || |- |[[:श्रेणी:1985 में बनी हिन्दी फ़िल्म|1985]] || [[शिवा का इन्साफ (1985 फ़िल्म)|शिवा का इन्साफ]] || रॉबर्ट || |- |[[:श्रेणी:1985 में बनी हिन्दी फ़िल्म|1985]] || [[जवाब (1985 फ़िल्म)|जवाब]] || || |- |[[:श्रेणी:1985 में बनी हिन्दी फ़िल्म|1985]] || [[मेरी जंग]] || || |- |[[:श्रेणी:1985 में बनी हिन्दी फ़िल्म|1985]] || [[रामकली (१९८५ फ़िल्म)|रामकली]] || ठाकुर जय सिंह || |- |[[:श्रेणी:1984 में बनी हिन्दी फ़िल्म|1984]] || [[तेरी बाहों में (1984 फ़िल्म)|तेरी बाहों में]] || || |- |[[:श्रेणी:1984 में बनी हिन्दी फ़िल्म|1984]] || [[बॉक्सर (1984 फ़िल्म)|बॉक्सर]] || || |- |[[:श्रेणी:1984 में बनी हिन्दी फ़िल्म|1984]] || [[जाग उठा इंसान (1984 फ़िल्म)|जाग उठा इंसान]] || || |- |[[:श्रेणी:1984 में बनी हिन्दी फ़िल्म|1984]] || [[अंदर बाहर (1984 फ़िल्म)|अंदर बाहर]] || || |- |[[:श्रेणी:1983 में बनी हिन्दी फ़िल्म|1983]] || [[लाल चुनरिया (1983 फ़िल्म)|लाल चुनरिया]] || राजेश || |- |[[:श्रेणी:1982 में बनी हिन्दी फ़िल्म|1982]] || [[सुराग (1982 फ़िल्म)|सुराग]] || || |- |[[:श्रेणी:1982 में बनी हिन्दी फ़िल्म|1982]] || [[देश प्रेमी (1982 फ़िल्म)|देश प्रेमी]] || || |- |[[:श्रेणी:1982 में बनी हिन्दी फ़िल्म|1982]] || [[तहलका (1992 फ़िल्म)|तहलका]] || || |- |[[:श्रेणी:1981 में बनी हिन्दी फ़िल्म|1981]] || [[अग्नि परीक्षा (1981 फ़िल्म)|अग्नि परीक्षा]] || || |- |[[:श्रेणी:1981 में बनी हिन्दी फ़िल्म|1981]] || [[समीरा (1981 फ़िल्म)|समीरा]] || || |- |[[:श्रेणी:1980 में बनी हिन्दी फ़िल्म|1980]] || [[कस्तूरी (1980 फ़िल्म)|कस्तूरी]] || || |- |[[:श्रेणी:1980 में बनी हिन्दी फ़िल्म|1980]] || [[हमकदम (1980 फ़िल्म)|हमकदम]] || || |- |[[:श्रेणी:1979 में बनी हिन्दी फ़िल्म|1979]] || [[काला पत्थर (1979 फ़िल्म)|काला पत्थर]] || जग्गा || |- |[[:श्रेणी:1978 में बनी हिन्दी फ़िल्म|1978]] || [[मुकद्दर (1978 फ़िल्म)|मुकद्दर]] || || |- |[[:श्रेणी:1978 में बनी हिन्दी फ़िल्म|1978]] || [[विश्वनाथ (1978 फ़िल्म)|विश्वनाथ]] || सिद्धार्थ || |- |[[:श्रेणी:1978 में बनी हिन्दी फ़िल्म|1978]] || [[काला आदमी (1978 फ़िल्म)|काला आदमी]] || || |- |[[:श्रेणी:1977 में बनी हिन्दी फ़िल्म|1977]] || [[प्रायश्चित (1977 फ़िल्म)|प्रायश्चित]] || || |- |[[:श्रेणी:1977 में बनी हिन्दी फ़िल्म|1977]] || [[जीवन मुक्त (1977 फ़िल्म)|जीवन मुक्त]] || सतीश शर्मा || |- |[[:श्रेणी:1977 में बनी हिन्दी फ़िल्म|1977]] || [[जलियाँ वाला बाग़ (1977 फ़िल्म)|जलियाँ वाला बाग़]] || || |- |[[:श्रेणी:1977 में बनी हिन्दी फ़िल्म|1977]] || [[दूसरा आदमी]] || भीष्म || |- |[[:श्रेणी:1976 में बनी हिन्दी फ़िल्म|1976]] || [[तपस्या (1976 फ़िल्म)|तपस्या]] || डॉक्टर सागर वर्मा || |- |[[:श्रेणी:1976 में बनी हिन्दी फ़िल्म|1976]] || [[कभी कभी (1976 फ़िल्म)|कभी कभी]] || डॉक्टर आर पी कपूर || |- |[[:श्रेणी:1973 में बनी हिन्दी फ़िल्म|1973]] || [[हिन्दुस्तान की कसम (1973 फ़िल्म)|हिन्दुस्तान की कसम]] || राजेश || |- |[[:श्रेणी:1970 में बनी हिन्दी फ़िल्म|1970]] || [[आँसू और मुस्कान (1970 फ़िल्म)|आँसू और मुस्कान]] || || |- |}[:श्रेणी:2009 में बनी हिन्दी फ़िल्म 2009 ३ इडियट श्री कुरैशी फरहान के पिता == नामांकन और पुरस्कार == == सन्दर्भ == == बाहरी कड़ियाँ == * {{imdb name|id=0756378|name=Parikshat Sahni}} [[श्रेणी:जीवित लोग]] [[श्रेणी:हिन्दी अभिनेता]] [[श्रेणी:1940 में जन्मे लोग]] [[श्रेणी:भारतीय फ़िल्म अभिनेता]] {{जीवनचरित-आधार}} iouz45r8964eucxqjvvj6gr3sw0uz42 मुरलीगंज 0 34873 6586917 5935566 2026-07-17T18:23:15Z ~2026-40054-98 936740 /* */ 6586917 wikitext text/x-wiki {{Infobox settlement |name = मुरलीगंज |other_name = Murliganj |image = |image_caption = |pushpin_label = मुरलीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.90|86.98|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 28691 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मुरलीगंज''' (Murliganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर पंचायत है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> Bhola Paswan Shastri [Inter and Degree] College Babhangama Bihariganj Madhepura is a popular College in Madhepura District.It is affiliated from B.S.E.B(63023),B.B.O.S.E[Bihar Board of Open Schooling and Examination PATNA](CZ19200001),N.I.O.S DELHI(030049)AND[030050].Principal-Atulesh Verma(Babul Ji).Coordinator-Akhilesh Kumar,Ratnesh Kumar,Sunil Devi,Nageshwar lal Das,Madan Mohan etc.Director-Dinanath Prabodh[1980].Gandhi Gyan Mandir Babhangama Bihariganj Madhepura And Arya Samaj Rajni Babhangama Bihariganj Madhepura From Affiliated. == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] * मधेपुरा की विशेषता * [[Ranaramanindian|राणा रमन इंडियन]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] clr0pjfkw3jg0uj8l0o6l20xmzks2g4 6586922 6586917 2026-07-17T18:41:54Z चाहर धर्मेंद्र 703114 [[Special:Contributions/~2026-40054-98|~2026-40054-98]] ([[User talk:~2026-40054-98|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586917|6586917]] को पूर्ववत किया 6586922 wikitext text/x-wiki {{Infobox settlement |name = मुरलीगंज |other_name = Murliganj |image = |image_caption = |pushpin_label = मुरलीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.90|86.98|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 28691 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मुरलीगंज''' (Murliganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर पंचायत है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] * मधेपुरा की विशेषता * [[Ranaramanindian|राणा रमन इंडियन]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] syqixq94hi76aidkh2ekyjkftd8oped 6586923 6586922 2026-07-17T18:42:23Z चाहर धर्मेंद्र 703114 [[Special:Contributions/A Rana Kumar Thakur|A Rana Kumar Thakur]] ([[User talk:A Rana Kumar Thakur|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/5935566|5935566]] को पूर्ववत किया 6586923 wikitext text/x-wiki {{Infobox settlement |name = मुरलीगंज |other_name = Murliganj |image = |image_caption = |pushpin_label = मुरलीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.90|86.98|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 28691 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मुरलीगंज''' (Murliganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर पंचायत है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] * मधेपुरा की विशेषता * राणा रमन इंडियन == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] 5orhlsfu4oet52061u7i4ie1ecygeai 6586924 6586923 2026-07-17T18:43:12Z चाहर धर्मेंद्र 703114 [[Special:Diff/5909193|5909193]] से [[Special:Diff/5909194|5909194]] तक 2 अवतरण पूर्ववत किए 6586924 wikitext text/x-wiki {{Infobox settlement |name = मुरलीगंज |other_name = Murliganj |image = |image_caption = |pushpin_label = मुरलीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.90|86.98|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 28691 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मुरलीगंज''' (Murliganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर पंचायत है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C |date=18 जनवरी 2017 }}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] 3yv70qxy5gporu50rwxl09c53j0d57u मालदा जिला 0 34943 6587037 6527234 2026-07-18T10:55:14Z ~2026-40147-68 936823 /* */ 6587037 wikitext text/x-wiki {{ज्ञानसन्दूक प्रांत |province_name = मालदा ज़िला<br /><small>Malda district</small><br /><small>মালদহ জেলা</small> |loc_map = Malda in West Bengal (India).svg |capital = [[मालदा टाउन]] |area = 3,733 |pop = 39,97,970 |pop_year = 2011 |pop_density = 1,100 |sub_province_title = विधान सभा सीटें |sub_provinces = ? |languages= [[बंगाली भाषा|बाङ्ला]] }} '''मालदा''' (মালদা) [[भारत]] के [[पश्चिम बंगाल]] राज्य का एक जिला है। इसका मुख्यालय [[मालदा टाउन]] है।<ref>"[https://books.google.com/books?id=DKp9BAAAQBAJ Lonely Planet West Bengal: Chapter from India Travel Guide]," Lonely Planet Publications, 2012, ISBN 9781743212202</ref><ref>"[https://books.google.com/books?id=FtMNn5roPssC Kolkata and West Bengal Rough Guides Snapshot India]," Rough Guides, Penguin, 2012, ISBN 9781409362074</ref> पश्चिम बंगाल में [[मुस्लिम]] आबादी के लिहाज से [[मुर्शिदाबाद जिला|मुर्शिदाबाद]] के बाद मालदा दूसरे नंबर पर है। मालदा ज़िले में मुसलमानों की आबादी करीब फ़ीसदी है।<ref>{{cite web|url=https://www.bbc.com/hindi/india-56387705|title=पश्चिम बंगाल चुनाव: मुसलमान बहुल मालदा में इस बार का समीकरण जानिए}}</ref> {{bar box |title=Religion in Malda <ref name="Census 2011">{{cite web |title=Maldah Religion-wise Data 2011 |url=https://www.census2011.co.in/census/district/6-maldah.html |publisher=census2011.co |access-date=29 November 2018}}</ref> |titlebar=#Fcd116 |left1=Malda |right1=Percent |float=left |width= |bars= {{bar percent|[[मुस्लिम]]|green|५१.२७}} {{bar percent|[[हिंदु]]|DarkOrange|४७.९९}} {{bar percent|[[इसाई]]|blue|०.३३}} {{bar percent|[[सिख]]|yellow|०.०२}} {{bar percent|और|pink|०.३९}} }} == इन्हें भी देखें == * [[मालदा टाउन]] * [[कचुपुकुर]] * [[गौड़ (नगर)]] * [[आई.एम.पी.एस अभियान्त्रिकी एवं प्रौद्योगिकी महाविद्यालय]] ==बाहरी कड़ियाँ== * [https://web.archive.org/web/20090505145010/http://malda.nic.in/ आधिकारिक जालस्थल] * [https://web.archive.org/web/20190402170840/http://rangan-datta.info/Gour.htm रंगन दत्ता द्वारा लिखित गौड़ पुरातत्व स्थल का एक यात्रावृत्तांत] == सन्दर्भ == {{reflist}} {{पश्चिम बंगाल के जिले}} [[श्रेणी:पश्चिम बंगाल के जिले]] [[श्रेणी:मालदा ज़िला|*]] 74ahl92fo69zzr4qu8xui4tq8bb6ao5 इमानुएल काण्ट 0 39413 6587039 5986124 2026-07-18T11:16:13Z Birkho 800510 + हस्ताक्षर 6587039 wikitext text/x-wiki {{स्रोतहीन}} {{Infobox philosopher | name = इमानुएल कांट | image = Immanuel Kant portrait c1790.jpg | birth_date = {{birth date|1724|4|22|df=yes}} | birth_place = [[Königsberg]], [[Kingdom of Prussia|Prussia]] (now [[Kaliningrad]], [[रूस|Russia]]) | death_date = {{nowrap|{{death date and age|df=yes|1804|02|12|1724|04|22}}}} | death_place = Königsberg, Prussia | residence = Königsberg, Prussia | nationality = Prussian | region = [[Western philosophy]] | era = [[18th-century philosophy]] | main_interests = {{hlist |[[Epistemology]] |[[Metaphysics]] |[[Ethics]] |[[Cosmogony]]}} | school_tradition = {{ublist|class=nowrap |[[Kantianism]] |[[Age of Enlightenment|Enlightenment philosophy]]}} | notable_ideas = {{ublist|class=nowrap |[[Categorical imperative]] |[[Transcendental idealism]] |[[Analytic–synthetic distinction|Synthetic ''a priori'']] |{{hlist|[[Noumenon]]|''[[Sapere aude]]''}} |[[Nebular hypothesis]]}} | influences = {{hlist |[[Christian Wolff (philosopher)|Wolff]] |[[Alexander Baumgarten|Baumgarten]] |[[प्लेटो]] |[[अरस्तु]] |[[Sextus Empiricus|Empiricus]] |[[डेविड ह्यूम|ह्यूम]] |[[एडम स्मिथ|स्मिथ]] |[[रेने देकार्त|देकार्त]] |[[बारूथ स्पिनोज़ा|स्पिनोज़ा]] |[[गाटफ्रीड लैबनिट्ज़|लैबनिट्ज़]] |[[जॉन लॉक|लॉक]]| [[रूसो]] |[[आइज़क न्यूटन|न्यूटन]] |[[Emanuel Swedenborg|Swedenborg]] |[[यूक्लिड]] |[[एपिकुरुस]]}} | influenced = {{hlist |Virtually all subsequent [[Western philosophy]], notably: [[जोहान्न गोत्त्लिएब फिचते|फिचते]] |[[फ्रेडरिख शेलिंग|शेलिंग]] |[[Friedrich Heinrich Jacobi|Jacobi]]|[[Karl Leonhard Reinhold|Reinhold]] |[[Karl Wilhelm Friedrich Schlegel|F. Schlegel]] |[[August Wilhelm Schlegel|A.W. Schlegel]] |[[जार्ज विल्हेम फ्रेड्रिक हेगेल|हेगेल]] |[[आर्थर शोपेनहावर|शोपेनहावर]] |[[फ्रेडरिक नीत्शे|नीत्शे]] |[[चार्ल्स सैंडर्स पियर्स|पियर्स]] |[[एडमंड हुसर्ल|हुसर्ल]] |[[मार्टिन हाइडेगर|हाइडेगर]] |[[Ernst Cassirer|Cassirer]] |[[Jürgen Habermas|Habermas]] |[[जॉन राल्स|राल्स]] |[[नोआम चाम्सकी|चाम्सकी]] |[[Jean Piaget|Piaget]] |[[सोरेन किर्केगार्द|किर्केगार्द]] |[[T.W. Adorno]] |[[David Hilbert|Hilbert]] |[[मिशेल फूको|फूको]] |[[मैक्स वेबर|वेबर]] |[[P. F. Strawson|Strawson]] |[[Leo Strauss|Strauss]] |[[John McDowell|McDowell]] |[[Georg Simmel|Simmel]] |[[Joxe Azurmendi|Azurmendi]] |[[Paul Guyer|Guyer]] |[[T. K. Seung|Seung]] |[[Thomas Pogge|Pogge]] |[[Mou Zongsan|Zongsan]] |[[Robert Nozick|Nozick]] |[[मुहम्मद इक़बाल|इक़बाल]] }} | signature = Unterschrift Immanuel Kant deutscher Philosoph der Aufklärung.svg }} '''इमानुएल कांट''' (1724-1804) जर्मन [[वैज्ञानिक]], [[नीतिशास्त्र|नीतिशास्त्री]] एवं [[दार्शनिक]] थे। उसका वैज्ञानिक मत "कांट-लाप्लास परिकल्पना" (हाइपॉथेसिस) के नाम से विख्यात है। उक्त परिकल्पना के अनुसार संतप्त वाष्पराशि नेबुला से सौरमंडल उत्पन्न हुआ। कांट का नैतिक मत "नैतिक शुद्धता" (मॉरल प्योरिज्म) का सिद्धांत, "कर्तव्य के लिए कर्तव्य" का सिद्धांत अथवा "कठोरतावाद" (रिगॉरिज्म) कहा जाता है। उसका दार्शनिक मत "आलोचनात्मक दर्शन" (क्रिटिकल फ़िलॉसफ़ी) के नाम से प्रसिद्ध है। इमानुएल कांट अपने इस प्रचार से प्रसिद्ध हुए कि मनुष्य को ऐसे कर्म और कथन करने चाहियें जो अगर सभी करें तो वे मनुष्यता के लिये अच्छे हों। == जीवनी == इमानुएल कांट [[जर्मनी]] के पूर्वी प्रशा प्रदेश के अंतर्गत, कोनिगुज़बर्ग (Königsland) नगर में घोड़े का साधारण साज बनानेवाले के घर 22 अप्रैल सन् 1724 ई. को पैदा हुए थे। कोनिगुज़बर्ग शहर आज [[रूस]] में है और अब इसका नाम कालिनिनग्राद [[Kaliningrad]] है। उसकी प्रारंभिक शिक्षा अपनी माता की देखरेख में हुई थी, जो अपने समय के "पवित्र मार्ग" (पायाटिज्म) नामक धार्मिक आंदोलन से बहुत प्रभावित थी। अतएव, अल्पायु में ही वह धर्मानुमोदित आचरण, सरल, सुव्यवस्थित एवं अध्यवसायपूर्ण जीवन में रुचि रखने लगा था। 16 वर्ष की आयु में, "कॉलेजियम फ़ीडेरिकियेनम" की शिक्षा समाप्त कर, वह कोनिग्ज़बर्ग के विश्वविद्यालय में प्रविष्ट हुआ, जहाँ छह वर्ष (1746 ई. तक) उसने [[भौतिक शास्त्र|भौतिकशास्त्र]], [[गणित]], [[दर्शनशास्त्र|दर्शन]] एवं [[धर्मशास्त्र]] का अध्ययन किया। विश्वविद्यालय छोड़ने के बाद कांट नौ वर्षों के लिए, कोनिग्ज़बर्ग से 60 मील दूर, जुड्स्केन नामक गाँव में चला गया। वहाँ वह दो तीन परिवारों में अध्यापन कार्य कर अपनी जीविका चलाता और भौतिकशास्त्र तथा दर्शन में स्वाध्याय करता रहा। इस बीच उसके बहुत से लेख तथा लघुग्रंथ प्रकाशित हुए, जिनमें से दो–"जीवित शक्तियों के उचित अनुमान पर विचार" (थाट्स अपॉन द ट्रू एस्टिमेशन ऑव लिविंग फ़ोर्सेज़, 1747 ई.) तथा "सामान्य प्राकृतिक इतिहास एवं आकाशसंबंधी सिद्धांत" (जनरल नैचुरल हिस्ट्री ऐंड थ्योरी ऑव हेवेन, 1755 ई.) विशेष उल्लेख हैं। इनमें से प्रथम प्रकाशन में उसने [[रेने देकार्त]] (1596-1650 ई.) तथा गॉटफ़्रीड विल्हेल्म लीबनित्स (1646-1716 ई.) के सत्ता संबंधी विचारों का तथा दूसरे में [[न्यूटन (इकाई)|न्यूटन]] तथा लीबनित्स के यांत्रिक एवं प्रयोजनतावादी विचारों का तथा दूसरे में न्यूटन तथा लीबनित्स के यांत्रिक एवं प्रयोजनतावादी विचारों में समन्वय करने का प्रयत्न किया था। उसने "डाक्टर लेजेंस" की उपाधि के निमित्त आवश्यक प्रबंध भी 1755 ई. में प्रस्तुत कर दिया था और कोनिग्ज़बर्ग विश्वविद्यालय ने उसे उक्त उपाधि प्रदान कर उसकी योग्यता प्रमाणित की थी। किंतु उसकी व्यक्तिगत समस्याओं में कोई परिवर्तन न हुआ। विश्वविद्यालय ने उसके नौ वर्ष के परिश्रम से प्रसन्न होकर उसे विशिष्ट व्याख्याता (प्राइवेट डोज़ेंट) नियुक्त कर लिया था, किंतु इस कार्य के लिए उसे वेतन कुछ भी नहीं मिलता था। कांट ने, विषम परिस्थितियों के बावजूद, 1766 ई. तक विश्वविद्यालय की अवैतनिक रूप से सेवा की। 1758 ई. में उसने तर्क और दर्शन के मुख्य अध्यापक पद के लिए प्रार्थना की थी, किंतु वह असफल रहा। 1766 ई. में उसे अध्यापन के साथ-साथ सहायक पुस्तकालय प्रबंधक भी नियुक्त किया गया और अब उसे दस पौंड वार्षिक वेतन मिलने लगा। चार वर्षों तक कांट ने इस रूप में भी कार्य किया, किंतु उसने अध्ययन चिंतन और लेखन कार्य जारी रखा। "प्राइवेट डोज़ेंट" नियुक्त होने के बाद से 1770ई तक उसके पाँच प्रकरण ग्रंथ प्रकाशित हुए– * (1) "न्याय के चार आकारों की मिथ्या सूक्ष्मता" (आनॅ द फ़ाल्स सट्लिटी ऑव द फ़ोर सिलोजिस्टिक फ़िगर्स, 1762), * (2) "दर्शन में अभावात्मक परिमाण की धारणा के समावेश का प्रयत्न" (अटेंप्ट टु इंट्रोडयूस द नोशन ऑव नेगेटिव क्वांटिटी इंटु, फ़िलॉसफ़ी, *1763), *(3) "ईश्वर के अस्तित्व का एकमात्र प्रमाण" (ओन्ली पॉसिब्ल् प्रूफ़ ऑव द एग्ज़िस्टेंस ऑव गॉड, 1763), * (4) "दर्शन के स्वप्नों द्वारा आत्मवादी के स्वप्नों की व्याख्या" (ड्रीम्स ऑव ए स्पिरिचुअलिस्ट बाइ द ड्रीम्स ऑव मेटाफ़िज़िक, 1766), * (5) "देश की वस्तुओं के भेद के प्रथम आधार पर" (ऑन द फ़र्स्ट ग्राउंड ऑव द डिस्टिंक्शन ऑव ऑबजेक्ट्स् इन स्पेस, 1768)। उपर्युक्त ग्रंथों के शीर्षकों से पता चलता है कि 1755 और 1770 ई. के बीच का समय कांट के विचारों के निर्माण का था। सन् 1770 ई. में प्रकाशित लातीनी स्थापनालेख (डिज़र्टेशन)–"संसार की समझ और बुद्धि के आकार एवं सिद्धांत" (दी मुंदी सेंसिबिलिस एत इंतेलीजिबिलिस फ़ार्मा एत प्रिंसिपिइस) से उसका चिंतन व्यवस्थित रूप में विकसित होता दिखाई देता है। इसी वर्ष, वह कोनिग्ज़बर्ग विश्वविद्यालय में तर्क और दर्शन के उसी अध्यापक पद पर नियुक्त हुआ, जिसके लिऐ उसे 12 वर्ष पूर्व निराश होना पड़ा था। पहले से अब वह चिंतामुक्त भी हो गया था क्योंकि उसे 60 पौंड वार्षिक वेतन मिलने लगा था। उन दिनों इतना वेतन सम्मानित अध्यापकों को ही दिया जाता था। ग्रंथों के प्रकाशन से भी कोई बड़ी धनराशि नहीं प्राप्त होती थी। अपने "क्रिटीक ऑव प्योर रीज़न" से कांट को केवल 30 पौंड आय हुई थी। किंतु, भौतिक सुखों की आकांक्षा न कर, 1796 ई. तक वह सक्रिय रूप से संसार के ज्ञानकोश की अभिवृद्धि के निमित्त प्रयत्न करता रहा। इन 26 वर्षों में से आदि के 12 वर्ष उसने केवल एक पुस्तक ""शुद्ध बुद्धि की समीक्षा" (क्रिटिक ऑव प्योर रीज़न) के लिखने में व्यतीत किए। उक्त ग्रंथ 1781 ई. में प्रकाशित हुआ था। कांट के प्रौढ़ ग्रंथों में यह सर्वश्रेष्ठ दार्शनिक ग्रंथ माना जाता है। इस काल के अन्य ग्रंथ "प्रत्येक भावी दर्शन की भूमिका" (प्रोलेगोमेना टु एव्री फ़्यूचर मेटाफ़िज़िक, 1783), "नीतिदर्शन की पृष्ठभूमि" (द ग्राउंड वर्क ऑव द मेटाफ़िज़िक्स ऑव मॉरल्स, 1786), "प्राकृतिक विज्ञान के दार्शनिक आधार" (मेटाफ़िज़िकल फ़ाउंडेशंस ऑव नैचुरल साइस, 1787), "व्यावहारिक बुद्धि की समीक्षा" (क्रिटोक ऑव प्रैक्टिकल रीज़न, 1788), "निर्णय की समीक्षा" (क्रिटाक ऑव जजमेंट, 1790), "केवल बुद्धि द्वारा सीमित धर्म" (रिलीजन विदिन द लिमिट्स ऑव मिअर रीज़न, 1793), तथा "शाश्वत शांति पर" (आन एवरलास्टिंग पीस, 1795)। 1796 ई. के बाद भी वह अध्ययन, चिंतन एवं लेखन में व्यस्त रहा किंतु उसके जीवन के ये आठ वर्ष बड़ी दयनीय दशा में व्यतीत हुए। उसकी स्मृति इतनी क्षीण हो गई थी कि उसे छोटी-मोटी बातें भी लिखकर याद रखनी पड़ती थीं। स्वयं अपने घर की देखभाल करने की शक्ति उसमें नहीं थी; विवाह उसने किया नहीं था, किंतु 42 वर्ष के अध्यापन काल में उसने अपने सहयोगियों एवं विद्यार्थियों पर अच्छा प्रभाव डाला था। अतएव मित्रों एवं शिष्यों से उसे अपने जीवन के अंतिम भाग में काफी सहायता एवं सहानुभूति प्राप्त हुई। सन् 1801 ई. के बाद तो वह बहुत ही अशक्त हो गया था, किंतु अंतिम तीन वर्षों में वेसियांस्की नामक उसके शिष्य ने साथ रहकर अहर्निश उसकी देखभाल की। आश्चर्य की बात है कि इस काल के लिखे हुए कांट के सात ग्रंथ उपलब्ध हैं– "नीतिदर्शन" (मेटाफ़िजिक्स ऑव मॉरल्स, 1797), "नैतिक गुण के सिद्धांत के दार्शनिक आधार" (मेटाफ़िज़िकल फ़ाउंडेशंस ऑव द थ्योरी ऑव वर्चू, 1796-97), "मानस शक्तियों का अंतविरोध, (द कॉन्फ़्लिक्ट ऑव फ़ैकल्टीज़, 1798), "व्यावहारिक दृष्टि से नृशास्त्र" (ऐंथ्रपॉलॉजी फ्रांम द प्रैक्टिकल प्वाइंट ऑव व्यू, 1798), "तर्कशास्त्र (लॉजिक, 1800), "भौतिक भूगोल" (1802) तथा "शिक्षाशास्त्र" (पेडॉगॉजिक्स, 1802)। इतना कार्य करने के बाद 12 फ़रवरी 1804 ई. को कोनिग्ज़बर्ग में उसकी मृत्यु हुई। कांट का व्यक्तिगत जीवन अटल नियमों से जकड़ा हुआ था। प्रात:काल से संध्या तक उसके सभी काम निश्चित समय पर होते थे। भोजन के समय के संलाप के भी नियम थे। पाश्चात्य दार्शनिकों में से अधिकांश भ्रमणशील रहे हैं, किंतु कांट अपने नगर से जीवन भर में अधिक से अधिक साठ मील गया था। फिर भी उसका दृष्टिकोण संकुचित न था। वह केवल बौद्धिक चिंतक न था, उसने [[सुकरात]] और [[पाइथागोरस]] की भाँति जीवन में अपने दार्शनिक विचारों को स्थान दिया था। हाइने नामक जर्मन कवि ने कांट के दार्शनिक जीवन की प्रशंसा में ऐसी बातें कही हैं जो उसे सनकी सिद्ध करती हैं, किंतु, उसके विचारों ने उत्तरवर्ती दर्शन को इतना प्रभावित किया कि कांट के अध्येता उसे दर्शन में एक नवीन युग का प्रवर्तक मानते हैं। == इन्हें भी देखें == * [[काण्टीयवाद|कांटीय दर्शन]] == बाहरी कड़ियाँ == * [https://web.archive.org/web/20100127075347/http://librivox.org/newcatalog/search.php?title=&author=Immanuel+Kant&action=Search Works by Immanuel Kant] in audio format from [[LibriVox]] * [https://web.archive.org/web/20091102223731/http://www.hkbu.edu.hk/~ppp/ksp1/KSPglos.html Stephen Palmquist's Glossary of Kantian Terminology] * [https://web.archive.org/web/20090921052812/http://www.percepp.com/kantcats.htm Kant's Categories as grammatical reifications] * [https://web.archive.org/web/20100305184221/http://www.rsrevision.com/Alevel/ethics/kant/index.htm Kant's Ethical Theory] Kantian ethics explained, applied and evaluated * [https://web.archive.org/web/20071011094730/http://ethics.sandiego.edu/theories/Kant/index.asp Kant & Ethics] Extensive links and discussions from Lawrence Hinman at University of San Diego * [https://web.archive.org/web/20090402230032/http://webs.wofford.edu/kaycd/ethics/deon.htm Notes on Deontology] A conveniently brief survey of Kant's deontology * [https://web.archive.org/web/20091026015538/http://www.hkbu.edu.hk/~ppp/Kant.html Kant on the Web] on [[Stephen Palmquist]]'s website * [https://web.archive.org/web/20091126000656/http://comp.uark.edu/~rlee/semiau96/kantlink.html Kant Links] * [https://web.archive.org/web/20091028233648/http://www.friesian.com/Kant.htm Kant's Epistemology and Metaphysics according to the Friesian school] * [https://web.archive.org/web/20120618100231/http://theoryandscience.icaap.org/content/vol003.001/tekiner.html German Idealist Foundations of Durkheim's Sociology and Teleology of Knowledge] * [https://web.archive.org/web/20070927113154/http://www.e-text.org/text/ Several Kant's works in clickable pdf] * [https://web.archive.org/web/20060709220021/http://www.rep.routledge.com/article/DB047 Routledge Encyclopedia of Philosophy (14 sections on Kant)] * [https://web.archive.org/web/20100405031757/http://www.philos.msu.ru/community/staff/vasiliev/Kant_Interview/Kant_Interview.html International Kant Interview - 2004] * [https://web.archive.org/web/20100124030050/http://www.earlymoderntexts.com/f_kant.html Readable versions of Prolegomena, Groundwork for the Metaphysic of Morals, Critique of Pure Reason, and Metaphysical Foundations of Natural Science] (J. Bennett translations) * [https://web.archive.org/web/20091202205245/http://www.sens-public.org/article.php3?id_article=150 Kant's moral philosophy and the question of pre-emptive war, Revue Sens Public] * [https://web.archive.org/web/20090903132310/http://www.manchester.edu/kant/ Kant in the Classroom] background information for Kant's lectures * [https://web.archive.org/web/20091124192620/http://www.intratext.com/Catalogo/Autori/AUT216.HTM Works]: text, concordances and frequency list * [https://web.archive.org/web/20090523113423/http://www.sammlungen.hu-berlin.de/dokumente/7806/ Kant's Death Mask] * The ''[[Stanford Encyclopedia of Philosophy]]'' has several entries on Kant: ** [https://web.archive.org/web/20100709061123/http://plato.stanford.edu/entries/kant-science/ Kant's Philosophy of Science] ** [https://web.archive.org/web/20100709060542/http://plato.stanford.edu/entries/kant-metaphysics/ Kant's Critique of Metaphysics] ** [https://web.archive.org/web/20100709014732/http://plato.stanford.edu/entries/kant-mind/ Kant's View of the Mind and Consciousness of Self] ** [https://web.archive.org/web/20100709213318/http://plato.stanford.edu/entries/kant-aesthetics/ Kant's Aesthetics and Teleology] ** [https://web.archive.org/web/20100709212423/http://plato.stanford.edu/entries/kant-religion/ Kant's Philosophy of Religion] ** [https://web.archive.org/web/20100708192504/http://plato.stanford.edu/entries/kant-development/ Kant's Philosophical Development] ** [https://web.archive.org/web/20130921060941/http://plato.stanford.edu/entries/kant-moral/ Kant's Moral Philosophy] ** [https://web.archive.org/web/20100709052506/http://plato.stanford.edu/entries/kant-leibniz/ Kant and Leibniz] ** [https://web.archive.org/web/20100714083746/http://plato.stanford.edu/entries/kant-judgment/ Kant's Theory of Judgment] {{Authority control}} [[श्रेणी:1724 में जन्मे लोग]] [[श्रेणी:जर्मन दार्शनिक‎]] [[श्रेणी:१८०४ में निधन]] jt8cqht6st0k5oecpp0ij8iv52e0cvo रेडॉक्स 0 45223 6586988 6495676 2026-07-18T04:01:32Z अनुनाद सिंह 1634 6586988 wikitext text/x-wiki {{स्रोतहीन|date=मई 2025}} '''रेडॉक्स''' (Redox ; ''''Red'''uction and '''Ox'''idation' का लघुकृत रूप) वह अभिक्रियाएँ जिसमें ऑक्सीकरण (Oxidation) एवं अपचयन (Reduction) दोनों साथ साथ होती हैं रिडॉक्स (रेडॉक्स) अभिक्रिया कहलाती हैं/ रिडॉक्स अभिक्रिया के अन्तर्गत वे सब [[रासायनिक अभिक्रिया|रासायनिक अभिक्रियाएँ]] सम्मिलित हैं जिनमें [[परमाणु]]ओं के आक्सीकरण अवस्थाएँ बदल जातीं हैं। सामान्यतः रेडॉक्स अभिक्रियाओं के अभिकारकों के परमाणुओं के बीच [[इलेक्ट्रॉन|इलेक्ट्रानों]] का आदान-प्रदान होता है। कभी भी आक्सीकरण या अपचयन अभिक्रिया अकेले नहीं होती। दोनो साथ-साथ होतीं हैं। एक ही अभिक्रिया में यदि किसी चीज का आक्सीकरण होता है तो किसी दूसरी का अपचयन होता है। इसीलिये इनको अलग-अलग न पढ़के एकसाथ पढ़ा जाये तो दोनों को मिलाकर 'रेडॉक्स' कहते हैं। '''परिभाषा''' वह अभिक्रिया जिसमें एक क्रियाकारक का ऑक्सीकरण होता है, एवं दूसरे क्रियाकारक का अपचयन होता है । रेडाॅक्स अभिक्रिया कहलाती है । '''उदाहरण''' CuSO<sub>4</sub> + Zn → ZnSO<sub>4</sub>+ Cu (यहाँ Zn तथा ZnSO<sub>4</sub> का ऑक्सीकरण तथा CuSO<sub>4</sub> तथा Cu का अपचयन हो रहा है ।) उदा. Fe<sub>2</sub>O<sub>3</sub> + 3CO → 2Fe + 3CO<sub>2</sub> (यहाँ Fe<sub>2</sub>O<sub>3</sub> तथा 2Fe का अपचयन एवं 3CO तथा 3CO<sub>2</sub> का आक्सीकरण हो रहा है।) ==इन्हें भी देखें== *[[ऑक्सीकरण संख्या]] ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:रसायन शास्त्र]] [[श्रेणी:रासायनिक अभिक्रियाएँ]] [[श्रेणी:मृदा रसायनिकी]] {{विज्ञान-आधार}} 93ycjt4hapev9d09yy9fp5mr4gwduii 6586990 6586988 2026-07-18T04:02:52Z अनुनाद सिंह 1634 6586990 wikitext text/x-wiki {{स्रोतहीन|date=मई 2025}} '''रेडॉक्स''' (Redox ; ''''Red'''uction and '''Ox'''idation' का लघुकृत रूप) वह अभिक्रियाएँ जिसमें ऑक्सीकरण (Oxidation) एवं अपचयन (Reduction) दोनों साथ साथ होती हैं रिडॉक्स (रेडॉक्स) अभिक्रिया कहलाती हैं। रिडॉक्स अभिक्रिया के अन्तर्गत वे सब [[रासायनिक अभिक्रिया|रासायनिक अभिक्रियाएँ]] सम्मिलित हैं जिनमें [[परमाणु]]ओं के आक्सीकरण अवस्थाएँ बदल जातीं हैं। सामान्यतः रेडॉक्स अभिक्रियाओं के अभिकारकों के परमाणुओं के बीच [[इलेक्ट्रॉन|इलेक्ट्रानों]] का आदान-प्रदान होता है। कभी भी आक्सीकरण या अपचयन अभिक्रिया अकेले नहीं होती। दोनो साथ-साथ होतीं हैं। एक ही अभिक्रिया में यदि किसी चीज का आक्सीकरण होता है तो किसी दूसरी का अपचयन होता है। इसीलिये इनको अलग-अलग न पढ़के एकसाथ पढ़ा जाये तो दोनों को मिलाकर 'रेडॉक्स' कहते हैं। '''परिभाषा''' वह अभिक्रिया जिसमें एक क्रियाकारक का ऑक्सीकरण होता है, एवं दूसरे क्रियाकारक का अपचयन होता है । रेडाॅक्स अभिक्रिया कहलाती है । '''उदाहरण''' CuSO<sub>4</sub> + Zn → ZnSO<sub>4</sub>+ Cu (यहाँ Zn तथा ZnSO<sub>4</sub> का ऑक्सीकरण तथा CuSO<sub>4</sub> तथा Cu का अपचयन हो रहा है ।) उदा. Fe<sub>2</sub>O<sub>3</sub> + 3CO → 2Fe + 3CO<sub>2</sub> (यहाँ Fe<sub>2</sub>O<sub>3</sub> तथा 2Fe का अपचयन एवं 3CO तथा 3CO<sub>2</sub> का आक्सीकरण हो रहा है।) ==इन्हें भी देखें== *[[ऑक्सीकरण संख्या]] ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:रसायन शास्त्र]] [[श्रेणी:रासायनिक अभिक्रियाएँ]] [[श्रेणी:मृदा रसायनिकी]] {{विज्ञान-आधार}} 0e2hsodvqoijifoo56hkdpwpg7fureg ज्वालामुखी मंदिर 0 47827 6586960 6108385 2026-07-18T00:57:39Z Spiritualvishesh 706638 6586960 wikitext text/x-wiki {{ज्ञानसन्दूक हिन्दू मन्दिर |image = Jai Baba Dhundeshwer.jpg |name = Jai Baba Dhundeshwer |deity= [[देवों के देव-महादेव]] |architecture_style = [[हिन्दू]] |location= [[Kaseti]], [[हिमाचल प्रदेश]], [[भारत]] }} '''जय बाबा धुंन्धेशवर महादेव''', [[काँगड़ा|कांगडा]] जिसका संबंध भी शिव की एक दिव्य शक्ति से है । यह हिमाचल प्रदेश के काँगड़ा (Kangra) जिले में नेकेड खड्ड के तट पर कसेटी (Kaseti) नाम का एक छोटा सा गांव स्थित है । नेकेड खड्ड (Naked khadd) kalusalvi [[ज्वाला देवी शक्तिपीठ]] == देव की उत्पत्ति कथा == कहते हैं जीवन में किसी भी प्रकार की बाधा हो, महादेव के दर्शन मात्र से वो सारी बाधाएं दूर हो जाती हैं. देवों के देव-महादेव अपने भक्तों के दुखों के साथ काल को भी हर लेते हैं और मोक्ष का वरदान देते हैं, इस मंदिर की मान्यता है कि जो भी भक्त सच्चे मन से आता है, उसकी हर मनोकामना पूरी होती है । चाहे ग्रहों की बाधा हो या फिर कुछ और, मृत्युंजय महादेव के मंदिर में दर्शन कर सवा-लाख मृत्युंजय महामंत्र के जाप से सारे कष्टों का निवारण हो जाता है और यदि कोई भक्त लगातार 16 सोमवार यहां हाजिरी लगाए और त्रिलोचन के इस रूप को माला फूल के साथ दूध और जल चढ़ाए तो उसके जीवन के कष्टों का निवारण क्षण भर में हो जाता है. == पौराणिक कथा == [[Jai Baba Dhundeshwer.jpg|right|thumb|250px|कड़ी=Special:Jai Baba Dhundeshwer.jpg]] बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह के पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था == इतिहास == (इस दिव्य धाम के पीछे एक कथा भी है) बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर वह अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था कहा जाता है कि नेकेड खड्ड के किनारे एक बड़ी चट्टान के ऊपर एक पत्थर था और प्रेम सिंह की गाय हर रोज सुबह और शाम जाकर इस पत्थर पर दूध चढाती थी और जब गाय दूध चढाती थी तो उसके चारों ओर धुंध - सी छा जाती थी, एक दिन गाय को कुछ लोगो ने ऎसा करते देख लिया और वे लोग इस पत्थर के पास गए, वहाँ जाकर देखा की वो पत्थर नहीं है वो तो एक शिवलिंग है | और लोगों ने आपस मे एक - दूसरे से बातचीत करके ये निर्णय लिया क्यों ना इस शिवलिंग को अपने गाँव ले लिया जाये, सभी लोगो ने माथा टेका और वो लोगो उस शिवलिंग को अपने गांव (मानगढ़) में लाने की तैयारी करने लगे | उन लोगो ने एक पालकी तैयार की ओर शिवलिंग को ले जाने लगे, जैसे-जैसे उन लोगों ने 2 किलोमीटर की दूरी तय कर ली फिर जैसे-2 अपना कदम बढ़ाने लगे तो शिवलिंग का भार बढ़ने लगा, भार ना संभालने के कारण लोगो ने शिवलिंग को भूमि पर रख दिया और विश्राम करने लगे | विश्राम करने के बाद वो लोग शिवलिंग को उठाने का काफी प्रयास करते रहे, लेकिन असफल रहे । तभी उनका एक रूप यहां प्रकट हुआ, इस बाद में इसी स्थान पर मंदिर का निर्माण करवाया गया । तब से लेकर आज तक होली के 5 दिन पहले प्रेम सिंह अपने घर सभी गाँव के लोगो को निमंत्रण दे कर भोजन करवाते थे । प्रेम सिंह की मृत्यु होने के बाद अब ये रीत उनके दोनों बेटे निभाते आ रहे है…………. == पर्यटन == मंदिर का मुख्य द्वार काफी सुंदर एव भव्य है । जय बाबा धुंन्धेशवर महादेव के पास ही में 9 कि॰मी॰ की दूरी पर ज्वालाजी माता का मंदिर है । यहां हर साल होली, महाशिवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । 16.8 कि॰मी॰ कि दूरी पर बगलामुखी का मंदिर है == प्रमुख त्योहार == यहां हर साल होली, महाशिवरात्रि, होली ,जन्माष्टमी ,नवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । जय बाबा धुंन्धेशवर महादेव में महाशिवरात्रि के समय में विशाल मेले का आयोजन किया जाता है। साल के दोनों नवरात्रि यहां पर बडे़ धूमधाम से मनाये जाते है। महाशिवरात्रि में यहां पर आने वाले श्रद्धालुओं की संख्या दोगुनी हो जाती है । इन दिनों में यहां पर विशेष पूजा अर्चना की जाती है। शिव चालीसा का पाठ रखे जाते हैं और वैदिक मंत्रोच्चारण के साथ हवन इत्यादि की जाती है। महाशिवरात्रि और होली में पूरे भारत वर्ष से श्रद्धालु यहां पर आकर देव की कृपा प्राप्त करते है । कुछ लोग देव के लिए लाल रंग के ध्वज भी लाते है । == मुख्य आकर्षण == मंदिर में आरती के समय अद्भूत नजारा होता है। मंदिर में 2 बार आरती होती है। एक मंदिर के कपाट खुलते ही सूर्योदय के साथ में की जाती है। दूसरी संध्या को की जाती है। आरती के साथ-साथ महादेव को भोग भी लगाया जाता है। प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है. उसे फूलो और सुगंधित सामग्रियों से सजाया जाता है। जिसमें कुछ संख्या में आये श्रद्धालु भाग लेते है। == आरतियों का समय == 1. सुबह कि आरती 7.00 2. भोग (आरती के बाद) 3. संध्या आरती 7.00 बजे (सूर्यास्त समय पर निर्भर करता है) प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है (आरती के बाद) == कैसे जाएं == वायु मार्ग:- जय बाबा धुंन्धेशवर महादेव मंदिर जाने के लिए नजदीकी हवाई अड्डा गगल में है जो कि धुंन्धेशवर महादेव मंदिर से 43.6 kms कि॰मी॰ की दूरी पर स्थित है। यहाँ से मंदिर तक जाने के लिए कार व बस सुविधा उपलब्ध है। रेल मार्ग:- रेल मार्ग से जाने वाले यात्रि पठानकोट से चलने वाली स्पेशल ट्रेन की सहायता से मरांदा होते हुए पालमपुर आ सकते है। पालमपुर से मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। सड़क मार्ग:- पठानकोट, दिल्ली, शिमला आदि प्रमुख शहरो से धुंन्धेशवर महादेव मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। यात्री अपने निजी वाहनो व हिमाचल प्रदेश टूरिज्म विभाग की बस के द्वारा भी वहाँ तक पहुंच सकते है। दिल्ली से खास पैसा (ज्वालाजी), के लिए दिल्ली परिवहन निगम की सीधी बस सुविधा भी उपलब्ध है। ;प्रमुख शहरो से ज्वालामुखी मंदिर की दूरी [[पठानकोट]]: 104.7 कि॰मी॰ [[दिल्ली]]: 430 कि॰मी॰ [[काँगड़ा|कांगडा]]: 27 कि॰मी॰ [[शिमला]]: 203 कि॰मी॰ [[अम्बाला|अंबाला]]: 230 कि॰मी॰ [[धर्मशाला]]: 48 कि॰मी॰ == ठहरना == जय बाबा धुंन्धेशवर महादेव में रहने के लिए काफी संख्या में धर्मशालाए व होटल है | जिनमें रहने व खाने का उचित प्रबंध है । जो कि उचित मूल्यो पर उपलब्ध है । जय बाबा धुंन्धेशवर महादेव मंदिर के पास का नजदीकी शहर पालमपुर व कांगडा है | जहां पर काफी सारे डिलक्स होटल है। यात्री यहां पर भी ठहर सकते है | यहाँ से मंदिर तक जाने के लिए बस व कार सुविधा है । 5hd4ssjf263bb9p19xd04t9hhj4udsv 6586981 6586960 2026-07-18T03:48:12Z चाहर धर्मेंद्र 703114 टैग {{[[साँचा:विलय|विलय]]}} लेख में जोड़ा जा रहा ([[वि:ट्विंकल|ट्विंकल]]) 6586981 wikitext text/x-wiki {{विलय|ज्वालामुखी, काँगड़ा|date=जुलाई 2026}} {{ज्ञानसन्दूक हिन्दू मन्दिर |image = Jai Baba Dhundeshwer.jpg |name = Jai Baba Dhundeshwer |deity= [[देवों के देव-महादेव]] |architecture_style = [[हिन्दू]] |location= [[Kaseti]], [[हिमाचल प्रदेश]], [[भारत]] }} '''जय बाबा धुंन्धेशवर महादेव''', [[काँगड़ा|कांगडा]] जिसका संबंध भी शिव की एक दिव्य शक्ति से है । यह हिमाचल प्रदेश के काँगड़ा (Kangra) जिले में नेकेड खड्ड के तट पर कसेटी (Kaseti) नाम का एक छोटा सा गांव स्थित है । नेकेड खड्ड (Naked khadd) kalusalvi [[ज्वाला देवी शक्तिपीठ]] == देव की उत्पत्ति कथा == कहते हैं जीवन में किसी भी प्रकार की बाधा हो, महादेव के दर्शन मात्र से वो सारी बाधाएं दूर हो जाती हैं. देवों के देव-महादेव अपने भक्तों के दुखों के साथ काल को भी हर लेते हैं और मोक्ष का वरदान देते हैं, इस मंदिर की मान्यता है कि जो भी भक्त सच्चे मन से आता है, उसकी हर मनोकामना पूरी होती है । चाहे ग्रहों की बाधा हो या फिर कुछ और, मृत्युंजय महादेव के मंदिर में दर्शन कर सवा-लाख मृत्युंजय महामंत्र के जाप से सारे कष्टों का निवारण हो जाता है और यदि कोई भक्त लगातार 16 सोमवार यहां हाजिरी लगाए और त्रिलोचन के इस रूप को माला फूल के साथ दूध और जल चढ़ाए तो उसके जीवन के कष्टों का निवारण क्षण भर में हो जाता है. == पौराणिक कथा == [[Jai Baba Dhundeshwer.jpg|right|thumb|250px|कड़ी=Special:Jai Baba Dhundeshwer.jpg]] बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह के पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था == इतिहास == (इस दिव्य धाम के पीछे एक कथा भी है) बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर वह अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था कहा जाता है कि नेकेड खड्ड के किनारे एक बड़ी चट्टान के ऊपर एक पत्थर था और प्रेम सिंह की गाय हर रोज सुबह और शाम जाकर इस पत्थर पर दूध चढाती थी और जब गाय दूध चढाती थी तो उसके चारों ओर धुंध - सी छा जाती थी, एक दिन गाय को कुछ लोगो ने ऎसा करते देख लिया और वे लोग इस पत्थर के पास गए, वहाँ जाकर देखा की वो पत्थर नहीं है वो तो एक शिवलिंग है | और लोगों ने आपस मे एक - दूसरे से बातचीत करके ये निर्णय लिया क्यों ना इस शिवलिंग को अपने गाँव ले लिया जाये, सभी लोगो ने माथा टेका और वो लोगो उस शिवलिंग को अपने गांव (मानगढ़) में लाने की तैयारी करने लगे | उन लोगो ने एक पालकी तैयार की ओर शिवलिंग को ले जाने लगे, जैसे-जैसे उन लोगों ने 2 किलोमीटर की दूरी तय कर ली फिर जैसे-2 अपना कदम बढ़ाने लगे तो शिवलिंग का भार बढ़ने लगा, भार ना संभालने के कारण लोगो ने शिवलिंग को भूमि पर रख दिया और विश्राम करने लगे | विश्राम करने के बाद वो लोग शिवलिंग को उठाने का काफी प्रयास करते रहे, लेकिन असफल रहे । तभी उनका एक रूप यहां प्रकट हुआ, इस बाद में इसी स्थान पर मंदिर का निर्माण करवाया गया । तब से लेकर आज तक होली के 5 दिन पहले प्रेम सिंह अपने घर सभी गाँव के लोगो को निमंत्रण दे कर भोजन करवाते थे । प्रेम सिंह की मृत्यु होने के बाद अब ये रीत उनके दोनों बेटे निभाते आ रहे है…………. == पर्यटन == मंदिर का मुख्य द्वार काफी सुंदर एव भव्य है । जय बाबा धुंन्धेशवर महादेव के पास ही में 9 कि॰मी॰ की दूरी पर ज्वालाजी माता का मंदिर है । यहां हर साल होली, महाशिवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । 16.8 कि॰मी॰ कि दूरी पर बगलामुखी का मंदिर है == प्रमुख त्योहार == यहां हर साल होली, महाशिवरात्रि, होली ,जन्माष्टमी ,नवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । जय बाबा धुंन्धेशवर महादेव में महाशिवरात्रि के समय में विशाल मेले का आयोजन किया जाता है। साल के दोनों नवरात्रि यहां पर बडे़ धूमधाम से मनाये जाते है। महाशिवरात्रि में यहां पर आने वाले श्रद्धालुओं की संख्या दोगुनी हो जाती है । इन दिनों में यहां पर विशेष पूजा अर्चना की जाती है। शिव चालीसा का पाठ रखे जाते हैं और वैदिक मंत्रोच्चारण के साथ हवन इत्यादि की जाती है। महाशिवरात्रि और होली में पूरे भारत वर्ष से श्रद्धालु यहां पर आकर देव की कृपा प्राप्त करते है । कुछ लोग देव के लिए लाल रंग के ध्वज भी लाते है । == मुख्य आकर्षण == मंदिर में आरती के समय अद्भूत नजारा होता है। मंदिर में 2 बार आरती होती है। एक मंदिर के कपाट खुलते ही सूर्योदय के साथ में की जाती है। दूसरी संध्या को की जाती है। आरती के साथ-साथ महादेव को भोग भी लगाया जाता है। प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है. उसे फूलो और सुगंधित सामग्रियों से सजाया जाता है। जिसमें कुछ संख्या में आये श्रद्धालु भाग लेते है। == आरतियों का समय == 1. सुबह कि आरती 7.00 2. भोग (आरती के बाद) 3. संध्या आरती 7.00 बजे (सूर्यास्त समय पर निर्भर करता है) प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है (आरती के बाद) == कैसे जाएं == वायु मार्ग:- जय बाबा धुंन्धेशवर महादेव मंदिर जाने के लिए नजदीकी हवाई अड्डा गगल में है जो कि धुंन्धेशवर महादेव मंदिर से 43.6 kms कि॰मी॰ की दूरी पर स्थित है। यहाँ से मंदिर तक जाने के लिए कार व बस सुविधा उपलब्ध है। रेल मार्ग:- रेल मार्ग से जाने वाले यात्रि पठानकोट से चलने वाली स्पेशल ट्रेन की सहायता से मरांदा होते हुए पालमपुर आ सकते है। पालमपुर से मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। सड़क मार्ग:- पठानकोट, दिल्ली, शिमला आदि प्रमुख शहरो से धुंन्धेशवर महादेव मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। यात्री अपने निजी वाहनो व हिमाचल प्रदेश टूरिज्म विभाग की बस के द्वारा भी वहाँ तक पहुंच सकते है। दिल्ली से खास पैसा (ज्वालाजी), के लिए दिल्ली परिवहन निगम की सीधी बस सुविधा भी उपलब्ध है। ;प्रमुख शहरो से ज्वालामुखी मंदिर की दूरी [[पठानकोट]]: 104.7 कि॰मी॰ [[दिल्ली]]: 430 कि॰मी॰ [[काँगड़ा|कांगडा]]: 27 कि॰मी॰ [[शिमला]]: 203 कि॰मी॰ [[अम्बाला|अंबाला]]: 230 कि॰मी॰ [[धर्मशाला]]: 48 कि॰मी॰ == ठहरना == जय बाबा धुंन्धेशवर महादेव में रहने के लिए काफी संख्या में धर्मशालाए व होटल है | जिनमें रहने व खाने का उचित प्रबंध है । जो कि उचित मूल्यो पर उपलब्ध है । जय बाबा धुंन्धेशवर महादेव मंदिर के पास का नजदीकी शहर पालमपुर व कांगडा है | जहां पर काफी सारे डिलक्स होटल है। यात्री यहां पर भी ठहर सकते है | यहाँ से मंदिर तक जाने के लिए बस व कार सुविधा है । mgekzt2ilckh6wiwhyq1brhlrkpa2fp 6586984 6586981 2026-07-18T03:49:26Z चाहर धर्मेंद्र 703114 टैग {{[[साँचा:को विलय|को विलय]]}} लेख में जोड़ा जा रहा ([[वि:ट्विंकल|ट्विंकल]]) 6586984 wikitext text/x-wiki {{को विलय|ज्वालामुखी, काँगड़ा|date=जुलाई 2026}} {{विलय|ज्वालामुखी, काँगड़ा|date=जुलाई 2026}} {{ज्ञानसन्दूक हिन्दू मन्दिर |image = Jai Baba Dhundeshwer.jpg |name = Jai Baba Dhundeshwer |deity= [[देवों के देव-महादेव]] |architecture_style = [[हिन्दू]] |location= [[Kaseti]], [[हिमाचल प्रदेश]], [[भारत]] }} '''जय बाबा धुंन्धेशवर महादेव''', [[काँगड़ा|कांगडा]] जिसका संबंध भी शिव की एक दिव्य शक्ति से है । यह हिमाचल प्रदेश के काँगड़ा (Kangra) जिले में नेकेड खड्ड के तट पर कसेटी (Kaseti) नाम का एक छोटा सा गांव स्थित है । नेकेड खड्ड (Naked khadd) kalusalvi [[ज्वाला देवी शक्तिपीठ]] == देव की उत्पत्ति कथा == कहते हैं जीवन में किसी भी प्रकार की बाधा हो, महादेव के दर्शन मात्र से वो सारी बाधाएं दूर हो जाती हैं. देवों के देव-महादेव अपने भक्तों के दुखों के साथ काल को भी हर लेते हैं और मोक्ष का वरदान देते हैं, इस मंदिर की मान्यता है कि जो भी भक्त सच्चे मन से आता है, उसकी हर मनोकामना पूरी होती है । चाहे ग्रहों की बाधा हो या फिर कुछ और, मृत्युंजय महादेव के मंदिर में दर्शन कर सवा-लाख मृत्युंजय महामंत्र के जाप से सारे कष्टों का निवारण हो जाता है और यदि कोई भक्त लगातार 16 सोमवार यहां हाजिरी लगाए और त्रिलोचन के इस रूप को माला फूल के साथ दूध और जल चढ़ाए तो उसके जीवन के कष्टों का निवारण क्षण भर में हो जाता है. == पौराणिक कथा == [[Jai Baba Dhundeshwer.jpg|right|thumb|250px|कड़ी=Special:Jai Baba Dhundeshwer.jpg]] बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह के पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था == इतिहास == (इस दिव्य धाम के पीछे एक कथा भी है) बहुत समय पहले की बात है कसेटी गांव प्रेम सिंह नाम का एक किसान था उसके पास बहुत खेत थे वो अपने खेतो में बहुत ही मेहनत से काम करता था | उस के दो बेटे थे । बड़े बेटे का नाम वीर सिंह और छोटे बेटे का नाम दूलो राम सिंह है | प्रेम सिंह पास बहुत सारे जानवर भी थे, प्रेम सिंह को अपने जानवरों से बहुत प्यार था इसलिए उसने अपने घर में बहुत सारी गाय और भैंस पाल रखी थीं। वो अपने खेत में और दूध बेचकर वह अपना जीवन व्यतीत करता था । प्रेम सिंह के घर से नेकेड खड्ड (Naked khadd) 2 किलोमीटर की दूरी पर स्थित है | हर रोज वो अपनी गाय और भैंस चराने के लिए नेकेड खड्ड ले जाया करता था कहा जाता है कि नेकेड खड्ड के किनारे एक बड़ी चट्टान के ऊपर एक पत्थर था और प्रेम सिंह की गाय हर रोज सुबह और शाम जाकर इस पत्थर पर दूध चढाती थी और जब गाय दूध चढाती थी तो उसके चारों ओर धुंध - सी छा जाती थी, एक दिन गाय को कुछ लोगो ने ऎसा करते देख लिया और वे लोग इस पत्थर के पास गए, वहाँ जाकर देखा की वो पत्थर नहीं है वो तो एक शिवलिंग है | और लोगों ने आपस मे एक - दूसरे से बातचीत करके ये निर्णय लिया क्यों ना इस शिवलिंग को अपने गाँव ले लिया जाये, सभी लोगो ने माथा टेका और वो लोगो उस शिवलिंग को अपने गांव (मानगढ़) में लाने की तैयारी करने लगे | उन लोगो ने एक पालकी तैयार की ओर शिवलिंग को ले जाने लगे, जैसे-जैसे उन लोगों ने 2 किलोमीटर की दूरी तय कर ली फिर जैसे-2 अपना कदम बढ़ाने लगे तो शिवलिंग का भार बढ़ने लगा, भार ना संभालने के कारण लोगो ने शिवलिंग को भूमि पर रख दिया और विश्राम करने लगे | विश्राम करने के बाद वो लोग शिवलिंग को उठाने का काफी प्रयास करते रहे, लेकिन असफल रहे । तभी उनका एक रूप यहां प्रकट हुआ, इस बाद में इसी स्थान पर मंदिर का निर्माण करवाया गया । तब से लेकर आज तक होली के 5 दिन पहले प्रेम सिंह अपने घर सभी गाँव के लोगो को निमंत्रण दे कर भोजन करवाते थे । प्रेम सिंह की मृत्यु होने के बाद अब ये रीत उनके दोनों बेटे निभाते आ रहे है…………. == पर्यटन == मंदिर का मुख्य द्वार काफी सुंदर एव भव्य है । जय बाबा धुंन्धेशवर महादेव के पास ही में 9 कि॰मी॰ की दूरी पर ज्वालाजी माता का मंदिर है । यहां हर साल होली, महाशिवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । 16.8 कि॰मी॰ कि दूरी पर बगलामुखी का मंदिर है == प्रमुख त्योहार == यहां हर साल होली, महाशिवरात्रि, होली ,जन्माष्टमी ,नवरात्रि और सावन आदि में भोले के भक्तों की भारी भीड उमड पडती है । जय बाबा धुंन्धेशवर महादेव में महाशिवरात्रि के समय में विशाल मेले का आयोजन किया जाता है। साल के दोनों नवरात्रि यहां पर बडे़ धूमधाम से मनाये जाते है। महाशिवरात्रि में यहां पर आने वाले श्रद्धालुओं की संख्या दोगुनी हो जाती है । इन दिनों में यहां पर विशेष पूजा अर्चना की जाती है। शिव चालीसा का पाठ रखे जाते हैं और वैदिक मंत्रोच्चारण के साथ हवन इत्यादि की जाती है। महाशिवरात्रि और होली में पूरे भारत वर्ष से श्रद्धालु यहां पर आकर देव की कृपा प्राप्त करते है । कुछ लोग देव के लिए लाल रंग के ध्वज भी लाते है । == मुख्य आकर्षण == मंदिर में आरती के समय अद्भूत नजारा होता है। मंदिर में 2 बार आरती होती है। एक मंदिर के कपाट खुलते ही सूर्योदय के साथ में की जाती है। दूसरी संध्या को की जाती है। आरती के साथ-साथ महादेव को भोग भी लगाया जाता है। प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है. उसे फूलो और सुगंधित सामग्रियों से सजाया जाता है। जिसमें कुछ संख्या में आये श्रद्धालु भाग लेते है। == आरतियों का समय == 1. सुबह कि आरती 7.00 2. भोग (आरती के बाद) 3. संध्या आरती 7.00 बजे (सूर्यास्त समय पर निर्भर करता है) प्रसाद में इन्हें फल व दूध के साथ दही का भोग लगता है (आरती के बाद) == कैसे जाएं == वायु मार्ग:- जय बाबा धुंन्धेशवर महादेव मंदिर जाने के लिए नजदीकी हवाई अड्डा गगल में है जो कि धुंन्धेशवर महादेव मंदिर से 43.6 kms कि॰मी॰ की दूरी पर स्थित है। यहाँ से मंदिर तक जाने के लिए कार व बस सुविधा उपलब्ध है। रेल मार्ग:- रेल मार्ग से जाने वाले यात्रि पठानकोट से चलने वाली स्पेशल ट्रेन की सहायता से मरांदा होते हुए पालमपुर आ सकते है। पालमपुर से मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। सड़क मार्ग:- पठानकोट, दिल्ली, शिमला आदि प्रमुख शहरो से धुंन्धेशवर महादेव मंदिर तक जाने के लिए बस व कार सुविधा उपलब्ध है। यात्री अपने निजी वाहनो व हिमाचल प्रदेश टूरिज्म विभाग की बस के द्वारा भी वहाँ तक पहुंच सकते है। दिल्ली से खास पैसा (ज्वालाजी), के लिए दिल्ली परिवहन निगम की सीधी बस सुविधा भी उपलब्ध है। ;प्रमुख शहरो से ज्वालामुखी मंदिर की दूरी [[पठानकोट]]: 104.7 कि॰मी॰ [[दिल्ली]]: 430 कि॰मी॰ [[काँगड़ा|कांगडा]]: 27 कि॰मी॰ [[शिमला]]: 203 कि॰मी॰ [[अम्बाला|अंबाला]]: 230 कि॰मी॰ [[धर्मशाला]]: 48 कि॰मी॰ == ठहरना == जय बाबा धुंन्धेशवर महादेव में रहने के लिए काफी संख्या में धर्मशालाए व होटल है | जिनमें रहने व खाने का उचित प्रबंध है । जो कि उचित मूल्यो पर उपलब्ध है । जय बाबा धुंन्धेशवर महादेव मंदिर के पास का नजदीकी शहर पालमपुर व कांगडा है | जहां पर काफी सारे डिलक्स होटल है। यात्री यहां पर भी ठहर सकते है | यहाँ से मंदिर तक जाने के लिए बस व कार सुविधा है । hzp2t7vw6672da20wdrr1s82szdwaoz श्रेणी:खगड़िया जिला के गाँव 14 121177 6586879 6472516 2026-07-17T17:13:36Z ~2026-40218-64 936726 6586879 wikitext text/x-wiki [[श्रेणी: खगड़िया जिला]] [[श्रेणी:बिहार के गाँव]] [[श्रेणी:ज़िलानुसार भारत के गाँव]] आदाबाड़ी i6jf08h03vax5d0a6r9itj5hl1jvx8f 6586912 6586879 2026-07-17T18:04:05Z SM7 89247 [[Special:Contributions/~2026-40218-64|~2026-40218-64]] ([[User talk:~2026-40218-64|Talk]]) के संपादनों को हटाकर [[User:DreamRimmer|DreamRimmer]] के आखिरी अवतरण को पूर्ववत किया 5082301 wikitext text/x-wiki [[श्रेणी: खगड़िया जिला]] [[श्रेणी:बिहार के गाँव]] [[श्रेणी:ज़िलानुसार भारत के गाँव]] 9vqhx7tj24g7sdvymqkhflzdtrd5y3d बहुभाषिकता 0 160599 6586937 6548886 2026-07-17T23:49:25Z अनुनाद सिंह 1634 6586937 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''ब्लूम फील्ड''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। यह शब्द multi- (“अनेक”) और -lingual (“भाषाओं से संबंधित”) के संयोजन से बना है। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ;'उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता '''उत्कृष्ट प्रबंधकारी कार्य पद्धति ''' प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन '''अपने परिवेश के अनुरूप ढलना''' जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1.विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4.प्रवास या नए स्थान में आसानी 5.आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;व्कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है ,जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> <big>बहुभाषिकता; अनुवाद की आवश्यकता</big> # संवाद और संपर्क के लिए # सांस्कृतिक आदान प्रदान के लिए # शिक्षा और ज्ञान के प्रसार के लिए # राष्ट्रीय एकता के लिए # वैश्विक संपर्क और रोजगार के लिए ==अनुवाद में बहुभाषिकता == बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यत: एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> '''बहुभाषिक लेखक और स्व - अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं| इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं| इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है| यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ ता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] q1pgi5ntvzl2wqqsytvwqqu7dxz793c 6586938 6586937 2026-07-17T23:52:55Z अनुनाद सिंह 1634 /* बहुभाषिकता के लाभ */ 6586938 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''ब्लूम फील्ड''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। यह शब्द multi- (“अनेक”) और -lingual (“भाषाओं से संबंधित”) के संयोजन से बना है। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है ,जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> <big>बहुभाषिकता; अनुवाद की आवश्यकता</big> # संवाद और संपर्क के लिए # सांस्कृतिक आदान प्रदान के लिए # शिक्षा और ज्ञान के प्रसार के लिए # राष्ट्रीय एकता के लिए # वैश्विक संपर्क और रोजगार के लिए ==अनुवाद में बहुभाषिकता == बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यत: एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> '''बहुभाषिक लेखक और स्व - अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं| इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं| इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है| यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ ता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] jyiq6fnkkqgk2k0kijl7qt4gmkui7yx 6586947 6586938 2026-07-18T00:04:09Z अनुनाद सिंह 1634 6586947 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ ता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] 15dwdl16pn1dvk06njd1gwyq08eb7gy 6586948 6586947 2026-07-18T00:06:27Z अनुनाद सिंह 1634 /* बाहरी कड़ियाँ */ 6586948 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== {{बहुभाषिकता}} * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ द्विभाषिकता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] 0n0fw7owjegukkirv7y4gsklij4hcvk 6586949 6586948 2026-07-18T00:06:48Z अनुनाद सिंह 1634 /* बाहरी कड़ियाँ */ 6586949 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== {{विकिसूक्ति|बहुभाषिकता}} * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ द्विभाषिकता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] qb2z98f3z36th36028txryiv3g3qhw4 6586958 6586949 2026-07-18T00:45:39Z अनुनाद सिंह 1634 /* बाहरी कड़ियाँ */ 6586958 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== {{विकिसूक्ति|बहुभाषिकता}} * [http://117.252.14.250:8080/jspui/bitstream/123456789/7899/1/14-वैश्वीकरण और बहुभाषिकता.pdf वैश्वीकरण और बहुभाषिकता] * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ द्विभाषिकता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] nkssu16mpj1g4evb2u1xjiv60l3nkkl 6586961 6586958 2026-07-18T01:23:41Z अनुनाद सिंह 1634 /* बाहरी कड़ियाँ */ 6586961 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== {{विकिसूक्ति|बहुभाषिकता}} * [http://117.252.14.250:8080/jspui/bitstream/123456789/7899/1/14-वैश्वीकरण%20और%20बहुभाषिकता.pdf वैश्वीकरण और बहुभाषिकता] * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ द्विभाषिकता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] 548rpl2k647uuvpwgqzangv9lns6w5i 6586963 6586961 2026-07-18T01:57:23Z अनुनाद सिंह 1634 /* बाहरी कड़ियाँ */ 6586963 wikitext text/x-wiki '''बहुभाषिकता''' (Multilingualism) का अर्थ है एक व्यक्ति या लोगों के समूह द्वारा एक से अधिक भाषाओं का उपयोग करना। '''बहुभाषी''' का अर्थ ऐसे व्यक्ति से है जो दो या अधिक [[भाषा|भाषाओं]] का प्रयोग करता है। विश्व में बहुभाषी लोगों की संख्या एकभाषियों की तुलना में बहुत अधिक है। विद्वानों का मत है कि द्विभाषिकता किसी भी व्यक्ति के ज्ञान एवं व्यक्तित्व के विकास के लिये बहुत उपयोगी है। जब भाषाएँ केवल दो होती हैं, तो इसे सामान्यतः द्विभाषिकता (Bilingualism) कहा जाता है। यह माना जाता है कि दुनिया की जनसंख्या में बहुभाषी वक्ताओं की संख्या एकभाषी वक्ताओं से अधिक है। सभी यूरोपियों में से आधे से अधिक लोग दावा करते हैं कि वे अपनी मातृभाषा के अलावा कम से कम एक और भाषा बोल सकते हैं, लेकिन बहुत से लोग केवल एक ही भाषा में पढ़ते और लिखते हैं। व्यापार, वैश्वीकरण और सांस्कृतिक खुलेपन में भाग लेने के इच्छुक लोगों के लिए बहुभाषी होना लाभदायक है। इंटरनेट द्वारा उपलब्ध जानकारी तक आसान पहुँच के कारण लोगों का कई भाषाओं से संपर्क पहले की तुलना में अधिक संभव हो गया है। जो लोग कई भाषाएँ बोलते हैं उन्हें बहुभाषी (polyglots) कहा जाता है <ref>{{Cite web|url=http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|title=A Global Perspective on Bilingualism and Bilingual Education|last=Tucker|first=G. Richard|date=August 1999|website=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|access-date=12 अप्रैल 2026|archive-date=15 दिसंबर 2019|archive-url=https://web.archive.org/web/20191215235020/http://www.cal.org/content/download/1803/19986/file/AGlobalPerspectiveonBilingualism.pdf|url-status=bot: unknown}}</ref> [[File:Bilingualism boosts grades at Treorchy Comprehensive.webm|thumb|[[वेल्स]] के लघु वीडियो में दिखाया गया है कि कैसे द्विभाषिकता स्कूलों में विद्यार्थियों के ग्रेड को बढ़ाती है। हिंदी उपशीर्षक।]] '''हाॅगेन''' के अनुसार, ‘‘दो भाषाओं के ज्ञान की स्थिति द्विभाषिक है।’’ वैसे तो बहुत सी भाषाओं को जानने वाले को बहुभाषिक कहते हैं परंतु एक से अधिक भाषा (केवल दो) जानने वाले को द्विभाषिक के साथ-साथ बहुभाषिक भी कहते हैं। '''[[ब्लूम फील्ड]]''' के अनुसार – ‘‘बहुभाषिकता की स्थिति तब पैदा होती है जब व्यक्ति किसी ऐसे समाज में रहता है जो उसकी मातृभाषा से अलग भाषा बोलता है और उस समाज में रहते हुए वह उस अन्य भाषा में इतना पारंगत हो जाता है कि उस भाषा का प्रयोग मातृभाषा की तरह कर सकता है।’’ कुछ विद्वानों ने इसे इस रूप में प्रस्तुत किया कि द्विभाषिकता या बहुभाषिकता व्यक्ति के बचपन से ही दो या बहुत भाषाएँ एक साथ सीखकर उसका समान रूप और सहज प्रभाव से प्रयोग करने की स्थिति को कहते हैं। परन्तु भाषावैज्ञानिक इसे अस्वीकार करते हुए तर्क देते हैं कि दो भाषाओं में मातृभाषा जैसी क्षमता एक ऐसा आदर्श है जिसे प्राप्त करना बहुत कठिन है। इस प्रकार एक से अधिक भाषाओं की जानकारी एवं प्रयोग बहुभाषिकता की स्थिति है। [[अंग्रेज़ी भाषा]] में “multilingual” शब्द का पहला दर्ज उपयोग 1830 के दशक में हुआ था। बहुभाषिकता की घटना उतनी ही पुरानी है जितनी विभिन्न भाषाओं का अस्तित्व।<ref>{{Cite web|url=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304|title=Multilingual,adj and meaning, etymology and more|website=https://www.oed.com/dictionary/multilingual_adj?tab=factsheet&tl=true#35428304}}</ref> आज किसी क्षेत्र में बहुभाषिकता के प्रमाण कई रूपों में मिलते हैं, जैसे द्विभाषी संकेत-पट्ट (bilingual signs), जो एक ही संदेश को एक से अधिक भाषाओं में प्रस्तुत करते हैं। ऐतिहासिक उदाहरणों में पाठ्य स्रोतों में ग्लॉस (glosses) भी शामिल हैं, जो मूल पाठ से अलग भाषा में टिप्पणियाँ प्रदान करते हैं; मैकरोनिक (macaronic) ग्रंथ, जिनमें दो या अधिक भाषाओं को मिलाकर लिखा जाता है और यह अपेक्षा की जाती है कि पाठक दोनों भाषाएँ समझता होगा; पवित्र और बोलचाल की अलग-अलग भाषाओं का अस्तित्व (जैसे चर्च लैटिन बनाम सामान्य लैटिन के रूप, और हिब्रू बनाम अरामाइक तथा अन्य यहूदी भाषाएँ); तथा भाषाई उधार (linguistic borrowings) और भाषा-संपर्क के अन्य परिणामों की अधिकता।<ref>{{Cite web|url=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431|title=History of Multilingualism|last=Chappelle|first=Carol|date=30 january 2013|website=https://onlinelibrary.wiley.com/doi/book/10.1002/9781405198431}}</ref> ==परिभाषा== भाषा-प्रवाह (language fluency) की परिभाषा की तरह ही बहस का विषय है। भाषाई निरंतरता (linguistic continuum) के एक छोर पर बहुभाषिकता को एक से अधिक भाषाओं में पूर्ण दक्षता के रूप में परिभाषित किया जा सकता है। इस स्थिति में वक्ता के पास उन भाषाओं का ज्ञान और नियंत्रण लगभग किसी मूल वक्ता (native speaker) के समान होता है।इसके विपरीत, दूसरे छोर पर ऐसे लोग आते हैं जो किसी दूसरी भाषा में केवल इतने वाक्य या अभिव्यक्तियाँ जानते हैं कि वे पर्यटक के रूप में सामान्य काम चला सकें। 1992 से विवियन कुक (Vivian Cook) का तर्क है कि अधिकांश बहुभाषी वक्ता इन न्यूनतम और अधिकतम परिभाषाओं के बीच कहीं स्थित होते हैं। कुक ऐसे लोगों को मल्टी-कम्पिटेंट (multi-competent) कहते हैं।<ref>{{Cite web|url=https://www.researchgate.net/publication/305368839|title=Perceived effectiveness of language acquisition in the process of Multilingual upbringing by parents of different nationalities|last=Paradowski and Bator|first=Michal B. And Alessandra|website=Research gate}}</ref> इसके अतिरिक्त, यह भी तय नहीं है कि किसी अलग भाषा की पहचान कैसे की जाए। <ref>{{Cite book|title=Second Language Learning and Language Teaching|url=https://archive.org/details/secondlanguagele0000cook_f0s0|last=Cook|first=Vivian|year=2008}}</ref>उदाहरण के लिए, विद्वानों के बीच अक्सर इस बात पर मतभेद होता है कि स्कॉट्स (Scots) एक स्वतंत्र भाषा है या केवल अंग्रेज़ी की एक बोली। इसी तरह, किसी भाषा की पहचान समय के साथ बदल भी सकती है, और कई बार इसके पीछे पूरी तरह राजनीतिक कारण होते हैं।उदाहरण के तौर पर, सर्बो-क्रोएशियन (Serbo-Croatian) भाषा को पूर्वी हर्जेगोविनियन बोली के आधार पर एक मानक भाषा के रूप में बनाया गया था, ताकि यह कई दक्षिण स्लाविक बोलियों के लिए एक साझा भाषा का काम कर सके। लेकिन यूगोस्लाविया के विघटन के बाद इसे अलग-अलग भाषाओं—सर्बियन, क्रोएशियन, बोस्नियन और मोंटेनेग्रिन—में विभाजित कर दिया गया। इसी प्रकार, रूसी ज़ारों के समय [[यूक्रेनी]] (Ukrainian) को [[रूसी भाषा]] की एक बोली बताकर उसकी स्वतंत्र पहचान को कम करके दिखाया गया, ताकि राष्ट्रीय भावना को हतोत्साहित किया जा सके। आज कई छोटे स्वतंत्र देशों में अंतरराष्ट्रीय संपर्क के कारण स्कूल के बच्चों को कई भाषाएँ सीखनी पड़ती हैं। उदाहरण के लिए, फिनलैंड में सभी बच्चों के लिए कम से कम तीन भाषाएँ सीखना अनिवार्य है: दो राष्ट्रीय भाषाएँ (फिनिश और स्वीडिश) तथा एक विदेशी भाषा (आमतौर पर अंग्रेज़ी)। इसके अतिरिक्त, कई फिनिश छात्र जर्मन, फ्रेंच या स्पेनिश जैसी अन्य भाषाएँ भी पढ़ते हैं।कुछ बड़े देशों में, जहाँ कई भाषाएँ बोली जाती हैं—जैसे भारत—स्कूल के बच्चों के लिए कई भाषाएँ सीखना सामान्य बात है, और यह अक्सर इस बात पर निर्भर करता है कि वे देश के किस क्षेत्र में रहते हैं।कई देशों में द्विभाषिकता अंतरराष्ट्रीय संबंधों के कारण भी विकसित होती है। चूँकि अंग्रेज़ी एक वैश्विक संपर्क भाषा (lingua franca) बन चुकी है, इसलिए कई देशों में जहाँ केवल एक ही आधिकारिक घरेलू भाषा है, वहाँ भी बड़ी संख्या में लोग द्विभाषी बन जाते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया और बेनेलक्स क्षेत्रों में देखी जाती है, साथ ही जर्मन भाषी क्षेत्रों में भी। अब यह प्रवृत्ति कुछ गैर-जर्मैनिक देशों में भी फैलने लगी है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/Ems_Ukaz|title=Ems ukaz|date=April 2019|website=Wikipedia}}</ref><ref>{{Cite web|url=http://foreign-language.org/|title=Writing With English As A Second Language|date=21 April 2015|website=Archived. Org.|access-date=12 अप्रैल 2026|archive-date=21 अप्रैल 2015|archive-url=https://web.archive.org/web/20150421235102/http://foreign-language.org/|url-status=dead}}</ref><ref>{{Cite web|url=https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|title=Foreign languages in Finland 's Educational System|last=Korhonen|first=Muusa|date=25 october 2006|access-date=12 अप्रैल 2026|archive-date=6 अप्रैल 2023|archive-url=https://web.archive.org/web/20230406192100/https://www.thenewfederalist.eu/foreign-languages-in-finland-s-educational-system|url-status=bot: unknown}}</ref> ==रिसेप्टर द्विभाषिकता== रिसेप्टिव द्विभाषी वे लोग होते हैं जो किसी दूसरी भाषा को समझ सकते हैं, लेकिन उसे बोल नहीं पाते या बोलने की उनकी क्षमता मनोवैज्ञानिक कारणों से बाधित होती है। रिसेप्टिव द्विभाषिकता अक्सर अमेरिका में रहने वाले वयस्क प्रवासियों में देखी जाती है, जो अंग्रेज़ी को अपनी मातृभाषा के रूप में नहीं बोलते, लेकिन उनके बच्चे अंग्रेज़ी को मातृभाषा की तरह बोलते हैं। ऐसा आमतौर पर इसलिए होता है क्योंकि उन बच्चों की शिक्षा अंग्रेज़ी में हुई होती है।<ref>{{Cite web|url=|title=Receptive Bilingual children 's use of language in interaction|last=Nakamura|first=Janice|date=January 2019|website=https://www.researchgate.net/publication/349176664}}</ref>ऐसी स्थिति में प्रवासी माता-पिता अपनी मातृभाषा और अंग्रेज़ी दोनों समझ सकते हैं, लेकिन वे अपने बच्चों से केवल अपनी मातृभाषा में ही बात करते हैं। यदि उनके बच्चे भी रिसेप्टिव द्विभाषी हों लेकिन बोलने के स्तर पर केवल अंग्रेज़ी-एकभाषी हों, तो बातचीत के दौरान माता-पिता अपनी मातृभाषा बोलेंगे और बच्चे अंग्रेज़ी में जवाब देंगे।यदि बच्चे उत्पादक (productively) द्विभाषी हों, तो वे माता-पिता की मातृभाषा में, अंग्रेज़ी में, या दोनों भाषाओं के मिश्रण में उत्तर दे सकते हैं। वे भाषा का चुनाव बातचीत की सामग्री, संदर्भ, भावनात्मक तीव्रता, तथा इस बात पर निर्भर करते हुए बदल सकते हैं कि वहाँ किसी तीसरे व्यक्ति की उपस्थिति है या नहीं जो किसी एक भाषा को समझता हो।तीसरा विकल्प ''कोड-स्विचिंग'' (Code-switching) की घटना को दर्शाता है, जिसमें उत्पादक द्विभाषी व्यक्ति बातचीत के दौरान एक भाषा से दूसरी भाषा में बदलता रहता है।रिसेप्टिव द्विभाषी लोग, विशेषकर बच्चे, अक्सर जल्दी ही बोलने में प्रवाह (oral fluency) हासिल कर लेते हैं यदि वे ऐसे वातावरण में पर्याप्त समय बिताएँ जहाँ उन्हें उस भाषा को बोलने की आवश्यकता हो जिसे वे पहले केवल समझते थे।जब तक दोनों पीढ़ियाँ बोलने में पूर्ण प्रवाह हासिल नहीं कर लेतीं, तब तक द्विभाषिकता की सभी परिभाषाएँ पूरे परिवार को सही ढंग से वर्णित नहीं कर पातीं। फिर भी, परिवार की विभिन्न पीढ़ियों के बीच भाषाई अंतर आमतौर पर परिवार के कामकाज या आपसी संबंधों में बहुत कम या कोई बाधा नहीं पैदा करता। किसी एक भाषा में किसी अन्य भाषा के वक्ता द्वारा प्रदर्शित रिसेप्टिव द्विभाषिकता, या उसी भाषा के अधिकांश वक्ताओं द्वारा प्रदर्शित स्थिति, परस्पर बोधगम्यता (mutual intelligibility) के समान नहीं होती। परस्पर बोधगम्यता दो भाषाओं का गुण है, जो उनके शब्दावली और व्याकरण में उच्च समानता के कारण उत्पन्न होती है (जैसे नॉर्वेजियन और स्वीडिश)। इसके विपरीत, रिसेप्टिव द्विभाषिकता किसी व्यक्ति या व्यक्तियों का गुण है और यह उनके जीवन-अनुभव, पारिवारिक परिवेश, शिक्षा और सांस्कृतिक वातावरण में भाषाओं की उपस्थिति जैसे व्यक्तिगत या सामूहिक कारकों से निर्धारित होती है।<ref>{{Cite web|url=http://www.ethnologue.com/show_language.asp?code=spa|title=|last=Weitzman|first=Elaine|date=18 April 2010|website=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|access-date=12 अप्रैल 2026|archive-date=18 अप्रैल 2010|archive-url=https://web.archive.org/web/20100418134038/http://www.ethnologue.com/show_language.asp?code=spa|url-status=bot: unknown}}</ref> ==अधिग्रहण, बहुभाषिकता के क्षेत्र में== भाषाविद् [[नोम चॉम्स्की]] (Noam Chomsky) का एक दृष्टिकोण यह है कि मनुष्यों में एक विशेष तंत्र होता है जिसे वे भाषा अर्जन उपकरण (Language Acquisition Device) कहते हैं। यह एक ऐसी प्रणाली है जो सीखने वाले को अपने आसपास के वक्ताओं द्वारा प्रयोग की जाने वाली भाषा के नियमों और अन्य विशेषताओं को सही ढंग से पुनः निर्मित करने में सक्षम बनाती है। चॉम्स्की के अनुसार यह तंत्र समय के साथ कमजोर हो जाता है और सामान्यतः किशोरावस्था (puberty) तक सक्रिय नहीं रहता। इसी कारण वे यह समझाते हैं कि कई किशोरों और वयस्कों को दूसरी भाषा (L2) के कुछ पहलुओं को सीखने में अपेक्षाकृत कम सफलता मिलती है।<ref>{{Cite book|title=Bilingualism and Second - Language Learning|last=Santrock|first=Jhon W.|year=2008}}</ref>यदि भाषा सीखना केवल एक संज्ञानात्मक (cognitive) प्रक्रिया है, जैसा कि स्टीफन क्रैशन (Stephen Krashen) के नेतृत्व वाले विचार-समूह का मानना है, तो भाषा सीखने के इन दोनों प्रकारों के बीच केवल सापेक्ष (relative) अंतर होगा, न कि पूर्णतः भिन्न (categorical) अंतर। रॉड एलिस (Rod Ellis) के अनुसार किए गए शोध बताते हैं कि जितनी जल्दी बच्चे दूसरी भाषा सीखना शुरू करते हैं, उच्चारण के मामले में वे उतने ही बेहतर होते हैं। इसी कारण यूरोप के स्कूलों में छात्रों को शुरुआती स्तर से ही दूसरी भाषा की कक्षाएँ दी जाती हैं, क्योंकि वहाँ कई पड़ोसी देशों की भाषाएँ अलग-अलग हैं और उनके बीच संपर्क अधिक है। आज अधिकांश यूरोपीय छात्र कम से कम दो विदेशी भाषाएँ सीखते हैं, और इस प्रक्रिया को [[यूरोपीय संघ]] (European Union) भी प्रोत्साहित करता है।<ref>{{Cite web|url=http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|title=Most EU students learn two foreign languages: Studies|website=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|access-date=12 अप्रैल 2026|archive-date=13 जनवरी 2012|archive-url=https://web.archive.org/web/20120113012757/http://www.euractiv.com/culture/eu-students-learn-foreign-languages-study/article-185818|url-status=bot: unknown}}</ref>एन फाथमैन (Ann Fathman) के शोध The Relationship Between Age and Second Language Productive Ability के आधार पर यह पाया गया कि उम्र के अंतर के कारण अंग्रेज़ी की रूपविज्ञान (morphology), वाक्यविन्यास (syntax) और ध्वनिविज्ञान (phonology) को सीखने की गति में अंतर होता है। लेकिन दूसरी भाषा सीखने में भाषा-अधिग्रहण का क्रम उम्र के साथ नहीं बदलता।दूसरी भाषा की कक्षा में छात्रों को अक्सर लक्ष्य भाषा (target language) में सोचने में कठिनाई होती है, क्योंकि वे अपनी मातृभाषा और सांस्कृतिक पैटर्न से प्रभावित होते हैं। रॉबर्ट बी. कैपलन (Robert B. Kaplan) के अनुसार दूसरी भाषा की कक्षाओं में विदेशी छात्रों के लेख कभी-कभी विषय से भटके हुए लग सकते हैं, क्योंकि वे ऐसी अलंकारिक शैली (rhetoric) और विचार-क्रम का उपयोग करते हैं जो मूल भाषा के पाठकों की अपेक्षाओं से अलग होता है।कई विदेशी छात्र भले ही वाक्य संरचना (syntactic structures) में दक्ष हो जाएँ, फिर भी वे उचित निबंध, शोधपत्र, थीसिस या शोध-प्रबंध लिखने में कठिनाई अनुभव कर सकते हैं। कैपलन ने बताया कि दूसरी भाषा सीखते समय दो महत्वपूर्ण अवधारणाएँ प्रभाव डालती हैं—तर्क (logic) और अलंकारिक शैली (rhetoric)। यहाँ तर्क का अर्थ दार्शनिक तर्क नहीं, बल्कि सामान्य सोच और अभिव्यक्ति की शैली से है, जो किसी संस्कृति से विकसित होती है और सार्वभौमिक नहीं होती। इसी तरह अलंकारिक शैली भी सार्वभौमिक नहीं होती; यह संस्कृति के अनुसार और समय के साथ बदलती रहती है।भाषा शिक्षक अलग-अलग भाषाओं के उच्चारण या व्याकरणिक संरचनाओं में अंतर का अनुमान लगा सकते हैं, लेकिन वे अक्सर इस बात को लेकर कम स्पष्ट होते हैं कि विभिन्न संस्कृतियों में भाषा का उपयोग अलग-अलग उद्देश्यों के लिए किस प्रकार किया जाता है, विशेषकर लेखन में।जो लोग कई भाषाएँ सीखते हैं, वे कभी-कभी सकारात्मक स्थानांतरण (positive transfer) का अनुभव करते हैं। इसका अर्थ है कि यदि नई भाषा का व्याकरण या शब्दावली पहले से सीखी गई भाषाओं से मिलती-जुलती हो, तो नई भाषा सीखना आसान हो जाता है। इसके विपरीत, छात्रों को नकारात्मक स्थानांतरण (negative transfer) भी हो सकता है, जिसमें पहले सीखी गई भाषा नई भाषा सीखने में बाधा उत्पन्न करती है।ट्रांसलैंग्वेजिंग (translanguaging) भी नई भाषाओं के अधिग्रहण में सहायता करता है। यह एक भाषा से दूसरी भाषा के बीच संबंध स्थापित करके नई भाषाओं के विकास में मदद करता है। == विभिन्न भाषा बोलने वालों के बीच पारस्परिक संवाद== जब दो लोग मिलते हैं, तो उनके बीच एक प्रकार की बातचीत और समन्वय की प्रक्रिया शुरू होती है। यदि वे एक-दूसरे के साथ एकता (solidarity) और सहानुभूति व्यक्त करना चाहते हैं, तो वे अपने व्यवहार में समानताओं को खोजने की कोशिश करते हैं। लेकिन यदि वक्ता सामने वाले व्यक्ति से दूरी दिखाना चाहते हैं या उसे पसंद नहीं करते, तो वे अंतर को अधिक महत्व देते हैं। यह प्रक्रिया भाषा में भी दिखाई देती है, जैसा कि कम्युनिकेशन अकोमोडेशन थ्योरी (Communication Accommodation Theory) में बताया गया है।<ref>{{Cite web|url=|title=https://en.wikipedia.org/wiki/Shana_Poplack|last=Shana|first=Poplack|website=Wikipedia}}</ref>कुछ बहुभाषी लोग कोड-स्विचिंग (code-switching) का उपयोग करते हैं, जिसमें वे अलग-अलग भाषाओं के बीच बदलते रहते हैं। कई मामलों में कोड-स्विचिंग वक्ताओं को एक से अधिक सांस्कृतिक समूहों या वातावरणों में भाग लेने की अनुमति देता है। यह एक रणनीति के रूप में भी काम कर सकता है, खासकर तब जब किसी भाषा में पर्याप्त दक्षता न हो। ऐसी रणनीतियाँ तब आम होती हैं जब किसी एक भाषा की शब्दावली कुछ विशेष क्षेत्रों में पर्याप्त विकसित न हो, या वक्ताओं ने कुछ शब्दावली क्षेत्रों में पर्याप्त दक्षता विकसित न की हो, जैसा कि अक्सर प्रवासी भाषाओं के मामले में होता है |कोड-स्विचिंग कई रूपों में दिखाई देता है। यदि वक्ता का दोनों भाषाओं के प्रति और कोड-स्विचिंग के प्रति सकारात्मक दृष्टिकोण है, तो एक ही वाक्य के भीतर भी कई बार भाषा परिवर्तन देखा जा सकता है। लेकिन यदि वक्ता को कोड-स्विचिंग का उपयोग करने में संकोच हो, जैसे कि कम दक्षता के कारण, तो वह जानबूझकर या अनजाने में एक भाषा के तत्वों को दूसरी भाषा के तत्वों में बदलकर अपने प्रयास को छिपाने की कोशिश कर सकता है। इसे कैल्किंग (calquing) कहा जाता है। उदाहरण के लिए, फ्रेंच में सही शब्द chantage (ब्लैकमेल) है, लेकिन कुछ लोग इसके स्थान पर courrier noir (शाब्दिक अर्थ: काला पत्र) जैसा अनुवादित शब्द प्रयोग कर सकते हैं। कभी-कभी पिजिन (pidgin) भाषाएँ भी विकसित हो जाती हैं। पिजिन दो या अधिक भाषाओं का मिश्रण होती है, जिसकी व्याकरणिक संरचना सरल होती है, लेकिन इसे मूल भाषाओं के वक्ता समझ सकते हैं। कुछ पिजिन आगे चलकर वास्तविक क्रियोल (creole) भाषाओं में विकसित हो जाती हैं, जैसे पापियामेंटो (Papiamento) कुरासाओ में या सिंग्लिश (Singlish) सिंगापुर में। अन्य पिजिन केवल स्लैंग या जार्गन के रूप में विकसित होती हैं, जैसे हेलसिंकी स्लैंग, जो अभी भी मानक फिनिश और स्वीडिश के साथ काफी हद तक समझी जा सकती है।<ref>{{Cite web|url=https://en.wikipedia.org/wiki/S2CID_(identifier)|title=|date=2 november 2015|website=Wikipedia}}</ref>कुछ मामलों में भाषाओं का एक-दूसरे पर लंबे समय तक प्रभाव पड़ता है, जिससे उनमें इतना परिवर्तन हो सकता है कि एक नई, गैर-क्रियोल भाषा उत्पन्न हो जाती है। उदाहरण के लिए, कई भाषाविदों का मानना है कि ऑक्सितान (Occitan) और कैटलन (Catalan) भाषाएँ उस समय विकसित हुईं जब एक ही ऑक्सितानो-रोमांस भाषा बोलने वाली जनसंख्या फ्रांस और स्पेन के राजनीतिक प्रभाव क्षेत्रों में विभाजित हो गई। इसी तरह यिद्दिश (Yiddish) भाषा मध्य उच्च जर्मन, हिब्रू और स्लाविक भाषाओं के तत्वों का जटिल मिश्रण है।द्विभाषी संवाद कभी-कभी बिना भाषाओं को बदले या मिलाए भी हो सकता है। कुछ क्षेत्रों में यह सामान्य है कि लोग एक ही बातचीत में अलग-अलग भाषाएँ बोलते हैं। यह स्थिति विशेष रूप से स्कैंडिनेविया में देखी जाती है। स्वीडिश, नॉर्वेजियन और डेनिश भाषाओं के अधिकांश वक्ता अपनी-अपनी भाषा बोलते हुए एक-दूसरे को समझ सकते हैं, हालांकि बहुत कम लोग दोनों भाषाएँ बोलते हैं। ऐसी परिस्थितियों में लोग अक्सर अपनी भाषा को थोड़ा समायोजित कर लेते हैं, ताकि ऐसे शब्दों से बचा जा सके जो दूसरी भाषा में नहीं पाए जाते या गलत समझे जा सकते हैं।अलग-अलग भाषाओं का उपयोग करते हुए बातचीत करने को आमतौर पर नॉन-कन्वर्जेंट डिस्कोर्स (non-convergent discourse) कहा जाता है, यह शब्द डच भाषाविद् राइट्ज़े जोंकमैन (Reitze Jonkman) द्वारा प्रस्तुत किया गया था। कुछ हद तक यह स्थिति डच और अफ्रीकांस भाषाओं के बीच भी देखी जाती है, हालांकि दोनों समुदायों के बीच दैनिक संपर्क कम होने के कारण यह कम आम है।एक और उदाहरण पूर्व चेकोस्लोवाकिया का है, जहाँ दो निकट संबंधी और पारस्परिक रूप से समझी जाने वाली भाषाएँ — चेक (Czech) और स्लोवाक (Slovak) — सामान्य रूप से उपयोग में थीं। अधिकांश चेक और स्लोवाक लोग दोनों भाषाओं को समझते थे, लेकिन बोलते समय वे केवल अपनी मातृभाषा का उपयोग करते थे। उदाहरण के लिए, चेकोस्लोवाकिया में टेलीविजन पर अक्सर दो लोगों को अलग-अलग भाषाएँ बोलते हुए बातचीत करते हुए देखा जा सकता था, और फिर भी वे एक-दूसरे को बिना किसी कठिनाई के समझ लेते थे। यह प्रकार की द्विभाषिकता आज भी मौजूद है, हालांकि चेकोस्लोवाकिया के विभाजन के बाद यह कुछ हद तक कम हो गई है। ==बहुभाषिकता के लाभ== ;अधिक संवाद कौशल जब कोई व्यक्ति एक से अधिक भाषाएं जानता है, तो वह विभिन्न भाषाई और सांस्कृतिक समूहों के लोगों के साथ आसानी से बातचीत कर सकता है। इससे सामाजिक , सांस्कृतिक और व्यावसायिक संबंधों को मजबूत बनाने में मदद मिलती है। 1. विभिन्न भाषाई समूहों से संपर्क की क्षमता बढ़ती है। 2. सांस्कृतिक समझ और सहानुभूति बढ़ती है। 3.गलतफ़हमियो को कम करने की क्षमता ; उच्च भाषाई क्षमता इससे व्यक्ति भाषा की संरचना शब्दावली और अभिव्यक्ति के विभिन्न रूपों को बेहतर ढंग से समझ पाता है। 1. शब्दावली और अभिव्यक्ति में वृद्धि 2. भाषा सीखने के क्षमता में सुधार 3. व्याकरण और भाषा सरंचना की समझ 4. प्रभावशाली लेखन और बोलने की क्षमता ;उत्कृष्ट प्रबंधकारी कार्य पद्धति प्रबंधकारी कार्य पद्धति से तात्पर्य मस्तिष्क की उन क्षमता से है जो हमें योजना बनाना ,ध्यान केंद्रित करना ,निर्णय लेना, समस्या हल करना और कार्यों को व्यवस्थित ढंग से संचालित करना सिखाती है। कई भाषाओं का उपयोग करने से व्यक्ति की मस्तिष्क में इन क्षमताओं का विकास होता है # ध्यान नियंत्रण # समस्या समाधान क्षमता # निर्णय लेने की क्षमता # मानसिक लचीलापन # स्मृति और कार्य प्रबंधन ;अपने परिवेश के अनुरूप ढलना जब कोई व्यक्ति एक से अधिक भाषाएं जानता है तो वह अलग-अलग सामाजिक सांस्कृतिक और भाषाई परिस्थितियों में सहजता से समायोजित हो सकता है। 1. विभिन्न सामाजिक परिस्थितियों में समायोजन 2. नई संस्कृति को समझने की क्षमता 3.परिस्थिति के अनुसार भाषा का चयन 4. प्रवास या नए स्थान में आसानी 5. आत्मविश्वास और सामाजिक सहभागिता ;अधिक करियर अवसर वैश्वीकरण के युग में विभिन्न भाषाओं का ज्ञान कई क्षेत्रों में रोजगार और पेशावर और विकास के लिए अत्यंत उपयोगी माना जाता है, जैसे- अंतर्राष्ट्रीय व्यापार और रोजगार अनुवाद और व्याख्या शिक्षा और शोधके क्षेत्र में अवसर पर्यटन प्रशासन और कूटनीति ; [[स्मृतिलोप]] के आरंभ में देर होना कई अध्ययनों में देखा गया है कि जो लोग जीवन भर दो या अधिक भाषाओं का नियमित उपयोग करते हैं, उनके मस्तिष्क में संज्ञानात्मक आरक्षित क्षमता अधिक विकसित हो सकती है। मस्तिष्ककी सक्रियता संज्ञानात्मक आरक्षित क्षमता ध्यान और स्मृति का अभ्यास ; स्मृति में सुधार जब कोई व्यक्ति एक से अधिक भाषाएं सीखता और उनका प्रयोग करता है तो उसकी मस्तिष्क को लगातार नहीं जानकारी को याद रखना और उपयोग करने का अभ्यास मिलता है। इससे स्मरण शक्ति मजबूत होती है। शब्दों और नियमों को याद रखने कीकमता मानसिक सक्रियता कार्यशील स्मृति ;कुशल बहुकार्यात्मकता बहुभाषी व्यक्ति अक्सर एक भाषा से दूसरी भाषा में अपने विचार जल्दी बदल सकता है। यह क्षमता उसे एक साथ कई कार्यो को संभालने और अलग-अलग परिस्थितियों में तेजी से प्रतिक्रिया देने में मदद करती है। ; सीखने की क्षमता में वृद्धि अतिरिक्त भाषायें सीखने की क्षमता बढ़ जाती है। ==भारत के सन्दर्भ में बहुभाषिकता== भारत में बहुभाषिकता की स्थिति नयी नहीं है। अपने सांस्कृतिक, व्यापारिक एवं सामाजिक कारणों के फलस्वरूप यहाँ बहुभाषिकता बहुत पहले से मौजूद है। भारत की संस्कृति इतनी समृद्ध है कि लोग यहाँ कहते हैं, ‘‘कोस-कोस पर बदले पानी, चार कोस पर बदले बानी।’’ तकनीकी के प्रभाव के कारण शिक्षा की व्यापकता, महानगरों के उदय एवं संचार माध्यमों का विकास हो रहा है जिस कारण अधिकाधिक व्यक्ति द्विभाषी या बहुभाषी होने की स्थिति को प्राप्त कर रहे हैं। भारत इन सबसे अछूता नहीं है। बहुभाषा-भाषी राष्ट्र होने के कारण यहाँ यह स्थिति पहले से ही थी परन्तु इन सबने इसके इस स्थिति को और समृद्ध किया है। [[भारतीय संविधान]] में कई भाषाओं को मान्यता दी है। परंतु वास्तविकता यह है कि देश में सैकड़ों भाषण और बोलियां जीवित हैं। यह विविधता भारत की सांस्कृतिक समृद्धि को दर्शाती है। एक सामान्य भारतीय व्यक्ति घर में अपनी मातृभाषा का उपयोग करता है , समाज में क्षेत्रीय भाषा बोलता है, और शिक्षा प्रशासन या व्यापक संपर्क के लिए हिंदी या अंग्रेजी का उपयोग कर सकता है। इस प्रकार भारतीय जीवन में भाषाएं अलग अलग भूमिकाएं निभाती हैं और एक दूसरे के साथ निरंतर संवाद करती रहती है। शिक्षा के क्षेत्र में भी बहुभाषिकता को महत्व दिया जाता है। भारत की भाषा नीतियां इस बात को स्वीकार करती हैं कि विद्यार्थियों को अपनी [[मातृभाषा]] के साथ साथ अन्य भाषाओं का भी ज्ञान होना चाहिए। इससे न केवल भाषा ही क्षमता बढ़ती है बल्कि विभिन्न संस्कृतियों और समाजों के प्रति समझ भी विकसित होती है। भारतीय संदर्भ में बहुभाषिकता सामाजिक सह अस्तित्व और सांस्कृतिक विविधता की अभिव्यक्ति है। अनेक भाषाओं के बीच निरंतर संपर्क और संवाद भारतीय समाज को जीवंत बनातेहैं। यही बहुभाषिकता भारत को ऐसा देश बनती है जहां विभिन्न भाषाएं और संस्कृतियां एक साथ रहते हुए भी एक साझा सांस्कृतिक पहचान का निर्माण करती हैं। == बहुभाषिकता और अनुवाद== बहुभाषिकता आज के वैश्विक समाज की एक प्रमुख विशेषता है। पहले अनुवाद को मुख्यतः एक भाषा से दूसरी भाषा में संदेश के स्थानांतरण के रूप में देखा जाता था, जहां स्रोत भाषा, लक्ष्य भाषा और एकभाषिक पाठक की धारणा प्रमुख थी। लेकिन आधुनिक समाज में भाषाएं, संस्कृतियां और लोग स्वयं बहुभाषिक होते हैं। इसलिए बहुभाषिकता अनुवाद अध्ययन (Translation Studies) के लिए एक महत्वपूर्ण चुनौती बन गई है।<ref name=":1">{{Cite book|title=Multilingualism as a challenge for translation studies|last=Meylaerts|first=Reine|publisher=Routledge|year=2013}}</ref> अंग्रेज़ी भाषा विश्व स्तर पर अधिक व्यापक होती जा रही है, वैसे-वैसे अधिक लोग बहुभाषी बन रहे हैं और अनुवाद एक अत्यंत महत्वपूर्ण संचार गतिविधि के रूप में सामने आ रहा है। पहले अनुवाद को मूल पाठ की एक कमजोर या निम्न स्तर की प्रतिलिपि माना जाता था, लेकिन आज इसे एक ऐसी रचनात्मक प्रक्रिया के रूप में देखा जाता है जो किसी दूसरी भाषा में एक नया मूल पाठ (new original) तैयार करती है।<ref>{{Cite book|title=Post - colonial Translation|last=Basnett and Trivedi|first=Susan and Harish|publisher=Routledge|year=1999}}</ref> भारत में अनुवाद पर वर्तमान चर्चा आम तौर पर यह नहीं मानती कि अनुवाद एक बहुभाषी सार्वजनिक क्षेत्र में कार्य करता है, जहाँ लोग एक साथ कई भाषाओं में सक्रिय होते हैं। इसके बजाय अनुवाद को अक्सर ऐसे उपकरण के रूप में देखा जाता है जो बहुभाषी नागरिकों के बीच नहीं ,बल्कि एकभाषी नागरिकों के बीच संचार को संभव बनाता है, जो एक ही भू-राजनीतिक और सांस्कृतिक स्थान साझा करते हैं।<ref name=":0" /> स्वतंत्रता के बाद भारत में अनुवाद को एक महत्वपूर्ण “राष्ट्र-निर्माण” (nation-building) की प्रक्रिया के रूप में देखा गया। इसका उद्देश्य एक नए बहुभाषी और लोकतांत्रिक गणराज्य में नागरिकों की सहभागिता को बढ़ावा देना था। लेकिन कभी-कभी यह दृष्टिकोण कुछ हद तक आदर्शवादी (utopian) भी प्रतीत होता है, क्योंकि यह भाषा की स्थिति और शक्ति में मौजूद असमानताओं—जैसे वर्ग, जाति, लिंग और धर्म—को पूरी तरह ध्यान में नहीं रखता।<ref name=":0" /> गणेश देवी के अनुसार "एकभाषी यूरोपीय संस्कृतियों के लिए अनुवाद की क्रिया के प्रति अधिक सजग होना स्वाभाविक है”, जबकि भारत जैसे बहुभाषी समाज में यह स्थिति अलग है|"<ref name=":0">{{Cite web|url=https://doi.org/10.1080/14781700.2021.1936149|title=Translation in India: Multilingual Practice and Cultural histories of tests|last=Israel|first=Hephizibah|date=21 june 2021|website=https://doi.org/10.1080/14781700.2021.1936149}}</ref> हरीश त्रिवेदी के अनुसार “बहुभाषिकता सामान्यतः अनुवाद के लिए अनुकूल नहीं होती, क्योंकि अनुवाद की आवश्यकता मुख्यतः एकभाषी वक्ता को होती है। इसलिए उनके अनुसार, भारत में जहाँ विश्व की सबसे व्यापक भाषाई विविधता है, उसी कारण से यहाँ अनुवाद का इतिहास लगभग 'गैर-इतिहास (non-history)'जैसा प्रतीत होता है।<ref>{{Cite book|title=In our own time,on own terms|last=Trivedi|first=Harish|year=2006}}</ref> रीता कोठारी के अनुसार "भारत के बहुभाषी नागरिकों द्वारा विभिन्न भाषाओं के बीच लगातार आवाजाही के कारण अनुवाद भारत में एक सामान्य और दैनिक गतिविधि बन गया है, जिस पर विशेष सिद्धांत बनाने की आवश्यकता ही नहीं समझी गई।"<ref>{{Cite book|title=Translation India|last=Kothari|first=Rita|publisher=Routledge|year=2003}}</ref> रीता कोठारी के अनुसार भारत में “बहुभाषी राष्ट्र” को कोई विरोधाभासी अवधारणा नहीं माना गया। ये ऐसे प्रतीक की खोज पर बल देती हैं,जो भाषा की बहुलतावादी अवधारणा को नष्ट न करें। <ref name=":0" /> पश्चिमी आधुनिकता और राष्ट्र-निर्माण की प्रक्रियाओं ने बार-बार ऐसी तकनीकी और प्रशासनिक सोच को बढ़ावा दिया, जो एक सामान्य भाषा को दक्षता का प्रतीक मानती है और कई भाषाओं को विकास के लिए बोझ समझती है।<ref name=":0" /> '''बहुभाषिक लेखक और स्व-अनुवाद''' - कई लेखक स्वयं अपनी रचनाओं का दूसरी भाषा में अनुवाद करते हैं। इससे लेखक और अनुवादक की पारंपरिक भूमिकाएं आपस में मिल जाती हैं। इससे ये प्रश्न उठता है कि मौलिकता और रचनात्मकता केवल लेखक की होती है या अनुवादक भी उसमें योगदान देता है। यह स्थिति अनुवाद अध्ययन के पारंपरिक सिद्धांतों को चुनौती देती हैं।<ref name=":1" /> ==सन्दर्भ== {{टिप्पणीसूची}} ==इन्हें भी देखें== *[[भाषा]] *[[मातृभाषा]] ==बाहरी कड़ियाँ== {{विकिसूक्ति|बहुभाषिकता}} * [http://117.252.14.250:8080/jspui/bitstream/123456789/7899/1/14-वैश्वीकरण%20और%20बहुभाषिकता.pdf वैश्वीकरण और बहुभाषिकता] * [https://web.archive.org/web/20100316160348/http://pratilipi.in/2009/10/the-rise-and-fall-of-the-bilingual-intellectual-guha/ द्विभाषिकता का उत्थान और पतन] (रामचन्द्र गुहा) * [https://web.archive.org/web/20090605134232/http://www.peques.co.uk/parents/faq.php Common Questions about a bilingual education for young children] * [https://web.archive.org/web/20100111072826/http://www.biculturalfamily.org/benefitsofmultilingualism.html The benefits of multilingualism] * [https://web.archive.org/web/20080303193827/http://archives.cbc.ca/IDD-1-73-655/politics_economy/bilingualism/ CBC Digital Archives – The Road to Bilingualism] * [https://web.archive.org/web/20180808070808/http://bilingualwiki.com/ Encouraging Childhood Multilingualism] * [https://web.archive.org/web/20090201065702/http://homepage.ntlworld.com/vivian.c/SLA/SLABIB/ SLABIB: Second Language Acquisition] * [https://web.archive.org/web/20090530230334/http://www.hanen.org/web/Home/AboutHanen/NewsViews/OneLanguageorTwo/tabid/220/Default.aspx One Language or Two: Answers to Questions about Bilingualism in Language-Delayed Children] * [https://web.archive.org/web/20190901065149/https://www.raising-bilingual-children.com/ raising-bilingual-children.com - webpage dedicated to educating children in a multilingual environment. Information/Recommendations, Forums, Links etc.] * [https://web.archive.org/web/20140228162516/http://www.bilingualism.bangor.ac.uk/ ESRC Centre for Research on Bilingualism in Theory and Practice] * [https://web.archive.org/web/20181114020403/http://ok-board.com/ Multilingial virtual keyboard] * Bastardas-Boada, Albert. [https://web.archive.org/web/20080227003624/http://www6.gencat.net/llengcat/noves/hm02estiu/metodologia/a_bastardas.pdf "World language policy in the era of globalization: Diversity and intercommunication from the perspective of 'complexity'"], Noves SL. Revista de Sociolingüística 2002 (Summer). * De Mauro, Tullio "Linguistic Variety and Linguistic Minorities." Italian Cultural Studies, an Introduction. Ed. David Forgacs and Robert Lumley. New York: Oxford UP, 1996. 88-101. * [https://web.archive.org/web/20150221200312/http://raj-bhasha-hindi.blogspot.in/2011/07/blog-post_7459.html बहुभाषिकता – आज की ज़रूरत] * [https://www.sahchar.com/द्विभाषिकता-एवं-बहुभाषिक/ द्विभाषिकता एवं बहुभाषिकताः संदर्भ एवं प्रकृति] – श्वेतांशु शेखर [[श्रेणी:भाषा]] [[श्रेणी:बहुभाषिकता|*]] 128dw8vqt0544f6xg5z0j82zos040fy सीबी मुथम्मा 0 164849 6586959 2567179 2026-07-18T00:48:34Z Spiritualvishesh 706638 6586959 wikitext text/x-wiki भारत की प्रथम महिला राजनयिक जन्म 1924 निधन- 15 अक्टूबर 2009 जीवन परिचय मुथम्मा का जन्म 1924 कर्नाटक के कोडागु जिले के विराजपेट गाँव में हुआ था। वे हंगरी, नीदरलैंड और घाना में भारत की तरफ से राजदूत रहीं थीं। वे यूरोप, एशिया और अफ्रीका में भी कई भारतीय राजनयिक मिशनों का हिस्सा रही थीं। संघ लोक सेवा आयोग की परीक्षा पास कर 1949 में सिविल सेवा में आने वाली मुथम्मा भारत की प्रथम महिला थीं। उन्होंने अपने कार्यक्षेत्र के रूप में भारतीय विदेश सेवा का चुनाव किया। उनकी पहली नियुक्ति भारतीय दूतावास, पेरिस में तीसरे सचिव के रूप में हुई। 15 अक्टूबर 2009 को बंगलौर के एक निजी अस्पताल में उनका निधन हो गया। cswzrmxvec027fivblw2ei3z2yodbzn कृत्रिम पेसमेकर 0 191377 6586754 6577818 2026-07-17T13:11:39Z InternetArchiveBot 500600 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 6586754 wikitext text/x-wiki [[चित्र:Pacemaker GuidantMeridianSR.jpg|thumb|right|एक पेसमेकर, सेंटीमीटर में पैमाना]] [[चित्र:St Jude Medical pacemaker with ruler.jpg|right|thumb|ट्रांसवेनस प्रविष्टि के लिए इलेक्ट्रोड युक्त एक कृत्रिम पेसमेकर (सेंट जुड मेडिकल से).उपकरण का ढांचा लगभग 4 सेंटीमीटर लम्बा है, इलेक्ट्रोड की माप 50 और 60 सेंटीमीटर के बीच (20 से 24 इंच) है।]]<hiero> Iska boyfriend chahie </hiero>दिल की [[धड़कन]] को नियंत्रित रखने के लिए '''पेसमेकर''' (या '''कृत्रिम पेसमेकर,''' ताकि दिल का प्राकृतिक [[पेसमेकर]] मानकर भ्रमित न हुआ जाय) एक [[चिकित्सा उपकरण]] है, जो दिल की मांसपेशियों से संपर्क करने के लिए [[इलेक्ट्रोड]] द्वारा प्रदत्त विद्युत आवेगों का उपयोग करता है। दिल अर्थात् हृदय के [[मूल पेसमेकर]] का पर्याप्त तेजी से काम नहीं करने या फिर [[दिल की विद्युत चालन प्रणाली]] में अवरोध आ जाने की वजह से पेसमेकर का प्राथमिक प्रयोजन पर्याप्त [[हृदय गति]] को बनाये रखने का है। आधुनिक पेसमेकर बाह्य रूप से प्रोग्रामयोग्य होते हैं और अलग-अलग मरीजों के लिए अनुकूलतम पेसिंग मोड का चयन करने की [[हृदय रोग विशेषज्ञ]] को अनुमति देते हैं। कुछ में एक ही इम्प्लांटयोग्य उपकरण में पेसमेकर और [[वितंतुविकंपनित्र]] (डिफाइबरीलेटर) सयुक्त रूप से होते हैं। दूसरों में, दिल के [[निचले कक्षों]] के [[संकालन]] (सिंक्रोनाइजेशन) में सुधार के लिए दिल के अंतर्गत भिन्न अंग-विन्यास के उद्दीप्तिकारक के बहुत सारे इलेक्ट्रोड होते हैं। == इतिहास == [[चित्र:First pacemaker (Siemens-Elema 1958).jpg|thumb|225px|right|पहला प्रत्यारोपणयोग्य पेसमेकर.]][[चित्र:Arne Larsson.jpg|thumb|225px|right|1958 में, आर्नी लार्सन (1915-2001) एक प्रत्यारोपणयोग्य पेसमेकर प्राप्त करने वाले व्यक्ति बने.उन्होंने अपने जीवन में कुल 26 उपकरण लगवाये और पेसमेकर के जरूरतमंद अन्य रोगियों के लिए अभियान चलाया।]] 1899 में, जे.ए. मैकविलियम ने अपने प्रयोगों के बारे में ब्रिटिश मेडिकल जर्नल में लिखा कि [[कोष्ठक संबंधी]] संकुचन से [[दिल की धड़कन बंद]] हो जाने के मामले में मानव हृदय पर विद्युतीय आवेग या धक्के का संप्रयोग संभव है और आवेगों से 60-70/प्रति मिनट के बराबर के अंतराल में प्रति मिनट 60-70 धड़कन की हृदय की लय फिर से पैदा की जा सकती है।<ref>{{cite journal |author=McWilliam JA |year=1899 |month= |title=Electrical stimulation of the heart in man |journal=Br Med J |volume=1 |issue= |pages=348–50 |id= |url= |accessdate= 2007-10-24 |quote= |doi=10.1136/bmj.1.1468.348 }}. [http://www.hrsonline.org/News/ep-history/timeline/1800s.cfm#elec "मनुष्य में हृदय का विद्युतीय उत्तेजन - 1899"] {{Webarchive|url=https://web.archive.org/web/20101205235949/http://www.hrsonline.org/News/ep-history/timeline/1800s.cfm#elec |date=5 दिसंबर 2010 }} में आंशिक उद्धरण, ''हार्ट रिदम सोसाइटी'', 11 मई 2007 को एक्सेस किया गया।</ref> 1936 में, सिडनी के [[रॉयल प्रिंस अल्फ्रेड अस्पताल]] के डॉ॰ मार्क सी. लिडवेल ने [[सिडनी विश्वविद्यालय]] के भौतिक विज्ञानी एडगर एच. बूथ के सहयोग से एक पोर्टेबल उपकरण आविष्कृत किया, जिसे "एक विद्युतीय बिंदु में प्लग किया गया" और जिसका "एक ध्रुव एक सशक्त लवण घोल सिक्त त्वचा पैड के साथ अनुप्रयुक्त किया गया था", जबकि दूसरा ध्रुव "नुकीले बिंदु को छोड़ विद्युत-रोधित सुई से युक्त" था और जो हृदय के उपयुक्त कोष्ठ से प्लग किया हुआ था। 1928 में, "पेसमेकर दर लगभग 80 से 120 प्रति मिनट के हिसाब से परिवर्तनीय था और उसी तरह वोल्टेज भी 1.5 से 120 वोल्ट के बीच परिवर्तनीय था, इस उपकरण का इस्तेमाल [[सिडनी के क्राउन स्ट्रीट वीमेंस अस्पताल]] में एक नवजात शिशु को पुनर्जीवित करने के लिए किया गया था, जिसका दिल उद्दीप्तिकरण के "10 मिनट के बाद" "अपने लय पर धड़कने लगा".<ref>लिड्वेल एम. सी., ''ट्रांजैक्शंस ऑफ़ द थर्ड सेशन'' में "एनिस्थिसिया से संबंधित हृदीय रोग", ऑस्ट्रेलियन मेडिकल काँग्रेस, सिडनी, ऑस्ट्रेलिया, 2-7 सितम्बर 1929, पृष्ठ 160.</ref><ref name="Mond_1982">{{cite journal |author=Mond H, Sloman J, Edwards R |title=The first pacemaker |journal=Pacing and clinical electrophysiology : PACE |volume=5 |issue=2 |pages=278–82 |year=1982 |pmid=6176970 |doi=10.1111/j.1540-8159.1982.tb02226.x}}</ref> 1942 में, स्वतंत्र रूप से कार्यरत अमेरिकी शरीर-क्रिया विज्ञानी [[अल्बर्ट हेमैन]] ने खुद ही एक इलेक्ट्रो-मेकेनिकल उपकरण की खोज की, जो एक हस्त-चालित मोटर स्प्रिंग-वुंड से संचालित होता था। हेमैन ने खुद ही अपने आविष्कार का उल्लेख एक "कृत्रिम पेसमेकर" के रूप में किया, इस नाम का इस्तेमाल आज भी हो रहा है।<ref>एक्विलिना ओ., [http://www.impaedcard.com/issue/issue27/aquilinao2/AquilinaO.htm "कार्डियक पेसिंग का एक संक्षिप इतिहास"] {{Webarchive|url=https://web.archive.org/web/20070517083733/http://www.impaedcard.com/issue/Issue27/aquilinao2/AquilinaO.htm |date=17 मई 2007 }}, ''इमेज्स पेडियाट्र कार्डियल'' 27 (2006), पीपी. 17-81.</ref><ref>{{cite journal |author=Furman S, Szarka G, Layvand D |title=Reconstruction of Hyman's second pacemaker |journal=Pacing Clin Electrophysiol |volume=28 |issue=5 |pages=446–53 |year=2005 |pmid=15869680 |doi=10.1111/j.1540-8159.2005.09542.x |url=http://doi.org/10.1111/j.1540-8159.2005.09542.x}}</ref> 1930 के दशक के आरंभ और [[द्वितीय विश्व युद्ध]] के बीच किये गये अनुसंधान के प्रकाशन में एक स्पष्ट [[Wikt:hiatus|क्रमभंग]] देखने को मिला, इसकी वजह जनता की यह धारणा हो सकती है कि 'मृत को पुनर्जीवित' करना प्रकृति के कार्य में हस्तक्षेप है। उदाहरण के लिए, "अपने साथी चिकित्सकों के बीच और उस समय के समाचार पत्र की खबरों के कारण, प्रतिकूल प्रचार को टालने के लिए हेमैन मानव में अपने पेसमेकर के उपयोग के डेटा प्रकाशित नहीं किया करते थे। लिडवेल को शायद इसका पता था और इसीलिए उन्होंने इंसानों पर अपने प्रयोगों को आगे नहीं बढ़ाया.<ref name="Mond_1982"/> [[टोरंटो जनरल अस्पताल]] के हृदय-वक्ष सर्जन [[विल्फ्रेड गॉर्डन बिग्लो]] के अवलोकन के आधार पर 1950 में कनाडा के एक विद्युत इंजीनियर [[जॉन होप्स]] ने एक बाह्य पेसमेकर डिजाइन किया और उसका निर्माण किया। [[ट्रांसक्युटेनीयस पेसिंग]] देने के लिए [[वैक्यूम ट्यूब]] तकनीक का उपयोग करनेवाला एक पर्याप्त बाह्य पेसिंग उपकरण, जो उपयोग के समय मरीज के लिए दर्दनाक और बहुत ही अपरिष्कृत था और जो दीवार पर लगे AC सॉकेट से संचालित होता था, जिससे [[रक्त में अधिक मात्रा में फाइब्रिनोजन]] के उत्प्रेरण से [[बिजली के करंट से मौत]] हो जाने के खतरे की आशंका बनी रहती. [[पॉल जोल]] सहित कई आविष्कारकों ने बाद के वर्षों में छोटे लेकिन फिर भी भारी [[ट्रांसक्युटेनीयस पेसिंग]] उपकरण बनाये, जिनमें ऊर्जा आपूर्ति के लिए फिर से चार्ज करने लायक बड़ी बैटरी का उपयोग हुआ करता था।<ref>{{Cite web |url=http://news.harvard.edu/gazette/2001/04.19/12-zoll.html |title=हार्वर्ड गज़ेट: पॉल मौरिस ज़ोल |access-date=19 सितंबर 2010 |archive-url=https://web.archive.org/web/20110207152241/http://www.news.harvard.edu/gazette/2001/04.19/12-zoll.html |archive-date=7 फ़रवरी 2011 |url-status=live }}</ref> 1967 में, [[मिनेसोटा विश्वविद्यालय]] में किये गये शोध के परिणामों को डॉ॰ विलियम एल. वेरिच ने प्रकाशित किया। [[मायोकार्डियल]] (दिल का दौरा) इलेक्ट्रोड के उपयोग से हृदय की दर, हृदय संबंधी आउटपुट और सम्पूर्ण [[हृद्रोध]] से ग्रस्त प्राणी की महाधमनी के कम दबाव की पूर्वावस्था की प्राप्ति को इन अध्ययनों द्वारा प्रदर्शित किया गया। इस अवधि में, पोस्टसर्जिकल हार्ट ब्लॉक का यह प्रभावी नियंत्रण [[ओपन हार्ट सर्जरी]] से होनेवाली [[मृत्यु दर]] में कमी लाने में महत्वपूर्ण योगदान साबित हुआ।<ref>{{cite journal |author=Weirich W, Gott V, Lillehei C |title=The treatment of complete heart block by the combined use of a myocardial electrode and an artificial pacemaker |journal=Surg Forum |volume=8 |issue= |pages=360–3 |year=1957 |pmid=13529629 |doi= |url=}}</ref> [[सिलिकॉन]] [[ट्रांजिस्टर]] का विकास और 1956 में इसकी वाणिज्यिक उपलब्धता व्यावहारिक कार्डियक पेसमेकिंग के तेजी से विकास में निर्णायक घटना साबित हुई। 1957 में, मिनीपोलिस, मिनीसोटा के इंजीनियर [[अर्ल बक्कन]] ने डॉ॰ [[सी. वाल्टन लिलेहेई]] के मरीज के लिए धारण करने योग्य पहला बाह्य पेसमेकर बनाया। एक छोटे-से डिब्बे में रखे इस ट्रांजिस्टराईज्ड पेसमेकर में हृदय की दर के पदानियमन अर्थात् पेसिंग और आउटपुट वोल्टेज के समायोजन के लिए नियंत्रक होते थे और जो इलेक्ट्रोड के उस छोर से जुड़े होते थे जो मरीज की त्वचा से गुजरते हुए उस इलेक्ट्रोड में जाकर समाप्त होता था जो [[दिल की मांसपेशी]] (मायोकार्डियम) की सतह से संलग्न होता था। स्वीडन के सोलना स्थित [[कारोलिंस्का इंस्टीच्युट]] में 1958 में एक पूरी तरह से इम्प्लांट करने योग्य पेसमेकर का मानव शरीर में पहला नैदानिक इम्प्लांटेशन किया गया, इसमें [[रुने एल्मक्विस्ट]] और सर्जन [[अके सेनिंग]] द्वारा बनाये गये पेसमेकर का उपयोग किया गया, जो [[थोराकोटोमी]] (वक्ष दीवार में सर्जिकल चीरा) द्वारा [[दिल की मांसपेशी]] से संलग्न इलेक्ट्रोड से जुड़ा था। यह उपकरण तीन घंटे के बाद विफल हो गया। तब एक दूसरा उपकरण प्रत्यारोपित किया गया, जो दो दिन तक चला. दुनिया का पहला इम्प्लांट योग्य पेसमेकर लगाने वाले मरीज अर्ने लार्सन ने अपने जीवन में विभिन्न प्रकार के 26 पेसमेकर लगाए. 2001 में, 86 की उम्र में उनका निधन हो गया<ref>{{Cite web |url=http://www.sjm.com/successstories/successstory.aspx?name=Larsson%2C+Arne |title=सफलता की कहानियां: लार्सन, आर्नी: सेंट जुड मेडिकल |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20090927023157/http://www.sjm.com/successstories/successstory.aspx?name=Larsson%2C+Arne |archive-date=27 सितंबर 2009 |url-status=dead }}</ref>. 1969 में, अस्थायी [[ट्रांसवेनस पेसिंग]] का पहला प्रदर्शन फर्मन ''एट अल.'' ने किया, जिसमें [[कैथेटर]] इलेक्ट्रोड को मरीज की [[बैसिलिक नस]] के मार्फत अंदर डाला जाता था।<ref>{{cite journal |author=Furman S, Schwedel JB |title=An intracardiac pacemaker for Stokes-Adams seizures |journal=N. Engl. J. Med. |volume=261 |issue= |pages=943–8 |year=1959|pmid=16689837 |doi=10.1111/j.1540-8159.2006.00399.x |url=http://doi.org/10.1111/j.1540-8159.2006.00399.x}}</ref> फरवरी 1970 में, [[उरुग्वे]] के [[मोंटेवीडियो]] स्थित कस्मु अस्पताल में फिआन्द्रा और रुबियो नामक डॉक्टरों ने स्वीडिश एल्मक्विस्ट उपकरण के एक उन्नत संस्करण को प्रत्यारोपित किया। वो उपकरण मरीज की अन्य बीमारियों से 9 महीने बाद हुई मृत्यु तक चला. स्वीडिश-परिकल्पित उपकरणों में रिचार्ज योग्य बैटरियां इस्तेमाल की जाती थीं, जो बाहर से एक इंडक्शन क्वायल (आवेश-कुंडली) द्वारा चार्ज या आवेशित होती थीं। [[विल्सन ग्रेटबैच]] द्वारा निर्मित प्रतिस्थापना योग्य पेसमेकर [[पशु पर परीक्षण]] के बाद मनुष्यों में अप्रैल 1960 में प्रवेश कराया गया। ग्रेटबैच का नवीनीकरण इससे पहले स्वीडिश उपकरण जिसमें प्राथमिक सेल ([[पारद बैटरी]]) का इस्तेमाल ऊर्जा के स्रोत के रूप में होता था, से भिन्न था। पहला मरीज और 18 महीने जीवित रहा। प्रतिस्थापना योग्य पेसमेकर के साथ [[ट्रांसवेनस पेसिंग]] का इस्तेमाल पहली बार USA<ref>"1962 में स्थाई ट्रांसवेनस पेसिंग", पर्सोनेट V, PACE,1:285, 1978</ref><ref>"एक इंट्राकार्डियक डाइपोलर इलेक्ट्रोड का उपयोग करते हुए एक स्थायी प्रत्यारोपणयोग्य पेसमेकर के विकास की प्रारंभिक जांच", पर्सोनेट V, ज़ुकर आई. आर., असा एम. एम., रोग-विषयक शोध, 10:391, 1962</ref><ref>{{cite journal |author=Parsonnet V, Zucker IR, Maxim Asa M |title=An intracardiac bipolar electrode for interim treatment of complete heart block |journal=Am. J. Cardiol. |volume=10 |issue= |pages=261–5 |year=1962 |pmid=14484083 |doi= 10.1016/0002-9149(62)90305-3|url=https://archive.org/details/sim_american-journal-of-cardiology_1962-08_10_2/page/261}}</ref> के परसोनेट में, स्वीडेन के लेगरग्रेन<ref>{{cite journal |author=Lagergren H |title=How it happened: my recollection of early pacing |journal=Pacing Clin Electrophysiol |volume=1 |issue=1 |pages=140–3 |year=1978 |pmid=83610 |doi= 10.1111/j.1540-8159.1978.tb03451.x|url=}}</ref><ref>{{cite journal |author=Lagergren H, Johansson L |title=Intracardiac stimulation for complete heart block |journal=Acta Chir Scand |volume=125 |issue= |pages=562–6 |year=1963 |pmid=13928055 |doi= |url=}}</ref> में और फ्रांस के जीन-वेल्टी<ref>जीन जेक़स वेल्टी: जीवनी, हार्ट रिदम फाउंडेशन</ref> में 1962-63 के बीच हुआ। ट्रांसवेनस, या परवेनस प्रक्रिया में शिरा में एक चीरा लगा कर [[कैथेटर]] इलेक्ट्रोड लीड को [[फ्लूरोस्कोप]] के मार्गदर्शन के तहत डाला जाता है, जब तक कि यह दाहिने निलय के [[ट्राबेकुले]] के भीतर नहीं चला जाता. यह पद्धति 1960 के दशक के मध्य में पसंदीदा पद्धति बन गयी। [[चित्र:CPI Pacemaker.jpg|thumb|विश्व का पहला लिथियम-आयोडाइड सेल चालित पेसमेकर.कार्डियक पेसमेकर्स इंक. 1972]]पूर्ववर्ती प्रतिस्थापना योग्य सभी उपकरण अविश्वसनीय और उपलब्ध प्राथमिक सेल तकनीक, जो कि मुख्य रूप से [[पारद बैटरी]] हुआ करती थी, के कारण छोटे जीवनकाल वाली थीं। 1960 के दशक के अंत तक, USA की ARCO समेत बहुत सारी कंपनियों ने आईसोटॉप पावर पेसमेकर विकसित किया, लेकिन इस विकास को 1971 में [[विल्सन ग्रेटबैच]] द्वारा विकसित लिथियम-आयोडिड सेल के विकास ने पछाड़ दिया। भविष्य में पेसमेकर की डिजाइन के लिए लिथियम-आयोडिड या लिथियम एनोड सेल मानक बन गया। आरंमिक उपकरण की विश्वसनीयता में शरीर के तरल से निकला जलीय वाष्प का प्रसार इलेक्ट्रॉनिक सर्किट को [[एपॉक्सी]] राल के कैप्सूलीकरण के जरिए प्रभावित करना एक और अड़चन बना। शुरू में 1989 में ऑस्ट्रेलिया के [[टेलीट्रॉनिक]] के बाद 1992 में कार्डियक पेससमेकर्स इंस्टीट्यूट ऑफ मिनेपोलिस द्वारा पेसमेकर जेनरेटर को आवत रूप से धातु की एक बंद डिबिया में कोषस्थीकरण करने से इस घटना से पार पाया गया। इस तकनीक में कोषस्थीकरण धातु के लिए टिटैनियम का इस्तेमाल 1990 के दशक में मानक बन गया। शुरूआती वर्षों में इस तकनीक को विकसित करने में दूसरों का जो अवदान रहा वे [[मेडट्रॉनिक]] मिनेपोलिस के [[बॉब एडरसन]], [[सेंट जॉर्ज’स हॉस्पिटल]] के जे. जी (जेफ्री) डेविस, अमेरिकन ऑप्टिकल के [[बारो बरकोविट्स]] और शेल्डॉन थेलर, [[टेलीट्रॉनिक्स]] ऑस्ट्रेलिया के [[जेफ्री विकहेम]], [[कॉर्डिस]] कारपोरेशन ऑफ मियामी के [[वाल्टर केलर]], [[हैंन्स थोरनैंडर]], जिन्होंने उपरोक्त स्वीडेन के इलेमा-स्कोनैंडर के [[रुन इल्मेक्वीस्ट]] से जुड़े थे, हॉलैंड के [[जैनविलेम वैन डेन बर्ग]] और कार्डियक पेसमेकरर्स इंस्टीट्यूट [[गुइडैंट]] के [[एंटॉनी एडुसी]] हैं। == पेसिंग के तरीके == === पर्कसिव पेसिंग === पर्कसिव पेसिंग, ट्रांसथोरेसिक यांत्रिक पेसिंग भी कहलाता है, बंद मुट्ठी का उपयोग है, आमतौर पर वेंटिकुलर लय को उत्प्रेरित करने के लिए उरोस्थि के बाएं किनारे पर नीचे की ओर दाहिने निलय के वेना केवा में 20-30 सेंमी की दूरी से डाला जाता है (ब्रिटिश जर्नल ऑफ एनीथेसिया का सुझाव है कि विद्युतीय गतिविधि को उत्प्रेरित करने के लिए वेंटिकुलर दबाव को 10-15 mmhg तक ले जाना जरूरी है)। यह एक पुरानी प्रक्रिया है जिसका इस्तेमाल मरीज के लिए विद्युतीय पेसमेकर नहीं ले आने तक जीवन रक्षा के साधन के रूप में किया जाता है।<ref>{{cite journal |author=Eich C, Bleckmann A, Paul T |title=Percussion pacing in a three-year-old girl with complete heart block during cardiac catheterization |journal=Br J Anaesth |volume=95 |issue=4 |pages=465–7 |year=2005 |month=October |pmid=16051649 |doi=10.1093/bja/aei209 |url=http://bja.oxfordjournals.org/cgi/content/full/95/4/465 |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20090727184637/http://bja.oxfordjournals.org/cgi/content/full/95/4/465 |archive-date=27 जुलाई 2009 |url-status=dead }}</ref> === ट्रांसक्युटेनीयस पेसिंग === {{Main|Transcutaneous pacing}} ट्रांसक्युटेनीयस पेसिंग (TCP), जो बाह्य पेसिंग भी कहलाता है, विशिष्ट रूप से [[हृदय की धड़कन के कम होने]] के हर तरह के लक्षण में रक्त संचार में आरंभिक स्थिरता को बनाए रखने के लिए की सिफारिश की जाती है। यह प्रक्रिया पेसिंग के द्वारा मरीज के सीने में दो पेसिंग, या तो शरीर के अग्र/पार्श्व भाग में या फिर अग्र/पिछले भाग में पैड लगा कर की जाती है। बचाव करनेवाला पेसिंग की दर का चयन करता है और धीरे-धीरे पेसिंग के प्रवाह (mA से मापा जाता है) में तब तक वृद्धि करता है, जब तक कि अनुकूल नब्ज के साथ विद्युत का अभिग्रहण (ECG पर विस्तीर्ण QRS कॉम्प्लेक्स द्वारा एक लंबे और विस्तृत T लहर से पहचाना जाता है) नहीं हो जाता. पेसिंग [[ECG]] की शिल्पकृति है और मांसपेशी का जोर से फड़कना निरूपण को कठिन कर सकता है। बहुत लंबी अ‍वधि के लिए वाह्य पेसिंग का भरोसा नहीं किया जाना चाहिए। यह एक आपातकालीन प्रक्रिया है जो ट्रांसवेनस पेसिंग या अन्य उपचार दिए जाने तक एक पुल का काम करती है। === एपिकार्डियल पेसिंग (अस्थायी) === {{Main|Epicardial}} अस्थायी एपिकार्डियल पेसिंग, जिसका इस्तेमाल ओपेन हार्ट सर्जरी के समय होता है, आलिंद प्रकोष्ट में अवरोध पैदा करने की एक शल्य प्रक्रिया है। इलेक्ट्रोड निलय (एपिकार्डियम) के बाहरी दीवार के साथ संतोषजनक कार्डियक आउटपुट को तब तक बनाए रखने के लिए लगाया जाता है, जब तक कि अस्थायी ट्रांसवेनस इलेक्ट्रोड को डाल नहीं दिया जाता. <div style="text-align: center;"> [[File:Pacemaker dependent asystole.jpg|none|thumb|500px|एक अस्थायी (एपिकार्डियल) वेंट्रिकुलर पेसमेकर युक्त एक रोगी में प्रवेश द्वार निर्धारण का ECG रिदम स्ट्रिप.महाधमनी वाल्व सर्जरी के दौरान रोगी की हालत बिगड़ने के बाद एपिकार्डियल पेसमेकर लीड को लगाया जाता था। अनुरेखण के प्रथमार्द्ध में प्रति मिनट 60 बीट्स पर पेसमेकर उत्तेजन की वजह से एक राईट बण्डल ब्रांच ब्लॉक सिस्टम के साथ एक व्यापक QRS कॉम्प्लेक्स का परिणाम देखने को मिलता है। उत्तरोत्तर कमजोर पेसिंग उत्तेजन दिया जाता है जिसकी वजह से अनुरेखण द्वितीयार्द्ध में एसिस्टल का परिणाम सामने आता है। अनुरेखण के अंत में, एक (लघु) हाइपोक्सिक अभिग्रहण की वजह से मांसपेशियों के संकुचन से विरूपण का परिणाम देखने को मिलता है। चूंकि न्यून पेसमेकर उत्तेजन की वजह से वेंट्रिकुलर बचाव ताल का परिणाम सामने नहीं आता है, इसलिए रोगी को पेसमेकर-निर्भर कहा जा सकता है और उसे एक स्पष्ट पेसमेकर की जरूरत है।]] </div> {{clear}} === ट्रांसवेनस पेसिंग (अस्थायी) === {{Main|Transvenous pacing}} जब अस्थायी पेसिंग का उपयोग करना हो तब ट्रांसवेनस पेसिंग ट्रांसकुटैनयस पेसिंग का विकल्प होता है। पेसमेकर तार, जीवाणुविहीन स्थिति में नस में डाला जाता है और फिर इसे या तो दाहिने आलिंद में डाला जाता है या दाहिने निलय में. इसके बाद पेसिंग तार को शरीर के बाहर वाह्य पसमेकर से जोड़ दिया जाता है। ट्रांसवेनस पेसिंग का उपयोग अक्सर स्थायी पेसमेकर के नियोजन के पुल के रूप में किया जाता है। इसे तब तक रखा जा सकता है जब तक कि स्थायी पेसमेकर का प्रत्यारोपण न कर दिया जाए या तब तक जब तक कि पेसमेकर की जरूरत नहीं रह जाए और इसके बाद इसे हटा दिया जाता है। === स्थायी पेसिंग === [[चित्र:Fluoroscopy pacemaker leads right atrium ventricle.png|thumb|एक पेसमेकर प्रत्यारोपण प्रक्रिया के दौरान एक्स-किरण के तहत के दिखाए गए दाएं आलिन्द और दाएं निलय के लीडआलिन्द का लीड वक्रित लीड है जो चित्र के ऊपरी बाएं हिस्से में U आकार बनाता है।]] स्थायी पेसिंग एक प्रत्यारोपण योग्य पेसमेकर के साथ हृदय के एक प्रकोष्ठ या प्रकोष्ठों में एक या एक से अधिक पेसिंग इलेक्ट्रोड ट्रांसवेनस नियोजन से जुड़ा होता है। यह प्रक्रिया उपयुक्त शिरा में चीरा लगाकर पूरा किया जाता है, जिसमें इलेक्ट्रोड डाला जाता है और यह हृदय के वाल्व के जरिए उस शिरा से होकर तब तक गुजरता है, जब तक कि प्रकोष्ठ में लगा नहीं दिया जाता. यह प्रक्रिया [[फ्लूरोस्कोपी]] की सुविधा से संपन्न है, जिससे चिकित्सक या हृदय रोग विशेषज्ञ इलेक्ट्रोड लीड को गुजरने के मार्ग को देखने में समर्थ बनाता है। इलेक्ट्रोड लीड के विपरीत सिरे का पेसमेकर जेनरेटर से जुड़ जाने के बाद इलेक्ट्रोड के संतोषजनक प्रतिस्थापन की पुष्टि हो जाती है। तीन बुनियादी प्रकार के स्थायी पेसमेकर होते हैं, जिनका [[वर्गीकरण]] कितने संख्या के प्रकोष्ठों से जुड़ा है और उनके बुनियादी परिचलान व्यवस्था के आधार पर किया जाता है:<ref name="urlPacemakers, Patient and Public Information Center : Heart Rhythm Society">{{cite web |url=http://www.hrspatients.org/patients/treatments/pacemakers.asp |title=Pacemakers, Patient and Public Information Center : Heart Rhythm Society |format= |work= |accessdate= |archive-url=https://web.archive.org/web/20100619152432/http://hrspatients.org/patients/treatments/pacemakers.asp |archive-date=19 जून 2010 |url-status=dead }}</ref> * ''एकल प्रकोष्ठ पेसमेकर.'' इस प्रकार में केवल एक पेसिंग हृदय में या तो [[आलिंद]] या [[निलय]] के प्रकोष्ठ में रखा जाता है।<ref name="urlPacemakers, Patient and Public Information Center : Heart Rhythm Society"/> * ''दोहरा-प्रकोष्ठ पेसमेकर.'' इसमें हृदय के दोनों प्रकोष्ठ में तार लगाया जाता है। एक आलिंद को चलाता है और दूसरा निलय को। इस प्रकार का पेसमेकर प्राकृतिक रूप से आलिंद और निलय के बीच के कार्य के समन्वय में हृदय के सहयोग द्वारा हृदय की गति को बनाए रखने के कार्य से काफी मिलता-जुलता है।<ref name="urlPacemakers, Patient and Public Information Center : Heart Rhythm Society"/> * ''रेट-रिपॉन्सिव पेसमेकर.'' इस पेसमेकर में संवेदक होते हैं जो मरीज के शारीरिक कार्यकलाप में बदलाव का पता लगाते हैं और शरीर के चयापचय की जरूरत को पूरा करने के लिए स्वचालित रूप से पेसिंग की दर को समायोजति करते हैं।<ref name="urlPacemakers, Patient and Public Information Center : Heart Rhythm Society"/> पेसमेकर जेनरेटर [[आवत रूप से भली भांति बंद]] ऊर्जा स्रोत का उपकरण है, आमतौर पर [[लिथियम]] बैटरी है, जिसमें एक संवेदन एम्लीफायर होता है जो हृदय के इलेक्ट्रोड, पेसमेकर के लिए [[कंप्यूटर]] लॉजिक और आउटपुट सर्किट, जो पेसिंग आवेग को इलेक्ट्रोड को प्रदान करता है, द्वारा संवेदित होने पर हृदय के स्वाभावित रूप से होनेवाले विद्युतीय आविर्भाव को संसाधित करता है। जेनरेटर आमतौर पर सीने के दीवार में वसा के नीचे, सीने की मांसपेशी और अस्थि के ऊपर लगाया गाता है। हालांकि अलग-अलग मामले के आधार पर यह भिन्न भी हो सकता है। इसी कारण पेसमेकर का ऊपरी आवरण को इस तरह डिजाइन किया जाता है कि शरीर की [[प्रतिरक्षा प्रणाली]] शायद ही कभी इसे अस्वीकार करेगा। आमतौर पर यह [[टाइटैनियम]] से बना होता है, जो शरीर में अक्रिय होता है। पियर्सिंग की तरह इस पूरी चीज को अस्वीकार नहीं किया जाएगा और [[ऊतक इसका कोषस्थीकरण]] कर लेगा। {{Citation needed|date=April 2009}} == बुनियादी कार्य == आधुनिक पेसमेकर के आमतौर पर बहुत तरह के कार्य होते हैं। इनमें से सबसे बुनियादी कार्य हृदय के मूल विद्युत लय पर नजर रखना है। जब पेसमेकर सामान्य धड़कनों के बीच की समय की अवधि में हृदय की धड़कन को महसूस करने में असफल हो जाता, तब बहुत ही कम वोल्टेज के नब्ज के साथ यह हृदय के निलय को उत्तेजित करेगा। इसका संवेदन और उत्तेजित करने की सक्रियता हरेक धड़कन के आधार पर होती है। इसका और अधिक जटिल रूप में आलिंद और निलय दोनों प्रकोष्ठो की संवेदना और/अथवा उत्तेजना की क्षमता शामिल है। {| class="wikitable" style="margin:1em auto 1em auto" |+ <td>'''एंटीब्राडयकैरडिया पेसिंग के लिए संशोधित NASPE/BPEG सामान्य कोड'''<ref>{{cite journal |author=Bernstein A, Daubert J, Fletcher R, Hayes D, Lüderitz B, Reynolds D, Schoenfeld M, Sutton R |title=The revised NASPE/BPEG generic code for antibradycardia, adaptive-rate, and multisite pacing. North American Society of Pacing and Electrophysiology/British Pacing and Electrophysiology Group |journal=Pacing Clin Electrophysiol |volume=25 |issue=2 |pages=260–4 |year=2002 |pmid=11916002}}</ref> </td> | II | III | IV | V |- | चेंबर (स) पेस्ड | चेंबर (स) सेंस्ड | संवेदना से प्रतिक्रिया | मॉडुलेशन दर | मल्टीसाइट पेसिंग |- | ओ = कोई नहीं | ओ = बिल्कुल नहीं | ओ = बिल्कुल नहीं | ओ = बिल्कुल नहीं | ओ = बिल्कुल नहीं |- | ए = ऑट्रियम | ए = ऑट्रियम | टी = उत्प्रेरित | आर = मॉडुलेशन दर | ए = ऑट्रियम |- | वी = वेंट्रिकल | वी = वेंट्रिकल | आई = इन्हिबटिड | | वी = वेंट्रिकल |- | डी = दोहरा (A+V) | डी = दोहरा (ए + वी) | डी = दोहरा (टी+आई) | | डी = दोहरा = (ए+वी) |- |} इसमें से बुनियादी वेंटिकुलर की मांग वाला पेसिंग मोड VVI है या व्यायाम के लिए स्वचालित दर पर समायोजन के साथ VVIR है – आलिंद के ताल के साथ जब सिंक्रोनाइजेशन की जब आवश्यकता नहीं होती तब यह मोड उपयुक्त होता है, जैसा कि आट्रियल फिब्रिलेशन में. समकक्ष आलिंद पेसिंग मोड AAI या AAIR है, जब आट्रियोवेंटिकुलर स्थिति अखंड होता है, लेकिन प्राकृतिक पेसमेकर का [[साइनोआट्रियल नोड]] अविश्वसनीय – साइनस नोड डिजिज (SND) या [[बीमार साइनस सिंड्रोम]] हो तो यह पसंदीदा मोड होता है। जहां [[आट्रियोवेंटिकुलर ब्लॉक]] (AVB) की समस्या हो तो आलिंद की ताल का पता (बोध) लगाने और सामान्य देर (0.1-0.2 सेकंड) के बाद वेंटिकुलर ताल के प्रवर्तन के लिए पेसमेकर की जरूरत होती है, जब तक कि यह करने को तैयार नहीं हो जाता – यह VDD मोड है और एक इलेक्ट्रोड लीड से दाहिने आलिंद (बोध के लिए) और निलय में एक सिंगल पेसिंग लीड से प्राप्त की जा सकती है। AAIR और VDD ये मोड US में असामान्य हैं, लेकिन लैटिन अमेरिका और यूरोप में व्यापक रूप से इसका इस्तेमाल किया जाता है।<ref>{{cite journal |author=Bohm A, Pinter A, Szekely A, Preda I |title=Clinical Observations with Long-term Atrial Pacing |journal=Pacing Clin Electrophysiol |volume=21 |issue=1 |pages=246–9 |year=1998 |doi=10.1111/j.1540-8159.1998.tb01097.x |url=http://www3.interscience.wiley.com/journal/119941339/abstract |access-date=18 मई 2010 |archive-url=https://archive.today/20121209031838/http://www3.interscience.wiley.com/journal/119941339/abstract |archive-date=9 दिसंबर 2012 |url-status=dead }}</ref><ref>{{cite journal |author=Pitts Crick JC for the European Multicenter Study Group |title=European Multicenter Prospective Follow-Up Study of 1,002 Implants of a Single Lead VDD Pacing System |journal=Pacing Clin Electrophysiol |volume=14 |issue=11 |pages=1742–4 |year=1991 |doi=10.1111/j.1540-8159.1991.tb02757.x |url=http://www3.interscience.wiley.com/journal/119992153/abstract |access-date=18 मई 2010 |archive-url=https://archive.today/20121217192507/http://www3.interscience.wiley.com/journal/119992153/abstract |archive-date=17 दिसंबर 2012 |url-status=dead }}</ref> DDDR मोड का इस्तेमाल सबसे आम है, क्योंकि इसमें सभी विकल्प समाये हुए हैं, हालांकि पेसमेकर को आलिंद और निलय के लिए अलग से लीड की आवश्यकता होती है तथा से बहुत ही जटिल होते हैं, अच्छे से अच्छे नतीजे के लिए इनके कार्यों की सावधानीपूर्वक प्रोग्रामिंग की आवश्यकता होती है। == बाईवेंटिकुलर पेसिंग (BVP) == <div style="text-align: center;"> [[चित्र:Cardiac resynchronisation therapy.png|thumb|none|400px|लीडों को एक कार्डियक रिसिन्क्रोनाइज़ेशन डिवाइस के इस उदाहरण में देखा जा सकता है: एक दाएं आलिन्द का लीड (घना काला तीर), एक बाएं निलय का लीड (डैश्ड काला तीर) और एक कोरोनरी साइनस लीड (लाल तीर).कोरोनरी साइनस लीड बाएं निलय के चारों तरफ लिपटा हुआ है जो बाएं निलय के पेसिंग को सक्षम बनाता है। ध्यान दें कि इस मामले में दाएं निलय के लीड के दो गहन पहलू हैं जो चालन कुंडलियों का प्रतिनिधित्व करते हैं और यह भी कि जेनरेटर विशिष्ट पेसमेकर जेनरेटरों से बड़ा होता है, जो प्रदर्शित करते हैं कि यह उपकरण एक पेसमेकर और एक कार्डियोवर्टर-डिफाइब्रिलेटर दोनों है, जो खतरनाक तरीके से तेज असामान्य निलय के लय के लिए विद्युतीय झटके देने में सक्षम होता है।]] </div> वेंटिकुलर पेसमेकर, जो (कार्डियक रिसिंक्रोनाइजेशन थेरपी) के नाम से भी जाना जाता है, एक तरह का पेसमेकर है जो बाएं निलय के दोनों झिल्ली की दीवार और पार्श्व दोनों में चलाया जा सकता है। बाएं निलय के दोनों ओर पेसिंग के द्वारा पेसमेकर हृदय, जिसकी दीवारे तुल्यकालिक के संपर्क में नहीं होती, को फिर से समकालिक कर सकता है, जो 25-50% [[हृदयाघात]] के मरीजों में देखने में आता है। CRT उपकरणों वेंट्रिकल में कम से कम दो लीड होते हैं, एक दाहिने निलय की झिल्ली को उत्तेजित करने, तथा दूसरा [[महाहार्दिकी शिरा]] (कोरोनरी साइनस) के जरिए बाएं निलय के पार्श्व दीवार में चलाने के लिए डाला जाता है। अक्सर मरीजों में सामान्य शिरा लय के लिए आलिंद संकुचन के साथ समकालिक सुगमता के लिए दाहिने आलिंद में एक लीड होता है। इस तरह सर्वोत्कृष्ट कार्डियक कार्य को प्राप्त करने के लिए आलिंद और निलय के साथ बाएं निलय की झिल्ली की दीवार और पार्श्व दीवार के के संकुचन के बीच लगनेवाले समय को समायोजित किया जा सकता है। हृदयाघात के लक्षणवाले मरीजों के मामले में CRT उपकरण ने मृत्यु दर में कमी और जीवन की गुणवत्ता में बढ़ोत्तरी को दिखाया है; LV उत्सर्जन का अंश 35% से कम या बराबर और EKG में QRS की अवधि 120 माइक्रो सेकेंड या इससे अधिक होती है।<ref>{{cite journal |author=Cleland JG, Daubert JC, Erdmann E, ''et al.'' |title=The effect of cardiac resynchronization on morbidity and mortality in heart failure |journal=N. Engl. J. Med. |volume=352 |issue=15 |pages=1539–49 |year=2005 |pmid=15753115 |doi=10.1056/NEJMoa050496 |url=http://content.nejm.org/cgi/content/full/352/15/1539 |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20100105153737/http://content.nejm.org/cgi/content/full/352/15/1539 |archive-date=5 जनवरी 2010 |url-status=live }}</ref><ref>{{cite journal |author=Bardy GH, Lee KL, Mark DB, ''et al.'' |title=Amiodarone or an implantable cardioverter-defibrillator for congestive heart failure |journal=N. Engl. J. Med. |volume=352 |issue=3 |pages=225–37 |year=2005 |pmid=15659722 |doi=10.1056/NEJMoa043399 |url=http://content.nejm.org/cgi/pmidlookup?view=short&pmid=15659722&promo=ONFLNS19 |access-date=18 मई 2010 |archive-url=https://archive.today/20120712044151/http://content.nejm.org/cgi/pmidlookup?view=short&pmid=15659722&promo=ONFLNS19 |archive-date=12 जुलाई 2012 |url-status=live }}</ref><ref name="pmid15753115">{{cite journal |author=Cleland J, Daubert J, Erdmann E, Freemantle N, Gras D, Kappenberger L, Tavazzi L |title=The effect of cardiac resynchronization on morbidity and mortality in heart failure |url=https://archive.org/details/sim_new-england-journal-of-medicine_2005-04-14_352_15/page/n72 |journal=N Engl J Med |volume=352 |issue=15 |pages=1539–49 |year=2005 |pmid=15753115 | doi=10.1056/NEJMoa050496}}</ref> CRT को एक प्रतिस्थापना योग्य कार्डियोवर्टर-डिफिब्रिलेटर के साथ जोड़ा जा सकता है।<ref name="pmid15152059">{{cite journal |author=Bristow M, Saxon L, Boehmer J, Krueger S, Kass D, De Marco T, Carson P, DiCarlo L, DeMets D, White B, DeVries D, Feldman A |title=Cardiac-resynchronization therapy with or without an implantable defibrillator in advanced chronic heart failure |url=https://archive.org/details/sim_new-england-journal-of-medicine_2004-05-20_350_21/page/n70 |journal=N Engl J Med |volume=350 |issue=21 |pages=2140–50 |year=2004 |pmid=15152059 | doi=10.1056/NEJMoa032423}}</ref> == कार्य में प्रगति == [[चित्र:Herzschrittmacher auf Roentgenbild.jpg|thumb|right|तारों के मार्ग का प्रदर्शन करते हुए स्थापित पेसमेकर की एक्स-रे छवि]] दर-अनुक्रियाशील (रेट-रिस्पोंसिव) पेसमेकर बनाने के लिए विभिन्न सामग्रियों का इस्तेमाल करके प्रकृति के अनुकरण कार्य में आगे बढ़ने का एक बड़ा कदम रहा, इसके लिए [[QT इंटरवल]], धमनी-शिरापरक प्रणाली में pCO - pCO2 (विघटित [[ऑक्सीजन]] या [[कार्बन डाइऑक्साइड]] स्तर), [[प्रवेगमापी]] द्वारा शारीरिक गतिविधि का निर्धारण, [[शारीरिक तापमान]], [[ATP]] स्तर, [[एड्रिनैलिन]], आदि पैरामीटर का उपयोग किया गया। स्थैतिकी प्रस्तुत करने के बजाए, पूर्व निर्धारित हृदय दर, या रुक-रुक कर नियंत्रण होने जैसे कि पेसमेकर, ‘सक्रिय पेसमेकर’ वास्तविक श्वसन भार और संभाव्य अपेक्षित भार दोनों की क्षतिपूर्ति कर सकता है। पहले गतिशील पेसमेकर का आविष्कार 1982 में UK, लंदन में नैशनल हेल्थ हॉस्पिटल के डॉ॰ एंटोनी रिकार्ड्स द्वारा किया गया था। [51]. सक्रिय पेसमेकिंग तकनीक भविष्य में कृत्रिम हृदय पर भी लागू किया जा सकता है। संक्रमणशील ऊतक संधान और अन्य कृत्रिम अंग/जोड़/ऊतक प्रतिस्थापन इसका समर्थन करेंगे। स्टेम सेल का संक्रमणशील ऊतक संधान से प्रेरित हो सकता है और नहीं भी. एक बार प्रत्यारोपित कर दिए जाने के बाद पेसमेकर के नियंत्रण में सुधार करने के लिए बहुत विकसित किए गए हैं। इनमें से कई में परागमन (ट्रांजिशन) के द्वारा माइक्रोप्रोसेसर नियंत्रित पेसमेकरों का बनाना संभव हुआ है। पेसमेकर जो न केवल निलय को बल्कि [[आलिंद]] को भी नियंत्रित करता है, बहुत आम है। वह पेसमेकर जो निलय और आलिंद दोनों को नियंत्रित करता है, दोहरा कक्ष पेसमेकर कहलाता है। हालांकि ये दोहरे कक्षवाले मॉडल आमतौर पर महंगे होते हैं, निलय से पूर्व आलिंद का संकुचन का समय हृदय के पंपिंग क्षमता में सुधार लाता है और संकुलित हृदयाघात में उपयोगी हो सकता है। अनुक्रियाशील पेसिंग की दर उपकरण को मरीज की शारीरिक गतिविधि को पढ़ने और एल्गोरिदम के जरिए आधारभूत पेसिंग दर में वृद्धि या ह्वास द्वारा यथोपयोगी तरीके से उसे अनुकूल बनाने की अनुमति देता है। DAVID के प्रयोग<ref>{{cite journal |author=Wilkoff BL, Cook JR, Epstein AE, ''et al.'' |title=Dual-chamber pacing or ventricular backup pacing in patients with an implantable defibrillator: the Dual Chamber and VVI Implantable Defibrillator (DAVID) Trial |journal=JAMA |volume=288 |issue=24 |pages=3115–23 |year=2002 |month=December |pmid=12495391 |doi=10.1001/jama.288.24.3115 |url=http://jama.ama-assn.org/cgi/content/full/288/24/3115 |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20091002075527/http://jama.ama-assn.org/cgi/content/full/288/24/3115 |archive-date=2 अक्तूबर 2009 |url-status=live }}</ref> ने दिखा दिया कि दाहिने निलय में अनावश्यक पेसिंग से [[दिल का दौरा]] पड़ सकता है और आलिंद में फिब्रिलेशन की घटना में वृद्धि हो सकती है। दोहरे कक्ष वाले नवीन उपकरण दाहिने निलय की पेसिंग की मात्रा को न्यूनतम बनाए रख सकता है और इस तरह हृदय की बीमारी को और अधिक खराब होने से रोक सकता है। == मरीज के विमर्श == === प्रविष्टि === पेसमेकर आमतौर पर मरीज के शरीर में एक सामान्य सर्जरी के जरिए या तो [[स्थानीय एनेस्थेटिक]] या [[सामान्य एनेस्थेटिक]] का उपयोग कर डाल दिया जाता है। इसी तरह सर्जरी से पहले मरीज को आराम के लिए कोई औषधि भी दी जा सकती है। आमतौर पर संक्रमण से बचाव के लिए एंटीबायोटिक दिया जाता है।<ref>{{cite journal|author=de Oliveira JC, Martinelli M, D'Orio Nishioka SA, ''et al.''|title=Efficacy of antibiotic prophylaxis prior to the implantation of pacemakers and cardioverter-defibrillators: Results of a large, prospective, randomized, double-blinded, placebo-controlled trial|journal=Circ Arrhythmia Electrophysiol|year=2009|volume=2|pages=29&ndash;34|doi=10.1161/CIRCEP.108.795906}}</ref> ज्यादातर मामलों में पेसमेकर बाएं कंधे के इलाके में डाला जाता है, हंसुली की हड्डी के नीचे चीरा लगा कर एक छोटा पॉकेट बनाकर डाला जाता है, मरीज के शरीर में पेसमेकर को दरअसल, यहीं रखा जाता है। एक लीड या कई लीड (संख्या पेसमेकर के प्रकार पर निर्भर करती है) को एक बड़ी शिरा के जरिए डाला जाता है, इस काम में प्रगति की निगरानी करने के लिए [[फ्लूरोस्कोप]] का इस्तेमाल किया जाता है। एक अस्थायी निकास को स्थापित किया जा सकता है और अगले दिन इसे हटा दिया जाता है। वास्तविक सर्जरी में एक घंटे का समय लग सकता है। सर्जरी के बाद मरीज को आरोग्य की ओर बढ़ते हुए घाव का उचित ध्यान रखना चाहिए। इसका एक अनुवर्ती सत्र भी होता है, इस दौरान प्रोग्रामर के जरिए पेसमेकर का परीक्षण किया जाता है ताकि यह उपकरण से साथ संपर्क स्थापित कर सके और सेहत की देखभाल करनेवाले पेशेवरों को प्रणाली की अखंडता का मूल्यांकन और पेसिंग के वोल्टेज आउटपुट को निर्धारित करने की अनुमति दे। सर्जरी से पहले मरीज कुछ बुनियादी तैयारी पर विचार करना चाह सकता है। सबसे बुनियादी तैयारी यह है कि जिन लोगों के सीने में बाल होते हैं वे उसे हजामत या [[लोमनाशक]] घटक के द्वारा हटाना चाह सकते हैं, क्योंकि सर्जरी के बाद बैंडेज और निगरानी उपकरण शरीर के साथ लगाए जाएंगे. चूंकि पेसमेकर बैटरी का उपयोग करता है, इसीलिए बैटरी की क्षमता कम हो जाने पर इस उपकरण को बदलने की जरूरत होगी। नया उपकरण डालने के बजाए उपकरण को बदलना आमतौर पर एक सहज प्रक्रिया है, क्योंकि इसमें आमतौर पर प्रत्यारोपण करने की जरूरत नहीं होती. विशेष तरह के प्रतिस्थापना के मामले में सर्जरी की जरूरत होती है, जिसमें विद्यमान उपकरण को निकालने के लिए एक चीरा लगाने की जरूरत होती है, विद्यमान उपकरण से लीड निकाल लिया जाता है, लीड को नए उपकरण से जोड़ दिया जाता है और नया उपकरण मरीज के शरीर के पुराने उपकरण की जगह में डाल दिया जाता है। ==== पेसमेकर मरीज का पहचान पत्र ==== अंतर्राष्ट्रीय पेसमेकर मरीज पहचान-पत्र में सूचना जैसे कि मरीज का डेटा (दूसरों के बीच, प्राथमिक [[wikt:symptom|लक्षण]], [[ECG]], [[व्याधि-निदान विज्ञान]]), पेसमेकर सेंटर (डॉक्टर, अस्पताल) [[IPG]] (प्रत्यारोपण की [[दर]], [[मोड]], डेटा, [[MFG]], [[प्रकार]]) [[लीड]] संबंधित जानकारी होती है।<ref>{{Cite web |url=http://www.xs4all.nl/~fbaart/aktueel/pm.htm |title=यूरोपीय पेसमेकर रोगी पहचान कार्ड |access-date=6 अगस्त 2012 |archive-date=6 दिसंबर 2010 |archive-url=https://web.archive.org/web/20101206014114/http://www.xs4all.nl/~fbaart/aktueel/pm.htm |url-status=dead }}</ref><ref>{{Cite web |url=http://www.eucomed.com/ |title=यूकोमेड |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20110710203739/http://www.eucomed.com/ |archive-date=10 जुलाई 2011 |url-status=dead }}</ref>. === पेसमेकर के साथ जीना === ==== पेसमेकर की नियतकालिक जांच ==== [[चित्र:PaceMakerRemoteMonitoringDevicesTwoKinds.jpg|thumbnail|right|पेसमेकर रोगियों द्वारा द्वारा उपयोग किए जाने वाले दो प्रकार के सुदूर निगरानी उपकरण.]] एक बार प्रत्यारोपित कर दिए जाने के बाद इस उपकरण के ठीक से संचालन और कार्य करने की सत्यता सुनिश्चित करने के लिए नियतकालिक जांच जरूरी है। इसकी आवृत्ति के आधार पर चिकित्सक द्वारा सेट कर देने के बाद उपकरण की समय-समय जांच अक्सर जरूरी हो सकती है। पेसमेकर की सामान्य जांच आमतौर पर कार्यालय में हर छह महीने में होती है, हालांकि यह मरीज/उपकरण की स्थिति और अलग से निगरानी की उपलब्धता पर निर्भर है। कार्यालय में परीक्षण के समय उपकरण की नैदानिक जांच से जानकारी प्राप्त की जाएगी. इन परीक्षणों में निम्न शामिल हैं: * संवेदन: आंतरिक कार्डियक गतिविधि (आलिंदी और निलयी विध्रुवीकरण) को "देखने" की उपकरण की क्षमता. * इसकी अखंडता को मापने के लिए एक परीक्षण अवरोध: इसकी अखंडता को मापने का एक परीक्षण बड़े और/अथवा अचानक अवरोध में वृद्धि इसके टूट जाने की ओर इशारा करना है जबकि बड़े और/अथवा अवरोध में अचानक कमी इसके रोधन में दरार को सूचित करता है। * सीमारेखा: यह परीक्षण जिस कक्ष का परीक्षण किया जा रहा है उसमें ऊर्जा (दोनों वोल्ट और प्लस का विस्तार) की न्यूनतम मात्रा के विश्वसनीय तरीके से विध्रुवण (अभिग्रहण) की पुष्टि करता है। सीमारेखा तय कर संबद्ध पेशेवरों, प्रतिनिधियों, अथवा चिकित्सक को आउटपुट प्रोग्राम बनाने की अनुमति देता है, जो उपकरण के लंबे समय तक सुरक्षा की गुंजाइश चलने के अनुकूल हो। आजकल पेसमेकर की बहुत "मांग" है, कहने का तात्पर्य यह है कि जरूरी हो भी वे चलते हैं, उपकरण का लंबे समय तक चलना किस पैमाने पर इसका उपयोग होता है इससे प्रभावित होता है। उपकरण के टिकाऊपन को प्रभावित करनेवाले प्रोग्राम आउटपुट और एल्गोरिदम (विशेषताएं) समेत अन्य कारक हैं जिसके कारण बैटरी से उच्च स्तर की विद्युत प्रवाह निकलती है। कार्यालय में परीक्षण का अतिरिक्त पहलू यह है कि किसी घटना की जांच करना है जो पिछले अनुवर्ती परीक्षण के बाद से एकत्र हुए हैं। ये आमतौर पर विशिष्ट मानदंडों के आधार पर चिकित्स द्वारा मरीज के लिए संग्रहित किए जाते हैं। कुछ उपकरण में घटना शुरू होने से पहले, साथ ही उस घटना की इंट्रा कार्डियक एलेक्ट्रोग्राम को दिखाने की विशेषता निहित होती है। घटना के कारण और उसके मूल का निदान करने में और किसी जरूरी प्रोग्रामिंग में परिवर्तन करने में यह विशेष रूप से बहुत ही उपयोगी है। ==== जीवन शैली में महत्व ==== पेसमेकर लगाने के बाद मरीज की जीवनशैली में आमतौर पर कोई बड़ा बदलाव नहीं आता है। कुछ गतिविधियां जो पूरी तरह से खेल-कूद से संबंधित है और ऐसी गतिविधि जो चुंबकीय क्षेत्र से जुड़ी है, उचित नहीं है। पेसमेकर मरीज को लग सकता है कि उन्हें कुछ रोजमर्रा के कार्यों में बदलाव लाने की जरूरत है। उदाहरण के लिए, कंधे में लगा गाड़ी का [[सीट बेल्ट]] अगर पेसमेकर लगे स्थान को पार करे तो यह असुविधाजनक हो सकता है। ऐसी कोई गतिविधि जो अत्यधिक चुंबकीय क्षेत्र जुड़ी है, से बचना चाहिए। इसमें उस तरह की गतिविध, संभवत: जैसे [[आर्क वेल्डिंग]], या कुछ खास तरह के उपकरण, भारी उपकरणों का रख-रखाव<ref>{{cite web |url=http://www.ncbi.nlm.nih.gov/pubmed/1279591 |title=Testing of work environments for electromagnetic interference (Pacing Clin Electrophysiol. 1992) - PubMed Result |publisher=www.ncbi.nlm.nih.gov |accessdate=2008-11-10 |last= |first= |archive-url=https://web.archive.org/web/20101210184118/http://www.ncbi.nlm.nih.gov/pubmed/1279591 |archive-date=10 दिसंबर 2010 |url-status=live }}</ref>, जो प्रबल चुंबकीय क्षेत्र पैदा करता है (जैसे [[MIR]] (मैग्नेटिक रिसनैंनस इमेजिंग मशीन)) आदि शामिल हैं। 2008 में किये गए U.S. अध्ययन से पता चला<ref>{{cite web |url=http://www.bidmc.org/News/InResearch/2008/November/MP3PlayerStudy.aspx |title=MP3 Headphones Interfere With Implantable Defibrillators, Pacemakers - Beth Israel Deaconess Medical Center |publisher=www.bidmc.org |accessdate=2008-11-10 |last= |first= |archive-url=https://web.archive.org/web/20100927014850/http://www.bidmc.org/News/InResearch/2008/November/MP3PlayerStudy.aspx |archive-date=27 सितंबर 2010 |url-status=dead }}</ref> कि कुछ पोर्टेबल म्युजिक प्लेयर को जब पेसमेकर से एक इंज की दूरी पर रखा गया तो इसका चुंबक इसके कार्य में खलल का कारण हो सकता है। प्रक्रिया शुरू करने से पहले कुछ चिकित्सक प्रक्रिया में [[एंटीबायोटिक]] के उपयोग की जरूरत हो सकती है मरीज को हरेक चिकित्सा कर्मियों को सूचित कर देना चाहिए कि उनके पास पेसमेकर है। कुछ मानक चिकित्सा प्रक्रिया जैसे कि [[मैगनेटिक रिजननेस इमेजिंग]] (MRI) के उपयोग के लिए ऐसे मरीज जिन्हें पेसमेकर लगा हुआ है, मना कर सकते हैं। इसके अलावा, अमेरिकन हार्ट एसोसिएशन के अनुसार, कुछ घरेलू उपकरणों में निहित सिंगल बीट कभी-कभी खलल पैदा करने की दूर की संभावना हो सकती हैं। अमेरिका में उपलब्ध सेलफोन (3 वाट से कम) प्लस जेनरेटर को नुकसान पहुंचाने वाले अथवा पेसमेकर के काम को प्रभावित करनेवाले नहीं हैं।<ref>{{Cite web |url=http://www.americanheart.org/presenter.jhtml?identifier=4676 |title=संग्रहीत प्रति |access-date=18 मई 2010 |archive-url=https://web.archive.org/web/20100311181618/http://www.americanheart.org/presenter.jhtml?identifier=4676 |archive-date=11 मार्च 2010 |url-status=dead }}</ref> === गोपनीयता और सुरक्षा === पेसमेकर के जरिए वायरलेस संचार संभव है, इसलिए सुरक्षा और गोपनीयता को लेकर सवाल उठाये जाते हैं। पेसमेकर में निहित मरीज के रिकॉर्ड को अन्य कोई पक्ष अनधिकृत रूप से पढ़ सकता है या रिप्रोग्राम कर सकता है, जैसा कि शोधकर्ताओं के दल द्वारा प्रदर्शित किया गया।<ref name="ICD-Radio">{{cite conference |year = 2008 |month = May |title = Pacemakers and Implantable Cardiac Defibrillators: Software Radio Attacks and Zero-Power Defenses |first = Daniel |last = Halperin |coauthors = Thomas S. Heydt-Benjamin, Benjamin Ransford, Shane S. Clark, Benessa Defend, Will Morgan, Kevin Fu, Tadayoshi Kohno, and William H. Maisel |url = http://www.secure-medicine.org/icd-study/icd-study.pdf |format = PDF |conference = IEEE Symposium on Security and Privacy |accessdate = 2008-08-10 |archiveurl = https://web.archive.org/web/20100602060638/http://www.secure-medicine.org/icd-study/icd-study.pdf |archivedate = 2 जून 2010 |url-status = live }}</ref> प्रदर्शन ने कम दूरी के रेंज में काम किया, उनलोगों ने लंबी दूरी का एंटेना विकसित करने का प्रयास नहीं किया। शोषण की अवधारणा का सबूत बेहतर सुरक्षा की जरूरत को दिखाने में मदद करता है और कहीं दूर से चिकित्सा प्रत्यारोपण की सुगमता का उपाय मरीज को बताता है।<ref name="ICD-Radio"/> == पेसमेकर कार्य के साथ अन्य उपकरण == कभी-कभी पेसमेकर जैसे उपकरण, जो [[इंप्लानटेबल कार्डियोवर्टर- डिफिब्रीलेटर]] (ICD) कहलाते हैं, को प्रत्यारोपित किया जाता है। इस उपकरण का उपयोग ऐसे मरीज पर किया जाता है जिन्हें अचानक कार्डियक मृत्यु का खतरा होता है। एक ICD में पेसिंग, [[कार्डियोवर्सन]] या [[डिफिब्रीलेटेशन]] द्वारा हृदय की धड़कन की लय में बहुत प्रकार के गड़बड़ी के उपचार की क्षमता होती है। कुछ ICD उपकरण [[वेंटिकुलर फिब्रिलेशन और वेंटीकुलर टैककार्डिया]] (VT) के अंतर कर सकती है और VT के मामले में वेंटीकुलर फिब्रिलेशन में प्रगति से पहले टैककार्डिया को तोड़ने की कोशिश में हृदय की गति को इसके आंतरिक दर से कहीं अधिक तेज करने की कोशिश करते हैं। यह ''फास्ट पेसिंग'', ''ओवर ड्राइव पेसिंग'', अथवा ''एंटी-टैककार्डिया पेसिंग'' (ATP) के रूप में जानी जाती है। अगर अंतर्निहित लय वेंटीकुलर टैककार्डिया है तो केवल ATP ही प्रभावकारी होता है और अगर लय वेंटीकुलर फिब्रिलेशन है तो यह कभी प्रभावकारी नहीं होता। {| class="wikitable" style="margin:1em auto 1em auto" |+ <td>'''NASPE/BPEG डिफिब्रीलेटर (NBD) कोड - 1993'''<ref name="NASPE_defib_code">{{cite journal |author=Bernstein A, Camm A, Fisher J, Fletcher R, Mead R, Nathan A, Parsonnet V, Rickards A, Smyth N, Sutton R |title=North American Society of Pacing and Electrophysiology policy statement. The NASPE/BPEG defibrillator code |journal=Pacing Clin Electrophysiol |volume=16 |issue=9 |pages=1776–80 |year=1993 |pmid=7692407}}</ref></td> | II | III | IV |- | बिजली का झटका देनेवाला कक्ष | एंटीटैककार्डिया पेसिंग कक्ष | टैककार्डिया संसूचन | ब्राडिकार्डिया पेसिंग कक्ष |- | O = कोई नहीं | O = कोई नहीं | E = इलेक्ट्रोग्राम | O = कोई नहीं |- | A = अट्रियम | A = अट्रियम | H = हिमोडायनामिक | A = अट्रियम |- | V = वेंट्रिकल | V = वेंट्रिकल | | V = वेंट्रिकल |- | D = ड्यूल (A+V) | D = ड्यूल (A+V) | | D = ड्यूल (A+V) |- |} {| class="wikitable" style="margin:1em auto 1em auto" |+ <td>'''NASPE/BPEG डिफिब्रीलेटर (NBD) कोड का संक्षिप्त रूप '''<ref name="NASPE_defib_code"/></td> | ICD-S | ICD केवल झटका देने की क्षमता के साथ |- | ICD-B | ICD के साथ ब्राडिकाडिया पेसिंग साथ में झटका |- | ICD-T | ICD के साथ टैककार्डिया (और ब्राडिकार्डिया) और पेसिंग साथ में झटका |- |} == इन्हें भी देखें == * [[जैविक पेसमेकर]] * [[हृदय विज्ञान]] * [[हृदय की विद्युत चालन प्रणाली]] * [[ट्रांसक्यूटेनियस पेसिंग]] * [[पेसमेकर सिंड्रोम]] * [[संक्रामक अन्तर्हृद्शोथ]] == सन्दर्भ == {{reflist|2}} == बाहरी कड़ियाँ == * [https://web.archive.org/web/20101111235910/http://www.youtube.com//watch?v=UdaTqPSO3Rs प्रीओप रोगी शिक्षा स्थायी पेसमेकर प्रत्यारोपण सर्जरी] * [http://www.muschealth.com/multimedia/Podcasts/displayPod.aspx?podid=293&amp;autostart=false&amp;groupid=6 बाईवेंट्रिकुलर पेसमेकर: कार्डियक रिसिन्क्रोनाइज़ेशन थेरेपी क्या है? ][http://www.muschealth.com/multimedia/Podcasts/displayPod.aspx?podid=293&amp;autostart=false&amp;groupid=6 मेडिकल यूनिवर्सिटी ऑफ़ साउथ कैरोलिना से पॉडकास्ट] * [https://web.archive.org/web/20100925001511/http://escardio.org/communities/EHRA/education/webinars/Pages/welcome.aspx CRT-P और CRT-D के वर्तमान संकेत: यूरोपियन हार्ट रिदम एसोसिएशन (EHRA) से वेबिनार] {{Cardiac surgery and other cardiovascular procedures}} {{DEFAULTSORT:Artificial Pacemaker}} [[श्रेणी:अमेरिकी आविष्कार]] [[श्रेणी:गूगल परियोजना]] dopmyer8psj13vnpo0dx5jwl0oks34k कुष्ठरोग 0 215946 6586750 6492488 2026-07-17T12:35:05Z InternetArchiveBot 500600 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 6586750 wikitext text/x-wiki :''हिब्रू बाइबिल शब्दावली और इसके विभिन्न अर्थों के लिये, ज़ार्थ (Tzaraath) देखें. Bla Bla..'' ''अन्य उपयोगों के लिये कुष्ठरोग (स्पष्टीकरण) देखें.'' {{Infobox disease | Name = कुष्ठरोग (हैनसेरोग) | Image = Leprosy.jpg | Alt = | Caption = कुष्ठरोग से ग्रस्त एक 24-वर्षीय पुरुष. | DiseasesDB = 8478 | ICD10 = {{ICD10|A|30||a|30}} | ICD9 = {{ICD9|030}} | ICDO = | OMIM = 246300 | MedlinePlus = 001347 | eMedicineSubj = med | eMedicineTopic = 1281 | eMedicine_mult = {{eMedicine2|derm|223}} {{eMedicine2|neuro|187}} | MeshID = C01.252.410.040.552.386 }} '''कुष्ठरोग (Leprosy)''' या '''हैन्सेन का रोग (Hansen’s Disease)''' '''(एचडी) (HD)''', चिकित्सक गेरहार्ड आर्मोर हैन्सेन (Gerhard Armauer Hansen) के नाम पर, ''माइकोबैक्टेरियम लेप्री (Mycobacterium leprae)'' और ''माइकोबैक्टेरियम लेप्रोमेटॉसिस (Mycobacterium lepromatosis)'' जीवाणुओं के कारण होने वाली एक दीर्घकालिक बीमारी है।<ref name="Sasaki_2001">{{cite journal |author=Sasaki S, Takeshita F, Okuda K, Ishii N |title=Mycobacterium leprae and leprosy: a compendium |journal=Microbiol Immunol |volume=45 |issue=11 |pages=729–36 |year=2001 |url=http://www.jstage.jst.go.jp/article/mandi/45/11/729/_pdf |pmid=11791665 |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20090113080230/http://www.jstage.jst.go.jp/article/mandi/45/11/729/_pdf |archive-date=13 जनवरी 2009 |url-status=live }}</ref><ref name="new">{{cite web | url=http://www.sciencedaily.com/releases/2008/11/081124141047.htm | title=New Leprosy Bacterium: Scientists Use Genetic Fingerprint To Nail 'Killing Organism' | work=ScienceDaily | date=2008-11-28 | accessdate=2010-01-31 | archive-url=https://web.archive.org/web/20100313064458/http://www.sciencedaily.com/releases/2008/11/081124141047.htm | archive-date=13 मार्च 2010 | url-status=live }}</ref> कुष्ठरोग मुख्यतः ऊपरी श्वसन तंत्र के श्लेष्म और [[परिधीय तंत्रिका तंत्र|बाह्य नसों]] की एक ग्रैन्युलोमा-संबंधी (granulomatous) बीमारी है; त्वचा पर घाव इसके प्राथमिक बाह्य संकेत हैं।<ref name="Sherris">{{cite book | editor = Ryan KJ, Ray CG | title = Sherris Medical Microbiology | url = https://archive.org/details/sherrismedicalmi0000unse_q1i3 | edition = 4th | pages = [https://archive.org/details/sherrismedicalmi0000unse_q1i3/page/n470 451]–3 | publisher = McGraw Hill | year = 2004 | isbn = 0838585299 | author = Kenneth J. Ryan, C. George Ray, editors. | oclc = 52358530 61405904}}</ref> यदि इसे अनुपचारित छोड़ दिया जाए, तो कुष्ठरोग बढ़ सकता है, जिससे त्वचा, नसों, हाथ-पैरों और आंखों में स्थायी क्षति हो सकती है। लोककथाओं के विपरीत, कुष्ठरोग के कारण शरीर के अंग अलग होकर गिरते नहीं, हालांकि इस बीमारी के कारण वे सुन्न तथा/या रोगी बन सकते हैं।<ref name="time.com">{{cite journal |author= |title=Lifting the stigma of leprosy: a new vaccine offers hope against an ancient disease |journal=Time |volume=119 |issue=19 |pages=87 |year=1982 |month=May |pmid=10255067 |doi= |url=http://www.time.com/time/magazine/article/0,9171,925377,00.html |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20130825183350/http://www.time.com/time/magazine/article/0,9171,925377,00.html |archive-date=25 अगस्त 2013 |url-status=live }}</ref><ref>{{cite book | title = Textbook of Orthopedics and Trauma | edition = 2 | page = 779 | publisher = Jaypee Brothers Publishers | year = 2008 | isbn = 8184482426, 9788184482423 | author = Kulkarni GS}}</ref> कुष्ठरोग ने 4,000 से भी अधिक वर्षों से मानवता को प्रभावित किया है,<ref>{{cite web | url=http://sciencenow.sciencemag.org/cgi/content/full/2009/527/1 | title=Skeleton Pushes Back Leprosy's Origins | author=Holden | year=2009 | work=ScienceNOW | accessdate=2010-01-31 | archive-url=https://web.archive.org/web/20090922212020/http://sciencenow.sciencemag.org/cgi/content/full/2009/527/1 | archive-date=22 सितंबर 2009 | url-status=dead }}</ref> और [[चीन का इतिहास|प्राचीन चीन]], मिस्र और [[भारतीय इतिहास|भारत]] की सभ्यताओं में इसे बहुत अच्छी तरह पहचाना गया है।<ref name="WHO_Factsheet">{{cite web | title = Leprosy | work = WHO | url = http://www.who.int/mediacentre/factsheets/fs101/en/ | date = 2009-08-01 | accessdate = 2010-01-31 | archive-url = https://web.archive.org/web/20131212084309/http://www.who.int/mediacentre/factsheets/fs101/en/ | archive-date = 12 दिसंबर 2013 | url-status = live }}</ref> पुराने येरुशलम शहर के बाहर स्थित एक मकबरे में खोजे गये एक पुरुष के कफन में लिपटे शव के अवशेषों से लिया गया डीएनए (DNA) दर्शाता है कि वह पहला मनुष्य है, जिसमें कुष्ठरोग की पुष्टि हुई है।<ref>{{cite news | url=http://www.sciencedaily.com/releases/2009/12/091216103558.htm | work=ScienceDaily | title=DNA of Jesus-Era Shrouded Man in Jerusalem Reveals Earliest Case of Leprosy | date=2009-12-16 | accessdate=2010-01-31 | archive-url=https://web.archive.org/web/20100530031302/http://www.sciencedaily.com/releases/2009/12/091216103558.htm | archive-date=30 मई 2010 | url-status=live }}</ref> 1995 में, [[विश्व स्वास्थ्य संगठन|विश्व स्वास्थ्य संगठन (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन)]] (डब्ल्यूएचओ) (WHO) के अनुमान के अनुसार कुष्ठरोग के कारण स्थायी रूप से विकलांग हो चुके व्यक्तियों की संख्या 2 से 3 मिलियन के बीच थी।<ref name="WHO_1995">{{cite journal |author=WHO|title=Leprosy disabilities: magnitude of the problem |journal=Weekly Epidemiological Record |volume=70 |issue=38 |pages=269–75 |year=1995 |pmid=7577430}}</ref> पिछले 20 वर्षों में, पूरे विश्व में 15 मिलियन लोगों को कुष्ठरोग से मुक्त किया जा चुका है।<ref name="Leprosy">{{cite news | url=http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/6510503.stm | author=Walsh F | title=The hidden suffering of India's lepers | publisher=बीबीसी न्यूज़ | date=2007-03-31 | access-date=30 अगस्त 2010 | archive-url=https://web.archive.org/web/20070529003040/http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/6510503.stm | archive-date=29 मई 2007 | url-status=live }}</ref> हालांकि, जहां पर्याप्त उपचार उपलब्ध हैं, उन स्थानों में मरीजों का बलपूर्वक संगरोध या पृथक्करण करना अनावश्यक है, लेकिन इसके बावजूद अभी भी पूरे विश्व में भारत (जहां आज भी 1,000 से अधिक कुष्ठ-बस्तियां हैं),<ref name="Leprosy" /> चीन,<ref>{{cite news |url=http://www.iol.co.za/index.php?set_id=1&click_id=117&art_id=qw1158139440409B243 |title=Ignorance breeds leper colonies in China |author=Lyn TE |publisher=Independat News & Media |date=2006-09-13 |accessdate=2010-01-31 |archive-url=https://web.archive.org/web/20100408075048/http://www.iol.co.za/index.php?set_id=1&click_id=117&art_id=qw1158139440409B243 |archive-date=8 अप्रैल 2010 |url-status=live }}</ref> [[रोमानिया]],<ref>{{cite news |url=http://news.bbc.co.uk/2/hi/europe/1639335.stm |title=Europe's last leper colony lives on |author=Radan S, Hutt A |work=बीबीसी न्यूज़ |date=2001-11-06 |accessdate=2010-01-31 |archive-url=https://web.archive.org/web/20100929040222/http://news.bbc.co.uk/2/hi/europe/1639335.stm |archive-date=29 सितंबर 2010 |url-status=live }}</ref> [[मिस्र]], [[नेपाल]], [[सोमालिया]], [[लाइबेरिया]], [[वियतनाम]]<ref>{{cite web |url=http://english.vovnews.vn/Home/Making-Peace-With-Vietnam-to-be-screened-at-Beijing-film-festival/20092/101642.vov |title=“Making Peace With Vietnam” to be screened at Beijing film festival |work=Radio the Voice of Vietnam |date=2009-02-08 |accessdate=2010-01-31 |archive-url=https://web.archive.org/web/20090822213800/http://english.vovnews.vn/Home/Making-Peace-With-Vietnam-to-be-screened-at-Beijing-film-festival/20092/101642.vov |archive-date=22 अगस्त 2009 |url-status=dead }}</ref> और जापान<ref>1996 में जापान निरसित की अपने "कुष्ठ निवारण कानून" लेकिन पूर्व मरीज अभी भी सैनाटोरियम्स में रहते हैं। देखें [http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm कोइज़ुमी कालोनियों कोढ़ी के लिए क्षमा मांगते हैं।] {{Webarchive|url=https://web.archive.org/web/20170909055257/http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm |date=9 सितंबर 2017 }}[http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm बीबीसी (BBC) समाचार. ] {{Webarchive|url=https://web.archive.org/web/20170909055257/http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm |date=9 सितंबर 2017 }}[http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm 25 मई 2001] {{Webarchive|url=https://web.archive.org/web/20170909055257/http://news.bbc.co.uk/2/hi/asia-pacific/1350630.stm |date=9 सितंबर 2017 }} और 2007 [https://web.archive.org/web/20090826074049/http://search.japantimes.co.jp/cgi-bin/nn20070607f2.html जापान टाइम्स 7 जून एक्स-हंसेन के रोग के रोगियों अभी भी पूर्वाग्रह के साथ संघर्ष करते हैं।]</ref> जैसे देशों में कुष्ठ-बस्तियां मौजूद हैं। एक समय था, जब कुष्ठरोग को अत्यधिक संक्रामक और यौन-संबंधों के द्वारा संचरित होने वाला माना जाता था और इसका उपचार पारे के द्वारा किया जाता था- जिनमें से सभी धारणाएं सिफिलिस (syphilis) पर लागू हुईं, जिसका पहली बार वर्णन 1530 में किया गया था। अब ऐसा माना जाता है कि कुष्ठरोग के शुरुआती मामलों से अनेक संभवतः सिफिलिस (syphilis) के मामले रहे होंगे.<ref>[http://www.britannica.com/EBchecked/topic/578770/syphilis/253277/Syphilis-through-history#ref252973 इतिहास के माध्यम से उपदंश] {{Webarchive|url=https://web.archive.org/web/20141214035934/http://www.britannica.com/EBchecked/topic/578770/syphilis/253277/Syphilis-through-history#ref252973 |date=14 दिसंबर 2014 }} [[ब्रिटैनिका विश्वकोष]]</ref> अब यह ज्ञात हो चुका है कि कुष्ठरोग न तो यौन-संपर्क के द्वारा संचरित होता है और न ही उपचार के बाद यह अत्यधिक संक्रामक है क्योंकि लगभग 95% लोग प्राकृतिक रूप से प्रतिरक्षित होते हैं<ref>{{cite web |title=about leprosy: frequently asked questions |url=http://www.leprosy.org/getinformed/aboutleprosy/leprosyfaq.php |publisher=American Leprosy Missions, Inc |accessdate=September 19, 2009 |archive-url=https://web.archive.org/web/20110408123213/http://www.leprosy.org/getinformed/aboutleprosy/leprosyfaq.php |archive-date=8 अप्रैल 2011 |url-status=dead }}</ref> और इससे पीड़ित लोग भी उपचार के मात्र 2 सप्ताह बाद ही संक्रामक नहीं रह जाते. कुष्ठरोग के उन्नत रूपों से जुड़ा सदियों पुराना सामाजिक-कलंक, दूसरे शब्दों में कुष्ठरोग का कलंक,<ref>{{cite journal |author=Jopling WH |title=Leprosy stigma |journal=Lepr Rev |volume=62 |issue=1 |pages=1–12 |year=1991 |month=March |pmid=2034017}}</ref> अनेक क्षेत्रों में आज भी मौजूद है और यह अभी भी स्व-सूचना और जल्द उपचार के प्रति एक बड़ी बाधा बना हुआ है। 1930 के दशक के अंत में डैप्सोन (dapsone) और इसके व्युत्पन्नों की प्रस्तुति के साथ ही कुष्ठरोग के लिये प्रभावी उपचार प्राप्त हुआ। शीघ्र ही डैप्सोन (dapsone) के प्रति प्रतिरोधी कुष्ठरोग दण्डाणु विकसित हो गया और डैप्सोन (dapsone) के अति-प्रयोग के कारण यह व्यापक रूप से फैल गया। 1980 के दशक के प्रारंभ में बहु-औषधि उपचार (मल्टीड्रग थेरपी) (एमडीटी) (MDT) के आगमन से पूर्व तक समुदाय के भीतर इस बीमारी का निदान और उपचार कर पाना संभव नहीं हो सका था।<ref name="WHOleprosyFAQ">{{cite web| url=http://www.searo.who.int/en/section10/section373_11716.htm| title=Communicable Diseases Department, Leprosy FAQ| publisher=[[World Health Organization]]| date=2006-05-25| accessdate=2010-01-31| archive-url=https://archive.today/20120805122916/www.searo.who.int/en/section10/section373_11716.htm| archive-date=5 अगस्त 2012| url-status=dead}}</ref> बहु-दण्डाणुओं के लिये एमडीटी (MDT) 12 माह तक ली जाने वाली राइफैम्पिसिन (rifampicin), डैप्सोन (dapsone) और क्लोफैज़िमाइन (clofazimine) से मिलकर बना होता है। बच्चों और वयस्कों के लिये उपयुक्त रूप से समायोजित खुराकें सभी प्राथमिक स्वास्थ्य केंद्रों में ब्लिस्टर के पैकेटों के रूप में उपलब्ध हैं।<ref name="WHOleprosyFAQ" /> एकल घाव वाले कुष्ठरोग के लिये एकल खुराक वाला एमडीटी (MDT) राइफैम्पिसिन (rifampicin), ऑफ्लॉक्सैसिन (ofloxacin) और माइनोसाइक्लाइन (minocycline) से मिलकर बना होता है। एकल खुराक वाली उपचार रणनीतियों की ओर बढ़ने के कारण कुछ क्षेत्रों में इस बीमारी के प्रसार में कमी आई है क्योंकि इसका प्रसार उपचार की अवधि पर निर्भर होता है। कुष्ठरोग और इसके पीड़ितों के प्रति जागरुकता बढ़ाने के लिये विश्व कुष्ठरोग दिवस (वर्ल्ड लेप्रसी डे) की स्थापना की गई। == वर्गीकरण == कुष्ठरोग के वर्गीकरण के अनेक विभिन्न तरीके हैं, लेकिन वे एक दूसरे के समानांतर हैं। * [[विश्व स्वास्थ्य संगठन|विश्व स्वास्थ्य संगठन (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन)]] की प्रणाली जीवाणु के प्रसरण के आधार पर “पॉसीबैसीलरी (paucibacillary)” और "मल्टिबैसीलरी (multibacillary)" के रूप में वर्गीकरण करती है<ref>{{cite web |author=Smith DS |url=http://emedicine.medscape.com/article/220455-overview |title=Leprosy: Overview |work=eMedicine Infectious Diseases |date=2008-08-19 |accessdate=2010-02-01 |archive-url=https://web.archive.org/web/20100218142511/http://emedicine.medscape.com/article/220455-overview |archive-date=18 फ़रवरी 2010 |url-status=live }}</ref>("[https://web.archive.org/web/20100502062504/http://en.wiktionary.org/wiki/paucus#Latin पॉसी- (pauci)-]" निम्न गुणवत्ता को उल्लेखित करता है।) * शे (SHAY) मापन पांच श्रेणियां प्रदान करता है।<ref name="pm hippopotamus id15176024">{{cite journal |author=Singh N, Manucha V, Bhattacharya SN, Arora VK, Bhatia A |title=Pitfalls in the cytological classification of borderline leprosy in the Ridley-Jopling scale |journal=Diagn. Cytopathol. |volume=30 |issue=6 |pages=386–8 |year=2004 |month=June |pmid=15176024 |doi=10.1002/dc.20012 |url= |accessdate=2010-02-01|issn=1097-0339 }}</ref><ref name="pmid5950347">{{cite journal |author=Ridley DS, Jopling WH |title=Classification of leprosy according to immunity. A five-group system |journal=Int. J. Lepr. Other Mycobact. Dis. |volume=34 |issue=3 |pages=255–73 |year=1966 |pmid=5950347 |doi= |url= |accessdate=2010-02-01}}</ref> * आईसीडी-10 (ICD-10), हालांकि डब्ल्यूएचओ (WHO) द्वारा विकसित है, लेकिन यह डब्ल्यूएचओ (WHO) प्रणाली का नहीं, बल्कि रिडले-जॉपलिंग (Ridley-Jopling) प्रणाली का प्रयोग करता है। यह एक मध्यवर्ती (“आई”) ("I") प्रविष्टि भी जोड़ता है।{{Citation needed|date= फ़रवरी 2010}} * [[चिकित्सकीय विषय शीर्षक|मेश (MeSH)]] में, तीन समूहीकरणों का प्रयोग किया जाता है। {| class="wikitable" |- ! डब्ल्यूएचओ (WHO) ! रिडले-जॉपलिंग ! [[आईसीडी-10 (ICD-10)]] ! [[मेडिकल सब्जेक्ट हेडिंग्ज़ (Medical Subject Headings)|मेश (MeSH)]] ! विवरण ! [[लेप्रोमिन]] परीक्षण ! प्रतिरक्षी लक्ष्य |-शिश्न!!! | पॉसीबैसीलरी (Paucibacillary) | ट्युबरक्युलॉइड (“टीटी”) ("TT"), बॉर्डरलाइन ट्युबरक्युलॉइड (“बीटी”) ("BT") | A30.1, A30.2 | ट्युबरक्युलॉइड | इसे त्वचा पर [[त्वचा का रंग बदलना|उपरंजकयुक्त (hypopigmented)]] एक या अधिक धब्बों व असंवेदक धब्बों के द्वारा पहचाना जाता है, जहां त्वचा की [[Wikt:sensation|संवेदनाएं]] समाप्त हो जाती हैं क्योंकि मानवीय मेजबान की प्रतिरक्षी कोशिकाओं द्वारा आक्रमण किये जाने के कारण सतही नसें क्षतिग्रस्त हो गईं हैं। | सकारात्मक | दण्डाणु (टीएच1) (Th1) |- | मल्टिबैसीलरी | मिड-बॉर्डरलाइन या बॉर्डरलाइन (“बीबी”) ("BB") | A30.3 | बॉर्डरलाइन | बॉर्डरलाइन कुष्ठरोग की तीव्रता मध्यम होती है और यह सबसे आम रूप है। त्वचा के धब्बे ट्युबरक्युलॉइड कुष्ठरोग के समान दिखाई देते हैं, लेकिन वे बहुत अधिक संख्या में और अनियमित होते हैं; बड़े धब्बे पूरे अंग को प्रभावित कर सकते हैं और कमजोरी तथा संवेदना में कमी के साथ सतही नसों का शामिल होना आम है। यह प्रकार अस्थिर होता है और लेप्रोमेटस (लेप्रोमेटस) कुष्ठरोग जैसा बन सकता है या इसमें एक प्रतिवर्ती प्रतिक्रिया हो सकती है, जिसके कारण यह ट्युबरक्युलॉइड रूप जैसा बन सकता है। | | |- | मल्टीबैसीलरी | बॉर्डरलाइन लेप्रोमेटस (“बीएल”) ("BL") और लेप्रोमेटस (“एलएल”) ("LL") | A30.4, A30.5 | लेप्रोमेटस | यह त्वचा के सममित घावों, ग्रंथियों, प्लाक, आंतरिक त्वचा (dermis) की मोटाई बढ़ने और नाक के श्लेष्म की नियमित सहभागिता, जिसके परिणामस्वरूप नाक में रक्त का जमाव और एपिस्टैक्सिस (नाक से खून आना) की समस्या हो जाती है, से जुड़ा होता है, लेकिन विशिष्ट रूप से नसों की क्षति को पहचान पाने में देर लगती है। | नकारात्मक | दण्डाणु के भीतर स्थित प्लाज्मिड (टीएच2) (Th2) |} ट्युबरक्युलॉइड और लेप्रोमेटस रूपों के विरुद्ध प्रतिरक्षी प्रतिक्रियाओं में अंतर होता है।<ref name="pmid8006444">{{cite journal |author=Modlin RL |title=Th1-Th2 paradigm: insights from leprosy |journal=J. Invest. Dermatol. |volume=102 |issue=6 |pages=828–32 |year=1994 |month=June |pmid=8006444 |doi= 10.1111/1523-1747.ep12381958|url=https://archive.org/details/sim_journal-of-investigative-dermatology_1994-06_102_6/page/828}}</ref> हैन्सेन रोग को निम्नलिखित प्रकारों में भी बांटा जा सकता है:<ref name="Andrews">{{cite book |author=James, William D.; Berger, Timothy G.; et al. |title=Andrews' Diseases of the Skin: clinical Dermatology |publisher=Saunders Elsevier |location= |year=2006 |pages= |isbn=0-7216-2921-0 |oclc= |doi= |accessdate=}}</ref>{{Rp|344-346}} : :* प्रारंभिक और अनिश्चित कुष्ठरोग :* ट्युबरक्युलॉइड कुष्ठरोग :* बॉर्डरलाइन ट्युबरक्युलॉइड कुष्ठरोग :* बॉर्डरलाइन कुष्ठरोग :* बॉर्डरलाइन लेप्रोमेटस कुष्ठरोग :* लेप्रोमेटस कुष्ठरोग :* हिस्टॉइड कुष्ठरोग :* ल्युसियो (Lucio) और लैटापि (Latapí) का विकीर्ण कुष्ठरोग यह बीमारी केवल नसों की सहभागिता के साथ भी हो सकती है, जिसमें त्वचा पर कोई घाव नहीं होते.<ref name="WHO_Factsheet" /><ref name="pmid12883921">{{cite journal |author=Jardim MR, Antunes SL, Santos AR, ''et al.'' |title=Criteria for diagnosis of pure neural leprosy |journal=J. Neurol. |volume=250 |issue=7 |pages=806–9 |year=2003 |month=July |pmid=12883921 |doi=10.1007/s00415-003-1081-5 |url=}}</ref><ref name="pmid17120509">{{cite journal |author=Mendiratta V, Khan A, Jain A |title=Primary neuritic leprosy: a reappraisal at a tertiary care hospital |journal=Indian J Lepr |volume=78 |issue=3 |pages=261–7 |year=2006 |pmid=17120509 |doi= |url=}}</ref><ref name="pmid10979277">{{cite journal |author=Ishida Y, Pecorini L, Guglielmelli E |title=Three cases of pure neuritic (PN) leprosy at detection in which skin lesions became visible during their course |journal=Nihon Hansenbyo Gakkai Zasshi |volume=69 |issue=2 |pages=101–6 |year=2000 |month=July |pmid=10979277 |doi= |url=}}</ref><ref name="pmid8711979">{{cite journal |author=Mishra B, Mukherjee A, Girdhar A, Husain S, Malaviya GN, Girdhar BK |title=Neuritic leprosy: further progression and significance |journal=Acta Leprol |volume=9 |issue=4 |pages=187–94 |year=1995 |pmid=8711979 |doi= |url=}}</ref><ref name="pmid1406021">{{cite journal |author=Talwar S, Jha PK, Tiwari VD |title=Neuritic leprosy: epidemiology and therapeutic responsiveness |journal=Lepr Rev |volume=63 |issue=3 |pages=263–8 |year=1992 |month=September |pmid=1406021 |doi= |url=}}</ref> इस बीमारी को हैन्सेन का रोग भी कहा जाता है। == संकेत व लक्षण == त्वचा पर घाव प्राथमिक बाह्य संकेत हैं।<ref name="Sherris" /> यदि इसे अनुपचारित छोड़ दिया जाए, तो कुष्ठरोग बढ़ सकता है, जिससे त्वचा, नसों, हाथ-पैरों और आंखों में स्थायी क्षति हो सकती है। लोककथाओं के विपरीत, कुष्ठरोग के कारण शरीर के अंग अलग होकर गिरते नहीं, हालांकि इस बीमारी के कारण वे सुन्न तथा/या रोगी बन सकते हैं।<ref name="time.com" /><ref>{{cite book |title = Textbook of Orthopedics and Trauma | edition = 2 | page = 779 | publisher = Jaypee Brothers Publishers | year = 2008 | isbn = 8184482426, 9788184482423 | author = Kulkarni GS}}</ref> == कारण == === माइकोबैक्टेरियम लेप्री (Mycobacterium leprae) === [[चित्र:M leprae ziehl nielsen2.jpg|thumb|right|माइकोबैक्टीरियम लेप्राए, एजेंट की एक कुष्ठ रोग के कारणात्मक.एसिड के रूप में तेजी से जीवाणु, जब ज़ेहल-नील्सन का उपयोग किया जाता है एम. लेप्राए लाल दिखता है।]] {{Main|माइकोबैक्टेरियम लेप्री}} ''माइकोबैक्टेरियम लेप्री (Mycobacterium leprae)'' और ''माइकोबैक्टेरियम लेप्रोमैटॉसिस (Mycobacterium lepromatosis)'' कुष्ठरोग का कारण बनने वाले एजेंट हैं। ''एम. लेप्रोमेटॉसिस (M. lepromatosis)'' पहचाना गया अपेक्षाकृत नया माइकोबैक्टेरियम है, जिसे 2008 में विकीर्ण लेप्रोमेटस कुष्ठरोग के एक जानलेवा मामले से पृथक किया गया था।<ref name="new" /><ref name="Sherris" /> एक अंतर्कोशिकीय, अम्ल-तीव्र [[जीवाणु|बैक्टेरियम]], ''एम. लेप्री (M. leprae)'' वायुजीवी और दण्ड के आकार का होता है और यह ''माइकोबैक्टेरियम'' प्रजातियों की मोम-जैसी कोशिका झिल्ली आवरण विशेषता से घिरा होता है।<ref name="Baron">{{cite book | author = McMurray DN | title = Mycobacteria and Nocardia. ''in:'' Baron's Medical Microbiology ''(Baron S ''et al.'', eds.) | edition = 4th | publisher = Univ of Texas Medical Branch | year = 1996 | url = http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=mmed.section.1833 | isbn = 0-9631172-1-1 | oclc = 33838234 | access-date = 30 अगस्त 2010 | archive-url = https://web.archive.org/web/20090212202626/http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=mmed.section.1833 | archive-date = 12 फ़रवरी 2009 | url-status = live }}</ref> स्वतंत्र विकास के लिये आवश्यक जीन की अत्यधिक हानि के कारण, ''एम. लेप्री (M. leprae)'' और ''एम. लेप्रोमेटॉसिस (M. lepromatosis)'' को प्रयोगशाला में निर्मित नहीं किया जा सकता, एक ऐसा कारक जो कोच की अभिधारणा की एक दृढ़ व्याख्या के अंतर्गत निर्णायक रूप से इस जीव की पहचान करने में कठिनाई उत्पन्न कर देता है।<ref name="new" /><ref>{{cite journal |author=Bhattacharya S, Vijayalakshmi N, Parija SC |title=Uncultivable bacteria: Implications and recent trends towards identification |journal=Indian journal of medical microbiology |volume=20 |issue=4 |pages=174–7 |date=1 अक्टूबर 2002 |pmid=17657065 |url=http://www.ijmm.org/article.asp?issn=0255-0857;year=2002;volume=20;issue=4;spage=174;epage=177;aulast=Bhattacharya |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20181022061351/http://www.ijmm.org/article.asp?issn=0255-0857;year=2002;volume=20;issue=4;spage=174;epage=177;aulast=Bhattacharya |archive-date=22 अक्तूबर 2018 |url-status=dead }}</ref> गैर-संवर्धन-आधारित तकनीकों, जैसे आण्विक आनुवांशिकी ने कारण-कार्य-संबंध की वैकल्पिक स्थापना की अनुमति दी है। हालांकि, अभी तक इसके उत्पादक जीवों को ''प्रयोगशाला में'' संवर्धित कर पाना असंभव रहा है, लेकिन उन्हें पशुओं में विकसित कर पाना संभव हुआ है। यूनाइटेड स्टेट्स लेप्रसी पैनल (United States Leprosy Panel) के चेयरमैन, चार्ल्स शेपर्ड (Charles Shepard) ने 1960 में चूहों के पैरों के पंजों में इन जीवों को सफलतापूर्वक विकसित किया। 1970 में जोसेफ कॉल्सन (Joseph Colson) और रिचर्ड हिल्सन (Richard Hilson) ने सेंट जॉर्ज हॉस्पिटल, लंदन में जन्मजात रूप से बाल्यग्रंथि-हीन चूहे (‘नग्न चूहे’) के प्रयोग द्वारा इस विधि में सुधार किया। एक अन्य पशु मॉडल एलीनॉर स्टॉर्स (Eleanor Storrs) द्वारा गल्फ साउथ रिसर्च इंस्टीट्यूट (Gulf South Research Institute) में विकसित किया गया। डॉ॰ स्टॉर्स ने अपनी पीएचडी (PhD) के लिये नौ-धारियों वाले वर्मी (armadillos) पर कार्य किया था क्योंकि इस पशु के शरीर का तापमान मनुष्यों के शरीर के तापमान से कम था और इसलिये यह एक उपयुक्त पशु मॉडल हो सकता था। यह कार्य 1968 में वाल्डेमर किर्शीमर (Waldemar Kirchheimer) द्वारा प्रदान की गई सामग्री के साथ कारविल (Carville), [[लुईज़ियाना|लुइज़ियाना (Louisiana)]] में यूनाइटेड स्टेट्स पब्लिक हेल्थ लेप्रोसैरियम (United States Public Health Leprosarium) में प्रारंभ हुआ। ये प्रयोग असफल सिद्ध हुए, लेकिन लियोनार्ड’स वुड मेमोरियल (Leonard's Wood Memorial) के चिकित्सीय निदेशक चैपमैन बिनफोर्ड (Chapman Binford) द्वारा 1970 में प्रदान की गई सामग्री के साथ किया गया अतिरिक्त कार्य सफल रहा. इस मॉडल का वर्णन करने वाले शोध-पत्रों के परिणामस्वरूप प्राथमिकता पर एक विवाद छिड़ गया। जब इस बात की खोज हुई कि लुइज़ियाना में पाये जाने वाले जंगली वर्मी प्राकृतिक रूप से ही कुष्ठरोग से संक्रमित थे, तो आगे एक और विवाद का जन्म हुआ। प्राकृतिक रूप से होने वाला संक्रमण गैर-मानवीय वानरों में भी प्राप्त हुआ है, जिनमें अफ्रीकी चिंपांज़ी (African chimpanzee), सूटी मैंगेबी (sooty mangabey) और साइनोमॉल्गस मकैक (cynomolgus macaque) शामिल हैं। === आनुवांशिकी === अनेक जीन कुष्ठरोग के प्रति संवेदनशीलता से जुड़े हुए हैं। {| class="wikitable" style="font-size:75%" |- ! नाम ! स्थान ! ओएमआईएम (OMIM) ! जीन |- | एलपीआरएस1 (LPRS1) | 10पी13 (10p13) | {{OMIM2|609888}} | |- | एलपीआरएस2 (LPRS2) | 6क्यू25 (6q25) | {{OMIM2|607572}} | पार्क2 (PARK2), पीएसीआरजी (PACRG) |- | एलपीआरएस3 (LPRS3) | 4क्यू32 (4q32) | {{OMIM2|246300}} | टीएलआर2 (TLR2) |- | एलपीआरएस4 (LPRS4) | 6पी21.3 (6p21.3) | {{OMIM2|610988}} | एलटीए (LTA) |} == रोगलक्षण-शरीरक्रिया विज्ञान == [[चित्र:Bundesarchiv Bild 105-DOA0199, Deutsch-Ostafrika, Leprakranke.jpg|thumb|300px|right|पूर्वी अफ्रीका जर्मन के बगामोज़ो में कुष्ठरोग से पीड़ित हैं।]] कुष्ठरोग के संचरण की क्रियाविधि लंबा निकट संपर्क और अनुनासिक बूंदों द्वारा संचरण है।<ref name="WHO_Factsheet" /> मानवों के अतिरिक्त जिस एकमात्र जीव में कुष्ठरोग होने की जानकारी मिली है, वह नौ-धारियों वाला वर्मी है।<ref>{{cite journal |author=Rojas-Espinosa O, Løvik M |title=Mycobacterium leprae and Mycobacterium lepraemurium infections in domestic and wild animals |journal=Rev. - Off. Int. Epizoot. |volume=20 |issue=1 |pages=219–51 |year=2001 |pmid=11288514 |doi=}}</ref> चूहे के पैरों के पंजों में प्रविष्ट करके इस जीवाणु को प्रयोगशाला में भी विकसित किया जा सकता है।<ref>{{cite journal |author=Hastings RC, Gillis TP, Krahenbuhl JL, Franzblau SG |title=Leprosy |journal=Clin. Microbiol. Rev. |volume=1 |issue=3 |pages=330–48 |date=1988-07-01 |pmid=3058299 |url=http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=3058299 |pmc=358054 }}{{Dead link|date=नवंबर 2024 |bot=InternetArchiveBot }}</ref> इस बात के प्रमाण मौजूद हैं कि ''एम. लेप्री'' से संक्रमित सभी लोगों में कुष्ठरोग विकसित नहीं होता और लंबे समय यह माना जाता रहा है कि इसमें आनुवांशिक कारकों की भी एक भूमिका होती है क्योंकि कुछ विशिष्ट परिवारों में कुष्ठरोग का गुच्छन देखा गया है और यह समझ पाने में सफलता प्राप्त नहीं हो सकी है कि क्यों कुछ लोगों में लेप्रोमेटस कुष्ठरोग विकसित हो जाता है, जबकि अन्य लोगों में कुष्ठरोग के दूसरे प्रकार विकसित होते हैं।<ref>{{cite journal |author=Alcaïs A, Mira M, Casanova JL, Schurr E, Abel L |title=Genetic dissection of immunity in leprosy |journal=Curr. Opin. Immunol. |volume=17 |issue=1 |pages=44–8 |year=2005 |pmid=15653309 |doi=10.1016/j.coi.2004.11.006}}</ref> ऐसा अनुमान है कि आनुवांशिक कारकों के कारण केवल 5% लोगों में ही कुष्ठरोग होने का खतरा होता है।<ref>{{cite web| url=http://www.kfsm.com/Global/story.asp?S=7845322| title=AR Dept of Health debunks leprosy fears| date=2008-02-08| accessdate=2008-04-08| archive-url=https://web.archive.org/web/20090112112418/http://www.kfsm.com/Global/story.asp?S=7845322| archive-date=12 जनवरी 2009| url-status=dead}}</ref> अधिकांशतः इसका कारण यह है कि शरीर इस जीवाणु के प्रति प्राकृतिक रूप से प्रतिरक्षी होता है और जो लोग इससे संक्रमित हो जाते हैं, वे इस बीमारी के प्रति एक तीव्र एलर्जी भरी प्रतिक्रिया का अनुभव कर रहे हैं। हालांकि इस चिकित्सीय व्याख्या के निर्धारण में आनुवांशिक कारकों की भूमिका पूरी तरह स्पष्ट नहीं है। इसके अतिरिक्त, कुपोषण और संक्रमित व्यक्ति के साथ लंबे समय तक संपर्क भी इस प्रकट बीमारी के विकास में भूमिका निभा सकता है। यह विश्वास सबसे व्यापक तौर पर प्रचलित है कि यह बीमारी संक्रमित व्यक्ति और स्वस्थ व्यक्ति के बीच संपर्क के द्वारा संचरित होती है।<ref>{{cite journal |author=Kaur H, Van Brakel W |title=Dehabilitation of leprosy-affected people—a study on leprosy-affected beggars |journal=Leprosy review |volume=73 |issue=4 |pages=346–55 |year=2002 |pmid=12549842 |doi=}}</ref> सामान्यतः संपर्क की निकटता संक्रमण की मात्रा पर निर्भर होती है, जो कि स्वतः ही बीमारी के होने पर निर्भर है। निकट संपर्क को प्रोत्साहित करने वाली विभिन्न स्थितियों में से घर के भीतर होने वाला संपर्क ही वह एकमात्र स्थिति है, जिसे सरलता से पहचाना जा सकता है, हालांकि संपर्कों की घटनायें और उनसे संबंधित जोखिम के बीच विभिन्न अध्ययनों में बहुत अधिक अंतर दिखाई देता है। विस्तार अध्ययनों में, लेप्रोमेटस कुष्ठरोग के संपर्कों के लिये संक्रमण की दरें सेबु, [[फ़िलीपीन्स|फिलीपीन्स]] में 6.2 प्रति 1000 प्रति वर्ष<ref name="Doull_1942">{{cite journal | author = Doull JA, Guinto RA, Rodriguez RS, et al. | title = The incidence of leprosy in Cordova and Talisay, Cebu, Philippines | journal = International Journal of Leprosy | year = 1942 | volume = 10 | pages = 107–131 | url= }}</ref> से लेकर दक्षिणी भारत के कुछ भागों में 55.8 प्रति 1000 प्रति वर्ष तक रही हैं।<ref name="Noordeen_1978">{{cite journal |author=Noordeen S, Neelan P |title=Extended studies on chemoprophylaxis against leprosy |journal=Indian J Med Res |volume=67 |issue= |pages=515–27 |year=1978 |pmid=355134}}</ref> मानव शरीर से ''एम. लेप्री'' के दो निकास मार्गों के रूप में अक्सर त्वचा व अनुनासिक श्लेष्म का वर्णन किया जाता है, हालांकि उनका सापेक्ष महत्व स्पष्ट नहीं है। लेप्रोमेटस के मामले अंतर्त्वचा में गहराई तक जीवों की बड़ी मात्रा को दर्शाते हैं, लेकिन इस बात में संदेह है कि क्या वे पर्याप्त मात्रा में त्वचा की सतह तक पहुंचते हैं। हालांकि उतरी हुई त्वचा (त्वचा की ऊपरी सतह का उतरना) में अम्ल-तीव्र दण्डाणुओं के पाये जाने की खबरें मिली हैं, लेकिन 1963 में वेडेल ''व अन्य'' (Weddell ''et al.'') ने बताया कि मरीजों और उनके संपर्क में आने वाले लोगों से बहुत बड़ी मात्रा में लिये गये नमूनों के परीक्षण के बावजूद भी उन्हें उपकला में कोई अम्ल-तीव्र दण्डाणु प्राप्त नहीं हुए थे।<ref name="Weddell_1963">{{cite journal |author=Weddell G, Palmer E |title=The pathogenesis of leprosy. An experimental approach |journal=Leprosy Review |volume=34 |issue= |pages=57–61 |year=1963 |pmid=13999438}}</ref> एक हालिया अध्ययन में, जॉब ''व अन्य'' (Job ''et al.'') ने लेप्रोमेटस कुष्ठरोग के रोगियों की त्वचा की ऊपरी केराटिन परत में ''एम. लेप्री (M. leprae)'' पर्याप्त मात्रा प्राप्त करने की जानकारी देते हुए यह सुझाव दिया कि संभव है कि इस जीवाणु की निकासी वसामय स्रावों के साथ होती हो.<ref name="Job_1999">{{cite journal |author=Job C, Jayakumar J, Aschhoff M |title="Large numbers" of Mycobacterium leprae are discharged from the intact skin of lepromatous patients; a preliminary report |journal=Int J Lepr Other Mycobact Dis |volume=67 |issue=2 |pages=164–7 |year=1999 |pmid=10472371}}</ref> अनुनासिक श्लेष्म, विशेष रूप से व्रण-युक्त श्लेष्म, का महत्व शैफेर (Schäffer) द्वारा 1898 में ही पहचान लिया गया था।<ref name="Schaffer_1898">''आर्क डरमैटो उपदंश'' 1898; 44:159–174</ref> लेप्रोमेटस कुष्ठरोग में अनुनासिक श्लेष्मक घावों से दण्डाणु की मात्रा का प्रदर्शन शेपर्ड द्वारा बड़े पैमाने पर किया गया था और उनकी संख्या 10,000 से 10,000,000 के बीच थी।<ref name="Shepard_1960">{{cite journal |author=Shepard C |title=Acid-fast bacilli in nasal excretions in leprosy, and results of inoculation of mice |journal=Am J Hyg |volume=71 |issue= |pages=147–57 |year=1960 |pmid=14445823}}</ref> पेडले (Pedley) ने बताया कि अधिकांश लेप्रोमेटस मरीजों की बहती हुई नाक से लिये गये अनुनासिक स्रावों में कुष्ठरोग दण्डाणु प्राप्त हुए.<ref name="Pedley_1973">{{cite journal |author=Pedley J |title=The nasal mucus in leprosy |journal=Lepr Rev |volume=44 |issue=1 |pages=33–5 |year=1973 |pmid=4584261}}</ref> डैवे (Davey) और रीस (Rees) ने संकेत दिया कि लेप्रोमेटस मरीजों के अनुनासिक स्राव में प्रतिदिन 10 मिलियन विकासक्षम जीव उत्पन्न हो सकते हैं।<ref name="Davey_1974">{{cite journal |author=Davey T, Rees R |title=The nasal dicharge in leprosy: clinical and bacteriological aspects |journal=Lepr Rev |volume=45 |issue=2 |pages=121–34 |year=1974 |pmid=4608620}}</ref> मानव शरीर में ''एम. लेप्री (M. leprae)'' के प्रवेश का मार्ग भी निश्चित रूप से ज्ञात नहीं है: त्वचा और ऊपरी श्वसन तंत्र सबसे संभावित मार्ग हैं। पुराने अनुसंधान जहां त्वचा मार्ग का अध्ययन कर रहे थे, वहीं हालिया अनुसंधान द्वारा श्वसन तंत्र का समर्थन बढ़ता जा रहा है। रीस (Rees) और मैकडॉगाल (McDougall) ने प्रतिरक्षा-प्रतिबन्धित चूहों में ''एम. लेप्री (M. leprae)'' युक्त के माध्यम से कुष्ठरोग का प्रयोगात्मक संचरण कर पाने में सफलता प्राप्त की, जिससे मनुष्यों में भी इसी तरह की संभावना व्यक्त की गई।<ref name="Rees_1977">{{cite journal |author=Rees R, McDougall A |title=Airborne infection with Mycobacterium leprae in mice |journal=J Med Microbiol |volume=10 |issue=1 |pages=63–8 |year=1977 |pmid=320339 |doi=10.1099/00222615-10-1-63}}</ref> नग्न चूहों के साथ किये गये उन परीक्षणों के सफल परिणाम मिलने की जानकारी प्राप्त हुई है, जिनमें ''एम. लेप्री (M. leprae)'' को सामयिक अनुप्रयोग के द्वारा अनुनासिक छिद्र से प्रविष्ट किया गया था।<ref name="Chehl_1985">{{cite journal |author=Chehl S, Job C, Hastings R |title=Transmission of leprosy in nude mice |journal=Am J Trop Med Hyg |volume=34 |issue=6 |pages=1161–6 |year=1985 |pmid=3914846}}</ref> संक्षेप में, श्वसन तंत्र के माध्यम से प्रवेश सर्वाधिक संभावित मार्ग है, हालांकि अन्य मार्ग, विशेष रूप से टूटी हुई त्वचा, की उपेक्षा नहीं की जा सकती. सीडीसी (CDC) ने इस बीमारी के संचरण के बारे में निम्नलिखित धारणा व्यक्त की है: "''हालांकि हैन्सेन के रोग के संचरण का मार्ग अनिश्चित बना हुआ है, लेकिन अधिकांश शोधकर्ता मानते हैं कि सामान्यतः'' एम. लेप्री (M. leprae) ''श्वसन बूंदों के द्वारा एक व्यक्ति से दूसरे व्यक्ति में फैलता है।'' "<ref name="CDC_2005">{{CDCDiseaseInfo|hansens_t}}हंसेन के रोग (कुष्ठरोग)</ref> कुष्ठरोग में, उष्मायन काल और संक्रमण के समय तथा बीमारी की शुरुआत के मापन दोनों के ही लिये सन्दर्भ बिंदु परिभाषित कर पाना कठिन है; पहला वाला पर्याप्त प्रतिरक्षात्मक उपकरणों के कारण और दूसरा बीमारी की धीमी शुरुआत के कारण. इसके बावजूद, विभिन्न शोधकर्ताओं ने कुष्ठरोग के लिये उष्मायन काल का मापन करने का प्रयास किया है। न्यूनतम उष्मायन काल कुछ सप्ताहों जितना संक्षिप्त होने की जानकारी मिली है और यह नवजात शिशुओं में कुष्ठरोग की अक्सर होने वाली घटनाओं पर आधारित है।<ref name="Montestruc_1954">{{cite journal |author=Montestruc E, Berdonneau R |title=2 New cases of leprosy in infants in Martinique |journal=Bull Soc Pathol Exot Filiales |volume=47 |issue=6 | language = fr | pages=781–3 |year=1954 |pmid=14378912}}</ref> अधिकतम उष्मायन काल 30 वर्ष, या उससे अधिक, लंबा होने की जानकारी मिली है, जैसा कि युद्ध के उन पुराने सिपाहियों में देखा गया है, जिनके बारे में यह ज्ञात है कि वे थोड़े समय के लिये वे संक्रमण के स्थानीय क्षेत्रों के संपर्क में आये थे, लेकिन अन्यथा वे गैर-स्थानीय क्षेत्रों में रह रहे थे। सामान्यतः इस बात पर सहमति है कि औसत उष्मायन काल तीन से पांच वर्षों का होता है। == रोकथाम == वेनेज़ुएला के डॉ॰ जैसिन्टो कॉन्विट (Dr. Jacinto Convit) ने तपेदिक के टीके और माइटोकॉन्ड्रियम लैप्री (Mycobacterium leprae) से एक टीके का संश्लेषण किया, एक असाधारण कार्य, जिसके लिये उन्हें 1990 के दशक के अंत में चिकित्सा के क्षेत्र में नोबेल पुरस्कार के लिये नामांकन प्राप्त हुआ। हालिया परीक्षणों में, राइफैम्पिसिन (rifampicin) की एकल खुराक ने बीमारी से संपर्क के दो वर्ष बाद कुष्ठरोग विकसित होने की दर को 57% कम कर दिया; इस अवधि में राइफैम्पिसिन (rifampicin) के साथ किये गये 265 उपचारों ने कुष्ठरोग के एक मामले को रोका.<ref>{{cite journal|author=Moet FJ, Pahan D, Oskam L, Richardus JH|title=Effectiveness of single dose rifampicin in preventing leprosy in close contacts of patients with newly diagnosed leprosy: cluster randomised controlled trial|journal=BMJ|year=2008|doi=10.1136/bmj.39500.885752.BE | volume = 336 | pages = 761|pmid=18332051|issue=7647|pmc=2287265}}</ref> एक गैर-यादृच्छिकृत अध्ययन में पाया गया कि राइफैम्पिसिन (rifampicin) तीन वर्ष बाद कुष्ठरोग के नये मामलो की संख्या 75% घटा दी.<ref>{{cite journal|author=Bakker MI, Hatta M, Kwenang A, ''et al.''|title=Prevention of leprosy using rifampicin as chemoprophylaxis|journal=Am J Trop Med Hyg|date=1 अप्रैल 2005|volume=72|pages=443–8|url=http://www.ajtmh.org/cgi/content/abstract/72/4/443?ijkey=4b15a78b876fd990dfd877ee89b22399c026501c&keytype2=tf_ipsecsha|pmid=15827283|issue=4|access-date=30 अगस्त 2010|archive-url=https://web.archive.org/web/20090823002121/http://www.ajtmh.org/cgi/content/abstract/72/4/443?ijkey=4b15a78b876fd990dfd877ee89b22399c026501c&keytype2=tf_ipsecsha|archive-date=23 अगस्त 2009|url-status=dead}}</ref> बीसीजी (BCG) कुष्ठरोग तथा साथ ही तपेदिक के खिलाफ सुरक्षा की एक परिवर्तनीय मात्रा प्रस्तावित करती है।<ref>{{cite journal | author=Fine PE, Smith PG | journal=Lepr Rev |title=Vaccination against leprosy—the view from 1996 | volume=67 | issue=4 | year=1996 | pages=249–52 | pmid=9033195}}</ref><ref>{{cite journal | author=Karonga prevention trial group | title=Randomized controlled trial of single BCG, repeated BCG, or combined BCG and killed ''Mycobacterium leprae'' vaccine for prevention of leprosy and tuberculosis in Malawi | url=https://archive.org/details/sim_the-lancet_1996-07-06_348_9019/page/n25 | journal=Lancet | volume=348 | year=1996 | pages=17–24 | pmid=8691924 | doi=10.1016/S0140-6736(96)02166-6 | issue=9019}}</ref> इस बीमारी को मिटाने की राह में आ रही स्थायी बाधाओं से निपटने के प्रयासों में पहचान में सुधार, मरीजों और लोगों को इसके कारणों के बारे में शिक्षित करना और इस बीमारी, जिसके मरीजों को ऐतिहासिक रूप से “अस्वच्छ” या “ईश्वर द्वारा शापित” मानकर बहिष्कृत किया जाता रहा है, से जुड़ी सामाजिक वर्जनाओं से लड़ना शामिल है। कुष्ठरोग आनुवंशिक बीमारी नहीं है। जहां वर्जनाएं मज़बूत हैं, उन क्षेत्रों में मरीजों पर अपनी स्थिति को छिपाने (और उपचार ढूंढने से बचने) पर बाध्य किया जा सकता है, ताकि भेद-भाव से बचा जा सके. हैन्सेन के रोग के बारे में जागरुकता के अभाव के चलते लोग यह विश्वास (गलत ढंग से) कर सकते हैं कि यह बीमारी अत्यधिक संक्रामक और असाध्य है। इथियोपिया का अलर्ट (ALERT) अस्पताल और अनुसंधान केंद्र पूरे विश्व के चिकित्सा कर्मियों को कुष्ठरोग के उपचार का प्रशिक्षण प्रदान करता है और साथ ही अनेक स्थानीय मरीजों का उपचार भी करता है। शल्य-चिकित्सीय तकनीकें, जैसे अंगूठों की गतिविधि के नियंत्रण की पुनर्प्राप्ति के लिये, विकसित की जा चुकी हैं। == उपचार == [[चित्र:MDTRegimens.jpg|thumb|एम्डिटी (MDT) बहुऔषध विरोधी कुष्ठरोग ड्रग्स: मानक रेगिमेंस]] 1993 में ''कुष्ठरोग की कीमोथेरपी (Chemotherapy of Leprosy)'' पर डब्ल्यूएचओ (WHO) के अध्ययन-दल ने दो प्रकार के मानक एमडीटी (MDT) परहेज नियमों को अपनाए जाने की अनुशंसा की.<ref name="WHO_1993">{{cite web | title = Chemotherapy of Leprosy | work = WHO Technical Report Series 847 | publisher = WHO | year = 1994 | url = http://www.who.int/lep/mdt/chemotherapy/en/index.html | accessdate = 2007-03-24 | archive-url = https://web.archive.org/web/20090725224110/http://www.who.int/lep/mdt/chemotherapy/en/index.html | archive-date = 25 जुलाई 2009 | url-status = live }}</ref> पहला मल्टिबैसीलरी (multibacillary) (एमबी (MB) या लेप्रोमेटस) के मामलों के लिये राइफैम्पिसिन (rifampicin), क्लोफैज़िमाइन (clofazimine) और डैप्सोन (dapsone) के प्रयोग द्वारा 24-माह का एक उपचार था। दूसरा पॉसिबैसीलरी (paucibacillary) (पीबी (PB) or ट्युबरक्युलॉइड) के मामलों के लिये राइफैम्पिसिन (rifampicin) और डैप्सोन (dapsone) का प्रयोग करके छः माह का एक उपचार था। एक सार्वजनिक स्वास्थ्य समस्या के रूप में कुष्ठरोग को मिटाने पर पहले अंतर्राष्ट्रीय सम्मेलन (First International Conference on the Elimination of Leprosy as a Public Health Problem), जो कि अगले वर्ष हनोई में आयोजित किया गया था, में वैश्विक रणनीति को प्रोत्साहन दिया गया और सभी स्थानिक देशों तक एमडीटी (MDT) का प्रबंध और आपूर्ति करने के लिये डब्ल्यूएचओ (WHO) को फंड प्रदान किया गया। 1995 और 1999 के बीच, डब्ल्यूएचओ (WHO) ने, निप्पॉन फाउंडेशन (Nippon Foundation) (चेयरमैन योहेई सासाकावा (Yōhei Sasakawa), कुष्ठरोग मिटाने के लिये विश्व स्वास्थ्य संगठन के सद्भावना दूत (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन Goodwill Ambassador for Leprosy Elimination)) की सहायता से, सभी स्थानिक देशों में ब्लिस्टर पैक में एमडीटी (MDT) का मुफ्त वितरण किया, जिसकी वितरण व्यवस्था स्वास्थ्य मंत्रालयों के माध्यम से की गई। एमडीटी (MDT) के उत्पादक नोवार्टिस (Novartis) द्वारा दिये गये दान के बाद वर्ष 2000 में मुफ्त-वितरण के इस प्रावधान को आगे बढ़ा दिया गया और अब यह कम से कम 2010 के अंत तक जारी रहेगा. राष्ट्रीय स्तर पर, राष्ट्रीय कार्यक्रमों से जुड़े [[अशासकीय संस्था|गैर-सरकारी संगठनों]] (एनजीओ) (NGOs) को सरकार के द्वारा डब्ल्यूएचओ (WHO) से प्राप्त इस एमडीटी (MDT) की आपूर्ति की जाती रहेगी. एमडीटी (MDT) अत्यधिक प्रभावी बना हुआ है और अब पहली मासिक खुराक के बाद से ही मरीज संक्रामक नहीं रह जाते.<ref name="WHO_Factsheet" /> कैलेंडर ब्लिस्टर पैक में इसकी प्रस्तुति के कारण वास्तविक स्थितियों में इसका प्रयोग करना सुरक्षित और सरल है।<ref name="WHO_Factsheet" /> पुनरावर्तन की दरें निम्न बनी हुई हैं और संयोजित दवाओं के प्रति कोई प्रतिरोध ज्ञात नहीं हुआ है।<ref name="WHO_Factsheet" /> कुष्ठरोग पर डब्ल्यूएचओ की सातवीं विशेषज्ञ समिति (सेवंथ डब्ल्यूएचओ एक्सपर्ट कमिटी ऑन लेप्रसी),<ref name="WHO_1998">{{cite web | title = Seventh WHO Expert Committee on Leprosy | work = WHO Technical Report Series 874 | publisher = WHO | year = 1998 | url = http://www.who.int/lep/resources/expert/en/index.html | accessdate = 2007-03-24 | archive-url = https://web.archive.org/web/20100929050425/http://www.who.int/lep/resources/expert/en/index.html | archive-date = 29 सितंबर 2010 | url-status = live }}</ref> ने 1997 में अपनी रिपोर्ट प्रस्तुत करते समय, ये निष्कर्ष दिया कि उपचार की एमबी (MB) अवधि—जो उस समय 24 माह थी— को “प्रभावोत्पादकता से कोई उल्लेखनीय समझौता किये बिना” सुरक्षित रूप से कम करके 12 माह किया जा सकता है। === वर्तमान सिफारिशें === * पॉसी-बैसीलरी कुष्ठरोग (त्वचा पर 1-5 घाव) 6 माह तक राइफैम्पिसिन (rifampicin) और डैप्सोन (dapsone) के साथ उपचार करें * मल्टी-बैसीलरी कुष्ठरोग (त्वचा पर >5 घाव) 12 माह तक राइफैपिसिन (rifampicin), क्लॉफैज़िमाइन (clofazimine) और डैप्सोन (dapsone) से उपचार करें === ऐतिहासिक उपचार === प्राचीन ग्रीक में यह रोग श्लीपद (elephantiasis graecorum) के नाम से जाना जाता था। [[बाइबिल]] (मैथ्यू 11,5) के अनुसार कुष्ठरोग को अलौकिक साधनों और हाथों को या इससे विकसित अवशेषों को दफना देने की पद्धति के द्वारा कुष्ठरोग का उपचार किया जा सकता है। सेंट गाइल्स, सेंट मार्टिन, सेंट मैक्सिलियन और सेंट रोमन इस पद्धति से जुड़े हुए थे। अनेक शासक भी इस पद्धति से जुड़े हुए थे: इनमें इंग्लैंड के रॉबर्ट प्रथम, एलिज़ाबेथ प्रथम, हेनरी तृतीय और [[चार्लेमन|शार्लेमैग्ने (Charlemagne)]] शामिल थे। विभिन्न कालों में रक्त को एक पेय-पदार्थ या स्नान के रूप में एक उपचार माना जाता था। कुंवारी स्रियों या बच्चों के रक्त को विशेष रूप से प्रभावी समझा जाता था। ऐसा प्रतीत होता है कि इस पद्धति का उदगम प्राचीन मिस्र निवासियों से हुआ, लेकिन चीन में भी इसका पालन किये जाने की जानकारी मिली है, जहां लोगों के रक्त के लिये उनकी हत्या कर दी गई थी। यह पद्धति 1790 में ''डी सेक्रेटिस नैचुरी (De Secretis Naturae)'' में कुत्ते के रक्त के प्रयोग का उल्लेख किये जाने तक जारी थी। पैरासेल्सस (Paracelsus) ने मेमने के रक्त के प्रयोग की अनुशंसा की और मृत शरीरों के रक्त का प्रयोग भी किया जाता था। पलाइनी (Pliny), एरेशियस ऑफ कैपाडोसिया (Areteus of Capadocia) तथा थियोडोरस (Theodorus) के अनुसार सांपों का प्रयोग भी किया जाता था। गॉशर (Gaucher) ने कोबरा के ज़हर से उपचार करने की अनुशंसा की. 1913 में, बॉइनेट (Boinet) ने मधुमक्खियों के डंक की बढ़ती हुई मात्रा को बढ़ाते हुए (4000 तक) परीक्षण किया। सांपों के स्थान पर कभी-कभी [[बिच्छू|बिच्छुओं]] और मेंढकों का प्रयोग किया जाता था। ''एनाबास (Anabas) '' (चढ़नेवाली मछली) के मल का भी परीक्षण किया गया। वैकल्पिक उपचारों में आर्सेनिक और हेलेबोर (hellebore) सहित जलन उत्पन्न करने वाले अन्य तत्वों के प्रयोग के साथ या उनके बिना दागना शामिल था। मध्य-काल में का वंध्यकरण (Castration) का पालन भी किया जाता था। ;चालमुगरा का तेल चालमुगरा (Chaulmoogra) का तेल कुष्ठरोग का एक पूर्व-आधुनिक उपचार था। एक भारतीय दन्तकथा के अनुसार [[श्रीराम]] को कुष्ठरोग हो गया था और कलव (''हाइड्नोकार्पस (Hydnocarpus)'' वंश की एक प्रजाति) वृक्ष के फल खिलाकर उनका उपचार किया गया। इसके बाद उसी फल से उन्होंने राजकुमारी पिया का उपचार किया और फिर इस जोड़े ने बनारस लौटकर अपनी इस खोज के बारे में दुनिया को बताया. भारत में इस तेल का प्रयोग लंबे समय से कुष्ठरोग और त्वचा की विभिन्न अवस्थाओं के उपचार के लिये एक आयुर्वेदिक दवा के रूप में किया जाता रहा है। इसका प्रयोग चीन और [[म्यान्मार|बर्मा]] में भी होता रहा है और बंगाल मेडिकल कॉलेज के एक प्रोफेसर फ्रेडरिक जॉन मॉट (Frederic John Mouat) ने पश्चिमी विश्व को इससे परिचित करवाया. उन्होंने कुष्ठरोग के दो मामलों में एक मौखिक और स्थानिक एजेंट के रूप में इस तेल का प्रयोग करने का प्रयास किया और 1854 में एक शोध-पत्र में उल्लेखनीय सुधार की जानकारी दी.<ref>चिकित्सा विज्ञान के भारतीय इतिहास</ref> इस शोध-पत्र ने थोड़ा भ्रम उत्पन्न कर दिया. मॉट (Mouat) ने सूचित किया कि यह तेल ''चालमुगरा ओडोराटा (Chaulmoogra odorata)'' वृक्ष का एक उत्पाद है, जिसका वर्णन 1815 में विलियम रॉक्सबर्ग (William Roxburgh), एक शल्य-चिकित्सक और प्रकृतिवादी, द्वारा किया गया था, जब वे कलकत्ता में [[ब्रिटिश ईस्ट इण्डिया कम्पनी|ईस्ट इंडिया कम्पनी]] के बॉटनिकल गार्डन में वनस्पतियों का सूचीकरण कर रहे थे। इस वृक्ष को ''गाइनोकार्डिया ओडोराटा (Gynocardia odorata)'' नाम से जाना जाता है। 19वीं सदी के शेष भाग में इस वृक्ष को ही इस तेल का स्रोत माना जाता रहा. 1901 में सर डेविड प्रेन (Sir David Prain) ने कलकत्ता बाज़ार और पेरिस और लंदन के औषधिकारों के सच्चे चालमुगरा बीजों की पहचान ''टारक्टोजीनस कुर्ज़ी (Taraktogenos kurzii)'' से प्राप्त होने वाले बीजों के रूप में की, जो की [[म्यान्मार|बर्मा]] और उत्तरी भारत में पाया जाता है। आयुर्वेदिक ग्रंथों में जिस तेल का उल्लेख है वह ''हाइड्नोकार्पस विगिताना (Hydnocarpus wightiana)'' वृक्ष से प्राप्त होता है, जिसे [[संस्कृत भाषा|संस्कृत]] में ''तुवकार'' और [[हिन्दी|हिंदी]] व [[फ़ारसी भाषा|फारसी]] में ''चालमुगरा'' कहा जाता है। पहला आन्त्रेतर प्रबंध मिस्र के चिकित्सक टॉर्टोलिस बे (Tortoulis Bey), सुल्तान हुसैन कामेल (Hussein Kamel) के व्यक्तिगत चिकित्सक, द्वारा दिया गया था। वे तपेदिक के लिये क्रियोसाइट के प्रत्युपयाजक इंजेक्शन का प्रयोग करते आ रहे थे और 1894 में उन्होंने [[मिस्र]] के एक 36-वर्षीय कॉप्ट, जो मौखिक उपचार को सह पाने में असमर्थ रहा था, में चालमुगरा के प्रत्युपयाजक इंजेक्शन का प्रबंध किया। 6 वर्षों और 584 इंजेक्शनों के बाद घोषित किया गया कि वह मरीज ठीक हो चुका था। इस तेल का एक प्रारंभिक वैज्ञानिक विश्लेषण 1904 में फ्रेडरिक बी. पॉवर (Frederick B. Power) द्वारा लंदन में किया गया। उन्होंने और उनके साथियों ने इन बीजों से एक नये असंतृप्त वसायुक्त-अम्ल को पृथक किया, जिसे उन्होंने ‘चालमुगरिक अम्ल (chaulmoogric acid)’ नाम दिया. उन्होंने दो निकट संबंद्ध प्रजातियों का भी परीक्षण किया: ''हाइड्नोकार्पस एन्थेल्मिंटिका (Hydnocarpus anthelmintica)'' और ''हाइड्नोकार्पस विग्टियाना (Hydnocarpus wightiana)'' . इन दो वृक्षों से उन्होंने चालमुगरिक अम्ल और एक निकट संबंद्ध यौगिक, हाइड्नोकार्पस अम्ल (hydnocarpus acid), दोनों को अलग किया। उन्होंने ''गाइनोकार्डिया ओडोराटा (Gynocardia odorata)'' का परीक्षण भी किया और पाया कि यह इनमें से कोई भी अम्ल उत्पन्न नहीं करता था। बाद में किये गये अनुसंधानों ने यह दर्शाया कि ‘टाराक्टोगेनॉस (taraktogenos)' (''हाइड्नोकार्पस कुर्ज़ी (Hydnocarpus kurzii)'') भी चालमुगरिक अम्ल उत्पन्न करता था। इस तेल के प्रयोग से जुड़ी एक अन्य समस्या इसके प्रबंध को लेकर है। मुंह से लिये जाने पर यह अत्यधिक मिचली उत्पन्न करता है। वस्ति से दिये जाने पर यह गुदा-द्वार के आस-पास छाले और दरारें उत्पन्न कर सकता है। इंजेक्शन के द्वारा दिये जाने पर इस दवा ने बुखार और अन्य स्थानीय प्रतिक्रियाएं उत्पन्न कीं. इन कठिनाइयों के बावजूद 1916 में राल्फ हॉपकिन्स (Ralph Hopkins), जो कि कारविल (Carville), [[लुईज़ियाना|लुइज़ियाना (Louisiana)]] स्थित लुइज़ियाना लेपर होम (Louisiana Leper Home) के उपस्थायी चिकित्सक थे, द्वारा 170 मरीजों की एक श्रृंखला का वर्णन किया गया। उन्होंने मरीजों को दो समूहों में विभाजित किया- 'आरंभिक' और 'विकसित'. विकसित मामलों में, अधिकतम एक चौथाई ने अपनी स्थिति में कोई सुधार या रोक प्रदर्शित की. आरंभिक मामलों में, उन्होंने 45% मरीजों में बीमारी की स्थिति में सुधार या स्थिरता की जानकारी दी; 4% की मृत्यु हो गई और 8% की मृत्यु हो गई। शेष मरीज होम से फरार हो गए जो कि संभवतः उन्नत स्थिति में थे। इस एजेंट की स्पष्ट उपयोगिता को देखते हुए, इसके उन्नत सूत्रीकरण की खोज शुरु हुई. विक्टर हेज़र (Victor Heiser), [[मनीला]] में कुष्ठरोगियों के लिये बने सैन लैज़ारो अस्पताल के व्यवस्थापक चिकित्सक मनीला और एलिडोरो मर्केडोथो के लिये मुख्य संगरोध अधिकारी और स्वास्थ्य निदेशक, ने चालमुगरा और रेसॉर्सिन के नुस्खे में कपूर को शामिल करने का निर्णय लिया, जो कि जर्मनी में मर्क एन्ड कम्पनी (Merck and Company) द्वारा विशिष्ट तौर पर मौखिक रूप से दिया जाता था, जिनसे हेज़र ने संपर्क किया था। उन्होंने पाया कि यह नया यौगिक किसी भी प्रकार की मिचली, जिससे पूर्व में तैयार दवाओं को लेने में समस्या उत्पन्न हो रही थी, के बिना तुरंत अवशोषित कर लिया जाता था। इसके बाद 1913 में हेज़र (Heiser) और मर्सेडो (Mercado) ने दो मरीजों, जो कि इस बीमारी से उबर चुके लगते थे, में इंजेक्शन के द्वारा इस तेल का निरीक्षण किया। चूंकि इस उपचार का परीक्षण अन्य पदार्थों के साथ किया गया था, अतः इसके परिणाम स्पष्ट नहीं थे। इसके बाद पुनः दो मरीजों का उपचार इसी तेल के साथ इंजेक्शन के द्वारा और किसी भी अन्य उपचार के बिना किया गया और पुनः ऐसा प्रतीत हुआ कि वे इस बीमारी से ठीक हो गए हैं। अगले वर्ष हेज़र (Heiser) ने और 12 मरीजों का निरीक्षण किया, लेकिन इसके मिश्रित परिणाम प्राप्त हुए. इस तेल के कम विषैले रूपों की खोज भी की गई जिन्हें इंजेक्शन के द्वारा शरीर में प्रविष्ट किया जा सके. इन तेलों के रासायनिक यौगिकों का वर्णन करने वाले शोध-पत्रों की एक श्रृंखला 1920 और 1922 के बीच प्रकाशित की गई। ये एलिस बॉल (Alice Ball) के कार्य पर आधारित रहे हो सकते हैं- इस बिंदु पर रिकॉर्ड स्पष्ट नहीं है और 1916 में ही सुश्री बॉल की मृत्यु हो गई। 1921 में इन रासायनिक यौगिकों के परीक्षण किये गये और वे उपयोगी परिणाम देने वाले प्रतीत हुए. इन प्रयासों के पूर्व अन्य लोगों द्वारा भी प्रयास किये गये थे। मर्क ऑफ डार्म्सटाड (Merck of Darmstadt) ने 1891 में सोडियम लवणों का एक संस्करण उत्पन्न किया था। उन्होंने इस सोडियम का नाम गाइनोकार्डेट (gynocardate) रखा, जिसका कारण यह भ्रांत धारणा थी कि इस तेल का मूल-स्रोत ''गाइनोकार्डिया ओडोराटा (Gynocardia odorata)'' था। 1908 में बेयर ने ‘एंटिलेप्रोल (Antileprol)’ नाम से इन रासायनिक यौगिकों के एक वाणिज्यिक संस्करण का विपणन किया। इसकी आपूर्ति को सुनिश्चित करने के लिये एजेंट जोसेफ रॉक (Joseph Rock), कॉलेज ऑफ हवाई में सुव्यवस्थित वनस्पति-शास्र (Systematic Botany) के प्रोफेसर, ने बर्मा की यात्रा की. स्थानीय ग्रामीणों ने बीज में पेड़ों के एक झुरमुट की स्थापना की, जिसका प्रयोग करके उन्होंने 1921 और 1922 के बीच [[ओहाऊ|ओहाउ]] द्वीप, हवाई (Island of Oahu, Hawaii) में 2,980 वृक्ष लगाए. इसके आम दुष्प्रभावों के बावजूद यह तेल 1940 के दशक में सल्फोन (sulfone) के आगमत तक लोकप्रिय बना रहा. इसकी प्रभावोत्पादकता के बारे में बहस तब तक जारी रही, जब तक कि इसका प्रयोग बंद नहीं कर दिया गया। [[चित्र:Multidrug therapy (MDT) for the treatment of leprosy.jpg|thumb|बहुऔषध रोगी पैक और फफोले]] प्रोमिन (Promin) को पहली बार 1908 में फ्रीलबर्ग इम ब्रिस्गाउ (Freiburg im Breisgau), जर्मनी स्थित एल्बर्ट-लुडविग यूनिवर्सिटी (Albert-Ludwig University) में रसायन-शास्र के प्रोफेसर एमिल फ्रोम (Emil Fromm) द्वारा संश्लेषित किया गया। उसकी स्ट्रेप्टोकॉल-विरोधी गतिविधि की पड़ताल ग्लैडस्टोन बटल (Gladstone Buttle) द्वारा बोरो वेलकम (Burroughs Wellcome) में और अर्नेस्ट फॉर्नियु (Ernest Fourneau) द्वारा इंस्टीट्युट पास्टियुर (Institut Pasteur) में की गई थी। 1940 के दशक में प्रोमिन (promin) का विकास होने तक, कुष्ठरोग के लिये कोई प्रभावी उपचार उपलब्ध नहीं था। प्रोमिन की प्रभावोत्पादकता की खोज सबसे पहले गाय हेनरी फैगेट (Guy Henry Faget) और उनके सह-कर्मियों द्वारा 1943 में कारविल, लुइज़ियाना में की गई। 1950 के दशक में, डॉ॰ आर. जी. कॉकार्न ने कारविल में डैप्सोन (dapsone) को प्रस्तुत किया। यह ''एम. लेप्री (M. leprae)'' के विरुद्ध जीवाणुओं की वृद्धि को सीमित करके संक्रमण को रोक पाने में कमजोर है और मरीजों के लिये अनिश्चित काल तक इस दवा का सेवन करते रहना आवश्यक माना गया। जब केवल डैप्सोन (dapsone) का प्रयोग किया जाता था, तो ''एम. लेप्री (M. leprae)'' की जनसंख्या ने बहुत जल्दी ही इस एंटीबायोटिक प्रतिरोध विकसित कर लिया; 1960 के दशक तक, विश्व की एक मात्र ज्ञात कुष्ठरोग-विरोधी दवा वास्तव में अनुपयोगी हो चुकी थी। कुष्ठरोग-विरोधी अधिक प्रभावी दवाओं की खोज के परिणामस्वरूप 1960 के दशक और और 1970 के दशक में क्लोफैज़िमाइन (clofazimine) और राइफैम्पिसिन (rifampicinin) का प्रयोग शुरु हुआ।<ref name="Rees_1970">{{cite journal | author= Rees RJ, Pearson JM, Waters MF |title=Experimental and clinical studies on rifampicin in treatment of leprosy | journal=Br Med J |year=1970 | pages=89–92 | volume= 688 | issue= 1 | pmid=4903972 | doi= 10.1136/bmj.1.5688.89 | pmc= 1699176}}</ref> इसके बाद, भारतीय वैज्ञानिक शांताराम यावलकर (Shantaram Yawalkar) और उनके सहयोगियों ने राइफैम्पिसिन (rifampicin) और डैप्सोन (dapsone) का प्रयोग करके एक संयुक्त उपचार का सूत्रण किया, जिसका लक्ष्य जीवाण्विक प्रतिरोध को घटाना था।<ref name="Yawalkar_1982">{{cite journal | author=Yawalkar SJ, McDougall AC, Languillon J, Ghosh S, Hajra SK, Opromolla DV, Tonello CJ | title=Once-monthly rifampicin plus daily dapsone in initial treatment of lepromatous leprosy | journal=Lancet | year=1982 | pages=1199–1202 | volume= 8283 | issue= 1 |pmid = 6122970 | doi=10.1016/S0140-6736(82)92334-0}}</ref> इस संयुक्त उपचार के प्रारंभिक परीक्षण 1970 के दशक में [[माल्टा]] में किये गये। 1981 में डब्ल्यूएचओ (WHO) की विशेषज्ञ समिति द्वारा पहली बार इन तीनों दवाओं के संयोजन से निर्मित बहु-औषधि उपचार (मल्टीड्रग थेरपी) (एमडीटी) (MDT) की अनुशंसा की गई। इन तीन कुष्ठरोग-विरोधी दवाओं का प्रयोग आज भी मानक (एमडीटी) (MDT) पथ्यों में किया जाता है। प्रतिरोध विकसित हो जाने के जोखिम के कारण इनमें से किसी को भी अकेले प्रयोग नहीं किया जाता. यह उपचार काफी महंगा था और अधिकांश स्थानिक देशों में इसे शीघ्र नहीं अपनाया गया। 1985 में, कुष्ठरोग को अभी भी 122 देशों में एक सार्वजनिक स्वास्थ्य समस्या माना जाता था। 1991 में जेनेवा (Geneva) में आयोजित 44वीं विश्व स्वास्थ्य सभा (वर्ल्ड हेल्थ असेम्बली) (डब्ल्यूएचए) (WHA) ने वर्ष 2000 तक एक सार्वजनिक-स्वास्थ्य समस्या के रूप में कुष्ठरोग को मिटाने का एक प्रस्ताव पारित किया-जिसे इस बीमारी के वैश्विक प्रसार को 1 मामला प्रति 10,000 से भी कम मात्रा तक घटाने के रूप में परिभाषित किया गया था। इस सभा में, इसके सदस्य राज्यों द्वारा विश्व स्वास्थ्य संगठन (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन) (डब्ल्यूएचओ) (WHO) को एक निर्मूलन रणनीति विकसित करने का जनादेश दिया गया, जो कि एमडीटी (MDT) की भौगोलिक कार्यक्षेत्र-व्याप्ति बढ़ाने और मरीजों तक उपचार की अभिगम्यता को बढ़ाने पर आधारित था। == महामारी विज्ञान == [[चित्र:Lepra 2003.png|thumb|कुष्ठरोग के विश्व वितरण, 2003.]] [[चित्र:Leprosy world map - DALY - WHO2002.svg|thumb|2002 में विकलांगता से समायोजित जीवन के लिए सालभर का कुष्ठरोग 100.000 निवासी.<ref>[130]</ref>[131][132][133][134][135][136][137][138][139][140][141][142][143]]] ऐसा अनुमान है कि कुष्ठरोग के कारण वैश्विक स्तर पर दो से तीन मिलियन लोग स्थायी रूप से विकलांग हो गए हैं।<ref name="WHO_1995" /> भारत में इसके मामलों की संख्या सबसे ज्यादा है, जिसके बाद [[ब्राज़ील]] दूसरे और [[म्यान्मार|बर्मा]] तीसरे स्थान पर है। ऐसा अनुमान है कि 1999 में पूरे विश्व में हैन्सेन के रोग की घटनाओं की संख्या 640,000 थी। वर्ष 2000 में, 738,284 मामलों की पहचान हुई.<ref name="Hawaii">[http://www.cbsnews.com/stories/2003/03/22/health/main545392.shtml लेपेर कॉलोनी का एक अंतिम दिन.] {{Webarchive|url=https://web.archive.org/web/20101003090806/http://www.cbsnews.com/stories/2003/03/22/health/main545392.shtml |date=3 अक्तूबर 2010 }} सीबीसी (CBC) समाचार. 22 मार्च 2003.</ref> वर्ष 2000 में, [[विश्व स्वास्थ्य संगठन|विश्व स्वास्थ्य संगठन (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन)]] (डब्ल्यूएचओ) (WHO) ने 91 ऐसे देशों को सूचीबद्ध किया, जिनमें हैन्सेन का रोग स्थानिक है। कुल मामलों में से 70% भारत, म्यांमार और [[नेपाल]] से थे। विश्व-भर से मिलने वाले कुष्ठरोग के मामलों में 50% से अधिक केवल भारत में प्राप्त होते हैं।<ref>[http://southasia.oneworld.net/todaysheadlines/surgery-grants-for-leprosy-sufferers-in-india भारत में कुष्ठरोग पीड़ित के लिए अनुदान सर्जरी.] {{Webarchive|url=https://web.archive.org/web/20120229102232/http://southasia.oneworld.net/todaysheadlines/surgery-grants-for-leprosy-sufferers-in-india |date=29 फ़रवरी 2012 }} टाइम्स ऑफ इंडिया. 2 फ़रवरी 2009.</ref> वर्ष 2002 में, वैश्विक स्तर पर 763,917 नए मामलों की पहचान हुई और उसी वर्ष डब्ल्यूएचओ (WHO) ने [[ब्राज़ील]], [[मेडागास्कर]], [[मोज़ाम्बिक]], [[तंज़ानिया]] और [[नेपाल]] को हैन्सेन के कुल मामलों में से 90% मामलों की उपस्थिति वाले देशों के रूप में सूचीबद्ध किया। डब्ल्यूएचओ (WHO) से प्राप्त हालिया आंकड़ों के अनुसार, 2003 से 2004 तक पूरे विश्व में पहचाने गए मामलों की संख्या में लगभग 107,000 मामलों (या 21%) की कमी आई है। गिरावट की ओर यह झुकाव पिछले तीन वर्षों से लगातार जारी रहा है। इसके अतिरिक्त, वैश्विक स्तर पर एचडी (HD) का पंजीकृत प्रसार 286,063 मामलों पर था; 2004 के दौरान 407,791 नए मामलों की पहचान हुई. संयुक्त राज्य अमरीका में, हैन्सेन के रोग का निरीक्षण सेंटर्स फॉर डिसीज़ कण्ट्रोल एण्ड प्रिवेंशन (Centers for Disease Control and Prevention) (सीडीसी) (CDC) द्वारा किया जाता है, जिसने वर्ष 2002 में कुल 92 मामले प्राप्त होने की जानकारी दी.<ref>[http://www.cdc.gov/nczved/dfbmd/disease_listing/leprosy_ti.html सीडीसी (CDC) कुष्ठरोग तथ्य पत्रक] {{Webarchive|url=https://web.archive.org/web/20090831095632/http://www.cdc.gov/nczved/dfbmd/disease_listing/leprosy_ti.html |date=31 अगस्त 2009 }}.</ref> हालांकि वैश्विक स्तर पर मामलों की संख्या में गिरावट जारी है, लेकिन कुछ विशेष क्षेत्रों जैसे [[ब्राज़ील]], [[दक्षिण एशिया]] (भारत, [[नेपाल]]), अफ्रीका के कुछ भागों ([[तंज़ानिया]], [[मेडागास्कर]], [[मोज़ाम्बिक]]) और पश्चिमी प्रशांत में उच्च प्रसार बना हुआ है। === जोखिम समूह === अपर्याप्त बिस्तरों, दूषित जल और अपर्याप्त भोजन, जैसी बुरी स्थितियों या प्रतिरोधी कार्य को घटाने वाली अन्य बीमारियों (जैसे [[एचआईवी|एचआईवी (HIV)]]) वाले स्थानिक क्षेत्रों में जी रहे लोगों के लिये जोखिम सबसे ज्यादा होता है। हालिया शोधों का सुझाव है कि कोशिका की मध्यस्थता से प्राप्त होने वाले प्रतिरोध में एक कमी है, जिसकी वजह से इस बीमारी के प्रति अतिसंवेदनशीलता उत्पन्न होती है। विश्व की कुल जनसंख्या के दस प्रतिशत से भी कम लोग ही इस बीमारी को ग्रहण कर पाने में सक्षम हैं।<ref name="What is Leprosy">[http://www.leprosy.ca/Page.aspx?pid=245 कुष्ठरोग क्या है?] {{Webarchive|url=https://web.archive.org/web/20101215045130/http://www.leprosy.ca/Page.aspx?pid=245 |date=15 दिसंबर 2010 }}, कुष्ठरोग मिशन कनाडा</ref> [[डीऑक्सीराइबोन्यूक्लिक अम्ल|डीएनए (DNA)]] का जो क्षेत्र इस परिवर्तनीयता के लिये ज़िम्मेदार है, वही पार्किंसन्स रोग में भी शामिल होता है,{{Citation needed|date=July 2008}} जिससे इस वर्तमान अनुमान को बल मिलता है कि जैव-रासायनिक स्तर पर ये दो विकार किसी न किसी प्रकार आपस में जुड़े हुए हो सकते हैं। इसके अतिरिक्त, पुरुषों में कुष्ठरोग होने की संभावना महिलाओं की तुलना में दोगुनी होती है।{{Citation needed|date= जनवरी 2009}} द लेप्रसी मिशन, कनाडा (The Leprosy Mission Canada) के अनुसार अधिकांश लोग –लगभग 95% जनसंख्या –प्राकृतिक रूप से प्रतिरक्षित होते हैं।<ref name="What is Leprosy" /> === बीमारी का बोझ === यद्यपि संचरण के एक मापन के रूप में वार्षिक विस्तार—प्रतिवर्ष मिलने वाले कुष्ठरोग के नए मामलों की संख्या—महत्वपूर्ण है, लेकिन कुष्ठरोग के लंबे उष्मायन काल, बीमारी की शुरुआत के बाद इसके निदान में होने वाली देर और बहुत शुरुआती चरणों में कुष्ठरोग की पहचान कर पाने के लिये प्रयोगशाला उपकरणों की कमी के कारण कुष्ठरोग का मापन कर पाना कठिन है। इसके बजाय, पंजीकृत प्रसार का प्रयोग किया जाता है। पंजीकृत प्रसार इस बीमारी के बोझ का एक उपयोगी प्रतिनिधि सूचक है क्योंकि यह समय के किसी भी बिंदु पर इस बीमारी के साथ निदान किये गये और एमडीटी (MDT) का उपचार प्राप्त कर रहे कुष्ठरोग के सक्रिय मामलों की संख्या दर्शाता है। पुनः प्रसार की दर को समय के किसी भी बिंदु पर जिस जनसंख्या में मामले प्राप्त हुए हों, उसमें एमडीटी (MDT) के लिये पंजीकृत मामलों की संख्या के रूप में परिभाषित किया जाता है।<ref name="WHO_1985">{{cite journal |author= World Health Organization.|title=Epidemiology of leprosy in relation to control. Report of a WHO Study Group |journal=World Health Organ Tech Rep Ser |volume=716 |issue= |pages=1–60 |year=1985 |pmid=3925646 |isbn= 9241207167 |publisher= World Health Organization |location= Geneva |oclc= 12095109}}</ref> नए मामलो की पहचान इस बीमारी का एक अन्य सूचक है, जिसकी जानकारी देशों द्वारा सामान्यतः एक वार्षिक आधार पर दी जाती है। उस वर्ष बीमारी की शुरुआत के रूप में निदान किये गये मामलों की संख्या (वास्तविक विस्तार) और पिछले वर्ष शुरु हुए मामलों का एक बड़ा अनुपात (जिसे पहचाने न गए मामलों का संचित प्रसार कहा जाता है) इसमें शामिल होता है। स्थानिक देश भी पहचान के समय स्थापित विकलांगता के नए मामलों की संख्या की जानकारी देते हैं, जो कि संचित प्रसार का एक सूचक है। इस बीमारी की शुरुआत के समय का निर्धारण कर पाना सामान्यतः अविश्वसनीय होता है, बहुत श्रम-साध्य होता है और शायद ही कभी इन आंकड़ों की रिकॉर्डिंग में किया जाता है। === वैश्विक स्थिति === {| id="tableWorldwide" class="wikitable" style="margin:1em auto" |+ सारणी 1: 2006 के प्रारंभ में प्रसार और नए मामलों की पहचान का झुकाव 2001-2005, यूरोप के अतिरिक्त |- ! rowspan="2"|क्षेत्र ! पंजीकृत प्रसार <br /> (दर/10,000 जन.) ! colspan="5"|वर्ष के दौरान नए मामलों की पहचान |- ! 2006 का प्रारंभ ! 2001 ! 2002 ! 2003 ! 2004 ! 2005 |- ! style="text-align:left"| अफ्रीका | 40,830 (0.56) | 39,612 | 48,248 | 47,006 | 46,918 | 42,814 |- ! style="text-align:left"| [[महाअमेरिका|अमरीका]] | 32,904 (0.39) | 42,830 | 39,939 | 52,435 | 52,662 | 41,780 |- ! style="text-align:left"| दक्षिण-पूर्वी एशिया | 133,422 (0.81) | 668,658 | 520,632 | 405,147 | 298,603 | 201,635 |- ! style="text-align:left"| पूर्वी भूमध्यसागरीय | 4,024 (0.09) | 4,758 | 4,665 | 3,940 | 3,392 | 3,133 |- ! style="text-align:left"| पश्चिमी प्रशांत | 8,646 (0.05) | 7,404 | 7,154 | 6,190 | 6,216 | 7,137 |- class="tfoot" style="background:#F5FFFC" ! style="text-align:left"| कुल | 219,826 | 763,262 | 620,638 | 514,718 | 407,791 | 296,499 |} {| id="tableToReachElimination" class="wikitable" style="margin:1em auto" |+ सारणी 2: प्रसार और पहचान, वे देश जिन्हें अभी भी निर्मूलन तक पहुंचना है |- ! rowspan="2"|देश ! colspan="3"|पंजीकृत प्रसार <br /> (दर/10,000 जन.) ! colspan="3"|नए मामलों की पहचान <br /> (दर/100,000 जन.) |- ! 2004 का प्रारंभ ! 2005 का प्रारंभ ! 2006 का प्रारंभ ! 2003 के दौरान ! 2004 के दौरान ! 2005 के दौरान |- ! style="text-align:left"| {{BRA}} | 79,908 (4.6) | 30,693 (1.7) | 27,313 (1.5) | 49,206 (28.6) | 49,384 (26.9) | 38,410 (20.6) |- ! style="text-align:left"| {{MOZ}} | 6,810 (3.4) | 4,692 (2.4) | 4,889 (2.5) | 5,907 (29.4) | 4,266 (22.0) | 5,371 (27.1) |- ! style="text-align:left"| {{NPL}} | 7,549 (3.1) | 4,699 (1.8) | 4,921 (1.8) | 8,046 (32.9) | 6,958 (26.2) | 6,150 (22.7) |- ! style="text-align:left"| [[तंज़ानिया]] | 5,420 (1.6) | 4,777 (1.3) | 4,190 (1.1) | 5,279 (15.4) | 5,190 (13.8) | 4,237 (11.1) |- class="tfoot" style="background:#F5FFFC" ! style="text-align:left"| कुल | एनए (NA) | एनए (NA) | एनए (NA) | एनए (NA) | एनए (NA) | एनए (NA) |} 2006 में 115 देशों और क्षेत्रों द्वारा [[विश्व स्वास्थ्य संगठन|डब्ल्यूएचओ (WHO)]] को दी गई जानकारी और वीकली एपिडेमियोलॉजिकल रिकार्ड (Weekly Epidemiological Record) में प्रकाशित खबर के अनुसार उस वर्ष के प्रारंभ में कुष्ठरोग का वैश्विक पंजीकृत प्रसार 219,826 मामलों पर था।<ref name="WHO_2006">{{cite journal | author = | title = Global leprosy situation, 2006 | journal = Weekly Epidemiological Record | year = 2006 | volume = 81 | number = 32 | pages = 309–16 | month = August | pmid = 16903018 | url = http://www.who.int/lep/resources/wer8132.pdf | format = PDF | issue = 32 | access-date = 30 अगस्त 2010 | archive-url = https://web.archive.org/web/20110809045851/http://www.who.int/lep/resources/wer8132.pdf | archive-date = 9 अगस्त 2011 | url-status = live }}</ref> पिछले वर्ष (2005- वह अंतिम वर्ष, जिसके लिये देशों की पूरी जानकारी उपलब्ध थी) के दौरान पहचाने गए नए मामलों की संख्या 296,499 थी। इस वार्षिक पहचान की संख्या उस वर्ष के अंत में इसके प्रसार से अधिक होने का कारण इस तथ्य के द्वारा समझाया जा सकता है कि नए मामलों के एक भाग ने एक वर्ष के भीतर अपना उपचार पूरा कर लिया और अतः वे अब रजिस्टर में नहीं रहे. वैश्विक स्तर पर पहचाने जाने वाले नए मामलों की संख्या में गिरावट जारी है और 2005 में इसमें पिछले वर्ष की तुलना में 110,000 मामलों (27%) की कमी आई. सारणी 1 दर्शाती है कि 2001 से वैश्विक वार्षिक पहचान दर में गिरावट जारी है। अफ्रीका क्षेत्र में 2004 की तुलना में नए मामलों की संख्या में 8.7% की गिरावट देखी गई। अमरीकियों के लिये तुलनीय आंकड़े 20.1%, दक्षिण-पूर्व एशिया के लिये 32% और पूर्वी भूमध्यसागरीय क्षेत्र के लिये 7.6% थे। हालांकि, पश्चिमी प्रशांत क्षेत्र ने इसी अवधि में 14.8% की वृद्धि दर्शाई. सारणी 2 उन चार प्रमुख देशों में कुष्ठरोग की स्थिति दर्शाती है, जो अभी भी राष्ट्रीय स्तर पर निर्मूलन लक्ष्य को प्राप्त नहीं कर सके हैं। इस बात पर ध्यान दिया जाना चाहिये कि: क) निर्मूलन को प्रति 10,000 जनसंख्या में 1 से कम मामलों के प्रसार के रूप में परिभाषित किया जाता है; ख) मेडागास्कर ने सितंबर 2006 में राष्ट्रीय स्तर पर निर्मूलन का लक्ष्य प्राप्त कर लिया; ग) नेपाल में पहचाने गए मामलों की संख्या मध्य-नवंबर 2004 से मध्य-नवंबर 2005 की जानकारी पर आधारित है; और घ) डी. आर. कांगो (D.R. Congo) ने 2008 में आधिकारिक रूप से डब्ल्यूएचओ (WHO) को यह जानकारी दी कि राष्ट्रीय स्तर पर उसने 2007 के अंत में निर्मूलन का लक्ष्य हासिल कर लिया था। {{Clear}} ==== चीन के जनवादी गणतंत्र में वर्तमान स्थिति ==== {{Unreferenced section|date=March 2010}} चीन के जनवादी गणतंत्र (पीपल्स रिपब्लिक ऑफ़ चाइना) में कुष्ठरोग से उबर चुके ऐसे अनेक मरीज हैं, जिन्हें शेष समाज से पृथक कर दिया गया था। 1950 के दशक में चीन की साम्यवादी सरकार ने इस बीमारी से उबर चुके लोगों के लिये दूरस्थ ग्रामीण क्षेत्रों में "उबर चुके ग्रामों (रिकवर्ड विलेज्स)" की स्थापना की. हालांकि बहु-औषधि उपचार के आगमन साथ ही अब कुष्ठरोग का इलाज संभव है, लेकिन ये ग्रामीण वहीं बसे हुए हैं क्योंकि बाहरी विश्व द्वारा उन पर इस बीमारी का कलंक लगा दिया गया है। चीन में जॉय इन एक्शन (Joy in Action) जैसे स्वास्थ्य एनजीओ (NGO) उभरे हैं, जो विशेष रूप से इन “उबर चुके ग्रामों” की स्थिति सुधारने पर ध्यान केंद्रित करते हैं। == इतिहास == === शब्द व्युत्पत्ति === कुष्ठरोग के लिये अंग्रेजी भाषा में प्रयुक्त ''लेप्रसी (Leprosy)'' शब्द प्राचीन ग्रीक भाषा के शब्द λέπρα [léprā], "एक बीमारी, जो त्वचा को छिलकेदार बना देती है”, से निर्मित है, जो कि स्वयं λέπω [lépō], "छीलना, निकालना " का एक संज्ञात्मक व्युत्पन्न है। यह शब्द लैटिन और प्राचीन फ्रेंच भाषा से होता हुआ अंग्रेजी भाषा में आया। अंग्रेजी में इसका पहला प्रमाणित प्रयोग ''एन्क्रीन विसे (Ancrene Wisse)'', 13वीं सदी में ननों के लिये बनी एक नियमपुस्तिका में है ("मॉयसेसेस हॉन्ड..बिसेम्डे ओ पे स्पाइटेल ऊएल एंड लेप्रुस” (("Moyseses hond..bisemde o þe spitel uuel &amp; þuhte lepruse"). ''द मिडिल इंग्लिश डिक्शनरी'', एस.वी., “लेप्रस” (''The Middle English Dictionary'', s.v., "leprous"). एक मोटे तौर पर समकालीन प्रयोग ''सेंट ग्रेगरी के वार्तालाप (Dialogues of Saint Gregory)'' एंग्लो-नॉर्मन में साक्ष्यांकित है, "एस्मॉन्डेज़ आई सॉन्ट लि लीप्रस (Esmondez i sont li lieprous)" (''एंग्लो-नॉर्मन शब्दकोश'', एस.वी., “लेप्रस”) (''Anglo-Norman Dictionary'', s.v., "leprus"). ऐतिहासिक रूप से, हैन्सेन के रोग से ग्रस्त लोगों के ''कुष्ठरोगी (lepers)'' कहा जाता रहा है; हालांकि, कुष्ठरोग के मरीजों की घट रही संख्या और इस शब्दावली के निन्दात्मक संकेतार्थ के कारण यह शब्दावली प्रयोग से बाहर होती जा रही है।{{Citation needed|date=May 2010}} मरीजों पर लगने वाले कलंक के कारण, कुछ लोग “कुष्ठरोग (leprosy)” शब्द के प्रयोग को वरीयता नहीं देते, हालांकि यू. एस. सेंटर्स फॉर डिसीज़ कंट्रोल एंड प्रिवेंशन (U.S. Centers for Disease Control and Prevention) तथा विश्व स्वास्थ्य संगठन (वर्ल्ड हेल्थ ऑर्गनाइज़ेशन) द्वारा इसी शब्द का प्रयोग किया जाता है।{{Citation needed|date=May 2010}} ऐतिहासिक रूप से, हिब्रू बाइबिल से मिली ''ज़ार्थ (Tzaraath)'' शब्दावली का अनुवाद, गलती से, आमतौर पर लेप्रसी (leprosy) के रूप में किया जाता था, हालांकि ज़ार्थ (Tzaraath) के लक्षण कुष्ठरोग के साथ पूरी तरह संगत नहीं थे और इसके बजाय इसका प्रयोग अनेक प्रकार के विकारों का उल्लेख करने के लिये किया जाता था, जो कि हैन्सेन के रोग से अलग थे।<ref>आर्टस्क्रोल तनाख, 6</ref> लेप्रसी (leprosy) शब्द के उल्लेख का पहला रिकॉर्ड लेविटिकस 13:2 (Leviticus 13:2) में मिलता है - "जब किसी पुरुष के मांस की त्वचा में, कोई उभार, कोई पपड़ी, या कोई चमकीला दाग़ होगा और मांस की त्वचा में यह कुष्ठरोग (leprosy) की महामारी के समान होगा; तो उसे पुजारी आरोन (Aaron the priest) के पास या उनके पुजारी पुत्रों में से किसी एक के पास तक लाया जाएगा." बाइबिल में भी सीरियाई नामन (Naaman) की एक प्रसिद्ध कथा है, “सीरिया के राजा का कप्तान (कैप्टन ऑफ़ द होस्ट ऑफ़ द किंग ऑफ़ सीरिया)" (2 किंग्ज़ 5:1) (2 Kings 5:1), जो त्वचा की यह और भीषण बीमारी से ग्रस्त था। विशिष्ट रूप से, डर्मेटोफाइट (dermatophyte) कवक ''ट्राइकोफिटॉन वायोलीसम (Trichophyton violaceum)'' के कारण टीनिया कैपिटिस (tinea capitis) (सिर की त्वचा का [[फफूंद|कवकीय]] संक्रमण) और शरीर के अन्य भागों में होने वाले संबंधित संक्रमण वर्तमान में पूरे मध्य-पूर्व में और उत्तरी अफ्रीका में अत्यधिक हैं और शायद वे बाइबिल के समय भी बहुत आम रहे होंगे. इसी प्रकार, ऐसा प्रतीत होता है कि कुरूप बना देने वाला त्वचा-रोग फेवस (favus), ''ट्राइकोफिटॉन स्कोएन्लेनी (Trichophyton schoenleinii)'', आधुनिक दवाओं के आगम से पूर्व पूरे यूरेशिया और अफ्रीका में आम था। तीव्र फेवस (favus) और इसी प्रकार की अन्य कवकीय बीमारियों से ग्रस्त (और संभवतः वे भी, जो तीव्र सोरियासिस (psoriasis) और अन्य बीमारियों, जो सूक्ष्मजीवों के कारण नहीं होतीं, से ग्रस्त थे) लोगों को यूरोप में 17वीं शताब्दी तक कुष्ठरोग से ग्रस्त के रूप में ही वर्गीकृत किया जाता था।<ref name="Kane_1997">{{cite book | author = Kane J, Summerbell RC, Sigler L, Krajden S, Land G | title = Laboratory Handbook of Dermatophytes: A clinical guide and laboratory manual of dermatophytes and other filamentous fungi from skin, hair and nails | publisher = Star Publishers (Belmont, CA)|year = 1997|isbn = 0898631572|oclc = 37116438}}</ref> यह 1667 में जैन डी ब्रे (Jan de Bray) द्वारा हार्लेम में ''द रेजेंट्स ऑफ द लेपर हॉस्पिटल (The Regents of the Leper Hospital)'' में प्रदर्शित एक चित्र में स्पष्ट रूप से दर्शाया गया है (फ़्रांस हाल्स संग्रहालय, हार्लेम, नीदरलैंड्स) (Frans Hals Museum, Haarlem, the Netherlands), जहां एक स्पष्ट रूप से सिर की त्वचा में हुए संक्रमण, जो कि लगभग निश्चित रूप से कवक के कारण हुआ है, से ग्रस्त एक युवा डच पुरुष का उपचार भी कुष्ठरोग से ग्रस्त लोगों के लिये बने एक धर्मार्थ चिकित्सालय के तीन अधिकारियों द्वारा ही किया जा रहा है।{{Citation needed|date= जनवरी 2009}} 19वीं सदी के मध्य काल, जब चिकित्सीय निदान के लिये त्वचा के सूक्ष्मदर्शीय परीक्षण का पहली बार विकास हुआ, से पूर्व तक, “लेप्रसी (leprosy)" शब्द के प्रयोग को शायद ही हैन्सेन के रोग के साथ उतने विश्वसनीय रूप से जोड़ा जा सकता है, जैसा कि इसे हम आज समझते हैं।{{Citation needed|date= जनवरी 2009}} === कारणात्मक जीव की पहचान === [[चित्र:Gerhard Armauer Hansen.jpg|thumb|जी.एच.ए. हंसेन, एम्. लेप्राए का आविष्कारक]] 17वीं सदी की समाप्ति के बाद, पश्चिमी यूरोप में केवल [[नॉर्वे]] और [[आइसलैंड]] ही ऐसे देश थे, जिनमें कुष्ठरोग के गंभीर समस्या थी। 1830 के दशक के दौरान, नॉर्वे में कुष्ठरोगियों की संख्या में तेज़ी से वृद्धि हुई, जिससे इस स्थिति के संबंध में चिकित्सीय शोध भी बढ़ा और यह बीमारी एक राजनैतिक मुद्दा बन गई। 1854 में नॉर्वे ने कुष्ठरोग के लिये एक चिकित्सीय अधीक्षक की नियुक्ति की और 1856 में कुष्ठरोगियों के लिये एक राष्ट्रीय रजिस्टर की स्थापना की, जो कि पूरे विश्व में मरीजों का पहला राष्ट्रीय रजिस्टर था।<ref>{{Cite web|title=The Leprosy Archives in Bergen, Norway|url=http://digitalarkivet.uib.no/lepra-eng/intro.htm|accessdate=2009-05-30|archive-url=https://web.archive.org/web/20090823061111/http://digitalarkivet.uib.no/lepra-eng/intro.htm|archive-date=23 अगस्त 2009|url-status=live}}</ref> 1873 में, जी. एच. आर्मर हैन्सेन (G. H. Armauer Hansen) द्वारा नॉर्वे में कुष्ठरोग के कारणात्मक एजेंट, ''माइकोबैक्टेरियम लेप्री (Mycobacterium leprae)'', की खोज की गई, जिससे यह मनुष्यों में इस बीमारी का कारण बनने वाला पहला ज्ञात जीवाणु बन गया।<ref name="Hansen_1874">{{cite journal | author = Hansen GHA | title = Undersøgelser Angående Spedalskhedens Årsager (Investigations concerning the etiology of leprosy) | journal = Norsk Mag. Laegervidenskaben | year = 1874 | volume = 4| pages = 1–88 | language = no }}</ref><ref name="Irgens_2002">{{cite journal |author=Irgens L |title=The discovery of the leprosy bacillus |journal=Tidsskr nor Laegeforen |volume=122 |issue=7 |pages=708–9 |year=2002 |pmid=11998735}}</ref> हैन्सेन ने दाग़रहित ऊतकों वाले अनेक क्षेत्रों से अनेक छोटे गैर-अपवर्तक दण्डाणुओं का अवलोकन किया। ये दण्डाणु पोटेशियम के जल में घुलनशील नहीं थे और वे अम्ल तथा अल्कोहल के प्रति तीव्र थे। 1879 में वे ज़िएल की विधि के द्वारा इन जीवों को चिह्नित करने में सक्षम हुए और कोच के दण्डाणु (''[[माइकोबैक्टीरियम ट्यूबर्क्युलोसिस|माइटोबैक्टेरियम ट्युबरक्युलॉसिस]]'') (Mycobacterium tuberculosis) के साथ इसकी समानता का उल्लेख भी किया गया। इन जीवों में तीन उल्लेखनीय अंतर थे: (1) कुष्ठरोग के घावों में उपस्थित दण्डाणुओं की संख्या अत्यधिक थी (2) उन्होंने अंतर्कोशिकीय संग्रहणों (''ग्लॉबी'') की रचना की, जो कि उनकी एक विशेषता है और (3) इन दण्डाणुओं में शाखाओं और सूजन के साथ अनेक प्रकार के आकार थे। इन अंतरों ने यह सुझाव दिया कि कुष्ठरोग किसी ऐसे जीव के कारण उत्पन्न होता था, जो ''माइकोबैक्टेरियम ट्युबरक्युलॉसिस (Mycobacterium tuberculosis)'' से संबंधित तो था, लेकिन उससे भिन्न था। उन्होंने बर्गेन (Bergen) में सेंट जॉर्जेन्स अस्पताल (St. Jørgens Hospital) मे कार्य किया, जिसकी स्थापना पंद्रहवीं सदी के प्रारंभ में हुई थी। आज सेंट जॉर्जेन एक संग्रहालय, ''लेप्राम्युसीट (Lepramuseet)'' है, जो संभवतः उत्तरी यूरोप में सर्वश्रेष्ठ रूप से संरक्षित कुष्ठरोग चिकित्सालय है।<ref>{{Cite web |url=http://www.bymuseet.no/?vis=80 |title=बाइमुसेट आई बर्गन |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20110210134430/http://www.bymuseet.no/?vis=80 |archive-date=10 फ़रवरी 2011 |url-status=live }}</ref> == देशों के अनुसार कुष्ठरोग == === रोम === पश्चिम में, कुष्ठरोग का सबसे प्राचीन ज्ञात विवरण [[प्राचीन रोम सभ्यता|रोमन]] विश्वकोश के रचयिता ऑलस कॉर्नेलियस सेल्सस (Aulus Cornelius Celsus) (25 ईसा पूर्व से – 37 ईस्वी) ने अपनी ''डी मेडिसिना (De Medicina)'' में दिया; उन्होंने कुष्ठरोग को “''श्लीपद (elephantiasis)'' ” कहा.<ref name="mcleod yates 152 153" /> रोमन लेखक प्लाइनी द एल्डर (Pliny the Elder) (23–79 ईस्वी) ने भी इसी बीमारी का उल्लेख किया।<ref name="mcleod yates 152 153" /> हालांकि, 5वीं सदी ईस्वी के वल्गेट (Vulgate) में लेविटिकस के “''सारा’ट'' ” ("''sara't'' " of Leviticus) ([[पुराना नियम|पुराना करार]]) का अनुवाद “''लेप्रा (lepra)'' ” के रूप में किया गया है, लेकिन ''सारा’ट'' (''sara’t'') का लेवाइटिकस (Leviticus) में मिलने वाला मूल रूप सेल्सस (Celsus) व प्लाइनी (Pliny) द्वारा वर्णित ''श्लीपद (elephantiasis)'' नहीं था; वस्तुतः ''सारा’ट (sara't)'' का प्रयोग एक ऐसी बीमारी का वर्णन करने के लिये किया जाता था, जो घरों और वस्रों को प्रभावित कर सकती थी।<ref name="mcleod yates 152 153" /> कैटरीना सी. डी. मैक्लॉयड (Katrina C. D. McLeod) और रॉबिन डी. एस. येट्स (Robin D. S. Yates) के अनुसार ''सारा’ट (sara't)'' "रस्मी अशुद्धि की एक स्थिति या त्वचा के रोग के एक अस्थायी रूप का द्योतक है।"<ref name="mcleod yates 152 153" /> === मुस्लिम विश्व === मुस्लिम विश्व में, फारसी बहुश्रुत एविसेना (Avicenna) (सी. (c.) 980–1037) कुष्ठरोग से ग्रस्त लोगों में अनुनासिक पट के विनाश का वर्णन करने वाला चीन के बाहर का पहला ग्रंथ था।<ref name="mcleod yates 152 153" /> === मध्य-युग === मध्य-युग में विभिन्न ''लेप्रोसारिया (leprosaria)'', या कुष्ठरोग चिकित्सालय, उभर आए; मैथ्यू पेरिस (Matthew Paris), एक बेनेडिक्ट-अनुयायी संन्यासी (Benedictine Monk), का आकलन है कि तेरहवीं सदी के प्रारंभिक काल में पूरे यूरोप में इनकी संख्या 19,000 थी।<ref>{{CathEncy|wstitle=Leprosy}}</ref> पहली दर्ज की गई कुष्ठरोग कॉलोनी हार्ब्लेडाउन (Harbledown) में थी। ये संस्थाएं आश्रमों की तर्ज पर चलाई जातीं थीं और हालांकि कुष्ठरोगियों को इन आश्रम-जैसे स्थानों पर रहने के लिये प्रोत्साहित किया जाता था, लेकिन ऐसा उनके स्वयं के स्वास्थ्य व संगरोध के लिये था। वस्तुतः कुछ मध्ययुगीन स्रोत इस विश्वास की ओर संकेत करते हैं कि जो लोग कुष्ठरोग से ग्रस्त थे, उनके बारे में यह माना जाता था कि वे इस धरती पर ही पापशोधन की प्रक्रिया से गुज़र रहे थे और इसी कारण उनके कष्टों को सामान्य व्यक्ति के कष्टों से अधिक पवित्र माना जाता था। अधिक आमतौर पर, कुष्ठरोगियों को जीवन और मृत्यु के बीच के एक स्थान पर निवास करने वालों के रूप में देखा जाता था: वे अभी भी जीवित थे, लेकिन फिर भी उनमें से अधिकांश ने सांसारिक अस्तित्व से या तो स्वयं ही खुद को रस्मी रूप से अलग कर लिया था या फिर उन्हें ऐसा करने पर बाध्य किया गया था।<ref>ब्रॉडी, सॉल नाथेनिय्ल (1974). आत्मा की रोग: मध्यकालीन साहित्य में कुष्ठरोग इथाका: कॉर्नेल प्रेस.</ref> सेंट लाज़ारस (Saint Lazarus) की परंपरा एक सन्यासियों की एक अस्पताल संचालित करने वाली और सैन्य संचालन वाली परंपरा थी, जिसकी शुरुआत बारहवीं सदी में येरुशलम में हुई और अपने पूरे इतिहास के दौरान यह कुष्ठरोग से जुड़ी रही. इस परंपरा के पहले संन्यासी कुष्ठरोग के योद्धा थे और मूल रूप से उनमें कुष्ठरोग के महागुरू (grand masters) हुआ करते थे, हालांकि सदियां बीतने के साथ-साथ इस परंपरा के ये पहलू परिवर्तित हो गए। रैडगुंड (Radegund) को कुष्ठरोगियों के पैर धोने के लिये जाना जाता है। ऑर्डरिक वाइटेलिस (Orderic Vitalis) ने एक सन्यासी, राल्फ (Ralf) के बारे में लिखा है, जो कुष्ठरोगियों के कष्टों को देखकर इतने द्रवित हो गए कि उन्होंने कुष्ठरोग पाने की प्रार्थना की (जो कि अंततः उन्होंने प्राप्त भी किया). अपने आगमन की सूचना देने के लिये कुष्ठरोगी अपने साथ एक टुनटुना और घंटी रखा करता था और इसके उद्देश्य लोगों को दान देने के लिये आकर्षित करने के साथ ही इस बात की चेतावनी देना भी था कि एक रोगी व्यक्ति आस-पास ही है। === भारत === ''द ऑक्सफोर्ड इलस्ट्रेटेड कम्पेनियन टू मेडिसिन (The Oxford Illustrated Companion to Medicine)'' का मत है कि कुष्ठरोग का उल्लेख और साथ ही इसका उपचार, हिंदुओं की धार्मिक पुस्तक ''अथर्व-वेद'' में पहले से ही वर्णित है।<ref>लॉक एट अल; पृष्ठ 420</ref> ''एन्साइक्लोपीडिया ब्रिटानिका 2008 (Encyclopedia Britannica 2008)'' में लिखते हुए, कीर्न्स (Kearns) व नैश (Nash) कहते हैं कि कुष्ठरोग का प्रथम उल्लेख भारतीय चिकित्सा पुस्तक ''[[सुश्रुत|सुश्रुत संहिता]]'' (6वीं सदी ईसा पूर्व) में मिलता है।<ref name="k&n08">कार्नस और नैश (2008)</ref> ''द कैम्ब्रिज एन्साइक्लोपीडिया ऑफ ह्युमन पैलियोपैथोलॉजी (The Cambridge Encyclopedia of Human Paleopathology)'' (1998) के अनुसार: "भारत की ''सुश्रुत संहिता'' 600 सदी ईसा पूर्व से ही इस स्थिति का काफी अच्छी तरह वर्णन करती है और यहां तक कि इसके लिये उपचारात्मक सुझाव भी प्रदान करती है".<ref name="cambridge-paleopathology">ऑफडरहाइड, ए.सी.; रोड्रिगुएज़-मार्टिन, सी. एण्ड लैंग्सजोएन, ओ. (1998) ''द कैम्ब्रीज इनसाइक्लोपीडिया ऑफ़ ह्युमन पेलेयोपैथोलॉजी.'' कैम्ब्रिज यूनिवर्सिटी प्रेस ISBN 0-521-55203-6, पृष्ठ 148.</ref> शल्य-चिकित्सक सुश्रुत 6वीं सदी ईसा पूर्व में भारत के नगर [[वाराणसी|काशी]] में निवास करते थे,<ref name="Dwivedi&Dwivedi07">द्विवेदी एंड द्विवेदी (2007)</ref> और चिकित्सीय पुस्तक ''सुश्रुत संहिता'' —उन्हें समर्पित—ने ईसा पूर्व पहली सहस्राब्दी के दौरान अपनी उपस्थिति दर्ज की.<ref name="k&n08" /> सुश्रुत के कार्य का उत्खनन में प्राप्त सबसे प्राचीन सुरक्षित लिखित सामग्री ''बोवर पाण्डुलिपी'' —चौथी सदी ईस्वी में लिखित, है, जो कि मूल रचना के लगभग एक सहस्राब्दी बाद लिखी गई।<ref>कुटुंबियन, पृष्ठ (2005) ''प्राचीन भारतीय चिकित्सा.'' ओरिएंट लाँगमैन ISBN 81-250-1521-3; पीपी. XXXII-XXXIII</ref> इन प्राचीन कार्यों की उपस्थिति के बावजूद इस बीमारी का पहला सामान्यतः अचूक माना जाने वाला वर्णन 150 ईस्वी में गैलेन ऑफ पेरागमम (Galen of Pergamum) का था। 2009 में, भारत में 4000-वर्षों पुराना एक नर-कंकाल मिला, जिस पर कुष्ठरोग के चिह्न दिखाई दे रहे थे।<ref>रॉबिंस जी, त्रिपाठी वीएम्, मिश्रा वीएन, मोहंती आरके, शिंदे वीएस, एट अल. (2009). [http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0005669 प्राचीन भारत में कुष्ठ रोग के लिए स्केलेटल साक्ष्य (2000 ई.पू.)] {{Webarchive|url=https://web.archive.org/web/20101012155828/http://www.plosone.org/article/info:doi/10.1371/journal.pone.0005669 |date=12 अक्तूबर 2010 }} PLoS ONE 4(5): e5669. {{doi|10.1371/journal.pone.0005669}}</ref> यह खोज बालाथाल (Balathal) नामक स्थान पर हुई, जो कि वर्तमान में [[राजस्थान]] का एक भाग है और ऐसा माना जाता है{{किसके द्वारा|date= जनवरी 2010}} कि यह इस बीमारी का अभी तक प्राप्त सबसे पुराना मामला है।<ref name="AP">{{cite web |title=Skeleton shows earliest evidence of leprosy |publisher=[[एसोसिएटेड प्रेस]] |date=2009-05-27 |url=http://www.google.com/hostednews/ap/article/ALeqM5idNIe5ytThacobusirf-k5Bfwl_gD98E87F80 |accessdate=2009-05-29 }}{{Dead link|date=अगस्त 2021 |bot=InternetArchiveBot }}</ref> इससे इस बीमारी के पिछले सबसे प्राचीन ज्ञात मामले की तिथि, जो कि छठी-सदी के [[मिस्र]] की थी, 1,500 वर्ष पीछे चली गई।<ref name="Science">{{cite web |title=Skeleton Pushes Back Leprosy's Origins |publisher=Science Now |date=2009-05-27 |url=http://sciencenow.sciencemag.org/cgi/content/full/2009/527/1?rss=1 |accessdate=2009-05-29 |archive-url=https://web.archive.org/web/20090823003529/http://sciencenow.sciencemag.org/cgi/content/full/2009/527/1?rss=1 |archive-date=23 अगस्त 2009 |url-status=dead }}</ref> ऐसा विश्वास है कि खुदाई में मिला नर-कंकाल किसी पुरुष का है, जो अपनी आयु के तीसरे दशक में था और अहार कैल्कोलिथिक (Ahar Chalcolithic) संस्कृति का सदस्य था।<ref name="Science" /><ref>{{cite web |title=Leprosy belonged to Ahar Chalcolithic era: Expert |publisher=[[द टाइम्स ऑफ़ इण्डिया ]] |date=2009-05-29 |url=http://timesofindia.indiatimes.com/Pune/Leprosy-belonged-to-Ahar-Chalcolithic-era-Expert/articleshow/4590778.cms |accessdate=2009-05-29 |archive-url=https://web.archive.org/web/20100301113814/http://timesofindia.indiatimes.com/Pune/Leprosy-belonged-to-Ahar-Chalcolithic-era-Expert/articleshow/4590778.cms |archive-date=1 मार्च 2010 |url-status=live }}</ref> पुरातत्वविदों का कथन है कि यह नर-कंकाल न केवल कुष्ठरोग का अब तक प्राप्त सबसे प्राचीन मामला है, बल्कि यह इस प्रकार का पहला उदाहरण भी है, जो कि प्रागैतिहासिक भारत तक पीछे जाता है।<ref>{{cite web |title=‘Oldest evidence of leprosy found in India’ |publisher=[[द टाइम्स ऑफ़ इण्डिया ]] |date=2009-05-27 |url=http://timesofindia.indiatimes.com/Health--Science/Oldest-proof-of-leprosy-found-in-India/articleshow/4585654.cms |accessdate=2009-05-29 |archive-url=https://web.archive.org/web/20090530141523/http://timesofindia.indiatimes.com/Health--Science/Oldest-proof-of-leprosy-found-in-India/articleshow/4585654.cms |archive-date=30 मई 2009 |url-status=live }}</ref> यह खोज इस बीमारी के उदगम से संबंधित एक सिद्धांत का समर्थन करती है, जिसका मानना है कि [[सिकंदर महान]] की सेनाओं के माध्यम से यूरोप में फैलने से पूर्व इसका उदगम भारत या अफ्रीका में हुआ।<ref name="AP" /> 1881 में, भारत में कुष्ठरोग के लगभग 120,000 मरीज थे। केंद्र सरकार ने 1898 का लेपर्स एक्ट (Lepers Act of 1898) पारित किया, जिसने भारत में कुष्ठरोग से ग्रस्त व्यक्तियों के बलपूर्वक परिरोध के लिये कानूनी प्रावधान प्रदान किया।<ref>[http://www.nls.uk/indiapapers/leprosy.html कुष्ठरोग - ब्रिटिश भारत की चिकित्सा का इतिहास] {{Webarchive|url=https://web.archive.org/web/20070910150758/http://www.nls.uk/indiapapers/leprosy.html |date=10 सितंबर 2007 }}, स्कॉटलैंड के राष्ट्रीय पुस्तकालय</ref> === चीन === {{Main|चीन में कुष्ठरोग}} [[चीन का इतिहास|प्राचीन चीन]] के सन्दर्भ में, कैटरीना सी. डी. मैक्लॉइड (Katrina C. D. McLeod) और रॉबिन डी. एस. येट्स (Robin D. S. Yates) ने निम्न-प्रतिरोध वाले कुष्ठरोग के लक्षणों के सबसे प्राचीन ज्ञात स्पष्ट वर्णन प्रदान करने वाले के रूप में, 266-246 ईसा पूर्व के स्टेट ऑफ क्विन’स ''फेंग ज़ेन शी'' (State of Qin's Feng zhen shi 封診式) (''सीलबंदी और पड़ताल के मॉडलों'') की पहचान की, हालांकि इसे ''लि'' (li 癘), त्वचा के विकार के लिये एक सामान्य चीनी शब्द, के अंतर्गत सूचीबद्ध किया गया था।<ref name="mcleod yates 152 153">{{cite journal |author=McLeod, Katrina C. D. and Robin D. S. Yates |title=Forms of Ch'in Law: An Annotated Translation of The Feng-chen shih |url=http://jstor.org/stable/2719003 |journal=Harvard Journal of Asiatic Studies |volume=41 |issue=1 |pages=111–63. Pages 152–3 & footnote 147 |year=1981 |doi=10.2307/2719003 |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20160307044336/http://www.jstor.org/stable/2719003 |archive-date=7 मार्च 2016 |url-status=dead }} एंजेला लेयौंग्स चीन में कुष्ठरोग: एक इतिहास (न्यूयॉर्क: कोलंबिया यूनिवर्सिटी प्रेस, 2009) चीन पर कोढ़ में आधिकारिक स्रोत है।</ref> 1975 में [[हूबेइ|हुबेई]] क्षेत्र के शुइहुदी, युनमेंग की खुदाई में प्राप्त बांस की पट्टी पर लिखा तीसरी सदी ईसा पूर्व का यह चीनी अवतरण न केवल “नाक के स्तंभ” के नष्ट होने का, बल्कि “भौहों में सूजन, बालों के झड़ना, अनुनासिक उपास्थि के अवशोषण, घुटनों और कोहनियों में पीड़ा, कठिनाईपूर्ण और बेसुरे श्वसन तथा साथ ही असंवेदनता” का भी वर्णन करती है।<ref name="mcleod yates 152 153" /> === जापान === {{Main|जापान में कुष्ठरोग}} जापान में कुष्ठरोग की रोकथाम के लिये 1907, 1931 और 1953 में बनाए गए नियमों के आधार पर आरोग्य-निवास में मरीजों के पृथक्करण का एक अद्वितीय इतिहास रहा है और इस कारण इसने कुष्ठरोग के कलंक को और गहरा कर दिया है। 1953 के कानून को 1996 में निरस्त कर दिया गया। 2008 तक प्राप्ति जानकारी के अनुसार अभी भी 13 राष्ट्रीय आरोग्य-निवासों और 2 निजी चिकित्सालयों में 2717 पूर्व-मरीज रह रहे हैं। वर्ष 833 में लिखित एक दस्तावेज में, कुष्ठरोग का वर्णन इस प्रकार किया गया है: “शरीर के पांच अंगों को खा लेने वाले एक परजीवी के कारण होने वाली एक बीमारी. इसमें भौहें और पलकें निकलकर अलग हो जाती हैं और नाक का आकार विकृत हो जाता है। यह बीमारी स्वर में कर्कशता उत्पन्न करती है और आवश्यक रूप से इसमें अंगुलियों और पंजों के शामिल होते हैं। इसके मरीजों के साथ न सोएं क्योंकि यह बीमारी आस-पास के लोगों तक भी फैल सकती है।" यह संक्रामकता के प्रति चिंता व्यक्त करनेवाला पहला दस्तावेज था।<ref>जापान में हंसेन के रोग: एक संक्षिप्त इतिहास किकुची आई इंट जे डर्मटोल 1997:36:629-633.</ref> === पुर्तगाल === 1947 में, पुर्तगाल में हॉस्पिटल-कॉलोनिया रोविस्को पैस (Hospital-Colónia Rovisco Pais) (रोविस्को पैस अस्पताल-कॉलोनी) की स्थापना कुष्ठरोग के उपचार के लिये एक राष्ट्रीय केंद्र के रूप में की गई। 2007 में इसका नाम बदलकर सेंट्रो डी मेडिसिना डी रिएबिलिटाकाओ डा रेजिआओ सेंट्रो-रोविस्को पैस (Centro de Medicina de Reabilitação da Região Centro-Rovisco Pais) कर दिया गया। यह अभी भी एक कुष्ठरोग सेवा प्रदान करता है, जिसमें 25 पूर्व-मरीज रहते हैं। 1988 और 2003 के बीच पुर्तगाल में कुष्ठरोग के 102 मरीजों का उपचार किया गया।<ref name="Medeiros2009">मेडिरोस एस, काटोर्ज़े एमजी, वीरा एमआर (2009) पुर्तगाल में हंसेन के रोग: 2003 और 1988 के बीच बहुदण्डाणुयुक्त रोगियों के इलाज. जे. यूर. एकैड. डर्मटोल. वेनेरोल. 23(1):29-35</ref> === स्पेन === स्पेन में द सैनेटोरियो डी फॉन्टिलेस (The Sanatorio de Fontilles) (फॉन्टिलेस आरोग्य-निवास) की स्थापना 1902 में की गई और 1909 में इसमें पहला मरीज भर्ती हुआ। 2002 में इस सैनेटोरियो (Sanatorio) में आरोग्य निवास में 68 निवासी मरीज थे और 150 अधिक बाहरी मरीज उपचार प्राप्त कर रहे थे। बहुत थोड़ी संख्या में अभी भी मामलों की जानकारी मिलती रहती है।<ref name="Pardal-Fernández2007">पर्डल-फर्नान्डीज जेएम, रोड्रिगुएज़-वज़कुएज़ एम, फर्नांडीस-आरागॉन जी, इनीगुएज़-डे ओंज़ोनो एल, गार्सिया-मुनोज़गुरें एस. (2007) कुष्ठरोग और दो देशी स्पनिअर्ड्स में गंभीर न्युरोपटी. रेव नयूरोल. 45(12):734-738</ref> === ग्रीस === 2009 में ग्रीस से दो देशज मामलों की जानकारी मिली थी।<ref name="Neonakis2009">नेयोनाकिस आईके, गिट्टी जेड, कोंटोस एफ, बरिटाकि एस, ज़ेर्वा एल, क्रामबोविटिस ई, स्पंदिडोस डिए (2009) एक देश यूरोपियो से कुष्ठरोग के 2 स्वदेशी मामलों की रिपोर्ट: विश्लेषण बहुरूपता उपयोग पॉलीमारसे श्रृंखला प्रतिक्रिया-प्रतिबंध टुकड़ा लंबाई जीन की hsp65 ''माइकोबैक्टीरियम लेप्रे'' के लिए पहचान सीधे नमूना से एक नैदानिक. डिअग्न. माइक्रोबायो. संक्रमित. डिस. |;64(3):331-333</ref> === फ्रांस === 2009 में फ्रांस से एक मामले की जानकारी मिली थी।<ref name="Ezzedine2009">एज्ज़ेडाइन के, मालवी डी, बेय्लोट सी, लोंगी-बौर्सिएर एम (2009) महानगरीय फ्रांस में ऑटोच्ठोनस कुष्ठरोग ज्वर का चेहरा और पेश करने के साथ एक विसरित घुसपैठ. इंट. जे डर्मटल. 48(1):69-72</ref> === जर्मनी === सन 1700 तक यूरोप के अधिकांश भाग से कुष्ठरोग को लगभग मिटा दिया गया था, लेकिन सन 1850 के कुछ समय बाद रूसी साम्राज्य से आने वाले [[लिथुआनिया]]ई आप्रवासियों कर्मियों के माध्यम से पूर्वी [[प्रुशिया]] में कुष्ठरोग का पुनः आगमन हुआ। 1800 में मेमेल (Memel) (अब लिथुआनिया (Lithuania) में क्लाइपेडा (Klaipėda) में पहले कुष्ठरोग आरोग्य-निवास (leprosarium) की स्थापना की गई। 1900 और 1904 में ऐसे विधेयक पारित किये गये, जिन्होंने मरीजों का पृथक्करण करना और उन्हें दूसरों के साथ कार्य करने की अनुमति न देना आवश्यक बना दिया. === ग्रेट ब्रिटेन === ग्रेट ब्रिटेन में अंतिम ज्ञात मामला 1901 में शेटलैंड द्वीप (Shetland Islands) में मिला था। === माल्टा === माल्टा में कुष्ठरोग ''(अर्गा कॉर्पोर मॉर्बी लेप्री) (erga corpore morbi leprae)'' का पहला लेखबद्ध मामला 1492 में एक गोज़िटन महिला (गैरिता ज़ेज्बैस (Garita Xejbais)) का था, लेकिन यह निश्चित है कि यह बीमारी इस समय से पूर्व भी इस द्वीप पर मौजूद थी।<ref name="Buttigieg2008">बाटीगिएग जीजी, सवोना-वेंचुरा सी, स्टाफ्रेस किलोमीटर (2008) माल्टा में कुष्ठ रोग का इतिहास. माल्टा मेड जे 4:34-38</ref> अगला दर्ज मामला 1630 में डोमिनिक के एक तपस्वी का था। वर्ष 1687 की एक रिपोर्ट में पांच मामले दर्ज थे। इसके बाद 1808 में तीन मामलों की जानकारी मिली. 1839 और 1858 के बीच सात अतिरिक्त मामले दर्ज किये गए। 1890 में एक जनसंख्या सर्वेक्षण में कुल 69 मामले दर्ज हुए. 1957 में एक सर्वेक्षण के बाद 151 कुष्ठ रोग से संक्रमित लोगों की पहचान की. जून 1972 में, एक निर्मूलन कार्यक्रम प्रारंभ किया गया। यह परियोजना हैम्बर्ग स्थित बॉर्सल इंस्टीट्यूट (Borsal Institute) के निदेशक एनो फ्रीर्कसेन (Enno Freerksen) के कार्य पर आधारित थी। डॉ फ्रीर्कसेन द्वारा इससे पूर्व किये गये परीक्षणों में राइफैपिसिन (rifampacin), आइज़ोनियाज़िड (izoniazid), डैप्सोन (dapsone) और प्रोथियोनामाइड (prothionamide) का प्रयोग किया गया था। माल्टा परियोजना में राइफैम्पिसिन (rifampacin), डैप्सोन (dapsone) और क्लोफैमाज़ाइन (clofamazine) का प्रयोग हुआ। लगभग 300 मरीजों के उपचार के बाद 1999 में यह परियोजना आधिकारिक रूप से बंद कर दी गई। === रोमानिया === यूरोप में कुष्ठरोग की अंतिम कॉलोनी रोमानिया के टिचिलेस्टी (Tichileşti) में थी। 1991 तक, मरीजों को कॉलोनी छोड़ने की अनुमति नहीं दी जाती थी। इस कॉलोनी में मरीजों को भोजन, सोने के लिये एक स्थान, कपड़े और चिकित्सीय सुविधाएं मिलती हैं। कुछ मरीज लंबे मंडपों में और शेष सब्जियों व फलों के उद्यानों से युक्त घरों में रहते हैं। इस कॉलोनी में दो चर्च – ऑर्थोडॉक्स (Orthodox) तथा [[बैप्टिस्ट चर्च|बैप्टिस्ट (Baptist)]] – एवं एक खेत है, जहाँ कॉलोनी स्वयं के लिये मक्के का उत्पादन करती है। === कनाडा === 19वीं सदी के अंत में अटलांटिक कनाडा में कुष्ठरोग के मामले मिले थे। इसके मरीजों को पहले मिरामिची नदी में शेल्ड्रेक द्वीप पर रखा गया था और बाद में इनको स्थानांतरित कर दिया गया।{{dn|Tracadie}} कैथलिक साध्वियां (Catholic nuns) (रिलीजियुसेस हॉस्पिटलीयरेस डी सेन्ट-जोसेफ (religieuses hospitalières de Saint-Joseph), आरएचएसजे (RHSJ)) रोगियों की देखभाल के लिये आईं. उन्होंने न्यू-ब्रुन्सविक (New-Brunswick) में फ्रांसीसी भाषा का पहला अस्पताल (French-language hospital) खोला और इसके बाद अनेक अन्य अस्पताल खुले. आरएचएसजे (RHSJ) की साध्वियों द्वारा खोले गए अस्पतालों में से अनेक का प्रयोग आज भी किया जाता है। ट्रैकेडि (Tracadie) में कुष्ठरोगों को रखने वाला अंतिम अस्पताल 19991 में तोड़ दिया गया। इसका कुष्ठरोग व संक्रामक रोगों के रोगियों के लिये निर्मित भाग (lazaretto section) 1965 से ही बंद कर दिया गया था। अपने अस्तित्व की एक सदी की अवधि में इसने न केवल बीमारी के एकाडियन (Acadian) पीड़ितों को बल्कि पूरे कनाडा से आने वाले लोगों तथा साथ ही आइसलैंड, रूस और चीन सहित अन्य देशों से आने वाले बीमार आप्रवासियों को भी शरण दी.<ref>{{Cite web |url=http://personal.nbnet.nb.ca/rhsjnda/Page20.html |title=संग्रहीत प्रति |access-date=30 अगस्त 2010 |archive-url=https://web.archive.org/web/20090116041402/http://personal.nbnet.nb.ca/rhsjnda/Page20.html |archive-date=16 जनवरी 2009 |url-status=dead }}</ref> === संयुक्त राज्य अमरीका === प्रतिवर्ष 150-200 के बीच नए मामलों का निदान होता है। 1999 में 108 मामलों की जानकारी प्राप्त हुई. कुष्ठरोग सबसे ज्यादा मात्रा में [[टेक्सास]] और [[लुईज़ियाना|लुइज़ियाना]] में मिलता है, जिसका कारण शायद इन राज्यों में नौ धारियों वाले वर्मी की उपस्थिति है। === हवाई द्वीप-समूह === इस द्वीप पर कुष्ठरोग की शुरुआत की तिथि को लेकर विवाद है। सबसे आम तौर पर माना जाने वाला दृष्टिकोण यह है कि इसका आगमन 1850 के दशक के मध्य में आए चीनी आप्रवासियों के द्वारा हुआ, लेकिन कुछ ऐतिहासिक रिकॉर्ड सुझाव देते हैं कि यह बीमारी उससे भी पूर्व समुद्री-नाविकों के माध्यम से आई होगी. == समाज और संस्कृति == === कुष्ठरोग से ग्रस्त प्रसिद्ध हस्तियां === * बाल्डविन चतुर्थ (Baldwin IV), जो कि लैटिन येरुशलम के एक राजा थे और जिनका चित्रण फिल्म ''किंगडम ऑफ हेवन (Kingdom of Heaven)'' के एक पात्र के रूप में किया गया था<ref>{{cite book |author=Hamilton, Bernard |title=The leper king and his heirs: Baldwin IV and the Crusader Kingdom of Jerusalem |publisher=Cambridge University Press |location=Cambridge, UK |year=2000 |pages= |isbn=0-521-64187-X |oclc= |doi= |accessdate=}}</ref> * सेंट डैमियन, एक रोमन कैथलिक मिशनरी-पादरी, को मोलोकाई (Molokai) स्थित कुष्ठरोगियों की कॉलोनी में सेवा देते समय कुष्ठरोग का संक्रमण हो गया था, लेकिन उन्होंने तब तक कुष्ठरोगियों की सेवा जारी रखी, जब तक कि इस बीमारी के कारण उनकी स्वयं की मृत्यु नहीं हो गई। 11 अक्टूबर 2009 को वैटिकन में आयोजित एक समारोह में उन्हें संत की उपाधि से विभूषित किया गया और इसकी अध्यक्षता बेनेडिक्ट सोलहवें (Benedict XVI) ने की * वियतनामी कवि हैन मैक टु (Han Mac Tu)<ref name="Nguyên">{{cite journal | title = Contemporary Vietnamese Writing | author = Cung giu Nguyên | journal = Books Abroad | volume = 29 | issue = 1 | year = 1955 | pages = 19–25 | publisher = University of Oklahoma | url = http://www.jstor.org/stable/40093803 | accessdate = 2010-02-28 | archive-url = https://web.archive.org/web/20160327000359/http://www.jstor.org/stable/40093803 | archive-date = 27 मार्च 2016 | url-status = live }}</ref> * संभवतः रॉबर्ट द ब्रुस (Robert the Bruce) नहीं, हालांकि एक अंग्रेज स्रोत के अनुसार वे इस बीमारी से ग्रसित थे।<ref>{{cite web | title = Robert the Bruce and Leprosy | author = Kaufman MH, MacLennan WJ | work = History of Dentistry Research Newsletter | date = 2001-04-01 | accessdate = 2010-02-28 | url = http://www.rcpsg.ac.uk/hdrg/April015.htm | archive-url = https://web.archive.org/web/20120309233821/http://www.rcpsg.ac.uk/hdrg/April015.htm | archive-date = 9 मार्च 2012 | url-status = dead }}</ref> 1995 में मेल गिब्सन (Mel Gibson) की फिल्म ''ब्रेवहार्ट (Braveheart)'' में, रॉबर्ट द ब्रुस (Robert the Bruce) के पिता – रॉबर्ट डी ब्रुस (Robert de Brus), एनांडेल के छठे लॉर्ड (6th Lord of Annandale) – को कुष्ठरोग से ग्रस्त दर्शाया गया है। * एक जापानी डैम्यो (daimyo) ओटानी योशित्सुगु (Otani Yoshitsugu)<ref name="Bryant">{{cite book |author=Bryant A |title=Sekigahara 1600: The Final Struggle for Power (Campaign Series, 40) |publisher=Osprey Publishing (UK) |location= |year=1995 |isbn=1-85532-395-8 |accessdate=2010-02-28 |url=http://books.google.com/?id=UzhzhxfmncsC&pg=PA24&dq=Otani+Yoshitsugu+leprosy&q=Otani%20Yoshitsugu%20leprosy }}{{Dead link|date=सितंबर 2021 |bot=InternetArchiveBot }}</ref> * बाइबिल-संबंधी लेखनों में ऐसे अनेक सन्दर्भ उपस्थित हैं, जैसे मूसा की बहन ([http://www.biblegateway.com/passage/?search=Numbers%2012:9-16;&amp;version=8;]), [[मूसा]] ([http://www.biblegateway.com/passage/?search=Exodus%204:6;&amp;version=8;]), सीरिया की सेना का सेनापति नामन सीरियाई (Naaman the Syrian) और बाद में पैगंबर एलिशा (Elisha) का सेवक बना गेहाज़ी (Gehazi) ([javascript:void(0); ]) और [[ईसा मसीह|ईसा]] द्वारा उपचारित अनेक अन्य लोग ([javascript:void(0); ], [http://www.biblegateway.com/passage/?search=Luke%2017:11-19;&amp;version=8;]), हालांकि इनमें उल्लेखित पीड़ाओं और वर्णित लक्षणों को अब हैन्सेन के रोग के लक्षण या केवल इसी रोग के लक्षण नहीं माना जाता (इससे संबंधित चर्चा को ‘ज़ार्थ (Tzaraath)’ में देखें) === काल्पनिक कुष्ठरोगी === {{Refimprovesect|date=April 2010}} * ''द क्रोनिकल्स ऑफ थॉमस कोवेनन्ट (The Chronicles of Thomas Covenant)'' का नायक, अनबिलिवर (Unbeliever), कुष्ठरोग से पीड़ित था, जो कि इस पूरी श्रृंखला का केंद्रीय बिंदु है। * शेक्सपीयर (Shakespeare) के ''हैम्लेट'' में, प्राचीन राजा हैम्लेट, राजकुमार हैम्लेट के पिता, का भूत, एक ‘लेप्रस डिस्टिलमेंट (leprous distilment)’ के द्वारा ज़हर दिये जाने का दावा करता है क्योंकि उसमें निर्विवाद उबाल जैसे कुष्ठरोग के लक्षणों में से अनेक लक्षण दिखाई देते हैं। * ग्रेगरी डेविड रॉबर्ट्स (Gregory David Roberts) द्वारा लिखित उपन्यास शांताराम (Shantaram) में, मुख्य पात्र, लिन (Lin), का सामना मुंबई की एक झुग्गी-बस्ती में रहने के दौरान अक्सर कुष्ठरोगियों की एक कॉलोनी के सदस्यों से होता है। * मूल पुस्तक ''बेन हर (Ben Hur)'' (तथा इस पुस्तक पर आधारित फिल्मों में), जुडाह बेन-हर (Judah Ben-Hur), नायक, की मां और बहन जेल में रहने के दौरान कुष्ठरोग से संक्रमित हो जाती हैं। * ''द आइलैंड (The Island)'' विक्टोरिया हिस्लॉप (Victoria Hislop) द्वारा लिखित एक ऐतिहासिक उपन्यास है, जो अधिकांशतः भूमध्यसागर में स्थित स्पिनालोंगा (Spinalonga) द्वीप की एक कुष्ठरोग कॉलोनी पर आधारित है * स्टीव थेयर (Steve Thayer) द्वारा लिखित पुस्तक ''द लेपर (The Leper)'' का नायक एक अमरीकी सैनिक है, जो प्रथम विश्व-युद्ध (World War I) के दौरान संक्रमित हो जाता है और इस बीमारी को ग्रहण कर लेता है * 1973 की फिल्म ''पैपिलोन (Papillon)'' में, स्टीव मैकक्वीन (Steve McQueen) डेविल्स आइलैंड (Devil's Island) के एक कैदी का किरदार निभाते हैं, जिसका फरार होने के प्रयास में कुष्ठरोगियों की एक कॉलोनी से सामना होता है। * ''[[सिम्प्सोन्स|द सिम्पसन्स (The Simpsons)]]'' के भाग “लिटिल बिग मॉम (Little Big Mom)" में, लिसा (Lisa) बार्ट (Bart) और होमर (Homer) को यह विश्वास दिलाकर मूर्ख बनाती है कि उन्हें कुष्ठरोग है। नेड फ्लैंडर्स (Ned Flanders) उन्हें उपचार के लिये मोलोकाई (Molokai) द्वीप भेज देते हैं। * [[शर्लक होम्स, एस॑क्वायर|शेरलॉक होम्स (Sherlock Holmes)]] की लघु कथा "द एडवेंचर ऑफ द ब्लैंचेड सोल्जर (The Adventure of the Blanched Soldier)" एक सैनिक से संबंधित है, जिसे कुष्ठरोग से ग्रस्त माना जाता है, लेकिन बाद में पता चलता है कि वास्तविक समस्या इचथायॉसिस (ichthyosis) है। * "मॉन्टी पायथन (Monty Python)" रेखाचित्र "कॉन्क्विस्टेडर कॉफी कैम्पेन (Conquistador Coffee Campaign)" में, एक कॉफी कम्पनी के विज्ञापन-दाता से उसके बॉस द्वारा इंस्टेंट कॉफी (instant coffee) के लिये बने एक विज्ञापन को उसके द्वारा "इंस्टेंट लेप्रसी (instant leprosy)" में, तथा साथ ही कुछ अन्य अनाकर्षक विज्ञापनों में बदलने के बारे में पूछा जाता है। * फिल्म "प्रिंसेज़ मोनोनोक (Princess Mononoke)" में, मुख्य पात्रों में से एक, लेडी एबोशी ऑफ आयरन टाउन (Lady Eboshi of Iron Town) कुछ कुष्ठरोगियों की देखभाल करती है, जिन्होंने उसके लिये हथियार बनाए थे। * तमिल फिल्म राथा कन्नीर (Ratha Kanneer) (ரத்தகண்ணீர்) में, पात्र मोहन (Mohan) (एम. आर. राधा) (M. R. Radha) कुष्ठरोगी हो जाता है, जिसे इस बीमारी के माध्यम से जीवन की अच्छाई और मूल्यों का पता चलता है * शुसाकु एंडो (Shusaku Endo) की ''वताशी गा सुतेता ओना (Watashi ga suteta onna)'' ''(वह लड़की जिसे मैंने पीछे छोड़ दिया)'' (1963) में, एक युवा पुरुष और एक मासूम युवा महिला के साथ उसके बेमेलपन की कहानी है, जिसे गलती से कुष्ठरोग से ग्रस्त बता दिया जाता है, लेकिन फिर भी वह कुष्ठरोग आरोग्य-निवास में मरीजों की सहायता के लिये बने रहने और कार्य करने का विकल्प चुनती है * बोडी (Bodie) और ब्रोक थोएने (Brock Thoene) की पुस्तक सेकंड टच (Second Touch) की कथा नाज़रथ के येशुआ (Yeshua of Nazareth) के काल के दौरान मैक’ऑब की घाटी (Valley of Mak’ob) में बसी कुष्ठरोगियों की एक कॉलोनी पर आधारित है। * बोडी (Bodie) और ब्रोक थोएने (Brock Thoene) द्वारा लिखित एक अन्य पुस्तक, इलेवन्थ गेस्ट (Eleventh Guest), नाज़रथ के येशुआ (Yeshua of Nazareth) से उपचार प्राप्त करने की इच्छा रखने वाले कुष्ठरोगियों के जीवन पर केंद्रित है। * गेल त्सुकियामा (Gail Tsukiyama) द्वारा लिखित ''द समुराई’स गार्डन (The Samurai's Garden)'' में, साची (Sachi) का पात्र कुष्ठरोग से ग्रस्त है और कुष्ठरोगियों की एक कॉलोनी में रहता है। * 2006 में बीबीसी (BBC) के ''रॉबिन हुड (Robin Hood)'' संस्करण में, मुख्य-स्थायी खलनायकों गाय (Guy) और इसाबेला (Isabella) के पिता, रॉजर ऑफ गिस्बॉर्न (Roger of Gisborne) का चरित्र, कुष्ठरोग से ग्रस्त हो जाता है और इस प्रकार इस बीमारी से ग्रस्त होने के कारण उसे रस्मी रूप से मृत, फिर निर्वासित, करार दे दिया जाता है। * कुष्ठरोग के बारे में एक मज़ेदार लेकिन शिक्षाप्रद कार्यक्रम 2006 में प्रदर्शित भाग ''मि. मॉन्क एंड द लेपर (Mr. Monk and the Leper)'' में दर्शाया गया है। * ग्राहम ग्रीन (Graham Greene) का उपन्यास अ बर्न्ट-आउट केस (A Burnt-Out Case) एक अफ्रीकी कुष्ठरोग कॉलोनी पर आधारित है। == इन्हें भी देखें == * प्रत्युपयाजक शर्तों की सूची == आगे पढ़ें == {{Refbegin}} * [[१८७७|1877:]] {{cite book |title=Leprosy In India |last=Lewis |first=T. R. |authorlink= |author2=D. D. Cunningham |year=1877 |publisher=Office Of The Superintendent Of Government Printing |location=Calcutta |isbn= |page= |pages= |url=http://books.google.com/?id=wHMIAAAAQAAJ |accessdate=2009-08-07}} * [[१८९५|1895:]] {{cite book |title=Pre-Columbian Leprosy |last=Ashmead |first=Albert S. |authorlink= |author2= |year=1895 |publisher=American Medical Association Press |location=Chicago |isbn= |page= |pages= |url=http://books.google.com/?id=imSHLN5DvgYC |accessdate=2009-08-07}} * [[१८९५|1895:]] {{cite book |title=Prize Essays On Leprosy |last= |first= |authorlink= |author2= |year=1895 |publisher=The New Sydenham Society |location=London |isbn= |page= |pages= |url=http://books.google.com/?id=qUEJAAAAIAAJ |accessdate=2009-08-07}} * [[१८९६|1896:]] {{cite book |title=A Handbook On Leprosy |last=Impey |first=S. P. |authorlink= |author2= |year=1896 |publisher=P. Blakiston, Son & Co. |location=Philadelphia |isbn= |page= |pages= |url=http://books.google.com/?id=wHMIAAAAQAAJ |accessdate=2009-08-07}} * [[१९१६|1916:]] {{cite journal |author1= Page, Walter Hines |last= |first= |authorlink= |author2= |year=1916 |author2= Page, Arthur Wilson |month=January |title=Fighting Leprosy In The Philippines |journal=[[World's Work|The World's Work: A History of Our Time]] |volume=XXXI |issue= |pages=310–320 |id= |url=http://books.google.com/?id=09_Sr9emceQC&pg=PA310 |accessdate=2009-08-04 |quote= }} * [[१९९१|1991:]] विलियम जॉपलिंग. कुष्ठरोग कलंक. लेप्र पुनरावृत्त 1991, 62, 1-12.{{Refend}} ==बाहरी कड़ियाँ== {{commons|Leprosy}} * कुष्ठ रोग के बारे में दस्तावेजी फिल्म [https://web.archive.org/web/20090822203532/http://www.netflix.com/Movie/Triumph_at_Carville_A_Tale_of_Leprosy_in_America/70092906] * {{DMOZ|Health/Conditions_and_Diseases/Infectious_Diseases/Mycobacterial/Hansen's_Disease/}} * [https://web.archive.org/web/20161109071947/http://www.jalma-icmr.org.in/hi/index.html राष्ट्रीय जालमा कुष्ठ एव अन्य माइकोबैक्टीरियल रोग सस्थान] * [https://web.archive.org/web/20171213164001/http://rajswasthya.nic.in/Kusth.htm राष्‍ट्रीय कुष्‍ठ रोग उन्‍मूलन कार्यक्रम] * [http://www.hindi.oneindia.in/news/2012/01/30/india-new-leprosy-cases-aid0163.html#infinite-scroll-3 देश को फिर से लगा कुष्‍ठ रोग]{{Dead link|date=जून 2020 |bot=InternetArchiveBot }} * [https://web.archive.org/web/20090831095632/http://www.cdc.gov/nczved/dfbmd/disease_listing/leprosy_ti.html Hansen's Disease (Leprosy)] * [https://web.archive.org/web/20140314203445/http://www.who.int/lep/en/ World Health Organization (WHO) leprosy website] * [http://dx.doi.org/10.1371/journal.pmed.0020341 The Global Campaign to Eliminate Leprosy] article from ''PLoS Medicine'' ; इतिहास * {{cite web | title = History of Leprosy, Urban Environment and French Colonization in West Africa | url = http://halshs.archives-ouvertes.fr/docs/00/25/89/20/PDF/Environnmement_africain_et_maladie-Barges1993.pdf | access-date = 6 दिसंबर 2017 | archive-url = https://web.archive.org/web/20130522123800/http://halshs.archives-ouvertes.fr/docs/00/25/89/20/PDF/Environnmement_africain_et_maladie-Barges1993.pdf | archive-date = 22 मई 2013 | url-status = dead }} * {{cite web | title = Anthropology and History of leprosy | url = http://halshs.archives-ouvertes.fr/docs/00/25/67/25/PDF/HA.pdf | format = ''Histoire & Anthropologie'', 15 (1995) 115-122 | access-date = 6 दिसंबर 2017 | archive-url = https://web.archive.org/web/20120618233605/http://halshs.archives-ouvertes.fr/docs/00/25/67/25/PDF/HA.pdf | archive-date = 18 जून 2012 | url-status = dead }} * [https://web.archive.org/web/20171207135811/http://leprosyhistory.org/ ILA Global Project on the History of Leprosy] * [https://web.archive.org/web/20150923033602/http://bphc.hrsa.gov/nhdp/NHD_MUSEUM_HISTORY.htm/ National Hansen's Disease Museum] * बीबीसी न्यूज़: [https://web.archive.org/web/20171206221426/http://news.bbc.co.uk/2/hi/health/4540461.stm Slave trade key to leprosy spread] ; शोध * [https://web.archive.org/web/20170713122522/http://granuloma.homestead.com/leprosy.html Pathology Images of Leprosy and Other Granulomatous diseases] Yale Rosen, M.D. * [https://web.archive.org/web/20150706144041/http://www.ilep.org.uk/library-resources/ INFOLEP Leprosy Information Services] * [https://web.archive.org/web/20130505064246/http://leprosy-review.org.uk/ ''Leprosy Review''] * {{cite web | title = Medical anthropology, Leprosy and Health Care in French speaking West-Africa | url = http://halshs.archives-ouvertes.fr/docs/00/25/67/18/PDF/Publication_ALLF_Barges_pour_SHS_.pdf | access-date = 6 दिसंबर 2017 | archive-url = https://web.archive.org/web/20120618222741/http://halshs.archives-ouvertes.fr/docs/00/25/67/18/PDF/Publication_ALLF_Barges_pour_SHS_.pdf | archive-date = 18 जून 2012 | url-status = dead }} * {{cite web | title = Anthropologie, lèpre et santé publique | url = http://laredoute-occasion.priceminister.com/offer/buy/62340027/Barges-Anne-Lepre-Et-Anthropologie-De-La-Maladie-Au-Mali-Livre.html }}{{Dead link|date=जून 2020 |bot=InternetArchiveBot }} {{बीमारियाँ}} == सन्दर्भ == {{Reflist|2}} {{ग्रामवर्षा ग्राही विकिरण जिवाणु रोग}} {{यक्ष्माणु-रोधी}} [[श्रेणी:कुष्ठरोग]] [[श्रेणी:जीवाणु से संबंधित प्रत्युपयाजक शर्तें]] [[श्रेणी:बैक्टीरियल बीमारियां]] [[श्रेणी:उष्णकटिबंधीय बीमारियां]] [[श्रेणी:उपेक्षित बीमारियां]] [[श्रेणी:रोग]] gwbluf4b0bw7dd3ccwt7dfq0eechro4 कुशल पाल सिंह 0 247188 6586746 6399011 2026-07-17T12:16:56Z InternetArchiveBot 500600 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 6586746 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name= के पी सिंह | image= | caption= | birth_date = {{birth date|१९३१|०८|१५}} | birth_place = खिंदौड़ा ,दादरी] | भाई = डॉ नवीन कुमार | occupation = [[डीएलएफ़ यूनिवर्सल लिमिटेड|डी. एल. एफ. लिमिटेड]] के [[अध्यक्ष]] व [[मुख्य कार्यकारी अधिकारी]] | networth = {{gain}}[[अमेरिकी डॉलर|US$]]९ [[अरब]] (2010)<ref name="Forbes topic page on KP Singh">[http://billionaires.forbes.com/topic/kushal_pal_singh Forbes topic page on KP Singh] Forbes.com. Accessed April 2010.</ref> | spouse = | children = राजीव [http://www.forbes.com/lists/2009/10/billionaires-2009-richest-people_Kushal-Pal-Singh_0UU7.html], पिया [http://online.wsj.com/article/SB123369491434644763.html] तथा एक और | alma_mater = [[मेरठ]] कॉलेज | residence = [[गुरुग्राम जिला|गुड़गांव]], [[हरियाणा]], [[भारत]] | website = [http://www.dlf.in www.DLF.in] | footnotes = }} '''कुशाल पाल सिंह''' या के.पी.सिंह, [[भारत]] की सबसे बडी रियल्टी कंपनी [[डीएलएफ़ यूनिवर्सल लिमिटेड|डी. एल. एफ. लिमिटेड]] के अध्यक्ष और मुख्य कार्यकारी अधिकारी है। == पृष्ठभूमि == कुशाल पाल सिंह का जन्म १५ अगस्त १९३१ को [[गौतम बुद्ध नगर]] के एक जाट परिवार में हुआ था। के पी सिंह ने भारत की सबसे बडी रियल्टी कंपनी की स्थापना की। डी एल एफ, आज बिक्री, [[राजस्व प्राप्ति|राजस्व]] एवं [[पूँजी|पूंजी]] के मामले में दुनिया की सबसे बड़ी रियल्टी कंपनी है। सिंह ने [[मेरठ]] कॉलेज से [[विज्ञान]] में [[स्नातक]] उत्तीर्ण किया तथा [[इंग्लैण्ड|इंग्लैंड]] से वैमानिकी की शिक्षा प्राप्त की। बाद में वे [[भारतीय थलसेना]] में अधिकारी चुने गये। यहाँ वे प्रसिद्ध घुड़सवारी टुकडी 'द डेक्कन होर्स' में शामिल हुये। सन १९६० में अमेरिकन इलैक्ट्रिक कंपनी के साथ जुड़े और १९७९ में डी एल एफ के साथ विलय के बाद संयुक्त कंपनी के [[प्रबंध निदेशक]] बने। == References == {{Reflist}} == External links == * [https://web.archive.org/web/20120502063115/http://www.time.com/time/specials/2007/article/0,28804,1649060_1649046_1649030-1,00.html के पी सिंह] * [https://web.archive.org/web/20101125075218/http://www.indianrealtynews.com/real-estate-india/dlfs-kp-singh-becomes-third-indian-trillionaire.html डी एल एफ के कुशाल पाल सिंह - भारत के तीसरे प्रतिभावान खरबपति] * [https://web.archive.org/web/20160305014759/http://www.forbes.com/lists/2008/10/billionaires08_KP-Singh_0UU7.html%E0%A4%95%E0%A5%87 पी सिंह #८ फोर्ब्स पत्रिका २००८] [[श्रेणी:भारतीय उद्योगपति]] [[श्रेणी:भारतीय व्यवसायी]] cklhnyymi01as4rf6scpzd9rcnxmtn2 विकिपीडिया:अनुरोधित लेख 4 262093 6586934 6583908 2026-07-17T21:47:15Z सिद्ध संदेश भारत 936756 /* */ 6586934 wikitext text/x-wiki । नमस्कार सिद्ध संदेश भारत क्या है , सिद्ध संदेश भारत एक सामाजिक डिजिटल प्लेटफॉर्म है , जिसमें समाज के साथ साथ सामाजिक जागरूकता, पर्यावरण,जल संरक्षण , वन्यजीवो के संरक्षण के लिए अपनी कलम प्रमुखता से चलाता है , सिद्ध संदेश भारत आज के जमाने में फैली सामाजिक कुरीतियो ,एंव‌ नशे जैसी प्रवृति के खिलाफ प्रमुखता से आवाज उठाता है , सिद्ध संदेश भारत का नाम राजस्थान की एक प्रसिद्ध गौरवशाली जाती सिद्ध से संबंधित भी है और सनातन धर्मग्रंथों के अनुसार सिद्ध का अर्थ सत्य, साधना से संबंधित भावार्थ भी है , सिद्ध संदेश हमेशा से समाज के साथ-साथ प्रकृति से भी जुड़ा है, श्री गुरु देव जसनाथ जी महाराज के उपदेशों को जन जन तक पहुंचाने का कार्य भी करता है , आज सिद्ध संदेश भारत सभी डिजीटल सोशल मीडिया प्लेटफॉर्म पर है , आप और ज्यादा जानकारी चाहते हो तो सिद्ध संदेश भारत को सबस्क्राइब फोलो करें , सभी डिजीटल प्लेटफॉर्म को धन्यवाद सिद्ध संदेश परिवार 1uq570vfh3m47fgcxvv8eatc5kqs3bf 6586936 6586934 2026-07-17T22:10:17Z Morkoz 929331 rv 6586936 wikitext text/x-wiki अगर हिन्दी [[विकिपीडिया]] पर किसी विषय पर लेख नहीं है, तो आप यहाँ पर उस लेख के लिए अनुरोध कर सकते हैं. अनुरोध करने से पहले निर्देश पढ़ें: # यह सुनिश्चित करें कि प्रस्तावित लेख का विषय [[विकिपीडिया:उल्लेखनीयता|उल्लेखनीय]] ([[:en:Wikipedia:Notability|Notable]]) है # प्रस्तावित लेख हिन्दी भाषा में होना चाहिए - किसी अन्य भाषा के लिए [[meta:List of Wikipedias|उस भाषा की विकीपीडिया]] देखें # प्रस्तावित लेख का नाम नीचे दिए गए उपयुक्त उप-पेज में जोड़ें: == अनुरोधित लेख == * [[विकिपीडिया:अनुरोधित लेख/0-9|0-9, ०-९]] * [[विकिपीडिया:अनुरोधित लेख/अ|अ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/आ|आ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/इ|इ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ई|ई]]{{*}} [[विकिपीडिया:अनुरोधित लेख/उ|उ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ऊ|ऊ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ए|ए]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ऐ|ऐ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ओ|ओ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/औ|औ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/अं|अं]]{{*}} [[विकिपीडिया:अनुरोधित लेख/अन्य अक्षर|अः]] * [[विकिपीडिया:अनुरोधित लेख/क|क और क्ष]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ख|ख]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ग|ग और ज्ञ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/घ|घ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/अन्य अक्षर|ङ]] * [[विकिपीडिया:अनुरोधित लेख/च|च]]{{*}} [[विकिपीडिया:अनुरोधित लेख/छ|छ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ज|ज और ज़]]{{*}} [[विकिपीडिया:अनुरोधित लेख/झ|झ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/अन्य अक्षर|ञ]] * [[विकिपीडिया:अनुरोधित लेख/ट|ट]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ठ|ठ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ड|ड]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ढ|ढ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/अन्य अक्षर|ण]] * [[विकिपीडिया:अनुरोधित लेख/त|त और त्र]]{{*}} [[विकिपीडिया:अनुरोधित लेख/थ|थ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/द|द]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ध|ध]]{{*}} [[विकिपीडिया:अनुरोधित लेख/न|न]] * [[विकिपीडिया:अनुरोधित लेख/प|प]]{{*}} [[विकिपीडिया:अनुरोधित लेख/फ|फ और फ़]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ब|ब]]{{*}} [[विकिपीडिया:अनुरोधित लेख/भ|भ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/म|म]] * [[विकिपीडिया:अनुरोधित लेख/य|य]]{{*}} [[विकिपीडिया:अनुरोधित लेख/र|र और ऋ]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ल|ल]]{{*}} [[विकिपीडिया:अनुरोधित लेख/व|व]] * [[विकिपीडिया:अनुरोधित लेख/श|श, ष और श्र]]{{*}} [[विकिपीडिया:अनुरोधित लेख/स|स]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ह|ह]] * [[विकिपीडिया:अनुरोधित लेख/क#क्ष|क्ष]]{{*}} [[विकिपीडिया:अनुरोधित लेख/त#त्र|त्र]]{{*}} [[विकिपीडिया:अनुरोधित लेख/ग|ज्ञ]] * [[विकिपीडिया:अनुरोधित लेख/अन्य अक्षर|ऑ, ऍ, ॐ, चिन्ह और अन्य अक्षर]] == इन्हें भी देखें == * [[विकिपीडिया:अनुवाद किये जाने हेतु लेखों की सूची]] [[श्रेणी:विकिपीडिया के अनुरोधित लेख| ]] j9djkr1lm5obd0m2na9vj6w0dvxctjb विकिपीडिया:पृष्ठ हटाने की नीति 4 442893 6586904 6560942 2026-07-17T17:42:13Z Pushkar Singh 415569 /* */ 6586904 wikitext text/x-wiki {{नीति|वि:हटाना|वि:हटाएँ}} विकिपीडिया पृष्ठों को प्रबंधक हटा सकते हैं। पृष्ठ हटाये जाने पर वह पृष्ठ और उसके सभी पुराने अवतरण अंतर्जाल पर दिखाई देना बन्द हो जाते हैं। हटाए गए पृष्ठों को प्रबंधक वापस ला सकते हैं। यह विकिपीडिया नीति हटाने की जगह कुछ विकल्प देती है जिन्हें पृष्ठ हटाने से पहले प्रयोग करने की कोशिश करनी चाहिए। यह नीति बताती है कि विकिपीडिया पृष्ठों को कब और किन कारणों से हटाया जा सकता है और हटाने की क्या-क्या प्रक्रियाएँ हैं। ==अन्य विकल्प== पृष्ठ हटाने की जगह कई विकल्प मौजूद हैं: *'''लेख को बेहतर बनाना''': यदि लेख का विषय ज्ञानकोश के अनुकूल है तो उसे बेहतर बनाया जा सकता है। *'''विलय करना''': यदि एक ही विषय पर एक से अधिक लेख बन गए हैं तो सभी लेखों को एक उचित नाम पर विलय करा जा सकता है। यदि किसी ऐसे विषय पर लेख बन गया हो जो स्वयं में सम्पूर्ण लेख जितना बड़ा नहीं है तो उसे किसी सम्बन्धित विषय के लेख में भाग के तौर पर विलय किया जा सकता है। *'''पुनर्निर्देशन''': यदि एक से अधिक ऐसे लेख बन गए हैं जिनमें हूबहू सामग्री है तो उन सबको एक ही लेख पर पुनर्निर्देशित करा जा सकता है। *'''अन्य प्रकल्प''': यदि पृष्ठ ज्ञानकोश के बजाए विकिमीडिया फाउन्डेशन के अन्य किसी प्रकल्प के अनुरूप है तो उसे हटाने से पहले उस प्रकल्प पर निर्यात कर देना चाहिए। *'''आर्काइविंग''': यदि पृष्ठ पर ऐसी सामग्री अथवा चर्चा हो जो भविष्य में काम आ सकती है, तो पृष्ठ को हटाने के बजाए उसका पुरालेख बना लेना चाहिए। ==शीघ्र हटाना== {{Shortcut|वि:शीह}} पृष्ठों को निम्न कारणों से बिना किसी मत के शीघ्र हटाया जा सकता है: ===वैश्विक मापदंड=== ये मापदंड विकिपीडिया पर सभी प्रकार के पृष्ठों, अर्थात सभी नामस्थानों पर लागू होते हैं: {| class="wikitable sortable" |- ! कूट !! मापदंड !! व्याख्या |- || {{anchor|व१|व1|अर्थहीन|अर्थ हीन}} व1. || अर्थहीन नाम अथवा सम्पूर्णतया अर्थहीन सामग्री वाले पृष्ठ || इसमें वे पृष्ठ आते हैं जिनका नाम अर्थहीन है, उदाहरण:"स्द्ग्फ्द्ग"; अथवा जिनमें सामग्री अर्थहीन है, चाहे उसका नाम अर्थहीन न हो, उदाहरण:लेख जिसमें सामग्री है:"ध्ब्द्फ्ह्फ़" |- || {{anchor|व२|व2|परिक्षण|परीक्षण}} व2. || परीक्षण पृष्ठ || इसमें वे पृष्ठ आते हैं जिन्हें ''परीक्षण'' के लिये बनाया गया है, अर्थात यह जानने के लिये कि सचमुच सदस्य वहाँ बदलाव कर सकता है या नहीं। इस मापदंड के अंतर्गत सदस्यों के उपपृष्ठ नहीं आते। |- || {{anchor|व३|व3|बर्बरता}} व3. || साफ़ बर्बरता || इस मापदंड के अंतर्गत ऐसे पृष्ठ आते हैं जिनपर केवल बर्बरता हो। इसमें केवल वही पृष्ठ आते हैं जिनके इतिहास में बर्बरता मुक्त कोई भी अवतरण न हो। |- || {{anchor|व४|व4|धोखा}} व4. || साफ़ धोखा || इस मापदंड के अंतर्गत वे पृष्ठ आते हैं जिनपर धोखा साफ़-साफ़ दिखाई दे रहा हो। |- || {{anchor|व५|व5|खाली|ख़ाली}} व5. || ख़ाली पृष्ठ || इसमें वे सभी पृष्ठ आते हैं जिनमें कोई सामग्री नहीं है, और न ही किसी पुराने अवतरण में थी। यद्यपि यदि ऐसे पृष्ठ अगर किसी ऐसे विषय पर हों जिसपर पृष्ठ बन सकता है तो उसमें सामग्री डालने की कोशिश करनी चाहिए, परंतु ऐसा करना अनिवार्य नहीं है। ऐसे पृष्ठों को इस मापदंड के अंतर्गत हटाया जा सकता है। |- || {{anchor|व६|व6|कॉपीराइट|कॉपीराइट उल्लंघन}} व6. || साफ़ कॉपीराइट उल्लंघन || इस मापदंड में वे सभी पृष्ठ आते हैं जो साफ़ तौर पर कॉपीराइट उल्लंघन हैं और जिनके इतिहास में उल्लंघन से मुक्त कोई भी अवतरण नहीं है। जिन पृष्ठों के इतिहास में कोई भी कॉपीराइट उल्लंघन मुक्त अवतरण हो उन्हें इस मापदंड के अंतर्गत नहीं हटाया जा सकता, बलकी उन्हें उस अवतरण पर पूर्ववत कर दिया जाना चाहिए। इसमें वे पृष्ठ भी आते हैं जिनपर डाली गई सामग्री का कॉपीराइट स्वयं उसी सदस्य के पास है और सदस्य ने उसका पहला प्रकाशन किसी मुक्त लाइसेंस के अंतर्गत नहीं किया है। |- || {{anchor|व६ल|व6ल|कॉपीराइट लेख}} व6ल. || लेख || इसमें वे लेख भी आते हैं जिन्हें किसी अन्य वेबसाईट अथवा ब्लॉग से ज्यों-का-त्यों अथवा बहुत कम बदलावों के साथ कॉपी-पेस्ट कर के बनाया गया है। |- || {{anchor|व६फ़|व६फ|व6फ|व6फ़|कॉपीराइट फ़ाइल|कॉपीराइट फाइल|कॉपीराइट चित्र}} व6फ़. || फ़ाइलें || वे सभी फ़ाइलें जो अंतरजाल पर किसी ऐसी वेबसाइट से लिये गए हैं जो साफ़-साफ़ फ़ाइल को मुक्त लाइसेंस के अंतर्गत नहीं देती है। इस मापदंड के अंतर्गत वे फ़ाइलें नहीं आती हैं जो कॉपीराइट द्वारा सुरक्षित हैं और उचित उपयोग(fair use) के अंतर्गत विकिपीडिया पर स्रोत, कॉपीराइट जानकारी और उचित उपयोग औचित्य सहित हैं। परंतु, यदि कॉपीराइट चित्रों पर उचित उपयोग औचित्य नहीं दिया है तो उन्हें इस मापदंड के अंतर्गत हटाया जा सकता है। अंतरजाल पर उपलब्ध फ़ाइलें आम तौर पर कॉपीराइट होती हैं और जब तक स्रोत वेबसाईट पर साफ़ तौर पर न कहा गया हो अथवा फ़ाइल का कॉपीराइट समाप्त न हो गया हो, अंतर्जाल से ली गई फ़ाइलें कॉपीराइट मानी जायेंगी और इस मापदंड के अंतर्गत आएँगी। इसमें वे सभी फ़ाइलें भी आती हैं जिनपर साफ़-साफ़ गलत लाइसेंस का प्रयोग किया गया है। उदाहरण:किसी फ़िल्म के पोस्टर को अपना स्वयं बनाया कार्य कहना, या किसी मुक्त लाइसेंस के अंतर्गत अपलोड करना। |- || {{anchor|व६स|व6स|कॉपीराइट सदस्य|कॉपीराइट सदस्य पृष्ठ}} व6स. || सदस्य पृष्ठ || सदस्य अपने सदस्य पृष्ठ, वार्ता पृष्ठ अथवा किसी उपपृष्ठ पर कॉपीराइट सामग्री नहीं रख सकते और ऐसे पृष्ठों को शीघ्र हटाया जा सकता है। इसमें ऐसे पृष्ठ भी आते हैं जिनमें मुख्य रूप से "ग़ैर मुक्त उचित उपयोग चित्रों" की दीर्घा(गैलरी) हो, क्योंकि ऐसे चित्रों का सदस्य नामस्थान में प्रयोग विकिपीडिया की नीतियों के विरुद्ध है। मुक्त चित्रों की दीर्घा इस मापदंड के अंतर्गत नहीं हटाई जा सकती। |- || {{anchor|व७|व7|प्रचार}} व7. || साफ़ प्रचार || इस मापदंड में वे सभी पृष्ठ आते हैं जिनमें केवल प्रचार है, चाहे वह किसी व्यक्ति-विशेष का हो, किसी समूह का, किसी प्रोडक्ट का, अथवा किसी कंपनी का। इसमें प्रचार वाले केवल वही लेख आते हैं जिन्हें ज्ञानकोश के अनुरूप बनाने के लिये शुरू से दोबारा लिखना पड़ेगा। यदि लेख के इतिहास में कोई ऐसा अवतरण है जो कि पूर्णतया प्रचार नहीं था और जिसमें कुछ जानकारी ज्ञानकोश के अनुरूप भी थी, तो उन लेखों को इस मापदंड के अंतर्गत नहीं हटाया जा सकता, बल्की उन्हें उस अवतरण पर पूर्ववत कर दिया जाना चाहिए। |} ===लेख=== ;{{anchor|ल१|ल1|अन्य भाषा}} ल1. पूर्णतया अन्य भाषा में लिखे लेख इसमें वे लेख आते हैं जो पूर्णतया हिन्दी के अलावा किसी और भाषा में लिखे हुए हैं, चाहे उनका नाम हिन्दी में हो या किसी और भाषा में। ;{{anchor|ल२|ल2|प्रचार}} {{gray|ल2. साफ़ प्रचार}} {{gray|'''लागू नहीं:''' इसकी जगह आम कारण व7 ले चुका है।}} <!-- इसमें वे सभी पृष्ठ आते हैं जिनमें केवल प्रचार है, चाहे वह किसी व्यक्ति-विशेष का हो, किसी समूह का, किसी प्रोडक्ट का, अथवा किसी कंपनी का। इसमें प्रचार वाले केवल वही लेख आते हैं जिन्हें ज्ञानकोश के अनुरूप बनाने के लिये शुरू से दोबारा लिखना पड़ेगा। यदि लेख के इतिहास में कोई ऐसा अवतरण है जो कि पूर्णतया प्रचार नहीं था और जिसमें कुछ जानकारी ज्ञानकोश के अनुरूप भी थी, तो उन लेखों को इस मापदंड के अंतर्गत नहीं हटाया जा सकता, बलकी उन्हें उस अवतरण पर पूर्ववत कर दिया जाना चाहिए।--> ;{{gray|ल3. उल्लेखनीय न होना}} {{gray|'''लागू नहीं:''' आम सहमति के अभाव में हटा दिया गया।}} <span style="color:gray">([https://hi.wikipedia.org/w/index.php?diff=1555903 अंतर])</span> ;{{anchor|ल४|ल4|प्रतिलिपि}} ल4. प्रतिलिपि लेख इस मापदंड के अंतर्गत वो लेख आते हैं जो किसी पुराने लेख की प्रतिलिपि हैं। इसमें वे लेख भी आते हैं जो किसी ऐसे विषय पर बनाए गए हैं जिनपर पहले से लेख मौजूद है और पुराना लेख नए लेख से बेहतर है। ऐसे पृष्ठों को इस मापदंड के अंतर्गत केवल तभी हटाया जाना चाहिए यदि उन्हें पुनर्निर्देशित करना संभव न हो। उदाहरण:यदि किसी बहुविकल्पी नाम वाले पृष्ठ पर संभव विषयों में से किसी एक विषय का पृष्ठ बना दिया जाए। या फिर किसी गलत नाम से लेख बना दिया जाए, जैसे [[विकिपीडिया]] पर [[विकिमीडिया फाउन्डेशन]] पर लेख। ;{{anchor|ल५|ल5|खराब अनुवाद|खराब मशीनी अनुवाद}} ल5. खराब मशीनी अनुवाद इस मापदंड के अंतर्गत ऐसे लेख आते हैं जो किसी अन्य भाषा की विकिपीडिया पर बने लेख का मशीनी अनुवाद करके अथवा किसी भी अन्य प्रकार से अत्यधिक खराब रूप में अनूदित करके निर्मित हैं और अनुवाद इतना ख़राब है कि उसे सुधारने की जगह पुनर्लेखन अथवा पुनः अनुवाद अधिक उचित है। ===फ़ाइलें=== ;{{anchor|फ१|फ़१|फ1|फ़1|लाइसेंस}} फ़1. 14 दिन(2 सप्ताह) से अधिक समय तक कोई लाइसेंस न होना इसमें वे सभी फाइलें आती हैं जिनमें अपलोड होने से दो सप्ताह के बाद तक भी कोई लाइसेंस नहीं दिया गया है। ऐसा होने पर यदि फ़ाइल पुरानी होने के कारण सार्वजनिक क्षेत्र(पब्लिक डोमेन) में नहीं होगी, तो उसे शीघ्र हटा दिया जाएगा। ;{{anchor|फ़२|फ२|फ़2|फ2|कॉमन्स|कॉमंस}} फ़2. चित्र का विकिमीडिया कॉमन्स पर स्रोत और लाइसेंस जानकारी सहित उपलब्ध होना इसमें वे सभी फ़ाइलें आएँगी जो विकिमीडिया कॉमन्स पर उसी नाम अथवा किसी और नाम से उपलब्ध हैं, क्योंकि कॉमन्स की फाइलों को विकिपीडिया पर सीधे प्रयोग किया जा सकता है और वे अन्य प्रकल्पों पर भी प्रयोग की जा सकती हैं। जो फ़ाइलें किसी और नाम से उपलब्ध हैं, उन्हें हटाने से पहले उनकी जगह कॉमन्स की फ़ाइल का प्रयोग करना होगा। यदि कॉमन्स की स्रोत जानकारी गलत हो, जैसे वह फ़ाइल हिन्दी विकिपीडिया पर कॉमन्स से पहले किसी और सदस्य ने अपना स्वयं का कार्य अपलोड किया हो, तो ऐसी फ़ाइल को हटाने से पहले कॉमन्स पर दी स्रोत जानकारी ठीक करनी अथवा करवानी अनिवार्य है। ;{{anchor|फ़३|फ३|फ3|फ़3|अप्रयुक्त अमुक्त|अप्रयुक्त गैर मुक्त|अप्रयुक्त ग़ैर मुक्त}} फ़3. अप्रयुक्त ग़ैर मुक्त उचित उपयोग फ़ाइल इस मापदंड के अंतर्गत वे फ़ाइलें आती हैं जो कॉपीराइट सुरक्षित हैं और उचित उपयोग हेतु विकिपीडिया पर डाली गई हैं, परंतु जिनका कोई उपयोग न किया जा रहा है और न ही होने की संभावना है। जो चित्र किसी ऐसे लेख के लिये अपलोड किये गए हैं जो बनाया जाना है, उन्हें इस मापदंड के अंतर्गत तभी हटाया जा सकता है यदि उनके अपलोड होने के 7 दिन पश्चात तक वो लेख न बने। ;{{anchor|फ़४|फ़4|फ४|फ4|औचित्य|उपयोग औचित्य}} फ़4. ग़ैर मुक्त उचित उपयोग उपयोग फ़ाइल जिसपर कोई उचित उपयोग औचित्य न दिया हो ऐसी कॉपीराइट सुरक्षित फ़ाइलें जिनपर 7 दिन तक कोई उचित उपयोग औचित्य न दिया हो, उन्हें इस मापदंड के अंतर्गत हटाया जा सकता है। ऐसे चित्रों को हटाने से पहले यह कोशिश करनी चाहिए कि उनको हटाने के बजाए उनपर उचित उपयोग औचित्य लगाए जाएँ, परंतु ऐसा करना हटाने के लिये नामांकित करने वाले अथवा हटाने वाले सदस्य की ज़िम्मेदारी नहीं है। ;{{anchor|फ५|फ5|फ़५|फ़5|मुक्त विकल्प}} फ़5. ग़ैर मुक्त फ़ाइलें जिनका मुक्त विकल्प उपलब्ध हो इस मापदंड के अंतर्गत वे फ़ाइलें आती हैं जो ग़ैर मुक्त हैं और जिनका कोई मुक्त विकल्प उपलब्ध है। यह आवश्यक नहीं कि मुक्त विकल्प हूबहू वही फ़ाइल हो। उदाहरण: यदि किसी व्यक्ति का मुक्त चित्र उपलब्ध है, तो उसके ग़ैर मुक्त चित्र इस मापदंड के अंतर्गत हटाए जा सकते हैं। ;{{anchor|फ़६|फ़६|फ6|फ6|फ़ालतू|फालतू}} फ़6. फ़ालतू फ़ाइलें इस मापदंड के अंतर्गत वे फ़ाइलें आती हैं जिनका कोई प्रयोग नहीं हो रहा है और जिनका कोई ज्ञानकोशीय प्रयोग नहीं किया जा सकता है। इसमें चित्र, ध्वनियाँ एवं वीडियो फ़ाइलें नहीं आती हैं। ===साँचे=== ;{{anchor|सा१|सा1}} सा1. अप्रयुक्त साँचे जिनकी जगह किसी बेहतर साँचे ने ले ली है इसके अंतर्गत वे सभी साँचे आते हैं जो अब प्रयोग में नहीं हैं और जिनकी जगह उनसे बेहतर किसी साँचे ने ले ली है। यदि नए साँचे के बेहतर होने पर विवाद हो, अथवा साँचा प्रयोग में हो तो नीचे दी [[#हटाने हेतु चर्चा|हटाने हेतु चर्चा]] प्रक्रिया का प्रयोग करें। ===सदस्य पृष्ठ=== ;{{anchor|स१|स1|अनुरोध|सदस्य अनुरोध}} स1. सदस्य अनुरोध यदि सदस्य अपने सदस्य पृष्ठ, वार्ता पृष्ठ अथवा किसी उपपृष्ठ को हटाने का स्वयं अनुरोध करता है तो उस पृष्ठ को शीघ्र हटाया जा सकता है। ;{{anchor|स२|स2|अस्तित्व|अस्तित्वहीन|अस्तित्वहीन सदस्य}} स2. अस्तित्वहीन सदस्यों के सदस्य पृष्ठ अथवा उपपृष्ठ ऐसे सदस्यों के पृष्ठ, वार्ता पृष्ठ अथवा उपपृष्ठ जो विकिपीडिया पर पंजीकृत नहीं हैं; इस मापदंड के अंतर्गत शीघ्र हटाए जा सकते हैं। ;{{anchor|स३|स3|दुरुपयोग|वेब होस्ट}} स3. वेब होस्ट के रूप में विकिपीडिया का स्पष्ट दुरुपयोग सदस्य स्थान में पृष्ठ ऐसे [[वि:वेबसाईटनहीं|लेखन, जानकारी, चर्चा, और/या गतिविधियों से मिलकर बना है जिसका विकिपीडिया के लक्ष्यों से बारीकी से संबंध नहीं]], जहाँ स्वामी ने सदस्य स्थान के बाहर बहुत कम या कोई संपादन नहीं किया है। मुमकिन ड्राफ्ट और [[वि:सपृ#मेरे सदस्य पृष्ठों में क्या हो सकता है?]] का पालन कर रहे पृष्ठ इस मापदंड के अपवाद है। ==हटाने हेतु चर्चा== जो भी पृष्ठ ऊपर दिये गए मापदंडों के अंतर्गत नहीं आते, उन्हें हटाने के लिये इस प्रक्रिया का प्रयोग किया जाना चाहिए। इस प्रक्रिया के अंतर्गत पृष्ठ को [[विकिपीडिया:पृष्ठ हटाने हेतु चर्चा]] पर हटाने के लिये नामांकित करें। वहाँ पृष्ठ को हटाने पर चर्चा की जाएगी और सदस्य मिलकर यह फैसला करेंगे के पृष्ठ को विकिपीडिया पर रखा जाना चाहिए या नहीं। ऐसी चर्चा में केवल मत नहीं गिने जाते बल्कि उनके पीछे के तर्कों पर भी ध्यान दिया जाता है। यहाँ पर चर्चा के पश्चात यदि फ़ैसला पृष्ठ को हटाने का हो तो उसे हटा दिया जाएगा और हटाने की चर्चा [[विकिपीडिया:पृष्ठ हटाने हेतु चर्चा]] के पुरालेख में डाल दी जाएगी। इससे यदि उस पृष्ठ को फिर कभी बनाने की बात आती है, तो उसे पहले हटाने का कारण पता चल जाएगा। यहाँ पर लेख को नामांकित करने के आम कारण हो सकते हैं: *लेख की निष्पक्षता अत्यंत विवादित होना *लेख के विषय की उल्लेखनियता विवादित होना *अत्यंत विशिष्ट नाम की श्रेणी होना जिसमें अधिक लेख होने की संभावना न हो *ग़ैर मुक्त फ़ाइल के उचित उपयोग के औचित्य पर विवाद होना ==सहायक कड़ियाँ== *[[:श्रेणी:शीघ्र हटाने हेतु साँचे]]: इस श्रेणी में शीघ्र हटाने के मापदंडों से सम्बन्धित सभी साँचे हैं *[[:श्रेणी:शीघ्र हटाने योग्य पृष्ठ]] *[[:श्रेणी:विकिनीतियाँ]]: इस श्रेणी में हिन्दी विकिपीडिया पर लागू सभी नीतियाँ हैं *[[विकिपीडिया:शैली मार्गदर्शक]]: अच्छे लेख लिखने हेतु सहायता {{शीघ्र हटाने सम्बंधित साँचे}} {{विकिनीतियाँ और दिशानिर्देश}} [[श्रेणी:विकिनीतियाँ]] myyogmhb7vr8euwp69hk2clmsq173g0 महात्मा ज्योतिबा फुले रुहेलखण्ड विश्वविद्यालय 0 479228 6586997 6578637 2026-07-18T06:06:09Z ~2026-40487-07 936790 6586997 wikitext text/x-wiki {{infobox university |name= महात्मा ज्योतिबा फुले रुहेलखंड विश्वविद्यालय |image= [[चित्र:MJP Rohilkhand University Gate.jpg|thumb|रुहेलखंड विश्वविद्यालय का मुख्य द्वार]] |location= [[बरेली]], [[उत्तर प्रदेश]], [[भारत]] |chancellor= [[राज्यपाल]], [[उत्तर प्रदेश]] |vice_chancellor= [[कृष्ण पाल सिंह | प्रो. के. पी. सिंह]] |established= 1975 |motto= चरैवेति चरैवेति |type= [[राज्य विश्वविद्यालय | राजकीय]] |affiliation= [[विश्वविद्यालय अनुदान आयोग| यूजीसी]], [[ भारतीय विधिज्ञ परिषद | बीसीआई]], [[राष्ट्रीय मूल्यांकन एवं प्रत्यायन परिषद | नैक]] |website= [https://mjpru.ac.in mjpru.ac.in] }} '''महात्मा ज्योतिबा फुले रुहेलखण्ड विश्वविद्यालय''' ([[अंग्रेज़ी भाषा|अंग्रेजी]]: M. J. P. Rohilkhand University) की स्थापना 1975 में एक सम्बद्ध [[विश्वविद्यालय]] के रूप में की गयी थी। यह NAAC A++ मान्यता प्राप्त है, आईएसओ 9001:2015 और 14001:2015 प्रमाणित विश्वविद्यालय है। लगभग दो सौ छ्ह एकड में बना यह आवासीय विश्वविद्यालय [[बरेली]] शहर से थोडा हटकर बरेली-[[पीलीभीत]] मार्ग पर स्थित है। इस विश्वविद्यालय से सम्बद्ध महाविद्यालय पश्चिमी उत्तर प्रदेश के नौ जिलों में फैले हुए हैं, जिनका क्षेत्रफल 31,287 वर्ग किलोमीटर है तथा जिनकी जनसंख्या तीस मिलियन से अधिक है (2011 की जनगणना के अनुसार 2,74,35,583)<ref>{{Cite web|url=https://viralnewshindi.in/mjpru-admit-card/|title=MJPRU Admit Card 2024 For All Courses Rohilkhand University Admit Card|last=ViralNewsHindiTeam|first=Admin|website=Viral News Hindi|access-date=23 जून 2024|archive-date=23 जून 2024|archive-url=https://web.archive.org/web/20240623112405/https://viralnewshindi.in/mjpru-admit-card/|url-status=dead}}</ref> ([[बरेली]], [[बदायूं]], [[पीलीभीत]], [[शाहजहांपुर]], [[मुरादाबाद]], [[संभल]], [[रामपुर]], [[बिजनौर]], [[अमरोहा]])के 500+ महाविद्यालय संबद्धित हैं। ==इतिहास== इसकी स्थापना 1975 में हुई थी, तत्कालीन [[डॉ॰ भीमराव आंबेडकर विश्वविद्यालय|आगरा विश्वविद्यालय]] इस क्षेत्र की साक्षरता दर में आवश्यकता के अनुरूप बृद्धि करने की सामर्थ्य नहीं रखता था। अत: राष्ट्रीय साक्षरता दर के स्तर पर लाने की दृष्टि से इस विश्वविद्यालय की नींव रखी गयी। सन् 1985 में जब चार विभाग इसमें और बढाने पडे तब इसे आवासीय विश्वविद्यालय का दर्जा प्रदान किया गया। इसके बाद 1987 में तीन विभाग इसमें और बढ गये। अगस्त 1997 में महात्मा ज्योतिबा फुले के साथ जोडते हुए इसका नाम बदलकर '''एम०जे०पी० रुहेलखण्ड विश्वविद्यालय''' कर दिया गया। इसका इंजीनियरिंग विभाग भी बहुत पुराना है और यह इंजीनियरिंग विभाग मे 29th रैंक हासिल की है ई उल्लेखनीय पूर्व छात्र * [[गुलाबो देवी]], मंत्री - उत्तर प्रदेश सरकार * [[संतोष गंगवार]],राजनेता * [[विनोद कापरी]], फिल्म निर्माता * [[सलोना कुशवाहा]], राजनेता * [[मोहम्मद शमी]], क्रिकेटर * [[धर्म पाल सिंह]], [[विधायक]] - [[आंवला]] * [[राजपाल यादव]], अभिनेता * [[संजीव अग्रवाल]], [[विधायक]] - बरेली कैंट * [[राजेश अग्रवाल]], राजनेता * [[जावेद अली खान]], राजनेता * [[यज्ञ दत्त शर्मा]], प्रोफेसर * [[राहुल जोहरी]], बीसीसीआई अध्यक्ष * [[छत्रपाल सिंह]], सांसद - [[बरेली]] == बाहरी कड़ियाँ == * [https://web.archive.org/web/20190827034035/http://mjpru.ac.in/ रुहेलखण्ड विश्वविद्यालय का आधिकारिक जालस्थल] * [https://web.archive.org/web/20120419005631/http://rohilkhanduniversity.org/ ज्योतिबा फुले रुहेलखण्ड विश्वविद्यालय] {{उत्तर प्रदेश के विश्वविद्यालय}} [[श्रेणी:बरेली]] [[श्रेणी:उत्तर प्रदेश में विश्वविद्यालय और कॉलेज]] [[श्रेणी:महात्मा ज्योतिबा फुले रुहेलखण्ड विश्वविद्यालय]] 8br7kyl9x1d3kxbjnz6tjsuc6kq05h7 कृष्णमृग 0 499577 6586758 6045134 2026-07-17T14:19:43Z InternetArchiveBot 500600 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 6586758 wikitext text/x-wiki {{Taxobox | name = ''कृष्णमृग<br><small>Blackbuck</small><br><small>काला हिरण</small>'' | image = Black Buck.jpg | status = NT | status_system = iucn3.1 | status_ref =<ref name=iucn>{{IUCN2008 | assessors = Mallon, D.P.| year = 2008 | id = 1681 | title = Antilope cervicapra | downloaded = 18 फ़रवरी 2012}}Database entry includes justification for why this species is near threatened</ref> | regnum = [[जंतु]] | phylum = [[रज्जुकी]] (Chordata) | classis = [[स्तनधारी]] (Mammalia) | ordo = [[द्विखुरीयगण]] (Artiodactyla) | ordo =​ [[सम-ऊँगली खुरदार|आर्टियोडैकटिला]] <small>(Artiodactyla)</small> | infraordo = पेकोरा <small>(Pecora)</small> | familia = [[बोविडाए]] <small>(Bovidae)</small> | subfamilia = [[ऐंटीलोपिनाए]] <small>(Antilopinae)</small> | genus = [[कृष्णमृग|ऐंटीलोप]] <small>(Antilope)</small> | genus_authority = पाल्लास, 1766 | species = '''''ए. सर्विकापरा''''' <small>(A. cervicapra)</small> | binomial = ''ऍन्टिलोप सर्विकापरा'' | binomial_authority = ([[:en:Carl Linnaeus|लिनेअस]],1758) | subdivision_ranks = [[जीववैज्ञानिक जाति|उपजाति]] | subdivision = ''ऍन्टीलोप सर्विकापरा सँट्रॅलिस''<br />''ऍन्टीलोप सर्विकापरा सर्विकापरा''<br />''ऍन्टीलोप सर्विकापरा राजपुतानी''<br />''ऍन्टीलोप सर्विकापरा रुपिकापरा'' }} '''कृष्णमृग''' (Blackbuck) या '''काला हिरण''', जिसे '''भारतीय ऐंटीलोप''' (Indian antelope) भी कहा जाता है, [[भारतीय उपमहाद्वीप]] में पाई जाने वाली [[ऐंटीलोप]] की एक [[जीववैज्ञानिक जाति]] है। यह ऐसे [[घासभूमियों]] और हलके वनित क्षेत्रों में मिलता है जहाँ जल सदैव उपलब्ध हो। कंधे पर इसकी ऊँचाई 74 से 84 सेमी (29 से 33 इंच) होती है। नरों का भार 20–57 किलो और मादाओं का 20–33 किलो होता है। नरों के सिर पर 35–75 सेमी (14–30 इंच) लम्बे [[सींग]] होते हैं, हालांकि मादाओं पर भी यह कभी-कभी पाए जा सकते हैं। मुख पर काली धारियाँ होती हैं लेकिन ठोड़ी पर और आँखों के इर्दगिर्द श्वेत रंग होता है। नरों के शरीर पर दो रंग दिखते हैं - धड़ और टांगो का बाहरी भाग काला या गाढ़ा भूरा और छाती, पेट व टांगों का अंदरी भाग श्वेत होता है। मादाएँ और बच्चे पूरे भूरे-पीले रंगों के होते हैं। कृष्णमृग ऐंटीलोप [[वंश (जीवविज्ञान)|जीववैज्ञानिक वंश]] की एकमात्र जाति है और इसकी दो ऊपजातियाँ मानी जाती हैं।<ref>Krishna, N. (2010). Sacred Animals of India. New Delhi, India: Penguin Books India. ISBN 9780143066194.</ref><ref> Rebholz, W.; Harley, E. (July 1999). "Phylogenetic relationships in the bovid subfamily Antilopinae based on mitochondrial DNA sequences". Molecular Phylogenetics and Evolution. 12 (2): 87–94. doi:10.1006/mpev.1998.0586. PMID 10381312.</ref> == विवरण == 20-30 कृष्णमृग एक दैनंदिनी एनलॉप है (मुख्य रूप से दिन के दौरान सक्रिय)। तीन प्रकार के समूह, आम तौर पर छोटी, मादाएं, पुरुष और स्नातक झुंड होते हैं। नर अक्सर संभोग के लिए महिलाओं को जुटाने के लिए एक रणनीति के रूप में लेकिंग नामक तरिके को अपनाते हैं। इनके इलाकें में अन्य नरों को अनुमति नहीं होती है, मादाएं अक्सर इन स्थानों पर भोजन के लिये घूमने आती हैं। पुरुष इस प्रकार उनके साथ संभोग का प्रयास कर सकते हैं। मादाएं आठ महीनों में यौन के लिए परिपक्व हो जाती हैं, लेकिन संभोग दो साल से पहले नहीं करती हैं। नर करीब 1-2 वर्ष मे परिपक्व होते है। संभोग पूरे वर्ष के दौरान होता है। गर्भावस्था आम तौर पर छह महीने लंबी होती है, जिसके बाद एक बछड़ा पैदा होता है। जीवन काल आमतौर पर 10 से 15 साल होती है। कृष्णमृग घास के मैदानों और थोड़ा जंगलों के क्षेत्रों में पाएँ जाते हैं। पानी की अपनी नियमित आवश्यकता के कारण, वे उन जगहों को पसंद करते हैं जहां पानी पर्याप्त मात्रा मे उपलब्ध हो। यह मृग मूलतः भारत में पाया जाता है, जबकि बांग्लादेश में यह विलुप्त हो गया है। इनके केवल छोटे, बिखरे हुए झुंड आज ही देखे जाते हैं, तथा बड़े झुंड बड़े पैमाने पर संरक्षित क्षेत्रों तक ही सीमित होते हैं। 20 वीं शताब्दी के दौरान, अत्यधिक शिकार, वनों की कटाई और निवास स्थान में गिरावट के चलते काले हिरन की संख्या में तेजी से गिरावट आई है। ब्लैकबक अर्जेंटीना और संयुक्त राज्य अमेरिका में पाये जाते हैं। भारत में, 1972 के वन्यजीव संरक्षण अधिनियम के अनुसूची I के तहत कृष्णमृग का शिकार निषिद्ध है। हिंदू धर्म में कृष्णमृग का बहुत महत्व है; भारतीय और नेपाली ग्रामीणों ने मृग को नुकसान नहीं पहुंचाया। == शारिरिक विशेषता == [[File:Antilope cervicapra 03.JPG|thumb|224px|नर]] [[File:Antilope cervicapra 02.JPG|thumb|224px|मादा]] कृष्णमृग यह कंधे पर 74 से 84 सेमी (2 9 से 33 इंच) ऊंचें होते हैं। नर 20-57 किलोग्राम (44-126 पौंड) वजन के होते हैं, औसतन 38 किलोग्राम (84 एलबी)। मादाएओं की औसत वजन 20-33 किलोग्राम (44-73 पौंड) या औसतन 27 किलोग्राम (60 एलबी) की होती है। लम्बी, चक्कर वाली सींग, 35-75 सेंटीमीटर (14-30 इंच) लंबे, आमतौर पर नर पर ही मौजूद होते हैं, हालांकि टेक्सास में दर्ज की गई अधिकतम सींग की लंबाई 58 सेंटीमीटर (23 इंच) से अधिक नहीं है शंकु एक "वी" जैसा आकार बनाते हैं। भारत में, सींग देश के उत्तरी और पश्चिमी हिस्सों के नमूने में लंबे और अधिक भिन्न होते हैं। यद्यपि मादाएं मे भी सींग विकसित हो सकती है। ठोड़ी पर और आंखों के चारों ओर सफेद फर चेहरे पर काली पट्टियों के साथ साफ प्रतीत होता है। नर की चमड़ी दो रंग की दिखाती है जबकि ऊपरी हिस्से और पैर के बाहरी हिस्से काले भूरे रंग के होते हैं, नीचे और पैरों के अंदर के सभी हिस्से सफेद होते हैं। दूसरी तरफ, मादाएं और किशोर पिेले रंग के होते हैं। कृष्णमृग गोजेलों के साथ एक समानता का सामना करते हैं, और यह मुख्य रूप से इस तथ्य से अलग हैं कि जब गोजल पृष्ठीय भागों में भूरे रंग के होते हैं, तो कृष्णमृग इन भागों में गहरे भूरे या काले रंग का रंग विकसित करता है। [[नर]] और [[लिंग|मादा]] अलग-अलग रंग के होते हैं। इसकी कद-काठी इस प्रकार है: * लंबाई - १००-१५० से.मी. * कंधे तक ऊँचाई - ६०-८५ से.मी. * पूँछ की लंबाई - १०-१७ से.मी. * वज़न - २६-३५ कि. इसके सींग में छल्लों जैसे उभार होते हैं। इसके सींग पेंचदार होते हैं जिनके १-४ घुमाव होते हैं। अमूमन ४ से अधिक घुमाव नहीं पाये जाते हैं। सींगों की लंबाई ७९ से.मी. तक हो सकती है। नर में ऊपरी शरीर का रंग काला (या गाढ़ा भूरा) होता है। निचले शरीर का रंग और आँख के चारों तरफ़ सफ़ेद होता है। मादा हल्के भूरे रंग की होती है। == आवास और आदत == [[File:Blackbucks ranebennur.jpg|thumb|224px|राणेबेन्नूर कृष्णमृग अभयारण्य में कृष्णमृग (कर्नाटक, भारत)]] [[File:Pair of blackbucks!.jpg|thumb|224px|रेहेकुरी कृष्णमृग अभयारण्य में काले हिरन की जोड़ी (महाराष्ट्र, भारत)]] [[File:Blackbuck 2.jpg|thumb|224px|काले हिरन घास वाले मैदानों को पसंद करते हैं।]] कृष्णमृग भारतीय उपमहाद्वीप के मूल निवासी है, लेकिन बांग्लादेश में विलुप्त हो गया है। नेपाल में, कृष्णमृग की अंतिम जीवित आबादी बर्दिया राष्ट्रीय उद्यान के दक्षिण में कृष्णमृग संरक्षण क्षेत्र में स्थित है। 2008 में, आबादी का अनुमान 184 था। पाकिस्तान में, कृष्णमृग कभी-कभी भारत के साथ सीमा पर होते हैं और लाल सुहाना राष्ट्रीय उद्यान में एक बंदी आबादी कायम होती है। कृष्णमृग घास के मैदानों और पतले जंगलों के इलाकों में निवास करता है जहां रोजाना पानी के स्रोत अपने दैनिक पीने के लिए उपलब्ध हैं। हेर्ड पानी पाने के लिए लंबी दूरी की यात्रा करते हैं। Scrublands चारा और कवर का एक अच्छा स्रोत हैं। ठंडे मौसम कालेब के अनुरूप नहीं हैं। ब्रिटिश प्रकृतिविद विलियम थॉमस बॉनफोर्ड ने उनके 1891 में ब्रिटिश भारत के सफ़ेद वंश, जिसमें सीलोन और बर्मा शामिल थे, में कालेब की श्रेणी का वर्णन किया है: {{quote|पंजाब से नेपाल तक हिमालय के आधार पर, और प्रायः प्रायद्वीप के अधिकांश हिस्सों में जहां देश को जंगली और पहाड़ी है, लेकिन घने जंगल में नहीं ... यह राजपूताना के जंगली हिस्सों में आम है, बंबई प्रेसीडेंसी में , मध्य प्रांत, और मद्रास के उत्तरी हिस्सों, छत्तीसगढ़ में पूर्व में चुटिया नागपुर [चींटी], बंगाल और उड़ीसा और दक्षिण में मैसूर में कम प्रचुर मात्रा में हैं, लेकिन यह कभी-कभी बाद के राज्य में होता है, और इसे देखा गया है निलगिरी और पलानी पहाड़ियों पर यह सीलोन और बंगाल की खाड़ी के पूर्व में अज्ञात है}} आज, केवल छोटे, बिखरे हुए झुंड को देखा जाता है जो काफी हद तक संरक्षित क्षेत्रों तक ही सीमित है। 1932 में एडवर्ड्स पठार में टेक्सास में मृग पेश किया गया था। 1988 तक, आबादी में वृद्धि हुई थी और चित्तिल के बाद टेक्सास में एंटेलोप सबसे अधिक आबादी वाला विदेशी जानवर था। 2000 के दशक की शुरुआत के अनुसार, संयुक्त राज्य अमेरिका की आबादी का अनुमान 35,000 है। ब्लैकबैक को अर्जेंटीना में शुरू किया गया है, जिसके बारे में 8,600 व्यक्तियों की संख्या है (2000 के प्रारंभ से)। == वर्गीकरण और विकास == कृष्णमृग जीनस ऐन्टीलोप का एकमात्र जीवित सदस्य है और इसे परिवार के अंतर्गत वर्गीकृत किया गया है Bovidae प्रजातियों को 1758 में सिस्टेमा नटूरे के 10 वें संस्करण में स्वीडिश जूलॉजिस्ट कार्ल लिनिअस द्वारा इसकी द्विपद नाम दिया गया था। एनीलोप में जीवाश्म प्रजातियां भी शामिल हैं, जैसे कि ए। सबटॉर्टा, ए। प्लांटेकोर्निस, और ए। मध्यवर्ती एनिलेटोप, यूडोकास, गैज़ेला और नंगेर उनके कबीले एंटिलोपिनी के भीतर एक क्लैड बनाते हैं। एनिलेटोप के विस्तृत कैर्योइप का 1995 के एक अध्ययन ने सुझाव दिया कि इस क्लेड के भीतर, एनीलोप गज़ेला ग्रुप के सबसे निकट है। 1999 के एक फाइलोजेनेटिक विश्लेषण ने पुष्टि की कि एनीलोपस गैज़ेला के लिए सबसे करीबी बोन टैक्सोन है, हालांकि 1 9 76 में प्रस्तावित एक पहले का फाइलोजी, नेनिओल के रूप में एन्तिओप को नंगेर के रूप में रखा था। आधार पर एंटीलपिनि के फ़िलेजनी के हालिया संशोधन में 2013 में कई परमाणु और माइटोकॉन्ड्रियल लोकी से अनुक्रमों के, ईवा वेरेना ब्रेमन (यूनिवर्सिटी ऑफ कैम्ब्रिज) और सहकर्मियों ने फिलेजेनेटिक रिश्तों की पुनर्संरचना की और बहन जेनरेट नेंजर और युडोकास से अलग बहन जेनेर होने के लिए एंटिलोप और गज़ेला को मिला। {{clade | style=font-size:90%;line-height:100%;width:300px; |1={{clade |1={{clade |label1=''[[Gazella]]'' |1={{clade |1={{clade |1={{clade |1=[[Cuvier's gazelle]] |2=[[Rhim gazelle]] }} |2=[[Sand gazelle]] }} |2={{clade |1=[[Chinkara]] |2=[[Goitered gazelle]] }} }} |2={{clade |1={{clade |1=[[Mountain gazelle]] |2=[[Speke's gazelle]] }} |2=[[Dorcas gazelle]] }} }} |label2='''''Antilope''''' |2='''Blackbuck''' }} }} दो उपप्रजातियों को मान्यता दी जाती है, हालांकि वे स्वतंत्र प्रजातियां हो सकती हैं: * A. c. cervicapra (Linnaeus, 1758) : दक्षिण पूर्वी ब्लैकबक के रूप में जाना जाता है। दक्षिणी, पूर्वी और मध्य भारत में होता है पुरुष की सफेद आंख की अंगूठी नेत्र के ऊपर संकीर्ण है और पैर की पट्टी अच्छी तरह से परिभाषित है और पैर के साथ सभी तक पहुंच जाती है। * A. c. rajputanae Zukowsky, 1927 : उत्तर पश्चिमी ब्लैकबक के रूप में जाना जाता है। उत्तर पश्चिमी भारत में होता है प्रजनन के मौसम के दौरान पुरुषों के अंधेरे भागों में एक भूरे रंग की चमक है सफेद आंख की अंगूठी पूरे आंखों के चारों तरफ व्यापक होती है, पैर-पट्टी से केवल नीचे की ओर झुका जाता है। == अनुवांशिक == कृष्णमृग अपने द्विगुणित गुणसूत्र संख्या में भिन्नता दिखाता है। पुरुषों की संख्या 31-33 है जबकि महिलाओं में 30-32 है। पुरुषों में एक XY1Y2 लिंग गुणसूत्र है असामान्य रूप से बड़े लिंग गुणसूत्रों को पहले ही कुछ प्रजातियों में वर्णित किया गया था, जो सभी को रोडेन्शिया से संबंधित था हालांकि, 1 9 68 में, एक अध्ययन में पाया गया कि दो कलात्मकताएं, कृष्णमृग और सीतातुंगा भी इस असामान्यता को दर्शाते हैं। आम तौर पर एक्स गुणसूत्र 5% हाप्लोइड गुणसूत्र पूरक का गठन करता है; लेकिन ब्लैकबैक का एक्स गुणसूत्र यह प्रतिशत 14.96 है। दोनों विलक्षण बड़े गुणसूत्रों के अंश में देरी की नकल दिखाई देती है। 1997 के एक अध्ययन में एंटिडोरस, युडोकास और गैज़ेला के साथ तुलना में एनीलोप में कम प्रोटीनपोल्मॉर्फफीज पाया गया था। यह एंटिलोप के एक ऑटोपामोर्फिक फेनोटाइप के तेजी से विकास के इतिहास के लिए जिम्मेदार ठहराया गया था। संभवतया इसके प्रभावशाली व्यवहार के कारण कुछ प्रमुख पुरुषों के विशेष रूप से मजबूत चयन द्वारा सहायता प्राप्त हो सकती है। == संस्कृति में == यह [[पंजाब क्षेत्र|पंजाब]] [[हरियाणा]] और [[आन्ध्र प्रदेश|आन्ध्रप्रदेश]] का राज्य-पशु है। राजस्थान के [[बिश्नोई|बिश्नोई लोग]] इसकी [[जैव संरक्षण|संरक्षण]] के लिए जाने जाते हैं। किसान इसको बड़े सम्मान की दृष्टि से देखते हैं। == इन्हें भी देखें == * [[ऐन्टीलोप]] == बाहरी कड़ियाँ == * [https://web.archive.org/web/20090115003858/http://www.bbc.co.uk/nature/wildfacts/factfiles/3017.shtml Fact file of Blackbuck] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:ऐंटीलोपाइनी]] [[श्रेणी:भारत के स्तनधारी]] [[श्रेणी:नेपाल के स्तनधारी]] [[श्रेणी:पाकिस्तान के स्तनधारी]] ah1axdg6viltas7nlb2o6t8qk2egkek सदस्य वार्ता:संजीव कुमार 3 500776 6586987 6584053 2026-07-18T03:51:09Z संजीव कुमार 78022 /* स्क्रिप्ट */ उत्तर 6586987 wikitext text/x-wiki {{सदस्य वार्ता:संजीव कुमार/पुरालेख}} == why are you remove this article "सुमरत सिंह" == आपको यह लेख हटाना नहीं चाहिय था बल्कि इसे सशोधन करना चाहिए आप इसे पुन बापिस लाइए कारण क्या है डिलीट करने का ? [[विशेष:योगदान/&#126;2025-39480-74|&#126;2025-39480-74]] ([[सदस्य वार्ता:&#126;2025-39480-74|talk]]) 12:07, 9 दिसम्बर 2025 (UTC) :ये प्रचार लेख था। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 14:46, 9 दिसम्बर 2025 (UTC) == सामग्री संवर्द्धन संपादनोत्सव, अक्टूबर 2025 के बारे में == सामग्री संवर्द्धन संपादनोत्सव, अक्टूबर 2025 मे बहुत समय लग रहा पिछले बार के मुकाबल, क्यों? [[सदस्य:Surajkumar9931|Surajkumar9931]] ([[सदस्य वार्ता:Surajkumar9931|वार्ता]]) 07:04, 25 दिसम्बर 2025 (UTC) :@[[सदस्य:Surajkumar9931|Surajkumar9931]] जी, यह केवल मूल्यांकन करने वालों की अनुपलब्धता के कारण हो रहा है। सम्भावना है कि इस माह (दिसम्बर) के अंत तक यह कार्य पूर्ण हो जायेगा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 07:02, 27 दिसम्बर 2025 (UTC) == नए साल की शुभकामनाएँ == <div style="background:#E8F5E9; padding:10px; border:1px solid #81C784; border-radius:6px;"> '''संजीव कुमार जी, नववर्ष 2026 की हार्दिक शुभकामनाएँ!''' यह नया साल आपके और आपके परिवार के लिए अच्छा स्वास्थ्य, सफलता और सुख-समृद्धि लेकर आए। [[File:Everlasting Fireworks looped.gif|left|x173px]] हिंदी विकिपीडिया पर आपके योगदान के लिए धन्यवाद। [[सदस्य:Chronos.Zx|<span style="color:blue; font-weight:bold;">क्रोनोस.Zx</span>]] ([[सदस्य वार्ता:Chronos.Zx|वार्ता]]) 13:17, 1 जनवरी 2026 (UTC) </div> :@[[सदस्य:Chronos.Zx|Chronos.Zx]] जी, बहुत-बहुत धन्यवाद। आपको भी नववर्ष की मंगल शुभकामनायें। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 05:26, 3 जनवरी 2026 (UTC) == सहायता नोट == संजीव जी, नमस्कार, आपने 2012 ग्वाला गद्दी दूध आंदोलन मुद्दे को डिलीट करने के लिए चर्चा चलाई है। मुझे वहां जानकारी नहीं है चर्चा कैसे की जाए, मुख्य नीतियां पढ़ रहा हूं। आपसे विनम्र आग्रह है कि कृपया आपका संदेश "मूल शोध उलेखनिय नहीं" को थोडा समझाएं ताकि मैं उस दिशा में बदलाव कर सकूं और आपकी उम्मीद अनुसार इस पृष्ठ को बना सकूं धन्यावद [[सदस्य:सिलानी जोखो|सिलानी जोखो]] ([[सदस्य वार्ता:सिलानी जोखो|वार्ता]]) 08:02, 19 जनवरी 2026 (UTC) :@[[सदस्य:सिलानी जोखो|सिलानी जोखो]] जी, आपने पहले ही अपनी बात [[विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/2012 ग्वाला गद्दी दूध आंदोलन]] पर लिख दी है। लेकिन मुझे तो अब भी वो उल्लेखनीय नहीं लग रहा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 16:20, 20 जनवरी 2026 (UTC) == कृपया गोप्रेक्षेश्वर लेख की पुनः समीक्षा करें और कॉपीराइट उल्लंघन का टैग हटाने की कृपा करें == "नमस्ते, मैंने '''गोप्रेक्षेश्वर (Gopreksheshwar)''' लेख में आए कॉपीराइट (Copyright) संबंधी मुद्दों को पूरी तरह से सुधार दिया है। लेख से कॉपी किए गए हिस्सों को हटाकर उसे अपनी भाषा में फिर से लिखा गया है और आवश्यक विश्वसनीय स्रोत (Reliable Sources) भी जोड़ दिए गए हैं। कृपया अब इस लेख की पुनः समीक्षा करें और कॉपीराइट उल्लंघन का टैग हटाने की कृपा करें।" [[विशेष:योगदान/&#126;2026-64016-4|&#126;2026-64016-4]] ([[सदस्य वार्ता:&#126;2026-64016-4|talk]]) 19:57, 29 जनवरी 2026 (UTC) == तुमने मेरा अकाउंट क्यों डिलीट किया ? "बाबू अली साबरी" == तुमने मेरा अकाउंट क्यों डिलीट किया ? "बाबू अली साबरी" [[सदस्य:JACHR|JACHR]] ([[सदस्य वार्ता:JACHR|वार्ता]]) 00:18, 30 जनवरी 2026 (UTC) :शायद यह संदेश त्रुटि से यहाँ लिखा गया है। मेरे पास किसी का अकाउंट डिलीट करने का अधिकार नहीं है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 19:00, 30 जनवरी 2026 (UTC) == भूमिहार == भूमिहार कोई जाति नहीं है यह बस हाल ही 2015 के बाद एक सर्वेक्षण में रख दिया गया था अब इसको सरकार ने सुधार कर लिया है अपनी गलती को और फिर से भूमिहार ब्राह्मण ही रहेगा | [[विशेष:योगदान/&#126;2026-69698-6|&#126;2026-69698-6]] ([[सदस्य वार्ता:&#126;2026-69698-6|talk]]) 10:00, 1 फ़रवरी 2026 (UTC) == Source == https://indianexpress.com/article/india/bhumihar-vs-bhumihar-brahmin-in-bihar-trouble-brews- [[विशेष:योगदान/&#126;2026-69698-6|&#126;2026-69698-6]] ([[सदस्य वार्ता:&#126;2026-69698-6|talk]]) 10:01, 1 फ़रवरी 2026 (UTC) == कृपा करके इस अवतरण को पुनरीक्षण करें == [[गुरमीत राम रहीम सिंह]] अवतरण में मैंने नए विषय जोड़े है कृपा करके इसको पुनरीक्षण करे आपका बहुत बहुत धन्यवाद [[सदस्य:JustSmile1995|JustSmile1995]] ([[सदस्य वार्ता:JustSmile1995|वार्ता]]) 07:30, 9 फ़रवरी 2026 (UTC) :@[[सदस्य:संजीव कुमार|संजीव कुमार]] Please check. Regards [[सदस्य:JustSmile1995|JustSmile1995]] ([[सदस्य वार्ता:JustSmile1995|वार्ता]]) 12:19, 10 फ़रवरी 2026 (UTC) ::@[[सदस्य:JustSmile1995|JustSmile1995]] जी, मुझे प्रचार लग रहा है अतः मैं अन्य सदस्यों द्वारा समीक्षा की प्रतीक्षा कर रहा हूँ जिससे इसमें सुधार किया जा सके। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:03, 10 फ़रवरी 2026 (UTC) :::@[[सदस्य:संजीव कुमार|संजीव कुमार]] सारी जानकारी सही एवं मान्यता प्राप्त समाचार पत्रों से ली गई है। कृपया सहयोग करें। आपका बहुत-बहुत आभार। [[सदस्य:JustSmile1995|JustSmile1995]] ([[सदस्य वार्ता:JustSmile1995|वार्ता]]) 11:34, 12 फ़रवरी 2026 (UTC) ::::@[[सदस्य:JustSmile1995|JustSmile1995]] जी, समाचार पत्रों में भी प्रशंसा छापी जाती है। ये तो भारतीय संसद में भी नहीं माने जाते। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:51, 13 फ़रवरी 2026 (UTC) :::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, मेरा कहने का मतलब है की आज कल ज्यादातर समाचार चैनल गुरमीत राम रहीम के लिए नकारत्मक खबरे प्रकाशित करते है उसको हम प्रशंसा नहीं कह सकते, समाज और देश की भलाई के लिए मरणोपरांत शरीरदान, उपराष्ट्रपति, माननीय राष्ट्रपति से सम्मान प्राप्त होना बड़े कार्य है जो विकिपीडिया का हिस्सा होना चाहिए। आपका बहुत-बहुत आभार। [[सदस्य:JustSmile1995|JustSmile1995]] ([[सदस्य वार्ता:JustSmile1995|वार्ता]]) 17:50, 15 फ़रवरी 2026 (UTC) == डॉ. विनोद कुमार पृष्ठ: शीघ्र हटाने नामांकन पर प्रतिक्रिया == नमस्ते, धन्यवाद आपके नोटिस के लिए। मैं समझता हूँ कि पृष्ठ “डॉ. विनोद कुमार” को L2 (साफ़ प्रचार) नीति के तहत शीघ्र हटाने के लिए नामांकित किया गया है। मैं यह स्पष्ट करना चाहता हूँ कि पृष्ठ में जो सामग्री है, वह मेरे **20 वर्षों के सार्वजनिक स्वास्थ्य और naturopathy कार्य** पर आधारित है। सभी जानकारी को **neutral tone** में रखा गया है और इसे **विश्वसनीय, third-party sources और archive proofs** के साथ सत्यापित किया गया है। **प्रमाण / Archive proof:** * [Archive proof of content and independent references](https://archive.ph/2ViwO) इसके अलावा, मेरा **Wikidata public item** भी बना हुआ है ([Q138034718](https://www.wikidata.org/wiki/Q138034718)) जिससे दुनिया भर के लोग देख सकते हैं कि **कौन काम कर रहा है और कौन पृष्ठ को लेकर चर्चा या नामांकन कर रहा है**। English: Public documentation of Wikipedia deletion nomination of Dr. Vinod Kumar page , with archive proof and independent references of selfless public health and naturopathy work. Hindi: डॉ. विनोद कुमार पृष्ठ के Wikipedia शीघ्र हटाने नामांकन का सार्वजनिक दस्तावेज़, जिसमें archive proof और स्वतंत्र स्रोत शामिल हैं, जो उनके निःस्वार्थ सार्वजनिक स्वास्थ्य और naturopathy कार्य को प्रमाणित करते हैं। https://www.wikidata.org/wiki/Q138337489 and archive https://archive.ph/2ViwO मैं विनम्र निवेदन करता हूँ कि इस नामांकन पर निर्णय लेते समय इन **documented proofs और verifiable facts** को ध्यान में रखा जाए। पृष्ठ केवल **सत्यापनीय तथ्य** दिखाता है जैसे शिक्षा, कार्य, awards, notable contributions और महत्वपूर्ण events। कोई promotional language शामिल नहीं है। यदि आवश्यक हो तो मैं अतिरिक्त references और स्वतंत्र स्रोत जोड़ सकता हूँ ताकि विषय Wikipedia की **उल्लेखनीयता (notability)** के मानक पर खरा उतरे। धन्यवाद। --[[सदस्य:Doctorvinodkumar|Doctorvinodkumar]] ([[सदस्य वार्ता:Doctorvinodkumar|वार्ता]]) 14:33, 18 फ़रवरी 2026 (UTC) == विकिडाटा से लेख को लिंक करना == नमस्ते, मैंने [[सीन कॉम्ब्स]] पर नया लेख बनाया है। चूँकि विकिडाटा आइटम (Q216936) सुरक्षित (Locked) है, कृपया इसे लिंक करने में सहायता करें।[[सदस्य:VIKRAM PRATAP7|VIKRAM PRATAP7]] ([[सदस्य वार्ता:VIKRAM PRATAP7|वार्ता]]) 11:22, 20 फ़रवरी 2026 (UTC) :@[[सदस्य:VIKRAM PRATAP7|VIKRAM PRATAP7]] जी, मैंने विकिडाटा से लेख को जोड़ दिया है लेकिन वर्तमान में यह लेख पूर्णतः एआई चैटबॉट से बना हुआ दिखाई दे रहा है। यदि इसे अन्तिम तिथि तक नहीं सुधारा गया तो इसे वैसे भी शून्य अंक मिलेगा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:26, 20 फ़रवरी 2026 (UTC) ::@[[सदस्य:संजीव कुमार|संजीव कुमार]] लिंक करने हेतु आभार। लेख की भाषा और ढांचे पर आपकी टिप्पणी को मैंने गंभीरता से लिया है। मैं इसे और अधिक स्वाभाविक और मानवीय बनाने हेतु इसमें आवश्यक सुधार कर रहा हूँ। सहयोग हेतु धन्यवाद। ::महोदय आप कुछ सुझाव दे जिससे मैं इसे मानवीय बना लूँ [[सदस्य:VIKRAM PRATAP7|VIKRAM PRATAP7]] ([[सदस्य वार्ता:VIKRAM PRATAP7|वार्ता]]) 16:04, 20 फ़रवरी 2026 (UTC) :::@[[सदस्य:VIKRAM PRATAP7|VIKRAM PRATAP7]] जी, सुझाव और आवश्यकतायें [[विकिपीडिया:अंतरराष्ट्रीय मातृभाषा दिवस संपादनोत्सव/2026#नियम|प्रतियोगिता पृष्ठ]] पर @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध जी]] ने अच्छे से लिखे हैं। फिर भी आप अतिरिक्त सुझाव चाहते हैं तो [[विकिपीडिया:निर्वाचित लेख आवश्यकताएँ|निर्वाचित लेख आवश्यकतायें]] देख सकते हैं। आप निर्वाचित लेखों को देख सकते हैं और उनके प्रारूप को देख सकते हैं। अंग्रेज़ी विकिपीडिया के लेख की जो कड़ी दी गयी है, उनका प्रारूप भी देख सकते हैं। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 16:18, 20 फ़रवरी 2026 (UTC) == अभिनव अरोड़ा के पृष्ठ हटाने के विषय में == संजीव सर, यह नाम तो काफी जाना पहचाना है जिस तरह से मैं गूगल पर उनकी जानकारी मौजूद है वो तो विकिपीडिया के लिए है। [[अभिनव अरोड़ा]] पृष्ट हटाया क्यों जा रहा है? [[सदस्य:Vedic Art|Vedic Art]] ([[सदस्य वार्ता:Vedic Art|वार्ता]]) 01:39, 6 मार्च 2026 (UTC) :@[[सदस्य:Vedic Art|Vedic Art]] जी, सम्भव है आपको उल्लेखनीय लग रहा हो। लेकिन मुझे इसके उल्लेखनीय होने का कोई कारण नहीं मिल रहा। स्वयं में ये बालक कोई ज्ञान नहीं रखता, केवल इसके पिता अपने धन के बल पर इसका प्रचार करवा रहे हैं। ऐसा ही अन्य उदाहरण [[जया किशोरी]] का है। मुझे नहीं समझ में आ रहा कि उसका पृष्ठ यहाँ क्यों है? उसे भी हटा देना चाहिए। वैसे मैं आपके उपर पैसे लेकर पृष्ठ बनाने का आरोप नहीं लगा सकता क्योंकि मेरे पास ऐसे कोई साक्ष्य नहीं हैं लेकिन ऐसे लोगों के पृष्ठ पैसे देकर बनवाये जाते हैं। आप क्यों बना रहे हो, ये तो आप ही बता सकते हो। आपको लगता है कि इन्होंने कोई उल्लेखनीय काम किया है तो कृपया बतायें। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 12:29, 6 मार्च 2026 (UTC) ::संजीव सर, आपने समय निकाल कर मुझे यह जरूरी संदेश दिया, उसके लिए आपका बहुत बहुत आभार। जैसा आप कह रहें हैं यह सही हो सकता है मैंने यह पृष्ठ इस लिए बनाया क्यों कि कई बार इसके न्यूज आर्टिकल मेरे गूगल के फीड पर दिखे। यही सोच कर मैंने यहाँ पृष्ठ निर्माण कर दिया। इस कोई गलती के लिए क्षमा चाहूंगा। [[सदस्य:Vedic Art|Vedic Art]] ([[सदस्य वार्ता:Vedic Art|वार्ता]]) 05:17, 7 मार्च 2026 (UTC) :::@[[सदस्य:Vedic Art|Vedic Art]] जी, मैं भी ये ही मानता हूँ कि आप इनके प्रचार से प्रभावित हो गये। लेकिन ऐसे लोग अपने प्रचार को आगे बढ़ाने के लिए [[विकिपीडिया:पेड|सशुल्क लेख निर्माण]] भी करते/करवाते हैं। ऐसा करने वाले सदस्यों को वैश्विक स्तर पर प्रतिबंधित किया जाता है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 07:51, 7 मार्च 2026 (UTC) == प्रश्न - अंतरराष्ट्रीय मातृभाषा दिवस संपादनोत्सव 2026 के संबंध में == @[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय यह जानना चाहता हूं कि जब आप किसी लेख को स्वीकृत कर देने के पश्चात् जो टिप्पणी करते हैं उसे मुझे ही संपादित करना होता है या कोई भी या आप कर सकते है क्या ? पहले स्वीकृत लेख को किस किस आधार पर अस्वीकृत किया जा सकता है| क्या टिप्पणी के अनुसार सम्पादन न करने पर लेख अस्वीकृत हो सकते है धन्यवाद [[सदस्य :VIKRAM PRATAP7 | विक्रम प्रताप ]] 18:22, 7 मार्च 2026 (UTC) :@[[सदस्य:VIKRAM PRATAP7|VIKRAM PRATAP7]] जी, ऐसा कोई प्रतिबन्ध नहीं है कि उन्हें कौन सुधारे! विकिपीडिया पर कोई भी सदस्य किसी भी लेख को सुधार सकता है। आप यदि उन लेखों में सुधार करना चाहते हैं तो आपका स्वागत है। प्रतियोगिता में लेखों को स्वीकृत करने या न करने की नियमावली प्रतियोगिता पृष्ठ पर लिखी हुई है। आपका ये वाक्य मैं नहीं समझ पाया, "स्वीकृत लेख को किस आधार पर अस्वीकृत किया जा सकता है?" मैं सामान्यतः सभी लेखों पर टिप्पणी लिखता हूँ जिससे उस लेख के बारे में समझा जा सके। हालांकि कुछ लेख आवश्यकताओं को पूरा करते हैं तो वहाँ टिप्पणी लिखना आवश्यक नहीं है। टिप्पणी लिखने से लेख की अन्य कमियाँ ज्ञात होती हैं जिन्हें सुधारा जा सकता है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 04:20, 8 मार्च 2026 (UTC) == ल2 == <nowiki>[[विकिपीडिया:पृष्ठ_हटाने_की_नीति#ल2]]</nowiki> मुझे नहीं लगता है कि ल2 से मिलती जुलती है कृपया जांच करे [[विशेष:योगदान/&#126;2026-18842-64|&#126;2026-18842-64]] ([[सदस्य वार्ता:&#126;2026-18842-64|वार्ता]]) 16:57, 26 मार्च 2026 (UTC) :@[[सदस्य:~2026-18842-64|~2026-18842-64]]: आपके लगने से नहीं होता। आपको स्वयं का प्रचार क्यों ही प्रचार लगेगा? <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 17:01, 26 मार्च 2026 (UTC) == आपके राज में ! == आप अपनी सचेत दृष्टि से कई पृष्ठ बचाते हैं लेकिन [[https://hi.wikipedia.org/w/index.php?title=दिगम्बर_साधु&diff=prev&oldid=6375832 यह संपादन]] देखिए। incredible jainism द्वारा कई पृष्ठ से स्रोत हटाए गए और पूर्ववत नहीं हुए। -[[सदस्य:Ahinsa jain|Ahinsa jain]] ([[सदस्य वार्ता:Ahinsa jain|वार्ता]]) 03:54, 30 मार्च 2026 (UTC) :@[[सदस्य:Ahinsa jain|Ahinsa jain]] जी, यह पूरा लेख दोबारा लिखने लायक है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 16:00, 31 मार्च 2026 (UTC) == रोलबैक अधिकार के नामांकन पर आपके विचार/मत हेतु == <div style="background-color: #FFF9E6; padding: 15px; border: 1px solid #DAA520; border-radius: 8px; margin-top: 10px;"> नमस्ते, आशा है आप सकुशल होंगे। मैं पिछले कुछ समय से हिंदी विकिपीडिया पर सक्रिय रूप से गश्त कर रहा हूँ और हाल के बदलावों में स्पष्ट बर्बरता को हटाने का प्रयास कर रहा हूँ। अपने इस कार्य को और अधिक सुचारू बनाने के लिए, मैंने स्वयं को '''रोलबैक अधिकार''' के लिए नामांकित किया है। चूँकि आप हिंदी विकिपीडिया के एक अनुभवी सदस्य हैं, इसलिए मेरा आपसे विनम्र आग्रह है कि कृपया मेरे हालिया योगदानों की समीक्षा करें और अपना बहुमूल्य मत या सुझाव प्रदान करें। आपका समर्थन और मार्गदर्शन मेरे लिए अत्यंत उत्साहजनक होगा। '''नामांकन यहाँ देखें:''' [[विकिपीडिया:रोलबैकर्स अधिकार हेतु निवेदन#AMAN KUMAR|मेरे नामांकन पर अपना मत दें]] सहयोग के लिए अग्रिम धन्यवाद! सादर,<br> [[सदस्य:AMAN KUMAR|AMAN KUMAR]] [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 11:27, 11 अप्रैल 2026 (UTC) </div> == Last Few Days: WikiConference India 2026 Scholarship Applications == <div lang="en" dir="ltr" class="mw-content-ltr"> ''{{int:please-translate}}'' Dear Wikimedian, We're happy to share that scholarship applications for '''WikiConference India 2026''' are currently open and the deadline is just around the corner. [[m:Special:MyLanguage/WikiConference India 2026|WikiConference India 2026]] is the fourth edition of the national-level conference that brings together Wikimedians and stakeholders engaged in Indic-language Wikimedia projects and the broader open knowledge movement across India and South Asia. The conference will take place in Kochi, Kerala, from 4–6 September 2026. * You can find the more information and the application form at the [[m:Special:MyLanguage/WikiConference India 2026/Scholarship|Scholarship page here at Meta wiki]] * '''Scholarship deadline: 15 April 2026, 11:59 PM IST''' With only a few days left, we warmly encourage you to apply if you haven’t already and kindly request you to share this with your community and encourage others to apply. For more information and regular updates, we encourage you to visit the conference Meta page. Warm regards, <br> on behalf of the WikiConference India 2026 Organising Team ''This message was sent with [[सदस्य:MediaWiki message delivery|MediaWiki message delivery]] ([[सदस्य वार्ता:MediaWiki message delivery|वार्ता]]) on 18:30, 11 अप्रैल 2026 (UTC)'' </div> <!-- https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WCI_2026_active_users&oldid=30389801 पर मौजूद सूची का प्रयोग कर के User:Gnoeee@metawiki द्वारा भेजा गया सन्देश --> ==श्रेष्ठ लेख नामांकन== नमस्ते, संजीव जी। मैंने ‘[[राष्ट्रीय उद्यान]]’ लेख को [[विकिपीडिया:श्रेष्ठ लेख नामांकन|श्रेष्ठ लेख हेतु]] नामांकित किया है। कृपया समय निकालकर इसका अवलोकन करें और अपने सुझाव एवं मत प्रदान करने का कष्ट करें, जिससे समीक्षा प्रक्रिया सुचारु रूप से आगे बढ़ सके।<span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 02:37, 27 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, बिलकुल समय मिलते ही मैं समीक्षा करूँगा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:03, 28 अप्रैल 2026 (UTC) ::बहुत-बहुत धन्यवाद। समय निकालकर समीक्षा करने के लिए आभारी हूँ। आपके सुझावों की प्रतीक्षा रहेगी। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 13:06, 28 अप्रैल 2026 (UTC) == द ट्रेंडिंग पीपल == मोहदय,जी @[[सदस्य:Sanjeev bot|Sanjeev bot]] लेख को [https://hi.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%95%E0%A4%BF%E0%A4%AA%E0%A5%80%E0%A4%A1%E0%A4%BF%E0%A4%AF%E0%A4%BE:%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_%E0%A4%B9%E0%A4%9F%E0%A4%BE%E0%A4%A8%E0%A5%87_%E0%A4%95%E0%A5%80_%E0%A4%A8%E0%A5%80%E0%A4%A4%E0%A4%BF#%E0%A4%B22 व7/ ल2] के अंतर्गत हटाया गया हैं। हालांकि लेख में स्वतंत्र स्रोतों पर आधारित ज्ञानकोशीय सामग्री मौजूद थी और इसे सुधार योग्य बनाया जा सकता है। शीघ्र हटाने की नीति के अनुसार ऐसे मामलों में पूर्ववत अथवा ड्राफ्ट पुनर्स्थापन पर विचार किया जा सकता है। कृपया लेख को उपयोगकर्ता उपपृष्ठ में पुनर्स्थापित करने पर विचार करें। [[User:Citexji|<span style="text-shadow:gray 3px 3px 2px;color:red">'''Citexji'''</span>]]<sup>[[User talk:Citexji|<span style="color:green">बातचीत</span>]]</sup> 06:29, 28 अप्रैल 2026 (UTC) :@[[सदस्य:Citexji|Citexji]] जी, यदि आपको लेख की सामग्री चाहिए तो उसे उपलब्ध करवा सकता हूँ लेकिन हिन्दी विकिपीडिया पर ड्राफ्ट की सुविधा उपलब्ध नहीं है अतः इसे ड्राफ्ट में नहीं रखा जा सकता। लेख का नामांकन होने के तीन दिन बाद इसे हटाया गया है अतः ड्राफ्ट वाला काम हो भी गया था। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:52, 28 अप्रैल 2026 (UTC) ::@[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय, इन्होंने [[सदस्य:Citexji/द ट्रेंडिंग पीपल]] का ड्राफ्ट पेज बनाया है [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 14:00, 28 अप्रैल 2026 (UTC) :::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, फिर अच्छा है। लेकिन कुछ समय बाद उसे भी प्रचार मानकर [[वि:शीह#व7|व7]] के तहत हटाया जा सकता है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:01, 28 अप्रैल 2026 (UTC) ::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, धन्यवाद। ::::व7 मापदंड के अनुसार केवल पूर्णतः प्रचारात्मक पृष्ठ ही शीघ्र हटाने योग्य होते हैं। वर्तमान ड्राफ्ट में तथ्यात्मक एवं ज्ञानकोशीय सामग्री मौजूद है, जिसे और अधिक तटस्थ बनाने तथा विश्वसनीय, स्वतंत्र स्रोत जोड़ने का कार्य जारी है। ::::मैंने लेख से प्रचारात्मक भाषा हटाकर इसे विकिपीडिया की शैली के अनुरूप संशोधित किया है तथा उपलब्ध स्वतंत्र स्रोत जोड़े हैं। साथ ही, बेहतर समीक्षा के लिए मैंने @[[सदस्य:Khushi200|Khushi200]] जी से इस ड्राफ्ट की जांच का अनुरोध किया था। उन्होंने इसकी समीक्षा करके बताया कि लेख में अच्छे सुधार किए गए हैं और तटस्थ शैली की दिशा में प्रगति हुई है। इसकी चर्चा मेरे [https://hi.wikipedia.org/wiki/%E0%A4%B8%E0%A4%A6%E0%A4%B8%E0%A5%8D%E0%A4%AF_%E0%A4%B5%E0%A4%BE%E0%A4%B0%E0%A5%8D%E0%A4%A4%E0%A4%BE:Citexji वार्ता पृष्ठ] पर देखी जा सकती है। ::::यदि आपको अभी भी स्रोतों की विश्वसनीयता या विषय की उल्लेखनीयता को लेकर कोई विशेष आपत्ति हो, तो कृपया उसे संबंधित नीतियों और स्रोत-मानकों के आधार पर स्पष्ट करें, ताकि उसी अनुसार आगे सुधार किया जा सके। [[User:Citexji|<span style="text-shadow:gray 3px 3px 2px;color:red">'''Citexji'''</span>]]<sup>[[User talk:Citexji|<span style="color:green">बातचीत</span>]]</sup> 19:58, 28 अप्रैल 2026 (UTC) == You may be an eligible candidate for the U4C election == <div lang="en" dir="ltr" class="mw-content-ltr"> Greetings, The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] seeks candidates for the 2026 election. The U4C is the global committee responsible for overseeing enforcement of the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]]. Elections are held annually, if elected a committee member serves for two years. This year the U4C requires candidates to hold administrator rights on at least one wiki, which is why you are being contacted as you appear to hold this right. There are other requirements, such as candidates must be at least 18 years old and may not be employed by the Wikimedia Foundation or other related chapters and affiliates. You can find more information in the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026#Call_for_Candidates|call for candidates on Meta-wiki]]. Additionally, the committee's working language is English; some ability to communicate in English is required. The election opens on 18 May, if you are eligible and interested you have until 10 May to submit your candidacy. There will week between for candidates to answer questions from the community. Voting takes place privately in [[m:Special:MyLanguage/SecurePoll|SecurePoll]], successful candidates must receive at least 60% support. More information is available on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the 2026 Elections page]], including timelines and other candidacy information. If you read over the material and consider yourself qualified, please consider submitting your name to run for the committee. If you think someone else in your community might be interested and qualified, please encourage them to run. In partnership with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 18:33, 28 अप्रैल 2026 (UTC) </div> <!-- https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30471754 पर मौजूद सूची का प्रयोग कर के User:Keegan (WMF)@metawiki द्वारा भेजा गया सन्देश --> == साँचे विलय करने हेतु सहायता == नमस्ते संजीव जी, क्या आप [[साँचा:Infobox cricket final]] और [[साँचा:Infobox limited overs final]] का मिलान कर इनका विलय कर सकते हैं? मुझे लगता है इनमे से एक ही साँचा पर्याप्त होगा। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:58, 28 अप्रैल 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी, मुझे इनमें विलय के लिए कुछ नहीं मिला अतः एक को दूसरे पर बिना श्रेय के अनुप्रेषित कर दिया है। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 14:59, 5 मई 2026 (UTC) == [[ब्लू बर्ड फाउंडेशन]] == Hi Sanjeev I need your help to remove the article because the article was created to promote a company and I have reported the author of the article on Meta for follow up by the steward [[सदस्य:Badak Jawa|Badak Jawa]] ([[सदस्य वार्ता:Badak Jawa|वार्ता]]) 01:34, 31 मई 2026 (UTC) :@[[सदस्य:Badak Jawa|Badak Jawa]], thanks for informing. There were two articles on same topic. Now both are deleted. <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 08:22, 1 जून 2026 (UTC) ::Thank you Sanjeev Kumar [[सदस्य:Badak Jawa|Badak Jawa]] ([[सदस्य वार्ता:Badak Jawa|वार्ता]]) 11:56, 1 जून 2026 (UTC) == बॉट कार्य अनुरोध == नमस्ते संजीव जी, कृपया [[:श्रेणी:SHORTDESC का प्रयोग करने वाले पृष्ठ]] में आने वाले पृष्ठों को बॉट द्वारा 'स्पर्श' कर दें। बहुत से पन्ने इसमें कैशे साफ़ न होने की वजह से दिख रहे हैं। एक बार सही संख्या दिखने लगे तो आगे की सफाई मैं कर सकूँगा। अग्रिम धन्यवाद। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 08:28, 6 जून 2026 (UTC) :इस पर मेरी नज़र पड़ी, तो मैंने आपका काम कर दिया। वैसे भी संजीव जी ने अपने बॉट से कुछ कार्य करने की अनुमति दे रखी है। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 15:19, 6 जून 2026 (UTC) == पण्डित देवनारायण भारतीय के लेख को हटाए जाने के संबंध में स्पष्टीकरण का अनुरोध == महोदय, मैं पण्डित देवनारायण भारतीय के विकिपीडिया लेख को हटाए जाने के संबंध में स्पष्टीकरण प्राप्त करना चाहता हूँ। पण्डित देवनारायण भारतीय उत्तर भारत के स्वतंत्रता संग्राम के एक महत्वपूर्ण क्रांतिकारी थे। उपलब्ध ऐतिहासिक स्रोतों, समाचार-पत्रों, पुस्तकों तथा अभिलेखीय दस्तावेज़ों में उनके योगदान का उल्लेख मिलता है। ऐसे में यह समझना मेरे लिए कठिन है कि उनके विषय में बनाया गया लेख किन कारणों से हटाया गया अथवा उसकी उल्लेखनीयता पर प्रश्न क्यों उठाया गया। कृपया यह स्पष्ट करने का कष्ट करें कि लेख को हटाने या हटाने हेतु नामांकित करने का आधार क्या था। यदि लेख में प्रयुक्त स्रोत विकिपीडिया की नीतियों के अनुरूप नहीं थे, तो कृपया उन विशिष्ट कमियों की ओर संकेत करें ताकि उन्हें दूर किया जा सके। मेरा उद्देश्य केवल यह सुनिश्चित करना है कि भारत के स्वतंत्रता संग्राम के इतिहास से जुड़े महत्वपूर्ण व्यक्तित्वों के विषय में उपलब्ध प्रमाणिक जानकारी विकिपीडिया पर उचित रूप से प्रस्तुत हो सके। आपके उत्तर की प्रतीक्षा रहेगी। [[सदस्य:पण्डित देवनारायण भारतीय|पण्डित देवनारायण भारतीय]] ([[सदस्य वार्ता:पण्डित देवनारायण भारतीय|वार्ता]]) 08:12, 11 जून 2026 (UTC) :उत्तर आपके वार्ता पन्ने पर दे दिया गया है। धन्यवाद। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 08:15, 11 जून 2026 (UTC) == [[:सदस्य वार्ता:Karatebr|सदस्य वार्ता:Karatebr]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:सदस्य वार्ता:Karatebr|सदस्य वार्ता:Karatebr]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। हटाए गए पृष्ठ का वार्ता यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 11:15, 13 जून 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी और @[[सदस्य:DreamRimmer|DreamRimmer]] जी, वैसे तो मुझे उपरोक्त के हटाने से कोई समस्या नहीं है लेकिन जो कारण दिया गया है, वो मुझे ठीक नहीं लगा। सम्बंधित व्यक्ति के कुछ सम्पादनों के बाद बॉट से स्वचालित रूप से सदस्य वार्ता पृष्ठ निर्मित हुआ था। इसके अतिरिक्त सम्बंधित सदस्य किसी भी विकिपीडिया-प्रकल्प पर वर्तमान में प्रतिबंधित नहीं है। यह मुख्य पृष्ठ का वार्ता पृष्ठ नहीं बल्कि सदस्य का वार्ता पृष्ठ था जिसके इतिहास में किसी तरह का प्रचार भी नहीं था। यदि यह कारण दिया जायेगा तो अधिकतर सदस्यों के वार्ता पृष्ठ हटाये जा सकते हैं जिनमें मेरा वार्ता पृष्ठ भी शामिल होगा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 17:56, 22 जून 2026 (UTC) ::मैं क्षमाप्रार्थी हूँ, इसमें गलती मेरी ही है। मैं CSD Helper स्क्रिप्ट को बेहतर बनाने की कोशिश कर रहा था, जिससे गलती से यह पृष्ठ हट गया। पिछले कुछ दिनों से समय की कमी के कारण मैं इस पर दोबारा ध्यान नहीं दे पाया। फिलहाल मैं यह पृष्ठ पुनः स्थापित कर रहा हूँ। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 18:28, 22 जून 2026 (UTC) == स्क्रिप्ट == संजीव जी, स्क्रिप्ट तैयार है। आपको जब भी समय मिले आप यह काम कर सकते हैं। मुझे पिंग कर दीजिएगा ताकि मैं आपको स्क्रिप्ट भेज सकूँ। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 12:00, 11 जुलाई 2026 (UTC) :@[[सदस्य:DreamRimmer|DreamRimmer]] जी, मुझे स्क्रिप्ट मिल गयी है। इसे देखकर प्रयास करता हूँ, समस्या आयी तो आपसे सम्पर्क करूँगा। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 17:11, 15 जुलाई 2026 (UTC) ::इसे केवल Toolforge पर ही चलाया जा सकता है। यदि आपने बॉट पासवर्ड बनाते समय protect ग्रांट शामिल नहीं किया था, तो आपको अपना बॉट पासवर्ड अपडेट करना पड़ सकता है। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 17:19, 15 जुलाई 2026 (UTC) :::@[[सदस्य:DreamRimmer|DreamRimmer]] जी, पासवर्ड को अपडेट कर दिया और मैंने साप्ताहिक रूप से चलाने का प्रयास भी किया जो अनुसूचित हो गया। बाद में मैंने अभी जाँच करने की कोशिश की लेकिन वो असफल रहा। <code>| test-protection-run | one-off | Failed |</code> <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 18:42, 15 जुलाई 2026 (UTC) ::::संजीव जी, मैंने hiwiki tool पर देखा वहाँ स्क्रिप्ट नहीं थी, इसलिए अपलोड कर दी। ज़रूरी मॉड्यूल भी इंस्टॉल कर दिए और करीब 2 मिनट के लिए इसे चलाया था, लेकिन फिर लगा कि अगर आप खुद चलाना चाहें तो मैंने इसे रोक दिया। कुछ पेज प्रोटेक्ट हो चुके हैं, बाकी आप कर सकते हैं। बस hiwiki tool पर जाकर virtual environment activate करिए और <code>python hiwikiprotect.py</code> चला दीजिए। यह काफी तेज़ है, इसलिए लगभग 5 मिनट में काम पूरा हो जाएगा। वैसे bastion host पर ज़्यादा देर तक चलने वाली स्क्रिप्ट नहीं चलानी चाहिए, लेकिन यह इतनी देर नहीं चलेगी, इसलिए कोई दिक्कत नहीं होगी। अगर कोई और समस्या आए तो मुझे बताइए। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 08:26, 16 जुलाई 2026 (UTC) :::::@[[सदस्य:DreamRimmer|DreamRimmer]] जी, शायद आपने ध्यान नहीं दिया, ये स्क्रिप्ट <code>customscripts/protect_templates.py</code> मैंने कल ही प्रतिलिपि कर ली थी। मैंने सुबह आपके प्रयोग देखे थे और समझ नहीं पाया था कि ये कैसे हुये। मुझे इसमें कोई समस्या नहीं है कि आप इसे चलाओ क्योंकि उपरोक्त कार्य की सहमति पहले से थी और स्क्रिप्ट भी आपने लिखी है। मैंने इसे <code>python3</code> से नहीं चलाया था बल्कि <code>toolforge-jobs</code> से साप्ताहिक रूप से चलने के लिए कमाण्ड दी थी। अभी मैंने देखा कि <code>python3</code> के साथ स्क्रिप्ट काम कर रही है लेकिन आपके सुबह के योगदानों में मैंने {{tlx|ज्ञानसन्दूक सागर}} देखा। यह केवल 40 पृष्ठों से जुड़ा हुआ है जबकि अपनी सीमा 50 या 100 रखी गयी थी। अतः मैं अभी आपके उत्तर की प्रतीक्षा करूँगा या आप स्वयं चला सकते हैं। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 17:12, 16 जुलाई 2026 (UTC) ::::::संजीव जी, हम सभी ज्ञानसन्दूक साँचे सुरक्षित कर रहे हैं। इसके अलावा उन सभी अन्य साँचे भी सुरक्षित किए जा रहे हैं जिनका उपयोग 100 से अधिक पृष्ठों पर हुआ है तथा उन सभी मॉड्यूलों को भी सुरक्षित किया जा रहा है जिनका उपयोग 50 से अधिक पृष्ठों पर हुआ है। ज्ञानसन्दूक साँचे के लिए उपयोग की कोई न्यूनतम सीमा नहीं है। सभी ज्ञानसन्दूक साँचे इसमें शामिल हैं। ::::::अभी आपके पास कंप्यूटर का एक्सेस है इसलिए आप ही यह कार्य पूरा कर दीजिए। मैं फिर कभी समय मिलने पर इसमें मदद कर दूँगा। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 17:20, 16 जुलाई 2026 (UTC) :::::::@[[सदस्य:DreamRimmer|DreamRimmer]] जी, आप सही कह रहे हो। प्रस्ताव के अनुसार आपका कहा सही है। मैं अभी चलाता हूँ। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 17:25, 16 जुलाई 2026 (UTC) {{od|6}}@[[सदस्य:DreamRimmer|DreamRimmer]] जी, मैंने स्क्रिप्ट को दो बार चलाकर देख लिया लेकिन एक सीमा के बाद एक त्रुटि दिखाई देती है। मैं उसका स्क्रीनशॉट लेना भूल गया अतः अब उसके बिना ही यह सन्देश लिख रहा हूँ। समय मिले तो एकबार देखियेगा।<span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 03:51, 18 जुलाई 2026 (UTC) 7obbaownmodg0dqwj3xdbg5220gxrod सदस्य वार्ता:SM7 3 520128 6587024 6580648 2026-07-18T08:23:41Z A09 633044 /* Compromise */ नया अनुभाग 6587024 wikitext text/x-wiki <!-- Please do NOT delete this line. Thanks! -->{{/header}} <!-- कृपया इस लाइन और ऊपर की लाइन को को न हटायें, धन्यवाद !--> == नए साल की शुभकामनाएँ == <div style="background:#E8F5E9; padding:10px; border:1px solid #81C784; border-radius:6px;"> '''SM7 जी, नववर्ष 2026 की हार्दिक शुभकामनाएँ!''' यह नया साल आपके और आपके परिवार के लिए अच्छा स्वास्थ्य, सफलता और सुख-समृद्धि लेकर आए। [[File:Everlasting Fireworks looped.gif|left|x173px]] हिंदी विकिपीडिया पर आपके योगदान के लिए धन्यवाद। [[सदस्य:Chronos.Zx|<span style="color:blue; font-weight:bold;">क्रोनोस.Zx</span>]] ([[सदस्य वार्ता:Chronos.Zx|वार्ता]]) 13:15, 1 जनवरी 2026 (UTC) </div> :@[[सदस्य:Chronos.Zx|Chronos.Zx]] जी, बहुत-बहुत धन्यवाद। आपको भी नववर्ष अत्यंत मंगलमय हो। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:24, 2 जनवरी 2026 (UTC) == विशेष: कार्यक्रम आयोजक अधिकार == नमस्ते [[सदस्य:SM7|SM7]], आप मुझे कार्यक्रम आयोजक के अधिकार के आवेदन दर्ज करने के लिए पृष्ठ बताने के कृपा करे | [[सदस्य:Dev Jadiya|Dev Jadiya]] ([[सदस्य वार्ता:Dev Jadiya|वार्ता]]) 09:08, 18 मार्च 2026 (UTC) == व7 के अंतर्गत हटाए गए लेख के पुनर्विचार हेतु अनुरोध == @[[सदस्य:SM7|SM7]] महोदय, मैं आपको [[कमलेश कमल]] लेख के संबंध में लिख रहा हूँ जिसे आपने [[वि:पृष्ठ हटाने की नीति#व7|व7]] के अंतर्गत हटाया था। जब लेख को शीघ्र हटाने के लिए चिह्नित किया गया, तब मैंने तुरंत उठाई गई आपत्तियों को दूर करने के लिए आवश्यक बदलाव किए। मैंने पूरे लेख में महत्वपूर्ण सुधार किए, जिसमें प्रचारात्मक और प्रशंसात्मक भाषा हटाना, सामग्री को निष्पक्ष दृष्टिकोण (neutral point of view) में दोबारा लिखना, और इसे अधिक विश्वकोशीय बनाने के लिए विस्तार करना शामिल था। मेरा मानना है कि संशोधित संस्करण अब प्रचारात्मक नहीं था, या कम से कम इतना नहीं कि उसे व7 के अंतर्गत हटाया जाए। मैंने इन परिवर्तनों का उल्लेख लेख के वार्ता पृष्ठ पर भी किया था। मेरी समझ के अनुसार, व7 उन पृष्ठों पर लागू होता है जो पूरी तरह से प्रचारात्मक होते हैं और जिनमें सुधार की संभावना नहीं होती। किए गए सुधारों को देखते हुए, आपसे निवेदन है कि कृपया लेख को पुनर्स्थापित करने पर विचार करें। साथ ही, यदि कोई अन्य कमी या समस्या शेष हो, तो कृपया उसे बताने का कष्ट करें ताकि मैं सामग्री में और सुधार कर सकूँ। [[सदस्य:BBBhagwati|BBBhagwati]] ([[सदस्य वार्ता:BBBhagwati|वार्ता]]) 16:41, 7 अप्रैल 2026 (UTC) == रोलबैक अधिकार के नामांकन पर आपके विचार/मत हेतु == <div style="background-color: #FFF9E6; padding: 15px; border: 1px solid #DAA520; border-radius: 8px; margin-top: 10px;"> नमस्ते, आशा है आप सकुशल होंगे। मैं पिछले कुछ समय से हिंदी विकिपीडिया पर सक्रिय रूप से गश्त कर रहा हूँ और हाल के बदलावों में स्पष्ट बर्बरता को हटाने का प्रयास कर रहा हूँ। अपने इस कार्य को और अधिक सुचारू बनाने के लिए, मैंने स्वयं को '''रोलबैक अधिकार''' के लिए नामांकित किया है। चूँकि आप हिंदी विकिपीडिया के एक अनुभवी सदस्य हैं, इसलिए मेरा आपसे विनम्र आग्रह है कि कृपया मेरे हालिया योगदानों की समीक्षा करें और अपना बहुमूल्य मत या सुझाव प्रदान करें। आपका समर्थन और मार्गदर्शन मेरे लिए अत्यंत उत्साहजनक होगा। '''नामांकन यहाँ देखें:''' [[विकिपीडिया:रोलबैकर्स अधिकार हेतु निवेदन#AMAN KUMAR|मेरे नामांकन पर अपना मत दें]] सहयोग के लिए अग्रिम धन्यवाद! सादर,<br> [[सदस्य:AMAN KUMAR|AMAN KUMAR]] [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 11:29, 11 अप्रैल 2026 (UTC) </div> == पिण्डार या पिण्डर नदी == नमस्ते SM7 जी, मैं आज [[पिण्डार नदी]] नामक लेख पर देख रहा हूँ कि आपने इसके समकक्ष भोजपुरी लेख निर्मित किया। वहाँ आपने शीर्षक में "पिण्डार" के स्थान पर "पिंडर" रखा। इस हिसाब से यहाँ भी "पिण्डर नदी" या "पिंडर नदी" होना चाहिए। यदि आपको सही लगता है तो यह स्थानान्तरण कर देना चाहिए। मुझे इसकी सही जानकारी नहीं है।<span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 18:36, 14 अप्रैल 2026 (UTC) :@[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय, अब जांचा तो कुछ उदाहरण मिले :*[https://www.livehindustan.com/uttarakhand/story-garhwal-pindar-river-water-poured-into-kumaon-kosi-river-jal-jeevan-mission-6775827.html लाइव हिन्दुस्तान] :* [https://www.jagran.com/uttarakhand/almora-pindar-river-water-advocates-for-release-in-nonviolent-rivers-19447355.html दैनिक जागरण] :* [https://www.drishtiias.com/hindi/state-pcs-current-affairs/pindari-glacier-to-make-kumaon-s-drying-rivers-sadaneera दृष्टि आईएएस] :इन संदर्भों के अनुसार इसका नाम स्थानांतरण करके [[पिंडर नदी]] करना चाहिए| [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 18:56, 14 अप्रैल 2026 (UTC) ::@[[सदस्य:संजीव कुमार|संजीव कुमार]] @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] हाँ, इसके नाम में ड पर आ की मात्रा नहीं है। मैं इस नदी का पानी भी पी चुका हूँ, पर मेरी हिम्मत नहीं कि मैं आधा ण हटाऊँ। यह विवादास्पद बदलाव लेख के वार्ता पन्ने पे चर्चा के बाद पर्याप्त समर्थन से किया जाय तो बेहतर होगा। सादर। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 08:37, 15 अप्रैल 2026 (UTC) :::जी, चर्चा के बिना मैं स्थानान्तरित कर सकता हूँ। बाकी आप चाहो तो चर्चा भी आरम्भ कर सकते हैं। @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, आपने जो स्रोत दिये हैं उनमें पिंडर और पिंडार दोनों लिखे हैं। इसके अतिरिक्त दृष्टि आईएएस वाला स्रोत विश्वसनीय नहीं है जबकि समाचार वाले भी एकरूप नहीं होने के कारण उचित नहीं माने जा सकते। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:41, 15 अप्रैल 2026 (UTC) ::::कृपया {{tlx|virusbox}} को भी देखें। इसे आपने बहुत पहले आयात किया था लेकिन सम्बंधित मोड्यूल का आयात नहीं किया गया। @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी ने {{tlx|विषाणु}} क्यों निर्मित किया है, मुझे इसका कोई कारण समझ में नहीं आया। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:45, 15 अप्रैल 2026 (UTC) ::::नमस्ते SM7 जी, @[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, आप स्थानान्तरित कर सकते है। खोजने पर काफ़ी विश्वसनीय स्रोत है, जिन में '''पिंडर नदी''' ही लिखा है। [https://www.google.co.th/books/edition/Prachin_Madhya_Himalaya_izkphu_e_fgeky/SeKkhjTwMbcC?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA8&printsec=frontcover], [https://www.google.co.th/books/edition/2026_27_UKPSV_UKSSSC_Special_General_Stu/YOS4EQAAQBAJ?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA132&printsec=frontcover], [https://www.google.co.th/books/edition/Aao_Karen_Himalaya_Mein_Trekking/qfVzBQAAQBAJ?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA95&printsec=frontcover] <span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 13:55, 15 अप्रैल 2026 (UTC) :::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय, :::::नदी के नाम पर उचित मार्गदर्शन के लिए धन्यवाद। वर्तनी के संबंध में आपका निर्णय मुझे पूरी तरह स्वीकार है, कृपया आप ही इसे उपयुक्त नाम पर स्थानांतरित कर दें। :::::'''<code><nowiki>{{विषाणु}}</nowiki></code>''' साँचे के निर्माण का कारण केवल तकनीकी था। पुराना <code><nowiki>{{virusbox}}</nowiki></code> साँचा संबंधित मॉड्यूल्स के अभाव में काम नहीं कर रहा था और लेखों में कोडिंग की त्रुटियाँ (error) दिखा रहा था। मुझे जटिल मॉड्यूल आयात करने की जानकारी नहीं थी, इसलिए लेखों को त्रुटिमुक्त करने के लिए मैंने सीधे स्वदेशी '''<code><nowiki>{{ज्ञानसंदूक}}</nowiki></code>''' ढाँचे का उपयोग करके यह नया साँचा बनाया, जिसे किसी बाहरी मॉड्यूल की आवश्यकता ही नहीं है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 13:58, 15 अप्रैल 2026 (UTC) ::::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, मैं मूल साँचे को और मॉड्यूल को अद्यतन कर दूंगा। वैसे यह मुझे भी समझ में नहीं आया कि जब यह बिना मॉड्यूल के काम नहीं कर रहा तो मैंने यह काम अधूरा क्यों छोड़ा। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:53, 16 अप्रैल 2026 (UTC) ==जिज्ञासा== नमस्कार! SM7 जी, लेख हटाने हेतु चल रही चर्चाओं के संबंध में एक जिज्ञासा है। सामान्यतः ऐसी चर्चाओं की एक निर्धारित समयसीमा होती है, किन्तु देखा गया है कि [[:श्रेणी:लेख हटाने हेतु वर्तमान चर्चाएँ|कई चर्चाएँ लंबे समय तक बिना किसी निष्कर्ष]] के लंबित रहती हैं। कुछ लेखों पर हुई चर्चाओं का अभी तक कोई स्पष्ट परिणाम सामने नहीं आया है कि उन्हें रखा जाना है या हटाया जाना है। * जिज्ञासा ये है की सामान्यतः इन चर्चाओं के निष्कर्ष तक पहुँचने की समय-सीमा क्या निर्धारित होती है तथा किन परिस्थितियों में इनका परिणाम घोषित किया जाता है।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 09:56, 16 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, यह इस बात पे निर्भर है कि चर्चा में भागीदार लोग कितने हैं और उनके मतों के आधार पर स्पष्ट राय क्या निकल कर आई है। अंग्रेजी की तरह यहाँ पर समय सीमा या रीलिस्ट करने जैसा कुछ नहीं है। ऐसी चर्चाओं में सदस्यों की कम भागीदारी हिंदी विकिपीडिया की एक बड़ी समस्या है। ऐसी ही स्थिति नाम बदलाव या कुछ अन्य चीजों को लेकर भी है जहाँ काम इसलिए लंबित रहता है क्योंकि चर्चा में भाग लेने वाले लोग नहीं हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:34, 16 अप्रैल 2026 (UTC) == सुझाव दें == @[[सदस्य:SM7|SM7]] महोदय मैने [[विकिपीडिया:चौपाल|चौपाल]] पर एक प्रस्ताव रखा है [[विकिपीडिया:चौपाल#पृष्ठ स्थानांतरण (Page Move) अधिकार और नए सुरक्षा स्तर पर पुनर्विचार हेतु प्रस्ताव|पृष्ठ स्थानांतरण (Page Move) अधिकार और नए सुरक्षा स्तर पर पुनर्विचार हेतु प्रस्ताव]] [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 19:00, 16 अप्रैल 2026 (UTC) ==निवेदन पर मत आमंत्रण== नमस्कार, SM7 जी! मेरे [[विकिपीडिया:स्वतः_परीक्षित_अधिकार_हेतु_निवेदन#चाहर_धर्मेंद्र|स्वतः परीक्षित अधिकार हेतु किए गए निवेदन]] के संबंध में आपके विचार मेरे लिए अत्यंत महत्वपूर्ण हैं। आपसे विनम्र निवेदन है कि कृपया समय निकालकर इस पर अपना मत अवश्य प्रदान करें। * आपके सुझाव एवं प्रतिक्रिया मेरे लिए मार्गदर्शक सिद्ध होंगे।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 04:30, 22 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, कोई चर्चा शुरू करके उसकी सूचना चौपाल पे दे देना पर्याप्त होता है। जिसे मन होगा ज़रूर चर्चा में हिस्सा लेगा। अपने द्वारा शुरू की गई चर्चा (विशेषकर कोई नामांकन) पर घूम-घूम के सबसे वार्ता पन्ने पे संदेश लिखना उचित नहीं होता, यह प्रत्यक्ष या अप्रत्यक्ष रूप से चुनाव प्रचार (कैनवासिंग) है और इस तरह के काम को मैं बिल्कुल पसंद नहीं करता; हालाँकि, जब मैं नया था तब मैंने भी ऐसे काम किये थे। बाद में समझ में आया कि यह बेवजह की उछलकूद है। :मैं आपके स्वनामंकन से पहले ही कुछ दिनों पूर्व ख़ुद आपका नामांकन करने के बारे में सोच रहा था; फिर जब आपने नामांकन किया तब समर्थन करने की भी सोच रहा था। अब आपने यहाँ संदेश लिख दिया। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:46, 22 अप्रैल 2026 (UTC) ::SM7 जी! आपके सुझाव एवं मार्गदर्शन के लिए धन्यवाद। मैं आपकी बात से सहमत हूँ और भविष्य में इस प्रकार की सूचना देने के संबंध में अधिक सावधानी रखूँगा। ::* मेरा उद्देश्य केवल सूचना साझा करना था, न कि किसी प्रकार का कैनवासिंग करना। यदि इससे असुविधा हुई हो तो उसके लिए क्षमाप्रार्थी हूँ। ::आपके समर्थन के विचार के लिए भी धन्यवाद। <span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 06:07, 22 अप्रैल 2026 (UTC) == लेख निर्वाचन नामांकन == SM7 जी! क्या ‘[[राष्ट्रीय उद्यान]]’ लेख को निर्वाचित लेख हेतु नामांकित करना उपयुक्त होगा? आपसे अनुरोध है कि कृपया समय निकालकर एक बार लेख का अवलोकन करें और मार्गदर्शन प्रदान करें कि क्या इसमें किसी प्रकार के और सुधार या संशोधन की आवश्यकता है। आपके सुझाव मेरे लिए अत्यंत उपयोगी होंगे। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 15:10, 26 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी नमस्ते। लेख अच्छा बनाया है आपने और आप इसपर बेहतरीन कार्य करने के लिये बधाई के पात्र हैं। मेरा सुझाव है कि आप इसे पहले '''[[वि:श्रेष्ठ लेख|श्रेष्ठ लेख]]''' हेतु नामांकित करें। इसके मापदंड निर्वाचित लेख की तुलना में थोड़े हल्के और आसान हैं। हालाँकि, हिंदी विकिपीडिया पर श्रेष्ठ लेख बनाने की प्रक्रिया उपलब्ध और लागू है पर आज तक किसी ने इसका उपयोग नहीं किया। तो हो सकता है आप '''श्रेष्ठ लेख बनाने वाले पहले विकिपीडियन''' बनें। (वैसे मैंने अभी देखा कि एक नामांकन 2018 में नवीन सिंह जी द्वारा किया गया था परंतु उसकी समीक्षा नहीं हुई - शायद उन्होंने सूचित नहीं किया चौपाल पे)। :एक बार श्रेष्ठ लेख के लिये प्रारंभिक समीक्षा हो जाने के बाद आप इसे '''निर्वाचित लेख''' के लिये भी नामांकित कर सकते हैं - जहाँ सामूहिक समीक्षा और सुधार सुझाये जायेंगे। अतः आप स्टेप-बाई-स्टेप चलें तो बेहतर होगा। :बाक़ी आपकी मर्जी है। अगर आप निर्वाचित लेख नामांकन करना चाहें तो सीधे भी कर सकते हैं। बस एक बात का ध्यान रखियेगा कि निर्वाचित लेख घोषित होने में काफ़ी समय लग सकता है - क्योंकि यहाँ समीक्षा इत्यादि में भाग लेने वालों की काफ़ी कमी है। :मैं दोनों ही प्रक्रियाओं में आपकी मदद अवश्य कर सकता हूँ। शुभकामनायें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 15:46, 26 अप्रैल 2026 (UTC) ::नमस्कार, SM7 जी! लेख के संबंध में आपके विस्तृत सुझाव एवं मार्गदर्शन के लिए हार्दिक धन्यवाद। आपने जो चरणबद्ध प्रक्रिया (पहले श्रेष्ठ लेख, तत्पश्चात निर्वाचित लेख) सुझाई है, वह अत्यंत उपयोगी एवं व्यावहारिक प्रतीत होती है। ::मैं आपके सुझाव के अनुसार पहले इसे श्रेष्ठ लेख हेतु नामांकित करने पर विचार करूँगा, ताकि प्रारंभिक समीक्षा के माध्यम से आवश्यक सुधार किए जा सकें। इसके पश्चात निर्वाचित लेख के लिए नामांकन करना अधिक उपयुक्त रहेगा। ::आगे की प्रक्रिया में आपके सहयोग के प्रस्ताव के लिए भी धन्यवाद—यह मेरे लिए अत्यंत सहायक होगा। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 01:53, 27 अप्रैल 2026 (UTC) :::@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] दोनों में अंतर के लिये कृपया एक बार [[:en:WP:GVF|WP:GVF]] देखें। और जहाँ तक मुझे नियमावली याद है, वर्तमान सक्रिय सदस्यों में [[स:संजीव कुमार|संजीव कुमार]] जी ही इकलौते सदस्य हैं जो इस समीक्षा को क्रियान्वित करने के लिये अर्ह हैं। अतः चौपाल पर और संजीव जी को अवश्य सूचित कीजियेगा। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 02:00, 27 अप्रैल 2026 (UTC) ::::जी, सूचना एवं मार्गदर्शन के लिए धन्यवाद। आपके सुझाव के अनुसार मैं चौपाल पर तथा संजीव कुमार जी को भी अवश्य सूचित करूँगा, ताकि समीक्षा प्रक्रिया उचित रूप से आगे बढ़ सके। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 02:33, 27 अप्रैल 2026 (UTC) == रोड़ लेख संबंध में== '[[रोड़]]’ लेख तथा ‘[[वार्ता:रोड़]]’ पृष्ठ पर बार-बार जोड़ी जा रही जानकारी के संदर्भों की जाँच करने पर विषय से संबंधित कोई भी पर्याप्त एवं विश्वसनीय जानकारी प्राप्त नहीं हो रही है। कृपया इस संबंध में मार्गदर्शन प्रदान करें कि ऐसी स्थिति में क्या उपयुक्त कार्यवाही की जानी चाहिए।<span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 14:27, 29 अप्रैल 2026 (UTC) == नाम परिवर्तन == SM7 जी नमस्ते। ‘[[जेचेम पेंट]]’ लेख हाल ही में निर्मित किया गया है, जबकि सॉफ़्टवेयर का प्रचलित एवं उपयुक्त नाम “जेकेमपेंट” एक शब्द के रूप में प्रयोग होता है। अतः शीर्षक का इस रूप में होना अधिक उचित प्रतीत होता है। चूँकि लेख अभी नया है, कृपया मार्गदर्शन प्रदान करने का कष्ट करें कि क्या इस स्थिति में सीधे स्थानांतरण (नाम परिवर्तन) किया जा सकता है, अथवा इसके लिए औपचारिक अनुरोध प्रक्रिया अपनाना आवश्यक होगा।<span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 09:20, 30 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, आप आश्वस्त हों तो सीधे कर दें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 11:55, 30 अप्रैल 2026 (UTC) == [[:साँचा:Personbox|साँचा:Personbox]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:साँचा:Personbox|साँचा:Personbox]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। अप्रचलित साँचा यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। == क्या यह उचित है। == महोदय, मैने एक नया खाता [[सदस्य:AMAN KUMAR Bot]] बनाया है जिसके माध्यम से bot के लिए परीक्षण कर रहा हूं अभी [[विकिपीडिया:बॉट/अनुमोदन हेतु अनुरोध]] नहीं किया है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 03:06, 13 जून 2026 (UTC) == हटाए गए लेख के पुनर्निर्माण एवं शीह टैग हटाने के संबंध में == SM7 जी नमस्ते! ‘स्टोरिको सेरामिका’ लेख को पूर्व में दो बार साफ़ प्रचार मापदंड के अंतर्गत हटाया जा चुका है। इसके बावजूद, ‘[[स्टोरिको सेरामिका (एलएलपी)]]’ नाम से लेख को पुनः निर्मित किया गया है। साथ ही, इस पर किए गए शीघ्र हटाने के अनुरोध को भी बार-बार हटाया जा रहा है। ऐसी स्थिति में कृपया इस विषय की समीक्षा कर आवश्यक कार्रवाई करने का कष्ट करें, ताकि बार-बार पुनर्निर्माण एवं अनुचित रूप से हटाए जा रहे अनुरोधों की समस्या का समाधान हो सके।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 18:27, 26 जून 2026 (UTC) == [[:अंडकाश्म/अडुक|अंडकाश्म/अडुक]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:अंडकाश्म/अडुक|अंडकाश्म/अडुक]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#ल4|मापदंड ल4]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#ल4|ल4]]{{*}} प्रतिलिपि लेख'''</center> इस मापदंड के अंतर्गत वो लेख आते हैं जो किसी पुराने लेख की प्रतिलिपि हैं। इसमें वे लेख भी आते हैं जो किसी ऐसे विषय पर बनाए गए हैं जिनपर पहले से लेख मौजूद है और पुराना लेख नए लेख से बेहतर है। कृपया लेख बनाने से पहले उस शीर्षक के लिये [[विशेष:Search|खोज]] कर लिया करें। यदि आप इस विषय पर और लिखना चाहते हैं तो मूल लेख पर लिखें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:01, 9 जुलाई 2026 (UTC) == Compromise == Hey, if you'd like to adjust the block I'm letting you know there are no signs of an account compromise on [[User:अनुज साव22]]. Best regards! [[सदस्य:A09|A09]] ([[सदस्य वार्ता:A09|वार्ता]]) 08:23, 18 जुलाई 2026 (UTC) p8y0o4d0vl138xzljs82osck202u2hu 6587025 6587024 2026-07-18T09:05:39Z SM7 89247 re 6587025 wikitext text/x-wiki <!-- Please do NOT delete this line. Thanks! -->{{/header}} <!-- कृपया इस लाइन और ऊपर की लाइन को को न हटायें, धन्यवाद !--> == नए साल की शुभकामनाएँ == <div style="background:#E8F5E9; padding:10px; border:1px solid #81C784; border-radius:6px;"> '''SM7 जी, नववर्ष 2026 की हार्दिक शुभकामनाएँ!''' यह नया साल आपके और आपके परिवार के लिए अच्छा स्वास्थ्य, सफलता और सुख-समृद्धि लेकर आए। [[File:Everlasting Fireworks looped.gif|left|x173px]] हिंदी विकिपीडिया पर आपके योगदान के लिए धन्यवाद। [[सदस्य:Chronos.Zx|<span style="color:blue; font-weight:bold;">क्रोनोस.Zx</span>]] ([[सदस्य वार्ता:Chronos.Zx|वार्ता]]) 13:15, 1 जनवरी 2026 (UTC) </div> :@[[सदस्य:Chronos.Zx|Chronos.Zx]] जी, बहुत-बहुत धन्यवाद। आपको भी नववर्ष अत्यंत मंगलमय हो। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:24, 2 जनवरी 2026 (UTC) == विशेष: कार्यक्रम आयोजक अधिकार == नमस्ते [[सदस्य:SM7|SM7]], आप मुझे कार्यक्रम आयोजक के अधिकार के आवेदन दर्ज करने के लिए पृष्ठ बताने के कृपा करे | [[सदस्य:Dev Jadiya|Dev Jadiya]] ([[सदस्य वार्ता:Dev Jadiya|वार्ता]]) 09:08, 18 मार्च 2026 (UTC) == व7 के अंतर्गत हटाए गए लेख के पुनर्विचार हेतु अनुरोध == @[[सदस्य:SM7|SM7]] महोदय, मैं आपको [[कमलेश कमल]] लेख के संबंध में लिख रहा हूँ जिसे आपने [[वि:पृष्ठ हटाने की नीति#व7|व7]] के अंतर्गत हटाया था। जब लेख को शीघ्र हटाने के लिए चिह्नित किया गया, तब मैंने तुरंत उठाई गई आपत्तियों को दूर करने के लिए आवश्यक बदलाव किए। मैंने पूरे लेख में महत्वपूर्ण सुधार किए, जिसमें प्रचारात्मक और प्रशंसात्मक भाषा हटाना, सामग्री को निष्पक्ष दृष्टिकोण (neutral point of view) में दोबारा लिखना, और इसे अधिक विश्वकोशीय बनाने के लिए विस्तार करना शामिल था। मेरा मानना है कि संशोधित संस्करण अब प्रचारात्मक नहीं था, या कम से कम इतना नहीं कि उसे व7 के अंतर्गत हटाया जाए। मैंने इन परिवर्तनों का उल्लेख लेख के वार्ता पृष्ठ पर भी किया था। मेरी समझ के अनुसार, व7 उन पृष्ठों पर लागू होता है जो पूरी तरह से प्रचारात्मक होते हैं और जिनमें सुधार की संभावना नहीं होती। किए गए सुधारों को देखते हुए, आपसे निवेदन है कि कृपया लेख को पुनर्स्थापित करने पर विचार करें। साथ ही, यदि कोई अन्य कमी या समस्या शेष हो, तो कृपया उसे बताने का कष्ट करें ताकि मैं सामग्री में और सुधार कर सकूँ। [[सदस्य:BBBhagwati|BBBhagwati]] ([[सदस्य वार्ता:BBBhagwati|वार्ता]]) 16:41, 7 अप्रैल 2026 (UTC) == रोलबैक अधिकार के नामांकन पर आपके विचार/मत हेतु == <div style="background-color: #FFF9E6; padding: 15px; border: 1px solid #DAA520; border-radius: 8px; margin-top: 10px;"> नमस्ते, आशा है आप सकुशल होंगे। मैं पिछले कुछ समय से हिंदी विकिपीडिया पर सक्रिय रूप से गश्त कर रहा हूँ और हाल के बदलावों में स्पष्ट बर्बरता को हटाने का प्रयास कर रहा हूँ। अपने इस कार्य को और अधिक सुचारू बनाने के लिए, मैंने स्वयं को '''रोलबैक अधिकार''' के लिए नामांकित किया है। चूँकि आप हिंदी विकिपीडिया के एक अनुभवी सदस्य हैं, इसलिए मेरा आपसे विनम्र आग्रह है कि कृपया मेरे हालिया योगदानों की समीक्षा करें और अपना बहुमूल्य मत या सुझाव प्रदान करें। आपका समर्थन और मार्गदर्शन मेरे लिए अत्यंत उत्साहजनक होगा। '''नामांकन यहाँ देखें:''' [[विकिपीडिया:रोलबैकर्स अधिकार हेतु निवेदन#AMAN KUMAR|मेरे नामांकन पर अपना मत दें]] सहयोग के लिए अग्रिम धन्यवाद! सादर,<br> [[सदस्य:AMAN KUMAR|AMAN KUMAR]] [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 11:29, 11 अप्रैल 2026 (UTC) </div> == पिण्डार या पिण्डर नदी == नमस्ते SM7 जी, मैं आज [[पिण्डार नदी]] नामक लेख पर देख रहा हूँ कि आपने इसके समकक्ष भोजपुरी लेख निर्मित किया। वहाँ आपने शीर्षक में "पिण्डार" के स्थान पर "पिंडर" रखा। इस हिसाब से यहाँ भी "पिण्डर नदी" या "पिंडर नदी" होना चाहिए। यदि आपको सही लगता है तो यह स्थानान्तरण कर देना चाहिए। मुझे इसकी सही जानकारी नहीं है।<span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 18:36, 14 अप्रैल 2026 (UTC) :@[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय, अब जांचा तो कुछ उदाहरण मिले :*[https://www.livehindustan.com/uttarakhand/story-garhwal-pindar-river-water-poured-into-kumaon-kosi-river-jal-jeevan-mission-6775827.html लाइव हिन्दुस्तान] :* [https://www.jagran.com/uttarakhand/almora-pindar-river-water-advocates-for-release-in-nonviolent-rivers-19447355.html दैनिक जागरण] :* [https://www.drishtiias.com/hindi/state-pcs-current-affairs/pindari-glacier-to-make-kumaon-s-drying-rivers-sadaneera दृष्टि आईएएस] :इन संदर्भों के अनुसार इसका नाम स्थानांतरण करके [[पिंडर नदी]] करना चाहिए| [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 18:56, 14 अप्रैल 2026 (UTC) ::@[[सदस्य:संजीव कुमार|संजीव कुमार]] @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] हाँ, इसके नाम में ड पर आ की मात्रा नहीं है। मैं इस नदी का पानी भी पी चुका हूँ, पर मेरी हिम्मत नहीं कि मैं आधा ण हटाऊँ। यह विवादास्पद बदलाव लेख के वार्ता पन्ने पे चर्चा के बाद पर्याप्त समर्थन से किया जाय तो बेहतर होगा। सादर। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 08:37, 15 अप्रैल 2026 (UTC) :::जी, चर्चा के बिना मैं स्थानान्तरित कर सकता हूँ। बाकी आप चाहो तो चर्चा भी आरम्भ कर सकते हैं। @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, आपने जो स्रोत दिये हैं उनमें पिंडर और पिंडार दोनों लिखे हैं। इसके अतिरिक्त दृष्टि आईएएस वाला स्रोत विश्वसनीय नहीं है जबकि समाचार वाले भी एकरूप नहीं होने के कारण उचित नहीं माने जा सकते। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:41, 15 अप्रैल 2026 (UTC) ::::कृपया {{tlx|virusbox}} को भी देखें। इसे आपने बहुत पहले आयात किया था लेकिन सम्बंधित मोड्यूल का आयात नहीं किया गया। @[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी ने {{tlx|विषाणु}} क्यों निर्मित किया है, मुझे इसका कोई कारण समझ में नहीं आया। <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 13:45, 15 अप्रैल 2026 (UTC) ::::नमस्ते SM7 जी, @[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, आप स्थानान्तरित कर सकते है। खोजने पर काफ़ी विश्वसनीय स्रोत है, जिन में '''पिंडर नदी''' ही लिखा है। [https://www.google.co.th/books/edition/Prachin_Madhya_Himalaya_izkphu_e_fgeky/SeKkhjTwMbcC?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA8&printsec=frontcover], [https://www.google.co.th/books/edition/2026_27_UKPSV_UKSSSC_Special_General_Stu/YOS4EQAAQBAJ?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA132&printsec=frontcover], [https://www.google.co.th/books/edition/Aao_Karen_Himalaya_Mein_Trekking/qfVzBQAAQBAJ?hl=en&gbpv=1&dq=%E0%A4%AA%E0%A4%BF%E0%A4%82%E0%A4%A1%E0%A4%B0+%E0%A4%A8%E0%A4%A6%E0%A5%80&pg=PA95&printsec=frontcover] <span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 13:55, 15 अप्रैल 2026 (UTC) :::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] महोदय, :::::नदी के नाम पर उचित मार्गदर्शन के लिए धन्यवाद। वर्तनी के संबंध में आपका निर्णय मुझे पूरी तरह स्वीकार है, कृपया आप ही इसे उपयुक्त नाम पर स्थानांतरित कर दें। :::::'''<code><nowiki>{{विषाणु}}</nowiki></code>''' साँचे के निर्माण का कारण केवल तकनीकी था। पुराना <code><nowiki>{{virusbox}}</nowiki></code> साँचा संबंधित मॉड्यूल्स के अभाव में काम नहीं कर रहा था और लेखों में कोडिंग की त्रुटियाँ (error) दिखा रहा था। मुझे जटिल मॉड्यूल आयात करने की जानकारी नहीं थी, इसलिए लेखों को त्रुटिमुक्त करने के लिए मैंने सीधे स्वदेशी '''<code><nowiki>{{ज्ञानसंदूक}}</nowiki></code>''' ढाँचे का उपयोग करके यह नया साँचा बनाया, जिसे किसी बाहरी मॉड्यूल की आवश्यकता ही नहीं है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 13:58, 15 अप्रैल 2026 (UTC) ::::::@[[सदस्य:संजीव कुमार|संजीव कुमार]] जी, मैं मूल साँचे को और मॉड्यूल को अद्यतन कर दूंगा। वैसे यह मुझे भी समझ में नहीं आया कि जब यह बिना मॉड्यूल के काम नहीं कर रहा तो मैंने यह काम अधूरा क्यों छोड़ा। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:53, 16 अप्रैल 2026 (UTC) ==जिज्ञासा== नमस्कार! SM7 जी, लेख हटाने हेतु चल रही चर्चाओं के संबंध में एक जिज्ञासा है। सामान्यतः ऐसी चर्चाओं की एक निर्धारित समयसीमा होती है, किन्तु देखा गया है कि [[:श्रेणी:लेख हटाने हेतु वर्तमान चर्चाएँ|कई चर्चाएँ लंबे समय तक बिना किसी निष्कर्ष]] के लंबित रहती हैं। कुछ लेखों पर हुई चर्चाओं का अभी तक कोई स्पष्ट परिणाम सामने नहीं आया है कि उन्हें रखा जाना है या हटाया जाना है। * जिज्ञासा ये है की सामान्यतः इन चर्चाओं के निष्कर्ष तक पहुँचने की समय-सीमा क्या निर्धारित होती है तथा किन परिस्थितियों में इनका परिणाम घोषित किया जाता है।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 09:56, 16 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, यह इस बात पे निर्भर है कि चर्चा में भागीदार लोग कितने हैं और उनके मतों के आधार पर स्पष्ट राय क्या निकल कर आई है। अंग्रेजी की तरह यहाँ पर समय सीमा या रीलिस्ट करने जैसा कुछ नहीं है। ऐसी चर्चाओं में सदस्यों की कम भागीदारी हिंदी विकिपीडिया की एक बड़ी समस्या है। ऐसी ही स्थिति नाम बदलाव या कुछ अन्य चीजों को लेकर भी है जहाँ काम इसलिए लंबित रहता है क्योंकि चर्चा में भाग लेने वाले लोग नहीं हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:34, 16 अप्रैल 2026 (UTC) == सुझाव दें == @[[सदस्य:SM7|SM7]] महोदय मैने [[विकिपीडिया:चौपाल|चौपाल]] पर एक प्रस्ताव रखा है [[विकिपीडिया:चौपाल#पृष्ठ स्थानांतरण (Page Move) अधिकार और नए सुरक्षा स्तर पर पुनर्विचार हेतु प्रस्ताव|पृष्ठ स्थानांतरण (Page Move) अधिकार और नए सुरक्षा स्तर पर पुनर्विचार हेतु प्रस्ताव]] [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 19:00, 16 अप्रैल 2026 (UTC) ==निवेदन पर मत आमंत्रण== नमस्कार, SM7 जी! मेरे [[विकिपीडिया:स्वतः_परीक्षित_अधिकार_हेतु_निवेदन#चाहर_धर्मेंद्र|स्वतः परीक्षित अधिकार हेतु किए गए निवेदन]] के संबंध में आपके विचार मेरे लिए अत्यंत महत्वपूर्ण हैं। आपसे विनम्र निवेदन है कि कृपया समय निकालकर इस पर अपना मत अवश्य प्रदान करें। * आपके सुझाव एवं प्रतिक्रिया मेरे लिए मार्गदर्शक सिद्ध होंगे।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 04:30, 22 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, कोई चर्चा शुरू करके उसकी सूचना चौपाल पे दे देना पर्याप्त होता है। जिसे मन होगा ज़रूर चर्चा में हिस्सा लेगा। अपने द्वारा शुरू की गई चर्चा (विशेषकर कोई नामांकन) पर घूम-घूम के सबसे वार्ता पन्ने पे संदेश लिखना उचित नहीं होता, यह प्रत्यक्ष या अप्रत्यक्ष रूप से चुनाव प्रचार (कैनवासिंग) है और इस तरह के काम को मैं बिल्कुल पसंद नहीं करता; हालाँकि, जब मैं नया था तब मैंने भी ऐसे काम किये थे। बाद में समझ में आया कि यह बेवजह की उछलकूद है। :मैं आपके स्वनामंकन से पहले ही कुछ दिनों पूर्व ख़ुद आपका नामांकन करने के बारे में सोच रहा था; फिर जब आपने नामांकन किया तब समर्थन करने की भी सोच रहा था। अब आपने यहाँ संदेश लिख दिया। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:46, 22 अप्रैल 2026 (UTC) ::SM7 जी! आपके सुझाव एवं मार्गदर्शन के लिए धन्यवाद। मैं आपकी बात से सहमत हूँ और भविष्य में इस प्रकार की सूचना देने के संबंध में अधिक सावधानी रखूँगा। ::* मेरा उद्देश्य केवल सूचना साझा करना था, न कि किसी प्रकार का कैनवासिंग करना। यदि इससे असुविधा हुई हो तो उसके लिए क्षमाप्रार्थी हूँ। ::आपके समर्थन के विचार के लिए भी धन्यवाद। <span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 06:07, 22 अप्रैल 2026 (UTC) == लेख निर्वाचन नामांकन == SM7 जी! क्या ‘[[राष्ट्रीय उद्यान]]’ लेख को निर्वाचित लेख हेतु नामांकित करना उपयुक्त होगा? आपसे अनुरोध है कि कृपया समय निकालकर एक बार लेख का अवलोकन करें और मार्गदर्शन प्रदान करें कि क्या इसमें किसी प्रकार के और सुधार या संशोधन की आवश्यकता है। आपके सुझाव मेरे लिए अत्यंत उपयोगी होंगे। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 15:10, 26 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी नमस्ते। लेख अच्छा बनाया है आपने और आप इसपर बेहतरीन कार्य करने के लिये बधाई के पात्र हैं। मेरा सुझाव है कि आप इसे पहले '''[[वि:श्रेष्ठ लेख|श्रेष्ठ लेख]]''' हेतु नामांकित करें। इसके मापदंड निर्वाचित लेख की तुलना में थोड़े हल्के और आसान हैं। हालाँकि, हिंदी विकिपीडिया पर श्रेष्ठ लेख बनाने की प्रक्रिया उपलब्ध और लागू है पर आज तक किसी ने इसका उपयोग नहीं किया। तो हो सकता है आप '''श्रेष्ठ लेख बनाने वाले पहले विकिपीडियन''' बनें। (वैसे मैंने अभी देखा कि एक नामांकन 2018 में नवीन सिंह जी द्वारा किया गया था परंतु उसकी समीक्षा नहीं हुई - शायद उन्होंने सूचित नहीं किया चौपाल पे)। :एक बार श्रेष्ठ लेख के लिये प्रारंभिक समीक्षा हो जाने के बाद आप इसे '''निर्वाचित लेख''' के लिये भी नामांकित कर सकते हैं - जहाँ सामूहिक समीक्षा और सुधार सुझाये जायेंगे। अतः आप स्टेप-बाई-स्टेप चलें तो बेहतर होगा। :बाक़ी आपकी मर्जी है। अगर आप निर्वाचित लेख नामांकन करना चाहें तो सीधे भी कर सकते हैं। बस एक बात का ध्यान रखियेगा कि निर्वाचित लेख घोषित होने में काफ़ी समय लग सकता है - क्योंकि यहाँ समीक्षा इत्यादि में भाग लेने वालों की काफ़ी कमी है। :मैं दोनों ही प्रक्रियाओं में आपकी मदद अवश्य कर सकता हूँ। शुभकामनायें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 15:46, 26 अप्रैल 2026 (UTC) ::नमस्कार, SM7 जी! लेख के संबंध में आपके विस्तृत सुझाव एवं मार्गदर्शन के लिए हार्दिक धन्यवाद। आपने जो चरणबद्ध प्रक्रिया (पहले श्रेष्ठ लेख, तत्पश्चात निर्वाचित लेख) सुझाई है, वह अत्यंत उपयोगी एवं व्यावहारिक प्रतीत होती है। ::मैं आपके सुझाव के अनुसार पहले इसे श्रेष्ठ लेख हेतु नामांकित करने पर विचार करूँगा, ताकि प्रारंभिक समीक्षा के माध्यम से आवश्यक सुधार किए जा सकें। इसके पश्चात निर्वाचित लेख के लिए नामांकन करना अधिक उपयुक्त रहेगा। ::आगे की प्रक्रिया में आपके सहयोग के प्रस्ताव के लिए भी धन्यवाद—यह मेरे लिए अत्यंत सहायक होगा। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 01:53, 27 अप्रैल 2026 (UTC) :::@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] दोनों में अंतर के लिये कृपया एक बार [[:en:WP:GVF|WP:GVF]] देखें। और जहाँ तक मुझे नियमावली याद है, वर्तमान सक्रिय सदस्यों में [[स:संजीव कुमार|संजीव कुमार]] जी ही इकलौते सदस्य हैं जो इस समीक्षा को क्रियान्वित करने के लिये अर्ह हैं। अतः चौपाल पर और संजीव जी को अवश्य सूचित कीजियेगा। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 02:00, 27 अप्रैल 2026 (UTC) ::::जी, सूचना एवं मार्गदर्शन के लिए धन्यवाद। आपके सुझाव के अनुसार मैं चौपाल पर तथा संजीव कुमार जी को भी अवश्य सूचित करूँगा, ताकि समीक्षा प्रक्रिया उचित रूप से आगे बढ़ सके। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 02:33, 27 अप्रैल 2026 (UTC) == रोड़ लेख संबंध में== '[[रोड़]]’ लेख तथा ‘[[वार्ता:रोड़]]’ पृष्ठ पर बार-बार जोड़ी जा रही जानकारी के संदर्भों की जाँच करने पर विषय से संबंधित कोई भी पर्याप्त एवं विश्वसनीय जानकारी प्राप्त नहीं हो रही है। कृपया इस संबंध में मार्गदर्शन प्रदान करें कि ऐसी स्थिति में क्या उपयुक्त कार्यवाही की जानी चाहिए।<span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 14:27, 29 अप्रैल 2026 (UTC) == नाम परिवर्तन == SM7 जी नमस्ते। ‘[[जेचेम पेंट]]’ लेख हाल ही में निर्मित किया गया है, जबकि सॉफ़्टवेयर का प्रचलित एवं उपयुक्त नाम “जेकेमपेंट” एक शब्द के रूप में प्रयोग होता है। अतः शीर्षक का इस रूप में होना अधिक उचित प्रतीत होता है। चूँकि लेख अभी नया है, कृपया मार्गदर्शन प्रदान करने का कष्ट करें कि क्या इस स्थिति में सीधे स्थानांतरण (नाम परिवर्तन) किया जा सकता है, अथवा इसके लिए औपचारिक अनुरोध प्रक्रिया अपनाना आवश्यक होगा।<span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 09:20, 30 अप्रैल 2026 (UTC) :@[[सदस्य:चाहर धर्मेंद्र|चाहर धर्मेंद्र]] जी, आप आश्वस्त हों तो सीधे कर दें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 11:55, 30 अप्रैल 2026 (UTC) == [[:साँचा:Personbox|साँचा:Personbox]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:साँचा:Personbox|साँचा:Personbox]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। अप्रचलित साँचा यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। == क्या यह उचित है। == महोदय, मैने एक नया खाता [[सदस्य:AMAN KUMAR Bot]] बनाया है जिसके माध्यम से bot के लिए परीक्षण कर रहा हूं अभी [[विकिपीडिया:बॉट/अनुमोदन हेतु अनुरोध]] नहीं किया है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 03:06, 13 जून 2026 (UTC) == हटाए गए लेख के पुनर्निर्माण एवं शीह टैग हटाने के संबंध में == SM7 जी नमस्ते! ‘स्टोरिको सेरामिका’ लेख को पूर्व में दो बार साफ़ प्रचार मापदंड के अंतर्गत हटाया जा चुका है। इसके बावजूद, ‘[[स्टोरिको सेरामिका (एलएलपी)]]’ नाम से लेख को पुनः निर्मित किया गया है। साथ ही, इस पर किए गए शीघ्र हटाने के अनुरोध को भी बार-बार हटाया जा रहा है। ऐसी स्थिति में कृपया इस विषय की समीक्षा कर आवश्यक कार्रवाई करने का कष्ट करें, ताकि बार-बार पुनर्निर्माण एवं अनुचित रूप से हटाए जा रहे अनुरोधों की समस्या का समाधान हो सके।<span style="color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 18:27, 26 जून 2026 (UTC) == [[:अंडकाश्म/अडुक|अंडकाश्म/अडुक]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:अंडकाश्म/अडुक|अंडकाश्म/अडुक]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#ल4|मापदंड ल4]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#ल4|ल4]]{{*}} प्रतिलिपि लेख'''</center> इस मापदंड के अंतर्गत वो लेख आते हैं जो किसी पुराने लेख की प्रतिलिपि हैं। इसमें वे लेख भी आते हैं जो किसी ऐसे विषय पर बनाए गए हैं जिनपर पहले से लेख मौजूद है और पुराना लेख नए लेख से बेहतर है। कृपया लेख बनाने से पहले उस शीर्षक के लिये [[विशेष:Search|खोज]] कर लिया करें। यदि आप इस विषय पर और लिखना चाहते हैं तो मूल लेख पर लिखें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 15:01, 9 जुलाई 2026 (UTC) == Compromise == Hey, if you'd like to adjust the block I'm letting you know there are no signs of an account compromise on [[User:अनुज साव22]]. Best regards! [[सदस्य:A09|A09]] ([[सदस्य वार्ता:A09|वार्ता]]) 08:23, 18 जुलाई 2026 (UTC) :@[[सदस्य:A09|A09]] Thanks. I checked he is deleting contents from articles created by himself. Let him reply what exactly is the reason. Regards. --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 09:05, 18 जुलाई 2026 (UTC) 5785jcttrw2wifmnzlszkuvc0o9rklb सशस्त्र बल (विशेष शक्तियाँ) अधिनियम 0 644341 6586755 6390388 2026-07-17T13:22:17Z ~2026-40160-64 936689 lord word was wrong there 6586755 wikitext text/x-wiki {{Infobox legislation | name = सशस्त्र बल (विशेष शक्तियाँ) अधिनियम | imagesize = 100 | enacted_by = [[भारतीय संसद]] | status = In Force }} ''' सशस्त्र बल विशिष्ट शक्ति (विशेष शक्तियाँ) अधिनियम ''' [[भारतीय संसद]] द्वारा 11 सितम्बर 1958 को पारित किया गया था।<ref name=":0">{{Cite web |url=http://mha.nic.in/sites/upload_files/mha/files/pdf/armed_forces_special_powers_act1958.pdf |title="THE ARMED FORCES (SPECIAL POWERS) ACT, 1858" |access-date=28 मई 2015 |archive-url=https://web.archive.org/web/20170618115344/http://mha.nic.in/sites/upload_files/mha/files/pdf/armed_forces_special_powers_act1958.pdf |archive-date=18 जून 2017 |url-status=dead }}</ref> [[अरुणाचल प्रदेश]], [[असम]], [[मणिपुर]], [[मेघालय]], [[मिज़ोरम|मिजोरम]], [[नागालैण्ड|नगालैण्ड]] के ‘अशांत क्षेत्रों’ में तैनात सैन्‍य बलों को प्रारम्भ में इस विधि के अन्तर्गत विशेष शक्तियाँ प्राप्त थीं। [[कश्मीर]] घाटी में आतंकवादी घटनाओं में बढोतरी होने के बाद जुलाई 1990 में यह विधि ''' सशस्त्र बल (जम्मू एवं कश्मीर) विशेष शक्तियाँ अधिनियम, 1990 ''' के रूप में [[जम्मू और कश्मीर|जम्मू-कश्मीर]] में भी लागू किया गया।<ref name="mha-hin">{{cite web | url=http://www.mha.nic.in/hindi/acts | title=अधिनियम एवं नियम | publisher=गृह मंत्रालय, भारत सरकार | accessdate=28 मई 2015 | archive-url=https://web.archive.org/web/20150528180328/http://www.mha.nic.in/hindi/acts | archive-date=28 मई 2015 | url-status=dead }}</ref> हालाँकि राज्‍य के [[लद्दाख]] क्षेत्र को इस विधि की सीमा से बाहर रखा गया।भारत सरकार के गृह मन्त्रालय ने 22 अप्रैल 2018 को [[मेघालय]] से इस अधिनियम को हटा लिया। इसकी शुरुआत 1942 के समय हुई थी। [[भारतीय राष्ट्रीय सेना]] और जापानी सेना एक साथ मिल्कर पूर्वी बॉर्ड पर हमला करने वाले था। वायसराय लिनलिथगो को इन अटैक को रोकना था इसलिये उन्होन एक अध्यादेश पास किया, बल विशेष शक्ति अध्यादेश 1942 । == सशस्त्र बल विशेष शक्तियाँ (असम और मणिपुर) अधिनियम, 1958 == 1951 में, [[नागा नेशनल काउंसिल]] ने 1952 के प्रथम यहानिर्वाचन का बहिष्कार किया था, जो बाद में सरकारी विद्यालयों और अधिकारियों के बहिष्कार तक बढ़ा दिया गया था। इस स्थिति से निपटने के लिये, असम सरकार ने 1953 में नागा हिल्स में '' असम मेण्टेनेंस ऑफ़ पब्लिक ऑर्डर (ऑटोनॉमस डिस्ट्रिक्ट) एक्ट '' लागू किया और विद्रोहियों के विरुद्ध पुलिस कार्रवाई तेज कर दी। जब स्थिति गम्भीर हो गयी, तो असम ने नागा पहाड़ियों में असम राइफ़ल्स को तैनात कर दिया और '' असम अशान्त क्षेत्र अधिनियम, 1955 '' को अधिनियमित कर दिया, जिससे क्षेत्र में उग्रवाद का मुकाबला करने के लिये अर्धसैनिक बलों और सशस्त्र राज्य पुलिस को विधिक ढाँचा प्रदान किया गया। किन्तु असम राइफ़ल्स और राज्य सशस्त्र पुलिस नागा विद्रोह को रोक नहीं पाये और विद्रोही '' नागा राष्ट्रवादी परिषद '' (एनएनसी) ने 23 मार्च 1956 को एक समानान्तर सरकार " नागालैण्ड की संघीय सरकार " का गठन किया। '' सशस्त्र बल (असम और मणिपुर) विशेष शक्तियाँ अध्यादेश 1958 '' को 22 मई 1958 को राष्ट्रपति [[डॉ॰ राजेन्द्र प्रसाद]] द्वारा प्रख्यापित किया गया था। इसे 11 सितमृबर 1958 को '' सशस्त्र बल (असम और मणिपुर) विशेष शक्तियाँ अधिनियम, 1958 '' द्वारा प्रतिस्थापित किया गया था। '' सशस्त्र बल (असम और मणिपुर) विशेष शक्तियाँ अधिनियम, 1958 '' ने केवल राज्यों के राज्यपालों और केन्द्र शासित प्रदेशों के प्रशासकों को सम्बन्धित राज्य या केन्द्र शासित प्रदेश के क्षेत्रों को 'अशान्त' घोषित करने का अधिकार दिया। ==विशेषाधिकार== इस कानून के अंतर्गत सशस्त्र बलों को तलाशी लेने, गिरफ्तार करने व बल प्रयोग करने आदि में सामान्य प्रक्रिया के मुकाबले अधिक स्वतंत्रता है<ref name=":0"/> तथा नागरिक संस्थाओं के प्रति जवाबदेही भी कम है। ==विरोध== इस कानून का विरोध करने वालों में मणिपुर की कार्यकर्ता [[इरोम शर्मिला]] का नाम प्रमुख है। उन्होने इसको हटाने के लिये लगातार १५ वर्षों तक अनशन किया।आजकल इरोम शर्मीला अपने पति के साथ बैंगलोर में रहती हैं। ==सन्दर्भ== {{टिप्पणीसूची}}{{भारतीय कानून}} ==बाहरी कड़ियाँ== * [https://lakshyastudyias.com/afspa-upsc/ क्या है सशस्त्र बल विशेषाधिकार कानून ([AFSPA)? ] *[https://www.drishtiias.com/hindi/loksabha-rajyasabha-discussions/afspa सशस्त्र बल विशेषाधिकार कानून (AFSPA) ] * [https://www.punjabkesari.in/national/news/union-law-minister-kiren-ririju-made-a-big-statement-regarding-the-northeast-1575603 पूर्वोत्तर को लेकर केन्द्रीय कानून मन्त्री किरन रिरिजु का बड़ा बयान] [[श्रेणी:भारतीय सेना]] [[श्रेणी:भारत के अधिनियम]] {{आधार}} 059uf7ffv6nx472gx08k6rxvoikpj9c रतिचित्रण 0 664773 6586989 6576825 2026-07-18T04:02:02Z V76sijon 936770 /* */ 6586989 wikitext text/x-wiki {{ज्ञानसंदूक | above = रतिचित्रण (पॉर्न) | image = [[File:XXX P icon.svg|120px|alt=Circular icon with the letters "xxx"]] | caption = "XXX" का इस्तेमाल किसी काॅन्टेंट के पोर्नोग्राफ़िक होने के लिए बताया जाता है। | label1 = अन्य नाम | data1 = पोर्नोग्राफ़ी, कामोद्दीपक चित्र, संभोगचित्रण, अश्लील साहित्य | label2 = उपवर्ग (Subclass of) | data2 = इरोटिका (Erotica), यौन प्रतिनिधित्व | label3 = किसका हिस्सा है (Part of) | data3 = यौन उद्योग (Sex industry) | label4 = माध्यम | data4 = फ़िल्म, चित्र, साहित्य, इंटरनेट, कला, पत्रिका | label5 = मुख्य प्रभाव / उद्देश्य | data5 = यौन उत्तेजना (Sexual arousal) उत्पन्न करना | label6 = संबंधित व्यवसायी | data6 = [[अश्लील अभिनेता]] (Pornographic actor/actress), यौनकर्मी | label7 = इतिहास | data7 = रतिचित्रण का इतिहास | label8 = विकिडाटा आइटम | data8 = [https://www.wikidata.org/wiki/Q291 Q291] }} '''पॉर्न''', '''रतिचित्रण''', '''पोर्नोग्राफ़ी''', '''कामोद्दीपक चित्र''' या '''संभोगचित्रण''' (Pornography) किसी [[पुस्तक]], चित्र, [[फ़िल्म]], मूर्तिकला या अन्य किसी भी दृश्य-श्रव्य माध्यम से यौन क्रियाओं और नग्नता का वह चित्रण है, जिसका प्राथमिक उद्देश्य दर्शकों या पाठकों में यौन उत्तेजना (Sexual arousal) पैदा करना होता है।<ref>{{cite book |last=McNair |first=Brian |year=2013 |title=Porno? Chic!: How Pornography Changed the World and Made it a Better Place |url=https://archive.org/details/pornochichowporn0000mcna |publisher=Routledge |isbn=978-0-415-57290-3 |pages=[https://archive.org/details/pornochichowporn0000mcna/page/18 19]-20}}</ref> भारत सहित दुनिया के कई देशों में अश्लील सामग्री का उत्पादन, प्रकाशन, प्रसारण या व्यावसायिक वितरण कानूनी रूप से विनियमित या पूर्णतः अवैध है।<ref>{{cite book|last=Rajak|first=Brajesh|title=Pornography Laws: XXX Must not be Tolerated|year=2011|publisher=Universal Law Publishing|isbn=978-8175349995|page=[https://archive.org/details/nlsiu.363.47.raj-2.25456/page/61 61]|url=https://archive.org/details/nlsiu.363.47.raj-2.25456|url-status=live}}</ref> <hiero> मै सेक्स इंडस्ट्री में जाना चाहता हूं कोई पोस्ट हो तो कॉल करे 7607975735 </hiero> == व्युत्पत्ति (Etymology) == अंग्रेजी शब्द "Pornography" (पोर्नोग्राफी) की उत्पत्ति प्राचीन यूनानी (Greek) भाषा से हुई है। यह शब्द πορνογραφία (pornographia) से बना है, जो दो शब्दों का मेल है: πόρνη (pórnē), जिसका अर्थ है "वेश्या", और γράφειν (graphein), जिसका अर्थ है "लिखना" या "चित्रित करना"।<ref>{{cite web|url=https://www.etymonline.com/word/pornography |title=pornography |work=Online Etymology Dictionary |access-date=21 April 2011 |archive-url=https://web.archive.org/web/20220618000000/https://www.etymonline.com/word/pornography |archive-date=18 June 2022 |url-status=live}}</ref> मूल रूप से, इसका शाब्दिक अर्थ "वेश्याओं के बारे में लेखन या चित्रण" था। 19वीं सदी के मध्य में इस शब्द का उपयोग कला और साहित्य के संदर्भ में उस सामग्री को परिभाषित करने के लिए किया जाने लगा जिसे समाज में "अश्लील" माना जाता था। == इतिहास और विकास == {{multiple image | align = right | direction = vertical | width = 160 | image3 = Jenna Jameson 2014.jpg | caption3 = जेना जेमिसन (Jenna Jameson) }} पोर्नोग्राफी का इतिहास मानव सभ्यता जितना ही पुराना है। यद्यपि प्राचीन काल में इसे आज की तरह 'अश्लील' के रूप में नहीं देखा जाता था, बल्कि यह कामुक कला और धर्म का हिस्सा हुआ करता था। === प्राचीन काल === प्राचीन सभ्यताओं जैसे मेसोपोटामिया, रोम और यूनान में कामुक कलाकृतियां और चित्र आम थे।<ref>{{cite book |last=Black |first=Jeremy |author2=Green, Anthony |year=1992 |title=Gods, Demons and Symbols of Ancient Mesopotamia: An Illustrated Dictionary |publisher=The British Museum Press |isbn=0-7141-1705-6 |pages=150-152 |url=https://archive.org/details/godsdemonssymbol00jere |archive-url=https://web.archive.org/web/20230317000000/https://archive.org/details/godsdemonssymbol00jere |archive-date=17 March 2023 |url-status=live |access-date=22 August 2020}}</ref> रोमन साम्राज्य के पोम्पेई (Pompeii) शहर के खंडहरों में भित्तिचित्रों पर यौन क्रियाओं के स्पष्ट चित्रण मिले हैं। प्राचीन भारत में भी कामुकता को जीवन के चार पुरुषार्थों (धर्म, अर्थ, काम, मोक्ष) में से एक माना गया। महर्षि वात्स्यायन द्वारा रचित '[[कामसूत्र]]' (Kamasutra) और खजुराहो व कोणार्क के मंदिरों की मूर्तियां इसका ऐतिहासिक प्रमाण हैं कि प्राचीन भारत में यौन क्रियाओं का वैज्ञानिक और कलात्मक चित्रण खुले तौर पर मौजूद था।<ref>{{cite book |last=Doniger |first=Wendy |author2=Kakar, Sudhir |year=2002 |title=Kamasutra |url=https://archive.org/details/kamasutra00vats |publisher=Oxford University Press |series=Oxford World's Classics |isbn=0-19-283982-9 |pages=xi–xii}}</ref> === आधुनिक युग और सिनेमा === आधुनिक पोर्नोग्राफी का फ़िल्म के रूप में निर्माण 1895 के आसपास सिनेमा के आविष्कार के बाद शुरू हुआ। प्रारंभिक दौर में चित्रकारों और फोटोग्राफरों द्वारा नग्न शरीर का अध्ययन (Nude study) किया जाता था। 1869 में पहली बार 'एउगुने फिराऊ' (Eugène Pirou) और 'अल्बर्ट किर्च्नर' (Albert Kirchner) ने एक फ्रेंच फिल्म प्रदर्शित की थी जिसमें एक महिला को नग्न दिखाया गया था।<ref>{{cite web |last=Bottomore |first=Stephen |year=1996 |title=Léar (Albert Kirchner) |editor-last=Herbert |editor-first=Stephen |editor2-last=McKernan |editor2-first=Luke |work=Who's Who of Victorian Cinema |publisher=British Film Institute |url=http://www.victorian-cinema.net/kirchner.htm |archive-url=https://web.archive.org/web/20061010150917/http://www.victorian-cinema.net/kirchner.htm |archive-date=10 October 2006 |url-status=dead |access-date=15 October 2006}}</ref> 1920 के दशक के आसपास इसका व्यावसायिक निर्माण शुरू हुआ, जिसके मुख्य केंद्र फ़्रांस और अमेरिका थे। उस समय कई देशों में कड़े सेंसरशिप कानूनों (जैसे अमेरिका का 'कॉमस्टॉक एक्ट') के कारण इसका व्यापार गुप्त रूप से किया जाता था।<ref>{{cite book |last=Giesberg |first=Judith Ann |year=2017 |title=Sex and the Civil War: Soldiers, Pornography, and the Making of American Morality |location=United States |publisher=University of North Carolina Press |isbn=978-1-4696-3128-8 |url=https://muse.jhu.edu/book/52011 |archive-url=https://web.archive.org/web/20230404000000/https://muse.jhu.edu/book/52011 |archive-date=4 April 2023 |url-status=live |access-date=19 March 2023}}</ref> === 'गोल्डन एज' से इंटरनेट तक === 1970 और 1980 के दशक को अश्लील सिनेमा का 'स्वर्ण युग' (Golden Age of Porn) कहा जाता है। इस दौरान "डीप थ्रोट" (Deep Throat, 1972) जैसी फिल्में मुख्यधारा के सिनेमाघरों में रिलीज़ हुईं और उन्होंने भारी मुनाफा कमाया। बाद में वीसीआर (VCR) और वीएचएस (VHS) टेप के आविष्कार ने पोर्न को सार्वजनिक सिनेमाघरों से निकालकर लोगों के निजी बेडरूम तक पहुँचा दिया। 1990 के दशक के अंत और 2000 के दशक में हाई-स्पीड इंटरनेट और फिर 'ट्यूब साइट्स' (जैसे Pornhub, Xvideos) के आगमन ने इसे एक विशाल, आसानी से सुलभ और वैश्विक उद्योग बना दिया।<ref>{{cite book |last=Lane |first=Frederick S. |year=2000 |title=Obscene Profits: The Entrepreneurs of Pornography in the Cyber Age |publisher=Routledge |isbn=978-0-415-92096-4 |page=11 |url=https://archive.org/details/obsceneprofits00fred |archive-url=https://web.archive.org/web/20230307000000/https://archive.org/details/obsceneprofits00fred |archive-date=7 March 2023 |url-status=live |access-date=6 March 2023}}</ref> == वर्गीकरण और कला से भिन्नता == {{multiple image | align = left | direction = vertical | width = 200 | image1 = Roman Kramsztyk - Sielanka.jpg | caption1 = प्रकृतिवाद (Nudism) और अश्लीलता में स्पष्ट अंतर है। प्रकृतिवाद में नग्नता को प्राकृतिक रूप से स्वीकार किया जाता है। | image2 = Justine ou les Malheurs de la vertu (orgy with a monk 2).jpg | caption2 = 1791 के फ्रांसीसी उपन्यास जस्टिन से एक उत्कीर्णन, जिसमें भिक्षु व्यभिचार में लिप्त हैं। फ्रांसीसी क्रांति के दौरान अश्लील साहित्य अधिकारियों के खिलाफ विरोध का एक माध्यम बन गया। मार्क्विस डी सादे द्वारा लिखित उपन्यास में एक युवा लड़की जस्टिन की कहानी है, जो जब एक मठ में शरण लेती है, तो भिक्षुओं द्वारा उत्पीड़न और व्यभिचार का शिकार होती है। इस तरह के कार्यों ने चर्च और राजतंत्र की निंदा की और क्रांति की भावना को बढ़ावा दिया। | image3 = Mahe Titof Inkorrekt(e)s.jpg | caption3 = टीटोफ़ (Titof), प्रसिद्ध फ्रांसीसी पॉर्न अभिनेता। वयस्क उद्योग में पुरुष अभिनेताओं का भी बड़ा वर्ग है। }} अश्लीलता को समझना और परिभाषित करना हमेशा से कानूनविदों और कला समीक्षकों के लिए जटिल रहा है। इसे अक्सर 'इरोटिका' (Erotica) से अलग माना जाता है। इरोटिका में कलात्मकता, सौंदर्य, रोमांस और भावनाओं पर ध्यान केंद्रित किया जाता है, जबकि पोर्नोग्राफी में मुख्य रूप से शारीरिक कृत्यों का सीधा, यांत्रिक और स्पष्ट चित्रण होता है।<ref>{{cite web |last=Seltzer |first=Leon F. |date=6 April 2011 |title=What Distinguishes Erotica from Pornography? |work=Psychology Today |url=https://www.psychologytoday.com/us/blog/evolution-of-the-self/201104/what-distinguishes-erotica-from-pornography |access-date=2 February 2016}}</ref> इसे मुख्य रूप से दो श्रेणियों में बांटा जाता है: * '''सॉफ़्टकोर (Softcore):''' इसमें आंशिक नग्नता और यौन सुझाव वाले दृश्य होते हैं, लेकिन स्पष्ट यौन गतिविधि या यौन अंगों के सीधे प्रवेश (Penetration) के दृश्य नहीं दिखाए जाते। इसे अक्सर मुख्यधारा की पत्रिकाओं और टीवी चैनलों पर कुछ सीमाओं के साथ अनुमति दी जाती है। * '''हार्डकोर (Hardcore):''' इसमें ग्राफिक यौन गतिविधि, गुप्तांगों का स्पष्ट प्रदर्शन और प्रवेश के दृश्य शामिल होते हैं, जिसमें वास्तविक (Non-simulated) सेक्स दृश्य भी शामिल हैं।<ref>{{cite news |last=Amis |first=Martin |date=17 March 2001 |title=A rough trade |work=The Guardian |url=https://www.theguardian.com/books/2001/mar/17/martin.amis |archive-url=https://web.archive.org/web/20200524000000/https://www.theguardian.com/books/2001/mar/17/martin.amis |archive-date=24 May 2020 |url-status=live |access-date=29 February 2012}}</ref> === उप-शैलियाँ (Sub-genres) === आधुनिक पोर्नोग्राफी में अनगिनत विधाएं शामिल हैं, जो दर्शकों की अलग-अलग मनोवैज्ञानिक पसंद, फैंटेसी और रुझान (Fetishes) पर आधारित होती हैं। यद्यपि विषमलैंगिक (Heterosexual) कृत्यों की अश्लीलता सबसे अधिक देखी जाती है, लेकिन इसके कई गैर-पारंपरिक रूप भी लोकप्रिय हैं:<ref>{{cite journal |last=Mulholland |first=Monique |year=2011 |title=When Porno Meets Hetero |journal=Australian Feminist Studies |volume=26 |issue=67 |pages=119–135 |doi=10.1080/08164649.2011.546332}}</ref> * '''एमेच्योर (Amateur pornography):''' जिसमें आम लोग (नॉन-प्रोफेशनल) अपने निजी वीडियो साझा करते हैं। * '''गोंजो (Gonzo):''' इसमें कोई पटकथा (Script) नहीं होती और अभिनेता सीधे कैमरे की ओर देखकर (Fourth wall तोड़कर) दर्शकों से जुड़ते हैं। * '''बॉन्डेज और बी.डी.एस.एम (BDSM / Bondage):''' जिसमें प्रभुत्व, अधीनता और साधो-मसोचिज्म (Sadomasochism) का चित्रण होता है। * '''यौन अभिविन्यास आधारित:''' स्ट्रेट पॉर्न, [[गे पॉर्न]] (Gay pornography), लेस्बियन और बाइसेक्सुअल पॉर्न। * '''JAV (जापानी एडल्ट वीडियो):''' एशिया में जापान इस उद्योग का सबसे बड़ा केंद्र है, जिसकी अपनी एक विशिष्ट शैली है। == वयस्क मनोरंजन उद्योग और प्रमुख हस्तियां == {{multiple image | align = right | direction = vertical | width = 140 | image1 = Asa Akira at AVN Awards 2016 (3).JPG | caption1 = आसा अकीरा (Asa Akira), उद्योग की सबसे सफल अभिनेत्रियों में से एक। | image2 = Lana Rhoades 2-2017.jpg | caption2 = लाना रोड्स (Lana Rhoades), आधुनिक इंटरनेट युग की लोकप्रिय हस्ती। | image3 = Fanny Hill 1906 image03.jpg | caption3 = फैनी हिल (1748), जिसे "मूल अंग्रेजी गद्य पोर्नोग्राफी का पहला उदाहरण, और उपन्यास के रूप का उपयोग करने वाली पहली पोर्नोग्राफी" माना जाता है, सबसे अधिक मुकदमे चलाए गए और प्रतिबंधित पुस्तकों में से एक रही है। ऊपर: एडौआर्ड-हेनरी अव्रिल (1887) द्वारा फैनी हिल का एक चित्रण। | image4 = Alexis Texas 2017.jpg | caption4 = एलेक्सिस टेक्सास (Alexis Texas) | image5 = Uehara Ai (上原亜衣) at Tokyo Game Show 2014 (2).jpg | caption5 = उएहारा ऐ (Uehara Ai), प्रसिद्ध जापानी एवी अभिनेत्री। }} वयस्क मनोरंजन उद्योग (Adult Entertainment Industry) आज अरबों डॉलर का वैश्विक कारोबार बन चुका है। अकेले अमेरिका, यूरोप और जापान इसके सबसे बड़े बाजार हैं। इस उद्योग का विस्तार फिल्म निर्माण से लेकर सेक्स टॉयज, वेबकैम मॉडलिंग और मैगजीन तक फैला हुआ है। इस उद्योग में उत्कृष्ट कार्य करने वाले अभिनेताओं, अभिनेत्रियों और निर्देशकों को लास वेगास में आयोजित होने वाले 'एवीएन अवार्ड्स' (AVN Awards) जैसे बड़े समारोहों में सम्मानित किया जाता है, जिसे 'पोर्न का ऑस्कर' भी कहा जाता है।<ref>{{cite book |last=Tarrant |first=Shira |year=2016 |title=The Pornography Industry: What Everyone Needs to Know |publisher=Oxford University Press |isbn=978-0-19-020512-6 |page=11 |url=https://books.google.com/books?id=QJkSDAAAQBAJ |archive-url=https://web.archive.org/web/20230305000000/https://books.google.com/books?id=QJkSDAAAQBAJ |archive-date=5 March 2023 |url-status=live |access-date=11 January 2023}}</ref> इंटरनेट और 'ओनलीफैंस' (OnlyFans) जैसे सदस्यता-आधारित (Subscription-based) सोशल मीडिया प्लेटफॉर्म के उदय ने इस उद्योग का परिदृश्य पूरी तरह से बदल दिया है। अब अभिनेताओं को बड़े प्रोडक्शन हाउस पर निर्भर नहीं रहना पड़ता।<ref>{{cite news |last=Shane |first=Charlotte |date=18 May 2021 |title=OnlyFans Isn't Just Porn ;) |work=The New York Times |url=https://www.nytimes.com/2021/05/18/style/onlyfans-porn.html |archive-url=https://web.archive.org/web/20230307000000/https://www.nytimes.com/2021/05/18/style/onlyfans-porn.html |archive-date=7 March 2023 |url-status=live |access-date=8 March 2023}}</ref> कई पॉर्न स्टार्स अब विश्व स्तर पर पॉप-कल्चर सेलिब्रिटी का दर्जा रखते हैं। दर्शक अक्सर अपनी पसंदीदा अभिनेत्रियों जैसे आसा अकीरा, लाना रोड्स, एमिली विलिस, एलेक्सिस टेक्सास, [[निकी बेंज]], और जापानी अभिनेत्री उएहारा ऐ को उनके विशिष्ट प्रदर्शन के लिए फॉलो करते हैं। === एसटीडी रोकथाम और जन्म नियंत्रण === इस उद्योग में यौन संचारित रोगों (STDs) और एचआईवी (HIV) की रोकथाम के लिए सख्त नियम हैं। अमेरिका में अधिकांश वैध स्टूडियो 'PASS' (Performer Availability Screening Services) प्रणाली का उपयोग करते हैं, जिसके तहत अभिनेताओं का हर 14 दिन में एसटीडी परीक्षण होना अनिवार्य है। कैलिफोर्निया में 2012 के 'मेज़र बी' (Measure B) कानून के तहत फिल्म निर्माण के दौरान कंडोम का उपयोग अनिवार्य करने का प्रयास किया गया था, जिसके कारण कई प्रोडक्शन हाउस ने अपना काम अन्य राज्यों में स्थानांतरित कर दिया। इसके अतिरिक्त, अवांछित गर्भावस्था से बचने के लिए कई महिला कलाकार आईयूडी (IUD) या जन्म नियंत्रण गोलियों का सहारा लेती हैं। == अश्लीलता के सामाजिक प्रभाव और नुकसान == {{multiple image | align = left | direction = vertical | width = 140 | image1 = Nikki Benz 2012.jpg | caption1 = निकी बेंज (Nikki Benz) | image2 = Natasha Nice at Corruption Party 2.jpg | caption2 = नताशा नाइस (Natasha Nice) | image3 = Eva Angelina3 adjusted.jpg | caption3 = ईवा एंजेलिना (Eva Angelina) | image4 = | caption4 = }} अश्लील सामग्री की सुलभता ने समाज, मनोविज्ञान और व्यक्तिगत संबंधों पर गहरे प्रभाव डाले हैं। मनोवैज्ञानिकों, समाजशास्त्रियों और शोधकर्ताओं ने इसके कई दुष्परिणाम गिनाए हैं: * '''सेक्स की लत (Porn Addiction):''' नियमित रूप से पोर्न देखने से मस्तिष्क के 'रिवार्ड सर्किट' में डोपामाइन (Dopamine) का स्तर कृत्रिम रूप से बढ़ जाता है, जो मादक पदार्थों की लत के समान व्यवहार उत्पन्न कर सकता है। व्यक्ति सामान्य यौन संबंधों से अधिक स्क्रीन पर मिलने वाली उत्तेजना का आदी हो जाता है।<ref>{{cite journal |last1=Kraus |first1=Shane W. |last2=Voon |first2=Valerie |last3=Potenza |first3=Marc N. |date=19 February 2016 |title=Should compulsive sexual behavior be considered an addiction? |journal=Addiction |volume=111 |issue=12 |pages=2097–2106 |doi=10.1111/add.13297 |pmc=4990495 |pmid=26893127}}</ref> * '''मानसिक और संज्ञानात्मक प्रभाव:''' निरंतर अश्लील वीडियो देखने वाले लोगों में याददाश्त कम होने, एकाग्रता की कमी, अवसाद और सामाजिक चिंता (Social anxiety) जैसी समस्याएँ देखी गई हैं। व्यक्ति समाज से कटकर एकांतवास पसंद करने लगता है। * '''अवास्तविक अपेक्षाएँ और वैवाहिक कलह:''' पोर्नोग्राफी अक्सर यौन संबंधों, शरीर के आकार और सहनशक्ति का एक अवास्तविक और अतिरंजित रूप पेश करती है। इससे व्यक्ति अपने वास्तविक जीवन के साथी से असंतुष्ट हो सकता है, जिससे तलाक और वैवाहिक कलह की संभावना बढ़ जाती है।<ref>{{cite journal |last=Perry |first=Samuel L. |date=1 February 2017 |title=Does Viewing Pornography Reduce Marital Quality Over Time? Evidence from Longitudinal Data |journal=Archives of Sexual Behavior |volume=46 |issue=2 |pages=549–559 |doi=10.1007/s10508-016-0770-y |pmid=27388511}}</ref> * '''शोषण का जोखिम और मानव तस्करी:''' हालाँकि कई मॉडल अपनी मर्जी से और भारी आर्थिक लाभ के लिए इस उद्योग में आती हैं, लेकिन एमेच्योर और अंडरग्राउंड पोर्न उद्योग में शोषण, बलपूर्वक कार्य कराना और कम उम्र की लड़कियों की तस्करी के भयानक मामले भी सामने आते रहते हैं। नेटफ्लिक्स की डॉक्यूमेंट्री "हॉट गर्ल्स वांटेड" (2015) इस उद्योग के अंधेरे और शोषक पक्ष को उजागर करती है। == कानून और विनियम (Laws and Regulations) == [[File:Pornography laws.svg|300px|thumb|right|अश्लील साहित्य का विश्व मानचित्र (18+) कानून {{legend|#47c223|पोर्नोग्राफी कानूनी}} {{legend|#ece117|पोर्नोग्राफी कानूनी है, लेकिन कुछ प्रतिबंधों के तहत}} {{legend|red|पोर्नोग्राफी अवैध}} {{legend|#b4b4b4|डेटा अनुपलब्ध}}]] पोर्नोग्राफ़ी की कानूनी स्थिति अलग-अलग देशों की संस्कृति, धर्म और न्यायशास्त्र के अनुसार व्यापक रूप से भिन्न होती है। पश्चिमी देशों (जैसे अमेरिका, यूरोप) में वयस्कों के लिए यह आम तौर पर कानूनी है, बशर्ते सामग्री में भाग लेने वाले सभी वयस्क हों और उन्होंने सहमति दी हो। हालांकि, अमेरिका में 'मिलर टेस्ट' (Miller Test) के तहत यह तय किया जाता है कि कोई सामग्री अश्लील (Obscene) है या नहीं, जिसे प्रथम संशोधन (First Amendment) के तहत [[अभिव्यक्ति की स्वतंत्रता]] का संरक्षण नहीं मिलता। यूनाइटेड किंगडम में 'एक्सट्रीम पोर्नोग्राफी' (हिंसा या जानवरों के साथ यौन संबंध) का कब्ज़ा गैरकानूनी है। वहीं दूसरी ओर, '''बाल पोर्नोग्राफ़ी (Child Pornography)''' का निर्माण, वितरण, या इसे केवल अपने कंप्यूटर/फोन पर रखना दुनिया के लगभग हर देश (अंतर्राष्ट्रीय कानून के तहत) में एक अत्यंत गंभीर और गैर-जमानती अपराध है। === भारत में क़ानून === {{multiple image | align = left | direction = vertical | width = 200 | image1 = Anime girl at beach.jpg | caption1 = जापानी एरोटिक कला रूपों, जैसे हेंटाई, को यह देखते हुए उल्लेखनीय माना गया है कि वे उसकी सीमाओं को विस्तारित करते हैं कि पोर्न क्या हो सकता है। जीवन के तनाव से दर्शकों को दूर ले जाने और कल्पनाशील दुनियाओं में ले जाने की उनकी क्षमता, जो यौन उत्तेजना प्रदान करती हैं, उन्हें अत्यधिक आकर्षक बना देती है। हेंटाई की जड़ें सदियों पुरानी जापानी कला परंपराओं, जैसे एडो काल के शुंगा, में हैं। आज, यह इंटरनेट के माध्यम से वैश्विक स्तर पर एक विविध और अत्यधिक लोकप्रिय शैली बन गया है, जो भौतिक वास्तविकता से परे असीमित कल्पना की अनुमति देता है। | image3 = Young woman dreaming of an erotic encounter (c.1770) in the style of Harunobu Suzuki (Housed in the British Museum) Print, shunga (BM OA+,0.83) (cropped).jpg | caption3 = ब्रिटिश संग्रहालय में सुरक्षित जापानी एरोटिक कला रूप शुंगा का चित्रण (लगभग 1770 ईस्वी)। शुंगा, जिसे "वसंत के चित्र" के रूप में भी जाना जाता है, 17वीं से 19वीं शताब्दी तक जापान में फल-फूल रहा एक कला था। यह लकड़ी के ब्लॉक प्रिंट के माध्यम से बनाया जाता था और विभिन्न यौन संबंधों और स्थितियों का चित्रण करता था। ब्रिटिश संग्रहालय में शुंगा के कई उदाहरण हैं, जिनमें 1770 के दशक के आसपास बने रंगीन लकड़ी के ब्लॉक प्रिंट शामिल हैं। }} भारत में अश्लील सामग्री के उत्पादन, व्यावसायिक बिक्री और वितरण पर कड़े कानून लागू हैं। भारतीय न्याय व्यवस्था इसे सामाजिक नैतिकता के लिए हानिकारक मानती है: * '''भारतीय दण्ड संहिता (IPC):''' इसकी धारा 292 और 293 के तहत किसी भी अश्लील पुस्तक, पैम्फलेट, कागज, चित्र या फिल्म की बिक्री, वितरण और सार्वजनिक प्रदर्शन पूर्णतः अवैध है। 20 वर्ष से कम आयु के व्यक्ति को ऐसी सामग्री बेचना एक गंभीर दंडनीय अपराध है।<ref>{{cite web|url=https://indiankanoon.org/doc/1704109/|title=Section 292 in The Indian Penal Code|publisher=Indian Kanoon}}</ref> * '''सूचना प्रौद्योगिकी अधिनियम, 2000 (IT Act):''' इस अधिनियम की धारा 67, 67A और 67B के तहत इलेक्ट्रॉनिक रूप में अश्लील सामग्री का प्रकाशन या प्रसारण सख्त वर्जित है। धारा 67B विशेष रूप से बाल अश्लीलता (Child Pornography) से संबंधित है, जिसमें बहुत कठोर कारावास और भारी जुर्माने का प्रावधान है। * '''सर्वोच्च न्यायालय और सरकारी प्रतिबंध:''' जुलाई 2015 में भारत के सर्वोच्च न्यायालय ने स्पष्ट किया कि किसी व्यक्ति द्वारा बंद कमरे की पूर्ण निजता में पोर्न देखना अपने आप में अपराध नहीं है, लेकिन इसे व्यावसायिक रूप से प्रसारित करना अपराध है। इसके बाद, अगस्त 2015 में [[भारत सरकार]] ने 857 अश्लील वेबसाइटों को ब्लॉक करने का आदेश दिया। * अक्टूबर 2018 में, [[उत्तराखण्ड|उत्तराखंड]] उच्च न्यायालय के एक ऐतिहासिक आदेश के बाद भारत सरकार ने इंटरनेट सेवा प्रदाताओं (ISPs) को 827 अश्लील वेबसाइटों को ब्लॉक करने का निर्देश दिया था। न्यायालय ने यह फैसला देहरादून में एक नाबालिग के साथ हुए बलात्कार के मामले के बाद दिया था, जहाँ आरोपियों ने स्वीकार किया था कि उन्होंने इंटरनेट पर पोर्नोग्राफी देखकर इस अपराध को अंजाम दिया।<ref>{{cite news|url=https://www.indiatoday.in/technology/news/story/ban-porn-sites-or-lose-license-high-court-to-isps-1351836-2018-09-28|title=Ban porn sites or lose license: High Court to ISPs|publisher=India Today|date=28 September 2018}}</ref> == सामाजिक और वैचारिक दृष्टिकोण == {{multiple image | align = right | direction = vertical | width = 140 | image1 = Mari Possa by Mike South adjusted.jpg | caption1 = मारी पोसा (Mari Possa) | image2 = | caption2 = | image3 = Reya Sunshine, December 2024.jpg | caption3 = रेया सनशाइन (Reya Sunshine) }} अश्लील साहित्य को लेकर समाज में हमेशा से गंभीर बहस रही है। इसके विचार मुख्य रूप से तीन स्रोतों से आते हैं: कानून, नारीवाद और धर्म। === नारीवादी विचार === नारीवादी विचारकों के बीच पोर्नोग्राफी को लेकर गहरा विभाजन है: * '''एंटी-पॉर्न नारीवाद:''' एंड्रिया ड्वर्किन (Andrea Dworkin) और कैथरीन मैककिनोन (Catharine MacKinnon) जैसी नारीवादी विचारकों का दृढ़ता से मानना है कि सभी प्रकार की पोर्नोग्राफी महिलाओं के लिए अपमानजनक है। उनका तर्क है कि यह महिलाओं को निर्जीव वस्तु (Sex Object) मानती है, उनका शोषण करती है और समाज में पितृसत्तात्मक वर्चस्व, बलात्कार और यौन उत्पीड़न को कामुक बनाकर पेश करती है।<ref>{{cite book |last=MacKinnon |first=Catharine A. |year=1989 |chapter=Pornography: on morality and politics |editor-last=MacKinnon |editor-first=Catharine A. |title=Toward a Feminist Theory of the State |url=https://archive.org/details/towardfeministth0000mack_h6u6 |location=Cambridge, Mass. |publisher=Harvard University Press |pages=[https://archive.org/details/towardfeministth0000mack_h6u6/page/194 195]–214 |isbn=978-0-674-89646-8}}</ref> * '''सेक्स-पॉजिटिव नारीवाद:''' दूसरी ओर, कुछ नारीवादी विद्वानों का तर्क है कि यदि यौन क्रिया पूर्ण सहमति से हो, तो यह महिलाओं को आर्थिक स्वतंत्रता देता है। उनका मानना है कि महिलाओं का अश्लील उद्योग में (विशेषकर निर्देशक या निर्माता के रूप में) प्रवेश करने से उन्हें अपनी कामुकता को स्वतंत्र रूप से व्यक्त करने और पुरुष-प्रधान दृष्टिकोण को चुनौती देने का मौका मिला है।<ref>{{cite journal |last=Ziv |first=Amalia |date=October 2014 |title=Girl meets boy: cross-gender queer and the promise of pornography |journal=Sexualities |volume=17 |issue=7 |pages=885–905 |doi=10.1177/1363460714532937}}</ref> === धार्मिक दृष्टिकोण === दुनिया के लगभग सभी प्रमुख धर्म (ईसाई, इस्लाम, हिंदू धर्म, बौद्ध धर्म आदि) आधुनिक पोर्नोग्राफी का कड़ा विरोध करते हैं। धार्मिक संस्थाएं इसे नैतिकता के पतन, व्यभिचार, पारिवारिक मूल्यों के ह्रास और आध्यात्मिक भटकाव का मुख्य कारण मानती हैं। विशेष रूप से इस्लाम और ईसाई धर्म के कट्टरपंथी समूह इसके खिलाफ राजनीतिक लामबंदी और प्रतिबंधों की मांग करते रहे हैं। == इन्हें भी देखें == * [[एवीएन एडल्ट एंटरटेनमेंट एक्पो]] * [[गे पॉर्न]] * [[वेश्यावृत्ति]] * [[यौन प्रतीकात्मकता]] == सन्दर्भ == {{टिप्पणीसूची|2}} == विस्तृत ग्रंथ सूची == * {{cite book |last=Hyde |first=H. Montgomery |year=1964 |title=A History of Pornography |publisher=New English Library |location=London |oclc=1331692}} * {{cite book |last=McNair |first=Brian |year=2013 |title=Porno? Chic!: How Pornography Changed the World and Made it a Better Place |url=https://archive.org/details/pornochichowporn0000mcna |publisher=Routledge |isbn=978-0-415-57290-3}} * {{cite book |last=Tarrant |first=Shira |year=2016 |title=The Pornography Industry: What Everyone Needs to Know |url=https://archive.org/details/pornographyindus0000tarr |publisher=Oxford University Press |isbn=978-0-19-020512-6}} * {{cite book |editor-last=Weitzer |editor-first=Ronald |year=2023 |title=Sex For Sale: Prostitution, Pornography, and Erotic Dancing |edition=3rd |publisher=Routledge |isbn=978-1-032-13315-7}} * {{cite book |last=Rothman |first=Emily F. |year=2021 |title=Pornography and Public Health |publisher=Oxford University Press |isbn=978-0-19-007549-1}} * {{cite book |last=Giesberg |first=Judith Ann |year=2017 |title=Sex and the Civil War: Soldiers, Pornography, and the Making of American Morality |url=https://archive.org/details/sexcivilwarsoldi0000gies |publisher=University of North Carolina Press |isbn=978-1-4696-3128-8}} * {{cite book |last=Mikkola |first=Mari |year=2019 |title=Pornography: A Philosophical Introduction |publisher=Oxford University Press |isbn=978-0-19-064008-8}} [[श्रेणी:रतिचित्रण]] lx6iq1krjp6k1gv7e99y0eafpik0fb9 कोलायत झील 0 722641 6586998 6164346 2026-07-18T06:09:07Z ~2026-40207-40 936791 6586998 wikitext text/x-wiki {{Infobox lake | name = कोलायत झील | other_name = कपिल सरोवर | image = | caption = | image_bathymetry = | pushpin_map = India Rajasthan | caption_bathymetry = | location = [[कोलायत]], [[राजस्थान]] | coords = {{coord|27.8410346|N|72.9562448|E|type:waterbody|display=inline,title}} | type = प्राकृतिक जलाशय | inflow = | outflow = | catchment = {{convert|196|sqmi|km2|abbr=on}} | basin_countries = {{IND}} | length = {{convert|1.4|km|mi}} | width = {{convert|2.21|km|mi}} | area = | depth = {{convert|19|m|ft}} | max-depth = | volume = | residence_time = | shore = | elevation = | islands = | cities = }} '''कोलायत झील''' जो कि [[भारतीय]] राज्य [[राजस्थान]] के [[बीकानेर]] <ref>{{वेब सन्दर्भ|last1=Indianholiday|title=Kolayat Fair in Bikaner 2016|url=http://www.indianholiday.com/fairs-and-festivals/rajasthan/kolayat-fair.html|website=www.indianholiday.com|accessdate=27 जून 2016|archive-url=https://web.archive.org/web/20160703125928/http://www.indianholiday.com/fairs-and-festivals/rajasthan/kolayat-fair.html|archive-date=3 जुलाई 2016|url-status=live}}</ref> ज़िले में के [[कोलायत]] में [[दियातरा]] रोड़ पर स्थित एक झील है। इस [[झील]] में स्नान करना धार्मिक दृष्टि से पवित्र माना जाता है ।इसलिये यहां लोगों का आना जाना चलता रहता है। यहां नहाने के लिए अनेक घाट बने हुए हैं जिनके चारों ओर [[पीपल]] के वृक्ष हैं। इसे शुष्क [[मरुस्थल]] का 'सुन्दर मरूद्यान 'कहा जाता है। यह एक महत्वपूर्ण धार्मिक स्थल है। यहां प्राचीनकाल में [[कपिल मुनि]] का आश्रम था, इस कारण प्रतिवर्ष [[कार्तिक पूर्णिमा]] को [[कपिल मुनि]] <ref>{{वेब सन्दर्भ|last1=Bharatonline|title=Kapil Muni Fair - Kapil Muni Fair Kolayat Bikaner|url=http://www.bharatonline.com/rajasthan/fairs/kapil-muni.html|website=www.bharatonline.com|accessdate=27 जून 2016|archive-url=https://web.archive.org/web/20160817065020/http://www.bharatonline.com/rajasthan/fairs/kapil-muni.html|archive-date=17 अगस्त 2016|url-status=live}}</ref> का मेला भरता है। इस झील में 52 घाट स्थित है। इस कपिल सरोवर में मुख्य रूप से ये माना जाता है कि गंगा स्वंयम भू प्रकट हुई थी। ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राजस्थान की झीलें]] [[श्रेणी:भारत की झीलें]] [[श्रेणी:बीकानेर]] {{भू-आधार}} ktq5nax4e35ji9k63t4r9nt5qkfszc6 धर्मेंद्र प्रधान 0 737943 6586862 6586667 2026-07-17T16:55:14Z AlphaVictorDelta0107 790236 छोटा सा सुधार किया। 6586862 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान]] | mother = वसन्तमञ्जरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], ओडिशा, भारत | spouse = मृदुला प्रधान<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | alma_mater = [[उत्कल विश्वविद्यालय]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} lel6p6jejvyruolen8v44ztzig7o1tc 6586865 6586862 2026-07-17T17:00:05Z AlphaVictorDelta0107 790236 छोटा सा सुधार किया। 6586865 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | mother = वसन्तमञ्जरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], ओडिशा, भारत | spouse = मृदुला प्रधान<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | education = [[कला स्नातकोत्तर]] | alma_mater = [[उत्कल विश्वविद्यालय]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} jek7r1pmbfifnvgqo5nbxow5fou1nc9 6586872 6586865 2026-07-17T17:04:17Z AlphaVictorDelta0107 790236 6586872 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | mother = वसन्तमञ्जरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], ओडिशा, भारत | spouse = मृदुला ठाकुर<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | education = [[कला स्नातकोत्तर]] | alma_mater = [[उत्कल विश्वविद्यालय]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} jr8qp8aeyz9z59p9wwa2c0xvw40zhdk 6586962 6586872 2026-07-18T01:40:18Z AMAN KUMAR 911487 [[Special:Contributions/AlphaVictorDelta0107|AlphaVictorDelta0107]] ([[User talk:AlphaVictorDelta0107|Talk]]) के संपादनों को हटाकर [[User:~2026-39953-41|~2026-39953-41]] के आखिरी अवतरण को पूर्ववत किया 6586667 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान]] | mother = बसन्त मंजरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], [[ओडिशा|ओडिशा]], [[भारत]] | spouse = मृदुला प्रधान<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | alma_mater = [[उत्कल विश्वविद्यालय]] | residence = [[तालचेर]], [[ओडिशा|ओडिशा]], [[भारत]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} mb26urmnkqtukhnxtnf0dbgjprb6785 6586967 6586962 2026-07-18T02:35:23Z AlphaVictorDelta0107 790236 [[Special:Contributions/AMAN KUMAR|AMAN KUMAR]] ([[User talk:AMAN KUMAR|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586962|6586962]] को पूर्ववत किया 6586967 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | mother = वसन्तमञ्जरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], ओडिशा, भारत | spouse = मृदुला ठाकुर<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | education = [[कला स्नातकोत्तर]] | alma_mater = [[उत्कल विश्वविद्यालय]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} jr8qp8aeyz9z59p9wwa2c0xvw40zhdk 6586995 6586967 2026-07-18T05:41:03Z AlphaVictorDelta0107 790236 6586995 wikitext text/x-wiki {{Infobox officeholder | office = शिक्षा मन्त्रालय,कौशल विकास और उद्यमिता मन्त्री भारत सरकार<ref>{{Cite web|url=https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|title=धर्मेंद्र प्रधान को मिली ऑयल, गैस और स्टील मंत्रालय की जिम्मेदारी– News18 हिंदी|website=News18 India|access-date=2026-05-19|archive-date=8 जून 2019|archive-url=https://web.archive.org/web/20190608014640/https://hindi.news18.com/news/business/modi-2-0-portfolios-announced-dharmendra-pradhan-get-oil-gas-and-steel-ministry-2060260.html|url-status=dead}}</ref> | native_name = ଧର୍ମେନ୍ଦ୍ର ପ୍ରଧାନ | native_name_lang = ओडिया | image = Dharmendra Pradhan, Minister of Education.jpg | predecessor = [[वीरप्पा मोइली]] | primeminister = [[नरेन्द्र मोदी]] | term_start = 26 मई 2014 | term_end = | successor = जोशुआ एल | footnotes = | date = 19 जून 2022 | year = | source = | office1 = [[शिक्षा मन्त्रालय, भारत सरकार|शिक्षा मन्त्री]] | predecessor1 = | primeminister1 = [[नरेन्द्र मोदी]] | successor1 = चौधरी बीरेन्द्र सिंह | term_start1 = 30 मई 2019 | term_end1 = | office2 = [[कौशल विकास और उद्यमिता मन्त्रालय|कौशल विकास और उद्यमिता मन्त्री]] | predecessor2 = [[राजीव प्रताप रूडी]] | primeminister2 = [[नरेन्द्र मोदी]] | successor2 = [[महेन्द्र नाथ पाण्डेय]] | term_start2 = 3 सितम्बर 2017 | term_end2 = 30 मई 2019 | office3 = [[सांसद, राज्य सभा]]<ref>{{Cite news|url=https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|title=राज्यसभा चुनावः धर्मेंद्र प्रधान और गहलोत सहित के चारों प्रत्याशियों ने पर्चा भरा|work=News18 हिंदी|access-date=2026-05-19|language=hi-IN|archive-date=16 जनवरी 2021|archive-url=https://web.archive.org/web/20210116095035/https://hindi.news18.com/news/madhya-pradesh/bhopal-dharmendra-pradhan-files-nomination-for-rajya-sabha-from-madhya-pradesh-1299781.html|url-status=dead}}</ref> | constituency3 = [[मध्य प्रदेश]] | predecessor3 = [[प्रकाश जावड़ेकर]] | successor3 = | term_start3 = 3 अप्रैल 2018 | term_end3 = | office5 = [[सांसद, राज्य सभा]] | constituency5 = [[बिहार]] | term_start5 = 3 अप्रैल 2012 | term_end5 = 2 अप्रैल 2018 | successor5 = [[मनोज झा]] | office6 = [[सांसद, लोक सभा]] | constituency6 = [[देवगढ़, ओड़िशा]]<ref>{{Cite web|url=https://www.jansatta.com/national/dharmendra-pradhan-takes-oath-as-cabinet-minister-read-here-about-political-travelogue/420725/|title=जानिए कैसा रहा धर्मेंद्र प्रधान का छात्र नेता से कैबिनेट मंत्री बनने तक का सफर|date=2017-09-03|website=Jansatta|language=hi|access-date=2026-05-19}}</ref> | term_start6 = 2004 | term_end6 = 2009 | predecessor6 = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | successor6 = | father = [[देबेन्द्र प्रधान|देवेन्द्र प्रधान]] | mother = वसन्तमञ्जरी प्रधान | birth_date = {{Birth date and age|1969|6|26|df=y}} | birth_place = [[तालचेर]], ओडिशा, भारत | spouse = मृदुला ठाकुर<ref>{{Cite web|url=https://www.jagran.com/haryana/faridabad-teej-mahotsav-18306376.html|title=जमकर झूमीं केंद्रीय मंत्री और सांसदों की पत्नियां - teej mahotsav|website=Jagran|language=hi|access-date=2026-05-19}}</ref> | children = 2 | party = [[भारतीय जनता पार्टी]] | education = [[कला स्नातकोत्तर]] | alma_mater = [[उत्कल विश्वविद्यालय]] | website = http://dpradhanbjp.com }} '''धर्मेन्द्र प्रधान'''<ref>{{Cite web|url=https://navbharattimes.indiatimes.com/?back=1|title=Hindi News, Hindi Samachar, हिंदी न्यूज़, News in Hindi, हिंदी समाचार|website=Navbharat Times|language=hi|access-date=2026-05-19}}</ref> (जन्म 26 जून 1969) एक भारतीय [[राजनीतिज्ञ]] तथा वर्तमान में [[भारत सरकार]] के [[पेट्रोलियम]] और [[प्राकृतिक गैस]] तथा इस्पात मन्त्रालय<ref>{{Cite web|url=https://www.livehindustan.com/national/story-dharmendra-pradhan-sworn-in-as-the-minister-know-ten-important-things-about-him-2553730.html|title=धर्मेंद्र प्रधान ने ली मंत्री पद की शपथ, जानें उनके बारे में दस अहम बातें|date=2019-05-30|website=www.livehindustan.com|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web |url=https://www.prabhatkhabar.com/business/1289906 |title=संग्रहीत प्रति |access-date=28 मई 2021 |archive-date=8 अगस्त 2022 |archive-url=https://web.archive.org/web/20220808173046/https://www.prabhatkhabar.com/business/1289906 |url-status=dead }}</ref> के कैबिनेट मन्त्री हैं।<ref>{{Cite web|url=https://www.jagran.com/odisha/bhubaneshwar-dharmendra-pradhan-and-pratap-sarangi-can-become-minister-from-odisha-19268586.html|title=धर्मेंद्र प्रधान ने कैबिनेट मंत्री पद की शपथ ली, जानें कैसे तय किया अब तक का सफर - Dharmendra Pradhan and Pratap Sarangi can become minister from Odisha|website=Jagran|language=hi|access-date=2026-05-19}}</ref><ref>{{Cite web|url=https://mopng.gov.in/en/about-us/meet-the-minister|title=ABOUT US - MEET THE MINISTER {{!}} Ministry of Petroleum and Natural Gas {{!}} Government of India - Ministry of Petroleum And Natural Gas|website=mopng.gov.in|language=en|access-date=2026-05-19}}</ref> पिछली मोदी सरकार में वे कौशल विकास और उद्यमिता विभाग के केन्द्रीय कैबिनेट मन्त्री भी थे।<ref>{{Cite web|url=https://pib.gov.in/PressReleasePage.aspx?PRID=1566477|title=केंद्रीय मंत्री श्री धर्मेंद्र प्रधान ने ओडिशा में नुआ ओडिशा- धर्मपद संवाद के अवसर पर 427 स्थानों के प्रतिभागियों को संबोधित किया|website=pib.gov.in|access-date=2026-05-19}}</ref> मार्च 2018 में प्रधान [[मध्यप्रदेश]] से [[राज्यसभा]] के लिए चुने गए।<ref>{{Cite web|url=https://www.indiatv.in/india/politics-rajya-sabha-five-candidates-elected-unopposed-from-madhya-pradesh-573232|title=मध्यप्रदेश से राज्यसभा के लिए धर्मेन्द्र प्रधान सहित पांचों प्रत्याशी निर्विरोध चुने गए|last=Kumar|first=Niraj|last2=Hindi|first2=India TV|date=2018-03-15|website=India TV Hindi|language=hi|access-date=2026-05-19}}</ref> प्रधान [[चौदहवीं लोकसभा]] में [[देवगढ़, ओड़िशा]] से सांसद चुने गये थे। अभी वर्तमान में भारत के शिक्षा मंत्री हैं। धर्मेंद्र प्रधान ओडिशा की 12 वीं विधानसभा (2000-2004) में पल्ललहारा निर्वाचन क्षेत्र से निर्वाचित हुए थे। वह एबीवीपी के सदस्य भी हैं एवं पूर्व केन्द्रीय मन्त्री और वरिष्ठ भाजपा नेता डॉ. देबेन्द्र प्रधान के पुत्र हैं। प्रधान, भारतीय जनता पार्टी (भाजपा) के सदस्य हैं। महासचिव होने के अलावा, उन्हें अगस्त 2011 में झारखण्ड में पार्टी की गतिविधियों की अतिरिक्त जिम्मेदारी सौंपी गई थी। धर्मेन्द्र प्रधान प्रधानमन्त्री नरेन्द्र मोदी, भाजपा पार्टी अध्यक्ष अमित शाह के करीबी सहयोगी और भरोसेमन्द माने जाते हैं।<ref>{{Cite web|url=https://www.india.com/hindi-news/india-hindi/who-are-the-most-close-central-ministers-of-prime-minister-narendra-modi-1466276/|title=who are the most close central ministers of prime minister Narendra Modi {{!}} ये हैं मोदी के तीन अनमोल रतन - Latest News & Updates in Hindi at India.com Hindi|website=www.india.com|language=hi|access-date=2026-05-19}}</ref> 2014 के लोकसभा चुनाव में बिहार में भाजपा की जीत के प्रमुख रणनीतिकार भी प्रधान ही हैं।<ref>{{Cite web|url=https://zeenews.india.com/hindi/india/bihar-jharkhand/dharmendra-pradhan-takes-oath-as-union-minister-in-modi-cabinet/533674|title=कभी रहे बिहार बीजेपी के प्रभारी, लगातार दूसरी बार मिली मोदी कैबिनेट में जगह|website=Zee-Bihar-Jharkhand|language=hi|access-date=2026-05-19}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:जीवित लोग]] [[श्रेणी:मोदी मंत्रिमंडल]] [[श्रेणी:1969 में जन्मे लोग]] {{भारतीय-राजनीतिज्ञ-आधार}} c2s4iis2p1cn909tdo10ipgempl2c1v शाल 0 749994 6586935 5773354 2026-07-17T22:05:37Z Redaktor GLAM 848755 Higher resolution version of image 6586935 wikitext text/x-wiki [[चित्र:Regency empire shawls - Recinet (69165800).jpg|अंगूठाकार|विभिन्न प्रकार का शाल ओढ़े औरतें]] '''शाल''' ([[फ़ारसी भाषा|फ़ारसी]]: شال‎‎ shāl, से व्युत्पन्न , जो [[हिन्दी]] '''दुशाला''' से निकली है जो स्वयं [[संस्कृत भाषा|संस्कृत]] के '''शाटी''' से व्युत्पन्न है।) एक साधारण कपड़ा होता है जिसको कन्धों के ऊपर बिना बांधे धारण किया जाता है। प्रायः यह एक आयताकार या वर्गाकार कपड़ा होता है। [[श्रेणी:वस्त्र]] 9cutg1h6i48f1oefvhcybkbr7fy5lwa पश्चिम बंगाल विधानसभा 0 770084 6586759 6579433 2026-07-17T14:28:51Z Ooarii 598152 /* */ सामग्री जोड़ी 6586759 wikitext text/x-wiki {{Infobox legislature | name = पश्चिम बंगाल विधान सभा<br>পশ্চিমবঙ্গ বিধানসভা | legislature = 18वीं विधान सभा <ref>http://www.wbassembly.gov.in/ {{Webarchive|url=https://web.archive.org/web/20161202145902/http://wbassembly.gov.in/ |date=2 दिसंबर 2016 }}></ref> | coa_pic =Seal of West Bengal.svg | coa_res = | motto = समानो मन्त्रः समितिः समानी समानं व्रतं सहचित्तमेषाम् ([[संस्कृत]]) <br> samāno mantraḥ samitiḥ samānī samānaṃ vrataṃ sahacittameṣām ([[असंलिव]]) <br> সমানো মন্ত্রঃ সমিতিঃ সমানী সমানং ব্রতং সহচিত্তমেষাম্ ([[बंगाली लिपि]]) | house_type = एकसदनीय | leader1_type = अध्यक्ष | leader1 = रथींद्र बोस | party1 = [[भारतीय जनता पार्टी|भाजपा]] | election1 = 15 मई, 2026 | leader2_type = उपाध्यक्ष | leader2 = | party2 = [[भारतीय जनता पार्टी|भाजपा]] | election2 = <!--ruling party--> | leader3_type = मुख्यमंत्री | leader3 = [[सुवेंदु अधिकारी]] | party3 = [[भारतीय जनता पार्टी|भाजपा]] | election3 = 09 मई 2026 <!--opposition party--> | leader4_type = नेता विपक्ष | leader4 = [[शोभनदेब चट्टोपाध्याय]] | party4 = [[सर्वभारतीय तृणमूल कांग्रेस|तृणमूल कांग्रेस]] | election4 = 10 मई, 2026 | members = 294 | structure1 =India 18th West Bengal Legislative Assembly Partywise 2026.svg | structure1_res = 300px | political_groups1 = '''सरकार(208)''' *{{Color box|#F7862F|border=darkgray}} [[भारतीय जनता पार्टी]] (208) '''विपक्ष(80)''' *{{Color box|3AF72C|border=darkgray}} [[सर्वभारतीय तृणमूल कांग्रेस]] (80) '''अन्य विपक्ष(7)''' *{{Color box|#00BFFF|border=darkgray}} [[भारतीय राष्ट्रीय कांग्रेस|कांग्रेस]](2) *{{Color box|#FF0000|border=darkgray}} वाम मोर्चा(2) ** {{Color box|#CC0D0D}} [[भारतीय कम्युनिस्ट पार्टी (मार्क्सवादी)| सीपिआईम]] (1) ** {{Color box|#000180|border=darkgray}} [[राष्ट्रीय सेक्युलर मजलिस पार्टी|आईएसएफ]](1) * {{Color box|#8AB800}} [[आम जनता उन्नयन पार्टी|AJUP]] (1) '''Vacant (2)''' : {{Color box|#FFFFFF}} खाली (2) | voting_system1 = प्रथम मतदान फिर पद | last_election1 = [[2026 बंगाल विधानसभा चुनाव|२३ और २९ अप्रैल 2026]] | session_room =West Bengal State Legislative Assembly House, Kolkata.jpg | session_res = | meeting_place = विधान सभा, [[कोलकाता]] |website = {{url|http://wbassembly.gov.in/}} | footnotes = सदन की स्थापना 1862 में [[बंगाल प्रेसीडेंसी]] के लिए की गई। 1950 में प्रेसीडेंसी [[भारत|भारतीय गणराज्य]] में शामिल होकर [[पश्चिम बंगाल]] राज्य बन गई; पश्चिम बंगाल का वर्तमान स्वरुप 1 मई 1960 में बना। |logo = }} '''पश्चिम बंगाल विधान सभा''' ({{lang-bn|পশ্চিমবঙ্গ বিধানসভা}}) भारतीय राज्य [[पश्चिम बंगाल]] का [[एकसदनवाद|एकसदनीय]] विधान भवन है। यह [[कोलकाता]] के बीबीडी बाग में स्थित है। विधान सभा के सदस्य सीधे जनता द्वारा चुने जाते हैं। विधानसभा में 295 सदस्य है जिनमे 295 सीधे जनता के द्वारा तथा। इसका कार्यकाल 5 वर्ष का है। ==सन्दर्भ== {{Reflist}} {{भारत के राज्यों की विधानसभाएँ}} [[श्रेणी:पश्चिम बंगाल की राजनीति]] [[श्रेणी:भारत के राज्यों की विधायिकायें]] [[श्रेणी:पश्चिम बंगाल सरकार]] 0nk88thju9m7513uf6x5e04982bd9c6 गारफील्ड सोबर्स 0 774785 6586866 6238848 2026-07-17T17:00:22Z हिंदुस्थान वासी 89741 [[WP:HC|HotCat]] द्वारा [[श्रेणी:जीवित लोग]] हटाई; [[श्रेणी:२०२६ में निधन]] जोड़ी 6586866 wikitext text/x-wiki [[चित्र:Sir Garry Sobers 2012.jpg|अंगूठाकार|दाएँ|सर गारफील्ड सोबर्स 2012 में]] सर '''गारफील्ड सोबर्स''' ({{lang-en|Garfield Sobers}}; जन्म 28 जुलाई 1936) जो '''गैरी सोबर्स''' के रूप में जाने जाते हैं, पूर्व क्रिकेटर है जो [[वेस्टइंडीज़ क्रिकेट टीम]] की तरफ से 1954 से 1974 तक खेलते थे। सोबर्स को व्यापक रूप से सबसे महान [[हरफनमौला (ऑल-राउण्डर)|हरफनमौला]] में से एक माना जाता है।<ref>{{cite web|title=सर गैरी सोबर्स|url=http://www.espncricinfo.com/westindies/content/player/52946.html|publisher=क्रिकइन्फो|accessdate=13 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20130130142331/http://www.espncricinfo.com/westindies/content/player/52946.html|archive-date=30 जनवरी 2013|url-status=live}}</ref> [[ब्रिजटाउन]], [[बारबाडोस]] में पैदा हुए सोबर्स ने 16 साल की उम्र में [[प्रथम श्रेणी क्रिकेट]] में शुरुआत की और उसके अगले वर्ष वेस्टइंडीज के लिये पहला मैच खेला। उन्होंने शुरुआत गेंदबाज के रूप में की थी। बाद में उन्हें बल्लेबाजी क्रम में ऊपर उतारा जाने लगा। शुरुआती असफलताओं के बाद 1958 पाकिस्तान के खिलाफ उन्होंने अपने पहले शतक के रूप में 365 [[नाबाद]] बनाए जो कि किसी पारी में सर्वोच्च व्यक्तिगत स्कोर 36 साल तक रहा।<ref>{{cite web|first1=एस|last1=राजेश|title=An allrounder like no other|trans-title=एक हरफनमौला खिलाड़ी जिसके जैसा कोई नहीं|url=http://www.espncricinfo.com/magazine/content/story/491636.html|website=[[ईएसपीएन क्रिकइन्फो]]|accessdate=13 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20120630144145/http://www.espncricinfo.com/magazine/content/story/491636.html|archive-date=30 जून 2012|url-status=live}}</ref> सोबर्स को 1965 में वेस्ट इंडीज का कप्तान बनाया गया, यह भूमिका वह 1972 तक निभाते रहे। कुल मिलाकर, सोबर्स ने वेस्टइंडीज के लिए 93 टेस्ट खेले जिसमें 57.78 की औसत से 8032 रन बनाए और 34.03 की औसत से 235 विकेट लिए। अपने 383 प्रथम श्रेणी मैचों में उन्होंने 28,000 रन बनाए और 1000 विकेट लिये। सोबर्स को 1975 में क्रिकेट के लिए अपनी सेवाओं के लिए महारानी [[एलिज़ाबेथ द्वितीय|एलिजाबेथ द्वितीय]] द्वारा नाइट की उपाधि दी गई। वह 1980 में शादी के माध्यम से दोहरे बारबाडोस-ऑस्ट्रेलियाई नागरिक बन गए। 1998 में संसद के एक अधिनियम द्वारा, सोबर्स को बारबाडोस के दस राष्ट्रीय नायकों में से एक के रूप में नामित किया गया। ==इन्हें भी देखें== * [[टेस्ट क्रिकेट के तिहरे शतकों की सूची]] ==सन्दर्भ== {{Reflist}} {{साँचा:आईसीसी क्रिकेट हॉल ऑफ़ फेम}} [[श्रेणी:1936 में जन्मे लोग]] [[श्रेणी:वेस्ट इंडीज़ के क्रिकेट खिलाड़ी]] [[श्रेणी:२०२६ में निधन]] 37s82gj1f5lf8x6x33eytqg8dcvblve 6586873 6586866 2026-07-17T17:06:02Z हिंदुस्थान वासी 89741 मृत्यु अद्यतन 6586873 wikitext text/x-wiki [[चित्र:Sir Garry Sobers 2012.jpg|अंगूठाकार|दाएँ|सर गारफील्ड सोबर्स 2012 में]] सर '''गारफील्ड सोबर्स''' ({{lang-en|Garfield Sobers}}; जन्म 28 जुलाई 1936 - 17 जुलाई 2026<ref>{{Cite web|url=https://www.espncricinfo.com/hindi/story/garry-sobers-dies-aged-89-1546035|title=सर गैरी सोबर्स का 89 वर्ष की उम्र में निधन}}</ref>) जो '''गैरी सोबर्स''' के रूप में जाने जाते हैं, पूर्व क्रिकेटर थे जो [[वेस्टइंडीज़ क्रिकेट टीम]] की तरफ से 1954 से 1974 तक खेलते थे। सोबर्स को व्यापक रूप से सबसे महान [[हरफनमौला (ऑल-राउण्डर)|हरफनमौला]] में से एक माना जाता है।<ref>{{cite web|title=सर गैरी सोबर्स|url=http://www.espncricinfo.com/westindies/content/player/52946.html|publisher=क्रिकइन्फो|accessdate=13 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20130130142331/http://www.espncricinfo.com/westindies/content/player/52946.html|archive-date=30 जनवरी 2013|url-status=live}}</ref> [[ब्रिजटाउन]], [[बारबाडोस]] में पैदा हुए सोबर्स ने 16 साल की उम्र में [[प्रथम श्रेणी क्रिकेट]] में शुरुआत की और उसके अगले वर्ष वेस्टइंडीज के लिये पहला मैच खेला। उन्होंने शुरुआत गेंदबाज के रूप में की थी। बाद में उन्हें बल्लेबाजी क्रम में ऊपर उतारा जाने लगा। शुरुआती असफलताओं के बाद 1958 पाकिस्तान के खिलाफ उन्होंने अपने पहले शतक के रूप में 365 [[नाबाद]] बनाए जो कि किसी पारी में सर्वोच्च व्यक्तिगत स्कोर 36 साल तक रहा।<ref>{{cite web|first1=एस|last1=राजेश|title=An allrounder like no other|trans-title=एक हरफनमौला खिलाड़ी जिसके जैसा कोई नहीं|url=http://www.espncricinfo.com/magazine/content/story/491636.html|website=[[ईएसपीएन क्रिकइन्फो]]|accessdate=13 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20120630144145/http://www.espncricinfo.com/magazine/content/story/491636.html|archive-date=30 जून 2012|url-status=live}}</ref> सोबर्स को 1965 में वेस्ट इंडीज का कप्तान बनाया गया, यह भूमिका वह 1972 तक निभाते रहे। कुल मिलाकर, सोबर्स ने वेस्टइंडीज के लिए 93 टेस्ट खेले जिसमें 57.78 की औसत से 8032 रन बनाए और 34.03 की औसत से 235 विकेट लिए। अपने 383 प्रथम श्रेणी मैचों में उन्होंने 28,000 रन बनाए और 1000 विकेट लिये। सोबर्स को 1975 में क्रिकेट के लिए अपनी सेवाओं के लिए महारानी [[एलिज़ाबेथ द्वितीय|एलिजाबेथ द्वितीय]] द्वारा नाइट की उपाधि दी गई। वह 1980 में शादी के माध्यम से दोहरे बारबाडोस-ऑस्ट्रेलियाई नागरिक बन गए। 1998 में संसद के एक अधिनियम द्वारा, सोबर्स को बारबाडोस के दस राष्ट्रीय नायकों में से एक के रूप में नामित किया गया। ==इन्हें भी देखें== * [[टेस्ट क्रिकेट के तिहरे शतकों की सूची]] ==सन्दर्भ== {{Reflist}} {{साँचा:आईसीसी क्रिकेट हॉल ऑफ़ फेम}} [[श्रेणी:1936 में जन्मे लोग]] [[श्रेणी:वेस्ट इंडीज़ के क्रिकेट खिलाड़ी]] [[श्रेणी:२०२६ में निधन]] beo8dqgaeqe7ejaffqq0o4qg0poeeae नक़्श लायलपुरी 0 779015 6587000 6459370 2026-07-18T06:42:34Z ~2026-40351-55 936795 मेरे द्वारा विकीपीडिया के अंग्रेजी पृष्ठ की जानकारी को हिन्दी में रुपातंरित किया गया है। 6587000 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name = नक़्श लायलपुरी | image = Naqsh Lyallpuri.jpg | years_active = 1953–2007 | birth_name = जसवंत राय शर्मा | birth_date = {{Birth date|df=yes|1928|2|24}} | birth_place = लायलपुर (वर्तमान में [[फ़ैसलाबाद|फैसलाबाद]]), [[ब्रिटिश राज|ब्रिटिश भारत]] | death_date = {{Death date and age|df=yes|2017|1|22|1928|2|24}} | death_place = [[मुम्बई|मुंबई]], [[महाराष्ट्र]], [[भारत]] | residence = [[मुम्बई|मुंबई]] | occupation = गीतकार }} जसवन्त राय शर्मा (24 फरवरी 1928 - 22 जनवरी 2017), जिन्हे फिल्म और संगीत जगत में उनके उपनाम नक्श लायलपुरी के नाम से जाना जाता है। नक्श लायलपुरी भारत के प्रख्यात हिन्दी गीतकार और ग़ज़लकार थे। उनके कुछ श्रेष्ठतम फिल्मी नगमें रस्म-ए-उल्फत को निभाएं (दिल की राहें, 1973), उल्फत में जमाने की (कॉल गर्ल, 1974), तुम्हें हो ना हो (घरौंदा, 1977), पिया तुम हो सागर (तुम्हारे लिए 1978), ये मुलाकात एक बहाना है (खानदान, 1979), प्यार का दर्द है (दर्द, 1981), और चिट्ठिये नी दर्द फिराक वालिए (हिना, 1991) हैं। ==प्रारंभिक जीवन== उनका जन्म 24 फरवरी, 1928 को वर्तमान पाकिस्तान स्थित पंजाब प्रांत के लायलपुर में हुआ था। उनका असली नाम जसवंत राय शर्मा था। ==करियर== उनकी बतौर गीतकार पहली फिल्म ‘जुग्गू’ (वर्ष 1952) थी जिसमें उन्होंने ‘अगर तेरी आंखों से आंखें मिला दूं’ गीत लिखा था। उनकी अन्य प्रसिद्ध फिल्मों में ‘चेतना’, ‘[[आहिस्ता आहिस्ता (1981 फ़िल्म)|आहिस्ता आहिस्ता]]’ ‘[[तुम्हारे लिये (1978 फ़िल्म)|तुम्हारे लिए]]’ एवं ‘[[घरौंदा (1977 फ़िल्म)|घरौंदा]]’ भी शामिल हैं।<ref name="FWA">{{cite web|url=http://fwa.co.in/ogtemplate.php?get=FWAoig5|title=Old is Gold: Naqsh Lyallpuri (Feb 24,1928 – Jan 22 2017)|trans-title=ओल्ड इज गोल्ड:नक्श लायलपुरी (फ़रवरी 24,1928 - 22 जनवरी 2017)|publisher=फिल्म राइटर्स एसोसिएशन|accessdate=28 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5|archive-date=2 फ़रवरी 2017|url-status=live}}</ref> ==फिल्मोग्राफी== ;कुछ प्रसिद्ध गीत * धानी चुनर मोरी हाए रे * मैं तो हर मोड़ पर तुझको दूंगा सदा * कई सदियों से कई जन्मों से * उल्फ़त में ज़माने की हर रस्म को ठुकराओ * तुम्हें देखती हूं तो लगता है ऐसे * ये मुलाक़ात इक बहाना है * क़दर तूने ना जानी * चांदनी रात में एक बार तुझे देखा है * चिट्ठिए * तुम्हें हो न हो मुझको तो * प्यार का दर्द है मीठा मीठा प्यारा प्यारा * सीने में भी तूफ़ां है * न जाने क्या हुआ,जो तूने छू दिया * तुझ संग प्रीत लगाई सजना * नन्हा मुन्ना राही हूं, देश का सिपाही हूं * जिंदगी की न टूटे लड़ी,प्यार कर ले घड़ी दो घड़ी * मेरे देश की धरती सोना उगले,उगले हीरे मोती ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * {{IMDb name|1055782|नक़्श लायलपुरी}} * [https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5 फिल्म लेखक संघ] के वेबसाइट पर। {{authority control|LCCN=no00059889}} [https://www.hastakshep.com/old/%e0%a4%b0%e0%a5%8b%e0%a4%ae%e0%a4%be%e0%a4%82%e0%a4%b8-%e0%a4%95%e0%a5%8b-%e0%a4%b9%e0%a4%b0-%e0%a4%ae%e0%a5%8b%e0%a4%a1%e0%a4%bc-%e0%a4%aa%e0%a4%b0-%e0%a4%86%e0%a4%b5%e0%a4%be%e0%a4%9c%e0%a4%bc/ रोमांस को हर मोड़ पर आवाज़ दी नक्श लायलपुरी के गीतों ने] {{Webarchive|url=https://web.archive.org/web/20230303040124/https://www.hastakshep.com/old/%E0%A4%B0%E0%A5%8B%E0%A4%AE%E0%A4%BE%E0%A4%82%E0%A4%B8-%E0%A4%95%E0%A5%8B-%E0%A4%B9%E0%A4%B0-%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A4%BC-%E0%A4%AA%E0%A4%B0-%E0%A4%86%E0%A4%B5%E0%A4%BE%E0%A4%9C%E0%A4%BC/ |date=3 मार्च 2023 }} [[श्रेणी:1928 में जन्मे लोग]] [[श्रेणी:२०१७ में निधन]] [[श्रेणी:पंजाब के लोग]] [[श्रेणी:गीतकार]] [[श्रेणी:उर्दू शायर]] [[श्रेणी:पंजाबी कवि]] m2ktflmijsa7obeaf4b39thwxy91dll 6587001 6587000 2026-07-18T06:43:14Z ~2026-40351-55 936795 मेरे द्वारा विकीपीडिया के अंग्रेजी पृष्ठ की जानकारी को हिन्दी में रुपातंरित किया गया है। 6587001 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name = नक़्श लायलपुरी | image = Naqsh Lyallpuri.jpg | years_active = 1953–2007 | birth_name = जसवंत राय शर्मा | birth_date = {{Birth date|df=yes|1928|2|24}} | birth_place = लायलपुर (वर्तमान में [[फ़ैसलाबाद|फैसलाबाद]]), [[ब्रिटिश राज|ब्रिटिश भारत]] | death_date = {{Death date and age|df=yes|2017|1|22|1928|2|24}} | death_place = [[मुम्बई|मुंबई]], [[महाराष्ट्र]], [[भारत]] | residence = [[मुम्बई|मुंबई]] | occupation = गीतकार }} '''जसवन्त राय शर्मा''' (24 फरवरी 1928 - 22 जनवरी 2017), जिन्हे फिल्म और संगीत जगत में उनके उपनाम नक्श लायलपुरी के नाम से जाना जाता है। नक्श लायलपुरी भारत के प्रख्यात हिन्दी गीतकार और ग़ज़लकार थे। उनके कुछ श्रेष्ठतम फिल्मी नगमें रस्म-ए-उल्फत को निभाएं (दिल की राहें, 1973), उल्फत में जमाने की (कॉल गर्ल, 1974), तुम्हें हो ना हो (घरौंदा, 1977), पिया तुम हो सागर (तुम्हारे लिए 1978), ये मुलाकात एक बहाना है (खानदान, 1979), प्यार का दर्द है (दर्द, 1981), और चिट्ठिये नी दर्द फिराक वालिए (हिना, 1991) हैं। ==प्रारंभिक जीवन== उनका जन्म 24 फरवरी, 1928 को वर्तमान पाकिस्तान स्थित पंजाब प्रांत के लायलपुर में हुआ था। उनका असली नाम जसवंत राय शर्मा था। ==करियर== उनकी बतौर गीतकार पहली फिल्म ‘जुग्गू’ (वर्ष 1952) थी जिसमें उन्होंने ‘अगर तेरी आंखों से आंखें मिला दूं’ गीत लिखा था। उनकी अन्य प्रसिद्ध फिल्मों में ‘चेतना’, ‘[[आहिस्ता आहिस्ता (1981 फ़िल्म)|आहिस्ता आहिस्ता]]’ ‘[[तुम्हारे लिये (1978 फ़िल्म)|तुम्हारे लिए]]’ एवं ‘[[घरौंदा (1977 फ़िल्म)|घरौंदा]]’ भी शामिल हैं।<ref name="FWA">{{cite web|url=http://fwa.co.in/ogtemplate.php?get=FWAoig5|title=Old is Gold: Naqsh Lyallpuri (Feb 24,1928 – Jan 22 2017)|trans-title=ओल्ड इज गोल्ड:नक्श लायलपुरी (फ़रवरी 24,1928 - 22 जनवरी 2017)|publisher=फिल्म राइटर्स एसोसिएशन|accessdate=28 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5|archive-date=2 फ़रवरी 2017|url-status=live}}</ref> ==फिल्मोग्राफी== ;कुछ प्रसिद्ध गीत * धानी चुनर मोरी हाए रे * मैं तो हर मोड़ पर तुझको दूंगा सदा * कई सदियों से कई जन्मों से * उल्फ़त में ज़माने की हर रस्म को ठुकराओ * तुम्हें देखती हूं तो लगता है ऐसे * ये मुलाक़ात इक बहाना है * क़दर तूने ना जानी * चांदनी रात में एक बार तुझे देखा है * चिट्ठिए * तुम्हें हो न हो मुझको तो * प्यार का दर्द है मीठा मीठा प्यारा प्यारा * सीने में भी तूफ़ां है * न जाने क्या हुआ,जो तूने छू दिया * तुझ संग प्रीत लगाई सजना * नन्हा मुन्ना राही हूं, देश का सिपाही हूं * जिंदगी की न टूटे लड़ी,प्यार कर ले घड़ी दो घड़ी * मेरे देश की धरती सोना उगले,उगले हीरे मोती ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * {{IMDb name|1055782|नक़्श लायलपुरी}} * [https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5 फिल्म लेखक संघ] के वेबसाइट पर। {{authority control|LCCN=no00059889}} [https://www.hastakshep.com/old/%e0%a4%b0%e0%a5%8b%e0%a4%ae%e0%a4%be%e0%a4%82%e0%a4%b8-%e0%a4%95%e0%a5%8b-%e0%a4%b9%e0%a4%b0-%e0%a4%ae%e0%a5%8b%e0%a4%a1%e0%a4%bc-%e0%a4%aa%e0%a4%b0-%e0%a4%86%e0%a4%b5%e0%a4%be%e0%a4%9c%e0%a4%bc/ रोमांस को हर मोड़ पर आवाज़ दी नक्श लायलपुरी के गीतों ने] {{Webarchive|url=https://web.archive.org/web/20230303040124/https://www.hastakshep.com/old/%E0%A4%B0%E0%A5%8B%E0%A4%AE%E0%A4%BE%E0%A4%82%E0%A4%B8-%E0%A4%95%E0%A5%8B-%E0%A4%B9%E0%A4%B0-%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A4%BC-%E0%A4%AA%E0%A4%B0-%E0%A4%86%E0%A4%B5%E0%A4%BE%E0%A4%9C%E0%A4%BC/ |date=3 मार्च 2023 }} [[श्रेणी:1928 में जन्मे लोग]] [[श्रेणी:२०१७ में निधन]] [[श्रेणी:पंजाब के लोग]] [[श्रेणी:गीतकार]] [[श्रेणी:उर्दू शायर]] [[श्रेणी:पंजाबी कवि]] 58om4vojz21xetafw4e8jp9oqq64obo 6587002 6587001 2026-07-18T07:00:44Z ~2026-40351-55 936795 /* प्रारंभिक जीवन */ हिन्दी रुपांतरण किया गया है 6587002 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name = नक़्श लायलपुरी | image = Naqsh Lyallpuri.jpg | years_active = 1953–2007 | birth_name = जसवंत राय शर्मा | birth_date = {{Birth date|df=yes|1928|2|24}} | birth_place = लायलपुर (वर्तमान में [[फ़ैसलाबाद|फैसलाबाद]]), [[ब्रिटिश राज|ब्रिटिश भारत]] | death_date = {{Death date and age|df=yes|2017|1|22|1928|2|24}} | death_place = [[मुम्बई|मुंबई]], [[महाराष्ट्र]], [[भारत]] | residence = [[मुम्बई|मुंबई]] | occupation = गीतकार }} '''जसवन्त राय शर्मा''' (24 फरवरी 1928 - 22 जनवरी 2017), जिन्हे फिल्म और संगीत जगत में उनके उपनाम नक्श लायलपुरी के नाम से जाना जाता है। नक्श लायलपुरी भारत के प्रख्यात हिन्दी गीतकार और ग़ज़लकार थे। उनके कुछ श्रेष्ठतम फिल्मी नगमें रस्म-ए-उल्फत को निभाएं (दिल की राहें, 1973), उल्फत में जमाने की (कॉल गर्ल, 1974), तुम्हें हो ना हो (घरौंदा, 1977), पिया तुम हो सागर (तुम्हारे लिए 1978), ये मुलाकात एक बहाना है (खानदान, 1979), प्यार का दर्द है (दर्द, 1981), और चिट्ठिये नी दर्द फिराक वालिए (हिना, 1991) हैं। ==प्रारंभिक जीवन== जसवंत राय शर्मा (नक्श लायलपुरी) का जन्म 24 फरवरी 1928 को लायलपुर (जो  अब फैसलाबाद के नाम से जाना जाता है और वर्तमान में पाकिस्तान में है) में एक पंजाबी बढ़ई विश्वकर्मा परिवार में हुआ था। उनके पिता एक मैकेनिकल इंजीनियर थे और चाहते थे कि जसवंत भी इंजीनियर बनें। उन्हें जसवंत का साहित्य के प्रति लगाव पसंद नहीं था; उनका कहना था कि वह कभी भी कहानियाँ और गीत लिखकर अपनी आजीविका नहीं चला पायेंगे। जसवंत राय शर्मा की आठ वर्ष आयु में ही उनकी माता जी को देहांत चेचक बीमारी के कारण हो गयी थी। उनकी माँ के असामयिक निधन के कुछ वर्ष पश्चात उनके पिता ने दूसरा विवाह कर लिया, जो जवान होते जसवंत राय शर्मा को पसंद नहीं आई। 1946 में, 18 साल की आयु जसवंत राय शर्मा काम की तलाश में लाहौर चले गये और हीरो पब्लिकेशन्स नाम की प्रकाशन संस्था में नौकरी करने लगे। 1947 में देश के विभाजन के पश्चात, उनका पूरा परिवार तब के संयुक्त प्रदेश और आज के उत्तर प्रदेश के लखनऊ शहर में आकर बस गया। 1951 में, शर्मा बम्बई (मुम्बई) चले गए और अंग्रेजी के प्रतिष्ठित अखबार दि टाइम्स ऑफ इंडिया में प्रूफरीडर के रुप में नौकरी करने लगे। दि टाइम्स ऑफ इंडिया में नौकरी के दौरान ही, उन्होंने पारंपरिक हिंदू रीति-रिवाज के अनुसार परिवारजनों द्वारा तय किए रिश्ते के अनुसार विवाह कर लिया। उनकी पत्नी का नाम कमलेश था, जो जम्मू-कश्मीर की रहने वाली थीं और उन्हीं के जाति और पारिवारिक पृष्ठभूमि से थीं। यह शादी पूर्ण रुप से सफल और सुखद रही। लायलपुरी हमेशा कहते थे कि उनकी पत्नी ही उनकी ताकत का आधार हैं, जिन्होंने कठिन परिस्थितियों में भी हमेशा ही उनका पूरा साथ दिया। जसवंत राय शर्मा और कमलेश जी के घर तीन पुत्रों बप्पन, राजेंद्र और सुनीत का जन्म हुआ, जिन्होने अपने पिता के उपनाम लायलपुरी को अपने नाम में जोड़ा। नक्श लायलपुरी के दूसरे बेटे, राजेंद्र राजन लायलपुरी, एक नामचीन सिनेमेटोग्राफर हैं। ==करियर== उनकी बतौर गीतकार पहली फिल्म ‘जुग्गू’ (वर्ष 1952) थी जिसमें उन्होंने ‘अगर तेरी आंखों से आंखें मिला दूं’ गीत लिखा था। उनकी अन्य प्रसिद्ध फिल्मों में ‘चेतना’, ‘[[आहिस्ता आहिस्ता (1981 फ़िल्म)|आहिस्ता आहिस्ता]]’ ‘[[तुम्हारे लिये (1978 फ़िल्म)|तुम्हारे लिए]]’ एवं ‘[[घरौंदा (1977 फ़िल्म)|घरौंदा]]’ भी शामिल हैं।<ref name="FWA">{{cite web|url=http://fwa.co.in/ogtemplate.php?get=FWAoig5|title=Old is Gold: Naqsh Lyallpuri (Feb 24,1928 – Jan 22 2017)|trans-title=ओल्ड इज गोल्ड:नक्श लायलपुरी (फ़रवरी 24,1928 - 22 जनवरी 2017)|publisher=फिल्म राइटर्स एसोसिएशन|accessdate=28 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5|archive-date=2 फ़रवरी 2017|url-status=live}}</ref> ==फिल्मोग्राफी== ;कुछ प्रसिद्ध गीत * धानी चुनर मोरी हाए रे * मैं तो हर मोड़ पर तुझको दूंगा सदा * कई सदियों से कई जन्मों से * उल्फ़त में ज़माने की हर रस्म को ठुकराओ * तुम्हें देखती हूं तो लगता है ऐसे * ये मुलाक़ात इक बहाना है * क़दर तूने ना जानी * चांदनी रात में एक बार तुझे देखा है * चिट्ठिए * तुम्हें हो न हो मुझको तो * प्यार का दर्द है मीठा मीठा प्यारा प्यारा * सीने में भी तूफ़ां है * न जाने क्या हुआ,जो तूने छू दिया * तुझ संग प्रीत लगाई सजना * नन्हा मुन्ना राही हूं, देश का सिपाही हूं * जिंदगी की न टूटे लड़ी,प्यार कर ले घड़ी दो घड़ी * मेरे देश की धरती सोना उगले,उगले हीरे मोती ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * {{IMDb name|1055782|नक़्श लायलपुरी}} * [https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5 फिल्म लेखक संघ] के वेबसाइट पर। {{authority control|LCCN=no00059889}} [https://www.hastakshep.com/old/%e0%a4%b0%e0%a5%8b%e0%a4%ae%e0%a4%be%e0%a4%82%e0%a4%b8-%e0%a4%95%e0%a5%8b-%e0%a4%b9%e0%a4%b0-%e0%a4%ae%e0%a5%8b%e0%a4%a1%e0%a4%bc-%e0%a4%aa%e0%a4%b0-%e0%a4%86%e0%a4%b5%e0%a4%be%e0%a4%9c%e0%a4%bc/ रोमांस को हर मोड़ पर आवाज़ दी नक्श लायलपुरी के गीतों ने] {{Webarchive|url=https://web.archive.org/web/20230303040124/https://www.hastakshep.com/old/%E0%A4%B0%E0%A5%8B%E0%A4%AE%E0%A4%BE%E0%A4%82%E0%A4%B8-%E0%A4%95%E0%A5%8B-%E0%A4%B9%E0%A4%B0-%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A4%BC-%E0%A4%AA%E0%A4%B0-%E0%A4%86%E0%A4%B5%E0%A4%BE%E0%A4%9C%E0%A4%BC/ |date=3 मार्च 2023 }} [[श्रेणी:1928 में जन्मे लोग]] [[श्रेणी:२०१७ में निधन]] [[श्रेणी:पंजाब के लोग]] [[श्रेणी:गीतकार]] [[श्रेणी:उर्दू शायर]] [[श्रेणी:पंजाबी कवि]] mfzyzbli5dqv75d9sujcpocl2f4j3nu 6587003 6587002 2026-07-18T07:05:08Z ~2026-40351-55 936795 /* प्रारंभिक जीवन */ Translation 6587003 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति | name = नक़्श लायलपुरी | image = Naqsh Lyallpuri.jpg | years_active = 1953–2007 | birth_name = जसवंत राय शर्मा | birth_date = {{Birth date|df=yes|1928|2|24}} | birth_place = लायलपुर (वर्तमान में [[फ़ैसलाबाद|फैसलाबाद]]), [[ब्रिटिश राज|ब्रिटिश भारत]] | death_date = {{Death date and age|df=yes|2017|1|22|1928|2|24}} | death_place = [[मुम्बई|मुंबई]], [[महाराष्ट्र]], [[भारत]] | residence = [[मुम्बई|मुंबई]] | occupation = गीतकार }} '''जसवन्त राय शर्मा''' (24 फरवरी 1928 - 22 जनवरी 2017), जिन्हे फिल्म और संगीत जगत में उनके उपनाम नक्श लायलपुरी के नाम से जाना जाता है। नक्श लायलपुरी भारत के प्रख्यात हिन्दी गीतकार और ग़ज़लकार थे। उनके कुछ श्रेष्ठतम फिल्मी नगमें रस्म-ए-उल्फत को निभाएं (दिल की राहें, 1973), उल्फत में जमाने की (कॉल गर्ल, 1974), तुम्हें हो ना हो (घरौंदा, 1977), पिया तुम हो सागर (तुम्हारे लिए 1978), ये मुलाकात एक बहाना है (खानदान, 1979), प्यार का दर्द है (दर्द, 1981), और चिट्ठिये नी दर्द फिराक वालिए (हिना, 1991) हैं। ==प्रारंभिक जीवन== '''जसवंत राय शर्मा (नक्श लायलपुरी)''' का जन्म 24 फरवरी 1928 को लायलपुर (जो अब फैसलाबाद के नाम से जाना जाता है और वर्तमान में पाकिस्तान में है) में एक पंजाबी बढ़ई विश्वकर्मा परिवार में हुआ था। उनके पिता एक मैकेनिकल इंजीनियर थे और चाहते थे कि जसवंत भी इंजीनियर बनें। उन्हें जसवंत का साहित्य के प्रति लगाव पसंद नहीं था; उनका कहना था कि वह कभी भी कहानियाँ और गीत लिखकर अपनी आजीविका नहीं चला पायेंगे। जसवंत राय शर्मा की आठ वर्ष आयु में ही उनकी माता जी को देहांत चेचक बीमारी के कारण हो गयी थी। उनकी माँ के असामयिक निधन के कुछ वर्ष पश्चात उनके पिता ने दूसरा विवाह कर लिया, जो जवान होते जसवंत राय शर्मा को पसंद नहीं आई। 1946 में, 18 साल की आयु जसवंत राय शर्मा काम की तलाश में लाहौर चले गये और हीरो पब्लिकेशन्स नाम की प्रकाशन संस्था में नौकरी करने लगे। 1947 में देश के विभाजन के पश्चात, उनका पूरा परिवार तब के संयुक्त प्रदेश और आज के उत्तर प्रदेश के लखनऊ शहर में आकर बस गया। 1951 में, शर्मा बम्बई (मुम्बई) चले गए और अंग्रेजी के प्रतिष्ठित अखबार दि टाइम्स ऑफ इंडिया में प्रूफरीडर के रुप में नौकरी करने लगे। दि टाइम्स ऑफ इंडिया में नौकरी के दौरान ही, उन्होंने पारंपरिक हिंदू रीति-रिवाज के अनुसार परिवारजनों द्वारा तय किए रिश्ते के अनुसार विवाह कर लिया। उनकी पत्नी का नाम कमलेश था, जो जम्मू-कश्मीर की रहने वाली थीं और उन्हीं के जाति और पारिवारिक पृष्ठभूमि से थीं। यह शादी पूर्ण रुप से सफल और सुखद रही। लायलपुरी हमेशा कहते थे कि उनकी पत्नी ही उनकी ताकत का आधार हैं, जिन्होंने कठिन परिस्थितियों में भी हमेशा ही उनका पूरा साथ दिया। जसवंत राय शर्मा और कमलेश जी के घर तीन पुत्रों बप्पन, राजेंद्र और सुनीत का जन्म हुआ, जिन्होने अपने पिता के उपनाम लायलपुरी को अपने नाम में जोड़ा। नक्श लायलपुरी के दूसरे बेटे, राजेंद्र राजन लायलपुरी, एक नामचीन सिनेमेटोग्राफर हैं। ==करियर== उनकी बतौर गीतकार पहली फिल्म ‘जुग्गू’ (वर्ष 1952) थी जिसमें उन्होंने ‘अगर तेरी आंखों से आंखें मिला दूं’ गीत लिखा था। उनकी अन्य प्रसिद्ध फिल्मों में ‘चेतना’, ‘[[आहिस्ता आहिस्ता (1981 फ़िल्म)|आहिस्ता आहिस्ता]]’ ‘[[तुम्हारे लिये (1978 फ़िल्म)|तुम्हारे लिए]]’ एवं ‘[[घरौंदा (1977 फ़िल्म)|घरौंदा]]’ भी शामिल हैं।<ref name="FWA">{{cite web|url=http://fwa.co.in/ogtemplate.php?get=FWAoig5|title=Old is Gold: Naqsh Lyallpuri (Feb 24,1928 – Jan 22 2017)|trans-title=ओल्ड इज गोल्ड:नक्श लायलपुरी (फ़रवरी 24,1928 - 22 जनवरी 2017)|publisher=फिल्म राइटर्स एसोसिएशन|accessdate=28 जनवरी 2017|language=en|archive-url=https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5|archive-date=2 फ़रवरी 2017|url-status=live}}</ref> ==फिल्मोग्राफी== ;कुछ प्रसिद्ध गीत * धानी चुनर मोरी हाए रे * मैं तो हर मोड़ पर तुझको दूंगा सदा * कई सदियों से कई जन्मों से * उल्फ़त में ज़माने की हर रस्म को ठुकराओ * तुम्हें देखती हूं तो लगता है ऐसे * ये मुलाक़ात इक बहाना है * क़दर तूने ना जानी * चांदनी रात में एक बार तुझे देखा है * चिट्ठिए * तुम्हें हो न हो मुझको तो * प्यार का दर्द है मीठा मीठा प्यारा प्यारा * सीने में भी तूफ़ां है * न जाने क्या हुआ,जो तूने छू दिया * तुझ संग प्रीत लगाई सजना * नन्हा मुन्ना राही हूं, देश का सिपाही हूं * जिंदगी की न टूटे लड़ी,प्यार कर ले घड़ी दो घड़ी * मेरे देश की धरती सोना उगले,उगले हीरे मोती ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * {{IMDb name|1055782|नक़्श लायलपुरी}} * [https://web.archive.org/web/20170202032136/http://fwa.co.in/ogtemplate.php?get=FWAoig5 फिल्म लेखक संघ] के वेबसाइट पर। {{authority control|LCCN=no00059889}} [https://www.hastakshep.com/old/%e0%a4%b0%e0%a5%8b%e0%a4%ae%e0%a4%be%e0%a4%82%e0%a4%b8-%e0%a4%95%e0%a5%8b-%e0%a4%b9%e0%a4%b0-%e0%a4%ae%e0%a5%8b%e0%a4%a1%e0%a4%bc-%e0%a4%aa%e0%a4%b0-%e0%a4%86%e0%a4%b5%e0%a4%be%e0%a4%9c%e0%a4%bc/ रोमांस को हर मोड़ पर आवाज़ दी नक्श लायलपुरी के गीतों ने] {{Webarchive|url=https://web.archive.org/web/20230303040124/https://www.hastakshep.com/old/%E0%A4%B0%E0%A5%8B%E0%A4%AE%E0%A4%BE%E0%A4%82%E0%A4%B8-%E0%A4%95%E0%A5%8B-%E0%A4%B9%E0%A4%B0-%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A4%BC-%E0%A4%AA%E0%A4%B0-%E0%A4%86%E0%A4%B5%E0%A4%BE%E0%A4%9C%E0%A4%BC/ |date=3 मार्च 2023 }} [[श्रेणी:1928 में जन्मे लोग]] [[श्रेणी:२०१७ में निधन]] [[श्रेणी:पंजाब के लोग]] [[श्रेणी:गीतकार]] [[श्रेणी:उर्दू शायर]] [[श्रेणी:पंजाबी कवि]] tuwu6to0hetnnncilafxpz1puv96owm आर्थिक समस्या 0 818957 6586761 6274364 2026-07-17T15:21:07Z ~2026-40035-91 936705 /* इन्हें भी देखें */ 6586761 wikitext text/x-wiki '''आर्थिक समस्या''' का कथन है कि किसी भी अर्थव्यवस्था के सीमित संसाधन मानव की सभी आवश्यकताओं को पूरा नहीं कर सकते। इसका मानना है कि मानव की आवश्यकताएँ असीमीत हैं, जबकि उनको पूरा करने के साधन कम होते हैं। 'आर्थिक समस्या' को ही 'मूलभूत आर्थिक समस्या' भी कहते हैं। इसके कारण तीन प्रश्न उठते हैं- *(१) क्या पैदा किया जाय? *(२) कैसे पैदा किया जाय? *(३) किसके लिए पैदा किया जाय? ==इन्हें भी देखें== [[श्रेणी:अर्थशास्त्र]] gyn3t4f3z794wp37nkn3ko0x80um81v 6586910 6586761 2026-07-17T18:03:03Z SM7 89247 [[Special:Contributions/~2026-40035-91|~2026-40035-91]] ([[User talk:~2026-40035-91|Talk]]) के संपादनों को हटाकर [[User:संजीव कुमार|संजीव कुमार]] के आखिरी अवतरण को पूर्ववत किया 5298204 wikitext text/x-wiki '''आर्थिक समस्या''' का कथन है कि किसी भी अर्थव्यवस्था के सीमित संसाधन मानव की सभी आवश्यकताओं को पूरा नहीं कर सकते। इसका मानना है कि मानव की आवश्यकताएँ असीमीत हैं, जबकि उनको पूरा करने के साधन कम होते हैं। 'आर्थिक समस्या' को ही 'मूलभूत आर्थिक समस्या' भी कहते हैं। इसके कारण तीन प्रश्न उठते हैं- *(१) क्या पैदा किया जाय? *(२) कैसे पैदा किया जाय? *(३) किसके लिए पैदा किया जाय? ==इन्हें भी देखें== *[[दुर्लभता]] [[श्रेणी:अर्थशास्त्र]] nkeqih35tfm06p5bg7eh1cajiggh3yu सुहेलदेव 0 826149 6587004 6390378 2026-07-18T07:05:11Z क्शत्रिय 922837 /* राजनीतिकरण */ छोटा सा सुधार किया। 6587004 wikitext text/x-wiki [[File:2018 stamp commemorating Maharaja Suheldev.jpg|thumb|सुहेलदेव]] '''सुहेलदेव''' [[श्रावस्ती]] से अर्ध-पौराणिक भारतीय राजा हैं। कहा जाता है कि इन्होंने 11वीं शताब्दी की शुरुआत में [[बहराइच]] में [[ग़ज़नवी साम्राज्य|ग़ज़नवी]] सेनापति [[सैयद सालार मसूद ग़ाज़ी]] को पराजित कर मार डाला था। 17वीं शताब्दी के [[फारसी भाषा]] के ऐतिहासिक कल्पित कथा ''मिरात-ए-मसूदी'' में उनका उल्लेख है। 20वीं शताब्दी के बाद से, विभिन्न [[हिन्दू राष्ट्रवाद|हिंदू राष्ट्रवादी]] समूहों ने उन्हें एक हिंदू राजा के रूप में चिह्नित किया है जिसने मुस्लिम आक्रमणकारियों को हरा दिया। == किंवदंती == सालार मसूद और सुहेलदेव की कथा फारसी भाषा के ''मिरात-ए-मसूदी'' में पाई जाती है। यह मुगल सम्राट [[जहाँगीर]] (1605-1627) के शासनकाल के दौरान अब्द-उर-रहमान चिश्ती ने लिखी थी। पौराणिक कथा के अनुसार, सुहेलदेव श्रावस्ती के राजा के सबसे बड़े पुत्र थे। पौराणिक कथाओं के विभिन्न संस्करणों में, उन्हें सकरदेव, सुहीरध्वज, सुहरीदिल, सुहरीदलध्वज, राय सुह्रिद देव, सुसज और सुहारदल समेत विभिन्न नामों से जाना जाता है।<ref name="द">{{cite news |title=RSS और पासी राजा सुहेलदेव: पौराणिक पात्र और वोटबैंक की राजनीति |url=https://hindi.thequint.com/voices/opinion/rss-and-the-pasi-king-raja-suhaldev-legends-and-votebank-politics |accessdate=29 जून 2018 |work=[[द क्विंट]] |date=25 फरवरी 2018 |language=en |archive-url=https://web.archive.org/web/20180629155124/https://hindi.thequint.com/voices/opinion/rss-and-the-pasi-king-raja-suhaldev-legends-and-votebank-politics |archive-date=29 जून 2018 |url-status=dead }}</ref> [[महमूद ग़ज़नवी]] के भतीजे [[सैयद सालार मसूद ग़ाज़ी]] ने 16 वर्ष की आयु में [[सिंधु नदी]] को पार कर भारत पर आक्रमण किया और [[मुल्तान]], [[दिल्ली]], [[मेरठ]] और अंत में [[सतरिख]] पर विजय प्राप्त की। सतरिख में, उन्होंने अपने मुख्यालय की स्थापना की और स्थानीय राजाओं को हराने के लिए सेनाओं को भेज दिया। सैयद सैफ-उद-दीन और मियाँ राजब को [[बहराइच]] को भेज दिया गया था। बहराइच के स्थानीय राजा और अन्य पड़ोसी हिंदू राजाओं ने एक संघ का गठन किया लेकिन मसूद के पिता [[सैयद सालार साहू गाजी]] के नेतृत्व में सेना ने उन्हें हरा दिया। फिर भी उन्होंने उत्पात मचाना जारी रखा और इसलिए सन् 1033 में मसूद खुद बहराइच में उनकी प्रगति को जाँचने आया। सुहेलदेव के आगमन तक, मसूद ने अपने दुश्मनों को हर बार हराया। अंत में सन् 1034 में सुहेलदेव की सेना ने मसूद की सेना को एक लड़ाई में हराया और मसूद की मौत हो गई। मसूद को बहराइच में दफनाया गया था और सन् 1035 में वहाँ उसकी याद में एक [[दरगाह]] बनाई गई थी। [[राष्ट्रीय स्वयंसेवक संघ]] (आरएसएस) का दावा है कि उस जगह पहले हिंदू संत और ऋषि बलार्क का एक [[आश्रम]] था और [[फ़िरोज़ शाह तुग़लक़]] के द्वारा उसे दरगाह में बदल दिया गया। == राजनीतिकरण == विभिन्न जाति समूहों ने सुहेलदेव को अपने आप में से एक के रूप में दर्शाने का प्रयास किया है। ''मिरात-ए-मसूदी'' के मुताबिक, सुहेलदेव "थारू/बैस राजपूत" समुदाय से संबंधित थे। बाद के लेखकों ने उनकी जाति को बैस राजपूत , "भरू [[राजपूत]]", [[तोमर राजपूत]], [[थारू]] और [[जैन]] राजपूत रूप में वर्णित किया है। 1940 में, बहराइच के एक स्थानीय स्कूली शिक्षक ने एक लंबी कविता की रचना की। उन्होंने सुहेलदेव को जैन राजा और हिंदू संस्कृति के उद्धारकर्ता के रूप में पेश किया। कविता बहुत लोकप्रिय हो गई। 1947 में भारत के धर्म आधारित विभाजन के बाद, कविता का पहला मुद्रित संस्करण 1950 में दिखाई दिया। [[आर्य समाज]], [[अखिल भारतीय राम राज्य परिषद|राम राज्य परिषद]] और [[हिंदू महासभा]] संगठन ने सुहेलदेव को हिंदू नायक के रूप में प्रदर्शित किया। अप्रैल 1950 में, इन संगठनों ने राजा के सम्मान में सालार मसूद के दरगाह में एक मेला की योजना बनाई। दरगाह समिति के सदस्य ख्वाजा खलील अहमद शाह ने सांप्रदायिक तनाव से बचने के लिए जिला प्रशासन को प्रस्तावित मेले पर प्रतिबंध लगाने की अपील की।<ref name="द" /> तदनुसार, धारा 144 (गैरकानूनी असेंबली) के तहत निषिद्ध आदेश जारी किए गए थे। स्थानीय हिंदुओं के एक समूह ने आदेश के खिलाफ एक मार्च का आयोजन किया और उन्हें दंगा भड़काने के आरोप में गिरफ्तार किया गया। उनकी गिरफ्तारी का विरोध करने के लिए हिंदुओं ने एक सप्ताह के लिए स्थानीय बाजारों को बंद कर दिया और गिरफ्तार होने की पेशकश की। [[भारतीय राष्ट्रीय कांग्रेस]] के नेता भी विरोध में शामिल हो गए और लगभग 2000 लोग जेल गए। अंत में प्रशासन ने आदेशों को वापस ले लिया।<ref name="द"></ref> वहाँ 500 [[बीघा]] भूमि पर कई चित्रों और मूर्तियों के साथ सुहेलदेव का एक मंदिर बनाया गया था। 1950 और 1960 के दशक के दौरान, स्थानीय राजनेताओं ने सुहेलदेव को [[पासी]] राजा बताना शुरू किया। पासी एक दलित समुदाय है और बहराइच के आस-पास एक महत्वपूर्ण [[वोटबैंक]] भी है। धीरे-धीरे पासी ने सुहेलदेव को अपनी जाति के सदस्य के रूप में महिमा मंडित करना शुरू कर दिया। [[बहुजन समाज पार्टी]] ने मूल रूप से दलित मतदाताओं को आकर्षित करने के लिए सुहेलदेव मिथक का इस्तेमाल किया।<ref>{{cite news |title=सुहेलदेव को लेकर छिड़ी जंग, राजा बोलो- किसके हो संग |url=https://www.patrika.com/lucknow-news/mission-2017-cracks-in-dalit-vote-bank-11418/ |accessdate=29 जून 2018 |work=पत्रिका |language=hi-IN |archive-url=https://web.archive.org/web/20180629131414/https://www.patrika.com/lucknow-news/mission-2017-cracks-in-dalit-vote-bank-11418/ |archive-date=29 जून 2018 |url-status=live }}</ref> बाद में, [[भारतीय जनता पार्टी]] (बीजेपी), [[विश्व हिंदू परिषद]] (वीएचपी) और राष्ट्रीय स्वयंसेवक संघ (आरएसएस) ने भी दलितों को आकर्षित करने के लिए इसका इस्तेमाल करना शुरू कर दिया। 1980 का दशक शुरू होने के बाद, बीजेपी-वीएचपी-आरएसएस ने सुहेलदेव मिथक का जश्न मनाने के लिए मेले और नौटंकी का आयोजन किया, जिसमें उन्हें मुस्लिम आक्रमणकारियों के खिलाफ लड़े एक हिंदू दलित के रूप में दिखाया गया। ==लोकप्रिय संस्कृति में== *अमीश त्रिपाठी द्वारा लिखित पुस्तक भारत के रक्षक महाराजा सुहेलदेव ==इन्हें भी देखें== * [[सुहेलदेव भारतीय समाज पार्टी]] * [[सुहेलदेव सुपरफास्ट एक्सप्रेस]] ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:भारतीय सम्राट]] [[श्रेणी:अनुश्रुतियाँ]] p1ed3urtuxqfdmajo2b7eq2ijgucz1a विकिपीडिया:प्रयोगस्थल 4 935970 6586928 6583849 2026-07-17T19:28:50Z Savi pathak 936744 /* */ सुशीला पाठक कौन है 6586928 wikitext text/x-wiki {{Please leave this line alone (sandbox heading)}}<!-- * Welcome to the sandbox! * * Please leave this part alone * * The page is cleared regularly * * Feel free to try your editing skills below * * अपने परीक्षण संपादन इस लाइन के नीचे करें * ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■--> सुशीला पाठक fh4lpbhycofzaahf8dg96v395687oov 6586969 6586928 2026-07-18T03:00:36Z Sanjeev bot 127039 बॉट: प्रयोगस्थल खाली किया। 6586969 wikitext text/x-wiki {{Please leave this line alone (sandbox heading)}}<!-- * Welcome to the sandbox! * * Please leave this part alone * * The page is cleared regularly * * Feel free to try your editing skills below * * अपने परीक्षण संपादन इस लाइन के नीचे करें * ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■--> nqyrael75jv4pl2ws5ryi3yf27rl3hh सदस्य वार्ता:Pushkar Singh 3 983212 6586895 6580545 2026-07-17T17:27:39Z Pushkar Singh 415569 /* मदन पाल पृष्ठ का हटाने हेतु चर्चा के लिये नामांकन */ उत्तर 6586895 wikitext text/x-wiki {{archive box|[[/पुरालेख १|पुरालेख १]]}} == [[:मदन पाल|मदन पाल]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:मदन पाल|मदन पाल]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीयता संदिग्ध।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:08, 8 जुलाई 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी, कृपया चौपाल पर उत्तर देखें। [[सदस्य:Pushkar Singh|पुष्कर सिंह]] [[सदस्य:Pushkar Singh]] 10:03, 9 जुलाई 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी अंतर्जाल पर बहुत अधिक जानकारी उपलब्ध नहीं है इसलिए अधिक सन्दर्भ नहीं दिए जा सकते हैं फ़िलहाल। उल्लेखनीय तो नहीं लेकिन अनुल्लेखनीय भी नहीं कहा जा सकता है। मैंने <nowiki>{{आधार}}</nowiki> सांचा लगा रखा है शायद भविष्य में कोई और जानकारी सम्पादित करे, हर पृष्ठ को शायद हटाना उचित नहीं जब तक की गुंजाइश बनी रहे [[सदस्य:Pushkar Singh|Pushkar Singh]] ([[सदस्य वार्ता:Pushkar Singh|वार्ता]]) 17:27, 17 जुलाई 2026 (UTC) == [[:विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। व2: परीक्षण - गलत वार्ता पृष्ठ पर संदेश यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 10:42, 9 जुलाई 2026 (UTC) 4jpk26jl6g6eflzvzdvtsegbjtdy24v 6586902 6586895 2026-07-17T17:36:28Z SM7 89247 उत्तर 6586902 wikitext text/x-wiki {{archive box|[[/पुरालेख १|पुरालेख १]]}} == [[:मदन पाल|मदन पाल]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:मदन पाल|मदन पाल]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीयता संदिग्ध।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:08, 8 जुलाई 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी, कृपया चौपाल पर उत्तर देखें। [[सदस्य:Pushkar Singh|पुष्कर सिंह]] [[सदस्य:Pushkar Singh]] 10:03, 9 जुलाई 2026 (UTC) :@[[सदस्य:SM7|SM7]] जी अंतर्जाल पर बहुत अधिक जानकारी उपलब्ध नहीं है इसलिए अधिक सन्दर्भ नहीं दिए जा सकते हैं फ़िलहाल। उल्लेखनीय तो नहीं लेकिन अनुल्लेखनीय भी नहीं कहा जा सकता है। मैंने <nowiki>{{आधार}}</nowiki> सांचा लगा रखा है शायद भविष्य में कोई और जानकारी सम्पादित करे, हर पृष्ठ को शायद हटाना उचित नहीं जब तक की गुंजाइश बनी रहे [[सदस्य:Pushkar Singh|Pushkar Singh]] ([[सदस्य वार्ता:Pushkar Singh|वार्ता]]) 17:27, 17 जुलाई 2026 (UTC) ::@[[सदस्य:Pushkar Singh|Pushkar Singh]] जी, बाहरी विश्वसनीय स्रोतों के रूप में व्यक्ति पर पर्याप्त चर्चा उपलब्ध नहीं होने के कारण ही हहेच नामांकन किया गया है। यह कोई मेरा निजी मस'ला नहीं है। अतः उत्तर मुझे देने की जगह [[विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|चर्चा पृष्ठ]] पर लिखें। फिर जैसे भी अन्य सदस्यों के विचार हों। आधार साँचा लेख को बचाने की ढाल नहीं है। भविष्य में लेख दुबारा भी बनाया जा सकता है। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:36, 17 जुलाई 2026 (UTC) == [[:विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल|विकिपीडिया वार्ता:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। व2: परीक्षण - गलत वार्ता पृष्ठ पर संदेश यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 10:42, 9 जुलाई 2026 (UTC) lxz13pzfcakoi39jyd62ltkwtc8lbno मॉड्यूल:Lang/documentor tool 828 1051499 6586763 2017-11-15T13:32:35Z en>Trappist the monk 0 create; 6586763 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ D E F A U L T S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return 'error message'; end -- local page = mw.title.makeTitle ('Template', 'Lang-de'); -- get a page object for this page in 'Template:' namespace local content = page:getContent(); -- get unparsed content if not page then return 'error message'; end local out = {}; local params; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; 02blpe84uxn77ngq2g0x7v0bj186vpr 6586764 6586763 2017-11-15T13:39:31Z en>Trappist the monk 0 6586764 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; 4jj9gqheeez5z1jrby8ceq6w9raxx3m 6586765 6586764 2017-11-15T13:40:39Z en>Trappist the monk 0 Trappist the monk moved page [[Module:Sandbox/trappist the monk/lang-xx default]] to [[Module:Lang/documentor tool]] without leaving a redirect: get it out of the sandbox 6586764 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; 4jj9gqheeez5z1jrby8ceq6w9raxx3m 6586766 6586765 2017-12-23T13:29:15Z en>Trappist the monk 0 +sandbox; 6586766 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; 74i9gl9tmv3d1ypm6vtcl0sbzaknxzn 6586767 6586766 2017-12-24T10:23:01Z en>Trappist the monk 0 6586767 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] style, params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|([^|]+)(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = style:match ('lang_xx_(.*)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|style: ', style, '\n|-|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; m6aj8ubjsyshc0fqv1vsy7dh07plmqx 6586768 6586767 2017-12-24T10:35:43Z en>Trappist the monk 0 6586768 Scribunto text/plain require('Module:No globals'); local p = {}; --[=[------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]=] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end return p; 8o6sxtg1jm44754uxi09qpuczxwq1rb 6586769 6586768 2017-12-24T11:23:56Z en>Trappist the monk 0 6586769 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; ov5zc1e39j4srr98xp7a7o3uolppjve 6586770 6586769 2018-01-06T11:53:32Z en>Trappist the monk 0 +label support; 6586770 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; 3beveozwregpkqpjohorhu1fh037hkv 6586771 6586770 2018-08-02T18:26:10Z en>Oriciu 0 6586771 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Plantía', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Plantía:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Plantía', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Plantía:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; lf5q6bqzdmqhbc32dqu19sn87pykzcu 6586772 6586771 2018-08-02T18:43:54Z en>Trappist the monk 0 Reverted edits by [[Special:Contribs/Oriciu|Oriciu]] ([[User talk:Oriciu|talk]]) to last version by Trappist the monk 6586772 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; 3beveozwregpkqpjohorhu1fh037hkv 6586773 6586772 2019-01-24T21:24:24Z en>MusikAnimal 0 Protected "[[Module:Lang/documentor tool]]": [[Wikipedia:High-risk templates|High-risk module]] ([Edit=Require autoconfirmed or confirmed access] (indefinite)) 6586772 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; 3beveozwregpkqpjohorhu1fh037hkv 6586774 4231123 2019-08-11T02:20:30Z en>Vozhuo 0 missing 6586774 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end return p; 7ao1mqae8giy4su530j45se41yffdi0 6586775 6586774 2019-11-24T19:05:33Z en>Trappist the monk 0 6586775 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args[1]); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- necessary? or do it all at return? table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')]]'); end end return table.concat (out); end return p; 8xrvluh0m7tc77avfl5nnn5kcgsbi14 6586776 6586775 2019-11-24T19:11:02Z en>Trappist the monk 0 6586776 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args[1]); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- necessary? or do it all at return? table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text --[=[ local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')]]'); end end]=] return table.concat (out); end return p; q1m4nbvi2wsh99epu6bpkn2jir4ifxk 6586777 6586776 2019-11-24T19:13:13Z en>Trappist the monk 0 6586777 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- necessary? or do it all at return? table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text --[=[ local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')]]'); end end]=] return table.concat (out); end return p; 4ndswkznek4e9nmhe41pok1dhvns1r5 6586778 6586777 2019-11-24T19:13:43Z en>Trappist the monk 0 6586778 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- necessary? or do it all at return? table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')]]'); end end return table.concat (out); end return p; 9hs1unitp99dfd2xdb0qfqzb28242di 6586779 6586778 2019-11-24T19:14:25Z en>Trappist the monk 0 6586779 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- necessary? or do it all at return? table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame.args[1] .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame .. ')]]'); end end return table.concat (out); end return p; gd3b63ngdghrefm56mux729vf0edzqv 6586780 6586779 2019-11-24T19:16:23Z en>Trappist the monk 0 6586780 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_name = require ('Module:Lang')._name_from_tag (frame.args); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. frame.args[1] .. '}}')); -- preprocess table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. frame.args[1] .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. frame.args[1] .. ')]]'); end end return table.concat (out); end return p; 87r51lpca96pdykc6y1i0zi9b4v3y1m 6586781 6586780 2019-11-24T19:22:32Z en>Trappist the monk 0 6586781 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_code = frame.args[1]; local lang_name = require ('Module:Lang')._name_from_tag ({lang_code}); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. lang_code .. '}}')); -- preprocess table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')]]'); end end table.insert ('[[Category:Articles_with_non-English-language_sources|' .. lang_code .. ']]') -- and categorize this category; language code sortkey return table.concat (out); -- string it all together and done end return p; 9tq9xmqwzya6x4hh3jeojdh94y05lk2 6586782 6586781 2019-11-24T19:23:05Z en>Trappist the monk 0 6586782 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_code = frame.args[1]; local lang_name = require ('Module:Lang')._name_from_tag ({lang_code}); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. lang_code .. '}}')); -- preprocess table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')]]'); end end table.insert (out, '[[Category:Articles_with_non-English-language_sources|' .. lang_code .. ']]') -- and categorize this category; language code sortkey return table.concat (out); -- string it all together and done end return p; t6cdv1cp0ziiz3urffc651qooe1ql78 6586783 6586782 2019-11-24T19:28:11Z en>Trappist the monk 0 6586783 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_code = frame.args[1]match ('%(([%a%-]+)%)'); -- frame.args[1] is category page name; extract language code from that local lang_name = require ('Module:Lang')._name_from_tag ({lang_code}); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. lang_code .. '}}')); -- preprocess table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')]]'); end end table.insert (out, '[[Category:Articles_with_non-English-language_sources|' .. lang_code .. ']]') -- and categorize this category; language code sortkey return table.concat (out); -- string it all together and done end return p; 2vi92iu98gep0gm86huayh0pttt9eno 6586784 6586783 2019-11-24T19:28:47Z en>Trappist the monk 0 6586784 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page ]] function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false Used in template documentation {{#if:}} parser functions. ]] function p.uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- this function implements most of {{Non-English-language source category}} {{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code ]] function p.non_en_src_cat (frame) local lang_code = frame.args[1]:match ('%(([%a%-]+)%)'); -- frame.args[1] is category page name; extract language code from that local lang_name = require ('Module:Lang')._name_from_tag ({lang_code}); -- get language name from language code in cat name via Module:lang local out = {}; -- bits of the output go here table.insert (out, 'This is a tracking category for articles that use '); -- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. lang_code .. '}}')); -- preprocess table.insert (out, ' to identify '); -- more static text if lang_name:find ('languages') then -- is a language collective? table.insert (out, '[[' .. lang_name .. ']]' .. '-collective'); -- say so else table.insert (out, '[[' .. lang_name .. ' language|' .. lang_name .. ']]-language'); end table.insert (out, ' sources.'); -- last bit of static text local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists; -- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')').exists; if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also=='); -- start see also section if cat_art then table.insert (out, '\n*[[:Category:Articles containing ' .. lang_name .. '-language text]]'); end if cat_with then table.insert (out, '\n*[[:Category:Articles with ' .. lang_name .. '-language external links]]'); -- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*[[:Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')]]'); end end table.insert (out, '[[Category:Articles_with_non-English-language_sources|' .. lang_code .. ']]') -- and categorize this category; language code sortkey return table.concat (out); -- string it all together and done end return p; s6sgoahvgk115iwo8cej2kafie7kfrj 6586785 6586784 2020-09-19T16:56:16Z en>Gonnym 0 sync from sandbox 6586785 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages" } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "%s is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]]." } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- {{#invoke:Lang/documentor tool|non_en_src_cat|}} This function implements {{Non-English-language source category}}. ]] local language_source_category_text = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language' } local function non_en_src_cat(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(language_source_category_text["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(language_source_category_text["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(language_source_category_text["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles with non-English-language sources]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< A R T I C L E S _ C O N T A I N I N G . . . >---------------------------------- {{#invoke:Lang/documentor tool|articles_containing_category_text|}} This function implements {{Category articles containing non-English-language text}}. ]] local articles_containing_category_text = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here" } local function articles_containing_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if string.find(page_title_modified, "languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find ('Articles with text from ') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(articles_containing_category_text["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(articles_containing_category_text["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(articles_containing_category_text["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(articles_containing_category_text["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(articles_containing_category_text["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(articles_containing_category_text["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles containing non-English-language text]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { articles_containing_language_text_category = articles_containing_language_text_category, lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_en_src_cat = non_en_src_cat, } 942qcmv23ao2uusyovjy2aob3tlsa06 6586786 6586785 2020-09-19T17:35:01Z en>Gonnym 0 bugfix 6586786 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages" } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "%s is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]]." } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- {{#invoke:Lang/documentor tool|non_en_src_cat|}} This function implements {{Non-English-language source category}}. ]] local language_source_category_text = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language' } local function non_en_src_cat(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(language_source_category_text["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(language_source_category_text["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(language_source_category_text["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles with non-English-language sources]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< A R T I C L E S _ C O N T A I N I N G . . . >---------------------------------- {{#invoke:Lang/documentor tool|articles_containing_category_text|}} This function implements {{Category articles containing non-English-language text}}. ]] local articles_containing_category_text = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here" } local function articles_containing_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if string.find(page_title_modified, "languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find ('Articles with text from ') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(articles_containing_category_text["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(articles_containing_category_text["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(articles_containing_category_text["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(articles_containing_category_text["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(articles_containing_category_text["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(articles_containing_category_text["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles containing non-English-language text]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { articles_containing_language_text_category = articles_containing_language_text_category, lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_en_src_cat = non_en_src_cat, } prc425egpa6hk8pqsle1pn5p4grtt0j 6586787 6586786 2020-09-20T08:15:36Z en>Gonnym 0 6586787 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages" } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "%s is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]]." } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- {{#invoke:Lang/documentor tool|non_en_src_cat|}} This function implements {{Non-English-language source category}}. ]] local language_source_category_text = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language' } local function non_en_src_cat(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(language_source_category_text["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(language_source_category_text["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(language_source_category_text["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles with non-English-language sources]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< A R T I C L E S _ C O N T A I N I N G . . . >---------------------------------- {{#invoke:Lang/documentor tool|articles_containing_category_text|}} This function implements {{Category articles containing non-English-language text}}. ]] local articles_containing_category_text = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here" } local function articles_containing_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if string.find(page_title_modified, "languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find ('Articles with text from ') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(articles_containing_category_text["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(articles_containing_category_text["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(articles_containing_category_text["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(articles_containing_category_text["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(articles_containing_category_text["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(articles_containing_category_text["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles containing non-English-language text]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { articles_containing_language_text_category = articles_containing_language_text_category, lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_en_src_cat = non_en_src_cat, } pks9rhdeiur4mdhiqzhur7esizvmah7 6586788 6586787 2020-09-21T07:19:13Z en>Gonnym 0 linked name in error 6586788 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >----------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >--------------------------------------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages" } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]]." } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[--------------------------< N O N _ E N _ S R C _ C A T >-------------------------------------------------- {{#invoke:Lang/documentor tool|non_en_src_cat|}} This function implements {{Non-English-language source category}}. ]] local language_source_category_text = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language' } local function non_en_src_cat(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(language_source_category_text["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(language_source_category_text["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(language_source_category_text["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles with non-English-language sources]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< A R T I C L E S _ C O N T A I N I N G . . . >---------------------------------- {{#invoke:Lang/documentor tool|articles_containing_category_text|}} This function implements {{Category articles containing non-English-language text}}. ]] local articles_containing_category_text = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here" } local function articles_containing_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if string.find(page_title_modified, "languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find ('Articles with text from ') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(articles_containing_category_text["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(articles_containing_category_text["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(articles_containing_category_text["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(articles_containing_category_text["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(articles_containing_category_text["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(articles_containing_category_text["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, "[[Category:Articles containing non-English-language text]]") return table.concat(layout, "\n\n") .. bottom end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { articles_containing_language_text_category = articles_containing_language_text_category, lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_en_src_cat = non_en_src_cat, } qt9qz3z8fejso7umucog9c1mi4c8iar 6586789 6586788 2020-09-22T10:33:47Z en>Gonnym 0 Various updates and improvements; Added /testcases code; Added initial support for non_english_language_cs1_sources_category 6586789 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language', ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_unordered_language_list_variations(language_list) ]] local function get_unordered_language_list_general(language_list, list_modification, range) local unordered_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then table.insert(unordered_table, language_code) end elseif list_modification == "length" then if string.len(language_code) == 2 then table.insert(unordered_table, language_code) end else table.insert(unordered_table, language_code) end end return unordered_table end -- If placed inside get_unordered_language_list_general() the testcasts error: "Lua error: not enough memory". local function get_unordered_language_list_variations(language_list) local unordered_table = {} for language_code, values in pairs(language_list) do for _, language_prefix in pairs(values.prefixes) do table.insert(unordered_table, language_prefix .. "-" .. language_code) end end return unordered_table end local function get_unordered_list(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations(language_list) else return get_unordered_language_list_general(language_list, list_modification, range) end end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end elseif list_modification == "length" then if string.len(language_code) == 2 then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end else get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end local function get_unordered_language_list_variations_with_reverse_list(language_list) local unordered_table = {} local reverse_table = {} for language_code, values in pairs(language_list) do for _, language_name in pairs(values.descriptions) do table.insert(unordered_table, language_name) if #values.prefixes > 0 then for _, language_prefix in pairs(values.prefixes) do reverse_table[language_name] = language_prefix .. "-" .. language_code end else reverse_table[language_name] = language_code end end end return unordered_table, reverse_table end local function get_unordered_and_reverse_lists(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations_with_reverse_list(language_list) else return get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) end end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. ]] local function testcases_category_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '{{#invoke:Lang|category_from_tag|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) elseif args.list_modification == "variants" then local language_prefix, language_code = key:match("([^,]+)-([^,]+)") table.insert(ordered_table, {key, args.language_list[language_code].descriptions[1]}) else table.insert(ordered_table, {key, args.language_list[key][1]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, articles_containing_language_text_category = non_english_language_text_category, non_en_src_cat = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, } eg8oa2t00qz52n7tc2t4eevxwmo2vrd 6586790 6586789 2020-09-22T10:35:29Z en>Gonnym 0 changing entry function name 6586790 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language', ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_unordered_language_list_variations(language_list) ]] local function get_unordered_language_list_general(language_list, list_modification, range) local unordered_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then table.insert(unordered_table, language_code) end elseif list_modification == "length" then if string.len(language_code) == 2 then table.insert(unordered_table, language_code) end else table.insert(unordered_table, language_code) end end return unordered_table end -- If placed inside get_unordered_language_list_general() the testcasts error: "Lua error: not enough memory". local function get_unordered_language_list_variations(language_list) local unordered_table = {} for language_code, values in pairs(language_list) do for _, language_prefix in pairs(values.prefixes) do table.insert(unordered_table, language_prefix .. "-" .. language_code) end end return unordered_table end local function get_unordered_list(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations(language_list) else return get_unordered_language_list_general(language_list, list_modification, range) end end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end elseif list_modification == "length" then if string.len(language_code) == 2 then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end else get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end local function get_unordered_language_list_variations_with_reverse_list(language_list) local unordered_table = {} local reverse_table = {} for language_code, values in pairs(language_list) do for _, language_name in pairs(values.descriptions) do table.insert(unordered_table, language_name) if #values.prefixes > 0 then for _, language_prefix in pairs(values.prefixes) do reverse_table[language_name] = language_prefix .. "-" .. language_code end else reverse_table[language_name] = language_code end end end return unordered_table, reverse_table end local function get_unordered_and_reverse_lists(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations_with_reverse_list(language_list) else return get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) end end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. ]] local function testcases_category_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '{{#invoke:Lang|category_from_tag|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) elseif args.list_modification == "variants" then local language_prefix, language_code = key:match("([^,]+)-([^,]+)") table.insert(ordered_table, {key, args.language_list[language_code].descriptions[1]}) else table.insert(ordered_table, {key, args.language_list[key][1]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, } 6avfh97x6uawllteslknfju35tndayw 6586791 6586790 2020-09-24T10:44:38Z en>Gonnym 0 6586791 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with [[%s language|%s-language]]%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_name, language_name, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["LANGUAGE_COLLECTIVE"] = "[[%s]]-collective", ["LANGUAGE_NON_COLLECTIVE"] = '[[%s language|%s]]-language', ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link -- Is a language collective? if language_name:find('languages') then language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_COLLECTIVE"], language_name) else language_link = string.format(non_english_language_sources_text_strings["LANGUAGE_NON_COLLECTIVE"], language_name, language_name) end local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_unordered_language_list_variations(language_list) ]] local function get_unordered_language_list_general(language_list, list_modification, range) local unordered_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then table.insert(unordered_table, language_code) end elseif list_modification == "length" then if string.len(language_code) == 2 then table.insert(unordered_table, language_code) end else table.insert(unordered_table, language_code) end end return unordered_table end -- If placed inside get_unordered_language_list_general() the testcasts error: "Lua error: not enough memory". local function get_unordered_language_list_variations(language_list) local unordered_table = {} for language_code, values in pairs(language_list) do for _, language_prefix in pairs(values.prefixes) do table.insert(unordered_table, language_prefix .. "-" .. language_code) end end return unordered_table end local function get_unordered_list(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations(language_list) else return get_unordered_language_list_general(language_list, list_modification, range) end end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} for language_code in pairs(language_list) do if list_modification == "range" then if language_code:find(range) then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end elseif list_modification == "length" then if string.len(language_code) == 2 then get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end else get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end local function get_unordered_language_list_variations_with_reverse_list(language_list) local unordered_table = {} local reverse_table = {} for language_code, values in pairs(language_list) do for _, language_name in pairs(values.descriptions) do table.insert(unordered_table, language_name) if #values.prefixes > 0 then for _, language_prefix in pairs(values.prefixes) do reverse_table[language_name] = language_prefix .. "-" .. language_code end else reverse_table[language_name] = language_code end end end return unordered_table, reverse_table end local function get_unordered_and_reverse_lists(language_list, list_modification, range) if list_modification == "variants" then return get_unordered_language_list_variations_with_reverse_list(language_list) else return get_unordered_language_list_general_with_reverse_list(language_list, list_modification, range) end end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. ]] local function testcases_category_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '{{#invoke:Lang|category_from_tag|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) elseif args.list_modification == "variants" then local language_prefix, language_code = key:match("([^,]+)-([^,]+)") table.insert(ordered_table, {key, args.language_list[language_code].descriptions[1]}) else table.insert(ordered_table, {key, args.language_list[key][1]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, } kg6978j2avz72l57zgvixe0pj5w83nu 6586792 6586791 2020-09-26T00:04:57Z en>Gonnym 0 update language link in template documentation; removed unneeded tests 6586792 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix local collective_language if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" collective_language = true elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link if collective_language then language_link = lang_module.name_from_tag({language_code, link = "yes"}) else language_link = lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local lang_module = require('Module:Lang') local language_link -- Is a language collective? if language_name:find('languages') then language_link = lang_module.name_from_tag({language_code, link = "yes"}) else language_link = lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data/sandbox").override -- TODO: switch to live if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if 2 == language_code:len() then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, } jp36y2txkro27vl5l6782bayblrogk1 6586793 6586792 2020-09-26T16:20:36Z en>Gonnym 0 added testcases_iso_name_to_code 6586793 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code, is_collective_language) local lang_module = require('Module:Lang') -- Is a language collective? if is_collective_language or language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} table.insert(top_section, frame:expandTemplate{title = 'Hidden category'}) if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix local is_collective_language if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" is_collective_language = true elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code, is_collective_language) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code, nil) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data/sandbox").override -- TODO: switch to live if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if 2 == language_code:len() then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } h2w8kt4272mwssxz0m4x9tqx8na7pvq 6586794 6586793 2020-09-29T15:24:23Z en>Gonnym 0 hidden category should always be on, even when the category is incorrect 6586794 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code, is_collective_language) local lang_module = require('Module:Lang') -- Is a language collective? if is_collective_language or language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix local is_collective_language if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" is_collective_language = true elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code, is_collective_language) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code, nil) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data/sandbox").override -- TODO: switch to live if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if 2 == language_code:len() then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } dwzyo651jt657mdeagvjzm4iqmfde50 6586795 6586794 2020-09-30T12:43:09Z en>Trappist the monk 0 undab override in testcases_name_from_tag(); 6586795 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["SOURCES"] = "Articles with %s-language sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s languages collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s languages", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code, is_collective_language) local lang_module = require('Module:Lang') -- Is a language collective? if is_collective_language or language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. -- TODO: Currently getting the redirect cateogry Category:Articles with text from Berber languages. Need to prevent soft redirects. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, value in pairs(language_categories) do local category = mw.title.new(string.format(value, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" local suffix local is_collective_language if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) suffix = " languages" is_collective_language = true elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) suffix = " languages" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local full_language_tag_name = language_name if suffix then full_language_tag_name = language_name .. suffix end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({full_language_tag_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code, is_collective_language) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code, nil) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data/sandbox").override -- TODO: switch to live if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if 2 == language_code:len() then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]:gsub(' %b()$', '')}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } lehgzxauj4jylrw67qbbv8wfp2j0wch 6586796 6586795 2020-10-01T11:53:36Z en>Gonnym 0 bugfix in title search for collective languages 6586796 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data").override if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if 2 == language_code:len() then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]:gsub(' %b()$', '')}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } tq19wz0x8vkrty32ui5e4w1msxjande 6586797 6586796 2020-10-02T11:35:07Z en>Gonnym 0 6586797 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data").override if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:len() == 2 then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end elseif args.list_modification == "range" then if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]:gsub(' %b()$', '')}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } glva6r4cfsaebr2qmo9jh9aiamz9re0 6586798 6586797 2020-10-02T11:36:49Z en>Gonnym 0 6586798 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< S H A R E D _ T E S T C A S E S _ C O D E >------------------------- Functions: - get_unordered_list(language_list, list_modification, range) - get_unordered_language_list_general(language_list, list_modification, range) - get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) ]] local function get_unordered_list(language_list, list_modification, range) local unordered_table = {} if list_modification == "range" then for language_code in pairs(language_list) do if language_code:find(range) then table.insert(unordered_table, language_code) end end elseif list_modification == "length" then for language_code in pairs(language_list) do if language_code:len() == 2 then table.insert(unordered_table, language_code) end end else for language_code in pairs(language_list) do table.insert(unordered_table, language_code) end end return unordered_table end local function get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) for _, language_name in pairs(language_list[language_code]) do table.insert(unordered_table, language_name) reverse_table[language_name] = language_code end end local function get_unordered_and_reverse_lists(language_list, list_modification, range) local unordered_table = {} local reverse_table = {} local override_table = require("Module:Lang/data").override if list_modification == "range" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:find(range) then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end elseif list_modification == "length" then -- for language_code in pairs(language_list) do for language_code, names in pairs(language_list) do if language_code:len() == 2 then if override_table[language_code] then local name = override_table[language_code][1] table.insert(unordered_table, name) -- only the first name when there are multiples reverse_table[name] = language_code else table.insert(unordered_table, names[1]) -- only the first name when there are multiples reverse_table[names[1]] = language_code end -- get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end else for language_code in pairs(language_list) do get_data_from_language_code(language_list, language_code, unordered_table, reverse_table) end end return unordered_table, reverse_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function comp_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end local function testcases_category_from_tag(self, args) local cat_from_tag = require("Module:Lang")._category_from_tag -- use Module:Lang to create the 'expected results' local test_patterns = {} -- collect test patterns here local filter_function if args.code_mask then filter_function = function(language_code, code_mask) return language_code:find(code_mask) end -- if code within limits (three-character codes) else filter_function = function(language_code, code_mask) return language_code:len() == 2 end -- no limits for two-character codes end for language_code in pairs(args.language_list) do -- list of names not needed here local pattern = {} -- here we assemble the test pattern for <code> - if filter_function(language_code, args.code_mask) then table.insert(pattern, language_code) -- add it to the pattern table.insert(pattern, cat_from_tag({language_code})) -- call Module:Lang and add the 'expected results' for code to pattern table.insert(test_patterns, pattern) -- accumulate in list of patterns end end table.sort(test_patterns, comp_by_keys) -- make the list pretty self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', test_patterns, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_list = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(args.language_list) do if args.code_mask then if language_code:find(args.code_mask) then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end elseif args.list_modification == "length" then if language_code:len() == 2 then undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end else undabbed_language_list[language_code] = language_names[1]:gsub(' %b()$', '') end end local unordered_table = get_unordered_list(undabbed_language_list, args.list_modification, args.range) local ordered_table = {} local override_table = require("Module:Lang/data").override table.sort(unordered_table) for _, key in ipairs(unordered_table) do local override_lang_table = override_table[key] if override_lang_table then table.insert(ordered_table, {key, override_lang_table[1]:gsub(' %b()$', '')}) else table.insert(ordered_table, {key, undabbed_language_list[key]}) end end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local unordered_table = get_unordered_list(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] -- TODO: "Lua error: not enough memory." local function testcases_iso_name_to_code(self, args) local unordered_table, reverse_table = get_unordered_and_reverse_lists(args.language_list, args.list_modification, args.range) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key}) end self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '{{#invoke:ISO 639 name|iso_639_name_to_code|', '}}', ordered_table, {nowiki=false, templatestyles=true} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 9sdealazxjm13y7swwnwfyaathxwed3 6586799 6586798 2020-10-05T15:28:01Z en>Gonnym 0 update /testcases code. Some still running out of memory 6586799 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here mw.log(args.override_table[args.language_code][1]) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 02xwrm857ag27gcjx9qx9dhfk2jviwo 6586800 6586799 2020-10-05T15:50:36Z en>Gonnym 0 6586800 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here mw.log(args.override_table[args.language_code][1]) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 31n6ox3tzujwz1i71x3wn7xk5v7cmo0 6586801 6586800 2020-10-05T17:27:30Z en>Gonnym 0 6586801 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column is the <language_code>. - "Actual" column is the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 8qqet3kn5ni6z0sks4jpsmcueh1kd0p 6586802 6586801 2020-10-05T17:36:04Z en>Gonnym 0 fixed testcases_name_from_tag errors 6586802 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column is the <language_code>. - "Actual" column is the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ewin4n6dwk1mq3abimnzvlnbkvnziyc 6586803 6586802 2020-10-05T18:14:03Z en>Gonnym 0 6586803 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language name>}}. - "Actual" column is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column is the <language_code>. - "Actual" column is the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 30vce3kze3alorymnpjt0ch9fhmhp9t 6586804 6586803 2020-10-05T18:19:22Z en>Gonnym 0 6586804 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language name>"} ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language name>}}. - "Actual" column is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column is the <language_code>. - "Actual" column is the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } qrjjuxtwehsin6j6xpys8ulirzo2sqn 6586805 6586804 2020-10-05T18:26:47Z en>Gonnym 0 doc update 6586805 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } fikphmy0zof5h2kp43n4jwji389iss0 6586806 6586805 2020-10-05T18:52:59Z en>Gonnym 0 fixed testcases_iso_name_to_code 6586806 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|part=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 7c0hzhyhfm5urwajtgp1n4984jc6ga3 6586807 6586806 2020-10-05T19:52:30Z en>Gonnym 0 changed part= to 2= 6586807 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_NEW_TEXT"] = "Articles with text from %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find("languages collective") then -- this form may or may not be replaced with the form in the elseif -- Wikipedia:Categories_for_discussion/Log/2020_August_18#Category:Articles_with_text_from_the_Afro-Asiatic_languages_collective -- Naming style: Category:Articles with text from the Afro-Asiatic languages collective part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('Articles with text from') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_NEW_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } i7hld0pomoedqvb4lwgejuux2takbo0 6586808 6586807 2020-11-03T07:55:14Z en>Gonnym 0 update per CfD 6586808 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]+)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ita6emisgdj71t97e9pv56k4qps4kfd 6586809 6586808 2020-11-03T08:02:13Z en>Gonnym 0 6586809 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]?)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) part2 = "" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 9ri96h1g9s0jiv9a5jcmy1epb24t56p 6586810 6586809 2020-11-03T08:06:16Z en>Gonnym 0 6586810 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) part2 = "" elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 73tjemvogowxwb9d62adgaieln51las 6586811 6586810 2020-11-03T08:07:05Z en>Gonnym 0 6586811 Scribunto text/plain require('Module:No globals'); local p = {}; --[[-------------------------< L A N G - X X _ S E T T I N G S >------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end local out = {}; local params; local style; if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return ''; -- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings') -- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%[[^%]]+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v})); -- make rudimentary wikitable entries end style = content:match ('lang_xx_([^|]+)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}); -- add inter-row markup and close the wikitable and done else return ''; -- does not use [[Module:Lang]] so abandon quietly end end --[[-------------------------< U S E S _ M O D U L E >------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]); -- get a page object for this page in 'Template:' namespace if not page then return ''; -- TODO: error message? end local content = page:getContent(); -- get unparsed content if not page then return ''; -- TODO: error message? end return content:find ('{{%s*#invoke:[Ll]ang%s*|') or ''; -- return index or empty string end --[[-------------------------< S H A R E D _ C O D E >------------------------- - Tables: -- language_categories -- error_messages - Functions: -- get_error_message(message) -- get_see_also_section(page_title, language_name, language_code) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_messages = { ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name.", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for %s.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{%s}} template. The correct category is located at: [[:%s]].", } local function get_error_message(message) return string.format('<span style="font-size:100%%; font-style:normal;" class="error">Error: %s </span>[[Category:Lang and lang-xx template errors]]', message) end local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end -- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. -- If {{CS1 language sources}} is converted, it should also use it. local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, "* [[:" .. category.prefixedText .. "]]") end end table.sort(see_also_section) table.insert(see_also_section, 1, '\n\n==See also==') if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end -- Generates a consistent top maintenance template section. local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, '<div style="font-size:x-small;">' .. purge_module._main({"Purge page cache"}) .. '</div>') return table.concat(top_section, "\n\n") end -- Generates a consistent non-text section. local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", } local function non_english_language_text_category(frame) local args = require('Module:Arguments').getArgs(frame) local page_title = mw.title.getCurrentTitle().text -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page_title local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" -- Check if error message if language_code:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name))) else local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) else local current_category_title = mw.title.getCurrentTitle().prefixedText if current_category_title ~= correct_language_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "Lang", correct_language_category_title))) else table.insert(layout, get_top_section(frame)) local script = args.script local script_text if script then script_text = string.format(non_english_language_text_text_strings["IN_SCRIPT"], script) else script_text = "" end local example_default_text = string.format(non_english_language_text_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {"Lang"}} table.insert(layout, string.format(non_english_language_text_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {"Lang", language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) see_also_section = get_see_also_section(page_title, language_name, language_code) end end end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_text_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", } local function non_english_language_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local current_category_title = page_title_object.prefixedText local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then table.insert(layout, get_error_message(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code))) elseif correct_language_category_title ~= current_category_title then table.insert(layout, get_error_message(string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, "In lang", correct_language_category_title))) else local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_text_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {"In lang", language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) see_also_section = get_see_also_section(page_title, language_name, language_code) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_sources_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y >------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[-------------------------< T E S T _ C A S E S _ S H A R E D _ C O D E >-------------------------]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[-------------------------< T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G >------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ N A M E _ F R O M _ T A G >------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ T A G _ F R O M _ N A M E >------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E >------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[-------------------------< T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E >------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[-------------------------< E X P O R T E D F U N C T I O N S >------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } bwwy9zifkm95rq6sjm3hjkf0iffzsgs 6586812 6586811 2020-11-03T11:11:35Z en>Gonnym 0 sync from sandbox 6586812 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------- < L A N G - X X _ S E T T I N G S > -------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('error') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < E X P O R T E D _ F U N C T I O N S > -------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 4umkanmp8itqmvfcpee6x4ms3hin22f 6586813 6586812 2021-06-04T17:33:09Z en>Trappist the monk 0 6586813 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang[1], '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('error') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < E X P O R T E D _ F U N C T I O N S > -------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } gma9jrlgjvotdp1gufa5hn4l34f99pr 6586814 6586813 2021-10-22T01:56:35Z en>MusikBot II 0 Changed protection settings for "[[Module:Lang/documentor tool]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 3018 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite)) 6586813 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang[1], '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('error') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('error') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < E X P O R T E D _ F U N C T I O N S > -------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } gma9jrlgjvotdp1gufa5hn4l34f99pr 6586815 6586814 2021-12-26T16:37:23Z en>Trappist the monk 0 6586815 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang[1], '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < E X P O R T E D _ F U N C T I O N S > -------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 7cdd5r78g4aklfd5vko9r0h83cupw0u 6586816 6586815 2022-01-10T19:34:14Z en>Trappist the monk 0 6586816 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < E X P O R T E D _ F U N C T I O N S > -------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } d8eaxsd8rf2euqmvlio5lx1zsfd1q9s 6586817 6586816 2022-09-17T22:23:33Z en>Trappist the monk 0 6586817 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items inside <nowiki>...</nowiki> tags {{#invoke:Lang/documentor tool|see_also|<nowiki>*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}</nowiki>}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end local args_list = mw.text.unstripNoWiki(frame.args[1]); -- not empty; fetch contents of stripmarker args_list = args_list:gsub ('%s*,%s', '\n'); -- replace comma-separators with newline return frame:preprocess (args_list); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ha5iyixq25vl1f8kcjfis09xkaa743r 6586818 6586817 2022-09-17T22:31:39Z en>Trappist the monk 0 6586818 Scribunto text/plain require('Module:No globals') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 8rg9ekb9buzwmadypp92ym9rq912s4m 6586819 6586818 2022-10-22T09:06:43Z en>WOSlinker 0 use require('strict') instead of require('Module:No globals') 6586819 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 9i8swjrgtgswjwqv3hzjhuuyd44g4di 6586820 6586819 2023-06-16T18:09:06Z en>Frietjes 0 error in [[Template:Lang-ms-Arab]] and a few others 6586820 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') or '' return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } qo6h9l9wh19316se4o57d89deo35mop 6586821 6586820 2023-06-16T18:46:01Z en>Trappist the monk 0 silently ignoring a legitimate error is not good; emit an appropriate error message instead; 6586821 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or not ('italic' == style or 'inherit' == style) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } g5v6vymlbd6bvpat9xab1anrudyt9o4 6586822 6586821 2023-06-16T18:57:02Z en>Trappist the monk 0 6586822 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } mmhlbt7bgmvef1hm55a5sj8wqzn65li 6586823 6586822 2023-09-20T16:20:02Z en>Nardog 0 make "Supported private-use IETF language tags" sortable 6586823 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:Language/data/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 77io9jow4ggounlzlqxizug36l9fif2 6586824 6586823 2024-07-11T15:20:04Z en>Trappist the monk 0 /* top */clean up 6586824 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" if lang_x.exists then local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 1acgwupcv3o45ao2x5f35kpx6n6b9vd 6586825 6272210 2024-10-07T15:43:46Z en>Trappist the monk 0 switch support from {{lang-??|...}} to {{langx|??|...}}; 6586825 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>.%s', ["LINE3_EXTRA"] = " Also available is %s which displays as %s.", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} -- local lang_x = mw.title.makeTitle(10, "Lang-" .. language_code) local line3_extra = "" local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {'langx', language_code, example_text}} local langx_template = frame:expandTemplate{title = 'langx', args = {language_code, example_text}} line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], langx_template_example, langx_template) -- if lang_x.exists then -- local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}} -- local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}} -- line3_extra = string.format(non_english_language_text_strings["LINE3_EXTRA"], lang_x_template_example, lang_x_template) -- end table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, line3_extra)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 259nso1e0oqltrqgzwj0yz3ivbkrzc6 6586826 6586825 2024-10-07T19:04:00Z en>Gonnym 0 switch to langx 6586826 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>. Also available is %s which displays as %s.', ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ipki8xjdunnns7y1lwxzpcu798kboyl 6586827 6586826 2024-10-27T14:00:54Z en>Gonnym 0 6586827 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>. Also available is %s which displays as %s.', ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } 6cu3t2lpfta2z05he16w3u2fp7cfh9m 6586828 6586827 2024-10-27T14:11:02Z en>Gonnym 0 6586828 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:CatAutoTOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>. Also available is %s which displays as %s.', ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local correct_language_category_title = require('Module:In lang')._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ti40ioh5ejannqnt3jt7womvlqr21i9 6586829 6586828 2024-11-12T11:10:53Z en>Gonnym 0 added automatic handling for categorization of sub-languages into their parent language category for better categorization 6586829 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>. Also available is %s which displays as %s.', ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ni91j4gjvi1occ4ipfs8tarf19xi8w0 6586830 6586829 2024-11-17T12:54:42Z en>Gonnym 0 fix documentation to match what module does 6586830 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override; -- get the override table local private_t = {}; for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"'); table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}'; -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)'); if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>'; end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with <code>&lt;span lang="%s"&gt;</code>. Also available is %s which displays as %s.', ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub ('%-x%-.*', '') table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, language_code_without_private_use, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return; -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')); -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } colx6lerud0f9d8ekzf0ipx8ojn9jj9 6586831 6586830 2024-11-17T13:23:38Z en>Gonnym 0 use syntaxhighlight instead of code 6586831 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["LANG"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } oky4a7uuo07xv6czyg9aof57lxpaf0c 6586832 6586831 2025-01-28T17:13:48Z en>Trappist the monk 0 TEMPLATE not LANG; 6586832 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- language_categories -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local language_categories = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", -- old version ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text from the %s collective", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(language_categories) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = language_categories["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = language_categories["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = language_categories["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } g61bo7anc7kckcc0ye0nw2ow8qs4h7l 6586833 6586832 2025-04-11T07:12:32Z en>Gonnym 0 added two more category types 6586833 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["CS1_SCRIPT"] = "CS1 uses %s-language script (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Pages with %s IPA" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_text_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, non_english_language_sources_strings["TEMPLATE"], correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ifzdeq4h0sdyqxvozkpt3yq55ygd9cb 6586834 6586833 2025-05-12T16:10:52Z en>Gonnym 0 fix expandTemplate 6586834 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["CS1_SCRIPT"] = "CS1 uses %s-language script (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Pages with %s IPA" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the %s template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } nf7via5h4j5k0kbllqt83rw34skdp6p 6586835 6586834 2026-07-17T16:14:50Z SM7 89247 [[:en:Module:Lang/documentor_tool]] से 72 अवतरण आयात किए गए 6586834 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["CS1_SCRIPT"] = "CS1 uses %s-language script (%s)", ["LANGUAGE_TEXT"] = "Articles containing %s-language text", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Pages with %s IPA" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the %s template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } nf7via5h4j5k0kbllqt83rw34skdp6p 6586838 6586835 2026-07-17T16:24:58Z SM7 89247 लोकलाइजेशन 6586838 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('साँचा', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('साँचा', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'साँचा:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Articles with %s-language sources (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "CS1 %s-language sources (%s)", ["CS1_SCRIPT"] = "CS1 uses %s-language script (%s)", ["LANGUAGE_TEXT"] = "लेख जिनमें %s-भाषा का पाठ है", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Pages with %s IPA" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the %s template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "श्रेणी" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-भाषा"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'छुपी श्रेणी'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "श्रेणी" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Articles containing non-English-language text]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } nafm4ap7djbk4v5k7ln8cry1h2gu621 भारत के वर्तमान मुख्य न्यायाधीशों की सूची 0 1099421 6586756 6586723 2026-07-17T13:55:36Z Ankit231132 874432 /* उच्च न्यायालयों के मुख्य न्यायाधीशों की सूची */ 6586756 wikitext text/x-wiki यह भारत के सर्वोच्च न्यायालय और भारत के उच्च न्यायालयों के वर्तमान मुख्य न्यायाधीशों की एक सूची है, जो भारत गणराज्य के प्रत्येक राज्य की सर्वोच्च अदालत है। वर्तमान में देश में 25 उच्च न्यायालय हैं। ==सर्वोच्च न्यायालय== {| class="wikitable static-row-numbers static-row-header" style="text-align:center" |- ! scope="col" | मुख्य न्यायधीश का नाम ! [[सूर्यकांत (न्यायाधीश)|'''सूर्यकांत''']]<ref>{{Cite web |date=24 November 2025 |title=Justice Surya Kant sworn in as 53rd Chief Justice of India |url=https://www.thehindu.com/news/national/justice-surya-kant-sworn-in-as-53rd-chief-justice-of-india/article70316338.ece/ |website=thehindu.com |language=en}}</ref><br />{{small|([[भारत के मुख्य न्यायाधीश|सूची]])}} |- ! छायाचित्र |[[File:Justice_Surya_Kant.jpg|alt=|125x125px]] |- ! सर्वोच्च न्यायालय में पदोन्नति की तिथि |{{dts|2019|5|24|format=dmy}}<br /><small>({{ayd|2019|5|24}})</small> |- ! भारत के मुख्य न्यायाधीश के रूप में नियुक्ति की तिथि |{{dts|2025|11|24|format=dmy}}<br /><small>({{ayd|2025|11|24}})</small> |- ! सेवानिवृति की तिथि |{{dts|2027|2|9|format=dmy}}<br /><small>({{ayd|2027|2|9}})</small> |- ! कार्यकाल |{{ayd|2025|11|24|2027|2|9|duration=on}} |- ! मनोनीतकर्ता |[[भूषण रामकृष्ण गवई]] |- ! नियुक्तिकर्ता |[[द्रौपदी मुर्मू]] |- ! पदोन्नति की तिथि पर वरिष्ठता क्रमांक |11 |- !न्यायाधीश के रूप में प्रारंभिक नियुक्ति की तिथि |{{dts|2004|1|9|format=dmy}}<br /><small>({{ayd|2004|1|9}})</small> |- ! उच्च न्यायालय |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] |} == उच्च न्यायालयों के मुख्य न्यायाधीशों की सूची == {| class="wikitable sortable defaultcenter static-row-header" style="font-size: 90%" ! उच्च न्यायालय ! न्यायक्षेत्र ! चित्र ! मुख्य न्यायाधीश ! लिंग ! मुख्य न्यायाधीश के रूप में नियुक्ति की तिथि ! सेवानिवृत्ति की तिथि ! कार्यकाल ! मुख्य न्यायाधीश के रूप में मनोनीतकर्ता ! नियुक्तकर्ता ! मूल उच्च न्यायालय ! अखिल भारतीय वरिष्ठता क्रमांक ! न्यायाधीश के रूप में प्रारंभिक नियुक्ति की तिथि ! न्यायाधीश के रूप में मनोनीतकर्ता ! टिप्पणियाँ |- ![[इलाहाबाद उच्च न्यायालय]]<ref>{{Cite web|url=https://www.allahabadhighcourt.in/service/judgeDetail.jsp?id=381|title=Chief Justice and Judges of the High Court of Judicature at Allahabad and its Bench at Lucknow|website=www.allahabadhighcourt.in|access-date=16 मई 2026}}</ref> |[[उत्तर प्रदेश]] |[[File:Arun Bhansali.jpg|alt=|90x90px]] |'''अरुण भंसाली''' |पुरुष |{{dts|format=dmy|2024|2|5}}<br /><small>({{ayd|2024|2|5}})</small> |{{dts|format=dmy|2029|10|14}}<br /><small>({{ayd|2029|10|14}})</small> |{{ayd|2024|2|5|2029|10|14|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]] | rowspan="25" |[[द्रौपदी मुर्मू]] |[[राजस्थान उच्च न्यायालय|राजस्थान]] !9<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|1|8}}<br /><small>({{ayd|2013|1|8}}</small>) |[[अल्तमास कबीर]] | |- ![[आन्ध्र प्रदेश उच्च न्यायालय]]<ref>{{Cite web|url=https://aphc.gov.in/profiles.php|title=Chief Justice & Sitting Judges|access-date=16 मई 2026}}</ref> |[[आन्ध्र प्रदेश]] | |'''लिसा गिल''' |महिला |{{dts|format=dmy|2026|4|25}}<br /><small>({{ayd|2026|4|25}})</small> |{{dts|format=dmy|2028|11|16}}<br /><small>({{ayd|2028|11|16}})</small> |{{ayd|2026|4|25|2028|11|16|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] !33<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|3|31}}<br /><small>({{ayd|2014|3|31}}</small>) |[[पी सतशिवम]] | |- ![[बॉम्बे उच्च न्यायालय]]<ref>{{Cite web|url=https://bombayhighcourt.gov.in/bhc/cj-sitting-judges|publisher=बॉम्बे उच्च न्यायालय|title=Hon'ble Justices|access-date=16 मई 2026}}</ref> |[[गोवा]], [[दादरा और नगर हवेली]], [[दमन और दीव]], [[महाराष्ट्र]] | |'''रवींद्र विट्ठलराव घुगे'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2028|7|8}}<br /><small>({{ayd|2028|7|8}})</small> |{{ayd|2026|6|2|2028|7|8|duration=on}} | -- |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !16<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) |[[अल्तमास कबीर]] | |- ![[कलकत्ता उच्च न्यायालय]]<ref>{{Cite web|url=https://calcuttahighcourt.gov.in/Judges/CJ-and-Judges|title=Calcutta High Court - Judges|access-date=16 मई 2026}}</ref> |[[अंडमान और निकोबार द्वीपसमूह]], [[पश्चिम बंगाल]] | |'''तपब्रत चक्रवर्ती'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|6|21}}<br /><small>({{ayd|2026|6|21}})</small> |{{dts|format=dmy|2028|11|26}}<br /><small>({{ayd|2028|11|26}})</small> |{{ayd|2026|6|21|2028|11|26|duration=on}} | -- |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !20<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|10|30}}<br /><small>({{ayd|2013|10|30}}</small>) |[[पी सतशिवम]] | |- ![[छत्तीसगढ़ उच्च न्यायालय]]<ref>{{Cite web|url=https://highcourt.cg.gov.in/judges/judges.php|title=Chief Justice & Sitting Judges|website=highcourt.cg.gov.in|access-date=16 मई 2026}}</ref> |[[छत्तीसगढ़]] | |'''रमेश सिन्हा''' |पुरुष |{{dts|format=dmy|2023|3|29}}<br /><small>({{ayd|2023|3|29}})</small> |{{dts|format=dmy|2026|9|4}}<br /><small>({{ayd|2026|9|4}})</small> |{{ayd|2023|3|29|2026|9|4|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !4<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> | rowspan="2" |{{dts|format=dmy|2011|11|21}}<br /><small>({{ayd|2011|11|21}}</small>) | rowspan="2" |[[एस एच कापड़िया]] | |- ![[दिल्ली उच्च न्यायालय]]<ref>{{Cite web|url=https://www.delhihighcourt.nic.in/web/CJ_Sitting_Judges|title=CJ And Sitting Judges|website=delhihighcourt.nic.in|access-date=16 मई 2026}}</ref> |[[राष्ट्रीय राजधानी क्षेत्र|राष्ट्रीय राजधानी क्षेत्र दिल्ली]] | |'''देवेंद्र कुमार उपाध्याय''' |पुरुष |{{dts|format=dmy|2023|7|29}}<br /><small>({{ayd|2023|7|29}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br>{{dts|format=dmy|2025|1|21}}<br /><small>({{ayd|2025|1|21}})</small> |{{dts|format=dmy|2027|6|15}}<br /><small>({{ayd|2027|6|15}})</small> |{{ayd|2023|7|29|2027|6|15|duration=on}}<br /><small>'''वर्तमान उच्च न्यायालय में कार्यकाल'''</small><br>{{ayd|2025|1|21|2027|6|15|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[संजीव खन्ना]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !6<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |[[बॉम्बे उच्च न्यायालय|बॉम्बे के 47वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|7|29}} से {{dts|format=dmy|2025|1|20}} तक <br /> <small>({{ayd|2023|7|29|2025|1|20|duration=on}})</small> |- ![[गुवाहाटी उच्च न्यायालय]]<ref>{{Cite web|url=https://ghconline.gov.in/index.php/honble-the-chief-justice-sitting-judges/|title=Chief Justice & Sitting Judges|website=ghconline.gov.in|access-date=16 मई 2026}}</ref> |[[अरुणाचल प्रदेश]], [[असम]], [[मिजोरम]], [[नागालैंड]] | |'''आशुतोष कुमार''' |पुरुष |{{dts|format=dmy|2025|7|21}}<br /><small>({{ayd|2025|7|21}})</small> |{{dts|format=dmy|2028|9|30}}<br /><small>({{ayd|2028|9|30}})</small> |{{ayd|2025|7|21|2028|9|30|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[पटना उच्च न्यायालय|पटना]] !34<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|5|15}}<br /><small>({{ayd|2014|5|15}}</small>) |[[राजेन्द्र मल लोढ़ा]] | |- ![[गुजरात उच्च न्यायालय]]<ref>{{Cite web|url=https://gujarathighcourt.nic.in/cjj|title=High Court of Gujarat|website=gujarathighcourt.nic.in|access-date=16 मई 2026}}</ref> |[[गुजरात]] | |'''सुनीता अग्रवाल''' |महिला |{{dts|format=dmy|2023|7|23}}<br /><small>({{ayd|2023|7|23}})</small> |{{dts|format=dmy|2028|4|29}}<br /><small>({{ayd|2028|4|29}})</small> |{{ayd|2023|7|23|2028|4|29|duration=on}} | rowspan="2" |[[धनंजय यशवंत चंद्रचूड़]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !5<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|11|21}}<br /><small>({{ayd|2011|11|21}}</small>) | rowspan="2" |[[एस एच कापड़िया]] | |- ![[हिमाचल प्रदेश उच्च न्यायालय]]<br />{{small|([[हिमाचल प्रदेश उच्च न्यायालय के मुख्य न्यायाधीशों की सूची|सूची]])}}<ref>{{Cite web|url=https://highcourt.hp.gov.in/|title=Chief Justice & Sitting Judges|access-date=16 मई 2026|archive-date=15 जून 2025|archive-url=https://web.archive.org/web/20250615130155/https://highcourt.hp.gov.in/|url-status=dead}}</ref> |[[हिमाचल प्रदेश]] | |'''गुरमीत सिंह संधावालिया''' |पुरुष |{{dts|format=dmy|2024|12|29}}<br /><small>({{ayd|2024|12|29}})</small> |{{dts|format=dmy|2027|10|31}}<br /><small>({{ayd|2027|10|31}})</small> |{{ayd|2024|12|29|2027|10|31|duration=on}} |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] !3<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|9|30}}<br /><small>({{ayd|2011|9|30}}</small>) | |- ![[जम्मू और कश्मीर उच्च न्यायालय]]<ref>{{Cite web|url=https://jkhighcourt.nic.in/cjjk.php|title=Chief Justice & Sitting Judges|website=jkhighcourt.nic.in/|access-date=16 मई 2026}}</ref> |[[जम्मू और कश्मीर]], [[लद्दाख]] | |'''संजीव कुमार'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2028|4|7}}<br /><small>({{ayd|2028|4|7}})</small> |{{ayd|2026|6|2|2028|4|7|duration=on}} | -- |[[जम्मू और कश्मीर उच्च न्यायालय|जम्मू और कश्मीर]] !95<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2017|6|6}}<br /><small>({{ayd|2017|6|6}}</small>) |[[जगदीश सिंह खेहर]] | |- ![[झारखण्ड उच्च न्यायालय]]<ref>{{Cite web|url=https://jharkhandhighcourt.nic.in/sitting-judges-high-court-jharkhand.php?pid=MQ==|title=High Court of Jharkhand Sitting Judges.|website=jharkhandhighcourt.nic.in/|access-date=16 मई 2026}}</ref> |[[झारखंड]] |[[File:JUSTICE M.S. SONAK.jpg|90x90px]] |'''महेश शरदचंद्र सोनक''' |पुरुष |{{dts|format=dmy|2026|1|9}}<br /><small>({{ayd|2026|1|9}})</small> |{{dts|format=dmy|2026|11|27}}<br /><small>({{ayd|2026|11|27}})</small> |{{ayd|2026|1|9|2026|11|27|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !15<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) | rowspan="2" |[[अल्तमास कबीर]] | |- ![[कर्नाटक उच्च न्यायालय]]<ref>{{Cite web|url=https://judiciary.karnataka.gov.in/submenujprofile.php?nid=1|title=Hon`ble The Chief Justice and Sitting Judges of High Court of Karnataka|website=judiciary.karnataka.gov.in/|access-date=16 मई 2026}}{{Dead link|date=जुलाई 2026 |bot=InternetArchiveBot }}</ref> |[[कर्नाटक]] |[[File:Vibhu_Bakhru.jpg|alt=|90x90px|Dhananjaya Yeshwant Chandrachud]] |'''विभु बखरू''' |पुरुष |{{dts|format=dmy|2025|7|19}}<br /><small>({{ayd|2025|7|19}})</small> |{{dts|format=dmy|2028|11|1}}<br /><small>({{ayd|2028|11|1}})</small> |{{ayd|2025|7|19|2028|11|1|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[दिल्ली उच्च न्यायालय|दिल्ली]] !11<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|4|17}}<br /><small>({{ayd|2013|4|17}}</small>) | |- ![[केरल उच्च न्यायालय]]<ref>{{Cite web|url=https://highcourt.kerala.gov.in/judges.php|title=Present Judges of High Court|website=highcourt.kerala.gov.in/|access-date=16 मई 2026}}{{Dead link|date=जुलाई 2026 |bot=InternetArchiveBot }}</ref> |[[केरल]], [[लक्षद्वीप]] | |'''सौमेन सेन''' |पुरुष |{{dts|format=dmy|2025|10|8}}<br /><small>({{ayd|2025|10|8}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br />{{dts|2026|1|10|format=dmy}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2027|7|26}}<br /><small>({{ayd|2027|7|26}})</small> |{{ayd|2025|10|8|2027|7|26|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल'''''</small><br>{{ayd|2026|1|10|2027|7|26|duration=on}} |[[भूषण रामकृष्ण गवई]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !2<br /><small>''{{dts|2026|3|6|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|4|13}}<br /><small>({{ayd|2011|4|13}}</small>) |[[एस एच कापड़िया]] |[[मेघालय उच्च न्यायालय|मेघालय के 14वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2025|10|8}} से {{dts|2026|1|9|format=dmy}} तक <br /><small>({{ayd|2025|10|8|2026|1|9|duration=on}})</small> |- ![[मध्य प्रदेश उच्च न्यायालय]]<ref>{{Cite web|url=https://mphc.gov.in/chief-justice-and-sitting-judges|title=Hon'ble Chief Justice and Sitting Judges |access-date=167 अक्तूबर 2026}}</ref> |[[मध्य प्रदेश]] | |'''विवेक रूसिया'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2031|8|1}}<br /><small>({{ayd|2031|8|1}})</small> |{{ayd|2026|6|2|2031|8|1|duration=on}} | -- |[[मध्य प्रदेश उच्च न्यायालय|मध्य प्रदेश]] !50<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> | {{dts|format=dmy|2016|4|7}}<br /><small>({{ayd|2016|4|7}}</small>) | rowspan="3" |[[टी॰ एस॰ ठाकुर]] | |- ![[मद्रास उच्च न्यायालय]]<ref>{{Cite web|url=http://www.hcmadras.tn.nic.in/cjhc.html|title=Madras High Court - Profile of Chief Justice|last=Court|first=Madras High|website=www.hcmadras.tn.nic.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190117123331/http://hcmadras.tn.nic.in/cjhc.html|archive-date=17 जनवरी 2019|url-status=live}}</ref> |[[पुडुचेरी]], [[तमिलनाडु]] | |'''सुश्रुत अरविंद धर्माधिकारी''' |पुरुष |{{dts|format=dmy|2026|3|6}}<br /><small>({{ayd|2026|3|6}})</small> |{{dts|format=dmy|2028|7|7}}<br /><small>({{ayd|2028|7|7}})</small> |{{ayd|2026|3|6|2028|7|7|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[मध्य प्रदेश उच्च न्यायालय|मध्य प्रदेश]] !49<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2016|4|7}}<br /><small>({{ayd|2016|4|7}}</small>) | |- ![[मणिपुर उच्च न्यायालय]]<ref name=":0">{{Cite web|url=https://hcmimphal.nic.in/judges.html|title=Welcome to High Court of Manipur Imphal - court rules|last=unit|first=nic manipur state|website=hcmimphal.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190801065819/https://hcmimphal.nic.in/judges.html|archive-date=1 अगस्त 2019|url-status=dead}}</ref> |[[मणिपुर]] | |'''एम. सुंदर''' |पुरुष |{{dts|format=dmy|2025|9|15}}<br /><small>({{ayd|2025|9|15}})</small> |{{dts|format=dmy|2028|7|18}}<br /><small>({{ayd|2028|7|18}})</small> |{{ayd|2025|9|15|2028|7|18|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[मद्रास उच्च न्यायालय|मद्रास]] !59<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2016|10|5}}<br /><small>({{ayd|2016|10|5}}</small>) | |- ![[मेघालय उच्च न्यायालय]]<ref name=":1">{{Cite web|url=http://meghalayahighcourt.nic.in/chief-justice-judges|title=संग्रहीत प्रति|access-date=29 अक्तूबर 2019|archive-url=https://web.archive.org/web/20190420130432/http://meghalayahighcourt.nic.in/chief-justice-judges|archive-date=20 अप्रैल 2019|url-status=dead}}</ref> |[[मेघालय]] | |'''रेवती मोहिते देरे''' |महिला |{{dts|format=dmy|2026|1|10}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2027|4|16}}<br /><small>({{ayd|2027|4|16}})</small> |{{ayd|2026|1|10|2027|4|16|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !14<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) |[[अल्तमास कबीर]] | |- ![[उड़ीसा उच्च न्यायालय]]<ref name=":2">{{Cite web|url=http://www.orissahighcourt.nic.in/cjohc.html|title=Orissa High Court, Cuttack|website=www.orissahighcourt.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190814012540/http://orissahighcourt.nic.in/cjohc.html|archive-date=14 अगस्त 2019|url-status=dead}}</ref><ref name=":3">{{Cite web|url=http://www.orissahighcourt.nic.in/cjjudges.html|title=Orissa High Court, Cuttack|website=www.orissahighcourt.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190814012529/http://orissahighcourt.nic.in/cjjudges.html|archive-date=14 अगस्त 2019|url-status=dead}}</ref> |[[उड़ीसा]] |[[File:Justice_Harish_Tandon.jpg|90x90px]] |'''हरीश टंडन''' |पुरुष |{{dts|format=dmy|2025|3|26}}<br /><small>({{ayd|2025|3|26}})</small> |{{dts|format=dmy|2026|11|15}}<br /><small>({{ayd|2026|11|15}})</small> |{{ayd|2025|3|26|2026|11|15|duration=on}} |[[संजीव खन्ना]] |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !1<br /><small>''{{dts|2026|3|6|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2010|4|13}}<br /><small>({{ayd|2010|4|13}}</small>) |[[के॰ जी॰ बालकृष्णन]] | |- ![[पटना उच्च न्यायालय]]<ref>{{Cite web|url=http://patnahighcourt.gov.in/Judges.aspx|title=The High Court of Judicature at Patna|last=1|first=Amit Kumar|website=patnahighcourt.gov.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190816123317/http://patnahighcourt.gov.in/Judges.aspx|archive-date=16 अगस्त 2019|url-status=dead}}</ref> |[[बिहार]] | |'''सुधीर सिंह'''{{Ref label|†|†|†}} |पुरूष |{{dts|format=dmy|2026|7|12}}<br /><small>({{ayd|2026|7|12}})</small> |{{dts|2027|12|10|format=dmy}}<br /><small>({{ayd|2027|12|10}})</small> |{{ayd|2026|7|12|2027|12|10|duration=on}} | -- |[[पटना उच्च न्यायालय|पटना]] !43<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2015|4|15}}<br /><small>({{ayd|2015|4|15}}</small>) |[[एच एल दत्तु]] | |- ![[पंजाब और हरियाणा उच्च न्यायालय]]<ref>{{Cite web|url=https://www.highcourtchd.gov.in/?trs=chief|title=Hon'ble Chief Justice and Judges of the High Court of Punjab and Haryana|website=www.highcourtchd.gov.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190819115549/https://highcourtchd.gov.in/?trs=chief|archive-date=19 अगस्त 2019|url-status=dead}}</ref> |[[चंडीगढ़]], [[हरियाणा]], [[पंजाब]] | |'''अश्वनी कुमार मिश्रा'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2030|11|15}}<br /><small>({{ayd|2030|11|15}})</small> |{{ayd|2026|6|2|2030|11|15|duration=on}} | -- |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !31<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|2|3}}<br /><small>({{ayd|2014|2|3}}</small>) |[[पी सतशिवम]] | |- ![[राजस्थान उच्च न्यायालय]]<ref>{{Cite web|url=http://164.100.222.238/hcraj/jphoto.php|title=Rajasthan High Court|last=Ltd.|first=Celeste Online Solutions Pvt.|website=164.100.222.238|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20181105012858/http://164.100.222.238/hcraj/jphoto.php|archive-date=5 नवंबर 2018|url-status=dead}}</ref> |[[राजस्थान]] | |'''संजीव प्रकाश शर्मा'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2025|9|28}}<br /><small>({{ayd|2025|9|28}})</small> |{{dts|format=dmy|2026|9|26}}<br /><small>({{ayd|2026|9|26}})</small> |{{ayd|2025|9|28|2026|9|26|duration=on}} | -- |[[राजस्थान उच्च न्यायालय|राजस्थान]] !75<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|2016|11|16|format=dmy}}<br /><small>({{ayd|2016|11|16}}</small>) |[[टी॰ एस॰ ठाकुर]] | |- ![[सिक्किम उच्च न्यायालय]]<ref>{{Cite web|url=http://highcourtofsikkim.nic.in/hcs/JudgesProfile|title=Judges Profile {{!}} High Court of Sikkim|website=highcourtofsikkim.nic.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190417124547/http://highcourtofsikkim.nic.in/hcs/JudgesProfile|archive-date=17 अप्रैल 2019|url-status=dead}}</ref> |[[सिक्किम]] | |'''मुहम्मद मुस्ताक आयुमंतकथ''' |पुरुष |{{dts|format=dmy|2026|1|4}}<br /><small>({{ayd|2026|1|4}})</small> |{{dts|format=dmy|2029|5|31}}<br /><small>({{ayd|2029|5|31}})</small> |{{ayd|2026|1|4|2029|5|31|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[केरल उच्च न्यायालय|केरल]] !28<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|1|23}}<br /><small>({{ayd|2014|1|23}}</small>) |[[पी सतशिवम]] | |- ![[तेलंगाना उच्च न्यायालय]]<ref>{{Cite web|url=http://hc.tap.nic.in/aphc/profiles1.html|title=HON'BLE JUDGES PROFILE|website=hc.tap.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20180707201942/http://hc.tap.nic.in/aphc/profiles1.html|archive-date=7 जुलाई 2018|url-status=dead}}</ref> |[[तेलंगाना]] |[[File:Justice Aparesh Kumar Singh.png|90x90px]] |'''अपरेश कुमार सिंह''' |पुरुष |{{dts|format=dmy|2023|4|17}}<br /><small>({{ayd|2023|4|17}})</small><br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br />{{dts|2025|7|19|format=dmy}}<br /><small>({{ayd|2025|7|19}})</small> |{{dts|format=dmy|2027|7|6}}<br /><small>({{ayd|2027|7|6}})</small> |{{ayd|2023|4|17|2027|7|6|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल''''</small><br>{{ayd|2025|7|19|2027|7|6|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[भूषण रामकृष्ण गवई]] |[[झारखण्ड उच्च न्यायालय|झारखण्ड]] !7<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2012|1|24}}<br /><small>({{ayd|2012|1|24}}</small>) | rowspan="2" |[[एस एच कापड़िया]] |[[त्रिपुरा उच्च न्यायालय|त्रिपुरा के 8वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|4|17}} से {{dts|2025|7|18|format=dmy}} तक <br /><small>({{ayd|2023|4|17|2025|7|18|duration=on}})</small> |- ![[त्रिपुरा उच्च न्यायालय]]<ref>{{Cite web|url=http://tsu.trp.nic.in/highcourt/CJprofile.html|title=Welcome to High Court of Tripura|website=tsu.trp.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190317114754/http://tsu.trp.nic.in/highcourt/CJprofile.html|archive-date=17 मार्च 2019|url-status=dead}}</ref> |[[त्रिपुरा]] |[[File:Justice_M.S._Ramachandra_Rao.jpg|90x90px]] |'''ममीदन्ना सत्यरत्न रामचंद्र राव''' |पुरुष |{{dts|format=dmy|2023|5|30}}<br /><small>({{ayd|2023|5|30}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br>{{dts|2025|7|22|format=dmy}}<br /><small>({{ayd|2025|7|22}})</small> |{{dts|format=dmy|2028|8|6}}<br /><small>({{ayd|2028|8|6}})</small> |{{ayd|2023|5|30|2028|8|6|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल'''''</small><br>{{ayd|2025|7|22|2028|8|6|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[भूषण रामकृष्ण गवई]] |[[तेलंगाना उच्च न्यायालय|तेलंगाना]] !8<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|2012|6|29|format=dmy}}<br /><small>({{ayd|2012|6|29}}</small>) |[[हिमाचल प्रदेश उच्च न्यायालय|हिमाचल प्रदेश के 28वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|5|30}} से {{dts|format=dmy|2024|9|24}} तक <br /><small>({{ayd|2023|5|30|2024|9|24|duration=on}})</small><br />[[झारखण्ड उच्च न्यायालय|झारखंड के 16वें मुख्य न्यायाधीश]]<br>{{dts|2024|9|25|format=dmy}} से {{dts|2025|7|21|format=dmy}} तक <br /><small>({{ayd|2024|9|25|2025|7|21|duration=on}})</small> |- ![[उत्तराखण्ड उच्च न्यायालय]]<br />{{small|([[उत्तराखण्ड उच्च न्यायालय के मुख्य न्यायाधीशों की सूची|सूची]])}}<ref>{{Cite web|url=http://highcourtofuttarakhand.gov.in/pages/display/221-honble-the-chief-justice|title=Hon'ble the Chief Justice: Hon'ble the Chief Justice|last=Dehradun|first=NIC, Uttarakhand State Unit|website=highcourtofuttarakhand.gov.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190410221213/http://highcourtofuttarakhand.gov.in/pages/display/221-honble-the-chief-justice|archive-date=10 अप्रैल 2019|url-status=dead}}</ref> |[[उत्तराखण्ड|उत्तराखंड]] | |'''मनोज कुमार गुप्ता''' |पुरुष |{{dts|format=dmy|2026|1|10}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2026|10|8}}<br /><small>({{ayd|2026|10|8}})</small> |{{ayd|2026|1|10|2026|10|8|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !10<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|4|12}}<br /><small>({{ayd|2013|4|12}}</small>) |[[अल्तमास कबीर]] | |} ''' कुंजी ''' * '''{{Note label|†|†|†}}कार्यवाहक मुख्य न्यायाधीश''' '''वरिष्ठता क्रमांक में बदलाव की तारीखें (S.R.):''' <small>'''{{dts|format=dmy|2026|3|6}} -''' '''मनिन्द्र मोहन श्रीवास्तव (मद्रास के मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|3|5}} को सेवानिवृत्त हुए। (S.R. 1)</small> <small>'''{{dts|format=dmy|2026|6|21}} -''' '''सुजॉय पॉल (कलकत्ता के मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|6|20}} को सेवानिवृत्त हुए। (S.R. 3)</small> <small>'''{{dts|format=dmy|2026|7|12}} -''' '''[[मीनाक्षी मदन राय]] (पटना की मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|7|11}} को सेवानिवृत्त हुई। (S.R. 43)</small> ==इन्हें भी देखें== *[[भारत के मुख्य न्यायाधीश]] *[[भारत का उच्चतम न्यायालय]] *[[भारतीय सर्वोच्च न्यायालय के वर्तमान न्यायधीशगणों की सूची]] ==सन्दर्भ== j54r4a2gl1ufb7q4p3n9saxdx7ceb1g 6586757 6586756 2026-07-17T13:59:31Z Ankit231132 874432 6586757 wikitext text/x-wiki यह भारत के सर्वोच्च न्यायालय और भारत के उच्च न्यायालयों के वर्तमान मुख्य न्यायाधीशों की एक सूची है, जो भारत गणराज्य के प्रत्येक राज्य की सर्वोच्च अदालत है। वर्तमान में देश में 25 उच्च न्यायालय हैं। ==सर्वोच्च न्यायालय== {| class="wikitable static-row-numbers static-row-header" style="text-align:center" |- ! scope="col" | मुख्य न्यायधीश का नाम ! [[सूर्यकांत (न्यायाधीश)|'''सूर्यकांत''']]<ref>{{Cite web |date=24 November 2025 |title=Justice Surya Kant sworn in as 53rd Chief Justice of India |url=https://www.thehindu.com/news/national/justice-surya-kant-sworn-in-as-53rd-chief-justice-of-india/article70316338.ece/ |website=thehindu.com |language=en}}</ref><br />{{small|([[भारत के मुख्य न्यायाधीश|सूची]])}} |- ! छायाचित्र |[[File:Justice_Surya_Kant.jpg|alt=|125x125px]] |- ! सर्वोच्च न्यायालय में पदोन्नति की तिथि |{{dts|2019|5|24|format=dmy}}<br /><small>({{ayd|2019|5|24}})</small> |- ! भारत के मुख्य न्यायाधीश के रूप में नियुक्ति की तिथि |{{dts|2025|11|24|format=dmy}}<br /><small>({{ayd|2025|11|24}})</small> |- ! सेवानिवृति की तिथि |{{dts|2027|2|9|format=dmy}}<br /><small>({{ayd|2027|2|9}})</small> |- ! कार्यकाल |{{ayd|2025|11|24|2027|2|9|duration=on}} |- ! मनोनीतकर्ता |[[भूषण रामकृष्ण गवई]] |- ! नियुक्तिकर्ता |[[द्रौपदी मुर्मू]] |- ! पदोन्नति की तिथि पर वरिष्ठता क्रमांक |11 |- !न्यायाधीश के रूप में प्रारंभिक नियुक्ति की तिथि |{{dts|2004|1|9|format=dmy}}<br /><small>({{ayd|2004|1|9}})</small> |- ! उच्च न्यायालय |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] |} == उच्च न्यायालयों के मुख्य न्यायाधीशों की सूची == {| class="wikitable sortable defaultcenter static-row-header" style="font-size: 90%" ! उच्च न्यायालय ! न्यायक्षेत्र ! चित्र ! मुख्य न्यायाधीश ! लिंग ! मुख्य न्यायाधीश के रूप में नियुक्ति की तिथि ! सेवानिवृत्ति की तिथि ! कार्यकाल ! मुख्य न्यायाधीश के रूप में मनोनीतकर्ता ! नियुक्तकर्ता ! मूल उच्च न्यायालय ! अखिल भारतीय वरिष्ठता क्रमांक ! न्यायाधीश के रूप में प्रारंभिक नियुक्ति की तिथि ! न्यायाधीश के रूप में मनोनीतकर्ता ! टिप्पणियाँ |- ![[इलाहाबाद उच्च न्यायालय]]<ref>{{Cite web|url=https://www.allahabadhighcourt.in/service/judgeDetail.jsp?id=381|title=Chief Justice and Judges of the High Court of Judicature at Allahabad and its Bench at Lucknow|website=www.allahabadhighcourt.in|access-date=16 मई 2026}}</ref> |[[उत्तर प्रदेश]] |[[File:Arun Bhansali.jpg|alt=|90x90px]] |'''अरुण भंसाली''' |पुरुष |{{dts|format=dmy|2024|2|5}}<br /><small>({{ayd|2024|2|5}})</small> |{{dts|format=dmy|2029|10|14}}<br /><small>({{ayd|2029|10|14}})</small> |{{ayd|2024|2|5|2029|10|14|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]] | rowspan="25" |[[द्रौपदी मुर्मू]] |[[राजस्थान उच्च न्यायालय|राजस्थान]] !9<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|1|8}}<br /><small>({{ayd|2013|1|8}}</small>) |[[अल्तमास कबीर]] | |- ![[आन्ध्र प्रदेश उच्च न्यायालय]]<ref>{{Cite web|url=https://aphc.gov.in/profiles.php|title=Chief Justice & Sitting Judges|access-date=16 मई 2026}}</ref> |[[आन्ध्र प्रदेश]] | |'''लिसा गिल''' |महिला |{{dts|format=dmy|2026|4|25}}<br /><small>({{ayd|2026|4|25}})</small> |{{dts|format=dmy|2028|11|16}}<br /><small>({{ayd|2028|11|16}})</small> |{{ayd|2026|4|25|2028|11|16|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] !33<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|3|31}}<br /><small>({{ayd|2014|3|31}}</small>) |[[पी सतशिवम]] | |- ![[बॉम्बे उच्च न्यायालय]]<ref>{{Cite web|url=https://bombayhighcourt.gov.in/bhc/cj-sitting-judges|publisher=बॉम्बे उच्च न्यायालय|title=Hon'ble Justices|access-date=16 मई 2026}}</ref> |[[गोवा]], [[दादरा और नगर हवेली]], [[दमन और दीव]], [[महाराष्ट्र]] | |'''रवींद्र विट्ठलराव घुगे'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2028|7|8}}<br /><small>({{ayd|2028|7|8}})</small> |{{ayd|2026|6|2|2028|7|8|duration=on}} | -- |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !16<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) |[[अल्तमास कबीर]] | |- ![[कलकत्ता उच्च न्यायालय]]<ref>{{Cite web|url=https://calcuttahighcourt.gov.in/Judges/CJ-and-Judges|title=Calcutta High Court - Judges|access-date=16 मई 2026}}</ref> |[[अंडमान और निकोबार द्वीपसमूह]], [[पश्चिम बंगाल]] | |'''तपब्रत चक्रवर्ती'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|6|21}}<br /><small>({{ayd|2026|6|21}})</small> |{{dts|format=dmy|2028|11|26}}<br /><small>({{ayd|2028|11|26}})</small> |{{ayd|2026|6|21|2028|11|26|duration=on}} | -- |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !20<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|10|30}}<br /><small>({{ayd|2013|10|30}}</small>) |[[पी सतशिवम]] | |- ![[छत्तीसगढ़ उच्च न्यायालय]]<ref>{{Cite web|url=https://highcourt.cg.gov.in/judges/judges.php|title=Chief Justice & Sitting Judges|website=highcourt.cg.gov.in|access-date=16 मई 2026}}</ref> |[[छत्तीसगढ़]] | |'''रमेश सिन्हा''' |पुरुष |{{dts|format=dmy|2023|3|29}}<br /><small>({{ayd|2023|3|29}})</small> |{{dts|format=dmy|2026|9|4}}<br /><small>({{ayd|2026|9|4}})</small> |{{ayd|2023|3|29|2026|9|4|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !4<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> | rowspan="2" |{{dts|format=dmy|2011|11|21}}<br /><small>({{ayd|2011|11|21}}</small>) | rowspan="2" |[[एस एच कापड़िया]] | |- ![[दिल्ली उच्च न्यायालय]]<ref>{{Cite web|url=https://www.delhihighcourt.nic.in/web/CJ_Sitting_Judges|title=CJ And Sitting Judges|website=delhihighcourt.nic.in|access-date=16 मई 2026}}</ref> |[[राष्ट्रीय राजधानी क्षेत्र|राष्ट्रीय राजधानी क्षेत्र दिल्ली]] | |'''देवेंद्र कुमार उपाध्याय''' |पुरुष |{{dts|format=dmy|2023|7|29}}<br /><small>({{ayd|2023|7|29}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br>{{dts|format=dmy|2025|1|21}}<br /><small>({{ayd|2025|1|21}})</small> |{{dts|format=dmy|2027|6|15}}<br /><small>({{ayd|2027|6|15}})</small> |{{ayd|2023|7|29|2027|6|15|duration=on}}<br /><small>'''वर्तमान उच्च न्यायालय में कार्यकाल'''</small><br>{{ayd|2025|1|21|2027|6|15|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[संजीव खन्ना]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !6<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |[[बॉम्बे उच्च न्यायालय|बॉम्बे के 47वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|7|29}} से {{dts|format=dmy|2025|1|20}} तक <br /> <small>({{ayd|2023|7|29|2025|1|20|duration=on}})</small> |- ![[गुवाहाटी उच्च न्यायालय]]<ref>{{Cite web|url=https://ghconline.gov.in/index.php/honble-the-chief-justice-sitting-judges/|title=Chief Justice & Sitting Judges|website=ghconline.gov.in|access-date=16 मई 2026}}</ref> |[[अरुणाचल प्रदेश]], [[असम]], [[मिजोरम]], [[नागालैंड]] | |'''आशुतोष कुमार''' |पुरुष |{{dts|format=dmy|2025|7|21}}<br /><small>({{ayd|2025|7|21}})</small> |{{dts|format=dmy|2028|9|30}}<br /><small>({{ayd|2028|9|30}})</small> |{{ayd|2025|7|21|2028|9|30|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[पटना उच्च न्यायालय|पटना]] !34<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|5|15}}<br /><small>({{ayd|2014|5|15}}</small>) |[[राजेन्द्र मल लोढ़ा]] | |- ![[गुजरात उच्च न्यायालय]]<ref>{{Cite web|url=https://gujarathighcourt.nic.in/cjj|title=High Court of Gujarat|website=gujarathighcourt.nic.in|access-date=16 मई 2026}}</ref> |[[गुजरात]] | |'''सुनीता अग्रवाल''' |महिला |{{dts|format=dmy|2023|7|23}}<br /><small>({{ayd|2023|7|23}})</small> |{{dts|format=dmy|2028|4|29}}<br /><small>({{ayd|2028|4|29}})</small> |{{ayd|2023|7|23|2028|4|29|duration=on}} | rowspan="2" |[[धनंजय यशवंत चंद्रचूड़]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !5<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|11|21}}<br /><small>({{ayd|2011|11|21}}</small>) | rowspan="2" |[[एस एच कापड़िया]] | |- ![[हिमाचल प्रदेश उच्च न्यायालय]]<br />{{small|([[हिमाचल प्रदेश उच्च न्यायालय के मुख्य न्यायाधीशों की सूची|सूची]])}}<ref>{{Cite web|url=https://highcourt.hp.gov.in/|title=Chief Justice & Sitting Judges|access-date=16 मई 2026|archive-date=15 जून 2025|archive-url=https://web.archive.org/web/20250615130155/https://highcourt.hp.gov.in/|url-status=dead}}</ref> |[[हिमाचल प्रदेश]] | |'''गुरमीत सिंह संधावालिया''' |पुरुष |{{dts|format=dmy|2024|12|29}}<br /><small>({{ayd|2024|12|29}})</small> |{{dts|format=dmy|2027|10|31}}<br /><small>({{ayd|2027|10|31}})</small> |{{ayd|2024|12|29|2027|10|31|duration=on}} |[[पंजाब और हरियाणा उच्च न्यायालय|पंजाब और हरियाणा]] !3<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|9|30}}<br /><small>({{ayd|2011|9|30}}</small>) | |- ![[जम्मू और कश्मीर उच्च न्यायालय]]<ref>{{Cite web|url=https://jkhighcourt.nic.in/cjjk.php|title=Chief Justice & Sitting Judges|website=jkhighcourt.nic.in/|access-date=16 मई 2026}}</ref> |[[जम्मू और कश्मीर]], [[लद्दाख]] | |'''संजीव कुमार'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2028|4|7}}<br /><small>({{ayd|2028|4|7}})</small> |{{ayd|2026|6|2|2028|4|7|duration=on}} | -- |[[जम्मू और कश्मीर उच्च न्यायालय|जम्मू और कश्मीर]] !95<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2017|6|6}}<br /><small>({{ayd|2017|6|6}}</small>) |[[जगदीश सिंह खेहर]] | |- ![[झारखण्ड उच्च न्यायालय]]<ref>{{Cite web|url=https://jharkhandhighcourt.nic.in/sitting-judges-high-court-jharkhand.php?pid=MQ==|title=High Court of Jharkhand Sitting Judges.|website=jharkhandhighcourt.nic.in/|access-date=16 मई 2026}}</ref> |[[झारखंड]] |[[File:JUSTICE M.S. SONAK.jpg|90x90px]] |'''महेश शरदचंद्र सोनक''' |पुरुष |{{dts|format=dmy|2026|1|9}}<br /><small>({{ayd|2026|1|9}})</small> |{{dts|format=dmy|2026|11|27}}<br /><small>({{ayd|2026|11|27}})</small> |{{ayd|2026|1|9|2026|11|27|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !15<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) | rowspan="2" |[[अल्तमास कबीर]] | |- ![[कर्नाटक उच्च न्यायालय]]<ref>{{Cite web|url=https://judiciary.karnataka.gov.in/submenujprofile.php?nid=1|title=Hon`ble The Chief Justice and Sitting Judges of High Court of Karnataka|website=judiciary.karnataka.gov.in/|access-date=16 मई 2026}}{{Dead link|date=जुलाई 2026 |bot=InternetArchiveBot }}</ref> |[[कर्नाटक]] |[[File:Vibhu_Bakhru.jpg|alt=|90x90px|Dhananjaya Yeshwant Chandrachud]] |'''विभु बखरू''' |पुरुष |{{dts|format=dmy|2025|7|19}}<br /><small>({{ayd|2025|7|19}})</small> |{{dts|format=dmy|2028|11|1}}<br /><small>({{ayd|2028|11|1}})</small> |{{ayd|2025|7|19|2028|11|1|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[दिल्ली उच्च न्यायालय|दिल्ली]] !11<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|4|17}}<br /><small>({{ayd|2013|4|17}}</small>) | |- ![[केरल उच्च न्यायालय]]<ref>{{Cite web|url=https://highcourt.kerala.gov.in/judges.php|title=Present Judges of High Court|website=highcourt.kerala.gov.in/|access-date=16 मई 2026}}{{Dead link|date=जुलाई 2026 |bot=InternetArchiveBot }}</ref> |[[केरल]], [[लक्षद्वीप]] | |'''सौमेन सेन''' |पुरुष |{{dts|format=dmy|2025|10|8}}<br /><small>({{ayd|2025|10|8}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br />{{dts|2026|1|10|format=dmy}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2027|7|26}}<br /><small>({{ayd|2027|7|26}})</small> |{{ayd|2025|10|8|2027|7|26|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल'''''</small><br>{{ayd|2026|1|10|2027|7|26|duration=on}} |[[भूषण रामकृष्ण गवई]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !2<br /><small>''{{dts|2026|3|6|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2011|4|13}}<br /><small>({{ayd|2011|4|13}}</small>) |[[एस एच कापड़िया]] |[[मेघालय उच्च न्यायालय|मेघालय के 14वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2025|10|8}} से {{dts|2026|1|9|format=dmy}} तक <br /><small>({{ayd|2025|10|8|2026|1|9|duration=on}})</small> |- ![[मध्य प्रदेश उच्च न्यायालय]]<ref>{{Cite web|url=https://mphc.gov.in/chief-justice-and-sitting-judges|title=Hon'ble Chief Justice and Sitting Judges |access-date=167 अक्तूबर 2026}}</ref> |[[मध्य प्रदेश]] | |'''विवेक रूसिया'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2031|8|1}}<br /><small>({{ayd|2031|8|1}})</small> |{{ayd|2026|6|2|2031|8|1|duration=on}} | -- |[[मध्य प्रदेश उच्च न्यायालय|मध्य प्रदेश]] !50<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> | {{dts|format=dmy|2016|4|7}}<br /><small>({{ayd|2016|4|7}}</small>) | rowspan="3" |[[टी॰ एस॰ ठाकुर]] | |- ![[मद्रास उच्च न्यायालय]]<ref>{{Cite web|url=http://www.hcmadras.tn.nic.in/cjhc.html|title=Madras High Court - Profile of Chief Justice|last=Court|first=Madras High|website=www.hcmadras.tn.nic.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190117123331/http://hcmadras.tn.nic.in/cjhc.html|archive-date=17 जनवरी 2019|url-status=live}}</ref> |[[पुडुचेरी]], [[तमिलनाडु]] | |'''सुश्रुत अरविंद धर्माधिकारी''' |पुरुष |{{dts|format=dmy|2026|3|6}}<br /><small>({{ayd|2026|3|6}})</small> |{{dts|format=dmy|2028|7|7}}<br /><small>({{ayd|2028|7|7}})</small> |{{ayd|2026|3|6|2028|7|7|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[मध्य प्रदेश उच्च न्यायालय|मध्य प्रदेश]] !49<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2016|4|7}}<br /><small>({{ayd|2016|4|7}}</small>) | |- ![[मणिपुर उच्च न्यायालय]]<ref name=":0">{{Cite web|url=https://hcmimphal.nic.in/judges.html|title=Welcome to High Court of Manipur Imphal - court rules|last=unit|first=nic manipur state|website=hcmimphal.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190801065819/https://hcmimphal.nic.in/judges.html|archive-date=1 अगस्त 2019|url-status=dead}}</ref> |[[मणिपुर]] | |'''एम. सुंदर''' |पुरुष |{{dts|format=dmy|2025|9|15}}<br /><small>({{ayd|2025|9|15}})</small> |{{dts|format=dmy|2028|7|18}}<br /><small>({{ayd|2028|7|18}})</small> |{{ayd|2025|9|15|2028|7|18|duration=on}} |[[भूषण रामकृष्ण गवई]] |[[मद्रास उच्च न्यायालय|मद्रास]] !59<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2016|10|5}}<br /><small>({{ayd|2016|10|5}}</small>) | |- ![[मेघालय उच्च न्यायालय]]<ref name=":1">{{Cite web|url=http://meghalayahighcourt.nic.in/chief-justice-judges|title=संग्रहीत प्रति|access-date=29 अक्तूबर 2019|archive-url=https://web.archive.org/web/20190420130432/http://meghalayahighcourt.nic.in/chief-justice-judges|archive-date=20 अप्रैल 2019|url-status=dead}}</ref> |[[मेघालय]] | |'''रेवती मोहिते देरे''' |महिला |{{dts|format=dmy|2026|1|10}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2027|4|16}}<br /><small>({{ayd|2027|4|16}})</small> |{{ayd|2026|1|10|2027|4|16|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[बॉम्बे उच्च न्यायालय|बॉम्बे]] !14<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|6|21}}<br /><small>({{ayd|2013|6|21}}</small>) |[[अल्तमास कबीर]] | |- ![[उड़ीसा उच्च न्यायालय]]<ref name=":2">{{Cite web|url=http://www.orissahighcourt.nic.in/cjohc.html|title=Orissa High Court, Cuttack|website=www.orissahighcourt.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190814012540/http://orissahighcourt.nic.in/cjohc.html|archive-date=14 अगस्त 2019|url-status=dead}}</ref><ref name=":3">{{Cite web|url=http://www.orissahighcourt.nic.in/cjjudges.html|title=Orissa High Court, Cuttack|website=www.orissahighcourt.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190814012529/http://orissahighcourt.nic.in/cjjudges.html|archive-date=14 अगस्त 2019|url-status=dead}}</ref> |[[उड़ीसा]] |[[File:Justice_Harish_Tandon.jpg|90x90px]] |'''हरीश टंडन''' |पुरुष |{{dts|format=dmy|2025|3|26}}<br /><small>({{ayd|2025|3|26}})</small> |{{dts|format=dmy|2026|11|15}}<br /><small>({{ayd|2026|11|15}})</small> |{{ayd|2025|3|26|2026|11|15|duration=on}} |[[संजीव खन्ना]] |[[कलकत्ता उच्च न्यायालय|कलकत्ता]] !1<br /><small>''{{dts|2026|3|6|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2010|4|13}}<br /><small>({{ayd|2010|4|13}}</small>) |[[के॰ जी॰ बालकृष्णन]] | |- ![[पटना उच्च न्यायालय]]<ref>{{Cite web|url=http://patnahighcourt.gov.in/Judges.aspx|title=The High Court of Judicature at Patna|last=Kumar|first=Amit|website=patnahighcourt.gov.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190816123317/http://patnahighcourt.gov.in/Judges.aspx|archive-date=16 अगस्त 2019|url-status=dead}}</ref> |[[बिहार]] | |'''सुधीर सिंह'''{{Ref label|†|†|†}} |पुरूष |{{dts|format=dmy|2026|7|12}}<br /><small>({{ayd|2026|7|12}})</small> |{{dts|2027|12|10|format=dmy}}<br /><small>({{ayd|2027|12|10}})</small> |{{ayd|2026|7|12|2027|12|10|duration=on}} | -- |[[पटना उच्च न्यायालय|पटना]] !43<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2015|4|15}}<br /><small>({{ayd|2015|4|15}}</small>) |[[एच एल दत्तु]] | |- ![[पंजाब और हरियाणा उच्च न्यायालय]]<ref>{{Cite web|url=https://www.highcourtchd.gov.in/?trs=chief|title=Hon'ble Chief Justice and Judges of the High Court of Punjab and Haryana|website=www.highcourtchd.gov.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190819115549/https://highcourtchd.gov.in/?trs=chief|archive-date=19 अगस्त 2019|url-status=dead}}</ref> |[[चंडीगढ़]], [[हरियाणा]], [[पंजाब]] | |'''अश्वनी कुमार मिश्रा'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2026|06|02}}<br /><small>({{ayd|2026|06|02}})</small> |{{dts|format=dmy|2030|11|15}}<br /><small>({{ayd|2030|11|15}})</small> |{{ayd|2026|6|2|2030|11|15|duration=on}} | -- |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !31<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|2|3}}<br /><small>({{ayd|2014|2|3}}</small>) |[[पी सतशिवम]] | |- ![[राजस्थान उच्च न्यायालय]]<ref>{{Cite web|url=http://164.100.222.238/hcraj/jphoto.php|title=Rajasthan High Court|last=Ltd.|first=Celeste Online Solutions Pvt.|website=164.100.222.238|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20181105012858/http://164.100.222.238/hcraj/jphoto.php|archive-date=5 नवंबर 2018|url-status=dead}}</ref> |[[राजस्थान]] | |'''संजीव प्रकाश शर्मा'''{{Ref label|†|†|†}} |पुरुष |{{dts|format=dmy|2025|9|28}}<br /><small>({{ayd|2025|9|28}})</small> |{{dts|format=dmy|2026|9|26}}<br /><small>({{ayd|2026|9|26}})</small> |{{ayd|2025|9|28|2026|9|26|duration=on}} | -- |[[राजस्थान उच्च न्यायालय|राजस्थान]] !75<br /><small>''{{dts|2026|7|12|format=dmy}}<br /> से ''</small> |{{dts|2016|11|16|format=dmy}}<br /><small>({{ayd|2016|11|16}}</small>) |[[टी॰ एस॰ ठाकुर]] | |- ![[सिक्किम उच्च न्यायालय]]<ref>{{Cite web|url=http://highcourtofsikkim.nic.in/hcs/JudgesProfile|title=Judges Profile {{!}} High Court of Sikkim|website=highcourtofsikkim.nic.in|language=en|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190417124547/http://highcourtofsikkim.nic.in/hcs/JudgesProfile|archive-date=17 अप्रैल 2019|url-status=dead}}</ref> |[[सिक्किम]] | |'''मुहम्मद मुस्ताक आयुमंतकथ''' |पुरुष |{{dts|format=dmy|2026|1|4}}<br /><small>({{ayd|2026|1|4}})</small> |{{dts|format=dmy|2029|5|31}}<br /><small>({{ayd|2029|5|31}})</small> |{{ayd|2026|1|4|2029|5|31|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[केरल उच्च न्यायालय|केरल]] !28<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2014|1|23}}<br /><small>({{ayd|2014|1|23}}</small>) |[[पी सतशिवम]] | |- ![[तेलंगाना उच्च न्यायालय]]<ref>{{Cite web|url=http://hc.tap.nic.in/aphc/profiles1.html|title=HON'BLE JUDGES PROFILE|website=hc.tap.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20180707201942/http://hc.tap.nic.in/aphc/profiles1.html|archive-date=7 जुलाई 2018|url-status=dead}}</ref> |[[तेलंगाना]] |[[File:Justice Aparesh Kumar Singh.png|90x90px]] |'''अपरेश कुमार सिंह''' |पुरुष |{{dts|format=dmy|2023|4|17}}<br /><small>({{ayd|2023|4|17}})</small><br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br />{{dts|2025|7|19|format=dmy}}<br /><small>({{ayd|2025|7|19}})</small> |{{dts|format=dmy|2027|7|6}}<br /><small>({{ayd|2027|7|6}})</small> |{{ayd|2023|4|17|2027|7|6|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल''''</small><br>{{ayd|2025|7|19|2027|7|6|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[भूषण रामकृष्ण गवई]] |[[झारखण्ड उच्च न्यायालय|झारखण्ड]] !7<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2012|1|24}}<br /><small>({{ayd|2012|1|24}}</small>) | rowspan="2" |[[एस एच कापड़िया]] |[[त्रिपुरा उच्च न्यायालय|त्रिपुरा के 8वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|4|17}} से {{dts|2025|7|18|format=dmy}} तक <br /><small>({{ayd|2023|4|17|2025|7|18|duration=on}})</small> |- ![[त्रिपुरा उच्च न्यायालय]]<ref>{{Cite web|url=http://tsu.trp.nic.in/highcourt/CJprofile.html|title=Welcome to High Court of Tripura|website=tsu.trp.nic.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190317114754/http://tsu.trp.nic.in/highcourt/CJprofile.html|archive-date=17 मार्च 2019|url-status=dead}}</ref> |[[त्रिपुरा]] |[[File:Justice_M.S._Ramachandra_Rao.jpg|90x90px]] |'''ममीदन्ना सत्यरत्न रामचंद्र राव''' |पुरुष |{{dts|format=dmy|2023|5|30}}<br /><small>({{ayd|2023|5|30}}</small>)<br /><small>'''''वर्तमान उच्च न्यायालय में नियुक्ति की तारीख'''''</small><br>{{dts|2025|7|22|format=dmy}}<br /><small>({{ayd|2025|7|22}})</small> |{{dts|format=dmy|2028|8|6}}<br /><small>({{ayd|2028|8|6}})</small> |{{ayd|2023|5|30|2028|8|6|duration=on}}<br /><small>'''''वर्तमान उच्च न्यायालय में कार्यकाल'''''</small><br>{{ayd|2025|7|22|2028|8|6|duration=on}} |[[धनंजय यशवंत चंद्रचूड़]]<br /><small>'''''वर्तमान उच्च न्यायालय में मनोनीतकर्ता'''''</small><br>[[भूषण रामकृष्ण गवई]] |[[तेलंगाना उच्च न्यायालय|तेलंगाना]] !8<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|2012|6|29|format=dmy}}<br /><small>({{ayd|2012|6|29}}</small>) |[[हिमाचल प्रदेश उच्च न्यायालय|हिमाचल प्रदेश के 28वें मुख्य न्यायाधीश]]<br>{{dts|format=dmy|2023|5|30}} से {{dts|format=dmy|2024|9|24}} तक <br /><small>({{ayd|2023|5|30|2024|9|24|duration=on}})</small><br />[[झारखण्ड उच्च न्यायालय|झारखंड के 16वें मुख्य न्यायाधीश]]<br>{{dts|2024|9|25|format=dmy}} से {{dts|2025|7|21|format=dmy}} तक <br /><small>({{ayd|2024|9|25|2025|7|21|duration=on}})</small> |- ![[उत्तराखण्ड उच्च न्यायालय]]<br />{{small|([[उत्तराखण्ड उच्च न्यायालय के मुख्य न्यायाधीशों की सूची|सूची]])}}<ref>{{Cite web|url=http://highcourtofuttarakhand.gov.in/pages/display/221-honble-the-chief-justice|title=Hon'ble the Chief Justice: Hon'ble the Chief Justice|last=Dehradun|first=NIC, Uttarakhand State Unit|website=highcourtofuttarakhand.gov.in|access-date=2018-11-04|archive-url=https://web.archive.org/web/20190410221213/http://highcourtofuttarakhand.gov.in/pages/display/221-honble-the-chief-justice|archive-date=10 अप्रैल 2019|url-status=dead}}</ref> |[[उत्तराखण्ड|उत्तराखंड]] | |'''मनोज कुमार गुप्ता''' |पुरुष |{{dts|format=dmy|2026|1|10}}<br /><small>({{ayd|2026|1|10}})</small> |{{dts|format=dmy|2026|10|8}}<br /><small>({{ayd|2026|10|8}})</small> |{{ayd|2026|1|10|2026|10|8|duration=on}} |[[सूर्यकांत (न्यायाधीश)|सूर्यकांत]] |[[इलाहाबाद उच्च न्यायालय|इलाहाबाद]] !10<br /><small>''{{dts|2026|6|21|format=dmy}}<br /> से ''</small> |{{dts|format=dmy|2013|4|12}}<br /><small>({{ayd|2013|4|12}}</small>) |[[अल्तमास कबीर]] | |} ''' कुंजी ''' * '''{{Note label|†|†|†}}कार्यवाहक मुख्य न्यायाधीश''' '''वरिष्ठता क्रमांक में बदलाव की तारीखें (S.R.):''' <small>'''{{dts|format=dmy|2026|3|6}} -''' '''मनिन्द्र मोहन श्रीवास्तव (मद्रास के मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|3|5}} को सेवानिवृत्त हुए। (S.R. 1)</small> <small>'''{{dts|format=dmy|2026|6|21}} -''' '''सुजॉय पॉल (कलकत्ता के मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|6|20}} को सेवानिवृत्त हुए। (S.R. 3)</small> <small>'''{{dts|format=dmy|2026|7|12}} -''' '''[[मीनाक्षी मदन राय]] (पटना की मुख्य न्यायाधीश)''' {{dts|format=dmy|2026|7|11}} को सेवानिवृत्त हुई। (S.R. 43)</small> ==इन्हें भी देखें== *[[भारत के मुख्य न्यायाधीश]] *[[भारत का उच्चतम न्यायालय]] *[[भारतीय सर्वोच्च न्यायालय के वर्तमान न्यायधीशगणों की सूची]] ==सन्दर्भ== i0poc0zs60ew1tijh0lug2if30w6n3q सदस्य वार्ता:अनुज साव22 3 1109703 6587022 6558798 2026-07-18T08:12:06Z SM7 89247 /* Content Removal */ नया अनुभाग 6587022 wikitext text/x-wiki {{साँचा:सहायता|realName=|name=AnujShaw22}} -- [[सदस्य:नया सदस्य सन्देश|नया सदस्य सन्देश]] ([[सदस्य वार्ता:नया सदस्य सन्देश|वार्ता]]) 20:13, 26 नवम्बर 2019 (UTC) == अंग्रेजी विकिपीडिया से कॉपी करके लेख बनाते समय == नमस्ते अनुज जी, कृपया [https://hi.wikipedia.org/w/index.php?title=%E0%A4%97%E0%A5%80%E0%A4%A4%E0%A4%BE_%E0%A4%B8%E0%A5%87%E0%A4%A8&type=revision&diff=5503018&oldid=5493461 इस संपादन] को देखें। अंग्रेजी विकिपीडिया पर कुछ साँचे लेख के आरंभ में जोड़े जाते हैं जिनका हिंदी विकिपीडिया पर कोई उपयोग नहीं, कृपया उन्हें यहाँ न शामिल करें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 04:16, 3 अप्रैल 2022 (UTC) == [[:आचार्य जगदीश चंद्र बोस कॉलेज|आचार्य जगदीश चंद्र बोस कॉलेज]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:आचार्य जगदीश चंद्र बोस कॉलेज|आचार्य जगदीश चंद्र बोस कॉलेज]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/आचार्य जगदीश चंद्र बोस कॉलेज|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/आचार्य जगदीश चंद्र बोस कॉलेज]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीयता</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। [[सदस्य:Mnhrdng|मनोहर ]] ([[सदस्य वार्ता:Mnhrdng|वार्ता]]) 00:00, 9 जून 2022 (UTC) == [[:सोफिया दलीप सिंह|सोफिया दलीप सिंह]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:सोफिया दलीप सिंह|सोफिया दलीप सिंह]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#ल4|मापदंड ल4]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#ल4|ल4]]{{*}} प्रतिलिपि लेख'''</center> इस मापदंड के अंतर्गत वो लेख आते हैं जो किसी पुराने लेख की प्रतिलिपि हैं। इसमें वे लेख भी आते हैं जो किसी ऐसे विषय पर बनाए गए हैं जिनपर पहले से लेख मौजूद है और पुराना लेख नए लेख से बेहतर है। कृपया लेख बनाने से पहले उस शीर्षक के लिये [[विशेष:Search|खोज]] कर लिया करें। यदि आप इस विषय पर और लिखना चाहते हैं तो मूल लेख पर लिखें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="color:green;">☆★</span>[[user:संजीव कुमार|<u><span style="color:Magenta;">संजीव कुमार</span></u>]] ([[User talk:संजीव कुमार|<span style="color:blue;">✉✉</span>]]) 20:39, 1 मई 2025 (UTC) == संपादनोत्सव के नियम का पालन करें == :प्रिय अनुज साव जी। संपादनोत्सव में आपका शामिल होना प्रसंशनीय है लेकिन उसके नियमों का पालन भी करें। आपने एक दिन में अधिकतम पांच लेखों के चुनने के नियम का अतिक्रमण किया है। आपने पाँच से ज्यादा लेख चुने हैं। आप स्वयं इसे ठीक कर लें अन्यथा हमें इसे हटाना पड़ेगा। --[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 01:09, 1 जून 2026 (UTC) ::नमस्ते सर, ::संपादनोत्सव के नियमों की ओर मेरा ध्यान आकर्षित करने के लिए धन्यवाद। मेरा इरादा किसी भी नियम का उल्लंघन करने का नहीं था। मैं यह स्पष्ट करना चाहता हूँ कि मैंने शुरुआत में नियमानुसार केवल 5 लेख ही लिखे थे, लेकिन तकनीकी समस्या के कारण वे 'फाउंटेन' (Fountain) टूल पर सबमिट नहीं हो पा रहा था। फाउंटेन टूल द्वारा सबमिशन स्वीकार न करने की वजह से ही मैं असमंजस में पड़ गया और मैंने आगे अन्य लेख बनाना प्रारंभ कर दिया। ::मेरे द्वारा बनाए गए वे 5 प्रारंभिक लेख, जो टूल पर सबमिट नहीं हो रहे हैं, उनका विवरण निम्नलिखित है: ::1. पीटर हैंडके (22:40, 31 मई 2026 UTC) ::2. अब्दुलरज्जाक गुरनाह (22:40, 31 मई 2026 UTC) ::3. अंतरराष्ट्रीय शांति ब्यूरो (22:36, 31 मई 2026 UTC) ::4. रेड क्रॉस की अंतर्राष्ट्रीय समिति (22:36, 31 मई 2026 UTC) ::5. नाथन सोदरब्लोम (22:36, 31 मई 2026 UTC) ::कृपया मेरा मार्गदर्शन करें कि फाउंटेन टूल पर आ रही इस सबमिशन समस्या का समाधान कैसे किया जा सकता है, ताकि मेरे ये प्रारंभिक पाँचों लेख सफलतापूर्वक दर्ज हो सकें एवं आप कृपया अतिरिक्त लेख को हटा दें। ::सहयोग के लिए धन्यवाद सर। [[सदस्य:अनुज साव22|अनुज साव22]] ([[सदस्य वार्ता:अनुज साव22|वार्ता]]) 01:35, 1 जून 2026 (UTC) :::संपादनोत्सव १ जून से शुरु है। ३१ मई के लेख इसी कारण जमा नहीं हो रहे होंगे। अभी तो १ जून के पांच लेख आपने जमा कर दिया है। आगे से कोई समस्या नहीं आनी चाहिए। यदि अब भी कोई समस्या हो तो जरूर लिखें। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 23:40, 1 जून 2026 (UTC) == Content Removal == अनुज साव22 जी, आप लेखों से सामग्री हटा रहे हैं, क्या कारण है?--[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 08:12, 18 जुलाई 2026 (UTC) 38rcmdicqoati2zyk7w04u4s4f0xw11 बेनीपट्टी 0 1149247 6586919 5118851 2026-07-17T18:26:20Z ~2026-40054-98 936740 /* */ 6586919 wikitext text/x-wiki {{Infobox settlement |name = बेनीपट्टी |native_name = <small>Benipatti</small> |pushpin_label = बेनीपट्टी |pushpin_map = India Bihar |coordinates = {{coord|26.44|85.91|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = [[भारत के ज़िले|ज़िला]] |subdivision_name = [[मधुबनी ज़िला]] |subdivision_type2 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name2 = [[बिहार]] |subdivision_type3 = देश |subdivision_name3= {{IND}} |population_total = |population_as_of = 2001 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''बेनीपट्टी''' (Benipatti) [[भारत]] के [[बिहार]] राज्य के [[मिथिलांचल]] क्षेत्र [[मधुबनी ज़िले]] में स्थित एक शहर है।<ref>"[https://books.google.com/books?id=RQeAAAAAMAAJ Tourism and Its Prospects in Bihar and Jharkhand] {{Webarchive|url=https://web.archive.org/web/20130411085305/http://books.google.com/books?id=RQeAAAAAMAAJ |date=11 अप्रैल 2013 }}," Kamal Shankar Srivastava, Sangeeta Prakashan, 2003</ref><ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> Bhola Paswan Shastri [Inter and Degree] College Babhangama Bihariganj Madhepura is a popular College in Madhepura District.It is affiliated from B.S.E.B(63023),B.B.O.S.E[Bihar Board of Open Schooling and Examination PATNA](CZ19200001),N.I.O.S DELHI(030049)AND[030050].Principal-Atulesh Verma(Babul Ji).Coordinator-Akhilesh Kumar,Ratnesh Kumar,Sunil Devi,Nageshwar lal Das,Madan Mohan etc.Director-Dinanath Prabodh[1980].Gandhi Gyan Mandir Babhangama Bihariganj Madhepura And Arya Samaj Rajni Babhangama Bihariganj Madhepura From Affiliated. == इन्हें भी देखें == * [[मधुबनी ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधुबनी जिला]] [[श्रेणी:मधुबनी ज़िले के नगर]] juxmnyw4jvsbsetiq0wcrdoikaipcbh 6586920 6586919 2026-07-17T18:39:21Z चाहर धर्मेंद्र 703114 [[Special:Contributions/~2026-40054-98|~2026-40054-98]] ([[User talk:~2026-40054-98|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586919|6586919]] को पूर्ववत किया 6586920 wikitext text/x-wiki {{Infobox settlement |name = बेनीपट्टी |native_name = <small>Benipatti</small> |pushpin_label = बेनीपट्टी |pushpin_map = India Bihar |coordinates = {{coord|26.44|85.91|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = [[भारत के ज़िले|ज़िला]] |subdivision_name = [[मधुबनी ज़िला]] |subdivision_type2 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name2 = [[बिहार]] |subdivision_type3 = देश |subdivision_name3= {{IND}} |population_total = |population_as_of = 2001 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''बेनीपट्टी''' (Benipatti) [[भारत]] के [[बिहार]] राज्य के [[मिथिलांचल]] क्षेत्र [[मधुबनी ज़िले]] में स्थित एक शहर है।<ref>"[https://books.google.com/books?id=RQeAAAAAMAAJ Tourism and Its Prospects in Bihar and Jharkhand] {{Webarchive|url=https://web.archive.org/web/20130411085305/http://books.google.com/books?id=RQeAAAAAMAAJ |date=11 अप्रैल 2013 }}," Kamal Shankar Srivastava, Sangeeta Prakashan, 2003</ref><ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधुबनी ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधुबनी जिला]] [[श्रेणी:मधुबनी ज़िले के नगर]] tizmvbp1975urotc1upceet6zhdfjla बिहारीगंज 0 1149320 6586915 6498732 2026-07-17T18:21:21Z ~2026-40054-98 936740 /* */ 6586915 wikitext text/x-wiki {{Infobox settlement |name = बिहारीगंज |other_name = Bihariganj |image = |image_caption = |pushpin_label = बिहारीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.735833|86.979167|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 135534 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''बिहारीगंज''' (Bihariganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> Bhola Paswan Shastri [Inter and Degree] College Babhangama Bihariganj Madhepura is a popular College in Madhepura District.It is affiliated from B.S.E.B(63023),B.B.O.S.E[Bihar Board of Open Schooling and Examination PATNA](CZ19200001),N.I.O.S DELHI(030049)AND[030050].Principal-Atulesh Verma(Babul Ji).Coordinator-Akhilesh Kumar,Ratnesh Kumar,Sunil Devi,Nageshwar lal Das,Madan Mohan etc.Director-Dinanath Prabodh[1980].Gandhi Gyan Mandir Babhangama Bihariganj Madhepura And Arya Samaj Rajni Babhangama Bihariganj Madhepura From Affiliated. == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] 4e2sibs8mtx301xe2td77z0mpdk0aiy 6586925 6586915 2026-07-17T18:43:47Z चाहर धर्मेंद्र 703114 [[Special:Contributions/~2026-40054-98|~2026-40054-98]] ([[User talk:~2026-40054-98|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586915|6586915]] को पूर्ववत किया 6586925 wikitext text/x-wiki {{Infobox settlement |name = बिहारीगंज |other_name = Bihariganj |image = |image_caption = |pushpin_label = बिहारीगंज |pushpin_map = India Bihar |coordinates = {{coord|25.735833|86.979167|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 135534 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''बिहारीगंज''' (Bihariganj) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक नगर है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधेपुरा ज़िले के नगर]] nybavkgwb3l5beg0cbrzpv2f6r6wkx0 वार्ता:खेतसिंह खंगार 1 1151279 6586994 6510407 2026-07-18T05:40:21Z ~2026-40351-11 936786 /* */ 6586994 wikitext text/x-wiki {{Old AfD multi |date=2 जनवरी 2024 |result='''रखा''' |page=खेतसिंह खंगार}} {{वार्ता शीर्षक}} bilkul satya hai maharaja khet Singh khangar ka janm chudashma saurashtra junagadh raja ke ra katav 2 ke yahan hua tha nissandeh maharaja khet Singh judev ji chandravanshi Rajput hain ==शीर्षक बदलाव== क्या में इसका टाइटल बदल सकता हूँ। <small>— इस [[विकिपीडिया:हस्ताक्षर|अहस्ताक्षरित]] संदेश के लेखक हैं -[[सदस्य:आज़ाद अंकित हिन्दू|आज़ाद अंकित हिन्दू]] ([[सदस्य वार्ता:आज़ाद अंकित हिन्दू|वार्ता]] • [[विशेष:Contributions/आज़ाद अंकित हिन्दू|योगदान]]){{#if:|&#32;{{{2}}}|}}</small><!-- साँचा:अहस्ताक्षरित --> :{{ping|आज़ाद अंकित हिन्दू}} जी, आप इसे क्यों बदलना चाहते हैं? कारण और बदल कर किया जाने वाला सुझावित नाम बतायें; उचित होने पर बदलाव किया जा सकता है। धन्यवाद। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 20:59, 11 अप्रैल 2020 (UTC) जी नही आप इससे कोई छेड़ छाड़ नही कर सकते यदि करना चाहते है तो पहले मुझ तक इसको पहुंचाये यदि वह उचित होगा तो में आपको अनुमति दे सकता हूँ [[सदस्य:आज़ाद अंकित हिन्दू|आज़ाद अंकित हिन्दू]] ([[सदस्य वार्ता:आज़ाद अंकित हिन्दू|वार्ता]]) 08:28, 20 अप्रैल 2020 (UTC) :@[[सदस्य:आज़ाद अंकित हिन्दू|आज़ाद अंकित हिन्दू]] आपके पास कोई सबूत है की ये काल्पनिक है । यदि काल्पनिक है तो आप उस सत्य को लिखे ताकि सभी को हकीकत का पता चले । [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:42, 3 मार्च 2024 (UTC) :@[[सदस्य:आज़ाद अंकित हिन्दू|आज़ाद अंकित हिन्दू]] ये सरासर गलत किसी की जाती धर्म पे संदेह करना । या उसे गलत ठहराना [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:43, 3 मार्च 2024 (UTC) :@[[सदस्य:आज़ाद अंकित हिन्दू|आज़ाद अंकित हिन्दू]] किसी ने सही कहा है हिजड़े वो भी होते जो तालिया बजाकर और साड़ी पहन कर भीख मांगते है । हिजड़े वो हैं । जो हिंदू हो कर हिंदुओ का विरोध करते हैं। [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:45, 3 मार्च 2024 (UTC) == शीघ्र हटाने पर चर्चा == इस पृष्ठ को अर्थहीन होने के कारण नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[सदस्य:अनुनाद सिंह|अनुनाद सिंह]] ([[सदस्य वार्ता:अनुनाद सिंह|वार्ता]]) 02:17, 24 अगस्त 2022 (UTC) : "खेतसिंह खंगार" कोई अर्थहीन नाम न्हीं है। ये भारतीय इतिहस के प्रसिद्ध राज हैं। उल्लेखनीयता सन्देह से परे है। इस प्र्ष्ट को न हटायें। इसका सुधार करें और करायें। --[[सदस्य:अनुनाद सिंह|अनुनाद सिंह]] ([[सदस्य वार्ता:अनुनाद सिंह|वार्ता]]) 02:17, 24 अगस्त 2022 (UTC) ::यह सत्यहै कृपया इस पेज को न हटाए [[विशेष:योगदान/2409:4043:2B9E:574C:FB68:FB50:E0F:137D|2409:4043:2B9E:574C:FB68:FB50:E0F:137D]] ([[सदस्य वार्ता:2409:4043:2B9E:574C:FB68:FB50:E0F:137D|वार्ता]]) 21:12, 13 जनवरी 2024 (UTC) == शीघ्र हटाने पर चर्चा == इस पृष्ठ को शीघ्र नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[सदस्य:AMITSINGH10|AMITSINGH10]] ([[सदस्य वार्ता:AMITSINGH10|वार्ता]]) यह सत्य घटना पर आधारित है तथा इसको हटाया नही जाना चाहिए यह भारतीय इतिहास है भारतीय घरोहर है == शीघ्र हटाने पर चर्चा == इस पृष्ठ को शीघ्र नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[विशेष:योगदान/2409:4043:2B9E:574C:FB68:FB50:E0F:137D|2409:4043:2B9E:574C:FB68:FB50:E0F:137D]] ([[सदस्य वार्ता:2409:4043:2B9E:574C:FB68:FB50:E0F:137D|वार्ता]]) 21:08, 13 जनवरी 2024 (UTC) :@[[सदस्य:2409:4043:2B9E:574C:FB68:FB50:E0F:137D|2409:4043:2B9E:574C:FB68:FB50:E0F:137D]] हा बिलकुल सही इसे नही हटाना चाहिए [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:39, 3 मार्च 2024 (UTC) {{सही}}यह पेज सत्य है कृपया इसको ना हटाए == शीघ्र हटाने पर चर्चा == इस पृष्ठ को शीघ्र नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[विशेष:योगदान/2409:4043:2B9E:574C:FB68:FB50:E0F:137D|2409:4043:2B9E:574C:FB68:FB50:E0F:137D]] ([[सदस्य वार्ता:2409:4043:2B9E:574C:FB68:FB50:E0F:137D|वार्ता]]) 21:13, 13 जनवरी 2024 (UTC) :@[[सदस्य:2409:4043:2B9E:574C:FB68:FB50:E0F:137D|2409:4043:2B9E:574C:FB68:FB50:E0F:137D]] इसे न हटाया जाए जब तक कोई उनके तरफ से सबूत न मिले की यह काल्पनिक है । [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:40, 3 मार्च 2024 (UTC) {{सही}}यह पेज सत्य है कृपया इसको ना हटाए == कुछ भी हटाया न जाए इसमें सब सही लिखा था महाराजा खेतसिंह खंगार वंश के महान प्रतापी राजा (शासक) थे । जिन्होंने पृथ्वीराज चौहान के साथ कई युद्ध भी लड़े है । यकीन भी है तो चंद्रबरदाई द्वारा लिखित पृथ्वीराज रासो में यह प्रमाण है की खेतसिंह जी के उनके साथ क्या संबंध थे । चंद्रबरदाई ने अपने पृथ्वीराज रासो में खेत सिंह को बजरंग बीर कहा है । == जूनागढ़ के शाही परिवार में रूढ़ देव जी के पुत्र रा खंगार जी के पुत्र महाराजा खेतसिंह जी पृथ्वीराज चौहान के साथ दिल्ली आ कर उनके सेना पति वा सामंत के रूप में कार्य किया । अन्य जानकारी आप हमारे किलो में जा कर किसी से पूछ सकते है और चंद्रबरदाई द्वारा लिखित पृथ्वीराज रासो में भी पढ़ सकते है। और आग और सुहागा भी आप पढ़ सकते हो । [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:37, 3 मार्च 2024 (UTC) == इस पृष्ठ को नही हटाना चाहिए == यह शूरवीरों की धरोहर है यदि इसे हटाया गया तो देश के सभी क्षत्रिय जाति का अपमान होगा । [[विशेष:योगदान/2409:4089:AB82:52F8:0:0:CE8A:3C10|2409:4089:AB82:52F8:0:0:CE8A:3C10]] ([[सदस्य वार्ता:2409:4089:AB82:52F8:0:0:CE8A:3C10|वार्ता]]) 16:47, 3 मार्च 2024 (UTC) == महाराज खेत सिंह खंगार राजपूत है == मेदिनी राय खंगार राजपूत थे तो महाराजा खेत सिंह खंगार भी राजपूत है लेकिन कुछ लोगों को इन्हें राजपूत कहने में दिक्कत होती है [[विशेष:योगदान/&#126;2026-21027-7|&#126;2026-21027-7]] ([[सदस्य वार्ता:&#126;2026-21027-7|talk]]) 19:14, 10 जनवरी 2026 (UTC) 5tlzowx04ra2iylzzgyptb5ni446xk8 ज्वालामुखी, काँगड़ा 0 1197164 6586982 5049749 2026-07-18T03:48:12Z चाहर धर्मेंद्र 703114 टैग {{[[साँचा:विलय|विलय]]}} लेख में जोड़ा जा रहा ([[वि:ट्विंकल|ट्विंकल]]) 6586982 wikitext text/x-wiki {{विलय|ज्वालामुखी मंदिर|date=जुलाई 2026}} {{Infobox settlement |name = ज्वालामुखी |native_name = <small>Jawalamukhi</small> |pushpin_label = ज्वालामुखी |pushpin_map = India Himachal Pradesh |coordinates = {{coord|31.8756|76.3243|display=inline, title}} |pushpin_map_caption = हिमाचल प्रदेश में स्थिति |subdivision_type = [[भारत के ज़िले|ज़िला]] |subdivision_name = [[काँगड़ा ज़िला]] |subdivision_type2 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name2 = [[हिमाचल प्रदेश]] |subdivision_type3 = देश |subdivision_name3= {{IND}} |population_total = 5361 |population_as_of = 2011 |demographics_type1 = भाषा |demographics1_title1= प्रचलित भाषाएँ |demographics1_info1= [[पहाड़ी भाषाएँ|पहाड़ी]], [[हिन्दी]] |timezone1 = [[भारतीय मानक समय]] |utc_offset1 = +5:30 |image_skyline = Jawala_Ji_Temple.jpg |image_alt = Jwalamukhi Devi Temple |image_caption = ज्वाला जी का मंदिर }} '''ज्वालामुखी''' (Jawalamukhi) [[भारत]] के [[हिमाचल प्रदेश]] राज्य के [[काँगड़ा ज़िले]] में स्थित एक नगर है। यहाँ एक [[शक्ति पीठ]] स्थित है।<ref>"[https://books.google.com/books?id=Jl0qdJYU3LgC Himachal Pradesh, Development Report], State Development Report Series, Planning Commission of India, Academic Foundation, 2005, ISBN 9788171884452</ref><ref>"[https://books.google.com/books?id=3pYqDwAAQBAJ Himachal Pradesh District Factbook]," RK Thukral, Datanet India Pvt Ltd, 2017, ISBN 9789380590448</ref> == इन्हें भी देखें == * [[शक्ति पीठ]] * [[काँगड़ा ज़िला]] * [[हिमाचल प्रदेश]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:हिमाचल प्रदेश के शहर]] [[श्रेणी:काँगड़ा ज़िला]] [[श्रेणी:काँगड़ा ज़िले के नगर]] [[श्रेणी:शक्ति पीठ]] obr4wmizyrlyb1zh40cue6xknyo9arn 6586983 6586982 2026-07-18T03:49:25Z चाहर धर्मेंद्र 703114 टैग {{[[साँचा:में विलय|में विलय]]}} लेख में जोड़ा जा रहा ([[वि:ट्विंकल|ट्विंकल]]) 6586983 wikitext text/x-wiki {{में विलय|ज्वालामुखी मंदिर|date=जुलाई 2026}} {{विलय|ज्वालामुखी मंदिर|date=जुलाई 2026}} {{Infobox settlement |name = ज्वालामुखी |native_name = <small>Jawalamukhi</small> |pushpin_label = ज्वालामुखी |pushpin_map = India Himachal Pradesh |coordinates = {{coord|31.8756|76.3243|display=inline, title}} |pushpin_map_caption = हिमाचल प्रदेश में स्थिति |subdivision_type = [[भारत के ज़िले|ज़िला]] |subdivision_name = [[काँगड़ा ज़िला]] |subdivision_type2 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name2 = [[हिमाचल प्रदेश]] |subdivision_type3 = देश |subdivision_name3= {{IND}} |population_total = 5361 |population_as_of = 2011 |demographics_type1 = भाषा |demographics1_title1= प्रचलित भाषाएँ |demographics1_info1= [[पहाड़ी भाषाएँ|पहाड़ी]], [[हिन्दी]] |timezone1 = [[भारतीय मानक समय]] |utc_offset1 = +5:30 |image_skyline = Jawala_Ji_Temple.jpg |image_alt = Jwalamukhi Devi Temple |image_caption = ज्वाला जी का मंदिर }} '''ज्वालामुखी''' (Jawalamukhi) [[भारत]] के [[हिमाचल प्रदेश]] राज्य के [[काँगड़ा ज़िले]] में स्थित एक नगर है। यहाँ एक [[शक्ति पीठ]] स्थित है।<ref>"[https://books.google.com/books?id=Jl0qdJYU3LgC Himachal Pradesh, Development Report], State Development Report Series, Planning Commission of India, Academic Foundation, 2005, ISBN 9788171884452</ref><ref>"[https://books.google.com/books?id=3pYqDwAAQBAJ Himachal Pradesh District Factbook]," RK Thukral, Datanet India Pvt Ltd, 2017, ISBN 9789380590448</ref> == इन्हें भी देखें == * [[शक्ति पीठ]] * [[काँगड़ा ज़िला]] * [[हिमाचल प्रदेश]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:हिमाचल प्रदेश के शहर]] [[श्रेणी:काँगड़ा ज़िला]] [[श्रेणी:काँगड़ा ज़िले के नगर]] [[श्रेणी:शक्ति पीठ]] m4ze3qm3da5kcahw5ysicd7oyc4w2x8 6586986 6586983 2026-07-18T03:51:01Z चाहर धर्मेंद्र 703114 6586986 wikitext text/x-wiki {{में विलय|ज्वालामुखी मंदिर|date=जुलाई 2026}} {{Infobox settlement |name = ज्वालामुखी |native_name = <small>Jawalamukhi</small> |pushpin_label = ज्वालामुखी |pushpin_map = India Himachal Pradesh |coordinates = {{coord|31.8756|76.3243|display=inline, title}} |pushpin_map_caption = हिमाचल प्रदेश में स्थिति |subdivision_type = [[भारत के ज़िले|ज़िला]] |subdivision_name = [[काँगड़ा ज़िला]] |subdivision_type2 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name2 = [[हिमाचल प्रदेश]] |subdivision_type3 = देश |subdivision_name3= {{IND}} |population_total = 5361 |population_as_of = 2011 |demographics_type1 = भाषा |demographics1_title1= प्रचलित भाषाएँ |demographics1_info1= [[पहाड़ी भाषाएँ|पहाड़ी]], [[हिन्दी]] |timezone1 = [[भारतीय मानक समय]] |utc_offset1 = +5:30 |image_skyline = Jawala_Ji_Temple.jpg |image_alt = Jwalamukhi Devi Temple |image_caption = ज्वाला जी का मंदिर }} '''ज्वालामुखी''' (Jawalamukhi) [[भारत]] के [[हिमाचल प्रदेश]] राज्य के [[काँगड़ा ज़िले]] में स्थित एक नगर है। यहाँ एक [[शक्ति पीठ]] स्थित है।<ref>"[https://books.google.com/books?id=Jl0qdJYU3LgC Himachal Pradesh, Development Report], State Development Report Series, Planning Commission of India, Academic Foundation, 2005, ISBN 9788171884452</ref><ref>"[https://books.google.com/books?id=3pYqDwAAQBAJ Himachal Pradesh District Factbook]," RK Thukral, Datanet India Pvt Ltd, 2017, ISBN 9789380590448</ref> == इन्हें भी देखें == * [[शक्ति पीठ]] * [[काँगड़ा ज़िला]] * [[हिमाचल प्रदेश]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:हिमाचल प्रदेश के शहर]] [[श्रेणी:काँगड़ा ज़िला]] [[श्रेणी:काँगड़ा ज़िले के नगर]] [[श्रेणी:शक्ति पीठ]] 8x2fexnxfryvpqc3j19l0ip4r6r895u सदस्य वार्ता:Ajayt146 3 1207281 6586971 6577034 2026-07-18T03:28:33Z चाहर धर्मेंद्र 703114 सूचना: [[:संजीव कुमार (सामाजिक उद्यमी)]] को शीघ्र हटाने का नामांकन 6586971 wikitext text/x-wiki {{साँचा:सहायता|realName=|name=Ajayt146}} -- [[सदस्य:नया सदस्य सन्देश|नया सदस्य सन्देश]] ([[सदस्य वार्ता:नया सदस्य सन्देश|वार्ता]]) 13:46, 20 अगस्त 2020 (UTC) == [[:डॉ. आशुतोष वर्मा|डॉ. आशुतोष वर्मा]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:डॉ. आशुतोष वर्मा|डॉ. आशुतोष वर्मा]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/डॉ. आशुतोष वर्मा|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/डॉ. आशुतोष वर्मा]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीयता से संदर्भित प्रायाप्त स्त्रोत नहीं।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ।--<b>[[User:Mala chaubey|<font color="FF990">माला चौबे</font>]]</b><sup>[[User talk:Mala chaubey|<font color="green">वार्ता</font>]]</sup> 12:56, 24 मार्च 2021 (UTC) https://m.facebook.com/DrAshutoshVermaLko/?ref=page_internal&mt_nav=0 This is for profile verification of Dr. Ashutosh verma If needed i will provide other ref. [[सदस्य:Ajayt146|Ajayt146]] ([[सदस्य वार्ता:Ajayt146|वार्ता]]) 11:19, 1 अप्रैल 2021 (UTC) == [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#व7|मापदंड व7]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#व7|व7]]{{*}} साफ़ प्रचार'''</center> इसमें वे सभी पृष्ठ आते हैं जिनमें केवल प्रचार है, चाहे वह किसी व्यक्ति-विशेष का हो, किसी समूह का, किसी प्रोडक्ट का, अथवा किसी कंपनी का। इसमें प्रचार वाले केवल वही लेख आते हैं जिन्हें ज्ञानकोष के अनुरूप बनाने के लिये शुरू से दोबारा लिखना पड़ेगा। यदि आप इस विषय पर लेख बनाना चाहते हैं तो पहले कृपया जाँच लें कि विषय [[वि:उल्लेखनीयता|उल्लेखनीय]] है या नहीं। यदि आपको लगता है कि इस नीति के अनुसार विषय उल्लेखनीय है तो कृपया लेख में उपयुक्त रूप से स्रोत देकर उल्लेखनीयता स्पष्ट करें। इसके अतिरिक्त याद रखें कि विकिपीडिया पर लेख [[वि:शैली मार्गदर्शक|ज्ञानकोष की शैली]] में लिखे जाने चाहियें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 18:14, 25 जून 2026 (UTC) :इस पृष्ठ को साफ़ प्रचार होने के कारण नहीं हटाया जाना चाहिये क्योंकि: :१. उल्लेखनीयता (Notability): यह लेख किसी अज्ञात व्यक्ति या व्यावसायिक लाभ के लिए नहीं बनाया गया है। संजीव कुमार भारत के एक बेहद प्रतिष्ठित और स्थापित सामाजिक उद्यमी हैं, जिन्हें २०१३ में वैश्विक संस्था 'अशोका' (Ashoka) द्वारा 'अशोका फेलो' (Ashoka Fellow) चुना गया था। इसके अतिरिक्त, वे २०१९ में वर्ल्ड इकोनॉमिक फोरम और श्वाब फाउंडेशन द्वारा "सोशल एंटरप्रेन्योर ऑफ द ईयर" के शीर्ष फाइनलिस्ट रह चुके हैं। विकिपीडिया के मानदंडों के अनुसार राष्ट्रीय एवं अंतर्राष्ट्रीय पुरस्कार प्राप्त व्यक्ति उल्लेखनीयता की श्रेणी में आते हैं। :२. विश्वसनीय स्वतंत्र स्रोत (Reliable Secondary Sources): लेख में दी गई संपूर्ण जानकारी और आंकड़े पूरी तरह से प्रमाणित हैं। इसके संदर्भ के रूप में देश के प्रतिष्ठित समाचार पत्र 'नवभारत टाइम्स' (Navbharat Times) की विस्तृत ग्राउंड रिपोर्ट, बिल एंड मेलिंडा गेट्स फाउंडेशन (Bill & Melinda Gates Foundation) की आधिकारिक ग्रांट डिक्लेरेशन और केआईआईटी (KIIT) विश्वविद्यालय के शैक्षणिक संदर्भ शामिल किए गए हैं। ये सभी स्रोत स्वतंत्र और निष्पक्ष हैं, जो इसे किसी भी प्रकार के 'स्व-प्रचार' (Self-promotion) या विज्ञापन से अलग करते हैं। :३. जनहित और सामाजिक प्रभाव: संजीव कुमार द्वारा स्थापित 'द गोट ट्रस्ट' और 'पशु सखी' मॉडल भारत के १८ राज्यों में २५,००० से अधिक ग्रामीण महिलाओं को रोजगार और १० लाख से अधिक गरीब परिवारों को आजीविका सुरक्षा प्रदान कर रहा है। ऐसे सामाजिक और जमीनी सुधारों से जुड़े व्यक्तित्व की जीवनी ज्ञानकोश (Encyclopedia) के पाठकों के लिए अत्यंत प्रासंगिक और आवश्यक है। :<nowiki>यदि इस लेख की भाषा या शैली में कहीं भी सुधारात्मक बदलाव की आवश्यकता महसूस होती है, तो इसे हटाने के बजाय विकिपीडिया की तटस्थ नीति (NPOV) के तहत सुधारा जाना चाहिए। कृपया इस हटाने के नामांकन को रद्द करने की कृपा करें। --~~~~</nowiki> [[सदस्य:Ajayt146|Ajayt146]] ([[सदस्य वार्ता:Ajayt146|वार्ता]]) 14:19, 26 जून 2026 (UTC) == [[:पवन भाई गुप्ता|पवन भाई गुप्ता]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:पवन भाई गुप्ता|पवन भाई गुप्ता]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#व7|मापदंड व7]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#व7|व7]]{{*}} साफ़ प्रचार'''</center> इसमें वे सभी पृष्ठ आते हैं जिनमें केवल प्रचार है, चाहे वह किसी व्यक्ति-विशेष का हो, किसी समूह का, किसी प्रोडक्ट का, अथवा किसी कंपनी का। इसमें प्रचार वाले केवल वही लेख आते हैं जिन्हें ज्ञानकोष के अनुरूप बनाने के लिये शुरू से दोबारा लिखना पड़ेगा। यदि आप इस विषय पर लेख बनाना चाहते हैं तो पहले कृपया जाँच लें कि विषय [[वि:उल्लेखनीयता|उल्लेखनीय]] है या नहीं। यदि आपको लगता है कि इस नीति के अनुसार विषय उल्लेखनीय है तो कृपया लेख में उपयुक्त रूप से स्रोत देकर उल्लेखनीयता स्पष्ट करें। इसके अतिरिक्त याद रखें कि विकिपीडिया पर लेख [[वि:शैली मार्गदर्शक|ज्ञानकोष की शैली]] में लिखे जाने चाहियें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 18:17, 25 जून 2026 (UTC) :इस पृष्ठ को साफ़ प्रचार (मापदंड व7) होने के कारण नहीं हटाया जाना चाहिये क्योंकि: :१. उल्लेखनीयता (Notability): यह पृष्ठ किसी व्यावसायिक लाभ, विज्ञापन या व्यक्तिगत स्व-प्रचार के उद्देश्य से नहीं बनाया गया है। पवन भाई गुप्ता एक सार्वजनिक/सामाजिक व्यक्तित्व हैं, जिनका अपने क्षेत्र या समाज में एक विशिष्ट योगदान रहा है। विकिपीडिया के मानदंडों के अनुसार, यदि कोई व्यक्ति सार्वजनिक जीवन में प्रभाव रखता है, तो वह उल्लेखनीयता की श्रेणी में आ सकता है। :२. सुधार की संभावना (Scope for Cleanup): मापदंड व7 केवल उन लेखों पर लागू होता है जिन्हें ज्ञानकोष के अनुरूप बनाने के लिए "शुरू से दोबारा" लिखना पड़े। यदि इस लेख की वर्तमान भाषा शैली प्रचार जैसी या त्रुटिपूर्ण लग रही है, तो इसे सीधे हटाने के बजाय इसमें सुधार करने का अवसर दिया जाना चाहिए। मैं विकिपीडिया की तटस्थ दृष्टिकोण (NPOV) नीति के तहत इसकी भाषा को पूरी तरह से ज्ञानकोश (Encyclopedic) की शैली में बदलने के लिए तैयार हूँ। :३. विश्वसनीय स्रोतों को जोड़ना: लेख में दी गई जानकारियों को प्रमाणित करने के लिए जल्द ही स्वतंत्र और विश्वसनीय द्वितीयक स्रोत (Secondary Sources) और समाचार संदर्भ जोड़े जा रहे हैं, जिससे इसकी प्रामाणिकता स्पष्ट हो जाएगी। :<nowiki>कृपया इस पृष्ठ को शीघ्र हटाने के बजाय रचनात्मक सुधार (Cleanup) करने का समय देने की कृपा करें और इस नामांकन को रद्द करें। --~~~~</nowiki> [[सदस्य:Ajayt146|Ajayt146]] ([[सदस्य वार्ता:Ajayt146|वार्ता]]) 04:37, 26 जून 2026 (UTC) == [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/संजीव कुमार (सामाजिक उद्यमी)|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/संजीव कुमार (सामाजिक उद्यमी)]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीय नहीं।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 14:39, 29 जून 2026 (UTC) :::'''विरोध (Keep):''' मैं इस नामांकन का पूर्ण विरोध करता हूँ। यह दावा पूरी तरह से निराधार है कि विषय उल्लेखनीय नहीं है। विकिपीडिया के सामान्य उल्लेखनीयता दिशानिर्देशों ([[विकिपीडिया:उल्लेखनीयता]]) के अनुसार, यदि किसी विषय को स्वतंत्र और विश्वसनीय स्रोतों में महत्वपूर्ण कवरेज प्राप्त हुआ है, तो वह उल्लेखनीय माना जाता है। :इस लेख में व्यक्ति की उल्लेखनीयता को साबित करने के लिए कई स्वतंत्र, स्थापित और राष्ट्रीय स्तर के मीडिया घरानों के संदर्भ (References) जोड़े गए हैं: :* '''स्रोतों का प्रमाण:''' लेख में देश के प्रतिष्ठित समाचार पत्र 'नवभारत टाइम्स' (Navbharat Times) की विस्तृत ग्राउंड रिपोर्ट, 'न्यूज़१८ हिंदी' (News18) पर उत्तर प्रदेश सरकार के साथ हस्ताक्षरित आधिकारिक समझौता ज्ञापन (MoU) की रिपोर्ट और 'दैनिक भास्कर' जैसी राष्ट्रीय मीडिया के पुख्ता संदर्भ शामिल हैं। :* '''व्यक्तिगत उल्लेखनीयता:''' संजीव कुमार कोई सामान्य व्यक्ति नहीं हैं, बल्कि वे २०१३ के 'अशोका फेलो' (Ashoka Fellow) हैं और २०१९ में वर्ल्ड इकोनॉमिक फोरम की सहयोगी संस्था श्वाब फाउंडेशन द्वारा "सोशल एंटरप्रेन्योर ऑफ द ईयर" के शीर्ष फाइनलिस्ट रह चुके हैं, जो उनके राष्ट्रीय व अंतर्राष्ट्रीय प्रभाव को दर्शाता है। :चूंकि ये सभी स्रोत स्वतंत्र (Independent), विश्वसनीय (Reliable) और द्वितीयक (Secondary) हैं, इसलिए यह लेख उल्लेखनीयता के सभी मापदंडों को पूरी तरह पूरा करता है। अतः इस नामांकन को तुरंत बंद किया जाना चाहिए। --[[सदस्य:Ajayt146|Ajayt146]] ([[सदस्य वार्ता:Ajayt146|वार्ता]]) 03:23, 2 जुलाई 2026 (UTC) == [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:संजीव कुमार (सामाजिक उद्यमी)|संजीव कुमार (सामाजिक उद्यमी)]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#व7|मापदंड व7]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#व7|व7]]{{*}} साफ़ प्रचार'''</center> इसमें वे सभी पृष्ठ आते हैं जिनमें केवल प्रचार है, चाहे वह किसी व्यक्ति-विशेष का हो, किसी समूह का, किसी प्रोडक्ट का, अथवा किसी कंपनी का। इसमें प्रचार वाले केवल वही लेख आते हैं जिन्हें ज्ञानकोष के अनुरूप बनाने के लिये शुरू से दोबारा लिखना पड़ेगा। यदि आप इस विषय पर लेख बनाना चाहते हैं तो पहले कृपया जाँच लें कि विषय [[वि:उल्लेखनीयता|उल्लेखनीय]] है या नहीं। यदि आपको लगता है कि इस नीति के अनुसार विषय उल्लेखनीय है तो कृपया लेख में उपयुक्त रूप से स्रोत देकर उल्लेखनीयता स्पष्ट करें। इसके अतिरिक्त याद रखें कि विकिपीडिया पर लेख [[वि:शैली मार्गदर्शक|ज्ञानकोष की शैली]] में लिखे जाने चाहियें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 03:28, 18 जुलाई 2026 (UTC) l0pvcnhq15ckv1lppsl2y9ker7d7wbn साँचा:Automatic category TOC 10 1212094 6586840 4933215 2026-07-17T16:28:11Z SM7 89247 SM7 ने पृष्ठ [[साँचा:CatAutoTOC]] को [[साँचा:Automatic category TOC]] पर स्थानांतरित किया 4933215 wikitext text/x-wiki <includeonly><!-- # TOC, depending on category size # <= 100 pages → no TOC # 101–1200 pages → {{Category TOC}} # > 1200 pages → {{Large category TOC}} -->{{Category other|<!-- ################################################################################# #### This is a category page, so generate a TOC if needed. #### #### #### #### Use a sub-template [[Template:CatAutoTOC/core]], so that we never have #### #### more than one call to the [[WP:EXPENSIVE]] function {{PAGESINCATEGORY}} #### ################################################################################# -->{{CatAutoTOC/core<!-- -->|pagecount={{PAGESINCATEGORY:{{#invoke:HTMLDecode | HTMLDecode | text={{PAGENAME}} }}|R}}<!-- -->|align = {{{align|}}}<!-- -->|top = {{{top|}}}<!-- -->|numerals = {{{numerals|}}}<!-- -->|uppercase = {{{uppercase|}}}<!-- -->|lowercase = {{{lowercase|}}}<!-- -->}}<!-- -->}}<!-- -->{{Template other<!-- -->|<!-- ################################################################################# #### This page is a template, so categorise it #### #### in [[Category:Templates using CatAutoTOC]] ... #### #### #### #### ... unless it is a /doc, /testcases or /sandbox #### #### #### #### There is no point categorising every sub-page of the same template #### ################################################################################# -->{{#if: {{Str endswith|{{PAGENAME}}|/doc}}{{Str endswith|{{PAGENAME}}|/testcases}}{{Str endswith|{{PAGENAME}}|/sandbox}}<!-- -->|<!-- ### Don't categorise /doc, /testcases or /sandbox pages -->|<!-- ### Not a /doc, /testcases or /sandbox page, so categorise it -->[[Category:Templates using CatAutoTOC]]<!-- -->}}<!-- -->}}</includeonly><noinclude> {{Documentation}} [[Category:Wikipedia CatAutoTOC]] </noinclude> to6tg86k0y2xm30shk1ulz4uxrz8fnn साँचा:Automatic category TOC/core 10 1212097 6586842 4933219 2026-07-17T16:28:11Z SM7 89247 SM7 ने पृष्ठ [[साँचा:CatAutoTOC/core]] को [[साँचा:Automatic category TOC/core]] पर स्थानांतरित किया 4933219 wikitext text/x-wiki <includeonly><!-- # Using a sub-template, so that we never have have more than one call to the [[WP:EXPENSIVE]] function {{PAGESINCATEGORY}} # # TOC, depending on category size # <= 100 pages → no TOC # 101–1200 pages → {{Category TOC}} # > 1200 pages → {{Large category TOC}} ########################################################################### # NOTE: The sort key {{PAGENAME}} is used on all the tracking categories # # to override any {{DEFAULTSORT}} used in the category # ########################################################################### -->{{#ifexpr: {{{pagecount}}} > 1200 <!-- -->|<!-- # > 1200, so large TOC -->{{Large category TOC<!-- -->|CatAutoTOC=yes<!-- -->|pagecount={{{pagecount}}}<!-- -->}}<!-- -->[[Category:CatAutoTOC generates Large category TOC|{{PAGENAME}}]]<!-- -->|<!-- # < 1200, so check again -->{{#ifexpr: {{{pagecount}}} > 100<!-- -->|<!-- # > 100, so std TOC -->{{Category TOC<!-- -->|pagecount={{{pagecount}}}<!-- -->|CatAutoTOC=yes<!-- -->|align = {{#if: {{{align|}}} | {{{align}}} |left}}<!-- -->|top = {{#if: {{{top|}}} | {{{top}}} |yes}}<!-- -->|numerals = {{#if: {{{numerals|}}} | {{{numerals}}} |group}}<!-- -->|uppercase = {{#if: {{{uppercase|}}} | {{{uppercase}}} |yes}}<!-- -->|lowercase = {{#if: {{{lowercase|}}} | {{{lowercase}}} |no}}<!-- -->}}<!-- -->[[Category:CatAutoTOC generates standard Category TOC|{{PAGENAME}}]]<!-- -->|<!-- # <= 100, so no TOC -->[[Category:CatAutoTOC generates no TOC|{{PAGENAME}}]]<!-- -->}}<!-- -->}}<!-- -->{{#ifeq: {{{pagecount}}} | 0 <!-- -->|[[Category:CatAutoTOC on pages where PAGESINCATEGORY returns zero|{{PAGENAME}}]]<!-- -->}}<!-- --></includeonly><noinclude> {{Documentation|Template:{{ROOTPAGENAME}}/doc}} [[Category:Wikipedia CatAutoTOC]] </noinclude> jnmzzzt0m4hyjl786x3cwu9te3c25zi वार्ता:हाइड्रोजन पेरॉक्साइड 1 1253591 6586760 5097230 2026-07-17T14:45:27Z ~2026-40125-50 936701 /* HIII */ नया अनुभाग 6586760 wikitext text/x-wiki {{वार्ता शीर्षक}} == HIII == DM,S ,MDSM [[विशेष:योगदान/&#126;2026-40125-50|&#126;2026-40125-50]] ([[सदस्य वार्ता:&#126;2026-40125-50|वार्ता]]) 14:45, 17 जुलाई 2026 (UTC) izzovyvx1iknr8ok52wj40mebdzw6ig 6586909 6586760 2026-07-17T17:59:21Z SM7 89247 [[Special:Contributions/~2026-40125-50|~2026-40125-50]] ([[User talk:~2026-40125-50|Talk]]) के संपादनों को हटाकर [[User:रोहित साव27|रोहित साव27]] के आखिरी अवतरण को पूर्ववत किया 5097230 wikitext text/x-wiki {{वार्ता शीर्षक}} gpfqtvs6ipx5lqjhtgasmr80u6e2dmv सिंगारपुर, मधेपुरा 0 1266479 6586918 5147798 2026-07-17T18:24:29Z ~2026-40054-98 936740 /* */ 6586918 wikitext text/x-wiki {{Infobox settlement |name = सिंगारपुर |other_name = Singhesware |image = |image_caption = |pushpin_label = Singhesware |pushpin_map = India Bihar |coordinates = {{coord|25.674|86.844|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 4968 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} (Singhesware) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक गाँव है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> Bhola Paswan Shastri [Inter and Degree] College Babhangama Bihariganj Madhepura is a popular College in Madhepura District.It is affiliated from B.S.E.B(63023),B.B.O.S.E[Bihar Board of Open Schooling and Examination PATNA](CZ19200001),N.I.O.S DELHI(030049)AND[030050].Principal-Atulesh Verma(Babul Ji).Coordinator-Akhilesh Kumar,Ratnesh Kumar,Sunil Devi,Nageshwar lal Das,Madan Mohan etc.Director-Dinanath Prabodh[1980].Gandhi Gyan Mandir Babhangama Bihariganj Madhepura And Arya Samaj Rajni Babhangama Bihariganj Madhepura From Affiliated. == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के गाँव]] [[श्रेणी:मधेपुरा ज़िले के गाँव]] ex5l4entgq1fc1mgitxhqjmv533cujg 6586921 6586918 2026-07-17T18:41:38Z चाहर धर्मेंद्र 703114 [[Special:Contributions/~2026-40054-98|~2026-40054-98]] ([[User talk:~2026-40054-98|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586918|6586918]] को पूर्ववत किया 6586921 wikitext text/x-wiki {{Infobox settlement |name = सिंगारपुर |other_name = Singhesware |image = |image_caption = |pushpin_label = Singhesware |pushpin_map = India Bihar |coordinates = {{coord|25.674|86.844|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधेपुरा ज़िला]] |population_total = 4968 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} (Singhesware) [[भारत]] के [[बिहार]] राज्य के [[मधेपुरा जिला|मधेपुरा ज़िले]] में स्थित एक गाँव है।<ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C|date=18 जनवरी 2017}}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधेपुरा जिला|मधेपुरा ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{बिहार}} [[श्रेणी:मधेपुरा जिला]] [[श्रेणी:बिहार के गाँव]] [[श्रेणी:मधेपुरा ज़िले के गाँव]] 73otsaex4tcruunpuylkajx1mdpog0p मधेपुर 0 1266701 6586916 5146142 2026-07-17T18:22:28Z ~2026-40054-98 936740 /* */ 6586916 wikitext text/x-wiki :''इस से भिन्न मधेपुरा नगर के बारे में जानकारी के लिए [[मधेपुरा]] का लेख देखें'' {{Infobox settlement |name = मधेपुर |other_name = Madhepur |image = |image_caption= |pushpin_label = मधेपुर |pushpin_map = India Bihar |coordinates = {{coord|26.176|86.380|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधुबनी ज़िला]] |population_total = 25831 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मधेपुर''' (Madhepur) [[भारत]] के [[बिहार]] राज्य के [[मधुबनी ज़िले]] में स्थित एक नगर है।<ref>"[https://books.google.com/books?id=RQeAAAAAMAAJ Tourism and Its Prospects in Bihar and Jharkhand] {{Webarchive|url=https://web.archive.org/web/20130411085305/http://books.google.com/books?id=RQeAAAAAMAAJ |date=11 अप्रैल 2013 }}," Kamal Shankar Srivastava, Sangeeta Prakashan, 2003</ref><ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C |date=18 जनवरी 2017 }}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> Bhola Paswan Shastri [Inter and Degree] College Babhangama Bihariganj Madhepura is a popular College in Madhepura District.It is affiliated from B.S.E.B(63023),B.B.O.S.E[Bihar Board of Open Schooling and Examination PATNA](CZ19200001),N.I.O.S DELHI(030049)AND[030050].Principal-Atulesh Verma(Babul Ji).Coordinator-Akhilesh Kumar,Ratnesh Kumar,Sunil Devi,Nageshwar lal Das,Madan Mohan etc.Director-Dinanath Prabodh[1980].Gandhi Gyan Mandir Babhangama Bihariganj Madhepura And Arya Samaj Rajni Babhangama Bihariganj Madhepura From Affiliated. == इन्हें भी देखें == * [[मधुबनी ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधुबनी जिला]] [[श्रेणी:मधुबनी ज़िले के नगर]] iihctufpcj3kp1vqzzzdp9ltm532jnu 6586926 6586916 2026-07-17T18:44:11Z चाहर धर्मेंद्र 703114 [[Special:Contributions/~2026-40054-98|~2026-40054-98]] ([[User talk:~2026-40054-98|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586916|6586916]] को पूर्ववत किया 6586926 wikitext text/x-wiki :''इस से भिन्न मधेपुरा नगर के बारे में जानकारी के लिए [[मधेपुरा]] का लेख देखें'' {{Infobox settlement |name = मधेपुर |other_name = Madhepur |image = |image_caption= |pushpin_label = मधेपुर |pushpin_map = India Bihar |coordinates = {{coord|26.176|86.380|display=inline, title}} |pushpin_map_caption = बिहार में स्थिति |subdivision_type = देश |subdivision_name = {{IND}} |subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] |subdivision_name1 = [[बिहार]] |subdivision_type2 = [[भारत के ज़िले|ज़िला]] |subdivision_name2 = [[मधुबनी ज़िला]] |population_total = 25831 |population_as_of = 2011 |demographics_type1 = भाषाएँ |demographics1_title1= प्रचलित |demographics1_info1= [[हिन्दी]], [[मैथिली भाषा|मैथिली]] |timezone1 = [[भारतीय मानक समय|भामस]] |utc_offset1 = +5:30 }} '''मधेपुर''' (Madhepur) [[भारत]] के [[बिहार]] राज्य के [[मधुबनी ज़िले]] में स्थित एक नगर है।<ref>"[https://books.google.com/books?id=RQeAAAAAMAAJ Tourism and Its Prospects in Bihar and Jharkhand] {{Webarchive|url=https://web.archive.org/web/20130411085305/http://books.google.com/books?id=RQeAAAAAMAAJ |date=11 अप्रैल 2013 }}," Kamal Shankar Srivastava, Sangeeta Prakashan, 2003</ref><ref>"[https://books.google.com/books?id=dSZ987-0Fb8C Bihar Tourism: Retrospect and Prospect] {{Webarchive|url=https://web.archive.org/web/20170118113423/https://books.google.com/books?id=dSZ987-0Fb8C |date=18 जनवरी 2017 }}," Udai Prakash Sinha and Swargesh Kumar, Concept Publishing Company, 2012, ISBN 9788180697999</ref><ref>"[https://books.google.com/books?id=MMmNVZ4mP98C Revenue Administration in India: A Case Study of Bihar]," G. P. Singh, Mittal Publications, 1993, ISBN 9788170993810</ref> == इन्हें भी देखें == * [[मधुबनी ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} [[श्रेणी:बिहार के शहर]] [[श्रेणी:मधुबनी जिला]] [[श्रेणी:मधुबनी ज़िले के नगर]] e084wboewq9rmtbj6p72siv649hj4x3 सदस्य वार्ता:Akil Akbar Sayyad 3 1398057 6586930 5720936 2026-07-17T19:56:41Z Akil Akbar Sayyad 728412 Akil Akbar Sayyad 6586930 wikitext text/x-wiki {{साँचा:सहायता|realName=|name=Akil Akbar Sayyad}} -- [[सदस्य:नया सदस्य सन्देश|नया सदस्य सन्देश]] ([[सदस्य वार्ता:नया सदस्य सन्देश|वार्ता]]) 18:22, 15 सितंबर 2022 (UTC) Akil Akbar Sayyad Professional Summary Civil Engineer and independent researcher specializing in theoretical physics and the "Theory of Everything." Research Focus: Theoretical physics; unification of fundamental forces. Publications: Zenodo. Education Bachelor of Civil Engineering: Vishwabharti Academy’s College of Engineering, Ahmednagar. Higher Secondary Education: Babuji Avhad Mahavidyalaya, Pathardi cxastgo7n0fxq1m8c2oumk6vzjfgxv2 6586933 6586930 2026-07-17T21:10:03Z ~2026-40420-72 936748 /* Biography: Akil Akbar Sayyad */ नया अनुभाग 6586933 wikitext text/x-wiki {{साँचा:सहायता|realName=|name=Akil Akbar Sayyad}} -- [[सदस्य:नया सदस्य सन्देश|नया सदस्य सन्देश]] ([[सदस्य वार्ता:नया सदस्य सन्देश|वार्ता]]) 18:22, 15 सितंबर 2022 (UTC) Akil Akbar Sayyad Professional Summary Civil Engineer and independent researcher specializing in theoretical physics and the "Theory of Everything." Research Focus: Theoretical physics; unification of fundamental forces. Publications: Zenodo. Education Bachelor of Civil Engineering: Vishwabharti Academy’s College of Engineering, Ahmednagar. Higher Secondary Education: Babuji Avhad Mahavidyalaya, Pathardi == Biography: Akil Akbar Sayyad == @ [[विशेष:योगदान/&#126;2026-40420-72|&#126;2026-40420-72]] ([[सदस्य वार्ता:&#126;2026-40420-72|वार्ता]]) 21:10, 17 जुलाई 2026 (UTC) slkbqh8hv4glaayk7ruri58xuiqty2y सरूंड माता 0 1433774 6586849 6586734 2026-07-17T16:35:49Z SM7 89247 [[Special:Contributions/Sarund mata mandir|Sarund mata mandir]] ([[User talk:Sarund mata mandir|Talk]]) के संपादनों को हटाकर [[User:PQR01|PQR01]] के आखिरी अवतरण को पूर्ववत किया 5767782 wikitext text/x-wiki {{स्रोतहीन|date=फ़रवरी 2023}} '''सरुंड माता''' मंदिर, जिसे '''सरुंड माता''' और '''चिलाय माता के नाम से भी जाना जाता है, भारत के''' राजस्थान राज्य में नीम का थाना से कोटपूतली राजमार्ग पर कोटपुतली के पास '''सरुंड''' गांव में स्थित है । यूं तो पूरा राजस्थान मंदिरों और लोक देवताओं के स्थानों से भरा पड़ा है, लेकिन हर साल चैत्र और शारदीय नवरात्र में यहां श्रद्धालुओं की खासी भीड़ उमड़ती है। राजस्थान समेत देश के कोने-कोने से हजारों श्रद्धालु मां के दर्शन के लिए आते हैं। महाभारत काल का यह मंदिर ग्राम '''सरुंड''' में अरावली पहाड़ी पर स्थित है। जिसे पहुंचने के लिए 284 सीढ़ियां चढ़नी पड़ती हैं। मंदिर में माता की मूर्ति को पांडवों ने अपने गुप्त काल में स्थापित किया था। मंदिर में स्थापित '''चिलाय''' देवी मां की मूर्ति पांडवों और उनके राजवंश तंवर या तोमर राजपूत की कुल देवी का एक रूप है, '''तंवर राजपूत''' समाज के लोग मां '''सरुंड''' को कुलदेवी के रूप में पूजते हैं। मूर्ति एक गुफा में स्थापित है । किवदंती है कि 16वीं शताब्दी में मुगल बादशाह अकबर यह सुनकर ऊंटों पर शराब का जखीरा लेकर आया था पर हर बार मंदिर के आधे ऊपर जाने पर ऊंटों पर रखी शराब खाली हो जाती थी। यह देखकर मुगल बादशाह अकबर को झुकना पड़ा। इसके बाद अकबर ने मंदिर का जीर्णोद्धार करवाया। मूर्ति पहाड़ी पर एक गुफा में स्थित है। यहां तक ​​पहुंचने के लिए सात द्वारों से होकर गुजरना पड़ता है। पहले यहां एक ही द्वार हुआ करता था। जबकि शेष छह द्वार मुगलकालीन हैं। कहा जाता है कि इन द्वारों का निर्माण अकबर ने करवाया था। यह सिलसिला औरंगजेब के समय भी जारी रहा। माता के पदचिह्न मान्यता है कि रात के समय माता रानी सिंह पर सवार होकर स्वयं भ्रमण करती हैं। मंदिर की चढ़ाई के दौरान माता के पदचिह्न आधे आते हैं जबकि मंदिर की परिक्रमा पुजारियों के अनुसार 52 भेरूजी, 56 कलवा, 64 योगिनी, 9 नरसिंह और 5 पीर क्षेत्रपाल के रूप में स्थित है। इसके अलावा 500 साल पुरानी बावड़ी, छतरी और गुफा के बीच में हनुमान जी का ऐतिहासिक मंदिर भी स्थित है। तीन दिवसीय मेला भरता है नवरात्रि की सप्तमी से नवमी तक यहां तीन दिवसीय मेला भरता है। साथ ही सप्तमी की रात्रि को जागरण भी किया जाता है। इसके अलावा हर माह की शुक्ल अष्टमी को भी जागरण का आयोजन किया जाता है। मंदिर का वार्षिक उत्सव हर साल वैशाख शुक्ल षष्ठी से नवमी तक लगातार चार दिनों तक आयोजित किया जाता है। j0kmvvwq0fnflifz1crv7zwzo4gnlak 6586861 6586849 2026-07-17T16:53:21Z Sarund mata mandir 936514 व्याकरण सुधार 6586861 wikitext text/x-wiki श्री सरुंद माता मंदिर के मुख्य पुजारी श्री गोविन्द पुजारी जी है! 8003239279 मंदिर श्री देवी जी (सरुंड माता ) ट्रस्ट के सचिव है। {{स्रोतहीन|date=फ़रवरी 2023}} '''सरुंड माता''' मंदिर, जिसे '''सरुंड माता''' और '''चिलाय माता के नाम से भी जाना जाता है, भारत के''' राजस्थान राज्य में नीम का थाना से कोटपूतली राजमार्ग पर कोटपुतली के पास '''सरुंड''' गांव में स्थित है । यूं तो पूरा राजस्थान मंदिरों और लोक देवताओं के स्थानों से भरा पड़ा है, लेकिन हर साल चैत्र और शारदीय नवरात्र में यहां श्रद्धालुओं की खासी भीड़ उमड़ती है। राजस्थान समेत देश के कोने-कोने से हजारों श्रद्धालु मां के दर्शन के लिए आते हैं। महाभारत काल का यह मंदिर ग्राम '''सरुंड''' में अरावली पहाड़ी पर स्थित है। जिसे पहुंचने के लिए 284 सीढ़ियां चढ़नी पड़ती हैं। मंदिर में माता की मूर्ति को पांडवों ने अपने गुप्त काल में स्थापित किया था। मंदिर में स्थापित '''चिलाय''' देवी मां की मूर्ति पांडवों और उनके राजवंश तंवर या तोमर राजपूत की कुल देवी का एक रूप है, '''तंवर राजपूत''' समाज के लोग मां '''सरुंड''' को कुलदेवी के रूप में पूजते हैं। मूर्ति एक गुफा में स्थापित है । किवदंती है कि 16वीं शताब्दी में मुगल बादशाह अकबर यह सुनकर ऊंटों पर शराब का जखीरा लेकर आया था पर हर बार मंदिर के आधे ऊपर जाने पर ऊंटों पर रखी शराब खाली हो जाती थी। यह देखकर मुगल बादशाह अकबर को झुकना पड़ा। इसके बाद अकबर ने मंदिर का जीर्णोद्धार करवाया। मूर्ति पहाड़ी पर एक गुफा में स्थित है। यहां तक ​​पहुंचने के लिए सात द्वारों से होकर गुजरना पड़ता है। पहले यहां एक ही द्वार हुआ करता था। जबकि शेष छह द्वार मुगलकालीन हैं। कहा जाता है कि इन द्वारों का निर्माण अकबर ने करवाया था। यह सिलसिला औरंगजेब के समय भी जारी रहा। माता के पदचिह्न मान्यता है कि रात के समय माता रानी सिंह पर सवार होकर स्वयं भ्रमण करती हैं। मंदिर की चढ़ाई के दौरान माता के पदचिह्न आधे आते हैं जबकि मंदिर की परिक्रमा पुजारियों के अनुसार 52 भेरूजी, 56 कलवा, 64 योगिनी, 9 नरसिंह और 5 पीर क्षेत्रपाल के रूप में स्थित है। इसके अलावा 500 साल पुरानी बावड़ी, छतरी और गुफा के बीच में हनुमान जी का ऐतिहासिक मंदिर भी स्थित है। तीन दिवसीय मेला भरता है नवरात्रि की सप्तमी से नवमी तक यहां तीन दिवसीय मेला भरता है। साथ ही सप्तमी की रात्रि को जागरण भी किया जाता है। इसके अलावा हर माह की शुक्ल अष्टमी को भी जागरण का आयोजन किया जाता है। मंदिर का वार्षिक उत्सव हर साल वैशाख शुक्ल षष्ठी से नवमी तक लगातार चार दिनों तक आयोजित किया जाता है। absfapf9gezk7svlef3a99hzxox6dmc 6586875 6586861 2026-07-17T17:09:48Z चाहर धर्मेंद्र 703114 [[Special:Contributions/Sarund mata mandir|Sarund mata mandir]] ([[User talk:Sarund mata mandir|वार्ता]]) द्वारा किए गए बदलाव [[Special:Diff/6586861|6586861]] को पूर्ववत किया 6586875 wikitext text/x-wiki {{स्रोतहीन|date=फ़रवरी 2023}} '''सरुंड माता''' मंदिर, जिसे '''सरुंड माता''' और '''चिलाय माता के नाम से भी जाना जाता है, भारत के''' राजस्थान राज्य में नीम का थाना से कोटपूतली राजमार्ग पर कोटपुतली के पास '''सरुंड''' गांव में स्थित है । यूं तो पूरा राजस्थान मंदिरों और लोक देवताओं के स्थानों से भरा पड़ा है, लेकिन हर साल चैत्र और शारदीय नवरात्र में यहां श्रद्धालुओं की खासी भीड़ उमड़ती है। राजस्थान समेत देश के कोने-कोने से हजारों श्रद्धालु मां के दर्शन के लिए आते हैं। महाभारत काल का यह मंदिर ग्राम '''सरुंड''' में अरावली पहाड़ी पर स्थित है। जिसे पहुंचने के लिए 284 सीढ़ियां चढ़नी पड़ती हैं। मंदिर में माता की मूर्ति को पांडवों ने अपने गुप्त काल में स्थापित किया था। मंदिर में स्थापित '''चिलाय''' देवी मां की मूर्ति पांडवों और उनके राजवंश तंवर या तोमर राजपूत की कुल देवी का एक रूप है, '''तंवर राजपूत''' समाज के लोग मां '''सरुंड''' को कुलदेवी के रूप में पूजते हैं। मूर्ति एक गुफा में स्थापित है । किवदंती है कि 16वीं शताब्दी में मुगल बादशाह अकबर यह सुनकर ऊंटों पर शराब का जखीरा लेकर आया था पर हर बार मंदिर के आधे ऊपर जाने पर ऊंटों पर रखी शराब खाली हो जाती थी। यह देखकर मुगल बादशाह अकबर को झुकना पड़ा। इसके बाद अकबर ने मंदिर का जीर्णोद्धार करवाया। मूर्ति पहाड़ी पर एक गुफा में स्थित है। यहां तक ​​पहुंचने के लिए सात द्वारों से होकर गुजरना पड़ता है। पहले यहां एक ही द्वार हुआ करता था। जबकि शेष छह द्वार मुगलकालीन हैं। कहा जाता है कि इन द्वारों का निर्माण अकबर ने करवाया था। यह सिलसिला औरंगजेब के समय भी जारी रहा। माता के पदचिह्न मान्यता है कि रात के समय माता रानी सिंह पर सवार होकर स्वयं भ्रमण करती हैं। मंदिर की चढ़ाई के दौरान माता के पदचिह्न आधे आते हैं जबकि मंदिर की परिक्रमा पुजारियों के अनुसार 52 भेरूजी, 56 कलवा, 64 योगिनी, 9 नरसिंह और 5 पीर क्षेत्रपाल के रूप में स्थित है। इसके अलावा 500 साल पुरानी बावड़ी, छतरी और गुफा के बीच में हनुमान जी का ऐतिहासिक मंदिर भी स्थित है। तीन दिवसीय मेला भरता है नवरात्रि की सप्तमी से नवमी तक यहां तीन दिवसीय मेला भरता है। साथ ही सप्तमी की रात्रि को जागरण भी किया जाता है। इसके अलावा हर माह की शुक्ल अष्टमी को भी जागरण का आयोजन किया जाता है। मंदिर का वार्षिक उत्सव हर साल वैशाख शुक्ल षष्ठी से नवमी तक लगातार चार दिनों तक आयोजित किया जाता है। j0kmvvwq0fnflifz1crv7zwzo4gnlak नृत्य गोपाल दास 0 1497250 6586753 6586695 2026-07-17T12:54:26Z Ram900 936620 /* पृष्ठभूमि */ छूटी हुई जानकारी जोड़ी 6586753 wikitext text/x-wiki {{Infobox Hindu leader | name = महंत नृत्य गोपाल दास <br> Mahant Nritya Gopal Das | image = The Prime Minister, Shri Narendra Modi with Mahant Nrityagopal Das at the foundation stone laying ceremony of ‘Shree Ram Janmabhoomi Mandir’, in Ayodhya, Uttar Pradesh on August 05, 2020 (cropped).jpg | religion = [[हिन्दू]] | birth_date = {{birth date and age|df=yes|1938|6|11}} | birth_place = केरहाला/काहोला गांव, [[मथुरा जिला]], [[भारत]] | birth_name = | guru = महंत राम मनोहर दास | honors = *श्री मणि राम दास महाराज के आध्यात्मिक उत्तराधिकारी, श्री मणि राम दास छावनी के छठे महंत, *रामानंदी (बैरागी) संत *प्रमुख, [[राम जन्मभूमि न्यास]] *अध्यक्ष, [[श्री राम जन्मभूमि तीर्थ क्षेत्र]] | website = | caption = राम मंदिर भूमि पूजा के दौरान महंत नृत्य गोपाल दास }} '''महंत नृत्य गोपाल दास''' (जन्म - ११ जून १९३८) अयोध्या के सबसे बड़े मंदिर, मणि राम दास की छावनी के प्रमुख और [[राम जन्मभूमि न्यास]] और[[श्री राम जन्मभूमि तीर्थ क्षेत्र]] के प्रमुख हैं, जो [[अयोध्या]] में राम मंदिर के निर्माण के लिए गठित संस्थान हैं। वे [[श्री कृष्ण जन्मस्थान सेवा संस्थान]] के भी प्रमुख हैं।<ref name="Live 2022 q183">{{cite web | last=Live | first=ABP | title=महंत नृत्य गोपाल दास का हेल्थ बुलेटिन जारी, जानिए- अब कैसी है उनकी तबीयत | website=hindi | date=6 November 2022 | url=https://www.abplive.com/states/up-uk/ayodhya-shri-ram-janmabhoomi-teerth-kshetra-chief-mahant-nritya-gopal-das-health-update-from-lucknow-medanta-hospital-2253208 | language=hi | access-date=24 November 2023}}</ref> ==पृष्ठभूमि== उनका जन्म ११ जून १९३८ को <ref name="Amar Ujala 2020 c887">{{cite web | title=जानें कौन हैं श्री रामजन्मभूमि न्यास के अध्यक्ष महंत नृत्य गोपालदास | website=Amar Ujala | date=19 February 2020 | url=https://www.amarujala.com/lucknow/read-about-chief-of-ram-temple-trust-mahant-nritya-gopal-das | language=hi | access-date=24 November 2023}}</ref>उत्तर प्रदेश के [[मथुरा जिले]] के केरहाला गांव के एक ब्राह्मण परिवार में हुआ था।<ref name=":0">{{Cite web|last=Uprety|first=Ajay|date=6 November 2019|title=Who is Mahant Nritya Gopal Das, head of Ram Janmabhoomi Nyas|url=https://www.theweek.in/news/india/2019/11/06/who-is-mahant-nritya-gopal-das-head-of-ram-janmabhoomi-nyas.html|access-date=2020-08-13|website=The Week|language=en|publication-date=16 December 2018}}</ref> १९५३ में अपनी दसवीं कक्षा की परीक्षा उत्तीर्ण करने के बाद उन्होंने वाणिज्य की पढ़ाई के लिए मथुरा के एक कॉलेज में प्रवेश लिया, लेकिन अपनी पढ़ाई पूरी करने से पहले, १२ वर्ष की आयु में ही वे अयोध्या चले गए।<ref name=":1">{{Cite web|last=Bakshi|first=Gorky|date=2020-02-20|title=Ram Mandir Trust appoints Nritya Gopal Das as Chairman, Champat Rai as General Secretary|url=https://www.jagranjosh.com/current-affairs/ram-mandir-trust-appoints-nritya-gopal-das-as-chairman-champat-rai-as-general-secretary-1582174592-1|access-date=2020-08-13|website=Jagranjosh.com}}</ref> अयोध्या में, वे महंत राम मनोहर दास के शिष्य बन गए और [[वाराणसी]] में [[संस्कृत विश्वविद्यालय]] से उन्होंने शास्त्री (डिग्री) की उपाधि प्राप्त की। १९६५ में, २७ साल की उम्र में वह श्री मणिराम दास छावनी (छोटी छावनी) के छठे महंत के बाद वे उसके महंत बने। यह मंदिर शहर के प्रमुख धार्मिक और आध्यात्मिक आकर्षणों में से एक है, जहाँ प्रतिदिन महंत नृत्य गोपाल दास सैकड़ों तीर्थयात्रियों से मिलते हैं। उन्हें [[रामायण भवन]] और श्री चार धाम मंदिर सहित मंदिरों के निर्माण का श्रेय दिया जाता है। वह "मणिराम छावनी" चलाते हैं जहां ५०० साधु रहते हैं। वह १९८४ से राम जन्मभूमि आंदोलन से सक्रिय रूप से जुड़े हुए हैं। २००६ में जब रामचन्द्र दास परमहंस की मृत्यु हुई तब उन्होंने [[राम जन्मभूमि न्यास]] के प्रमुख का पद संभाला<ref name="Hebbar 2020 j644">{{cite web | last=Hebbar | first=Nistula | title=Ram temple trust elects Nritya Gopal Das as president | website=The Hindu | date=19 February 2020 | url=https://www.thehindu.com/news/national/nritya-gopal-das-elected-president-champat-rai-general-secretary-of-ram-mandir-trust/article61629265.ece | access-date=24 November 2023}}</ref> और वर्तमान में वह [[श्री राम जन्मभूमि तीर्थ क्षेत्र]] के प्रमुख हैं साथ ही वे [[श्री कृष्ण जन्मभूमि ट्रस्ट]] के प्रमुख भी हैं।<ref>{{Cite news|date=2020-08-13|title=Coronavirus {{!}} Ram temple trust head Mahant Nritya Gopal Das tests positive for COVID-19|language=en-IN|work=The Hindu|url=https://www.thehindu.com/news/national/other-states/coronavirus-ram-temple-trust-head-mahant-nritya-gopal-das-tests-positive-for-covid-19/article32342449.ece|access-date=2020-08-13|issn=0971-751X}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * [https://srjbtkshetra.org/ श्री राम जन्मभूमि तीर्थ क्षेत्र की आधिकारिक वेबसाइट] {{Webarchive|url=https://web.archive.org/web/20200618042300/https://srjbtkshetra.org/ |date=18 जून 2020 }} [[श्रेणी:राम मन्दिर]] [[श्रेणी:उत्तर प्रदेश के लोग]] qyt64wc51qwpi33cpt9fulv7mzaljyf 6586847 6586753 2026-07-17T16:32:29Z SM7 89247 [[Special:Contributions/Ram900|Ram900]] ([[User talk:Ram900|Talk]]) के संपादनों को हटाकर [[User:SM7|SM7]] के आखिरी अवतरण को पूर्ववत किया 6586695 wikitext text/x-wiki {{Infobox Hindu leader | name = महंत नृत्य गोपाल दास <br> Mahant Nritya Gopal Das | image = The Prime Minister, Shri Narendra Modi with Mahant Nrityagopal Das at the foundation stone laying ceremony of ‘Shree Ram Janmabhoomi Mandir’, in Ayodhya, Uttar Pradesh on August 05, 2020 (cropped).jpg | religion = [[हिन्दू]] | birth_date = {{birth date and age|df=yes|1938|6|11}} | birth_place = केरहाला/काहोला गांव, [[मथुरा जिला]], [[भारत]] | birth_name = | guru = महंत राम मनोहर दास | honors = *श्री मणि राम दास महाराज के आध्यात्मिक उत्तराधिकारी, श्री मणि राम दास छावनी के छठे महंत, *रामानंदी (बैरागी) संत *प्रमुख, [[राम जन्मभूमि न्यास]] *अध्यक्ष, [[श्री राम जन्मभूमि तीर्थ क्षेत्र]] | website = | caption = राम मंदिर भूमि पूजा के दौरान महंत नृत्य गोपाल दास }} '''महंत नृत्य गोपाल दास''' (जन्म - ११ जून १९३८) अयोध्या के सबसे बड़े मंदिर, मणि राम दास की छावनी के प्रमुख और [[राम जन्मभूमि न्यास]] और[[श्री राम जन्मभूमि तीर्थ क्षेत्र]] के प्रमुख हैं, जो [[अयोध्या]] में राम मंदिर के निर्माण के लिए गठित संस्थान हैं। वे [[श्री कृष्ण जन्मस्थान सेवा संस्थान]] के भी प्रमुख हैं।<ref name="Live 2022 q183">{{cite web | last=Live | first=ABP | title=महंत नृत्य गोपाल दास का हेल्थ बुलेटिन जारी, जानिए- अब कैसी है उनकी तबीयत | website=hindi | date=6 November 2022 | url=https://www.abplive.com/states/up-uk/ayodhya-shri-ram-janmabhoomi-teerth-kshetra-chief-mahant-nritya-gopal-das-health-update-from-lucknow-medanta-hospital-2253208 | language=hi | access-date=24 November 2023}}</ref> ==पृष्ठभूमि== उनका जन्म ११ जून १९३८ को <ref name="Amar Ujala 2020 c887">{{cite web | title=जानें कौन हैं श्री रामजन्मभूमि न्यास के अध्यक्ष महंत नृत्य गोपालदास | website=Amar Ujala | date=19 February 2020 | url=https://www.amarujala.com/lucknow/read-about-chief-of-ram-temple-trust-mahant-nritya-gopal-das | language=hi | access-date=24 November 2023}}</ref>उत्तर प्रदेश के [[मथुरा जिले]] के केरहाला गांव में हुआ था।<ref name=":0">{{Cite web|last=Uprety|first=Ajay|date=6 November 2019|title=Who is Mahant Nritya Gopal Das, head of Ram Janmabhoomi Nyas|url=https://www.theweek.in/news/india/2019/11/06/who-is-mahant-nritya-gopal-das-head-of-ram-janmabhoomi-nyas.html|access-date=2020-08-13|website=The Week|language=en|publication-date=16 December 2018}}</ref> १९५३ में अपनी दसवीं कक्षा की परीक्षा उत्तीर्ण करने के बाद उन्होंने वाणिज्य की पढ़ाई के लिए मथुरा के एक कॉलेज में प्रवेश लिया, लेकिन अपनी पढ़ाई पूरी करने से पहले, १२ वर्ष की आयु में ही वे अयोध्या चले गए।<ref name=":1">{{Cite web|last=Bakshi|first=Gorky|date=2020-02-20|title=Ram Mandir Trust appoints Nritya Gopal Das as Chairman, Champat Rai as General Secretary|url=https://www.jagranjosh.com/current-affairs/ram-mandir-trust-appoints-nritya-gopal-das-as-chairman-champat-rai-as-general-secretary-1582174592-1|access-date=2020-08-13|website=Jagranjosh.com}}</ref> अयोध्या में, वे महंत राम मनोहर दास के शिष्य बन गए और [[वाराणसी]] में [[संस्कृत विश्वविद्यालय]] से उन्होंने शास्त्री (डिग्री) की उपाधि प्राप्त की। १९६५ में, २७ साल की उम्र में वह श्री मणिराम दास छावनी (छोटी छावनी) के छठे महंत के बाद वे उसके महंत बने। यह मंदिर शहर के प्रमुख धार्मिक और आध्यात्मिक आकर्षणों में से एक है, जहाँ प्रतिदिन महंत नृत्य गोपाल दास सैकड़ों तीर्थयात्रियों से मिलते हैं। उन्हें [[रामायण भवन]] और श्री चार धाम मंदिर सहित मंदिरों के निर्माण का श्रेय दिया जाता है। वह "मणिराम छावनी" चलाते हैं जहां ५०० साधु रहते हैं। वह १९८४ से राम जन्मभूमि आंदोलन से सक्रिय रूप से जुड़े हुए हैं। २००६ में जब रामचन्द्र दास परमहंस की मृत्यु हुई तब उन्होंने [[राम जन्मभूमि न्यास]] के प्रमुख का पद संभाला<ref name="Hebbar 2020 j644">{{cite web | last=Hebbar | first=Nistula | title=Ram temple trust elects Nritya Gopal Das as president | website=The Hindu | date=19 February 2020 | url=https://www.thehindu.com/news/national/nritya-gopal-das-elected-president-champat-rai-general-secretary-of-ram-mandir-trust/article61629265.ece | access-date=24 November 2023}}</ref> और वर्तमान में वह [[श्री राम जन्मभूमि तीर्थ क्षेत्र]] के प्रमुख हैं साथ ही वे [[श्री कृष्ण जन्मभूमि ट्रस्ट]] के प्रमुख भी हैं।<ref>{{Cite news|date=2020-08-13|title=Coronavirus {{!}} Ram temple trust head Mahant Nritya Gopal Das tests positive for COVID-19|language=en-IN|work=The Hindu|url=https://www.thehindu.com/news/national/other-states/coronavirus-ram-temple-trust-head-mahant-nritya-gopal-das-tests-positive-for-covid-19/article32342449.ece|access-date=2020-08-13|issn=0971-751X}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} ==बाहरी कड़ियाँ== * [https://srjbtkshetra.org/ श्री राम जन्मभूमि तीर्थ क्षेत्र की आधिकारिक वेबसाइट] {{Webarchive|url=https://web.archive.org/web/20200618042300/https://srjbtkshetra.org/ |date=18 जून 2020 }} [[श्रेणी:राम मन्दिर]] [[श्रेणी:उत्तर प्रदेश के लोग]] m0kn6a0i31i7wu3146u6mqb0xcogj0b लामिन यमल 0 1540532 6586996 6586676 2026-07-18T05:57:36Z AlphaVictorDelta0107 790236 छोटा सा सुधार किया। 6586996 wikitext text/x-wiki {{Infobox football biography | image = Lamine Yamal a Xina (2025).png | caption = छमाल, 2025 में | full_name = {{nowrap|अल्अमीन छमाल नछ्रावी ईबाना}} | birth_date = {{Birth date and age|2007|7|13|df=y}} | birth_place = [[एस्प्लुगेस डी ल्योब्रेगात]], स्पेन | height = 1.78 मी<ref>{{cite web |url=https://www.fcbarcelona.com/en/football/first-team/players/129404/lamine-yamal-nasraoui-ebana |title=Lamine Yamal |publisher=FC Barcelona |access-date=13 अक्टूबर 2024 |archive-date=12 जनवरी 2026 |archive-url=https://web.archive.org/web/20260112195227/https://www.fcbarcelona.com/en/football/first-team/players/129404/lamine-yamal-nasraoui-ebana |url-status=live }}</ref> | position = [[विंगर (फुटबॉल)|विंगर]] | currentclub = [[एफसी बार्सिलोना|बार्सिलोना]] | clubnumber = 10 | youthyears1 = 2012–2014 | youthclubs1 = ला तोरेता | youthyears2 = 2014–2023 | youthclubs2 = [[एफसी बार्सिलोना (युवा)|बार्सिलोना]] | years1 = 2023 | clubs1 = [[एफसी बार्सिलोना एटलेटिक|बार्सिलोना बी]] | caps1 = 1 | goals1 = 0 | years2 = 2023– | clubs2 = [[एफसी बार्सिलोना|बार्सिलोना]] | caps2 = 101 | goals2 = 30 | nationalyears1 = 2021 | nationalteam1 = [[स्पेन राष्ट्रीय अंडर-15 फुटबॉल टीम|स्पेन अंडर-15]] | nationalcaps1 = 6 | nationalgoals1 = 3 | nationalyears2 = 2022 | nationalteam2 = [[स्पेन राष्ट्रीय अंडर-16 फुटबॉल टीम|स्पेन अंडर-16]] | nationalcaps2 = 4 | nationalgoals2 = 1 | nationalyears3 = 2022–2023 | nationalteam3 = [[स्पेन राष्ट्रीय अंडर-17 फुटबॉल टीम|स्पेन अंडर-17]] | nationalcaps3 = 10 | nationalgoals3 = 8 | nationalyears4 = 2022 | nationalteam4 = [[स्पेन राष्ट्रीय अंडर-19 फुटबॉल टीम|स्पेन अंडर-19]] | nationalcaps4 = 1 | nationalgoals4 = 0 | nationalyears5 = 2023– | nationalteam5 = [[स्पेन राष्ट्रीय फुटबॉल टीम|स्पेन]] | nationalcaps5 = 32 | nationalgoals5 = 7 | medaltemplates = {{MedalSport|पुरुष [[फुटबॉल]]}} {{MedalCountry|{{fb|ESP}}}} {{MedalCompetition|[[यूईएफए यूरोपीय चैम्पियनशिप]]}} {{Medal|W|[[यूईएफए यूरो 2024|2024 जर्मनी]]|}} {{Medal|Comp|[[यूईएफए नेशंस लीग]]}} {{Medal|RU|[[2025 यूईएफए नेशंस लीग फाइनल्स|2025 जर्मनी]]|}} | club-update = 23:11, 22 अप्रैल 2026 (UTC) | nationalteam-update = 23:00, 14 जुलाई 2026 (UTC) | module = {{Infobox person|embed=yes | signature = File:Lamine Yamal (Signature).svg | signature_alt = लामिने यामाल के हस्ताक्षर}} }} '''अल्अमीन छमाल नछ्रावी ईबाना''' (जन्म 13 जुलाई 2007) ये [[कैटलोनिया]] के एक स्पेनिश पेशेवर [[फुटबॉल]]र हैं, जो [[ला लिगा|ला लीगा]] क्लब [[एफ सी बार्सिलोना|बार्सिलोना]] और [[स्पेन राष्ट्रीय फुटबॉल टीम|स्पेन की राष्ट्रीय टीम]] के लिए राइट विंगर के रूप में खेलते हैं।<ref>{{Cite news|url=https://ndtv.in/othersports/lamine-yamal-created-history-spain-beats-france-2-1-to-reach-euro-2024-final-kylian-mbappe-hindi-6073944|title=लामिन यमल ने यूरो कप 2024 में रचा इतिहास, फ्रांस को रौंदकर फाइनल में पहुंची स्पेन, एमबाप्पे का नहीं दिखा जलवा|work=NDTV.in|access-date=11 July 2024|archive-date=11 जुलाई 2024|archive-url=https://web.archive.org/web/20240711163601/https://ndtv.in/othersports/lamine-yamal-created-history-spain-beats-france-2-1-to-reach-euro-2024-final-kylian-mbappe-hindi-6073944|url-status=dead}}</ref> उन्हें दुनिया की सर्वश्रेष्ठ युवा प्रतिभाओं में से एक माना जाता है।<ref name="goalsensation">{{Cite web|url=https://www.goal.com/en/lists/watch-lamine-yamal-history-16-year-old-barcelona-sensation-supercopa-goalscoring-record-osasuna/bltd41eed3f97af8ab6|title=Watch: Lamine Yamal making more history! 16-year-old Barcelona sensation breaks Supercopa goalscoring record after late strike against Osasuna|date=11 January 2024|website=[[Goal (website)|Goal]]|archive-url=https://web.archive.org/web/20240111223729/https://www.goal.com/en/lists/watch-lamine-yamal-history-16-year-old-barcelona-sensation-supercopa-goalscoring-record-osasuna/bltd41eed3f97af8ab6|archive-date=11 January 2024|access-date=10 February 2024}}</ref><ref>{{Cite web|url=https://www.givemesport.com/best-young-players-in-world-football-soccer-ranked/|title=The 25 best young players in world football right now ranked in order|date=1 July 2024|website=Give Me Sport}}</ref><ref name="BBCborn24">[https://www.bbc.co.uk/sport/football/articles/cx82xyynw17o 'A superstar is born' - Yamal's history making moment of 'genius'], Gary Rose, ''BBC Sport'', 10 July 2024</ref><ref>{{Cite web|url=https://zeenews.india.com/hindi/sports/17-year-old-lamine-yamal-breaks-brazil-footballer-pele-record-after-spain-4th-win-in-euro-cup-2024/2337670|title=फुटबॉल में लिखा गया न्यू चैप्टर, 17 साल के खिलाड़ी ने तोड़ा 66 साल पुराना रिकॉर्ड, स्टार फुटबॉलर पेले को पछाड़ा|website=Zee News|language=hi|access-date=2024-07-16}}</ref> == संदर्भ == <references /> == बाहरी कड़ियाँ == * [https://www.laliga.com/en-GB/player/lamine-yamal लामिन यमल] की आधिकारिक वेबसाइट [[श्रेणी:2007 में जन्मे लोग]] [[श्रेणी:जीवित लोग]] [[श्रेणी:फुटबॉल खिलाड़ी]] [[श्रेणी:स्पेन के खिलाड़ी]] [[श्रेणी:स्पेन के मुसलमान]] a3b6se91n7qkg0kgcwe9ckb8x3tnwkz सदस्य वार्ता:Psychologistdrdhalla 3 1578673 6586911 6368143 2026-07-17T18:03:38Z SM7 89247 सूचना: [[:सदस्य:Psychologistdrdhalla]] को शीघ्र हटाने का नामांकन 6586911 wikitext text/x-wiki {{साँचा:सहायता|realName=|name=Psychologistdrdhalla}} -- [[सदस्य:नया सदस्य सन्देश|नया सदस्य सन्देश]] ([[सदस्य वार्ता:नया सदस्य सन्देश|वार्ता]]) 12:33, 24 फ़रवरी 2025 (UTC) . परफेक्शन सिंड्रोम: अवास्तविक मानकों का मनोवैज्ञानिक जाल आज की तेज़ रफ्तार दुनिया में, कई लोग हर क्षेत्र में पूर्णता पाने की अत्यधिक आवश्यकता महसूस करते हैं। इस स्थिति को आमतौर पर परफेक्शन सिंड्रोम कहा जाता है, जो निरंतर तनाव, चिंता और आत्म-संदेह का कारण बन सकता है। वरिष्ठ मनोवैज्ञानिक और विशेष शिक्षक डॉ. देवेंद्र ढल्ला इस मनोवैज्ञानिक स्थिति, इसके कारणों, प्रभावों और संभावित समाधानों पर विस्तार से चर्चा करते हैं। परफेक्शन सिंड्रोम को समझना परफेक्शन सिंड्रोम को अत्यधिक आत्म-आलोचना और असफलता के डर के साथ पूर्णता की अति-अभिलाषा के रूप में पहचाना जाता है। डॉ. ढल्ला बताते हैं कि यह स्थिति सामाजिक दबाव, बचपन की परवरिश और अवास्तविक व्यक्तिगत अपेक्षाओं के कारण उत्पन्न होती है। परफेक्शन सिंड्रोम के कारण 1. सामाजिक दबाव – सोशल मीडिया और सामाजिक मानदंड सफलता को पूर्णता से जोड़ते हैं। 2. माता-पिता की अपेक्षाएँ – बचपन में माता-पिता की उच्च अपेक्षाएँ परफेक्शनिस्ट प्रवृत्ति को जन्म देती हैं। 3. असफलता का डर – गलतियाँ करने का गहरा डर चिंता और टालमटोल प्रवृत्ति को जन्म देता है। 4. व्यक्तित्व गुण – टाइप A व्यक्तित्व वाले लोग परफेक्शनिज्म के प्रति अधिक संवेदनशील होते हैं। परफेक्शन सिंड्रोम के मनोवैज्ञानिक प्रभाव डॉ. देवेंद्र ढल्ला बताते हैं कि उत्कृष्टता प्राप्त करने की इच्छा अच्छी होती है, लेकिन अत्यधिक परफेक्शनिज्म हानिकारक हो सकता है। इसके कुछ नकारात्मक प्रभाव इस प्रकार हैं: चिंता और अवसाद – निरंतर पूर्णता की तलाश मानसिक स्वास्थ्य को प्रभावित कर सकती है। निम्न आत्म-सम्मान – अवास्तविक अपेक्षाएँ पूरी न होने पर आत्म-संदेह बढ़ जाता है। टालमटोल और बर्नआउट – पूर्णता न मिलने के डर से काम में देरी और थकान बढ़ सकती है। संबंधों पर प्रभाव – अत्यधिक उच्च मानकों के कारण व्यक्तिगत और पेशेवर संबंध प्रभावित हो सकते हैं। परफेक्शन सिंड्रोम से उबरना डॉ. ढल्ला के अनुसार, परफेक्शनिज्म से उबरने के लिए मानसिकता में बदलाव और स्वस्थ मनोवैज्ञानिक आदतों को अपनाना आवश्यक है: 1. यथार्थवादी लक्ष्य निर्धारित करें – पूर्णता के बजाय प्रगति और निरंतर सुधार पर ध्यान दें। 2. आत्म-दया का अभ्यास करें – गलतियों को सीखने का अवसर मानकर आत्म-स्वीकृति विकसित करें। 3. नकारात्मक विचारों को चुनौती दें – अवास्तविक विश्वासों को पहचानकर उन्हें पुनः परिभाषित करें। 4. पेशेवर सहायता लें – डॉ. देवेंद्र ढल्ला जैसे विशेषज्ञों से परामर्श लेना प्रभावी रणनीतियाँ और व्यक्तिगत उपचार प्रदान कर सकता है। परफेक्शन सिंड्रोम एक व्यापक समस्या है जो मानसिक स्वास्थ्य और संपूर्ण जीवन की संतुष्टि को प्रभावित करती है। डॉ. देवेंद्र ढल्ला ने अपनी रिसर्च और परामर्श के माध्यम से हजारों लोगों को परफेक्शनिज्म के बंधनों से मुक्त होने और सफलता के प्रति संतुलित दृष्टिकोण अपनाने में मदद की है। संदर्भ: ढल्ला, डी. (2025). परफेक्शनिज्म को समझना: मनोवैज्ञानिक अंतर्दृष्टि और समाधान। == शीघ्र हटाने पर चर्चा == इस सदस्य पृष्ठ को वेब होस्ट के रूप में विकिपीडिया का स्पष्ट दुरुपयोग होने के कारण नहीं हटाया जाना चाहिये क्योंकि, यह लेख पूर्णत मानसिक स्वास्थ्य से संभधित है। अगर निजी रूप से लेखक के नाम से आपत्ति है कि ववाही बटोरने का प्रयास प्रतीत होता है तो आप स्वतंत्रत है प्रष्ट को हटाने हेतु। परन्तु लेखक का परम् लक्ष केवल मानसिक स्वाथ्य हेतु सही व सटीक जानकारी प्रदान करना है साथ ही विकिपीडिया नियमों का पालन करना। सहधन्यवाद --[[सदस्य:Psychologistdrdhalla|Psychologistdrdhalla]] ([[सदस्य वार्ता:Psychologistdrdhalla|वार्ता]]) 16:54, 24 फ़रवरी 2025 (UTC) {{subst:db-csd-deleted-custom|1=सदस्य:Psychologistdrdhalla|2=notwebhost}} --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 18:03, 17 जुलाई 2026 (UTC) q67oidunna4gc48su042ejyc88yr8at मिस यूनिवर्स 2018 0 1589385 6586972 6582705 2026-07-18T03:31:18Z खास विशेष 810972 शीर्षक बनाकर चित्र जोड़ा 6586972 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] prrtgxioiyvl1brdl6wmjym55y0bq6i 6586973 6586972 2026-07-18T03:33:47Z खास विशेष 810972 /* परिणाम */ उपशीर्षक बनाकर जानकारी और संदर्भ जोड़ा 6586973 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैट्रिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | Top 5<ref name=":0" /> | * {{Flagu|Puerto Rico}} – [[Kiara Ortega]] * {{Flagu|Vietnam}} – [[H'Hen Niê]] |- | Top 10<ref name=":0" /> | * {{Flagu|Canada}} – [[Marta Stępień]] * {{Flagu|Costa Rica}} – [[Natalia Carvajal]] * {{Flagu|Curaçao}} – [[Akisha Albert]] * {{Flagu|Nepal}} – [[Manita Devkota]] * {{Flagu|Thailand}} – [[Sophida Kanchanarin]] |- | Top 20<ref name=":0" /> | * {{Flagu|Australia}} – [[Francesca Hung]] * {{Flagu|Belgium}} – Zoé Brunet * {{Flagu|Brazil}} – [[Mayra Dias]] * {{flagu|Great Britain}} – [[Dee-Ann Kentish-Rogers]] * {{Flagu|Hungary}} – Enikő Kecskés * {{Flagu|Indonesia}} – [[Sonia Fergina Citra]] * {{Flagu|Ireland}} – [[Grainne Gallanagh]] * {{Flagu|Jamaica}} – [[Emily Maddison]] * {{Flagu|Poland}} – [[Magdalena Swat]] * {{Flagu|United States}} – [[Sarah Rose Summers|Sarah Summers]] |} ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] 7g2mtn55gllfmqmum84ajpy84yro4jg 6586974 6586973 2026-07-18T03:37:09Z खास विशेष 810972 /* प्लेसमेंट */ सुधार 6586974 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | Top 20<ref name=":0" /> | * {{Flagu|Australia}} – [[Francesca Hung]] * {{Flagu|Belgium}} – Zoé Brunet * {{Flagu|Brazil}} – [[Mayra Dias]] * {{flagu|Great Britain}} – [[Dee-Ann Kentish-Rogers]] * {{Flagu|Hungary}} – Enikő Kecskés * {{Flagu|Indonesia}} – [[Sonia Fergina Citra]] * {{Flagu|Ireland}} – [[Grainne Gallanagh]] * {{Flagu|Jamaica}} – [[Emily Maddison]] * {{Flagu|Poland}} – [[Magdalena Swat]] * {{Flagu|United States}} – [[Sarah Rose Summers|Sarah Summers]] |} ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] 7z8d9ow2t9n06tir8ptkau1yl2nbcj3 6586975 6586974 2026-07-18T03:40:10Z खास विशेष 810972 /* प्लेसमेंट */ 6586975 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] kzoulnkk165iubaou8azs93acgwgoai 6586976 6586975 2026-07-18T03:41:03Z खास विशेष 810972 /* परिणाम */ उपशीर्षक बनाकर जानकारी और संदर्भ जोड़ा 6586976 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|Laos}} – On-anong Homsombath<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | Miss Congeniality | * {{flagu|Sri Lanka}} – Ornella Gunesekere |} ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] a5sxpcngpf5hjw0yc3xsvx4y652yf79 6586977 6586976 2026-07-18T03:41:41Z खास विशेष 810972 /* विशेष पुरस्कार */ 6586977 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|लाओस}} – ऑन-अनॉन्ग होम्सोम्बाथ<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | मिस कोंगेनीयलिटी | * {{flagu|श्रीलंका}} – ओर्नेला गुनेसेकेरे |} ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] 0z6zwqzswvhgghx8kdgjvs82wzcpcln 6586978 6586977 2026-07-18T03:45:36Z खास विशेष 810972 शीर्षक और उपशीर्षक बनाकर जानकारी जोड़ी 6586978 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|लाओस}} – ऑन-अनॉन्ग होम्सोम्बाथ<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | मिस कोंगेनीयलिटी | * {{flagu|श्रीलंका}} – ओर्नेला गुनेसेकेरे |} ==प्रतियोगिता== ===प्रारूप=== इस संस्करण में सेमीफाइनलिस्टों की संख्या बढ़ाकर 20 कर दी गई, जो 2006 के बाद पहली बार थी। प्रारंभिक प्रतियोगिता— जिसमें स्विमसूट प्रतियोगिता, ईवनिंग गाउन प्रतियोगिता तथा बंद कमरे में साक्षात्कार शामिल थे— के परिणामों के आधार पर 20 सेमीफाइनलिस्ट चुने गए। महाद्वीपीय चयन प्रणाली को बरकरार रखा गया। इसके अंतर्गत अमेरिका, यूरोप, अफ्रीका एवं एशिया-प्रशांत से पाँच-पाँच सेमीफाइनलिस्ट चुने गए, जबकि शेष पाँच अतिरिक्त प्रतिभागियों का चयन किसी भी महाद्वीपीय क्षेत्र से किया गया। इन 20 सेमीफाइनलिस्टों ने सबसे पहले प्रारंभिक वक्तव्य चरण में भाग लिया। इसके बाद निर्णायकों ने उनमें से शीर्ष 10 प्रतिभागियों का चयन किया, जिन्होंने स्विमसूट और ईवनिंग गाउन प्रतियोगिताओं में भाग लिया। इन दोनों चरणों के बाद निर्णायकों ने शीर्ष 5 फाइनलिस्टों का चयन किया, जिन्होंने प्रारंभिक प्रश्न-उत्तर दौर में हिस्सा लिया। अंत में, निर्णायकों ने शीर्ष 3 फाइनलिस्टों का चयन किया, जिन्होंने अंतिम वक्तव्य और अंतिम प्रस्तुति चरणों में भाग लिया। ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] rkeqg21pvahayqq3x3edwww2uonvr5r 6586979 6586978 2026-07-18T03:45:58Z खास विशेष 810972 /* प्रारूप */ सन्दर्भ जोड़ा 6586979 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|लाओस}} – ऑन-अनॉन्ग होम्सोम्बाथ<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | मिस कोंगेनीयलिटी | * {{flagu|श्रीलंका}} – ओर्नेला गुनेसेकेरे |} ==प्रतियोगिता== ===प्रारूप=== इस संस्करण में सेमीफाइनलिस्टों की संख्या बढ़ाकर 20 कर दी गई, जो 2006 के बाद पहली बार थी। प्रारंभिक प्रतियोगिता— जिसमें स्विमसूट प्रतियोगिता, ईवनिंग गाउन प्रतियोगिता तथा बंद कमरे में साक्षात्कार शामिल थे— के परिणामों के आधार पर 20 सेमीफाइनलिस्ट चुने गए। महाद्वीपीय चयन प्रणाली को बरकरार रखा गया। इसके अंतर्गत अमेरिका, यूरोप, अफ्रीका एवं एशिया-प्रशांत से पाँच-पाँच सेमीफाइनलिस्ट चुने गए, जबकि शेष पाँच अतिरिक्त प्रतिभागियों का चयन किसी भी महाद्वीपीय क्षेत्र से किया गया। इन 20 सेमीफाइनलिस्टों ने सबसे पहले प्रारंभिक वक्तव्य चरण में भाग लिया। इसके बाद निर्णायकों ने उनमें से शीर्ष 10 प्रतिभागियों का चयन किया, जिन्होंने स्विमसूट और ईवनिंग गाउन प्रतियोगिताओं में भाग लिया। इन दोनों चरणों के बाद निर्णायकों ने शीर्ष 5 फाइनलिस्टों का चयन किया, जिन्होंने प्रारंभिक प्रश्न-उत्तर दौर में हिस्सा लिया। अंत में, निर्णायकों ने शीर्ष 3 फाइनलिस्टों का चयन किया, जिन्होंने अंतिम वक्तव्य और अंतिम प्रस्तुति चरणों में भाग लिया।<ref>{{cite web|url=https://www.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|title='No live voting this year': Catriona Gray details new Miss Universe format|date=11 December 2018|publisher=ABS-CBN|access-date=12 December 2018|archive-date=2 April 2019|archive-url=https://web.archive.org/web/20190402073204/https://news.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|url-status=live}}</ref> ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] kfm9b81j5rnpv2jc598rw3yvdndy788 6586980 6586979 2026-07-18T03:47:59Z खास विशेष 810972 /* प्रतियोगिता */ उपशिर्षक बनाकर जानकारी डाली और सन्दर्भ जोड़ा 6586980 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|लाओस}} – ऑन-अनॉन्ग होम्सोम्बाथ<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | मिस कोंगेनीयलिटी | * {{flagu|श्रीलंका}} – ओर्नेला गुनेसेकेरे |} ==प्रतियोगिता== ===प्रारूप=== इस संस्करण में सेमीफाइनलिस्टों की संख्या बढ़ाकर 20 कर दी गई, जो 2006 के बाद पहली बार थी। प्रारंभिक प्रतियोगिता— जिसमें स्विमसूट प्रतियोगिता, ईवनिंग गाउन प्रतियोगिता तथा बंद कमरे में साक्षात्कार शामिल थे— के परिणामों के आधार पर 20 सेमीफाइनलिस्ट चुने गए। महाद्वीपीय चयन प्रणाली को बरकरार रखा गया। इसके अंतर्गत अमेरिका, यूरोप, अफ्रीका एवं एशिया-प्रशांत से पाँच-पाँच सेमीफाइनलिस्ट चुने गए, जबकि शेष पाँच अतिरिक्त प्रतिभागियों का चयन किसी भी महाद्वीपीय क्षेत्र से किया गया। इन 20 सेमीफाइनलिस्टों ने सबसे पहले प्रारंभिक वक्तव्य चरण में भाग लिया। इसके बाद निर्णायकों ने उनमें से शीर्ष 10 प्रतिभागियों का चयन किया, जिन्होंने स्विमसूट और ईवनिंग गाउन प्रतियोगिताओं में भाग लिया। इन दोनों चरणों के बाद निर्णायकों ने शीर्ष 5 फाइनलिस्टों का चयन किया, जिन्होंने प्रारंभिक प्रश्न-उत्तर दौर में हिस्सा लिया। अंत में, निर्णायकों ने शीर्ष 3 फाइनलिस्टों का चयन किया, जिन्होंने अंतिम वक्तव्य और अंतिम प्रस्तुति चरणों में भाग लिया।<ref>{{cite web|url=https://www.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|title='No live voting this year': Catriona Gray details new Miss Universe format|date=11 December 2018|publisher=ABS-CBN|access-date=12 December 2018|archive-date=2 April 2019|archive-url=https://web.archive.org/web/20190402073204/https://news.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|url-status=live}}</ref> ===चयन समिति=== प्रारंभिक प्रतियोगिता और अंतिम टेलीकास्ट दोनों के लिए सात जजों का पैनल पूरी तरह से महिलाओं का था, जिनमें निम्नलिखित शामिल थीं:<ref name=":1">{{Cite web|last=Tabanera|first=Lily Grace|date=13 December 2018|title=For The First Time Ever, Miss Universe Will Have An All-Female Panel Of Judges!|url=https://www.cosmo.ph/entertainment/miss-universe-2018-judges-a2520-20181213|access-date=14 January 2022|website=Cosmopolitan Philippines|language=en-ph|archive-date=14 January 2022|archive-url=https://web.archive.org/web/20220114141556/https://www.cosmo.ph/entertainment/miss-universe-2018-judges-a2520-20181213|url-status=live}}</ref><ref name=":2">{{Cite web|last=Adel|first=Rosette|date=14 December 2018|title=Two Filipinas join all-women selection committee for Miss Universe 2018|url=https://www.philstar.com/entertainment/2018/12/14/1877024/two-filipinas-join-all-women-selection-committee-miss-universe-2018|access-date=14 January 2022|website=[[Philippine Star]]|archive-date=7 April 2023|archive-url=https://web.archive.org/web/20230407054937/https://www.philstar.com/entertainment/2018/12/14/1877024/two-filipinas-join-all-women-selection-committee-miss-universe-2018|url-status=live}}</ref> * [[Liliana Gil Valletta]] – businesswoman<ref name=":1" /><ref name=":2" /> * [[Janaye Ingram]] – political organizer and [[Miss New Jersey USA|Miss New Jersey USA 2004]]<ref name=":1" /><ref name=":2" /> * [[Monique Lhuillier]] – fashion designer<ref name=":1" /><ref name=":2" /> * [[Michelle McLean]] – [[Miss Universe 1992]] from Namibia<ref name=":1" /><ref name=":2" /> * Iman Oubou – scientist, entrepreneur, and medical missionary<ref name=":1" /><ref name=":2" /> * [[Bui Simon]] – [[Miss Universe 1988]] from Thailand<ref name=":1" /><ref name=":2" /> * Richelle Singson-Michael – Filipino architect and businesswoman<ref name=":1" /><ref name=":2" /> ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] a2b2wpgc0cvsj2q0wjhy2e9wi7bdvl8 6586985 6586980 2026-07-18T03:50:25Z खास विशेष 810972 /* चयन समिति */ 6586985 wikitext text/x-wiki {{Infobox beauty pageant | image = Catriona Gray Frontrow Cares.jpg | caption = [[कैटरिओना ग्रे]] | venue = इम्पैक्ट एरिना, मुआंग थोंग थानी, पाक क्रेट, [[नोन्थाबुरी प्रान्त|नोन्थाबुरी]], थाईलैंड | date = 17 दिसंबर 2018 | presenters = {{Hlist|[[स्टीव हार्वे]]|एशली ग्राहम|कार्सन क्रेसली|लू सिएरा}} | entertainment = नी-यो | broadcaster = {{ubl|अंतरराष्ट्रीय: {{Hlist|[[फॉक्स ब्रोडकास्टिंग कंपनी | फॉक्स]]|एज़्टेका}}|आधिकारिक प्रसारक: {{Hlist|पीपीटीवी}}}} | entrants = 94 | placements = 20 | debuts = {{Hlist|आर्मेनिया | किर्गिस्तान | मंगोलिया}} | withdraws = {{Hlist|ऑस्ट्रिया | इथियोपिया | गुयाना | इराक | रोमानिया | स्लोवेनिया | तंजानिया | त्रिनिदाद और टोबैगो}} | returns = {{Hlist|बेलीज | डेनमार्क | ग्रीस | हंगरी | केन्या | कोसोवो | स्विट्जरलैंड}} | winner = [[कैटरिओना ग्रे]] |represented=फिलिपींस | best national costume = ऑन-अनॉन्ग होम्सोम्बाथ, लाओस | congeniality = ओर्नेला गुनेसेकेरे, श्रीलंका | before = [[मिस यूनीवर्स 2017|2017]] | next = [[मिस यूनिवर्स 2019|2019]] }} '''मिस यूनिवर्स 2018''', 67वां [[मिस यूनिवर्स]] प्रतियोगिता थी, जो 17 दिसंबर 2018 को [[थाईलैंड]] के [[नोन्थाबुरी प्रान्त]] के पाक क्रेट में स्थित इम्पैक्ट एरीना, मुआंग थोंग थानी में आयोजित की गई थी।{{efn|name=local date|यह कार्यक्रम स्थानीय समयानुसार सुबह 07:00 बजे (UTC+07:00) आयोजित किया गया; अमेरिका में उस समय अभी भी 16 दिसंबर की तिथि थी। हालांकि, ईस्टर्न/सेंट्रल टाइम ज़ोन में इसका प्राइमटाइम प्रसारण 30 मिनट की देरी से हुआ, क्योंकि ''फ़ॉक्स एनएफएल संडे'' का कार्यक्रम समय से अधिक चला गया था।}}<ref name=":11">{{cite news |date=31 July 2018 |title=Thailand to host Miss Universe 2018 as pageant returns to Asia |work=[[ABS-CBN News]] |url=https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |access-date=31 July 2018 |archive-date=1 May 2019 |archive-url=https://web.archive.org/web/20190501023934/https://news.abs-cbn.com/life/07/31/18/thailand-to-host-miss-universe-2018-as-pageant-returns-to-asia |url-status=live }}</ref> कार्यक्रम के अंत में, [[दक्षिण अफ्रीका]] की [[डेमी-ले नेल-पीटर्स]] ने [[फिलीपींस]] की [[कैटरिओना ग्रे]] को मिस यूनिवर्स 2018 का ताज पहनाया। यह फिलीपींस की चौथी जीत थी, जो [[मिस यूनीवर्स 2015|2015]] में मिली पिछली जीत के बाद आई।<ref>{{Cite web |date=16 December 2018 |title=Miss Universe 2018: Catriona Gray of the Philippines wins crown |url=https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |access-date=7 May 2022 |website=[[CBS News]] |language=en-US |archive-date=11 March 2022 |archive-url=https://web.archive.org/web/20220311162837/https://www.cbsnews.com/news/miss-universe-2018-catriona-gray-philippines-wins-today-2018-12-16/ |url-status=live }}</ref><ref>{{Cite web |date=17 December 2018 |title=Her mom once dreamed she'd win Miss Universe in a red dress. She did. |url=https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |access-date=7 May 2022 |website=[[NBC News]] |language=en |archive-date=18 May 2022 |archive-url=https://web.archive.org/web/20220518072411/https://www.nbcnews.com/news/world/miss-universe-2018-miss-philippines-catriona-gray-n948681 |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में 94 देशों और क्षेत्रों की प्रतिभागियों ने भाग लिया, जिससे 2017 में बने 92 देशों के पिछले रिकॉर्ड को पार कर लिया गया।<ref name=":10">{{Cite web |last=Smith |first=Nasha |date=15 December 2018 |title=The 20 front runners for the 2018 Miss Universe pageant crown |url=https://www.insider.com/miss-universe-front-runners-2018-12 |access-date=7 May 2022 |website=[[Insider Inc.|Insider]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102654/https://www.insider.com/miss-universe-front-runners-2018-12 |url-status=live }}</ref> यह प्रतियोगिता लगातार चौथे वर्ष [[स्टीव हार्वे|स्टीव हार्वी]] द्वारा होस्ट की गई, उनके साथ सुपरमॉडल एश्ले ग्राहम भी थीं।<ref name=":10" /><ref>{{Cite web |last=Petski |first=Denise |date=31 July 2018 |title=Miss Universe 2018 Heads To Thailand With Steve Harvey Returning As Host |url=https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |access-date=7 May 2022 |website=[[Deadline Hollywood]] |language=en-US |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://deadline.com/2018/07/miss-universe-pageant-2018-date-location-steve-harvey-returning-as-host-1202436544/ |url-status=live }}</ref><ref>{{Cite web |last=Wynne |first=Kelly |date=16 December 2018 |title=Who is 'Miss Universe 2018' host and supermodel Ashley Graham? |url=https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |access-date=7 May 2022 |website=[[Newsweek]] |language=en |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.newsweek.com/who-miss-universe-host-ashley-graham-everything-you-need-know-about-1260842 |url-status=live }}</ref> टेलीविजन पर्सनैलिटी कार्सन क्रेसली और रनवे कोच लू सिएरा ने पूरे कार्यक्रम में टिप्पणी और विश्लेषण प्रस्तुत किया।<ref name=":10" /><ref>{{Cite web |last=Saballa |first=Joe |date=18 December 2018 |title=Possible reasons why 2 hosts of Miss Universe 'ignored' Catriona Gray unveiled |url=https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |access-date=7 May 2022 |website=Kami.com.ph |language=en |archive-date=19 October 2023 |archive-url=https://web.archive.org/web/20231019002025/https://kami.com.ph/84930-possible-reasons-2-hosts-miss-universe-catriona-gray-unveiled.html |url-status=live }}</ref> इस वर्ष की प्रतियोगिता में अमेरिकी गायक-गीतकार नी-यो ने प्रस्तुति दी।<ref>{{Cite web |last=Adel |first=Rosette |date=22 November 2018 |title=Ne-Yo to perform at Miss Universe 2018 |url=https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |access-date=7 May 2022 |website=[[Philippine Star]] |archive-date=7 May 2022 |archive-url=https://web.archive.org/web/20220507143520/https://www.philstar.com/entertainment/2018/11/22/1870844/ne-yo-perform-miss-universe-2018 |url-status=live }}</ref>[[File:Impact Arena Muang Thong Thani at nighttime.jpg|thumb|इम्पैक्ट एरिना, मुआंग थोंग थानी, मिस यूनिवर्स 2018 का आयोजन स्थल]] ==पृष्ठभूमि== ===स्थान और तिथि=== [[File:Nong Noogh Garden(1).jpg|thumb|नोंग नूच ट्रॉपिकल बॉटनिकल गार्डन, राष्ट्रीय पोशाक दौर का स्थल]] मिस यूनिवर्स संगठन इस प्रतियोगिता को चीन में आयोजित कराने के लिए बातचीत कर रहा था। हालांकि, यह बातचीत उस समय विफल हो गई जब चीनी पक्ष ने प्रतियोगिता का सीधा प्रसारण करने से इनकार कर दिया। इसके बाद, मिस यूनिवर्स संगठन ने फिलीपींस के साथ बातचीत शुरू की, जिसने पहले [[मिस यूनीवर्स 2016]] की मेज़बानी की थी।<ref name="prepPH">{{cite news|last1=Afinidad-Bernardo|first1=Deni Rose|title=Organizer: Miss Universe Organization preparing for Philippines' 2018 hosting|url=https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|access-date=9 May 2018|work=The Philippine Star|date=2 May 2018|archive-date=11 July 2019|archive-url=https://web.archive.org/web/20190711102352/https://www.philstar.com/entertainment/2018/05/02/1811460/organizer-miss-universe-organization-preparing-philippines-2018-hosting|url-status=live}}</ref> अप्रैल 2018 में तत्कालीन पर्यटन सचिव वांडा तुल्फो टेओ ने फिलीपींस के राष्ट्रपति [[रोड्रिगो दुतेर्ते]] से नवंबर 2018 में बोराकाय में मिस यूनिवर्स प्रतियोगिता की मेज़बानी की संभावना पर चर्चा की थी।<ref name="prepPH"/> 6 मई 2018 को टेओ ने घोषणा की कि फिलीपींस के पास यह प्रतियोगिता आयोजित करने की "90% संभावना" है, और यह भी बताया कि पर्यटन विभाग प्रायोजकों की तलाश करेगा क्योंकि मिस यूनिवर्स 2016 के प्रमुख प्रायोजक, चावित सिंग्सन की एलसीएस होल्डिंग्स इंक. ने 2018 प्रतियोगिता के लिए वित्तीय सहायता देने से इनकार कर दिया था।<ref>{{cite news |title=90% chance for another Miss U in PH: Teo |url=http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |access-date=9 May 2018 |work=Philippine Canadian Inquirer |agency=Philippine News Agency |date=6 May 2018 |archive-url=https://web.archive.org/web/20180509220903/http://www.canadianinquirer.net/2018/05/06/90-chance-for-another-miss-u-in-ph-teo/ |archive-date=9 May 2018 |url-status=live}}</ref> 18 मई 2018 को टेओ की उत्तराधिकारी, बर्नाडेट रोमुलो-पुयात ने घोषणा की कि बजट की कमी और अन्य चिंताओं के चलते फिलीपींस ने इस बार प्रतियोगिता की मेज़बानी से हाथ खींच लिया है। पुयात ने यह भी कहा कि फिलीपींस ने हाल ही में यह प्रतियोगिता आयोजित की थी, इसलिए इतनी जल्दी दोबारा आयोजन का कोई ठोस कारण नहीं था।<ref>{{cite news |url=http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |title=No Miss Universe hosting for PH this year, says tourism chief |work=ABS-CBN News |date=18 May 2018 |access-date=18 May 2018 |archive-url=https://web.archive.org/web/20180518120115/http://news.abs-cbn.com/news/05/18/18/no-miss-universe-hosting-for-ph-this-year-says-tourism-chief |archive-date=18 May 2018 |url-status=live}}</ref> 31 जुलाई 2018 को मिस यूनिवर्स संगठन की अध्यक्ष पाउला शूगार्ट ने बैंकॉक आर्ट एंड कल्चर सेंटर में एक लाइव प्रेस कॉन्फ्रेंस के दौरान घोषणा की कि मिस यूनिवर्स 2018 प्रतियोगिता 17 दिसंबर 2018 को बैंकॉक, थाईलैंड में आयोजित की जाएगी। यह तीसरी बार था जब बैंकॉक इस प्रतियोगिता की मेज़बानी कर रहा था—पहले यह 1992 और 2005 में हो चुकी थी। इस घोषणा में मौजूदा मिस यूनिवर्स डेमी-ली नेल-पीटर्स, मिस यूनिवर्स 1965 आपसरा होंगसाकुला और मिस यूनिवर्स 2005 नताली गलेबोवा ने भाग लिया।<ref name=":11" /> राष्ट्रीय पोशाक प्रतियोगिता 10 दिसंबर 2018 को पटाया, थाईलैंड के नोंग नूच ट्रॉपिकल गार्डन में आयोजित की गई थी।<ref>{{Cite web |last=Afinidad-Bernardo |first=Deni Rose M. |date=11 December 2018 |title=In photos: All the Miss Universe 2018 national costumes |url=https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |access-date=9 May 2022 |website=[[Philippine Star]] |archive-date=9 May 2022 |archive-url=https://web.archive.org/web/20220509060615/https://www.philstar.com/lifestyle/fashion-and-beauty/2018/12/11/1876139/photos-all-miss-universe-2018-national-costumes |url-status=live }}</ref> ===प्रतिभागियों का चयन=== चौरानवे देशों और क्षेत्रों की प्रतिभागियों को इस प्रतियोगिता में भाग लेने के लिए चुना गया। इनमें से नौ प्रतिनिधियों को उनके राष्ट्रीय सौंदर्य प्रतियोगिता में रनर-अप रहने, ऑडिशन प्रक्रिया अथवा अन्य आंतरिक चयन प्रक्रिया के आधार पर उनके राष्ट्रीय खिताबों पर नियुक्त किया गया।<ref name=":5">{{Cite web |date=5 May 2018 |title=Meisu Qin crowned Miss Universe China 2018 |url=https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |access-date=15 January 2022 |website=[[The Times of India]] |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072644/https://beautypageants.indiatimes.com/miss-universe/Meisu-Qin-crowned-Miss-Universe-China-2018/eventshow/64039586.cms |url-status=live }}</ref><ref name=":6">{{Cite web |date=15 October 2018 |title=A semmiből jött szépségkirálynő: ő a Miss Universe Hungary 2018 |url=https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |access-date=15 January 2022 |website=NLC |language=hu |archive-date=15 January 2022 |archive-url=https://web.archive.org/web/20220115072637/https://nlc.hu/sztarok/20181015/miss-universe-hungary-2018-vajna-timi-kecskes-eniko-szepsegkiralyno/ |url-status=live }}</ref><ref name=":7">{{Cite web|last=Yap|first=Jasmina|date=23 July 2018|title=Miss Universe Laos 2018 Selected Without Contest|url=https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072646/https://laotiantimes.com/2018/07/23/miss-universe-laos-2018-selected-no-contest/|url-status=live}}</ref> आंगेला पोंसे (स्पेन) मिस यूनिवर्स प्रतियोगिता में भाग लेने वाली पहली खुले तौर पर ट्रांसजेंडर प्रतिनिधि बनीं।<ref name="WaPo2018-12-17a">{{cite news |author=Wang |first=Amy B |date=17 December 2018 |title=Miss Spain makes history as first transgender woman to compete in Miss Universe pageant |newspaper=[[The Washington Post]] |url=https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |access-date=18 December 2018 |quote=After Talackova threatened legal action, the organization — then owned by Donald Trump — changed the rules to allow transgender contestants in its pageants. |archive-date=18 December 2018 |archive-url=https://web.archive.org/web/20181218010947/https://www.washingtonpost.com/world/2018/12/17/miss-spain-becomes-first-transgender-woman-compete-miss-universe-pageant/?noredirect=on |url-status=live }}</ref><ref name="Time2018-12-17a">{{cite magazine |author=Cady Lang |date=17 December 2018 |title=Miss Spain Made History as the First Miss Universe Transgender Competitor |url=https://time.com/5481417/miss-spain/ |magazine=[[Time (magazine)|Time]] |access-date=18 December 2018 |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217191738/http://time.com/5481417/miss-spain/ |url-status=live }}</ref><ref name=":8">{{cite web |date=30 June 2018 |title=Miss Universe Spain crowns its first transgender queen, Angela Ponce |url=https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |access-date=8 June 2019 |website=GMA News Online |archive-date=28 March 2019 |archive-url=https://web.archive.org/web/20190328130954/https://www.gmanetwork.com/news/lifestyle/content/658755/miss-universe-spain-crowns-its-first-transgender-queen-angela-ponce/story/ |url-status=live }}</ref> हालाँकि वह शीर्ष 20 सेमीफाइनलिस्टों में स्थान नहीं बना सकीं, फिर भी प्रतियोगिता के दौरान उनके ऐतिहासिक महत्व को देखते हुए मिस यूनिवर्स ऑर्गेनाइजेशन ने उन्हें विशेष रूप से सम्मानित किया।<ref>{{Cite web |last=Castillo |first=Jackie |date=17 December 2018 |title=Miss Universe 2018: Catriona Gray, from the Philippines, claims crown |url=https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |access-date=17 December 2018 |website=CNN Style |language=en |archive-date=17 December 2018 |archive-url=https://web.archive.org/web/20181217044533/https://www.cnn.com/style/article/miss-universe-2018-catriona-gray/index.html |url-status=live }}</ref> मिस यूनिवर्स के नियमों में 2012 में संशोधन किया गया था, जिसके बाद ट्रांसजेंडर महिलाओं को प्रतियोगिता में भाग लेने की अनुमति दी गई।<ref name="WaPo2018-12-17a" /><ref name="torstar">[https://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight "Jenna Talackova, transgendered Miss Universe Canada contestant, shines in spotlight"] {{Webarchive|url=https://web.archive.org/web/20120818192559/http://www.thestar.com/living/article/1181138--jenna-talackova-transgendered-miss-universe-canada-contestant-shines-in-spotlight |date=18 August 2012 }}. ''[[Toronto Star]]'', 18 May 2012.</ref><ref>{{cite magazine |title=21 Transgender People Who Influenced American Culture |url=https://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |magazine=Time Magazine |access-date=18 December 2018 |archive-date=5 August 2016 |archive-url=https://web.archive.org/web/20160805093258/http://time.com/130734/transgender-celebrities-actors-athletes-in-america/ |url-status=live }}</ref> ====प्रतिस्थापन==== ज़ोए ब्रुने, जो मिस बेल्जियम 2018 की प्रथम रनर-अप थीं, को बेल्जियम का प्रतिनिधित्व करने के लिए नियुक्त किया गया, क्योंकि एंजेलीन फ्लोर पुआ ने मिस वर्ल्ड 2018 में भाग लेने का निर्णय लिया था। एवा कोलास (फ्रांस) और माग्दालेना स्वाट (पोलैंड) को भी उनके राष्ट्रीय खिताबों पर नियुक्त किया गया, क्योंकि उनकी मूल विजेता, माएवा कूके और अगाता बियरनात, क्रमशः मिस वर्ल्ड 2018 से संबंधित प्रतिबद्धताओं के कारण मिस यूनिवर्स में भाग नहीं ले सकीं। माएवा कूके और एंजेलीन फ्लोर पुआ ने [[मिस यूनिवर्स 2019|अगले वर्ष मिस यूनिवर्स प्रतियोगिता]] में भाग लिया।<ref name=":32">{{Cite web |date=9 January 2019 |title=Zoé Brunet, de Miss Belgique à Top Model Belgium |url=https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |access-date=14 January 2022 |website=[[Télépro]] |language=fr-BE |archive-date=14 January 2022 |archive-url=https://web.archive.org/web/20220114150958/https://www.telepro.be/tv/zoe-brunet-de-miss-belgique-top-model-belgium.html |url-status=live }}</ref><ref name=":42">{{Cite web |date=18 September 2018 |title=Miss France 2018, Maëva Coucke ne représentera pas la France à Miss Univers |url=https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |access-date=15 January 2022 |website=[[Europe 1]] |language=fr |archive-date=16 January 2022 |archive-url=https://web.archive.org/web/20220116012102/https://www.europe1.fr/societe/miss-france-2018-maeva-coucke-ne-representera-pas-la-france-a-miss-univers-3758399 |url-status=live }}</ref><ref>{{cite web|url=https://www.instagram.com/p/BoB4fn3gpj1/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/BoB4fn3gpj1 |archive-date=23 December 2021 |url-access=subscription|title=Miss Universe Poland 2018|date=5 September 2018}}{{cbignore}}</ref> ====डेब्यू, वापसी और निकासी==== 2018 संस्करण में आर्मेनिया, किर्गिज़स्तान और मंगोलिया ने पहली बार भाग लिया, जबकि बेलीज़, डेनमार्क, ग्रीस, हंगरी, केन्या, कोसोवो और स्विट्जरलैंड की प्रतियोगिता में वापसी हुई। ग्रीस ने पिछली बार [[मिस यूनीवर्स 2015]] में भाग लिया था, जबकि अन्य सभी देशों ने अंतिम बार [[मिस यूनीवर्स 2016]] में हिस्सा लिया था। ऑस्ट्रिया, इथियोपिया, इराक, रोमानिया, स्लोवेनिया और तंजानिया ने प्रतियोगिता से नाम वापस ले लिया, क्योंकि उनके संबंधित संगठनों ने मिस यूनिवर्स का लाइसेंस खो दिया था, राष्ट्रीय प्रतियोगिता आयोजित नहीं की थी या किसी प्रतिनिधि का चयन नहीं किया था।<ref>{{cite web |url=https://www.instagram.com/p/Bp2EurSnnO9/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2EurSnnO9 |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Ethiopia |access-date=6 November 2018 |title=We regret to announce that Miss Universe Ethiopia will not take place in 2018}}{{cbignore}}</ref><ref>{{cite web |url=https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |website=Miss Universe Slovenija |access-date=12 September 2018 |title=Slovenia don´t compete at the 2018 Miss Universe |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.facebook.com/MissUniverseSlovenija/posts/1559330967519533comment_id%3D1840470252738935%26reply_comment_id%3D1841782339274393 |url-status=live }}</ref><ref>{{cite web |url=https://www.instagram.com/p/Bp2G46xHmcQ/ |archive-url=https://ghostarchive.org/iarchive/s/instagram/Bp2G46xHmcQ |archive-date=23 December 2021 |url-access=subscription|website=Miss Universe Tanzania |access-date=6 November 2018 |title=Miss Universe Tanzania 2018 will regrettably not take place this year}}{{cbignore}}</ref> गयाना को 2017 में प्रतिनिधि चयन से जुड़े विवाद के दौरान संगठन को भेजे गए "आपत्तिजनक ईमेल" और "जान से मारने की धमकियों" के कारण मिस यूनिवर्स में भाग लेने से निलंबित कर दिया गया। इसके बाद कोई नया लाइसेंस धारक नियुक्त नहीं किया गया, जिसके कारण देश को प्रतियोगिता से हटना पड़ा।<ref>{{cite web |date=24 April 2018 |title=Guyana barred from participating in Miss Universe pageant |url=https://www.stabroeknews.com/2018/news/guyana/04/24/guyana-barred-from-participating-in-miss-universe-pageant/ |access-date=19 July 2018 |website=[[Stabroek News]] |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102713/https://www.stabroeknews.com/2018/04/24/news/guyana/guyana-barred-from-participating-in-miss-universe-pageant/ |url-status=live }}</ref><ref>{{Cite web |date=25 April 2018 |title=Guyana out of Miss Universe pageant due to lack of franchise holder |url=https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |access-date=8 May 2022 |website=[[Stabroek News]] |language=en-US |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102704/https://www.stabroeknews.com/2018/04/25/news/guyana/guyana-out-of-miss-universe-pageant-due-to-lack-of-franchise-holder/ |url-status=live }}</ref> त्रिनिदाद और टोबैगो ने भी प्रतियोगिता से नाम वापस ले लिया क्योंकि वहाँ के आयोजकों ने घोषणा की कि उस वर्ष कोई राष्ट्रीय प्रतियोगिता आयोजित नहीं की जाएगी। यह निर्णय तब लिया गया, जबकि मार्ट्रेसिया एलेन को 2017 की राष्ट्रीय प्रतियोगिता में ही मिस यूनिवर्स त्रिनिदाद और टोबैगो 2018 का खिताब प्रदान किया जा चुका था। मैरी एस्थर बांगुरा (सिएरा लियोन) पंजीकरण प्रक्रिया समाप्त होने के बाद बैंकॉक पहुँचीं। वीज़ा और अन्य व्यवस्थागत (लॉजिस्टिक) समस्याओं के कारण वह प्रतियोगिता में भाग नहीं ले सकीं। हालाँकि, उन्हें प्रतियोगिता की विभिन्न गतिविधियों में शामिल होने तथा दर्शक दीर्घा से प्रतियोगिता देखने की अनुमति दी गई। इसके अतिरिक्त, उन्हें [[मिस यूनिवर्स 2019|अगले संस्करण की मिस यूनिवर्स प्रतियोगिता]] में भाग लेने के लिए भी आमंत्रित किया गया।<ref>{{Cite news |last= |first= |date=17 December 2018 |title=Thai fans fall for Miss Sierra Leone |language=en |work=[[Bangkok Post]] |url=https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |access-date=13 October 2022 |archive-date=19 November 2023 |archive-url=https://web.archive.org/web/20231119102726/https://www.bangkokpost.com/life/social-and-lifestyle/1595246/thai-fans-fall-for-miss-sierra-leone |url-status=live }}</ref> ==परिणाम== [[File:Miss Universe 2018 map.png|thumb|भाग लेने वाले देश और क्षेत्र।<ref name=":0" /><ref name=":9" />|250x250px]] === प्लेसमेंट === {| class="wikitable sortable" style="font-size: 95%;" ! प्लेसमेंट !! प्रतियोगी |- | मिस यूनिवर्स 2018 | * {{Flagu|फिलिपींस}} – [[कैटरिओना ग्रे]]<ref name=":0">{{Cite web |date=14 December 2018 |title=HIGHLIGHTS: Miss Universe 2018 coronation |url=https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |access-date=9 July 2023 |website=[[Rappler]] |language=en-US |archive-date=9 April 2023 |archive-url=https://web.archive.org/web/20230409064241/https://www.rappler.com/entertainment/pageants/218917-updates-coronation-december-2018/ |url-status=live }}</ref> |- | प्रथम उपविजेता | * {{Flagu|दक्षिण अफ्रीका}} – टैमरिन ग्रीन<ref name=":0" /> |- | द्वितीय उपविजेता | * {{Flagu|वेनेज़ुएला}} – स्टेफनी गुटिरेज़<ref name=":0" /> |- | शीर्ष 5<ref name=":0" /> | * [[पोर्टो रीको|प्यूर्टो रिको]] – कियारा ओर्टेगा * {{Flagu|वियतनाम}} – एच'हेन नी |- | शीर्ष 10<ref name=":0" /> | * {{Flagu|कनाडा}} – मार्टा स्टेपीन * {{Flagu|कोस्टा रिका}} – नतालिया कारवाजल * {{Flagu|कुराकाओ}} – अकीशा अल्बर्ट * {{Flagu|नेपाल}} – मनीता देवकोटा * {{Flagu|थाईलैंड}} – सोफिडा कंचनारिन |- | शीर्ष 20<ref name=":0" /> | * {{Flagu|ऑस्ट्रेलिया}} – फ्रांसेस्का हंग * {{Flagu|बेल्जियम}} – ज़ोई ब्रुनेट * {{Flagu|ब्राज़ील}} – मायरा डियास * {{flagu|ग्रेट ब्रिटेन}} – डी-एन केंटिश-रोजर्स * {{Flagu|हंगरी}} – एनिको केक्सकेस * {{Flagu|इंडोनेशिया}} – सोनिया फर्गीना चित्रा * {{Flagu|आयरलैंड}} – ग्रेन गैलनाघ * {{Flagu|जमैका}} – एमिली मैडिसन * {{Flagu|पोलैंड}} – मैग्डेलेना स्वात * {{Flagu|संयुक्त राज्य अमेरिका}} – सारा समर्स |} === विशेष पुरस्कार === {| class="wikitable sortable unsortable" style="font-size: 95%;" |- ! पुरस्कार ! प्रतियोगी |- | सर्वश्रेष्ठ राष्ट्रीय पोशाक | * {{flagu|लाओस}} – ऑन-अनॉन्ग होम्सोम्बाथ<ref>{{Cite web|last=Savankham|first=Francis|date=17 December 2018|title=On-anong Captures Costume Gong for Laos at Miss Universe 2018|url=https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|access-date=15 January 2022|website=Laotian Times|language=en-US|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115072637/https://laotiantimes.com/2018/12/17/laos-national-costume-gong-miss-universe-2018/|url-status=live}}</ref> |- | मिस कोंगेनीयलिटी | * {{flagu|श्रीलंका}} – ओर्नेला गुनेसेकेरे |} ==प्रतियोगिता== ===प्रारूप=== इस संस्करण में सेमीफाइनलिस्टों की संख्या बढ़ाकर 20 कर दी गई, जो 2006 के बाद पहली बार थी। प्रारंभिक प्रतियोगिता— जिसमें स्विमसूट प्रतियोगिता, ईवनिंग गाउन प्रतियोगिता तथा बंद कमरे में साक्षात्कार शामिल थे— के परिणामों के आधार पर 20 सेमीफाइनलिस्ट चुने गए। महाद्वीपीय चयन प्रणाली को बरकरार रखा गया। इसके अंतर्गत अमेरिका, यूरोप, अफ्रीका एवं एशिया-प्रशांत से पाँच-पाँच सेमीफाइनलिस्ट चुने गए, जबकि शेष पाँच अतिरिक्त प्रतिभागियों का चयन किसी भी महाद्वीपीय क्षेत्र से किया गया। इन 20 सेमीफाइनलिस्टों ने सबसे पहले प्रारंभिक वक्तव्य चरण में भाग लिया। इसके बाद निर्णायकों ने उनमें से शीर्ष 10 प्रतिभागियों का चयन किया, जिन्होंने स्विमसूट और ईवनिंग गाउन प्रतियोगिताओं में भाग लिया। इन दोनों चरणों के बाद निर्णायकों ने शीर्ष 5 फाइनलिस्टों का चयन किया, जिन्होंने प्रारंभिक प्रश्न-उत्तर दौर में हिस्सा लिया। अंत में, निर्णायकों ने शीर्ष 3 फाइनलिस्टों का चयन किया, जिन्होंने अंतिम वक्तव्य और अंतिम प्रस्तुति चरणों में भाग लिया।<ref>{{cite web|url=https://www.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|title='No live voting this year': Catriona Gray details new Miss Universe format|date=11 December 2018|publisher=ABS-CBN|access-date=12 December 2018|archive-date=2 April 2019|archive-url=https://web.archive.org/web/20190402073204/https://news.abs-cbn.com/life/12/11/18/new-miss-universe-format-detailed-by-catriona|url-status=live}}</ref> ===चयन समिति=== प्रारंभिक प्रतियोगिता और अंतिम टेलीकास्ट दोनों के लिए सात जजों का पैनल पूरी तरह से महिलाओं का था, जिनमें निम्नलिखित शामिल थीं:<ref name=":1">{{Cite web|last=Tabanera|first=Lily Grace|date=13 December 2018|title=For The First Time Ever, Miss Universe Will Have An All-Female Panel Of Judges!|url=https://www.cosmo.ph/entertainment/miss-universe-2018-judges-a2520-20181213|access-date=14 January 2022|website=Cosmopolitan Philippines|language=en-ph|archive-date=14 January 2022|archive-url=https://web.archive.org/web/20220114141556/https://www.cosmo.ph/entertainment/miss-universe-2018-judges-a2520-20181213|url-status=live}}</ref><ref name=":2">{{Cite web|last=Adel|first=Rosette|date=14 December 2018|title=Two Filipinas join all-women selection committee for Miss Universe 2018|url=https://www.philstar.com/entertainment/2018/12/14/1877024/two-filipinas-join-all-women-selection-committee-miss-universe-2018|access-date=14 January 2022|website=[[Philippine Star]]|archive-date=7 April 2023|archive-url=https://web.archive.org/web/20230407054937/https://www.philstar.com/entertainment/2018/12/14/1877024/two-filipinas-join-all-women-selection-committee-miss-universe-2018|url-status=live}}</ref> * लिलियाना गिल वैलेटा – व्यवसायी महिला<ref name=":1" /><ref name=":2" /> * जनेय इंग्राम - राजनीतिक आयोजक और मिस न्यू जर्सी यूएसए 2004<ref name=":1" /><ref name=":2" /> * मोनिक लहुइलियर - फैशन डिजाइनर<ref name=":1" /><ref name=":2" /> * मिशेल मैकलीन – नामीबिया की मिस यूनिवर्स 1992<ref name=":1" /><ref name=":2" /> * इमान ओउबो – वैज्ञानिक, उद्यमी और चिकित्सा प्रचारक<ref name=":1" /><ref name=":2" /> * बुई साइमन – थाईलैंड की मिस यूनिवर्स 1988<ref name=":1" /><ref name=":2" /> * रिचेले सिंगसन-माइकल - फिलीपीनी वास्तुकार और व्यवसायी महिला<ref name=":1" /><ref name=":2" /> ==टिप्पणी== {{Notelist}} ==सन्दर्भ== {{टिप्पणीसूची|30em}} ==बाहरी कड़ियाँ== *[http://www.missuniverse.com मिस यूनिवर्स आधिकारिक वेबसाइट] {{मिस यूनीवर्स}} {{सुन्दरता प्रतियोगिता}} [[श्रेणी: मिस यूनीवर्स]] [[श्रेणी: सुन्दरता प्रतियोगिता]] [[श्रेणी: अंतर्राष्ट्रीय सुन्दरता प्रतियोगिता]] 8e30r75v2920pfisvs4ns9ja22e0qjt सदस्य वार्ता:स्वर्ण 3 1601141 6586907 6581646 2026-07-17T17:54:37Z SM7 89247 सूचना: [[:2026 नीट विवाद]] को शीघ्र हटाने का नामांकन 6586907 wikitext text/x-wiki {{साँचा:सहायता|name=स्वर्ण}} [[सदस्य:Sanjeev bot|Sanjeev bot]] ([[सदस्य वार्ता:Sanjeev bot|वार्ता]]) 01:27, 25 अगस्त 2025 (UTC) == [[:न्यायज्ञ|न्यायज्ञ]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:न्यायज्ञ|न्यायज्ञ]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#ल5|मापदंड ल5]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये [[सदस्य:Sanjeev bot]] द्वारा नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#ल5|ल5]]{{*}} खराब मशीनी अनुवाद'''</center> इस मापदंड के अंतर्गत वे लेख आते हैं जो किसी अन्य भाषा के लेख का अत्यधिक खराब मशीनी अनुवाद हैं जिन्हें सुधारने की तुलना में दुबारा शुरू से लिखना अधिक उचित होगा। यदि आपने यह लेख किसी अन्य भाषा के विकिपीडिया से अनूदित कर के यहाँ डाला है और आप इसका अनुवाद सुधारना चाहते हैं तो कृपया अनुवाद सुधार सम्पूर्ण होने से पहले लेख को मुख्य नामस्थान में ना डालें, बलकी अपने सदस्य उप-पृष्ठ की तरह उसका अनुवाद करें। अनुवाद सम्पूर्ण होने पर आप उसे मुख्य नामस्थान में [[वि:स्थानांतरण|स्थानांतरित]] कर सकते हैं। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। [[सदस्य:Pkrs1|Pkrs1]] ([[सदस्य वार्ता:Pkrs1|वार्ता]]) 18:26, 31 अगस्त 2025 (UTC) == Last Few Days: WikiConference India 2026 Scholarship Applications == <div lang="en" dir="ltr" class="mw-content-ltr"> ''{{int:please-translate}}'' Dear Wikimedian, We're happy to share that scholarship applications for '''WikiConference India 2026''' are currently open and the deadline is just around the corner. [[m:Special:MyLanguage/WikiConference India 2026|WikiConference India 2026]] is the fourth edition of the national-level conference that brings together Wikimedians and stakeholders engaged in Indic-language Wikimedia projects and the broader open knowledge movement across India and South Asia. The conference will take place in Kochi, Kerala, from 4–6 September 2026. * You can find the more information and the application form at the [[m:Special:MyLanguage/WikiConference India 2026/Scholarship|Scholarship page here at Meta wiki]] * '''Scholarship deadline: 15 April 2026, 11:59 PM IST''' With only a few days left, we warmly encourage you to apply if you haven’t already and kindly request you to share this with your community and encourage others to apply. For more information and regular updates, we encourage you to visit the conference Meta page. Warm regards, <br> on behalf of the WikiConference India 2026 Organising Team ''This message was sent with [[सदस्य:MediaWiki message delivery|MediaWiki message delivery]] ([[सदस्य वार्ता:MediaWiki message delivery|वार्ता]]) on 18:30, 11 अप्रैल 2026 (UTC)'' </div> <!-- https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WCI_2026_active_users&oldid=30389801 पर मौजूद सूची का प्रयोग कर के User:Gnoeee@metawiki द्वारा भेजा गया सन्देश --> == [[:अभिजीत दीपके|अभिजीत दीपके]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:अभिजीत दीपके|अभिजीत दीपके]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/अभिजीत दीपके|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/अभिजीत दीपके]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>उल्लेखनीय नहीं।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। <span style="text-shadow:black 3px 3px 2px;color:orange;">☆★</span>[[सदस्य:चाहर धर्मेंद्र|<u><span style="color:Cyan;">चाहर धर्मेंद्र</span></u>]]<sup>[[सदस्य वार्ता:चाहर धर्मेंद्र|<small style="color:orange">--राम राम जी--</small>]]</sup> 09:33, 22 मई 2026 (UTC) == जून 2026 == [[File:Information orange.svg|25px|alt=Information icon]] कृपया विकिपीडिया पर अरचनात्मक संपादन करने से बचें, जैसा कि आपने [[:बांग्लादेश यूनिवर्सिटी ऑफ इंजीनियरिंग एंड टेक्नोलॉजी]] पर किया है। ''विकिपीडिया पर एक पृष्ठ से सामग्री कट करके उसे दूसरे शीर्षक पर स्थानांतरण करना अनुचित है। इससे पृष्ठ का इतिहास स्थानांतरित नहीं होता जबकि यहाँ पृष्ठ का इतिहास उसके साथ संरक्षित रखने की परंपरा है। यदि आप शीर्षक में बदलाव चाहते हों तो उचित कारण/तर्क एवं आवश्यकतानुसार संदर्भ देते हुए साँचा {{tl|नाम बदलें}} के प्रयोग द्वारा लेख के वार्ता पन्ने पर लिखें।''<!-- Template:uw-yourcustom2 --> --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 01:05, 11 जून 2026 (UTC) == [[:साँचा:International cricket in 2026|साँचा:International cricket in 2026]] पृष्ठ का [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकन == नमस्कार, [[:साँचा:International cricket in 2026|साँचा:International cricket in 2026]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत [[वि:पृष्ठ हटाने हेतु चर्चा|हटाने हेतु चर्चा]] के लिये नामांकित किया गया है। इस बारे में चर्चा '''[[:विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/साँचा:International cricket in 2026|विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/साँचा:International cricket in 2026]]''' पर हो रही है। इस चर्चा में भाग लेने के लिये आपका स्वागत है। नामांकनकर्ता ने नामांकन करते समय निम्न कारण प्रदान किया है: <center>केवल लाल कड़ियों वाला नेविगेशन साँचा।</center> कृपया इस नामांकन का उत्तर चर्चा पृष्ठ पर ही दें। चर्चा के दौरान आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। परंतु जब तक चर्चा जारी है, कृपया पृष्ठ से नामांकन साँचा ना हटाएँ। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 22:29, 6 जुलाई 2026 (UTC) == अनावश्यक पुनर्प्रेषण निर्माण == नमस्ते स्वर्ण जी, आपके हालिया योगदानों की जाँच करते हुए मैंने देखा है कि आप अनावश्यक अनुप्रेषण पृष्ठ निर्मित कर रहे हैं। एक बार में तय कर लें कि शीर्षक क्या होना चाहिए। जो अनुप्रेषण किसी अन्य पृष्ठ पर कड़ी के रूप में नहीं प्रयुक्त है उससे अनुप्रेषण बनाने की आवश्यकता नहीं। जब आवश्यकता पड़े तभी अनुप्रेषण निर्मित करें। आगे से इसका ध्यान रखें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 14:22, 9 जुलाई 2026 (UTC) :मुझे लगता है कि यह अब भी जारी है। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 12:26, 11 जुलाई 2026 (UTC) == [[शकरकन्द]] == कृपया संपादन इतिहास की अनदेखी न करें, जैसा कि आपने शकरकन्द पृष्ठ पर किया है। अगर आपको लगता है कि लेख का शीर्षक गलत है तो आप {{tl|नाम बदलें}} साँचे के साथ लेख के वार्ता पृष्ठ पर स्थानांतरण का अनुरोध कर सकते हैं। – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:#5A4FCF;">&#9632;</span>]] 12:26, 11 जुलाई 2026 (UTC) == [[:इक्का (फ़िल्म)|इक्का (फ़िल्म)]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:इक्का (फ़िल्म)|इक्का (फ़िल्म)]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। [[वि:शीह|व2: परीक्षण]] / शून्य बैकलिंक वाला पुनर्प्रेषण / अनावश्यक पुनर्प्रेषण यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 15:35, 11 जुलाई 2026 (UTC) == [[:इक्का (फिल्म)|इक्का (फिल्म)]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:इक्का (फिल्म)|इक्का (फिल्म)]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। [[वि:शीह|व2: परीक्षण]] / शून्य बैकलिंक वाला पुनर्प्रेषण / अनावश्यक पुनर्प्रेषण यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 15:36, 11 जुलाई 2026 (UTC) == [[:शकरक़न्द|शकरक़न्द]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:शकरक़न्द|शकरक़न्द]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के [[वि:पृष्ठ हटाने की नीति#ल4|मापदंड ल4]] के&nbsp;अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है।<center>'''[[वि:पृष्ठ हटाने की नीति#ल4|ल4]]{{*}} प्रतिलिपि लेख'''</center> इस मापदंड के अंतर्गत वो लेख आते हैं जो किसी पुराने लेख की प्रतिलिपि हैं। इसमें वे लेख भी आते हैं जो किसी ऐसे विषय पर बनाए गए हैं जिनपर पहले से लेख मौजूद है और पुराना लेख नए लेख से बेहतर है। कृपया लेख बनाने से पहले उस शीर्षक के लिये [[विशेष:Search|खोज]] कर लिया करें। यदि आप इस विषय पर और लिखना चाहते हैं तो मूल लेख पर लिखें। यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> <!-- Template:Db-csd-notice-custom --> --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 16:32, 11 जुलाई 2026 (UTC) == [[:2026 नीट विवाद|2026 नीट विवाद]] पृष्ठ को [[वि:पृष्ठ हटाने की नीति#शीघ्र हटाना|शीघ्र हटाने]] का नामांकन == [[File:Ambox warning pn.svg|48px|left|alt=|link=]] नमस्कार, आपके द्वारा बनाए पृष्ठ [[:2026 नीट विवाद|2026 नीट विवाद]] को विकिपीडिया पर [[वि:पृष्ठ हटाने की नीति|पृष्ठ हटाने की नीति]] के अंतर्गत शीघ्र हटाने के लिये नामांकित किया गया है। [[वि:शीह|व2: परीक्षण]] / शून्य बैकलिंक वाला पुनर्प्रेषण / अनावश्यक पुनर्प्रेषण यदि यह पृष्ठ अभी हटाया नहीं गया है तो आप पृष्ठ में सुधार कर सकते हैं ताकि वह विकिपीडिया की नीतियों पर खरा उतरे। यदि आपको लगता है कि यह पृष्ठ इस मापदंड के अंतर्गत नहीं आता है तो आप पृष्ठ पर जाकर नामांकन टैग पर दिये हुए बटन पर क्लिक कर के इस नामांकन के विरोध का कारण बता सकते हैं। कृपया ध्यान रखें कि शीघ्र हटाने के नामांकन के पश्चात यदि पृष्ठ नीति अनुसार शीघ्र हटाने योग्य पाया जाता है तो उसे कभी भी हटाया जा सकता है।<br /><br /> यदि यह पृष्ठ हटा दिया गया है, तो आप [[वि:चौपाल|चौपाल]] पर इस पृष्ठ को अपने सदस्य उप-पृष्ठ में डलवाने, अथवा इसकी सामग्री ई-मेल द्वारा प्राप्त करने हेतु अनुरोध कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:54, 17 जुलाई 2026 (UTC) geioieqd9br21h0dbnqb2d3y3jjw4li चांदेसरा 0 1604647 6587040 6496119 2026-07-18T11:58:26Z Dsrprj 780832 /* */ Cr 6587040 wikitext text/x-wiki ''' चांदेसरा''' राजस्थान , भारत के बालोतरा ज़िले की पचपदरा तहसील में गाँव चांदेसरा की 2011 की जनगणना के अनुसार, गाँव की कुल जनसंख्या 2661 है।[[File:Chandesara.jpg|thumb|चांदेसरा]]<ref>{{Cite web |title=Chandesara Village Population - Pachpadra - Barmer, Rajasthan |url=https://www.census2011.co.in/data/village/87245-chandesara-rajasthan.html |access-date=2025-11-09 |website=www.census2011.co.in}}</ref><ref>{{Cite web |last=english |title=Chandesara Pin Code - 344034, All Post Office Areas PIN Codes, Search barmer Post Office Address |url=https://news.abplive.com/pincode/rajasthan/barmer/chandesara-pincode-344034.html |access-date=2025-11-09 |website=ABP Live |language=en}}</ref><ref>{{Cite web |last=News |first=India TV |title=Chandesara Pin Code {{!}} Postal Code (Zip Code) of Chandesara, Barmer, Rajasthan, India |url=https://www.indiatvnews.com/pincode/rajasthan/barmer/chandesara |access-date=2025-11-09 |website=India TV News |language=en}}</ref> ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:बाड़मेर ज़िले के गाँव]] [[श्रेणी:राजस्थान की तहसीलें]] ocldcmvyubtt4guj7g1zbqrvc488a1x मक्ता महबूबपेट 0 1606382 6586929 6580478 2026-07-17T19:39:55Z Curvasingh 654091 6586929 wikitext text/x-wiki {{Infobox settlement | name = मक्ता महबूबपेट | native_name = | native_name_lang = | other_name = | nickname = | settlement_type = नगर पालिका वार्ड | image_skyline = Maktha Mahabubpet lake Pedda Kudi Cheruvu full.jpg | image_alt = Maktha Mahaboobpet lake, Serilingampally mandal , Miyapur | image_caption = पेड्डा कुडी चेरुवु, साथ ही बैकग्राउंड में स्काईलाइन का हिस्सा बने Team4 Nyla और Candeur40 के ऊँचे रिहायशी टावर। | pushpin_map = India Hyderabad#India Telangana#India | pushpin_label_position = | pushpin_map_alt = | pushpin_map_caption = तेलंगाना में स्थिति | coordinates = {{coord|17.516017|N|78.348768|E|display=inline,title}} | subdivision_type = [[देश]] | subdivision_name ={{IND}} | subdivision_type1 = [[भारत के राज्य तथा केन्द्र-शासित प्रदेश|प्रान्त]] | subdivision_name1 = [[तेलंगाना]] | subdivision_type2 = [[तेलंगाना के जिले|District]] | subdivision_name2 = [[रंगारेड्डी ज़िला]] | subdivision_type3 = [[City]] | subdivision_name3 = [[हैदराबाद]] | subdivision_type4 = [[Administrative divisions of India|Revenue Division]] | subdivision_name4 = [[Rajendranagar mandal|Rajendranagar]] | subdivision_type5 = [[Administrative divisions of India|Revenue Mandal]] | subdivision_name5 = [[Serilingampally]] ([[Mandal]] Code #6) | subdivision_type6 = [https://www.ghmc.gov.in/quicklinks/Notification%20on%20delimitation%20300%20wards%20in%20GHMC.pdf GHMC Circle Wise Delimitation Election Ward] | subdivision_name6 = [https://www.ghmc.gov.in/quicklinks/Notification%20on%20delimitation%20300%20wards%20in%20GHMC.pdf West Zone, Serilingampally (North), Circle-48, Miyapur, Ward-241] | established_title = <!-- Established --> | established_date = | founder = | named_for = | unit_pref = Metric | area_footnotes = | area_rank = | area_total_km2 = | elevation_footnotes = | elevation_m = | population_total = | population_as_of = | population_rank = | population_density_km2 = auto | population_demonym = | population_footnotes = | demographics_type1 = Languages | demographics1_title1 = Official | demographics1_info1 = [[तेलुगु भाषा|तेलुगु]] | timezone1 = [[Indian Standard Time|IST]] | utc_offset1 = +5:30 | postal_code_type = [[Postal Index Number|PIN]] | postal_code = 500049 | registration_plate = TG-07 | government_footnotes = <!-- for references: use <ref> tags --> | government_type = [[Municipal governance in India|Municipal Corporation]] | governing_body = [[साइबराबाद नगर निगम]] | blank1_name_sec1 = [[Lok Sabha]] constituency | blank1_info_sec1 = [[चेवेल्ला लोक सभा निर्वाचन क्षेत्र]] | blank2_name_sec1 = [[Vidhan Sabha]] constituency | blank2_info_sec1 = [[सेरिलिंगमपल्ली विधानसभा निर्वाचन क्षेत्र|सेरिलिंगमपल्ली]] (विधानसभा निर्वाचन क्षेत्र) | leader_title2 = [[विधानसभा सदस्य (भारत)|विधानसभा]] | leader_name2 = अरेकापुडी गांधी(INC) | leader_title3 = [[सांसद]] | leader_name3 = कोण्डा. विश्वेश्वर रेड्डी | website = {{URL|https://cmc.telangana.gov.in/}} | footnotes = }} '''मक्ता महबूबपेट''' (अंग्रेजी: ''[[:en:Maktha Mahabubpet|Maktha Mahabubpet]]'') हैदराबाद के [[मियापुर]] इलाके में स्थित एक गाँव या क्षेत्र का नाम है,<ref name="primegovtland">{{cite web|url=https://www.newindianexpress.com/states/telangana/2025/Dec/09/rs-600-crore-govt-land-reclaimed-in-miyapur|title=Rs 600 crore govt land reclaimed in Miyapur}}</ref><ref>{{cite web|url=https://www.ndtv.com/india-news/hyderabad-family-of-five-including-2-year-old-found-dead-suicide-suspected-9128846|title=Hyderabad Family Of Five, Including 2-Year-Old, Found Dead, Suicide Suspected}}</ref> जो रंगा रेड्डी जिले में आता है, और यहाँ 'आई प्ले आई लर्न' प्री-स्कूल जैसे संस्थान और विभिन्न रेस्टोरेंट हैं, और यह एरिया पिनकोड 500049 के अंतर्गत आता है, जहाँ कई घर और दुकानें भी हैं। यहां [[राष्ट्रीय राजमार्ग ६५|नेशनल हाईवे 65]] (NH65) से पहुंचा जा सकता है, जो हैदराबाद को पुणे और मछलीपट्टनम से जोड़ता है। ==भूगोल== मक्ता महबूबपेट लगभग 17.516017°N 78.348768°E पर, दक्कन के पठार पर लगभग 536 मीटर की ऊँचाई पर स्थित है। यह एक छोटा भौगोलिक क्षेत्र है, जिसे प्रशासनिक रिकॉर्ड में एक वार्ड के रूप में वर्गीकृत किया गया है, और इसके चारों ओर उत्तर में मदीनागुडा, पश्चिम में हफ़ीज़पेट और दक्षिण-पश्चिम में चंदननगर जैसे इलाके हैं। यहाँ का भूभाग हैदराबाद की सवाना जलवायु (उष्णकटिबंधीय आर्द्र और शुष्क) के अनुरूप है, जहाँ औसत वार्षिक वर्षा लगभग 800 mm होती है और तापमान 15 से 40°C के बीच रहता है। इस इलाके में कई जल निकाय हैं, जिनमें प्रमुख मक्ता महबूबपेट झील<ref>{{cite web|url=https://www.hmda.gov.in/wp-content/uploads/2020/07/11th-Phase-Inside-ORR.pdf|title=Notification of FTL Boundaries}}</ref><ref>{{cite web|url=https://www.newindianexpress.com/cities/hyderabad/2018/May/20/driving-in-hyderabads-miyapur-is-a-tightrope-walk-1816967.html|title=Driving in Hyderabad's Miyapur is a tightrope walk}}</ref> शामिल है, जो एक स्थानीय जलाशय और मनोरंजक स्थल के रूप में कार्य करती है। मियापुर समूह की आस-पास की झीलों में मियापुर चेरुवु (गुरुनाथम चेरुवु), मीडी कुंटा (BK एन्क्लेव झील) और पटेल चेरुवु शामिल हैं। व्यापक सेरिलिंगमपल्ली मंडल में खनिज संसाधनों में क्वार्ट्ज, फेल्डस्पार और चूना पत्थर शामिल हैं, जहाँ रेत के खनन की गतिविधियाँ सीमित हैं। ==सीमाचिह्न== मक्ता महबूबपेट में कई धार्मिक और प्राकृतिक जगहें हैं, जो इसकी सांस्कृतिक विविधता को दिखाती हैं: *[https://www.google.com/maps/place/Pedda+Kudi+Cheruvu/@17.516903,78.3481531,666m/data=!3m2!1e3!4b1!4m6!3m5!1s0x3bcb8d0032561cd3:0x77c3f3d5a79acd49!8m2!3d17.5168994!4d78.3499738!16s%2Fg%2F11n56vsr5f?entry=ttu&g_ep=EgoyMDI2MDMwNC4xIKXMDSoASAFQAw%3D%3D मक्ता महबूबपेट झील] (पेद्दा कुडी चेरुवु): मक्ता महबूबपेट इलाके में एक झील,<ref>{{cite web|url=https://www.deccanchronicle.com/southern-states/telangana/hydraa-begins-drainage-pipeline-expansion-works-in-miyapur-to-prevent-flooding-1965796|title=HYDRAA Begins Drainage Pipeline Expansion Works in Miyapur to Prevent Flooding}}</ref> जिसका इस्तेमाल लोकल मनोरंजन और बायोडायवर्सिटी को सपोर्ट करने के लिए किया जाता है।<ref>{{cite web|url=https://www.thehindu.com/news/national/telangana/mayor-takes-stock-of-sanitation-civic-issues-in-serilingampally/article69073039.ece|title=Mayor takes stock of sanitation, civic issues in Serilingampally}}</ref><ref>{{cite web|url=https://www.newindianexpress.com/cities/hyderabad/2025/Jan/08/hyderabad-mayor-unhappy-with-sanitation-management|title=Hyderabad Mayor unhappy with sanitation management}}</ref> झील के चारों ओर वॉकिंग/रनिंग ट्रैक बनाने का प्लान है। फुल टैंक लेवल (FTL) एरिया 17.20 एकड़ दर्ज किया गया है, जो इसे सेरिलिंगमपल्ली इलाके में एक ठीक-ठाक साइज़ की झील बनाता है। *पोचम्मा मंदिर: देवी पोचम्मा, गांव (ग्रामदेवता) और देवी मां को समर्पित एक लोकल हिंदू मंदिर। *वेंकटेश्वर मंदिर: हिंदू पूजा की जगह, खासकर त्योहारों के दौरान। *मक्ता मस्जिद (मस्जिद-ए-अली मुर्तुज़ा) और मस्जिद-ए-हबीब उन्नीसा: मुस्लिम समुदाय की सेवा करने वाली मस्जिद। ==मुख्य घटनाएँ== मई 2024 में, GHMC ने साई ज्योति नगर, मक्ता महबूबपेट में मस्जिद-ए-हबीब उन्निसा की चारदीवारी को यह दावा करते हुए गिरा दिया कि वह पेद्दा कुडी चेरुवु के FTL (पूर्ण टैंक स्तर) पर बनाई गई थी। अगस्त 2025 में, एक दुखद घटना घटी, जिसमें मक्ता महबूबपेट कॉलोनी के एक घर में एक ही परिवार के पाँच सदस्य मृत पाए गए; इसके बाद मियापुर अधिकारियों ने पुलिस जाँच शुरू की। इस मामले में, जिसमें उप्पारी लक्ष्मैया (60), उनकी पत्नी उप्पारी वेंकटम्मा (55), और तीन अन्य लोग शामिल थे, सुरक्षा को लेकर समुदाय की चिंताओं को उजागर किया। दिसंबर 2025 में, HYDRAA ने अवैध अतिक्रमण हटाए और मक्ता महबूबपेट सर्वे नंबर 44 में पाँच एकड़ (जिसकी कीमत 600 करोड़ रुपये है) की कीमती सरकारी ज़मीन वापस हासिल की। यह ज़मीन राज्य सरकार और निजी पक्षों—जिनमें जनप्रिया इंजीनियर्स सिंडिकेट जैसे डेवलपर भी शामिल हैं—के बीच चल रहे एक लंबे विवाद का हिस्सा है; यह विवाद 51 एकड़ ज़मीन के कथित तौर पर धोखाधड़ी से हस्तांतरण से जुड़ा है।<ref>{{cite web|url=https://timesofindia.indiatimes.com/city/hyderabad/telangana-hc-slaps-rs-10000-fine-on-revenue-secretary/articleshow/93039902.cms|title=Telangana HC slaps Rs 10,000 fine on revenue secretary}}</ref> इस सर्वे क्षेत्र में स्थित कई संपत्तियों को पंजीकरण (रजिस्ट्रेशन) संबंधी समस्याओं का सामना करना पड़ा है, क्योंकि 2013 में कलेक्टर द्वारा जारी एक अधिसूचना में इस ज़मीन को सरकारी ज़मीन घोषित कर दिया गया था; इसके परिणामस्वरूप, संपत्तियों के दस्तावेज़ों को पंजीकृत करवाने के लिए कई याचिकाएँ अदालतों में दायर की गई हैं। सर्वे नंबर 44 का कुल रकबा 260.01 एकड़ है। सेठवार गाँव के रिकॉर्ड के अनुसार, यह पूरी ज़मीन सरकारी ज़मीन के तौर पर दर्ज है और प्राइवेट रजिस्ट्रेशन पर रोक लगाने के लिए इसे रजिस्ट्रेशन एक्ट की धारा 22-A के तहत लिस्ट किया गया है।<ref>{{cite web|url=https://indiankanoon.org/docfragment/113343765/?formInput=deputy%20tahsildar%20%20%20%20%20sortby%3A%20mostrecent|title=Syed Rafiuddin vs The Tahsildar/Special Deputy ... on 24 July, 2025}}</ref> जनवरी 2026 में, HYDRAA ने अवैध अतिक्रमण हटाए और मक्ता महबूबपेट सर्वे नंबर 44 में 15 एकड़ (जिसकी कीमत 3000 करोड़ रुपये है) की कीमती सरकारी ज़मीन वापस हासिल की।<ref>{{cite web|url=https://timesofindia.indiatimes.com/city/hyderabad/hydraa-reclaims-15-acres-govt-land-worth-3k-cr-in-miyapur/articleshow/126460244.cms|title=HYDRAA reclaims 15 acres govt land worth 3k cr in Miyapur}}</ref><ref>{{cite web|url=https://www.thehindu.com/news/national/telangana/hydraa-removes-encroachments-from-19-acres-of-government-land/article70495105.ece|title=HYDRAA removes encroachments from 15 acres of govt land in Miyapur worth around ₹3000 crore}}</ref><ref>{{cite web|url=https://www.deccanchronicle.com/southern-states/telangana/homes-safe-hydraa-tells-miyapur-residents-1930091|title=Homes Safe, HYDRAA Tells Miyapur Residents}}</ref> अप्रैल 2026 में, बिहार की रहने वाली 26 वर्षीय सॉफ्टवेयर इंजीनियर, इशिका सिंह ने कथित तौर पर मियापुर के मक्ता महबूबपेट स्थित NSK प्लेटिना E-11 अपार्टमेंट में आत्महत्या कर ली;<ref>{{cite web|url=https://www.casemine.com/judgement/in/69ff88ebbe52a023b986b7f9|title=Mr. Neeraj Bansal vs State of Telangana May 2026}}</ref><ref>{{cite web|url=https://www.thenewsminute.com/telangana/hyderabad-newlywed-software-engineer-dies-by-suicide-following-dowry-harassment|title=Hyderabad: Newlywed software engineer dies by suicide following dowry harassment}}</ref> आरोप है कि उनके पति नीरज बंसल उन्हें अतिरिक्त दहेज और अपनी स्टार्ट-अप कंपनी, BeSpoke AI Stylist में पैसे निवेश करने के लिए लगातार प्रताड़ित कर रहे थे।<ref>{{cite web|url=https://www.aajtak.in/amp/crime/news/story/hyderabad-miyapur-ishika-yadav-suicide-dowry-case-pvzs-rpti-2513892-2026-04-03|title=हैदराबाद में शादी के एक महीने बाद सॉफ्टवेयर इंजीनियर इशिका यादव ने किया सुसाइड, पति पर दहेज उत्पीड़न का आरोप}}</ref><ref>{{cite web|url=https://www.ndtv.com/india-news/newly-married-hyderabad-techie-dies-by-suicide-over-husbands-dowry-torture-11302896|title=Newly Married Hyderabad Techie Dies By Suicide Over Husband's Dowry Torture}}</ref><ref>{{cite web|url=https://www.thehindu.com/news/cities/Hyderabad/husband-booked-for-dowry-harassment-after-woman-ends-life/article70814394.ece|title=Husband booked for dowry harassment after woman ends life}}</ref> ==चित्र दीर्घा== <gallery mode="packed" heights="150"> चित्र:Satyanarayana enclave maktha mahboobpet.jpg|सत्यनारायण एन्क्लेव मकथा महबूबपेट चित्र:Ambedkar statue miyapur maktha.jpg|अंबेडकर मूर्ति मियापुर मकथा चित्र:Nsk platina maktha mahabubpet 2 blocks hyd.jpg|एनएसके प्लेटिना गेटेड मकता महबूबपेट मियापुर हैदराबाद चित्र:Pochamma temple maktha.jpg|पोचम्मा मंदिर मकथा चित्र:Maktha Mahabubpet full chowk view.jpg|मक्था महाबूबपेट का पूरा चौक का नज़ारा चित्र:Apollo pharmacy maktha mahaboobpet lab test miyapur.jpg|अपोलो फार्मेसी मकथा महबूबपेट चित्र:Masjid-e-Habeeb Unnisa maktha miyapur.jpg|मस्जिद-ए-हबीब उन्नीसा मक्तहा मियापुर </gallery> == इन्हें भी देखें == * [[हैदराबाद]] * [[रंगारेड्डी ज़िला]] == सन्दर्भ == {{टिप्पणीसूची}} {{हैदराबाद के विषय}} [[श्रेणी:रंगारेड्डी ज़िले के नगर]] [[श्रेणी:हैदराबाद में मुहल्ले]] s8xc4xpwjj8s54500gyktha7ii83bl4 स्लैश 0 1608647 6586932 6529142 2026-07-17T20:56:12Z ~2026-40226-16 936751 /* */ 6586932 wikitext text/x-wiki '''काट''' या '''स्लैश''' एक तिरछी लाइन वाला (/) विराम चिह्न है। इसे ''स्ट्रोक'' या ''सॉलिडस'', ''फॉरवर्ड स्लैश'' आदि अन्य ऐतिहासिक या तकनीकी नामों से भी जाना जाता है। इसका उपयोग [[पूर्ण विराम]], अल्पविराम, विभाजन और भिन्न (बटा), तारीखों को अलग करने, कई वैकल्पिक या संबंधित शब्दों के बीच तथा संक्षिप्तीकरण को दर्शाने के लिए किया जाता है। ==इतिहास== ===विभिन्न अर्थ में प्रयोग=== शुरुआत में स्लैश को डैश और वर्टिकल स्ट्रोक आदि के रूप में काम में लाया जाता था। दूसरे संदर्भों से भिन्न स्लैश का वर्तमानकालीन उपयोग, मध्ययुगीन यूरोपियन ''वर्गुल'' से लिया गया है जिसे लातिन में ''virgula'' कहा जाता है जिसका शाब्दिक अर्थ है- "टहनी"। इसका उपयोग '[[पूर्ण विराम]]', 'स्क्रैच कॉमा' और 'यति' (सेज़ुरा मार्क) के रूप में किया जाता था। इसका पहला उपयोग पूर्ण विराम के रूप में किया गया जिसका स्थान अंततः 'आधुनिक बिंदु' (लो डॉट) ने ले लिया।<ref>{{cite book |title=The Oxford English Dictionary |date=1933 |publisher=ऑक्सफ़ोर्ड यूनिवर्सिटी प्रेस |page=235 |url=https://archive.org/details/the-oxford-english-dictionary-1933-all-volumes/The%20Oxford%20English%20Dictionary%20Volume%2012%20-%20Variant/page/n238/mode/1up |access-date=20 फरवरी 2026 |language=en |trans-title=ऑक्सफोर्ड अंग्रेज़ी कोश}}</ref> यह अन्य दो अलग-अलग अर्थों के रूप में विकसित होकर अल्पविराम (, या कॉम्मा) और 'खड़ी पाई' (| या सेज़ुरा मार्क) बन गया। ===अल्पविराम के रूप में प्रयोग=== इसका अल्पविराम के रूप में विशेष उपयोग [[फ़्रान्स|फ्रांस]] में व्यापक रूप से हुआ। वहाँ इसका उपयोग किसी शब्द के अगले पृष्ठ की पंक्ति पर जारी रहने को दर्शाने के लिए भी किया जाता था जो कि बाद में हाइफ़न (-) के द्वारा किया जाने लगा।<ref>{{cite book |last1=ऐरिक |first1=पैर्ट्रिज |title=You Have a Point There: A Guide to Punctuation and Its Allies |date=2003 |publisher=टेलर & फ़्रांसिस |location=लंदन |isbn=9781134942244 |page=155 |url=https://books.google.co.in/books?id=lN-KAgAAQBAJ&printsec=copyright&redir_esc=y |access-date=20 फरवरी 2026 |language=en |trans-title=आपकी बात सही है: विराम चिह्न और उसके सहयोगियों के लिए एक गाइड}}</ref> ===स्लैश के रूप में प्रयोग=== प्रारंभिक आधुनिक काल में पूरे [[मध्य यूरोप]] में उपयोग होने वाली 'फ्राकतुर लिपि' में एक एकल स्लैश का उपयोग स्क्रैच कॉमा के रूप में और दोहरे स्लैश (//) का उपयोग डैश के रूप में किया जाता था। ===हाइफ़न के रूप में प्रयोग=== दोहरा या डबल स्लैश आगे चलकर 'डबल ऑब्लिक हाइफ़न' (⸗) और 'डबल हाइफ़न' (⹀) के रूप में विकसित हुआ। इसे बाद में एकल डैश के रूप में रूढ़ कर दिया गया। ===ओब्लिक के रूप में प्रयोग=== 18वीं सदी में, इस चिह्न को अंग्रेज़ी में 'ओब्लिक' के नाम से जाना जाता था।<ref name>{{cite book |title=Oxford English Dictionary |edition=3rd |contribution=ओब्लिक, ''विशेषण., संज्ञा.,'' और ''क्रिया विशेषण.'' |date=2004 |publisher=ऑक्सफ़ोर्ड यूनिवर्सिटी प्रेस|language=en |trans-title=ऑक्सफोर्ड अंग्रेज़ी कोश}}</ref> ==इन्हें भी देखें== * [[पूर्ण विराम]] * [[अल्पविराम]] ==सन्दर्भ== {{टिप्पणीसूची}} [[श्रेणी:चिन्ह]] [[श्रेणी:गणितीय चिन्ह]] [[श्रेणी:भाषा चिह्न]] hplomj54bwjhc6eih373rkj2k5qcye9 एडवर्ड मिल्स परसेल 0 1612847 6586913 6581358 2026-07-17T18:14:06Z चाहर धर्मेंद्र 703114 विकि कड़ियाँ 6586913 wikitext text/x-wiki {{Infobox scientist | name = एडवर्ड मिल्स परसेल | image = Edward Mills Purcell.jpg | caption = 1952 में परसेल | birth_date = {{birth date|df=yes|1912|08|30}} | birth_place = टेलरविले, इलिनोइस, संयुक्त राज्य अमेरिका | death_date = {{death date and age|df=yes|1997|3|7|1912|8|30}} | death_place = कैंब्रिज, मैसाचुसेट्स, संयुक्त राज्य अमेरिका | alma_mater = {{plainlist| *[[पर्ड्यू विश्वविद्यालय]] ([[अभियान्त्रिकी में स्नातक|BSEE]]) *[[हार्वर्ड विश्वविद्यालय]] ([[कला स्नातकोत्तर|MA]], [[पीएचडी]]) }} | thesis_title = गोलाकार संघनन द्वारा आवेशित कणों का संकेंद्रण | thesis_url = https://ui.adsabs.harvard.edu/abs/1938PhRv...54..818P/abstract | thesis_year = 1938 | doctoral_advisor = केनेथ बैनब्रिज | academic_advisors = जॉन वैन वलेक | doctoral_students = {{plainlist|1= *जॉर्ज बेनेडेक *जॉर्ज पाके *चार्ल्स पेंस स्लिच्टर }} | notable_students = {{plainlist|1= *[[निकोलास ब्लोमबेर्गेन]] *जूली फौकेट }} | known_for = {{plainlist| *नाभिकीय चुंबकीय अनुनाद स्पेक्ट्रोस्कोपी *21 सेमी रेखा *माइक्रोस्विमर *स्कैलप प्रमेय *पर्सेल प्रभाव *स्मिथ-पर्सेल प्रभाव }} | awards = {{ubl|[[भौतिकी में नोबेल पुरस्कार]] (1952)|ओर्स्टेड पदक (1967)|[[नेशनल मेडल ऑफ सांइस]] (1979)|मैक्स डेलब्रुक पुरस्कार (1984)|बीट्रिस एम. टिन्सले पुरस्कार (1988)}} | footnotes = | field = [[भौतिक शास्त्र]] | work_institutions = {{plainlist| *[[हार्वर्ड विश्वविद्यालय]] *[[मैसाचुसेट्स प्रौद्योगिकी संस्थान]] }} }} [[File:Green Banks - Ewen-Purcell Horn Antenna.jpg|thumb|1951 में हार्वर्ड विश्वविद्यालय की लाइमैन भौतिकी प्रयोगशाला में हेरोल्ड आई. इवेन और एडवर्ड एम. परसेल द्वारा 21 सेंटीमीटर तरंगदैर्ध्य पर परमाणु हाइड्रोजन गैस से उत्सर्जित रेडियो विकिरण का पहला सफल पता लगाने के लिए प्रयुक्त हॉर्न एंटीना। यह उपकरण वर्तमान में राष्ट्रीय रेडियो खगोल विज्ञान वेधशाला में संरक्षित है।<ref>{{cite web |title=E. M. Purcell - Biography |url=https://www.nobelprize.org/prizes/physics/1952/purcell/biographical/ |work=भौतिकी में नोबेल पुरस्कार 1952, फेलिक्स ब्लोच, ई.एम. पर्सेल|publisher=[[नोबेल संस्थान]] |access-date=22 मई 2012 |year=1952}}</ref>]] '''एडवर्ड मिल्स परसेल''' (30 अगस्त 1912 – 7 मार्च 1997) अमेरिकी [[भौतिक विज्ञानी]] थे, जिन्होंने आधुनिक भौतिकी और रसायन विज्ञान के विकास में महत्त्वपूर्ण योगदान दिया। वे विशेष रूप से तरल तथा ठोस पदार्थों में [[नाभिकीय चुम्बकीय अनुनाद]] की स्वतंत्र खोज के लिए प्रसिद्ध हैं। इस खोज को उन्होंने स्वतंत्र रूप से विकसित किया और इसके परिणाम 1946 में प्रकाशित हुए।<ref name="frs">{{Cite journal | last1 = ब्रेबिस| first1 = ब्लीनी | doi = 10.1098/rsbm.1999.0029 | title = Edward Mills Purcell. 30 August 1912 -- 7 March 1997: Elected For.Mem.R.S. 1989 | journal = रॉयल सोसाइटी के फेलो के जीवनी संबंधी संस्मरण | volume = 45 | pages = 437–447 | year = 1999 | doi-access = free }}</ref> परमाणु चुंबकीय अनुनाद विज्ञान की एक अत्यंत महत्त्वपूर्ण तकनीक है, जिसका उपयोग शुद्ध पदार्थों की आणविक संरचना तथा विभिन्न मिश्रणों की रासायनिक संरचना का अध्ययन करने के लिए व्यापक रूप से किया जाता है। आगे चलकर इसी सिद्धांत ने अनेक वैज्ञानिक और चिकित्सीय तकनीकों के विकास का आधार प्रदान किया। इस महत्त्वपूर्ण वैज्ञानिक उपलब्धि के लिए परसेल को वर्ष 1952 का [[भौतिकी में नोबेल पुरस्कार|भौतिकी का नोबेल पुरस्कार]] अमेरिकी-स्विस भौतिक विज्ञानी [[फीलिक्स ब्लाख]] के साथ संयुक्त रूप से प्रदान किया गया। दोनों वैज्ञानिकों को परमाणु चुंबकीय अनुनाद की खोज और उसके वैज्ञानिक महत्त्व को स्थापित करने के लिए सम्मानित किया गया था। अपने मित्रों और सहकर्मियों के बीच एडवर्ड परसेल सामान्यतः “एड परसेल” के नाम से जाने जाते थे। == जीवनी == एडवर्ड मिल्स परसेल का जन्म 30 अगस्त 1912 को अमेरिका के इलिनॉय राज्य के टेलरविल नगर में एडवर्ड ए. परसेल और मैरी एलिज़ाबेथ मिल्स के पुत्र के रूप में हुआ था।<ref>{{Cite web|title=E. M. Purcell – Biographical|url=https://www.nobelprize.org/prizes/physics/1952/purcell/biographical/|url-status=live|publisher=[[नोबेल संस्थान]]|archive-url=https://web.archive.org/web/20260217032721/https://www.nobelprize.org/prizes/physics/1952/purcell/biographical/|archive-date=2026-02-17|access-date=2026-04-23}}</ref> प्रारम्भ से ही उनकी रुचि विज्ञान और अभियांत्रिकी के क्षेत्रों में थी। उन्होंने 1933 में [[पर्ड्यू विश्वविद्यालय]] से विद्युत अभियांत्रिकी में [[विज्ञान स्नातक]] की उपाधि प्राप्त की। इसके बाद उन्होंने [[हार्वर्ड विश्वविद्यालय]] में उच्च शिक्षा ग्रहण की और वहाँ से 1935 में भौतिकी में [[कला स्नातकोत्तर|परास्नातक]] तथा 1938 में [[पीएचडी|डॉक्टरेट]] की उपाधि अर्जित की।<ref>{{Cite web|title=Edward M. Purcell|url=https://history.aip.org/phn/11603005.html|url-status=dead|website=history.aip.org|archive-url=https://web.archive.org/web/20241202013827/https://history.aip.org/phn/11603005.html|archive-date=2024-12-02|access-date=2026-04-23}}</ref> पर्ड्यू विश्वविद्यालय में अध्ययन के दौरान वे फी कप्पा सिग्मा छात्र संगठन की अल्फा ज़ी शाखा के सदस्य भी रहे।<ref>{{cite web|url=http://www.greek101.com/lounge/famous.php?org=Phi%20Kappa%20Sigma|title=Famous Phi Kappa Sigma's - Famous Fraternity & Sorority Greeks - Greek 101|work=greek101.com|access-date=2008-10-04|archive-date=2016-03-03|archive-url=https://web.archive.org/web/20160303074213/http://www.greek101.com/lounge/famous.php?org=Phi+Kappa+Sigma|url-status=dead}}</ref> [[द्वितीय विश्व युद्ध]] के दौरान परसेल ने मैसाचुसेट्स प्रौद्योगिकी संस्थान की विकिरण प्रयोगशाला में सूक्ष्मतरंग राडार प्रौद्योगिकी के विकास पर कार्य किया। युद्ध समाप्त होने के बाद वे पुनः हार्वर्ड विश्वविद्यालय लौट आए और अपने अनुसंधान कार्यों में जुट गए। दिसंबर 1945 में उन्होंने अपने सहयोगियों रॉबर्ट पाउंड और हेनरी टॉरे के साथ मिलकर [[नाभिकीय चुम्बकीय अनुनाद]] की खोज की।<ref>{{Cite journal | last1 = परसेल | first1 = ई.| last2 = टोरे | first2 = एच. | last3 = पाउंड | first3 = आर. | title = Resonance Absorption by Nuclear Magnetic Moments in a Solid | doi = 10.1103/PhysRev.69.37 | journal = भौतिक समीक्षा| volume = 69 | issue = 1–2 | pages = 37–38 | year = 1946 |bibcode = 1946PhRv...69...37P | doi-access = free }}</ref> यह खोज विज्ञान के इतिहास में एक महत्त्वपूर्ण उपलब्धि सिद्ध हुई। परमाणु चुंबकीय अनुनाद वैज्ञानिकों को पदार्थों की रासायनिक संरचना, संघटन और गुणों का अत्यंत सटीक विश्लेषण करने की क्षमता प्रदान करता है। आज इसका व्यापक उपयोग भौतिकी, रसायन विज्ञान और जैवविज्ञान में किया जाता है। यही सिद्धांत आगे चलकर [[चुम्बकीय अनुनाद प्रतिबिम्ब]] तकनीक का आधार बना, जिसने चिकित्सा विज्ञान में रोगों के निदान की पद्धति को नई दिशा दी और इसे 20वीं शताब्दी की सबसे महत्त्वपूर्ण चिकित्सीय उपलब्धियों में स्थान दिलाया। परमाणु चुंबकीय अनुनाद की खोज के लिए एडवर्ड मिल्स परसेल ने [[स्टैनफोर्ड विश्वविद्यालय]] के [[फीलिक्स ब्लाख]] के साथ 1952 में भौतिकी का नोबेल पुरस्कार साझा किया। एडवर्ड मिल्स परसेल ने केवल परमाणु चुंबकीय अनुनाद के क्षेत्र में ही नहीं, बल्कि [[खगोल शास्त्र|खगोल विज्ञान]] और ठोस-अवस्था भौतिकी में भी उल्लेखनीय योगदान दिया। वे उन प्रथम वैज्ञानिकों में थे जिन्होंने [[आकाशगंगा]] में उपस्थित उदासीन हाइड्रोजन से उत्सर्जित रेडियो तरंगों का सफलतापूर्वक पता लगाया। यह विकिरण हाइड्रोजन परमाणु की अतिसूक्ष्म ऊर्जा-विभाजन प्रक्रिया से उत्पन्न होने वाली प्रसिद्ध 21 सेंटीमीटर रेखा के रूप में जाना जाता है।<ref>{{Cite journal | last1 = इवेन| first1 = एच.आई. | last2 = पर्सेल | first2 = ई.एम. | doi = 10.1038/168356a0 | title = Observation of a Line in the Galactic Radio Spectrum: Radiation from Galactic Hydrogen at 1,420 Mc./sec | url = https://archive.org/details/sim_nature-uk_1951-09-01_168_4270/page/356| journal = नेचर | volume = 168 | issue = 4270 | pages = 356 | year = 1951 |bibcode = 1951Natur.168..356E | s2cid = 27595927 }}</ref><ref>{{cite journal |last1=पर्सेल |first1=एडवर्ड |title=Radioastronomy and Communication Through Space. Brookhaven Lecture Series |url=https://digital.library.unt.edu/ark:/67531/metadc868785/m1/8/ |website=यूएनटी डिजिटल लाइब्रेरी|publisher=उत्तरी टेक्सास विश्वविद्यालय पुस्तकालय |access-date=2025-05-15 |date=1960-11-16 |doi=10.2172/4017898 |osti=4017898 }}</ref> इस खोज ने हमारी आकाशगंगा की सर्पिल भुजाओं का पहला स्पष्ट मानचित्र तैयार करने में सहायता की और [[रेडियो खगोलशास्त्र|रेडियो खगोल विज्ञान]] के विकास को नई गति प्रदान की। आज भी 21 सेंटीमीटर रेखा का अध्ययन आधुनिक खगोल विज्ञान की सबसे महत्त्वपूर्ण प्रेक्षणीय तकनीकों में से एक माना जाता है। [[ठोस अवस्था भौतिकी]] के क्षेत्र में भी परसेल का योगदान अत्यंत महत्त्वपूर्ण रहा। उन्होंने स्पिन-इको शिथिलीकरण, नाभिकीय चुंबकीय शिथिलीकरण तथा ऋणात्मक स्पिन तापमान जैसी अवधारणाओं के अध्ययन में अग्रणी भूमिका निभाई। विशेष रूप से ऋणात्मक स्पिन तापमान पर किया गया उनका कार्य आगे चलकर लेज़र प्रौद्योगिकी के विकास के लिए आधारभूत सिद्ध हुआ। इसके अतिरिक्त, भौतिक विज्ञानी [[नॉर्मन फॉस्टर रैमसे, जूनियर|नॉर्मन एफ. रैम्ज़ी]] के साथ मिलकर परसेल उन प्रारम्भिक वैज्ञानिकों में शामिल थे जिन्होंने कण भौतिकी में सीपी सममिति की पूर्ण वैधता पर प्रश्न उठाया। उनके इस वैचारिक योगदान ने बाद में कण भौतिकी के क्षेत्र में होने वाले महत्त्वपूर्ण अनुसंधानों और खोजों के लिए मार्ग प्रशस्त किया। एडवर्ड मिल्स परसेल को उनके वैज्ञानिक अनुसंधानों, शैक्षिक योगदानों और सार्वजनिक सेवा के लिए अनेक प्रतिष्ठित सम्मान प्राप्त हुए। वे अमेरिका के राष्ट्रपति [[ड्वाइट डेविड आइज़नहावर]], [[जॉन एफ॰ केनेडी]] और [[लिंडन बेन्स जॉनसन]] के विज्ञान सलाहकार के रूप में भी कार्यरत रहे, जहाँ उन्होंने राष्ट्रीय विज्ञान नीति और अनुसंधान से संबंधित विषयों पर महत्त्वपूर्ण परामर्श प्रदान किया। परसेल अमेरिकी भौतिकी समुदाय के अग्रणी व्यक्तित्वों में गिने जाते थे। वे अमेरिकन फिजिकल सोसाइटी के अध्यक्ष रहे तथा अमेरिकन फिलॉसॉफिकल सोसाइटी, संयुक्त राज्य राष्ट्रीय विज्ञान अकादमी और [[अमेरिकन एकेडमी ऑफ आर्ट्स एंड साइंसेज]] जैसी प्रतिष्ठित संस्थाओं के सदस्य भी थे। उनकी वैज्ञानिक प्रतिष्ठा और नेतृत्व क्षमता ने उन्हें अमेरिकी विज्ञान जगत के सबसे सम्मानित व्यक्तियों में स्थान दिलाया। उनकी उपलब्धियों के सम्मान में उन्हें 1979 में संयुक्त राज्य अमेरिका का सर्वोच्च वैज्ञानिक सम्मान, राष्ट्रीय विज्ञान पदक, प्रदान किया गया। इसके अतिरिक्त उन्हें [[नेशनल मेडल ऑफ सांइस|राष्ट्रीय रेडियो खगोल विज्ञान]] वेधशाला के समक्ष प्रतिष्ठित जैंस्की व्याख्यान प्रस्तुत करने का गौरव भी प्राप्त हुआ, जो रेडियो खगोल विज्ञान के क्षेत्र में विशिष्ट योगदान देने वाले वैज्ञानिकों को दिया जाता है। परसेल अपने छात्र जीवन में फी कप्पा सिग्मा छात्र संगठन से जुड़े थे। बाद में उनकी असाधारण उपलब्धियों के सम्मान में उन्हें उस संगठन के गौरव कक्ष में सम्मिलित किया गया। वे इस संगठन से जुड़े ऐसे पहले सदस्य थे जिन्हें नोबेल पुरस्कार प्राप्त हुआ, जिससे उनका नाम उसके इतिहास में विशेष सम्मान के साथ अंकित हो गया। एडवर्ड मिल्स परसेल एक उत्कृष्ट वैज्ञानिक होने के साथ-साथ प्रभावशाली शिक्षक और लेखक भी थे। उन्होंने “विद्युत और चुंबकत्व” नामक एक अभिनव परिचयात्मक पाठ्यपुस्तक की रचना की, जिसने भौतिकी शिक्षा के क्षेत्र में गहरा प्रभाव छोड़ा।<ref>{{cite book|url=https://books.google.com/books?id=A2rS5vlSFq0C|title=Electricity and Magnetism|isbn=9781107014022|last1=पर्सेल|first1=एडवर्ड एम.|last2=मोरिन|first2=डेविड जे.|date=2013-01-21|publisher=कैम्ब्रिज यूनिवर्सिटी प्रेस }}</ref> यह पुस्तक स्पुतनिक युग के दौरान राष्ट्रीय विज्ञान प्रतिष्ठान द्वारा समर्थित एक शैक्षिक परियोजना के अंतर्गत तैयार की गई थी। इसकी विशेषता यह थी कि इसमें विद्युत और चुंबकत्व के अध्ययन में सापेक्षता सिद्धांत की अवधारणाओं को प्रारम्भिक स्तर पर ही सम्मिलित किया गया, जो उस समय एक नवीन और प्रभावशाली दृष्टिकोण माना जाता था। 1965 में प्रकाशित इसका संस्करण संघीय अनुदान की शर्तों के कारण सार्वजनिक रूप से निःशुल्क उपलब्ध कराया गया था। प्रारम्भ में यह प्रसिद्ध बर्कले भौतिकी पाठ्यक्रम के एक खंड के रूप में प्रकाशित हुई थी। बाद में इसका संशोधित संस्करण परसेल और मोरिन के नाम से भी प्रकाशित किया गया, जो आज भी भौतिकी के विद्यार्थियों और शिक्षकों के बीच व्यापक रूप से लोकप्रिय है। जीवविज्ञान और द्रव गतिकी के क्षेत्र में भी परसेल का एक व्याख्यान विशेष रूप से प्रसिद्ध है, जिसका शीर्षक “निम्न रेनॉल्ड्स संख्या पर जीवन” था।<ref>{{Cite journal | last1 = परसेल | first1 = ई.एम। | doi = 10.1119/1.10903 | title = Life at low Reynolds number | journal = अमेरिकन जर्नल ऑफ फिजिक्स | volume = 45 | issue = 1 | pages = 3–11 | year = 1977 |bibcode = 1977AmJPh..45....3P | url = https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/226838/1/bussei_el_063101.pdf | hdl = 2433/226838 | hdl-access = free }}</ref> इस व्याख्यान में उन्होंने सूक्ष्म स्तर पर होने वाले द्रव प्रवाह की प्रकृति और उन बलों की व्याख्या की जो ऐसे परिवेश में प्रमुख भूमिका निभाते हैं। उन्होंने यह भी स्पष्ट किया कि निम्न [[रेनाल्ड संख्या]] वाले प्रवाह में समय-उत्क्रमणीयता का सिद्धांत किस प्रकार कार्य करता है। इसी संदर्भ में उन्होंने “स्कैलप प्रमेय” के रूप में प्रसिद्ध विचार प्रस्तुत किया, जो सूक्ष्म जीवों की गति को समझने में एक आधारभूत अवधारणा बन गया। विज्ञान के अनेक क्षेत्रों में स्थायी योगदान देने वाले एडवर्ड मिल्स परसेल का 7 मार्च 1997 को मैसाचुसेट्स राज्य के कैम्ब्रिज नगर में 84 वर्ष की आयु में निधन हो गया। उनके अनुसंधान, शिक्षण और लेखन ने आधुनिक भौतिकी, खगोल विज्ञान तथा विज्ञान शिक्षा पर गहरा और दीर्घकालिक प्रभाव छोड़ा। == इन्हें भी देखें == * [[चुम्बकीय अनुनाद प्रतिबिम्ब]] == सन्दर्भ == [[श्रेणी:1912 में जन्मे लोग]] [[श्रेणी:१९९७ में निधन]] [[श्रेणी:नोबेल पुरस्कार विजेता भौतिक विज्ञानी]] [[श्रेणी:अमेरिकी वैज्ञानिक]] 7ikrua5b6gao8knzde2s32r55dci1tu पोलिकार्प कुश 0 1612885 6586903 6576862 2026-07-17T17:39:02Z चाहर धर्मेंद्र 703114 विकि कड़ियाँ 6586903 wikitext text/x-wiki {{Infobox scientist | name = पोलिकार्प कुश | image = Polykarp Kusch.jpg | caption = 1955 में कुश | birth_date = {{Birth date|1911|1|26}} | birth_place = ब्लैंकेनबर्ग, ब्रंसविक की रियासत, [[जर्मन साम्राज्य]] | death_date = {{Death date and age|1993|3|20|1911|1|26}} | death_place = [[डैलस]], [[टेक्सस]], संयुक्त राज्य अमेरिका | fields = [[भौतिक शास्त्र]] | workplaces = {{plainlist| * [[टेक्सास विश्वविद्यालय, डेल्लास]] * [[कोलंबिया विश्वविद्यालय]] }} | alma_mater = {{plainlist| *इलिनोइस विश्वविद्यालय *{{nowrap|केस वेस्टर्न रिजर्व यूनिवर्सिटी}} }} | thesis_title = सीज़ियम और रुबिडियम के आणविक स्पेक्ट्रा | thesis_url = https://www.ideals.illinois.edu/handle/2142/46086 | thesis_year = 1936 | doctoral_advisor = फ्रांसिस व्हीलर लूमिस | doctoral_students = {{plainlist| *यूजीन डी. कॉमिन्स *गॉर्डन गोल्ड *शेल्डन शुल्त्स }} | notable_students = | known_for = [[इलेक्ट्रॉन]] के [[चुम्बकीय आघूर्ण]] को मापना | awards = {{nowrap|[[भौतिकी में नोबेल पुरस्कार]] (1955)}} }} '''पोलिकार्प कुश''' (26 जनवरी 1911 – 20 मार्च 1993) एक जर्मन-अमेरिकी [[भौतिक विज्ञानी]] थे, जिन्होंने [[परमाणु]] और [[कण भौतिकी]] के क्षेत्र में महत्त्वपूर्ण योगदान दिया। वे विशेष रूप से [[इलेक्ट्रॉन]] के [[चुंबकीय आघूर्ण]] के अत्यंत सटीक मापन के लिए प्रसिद्ध हैं। उनके प्रयोगों से यह सिद्ध हुआ कि इलेक्ट्रॉन का वास्तविक चुंबकीय आघूर्ण उस मान से थोड़ा अधिक है, जिसकी भविष्यवाणी तत्कालीन सिद्धांतों द्वारा की गई थी।<ref name="Nobel Prize">{{Cite web|title=Nobel Prize in Physics 1955|url=https://www.nobelprize.org/prizes/physics/1955/summary/|url-status=live|publisher=[[नोबेल संस्थान]]|archive-url=https://web.archive.org/web/20081201093027/http://nobelprize.org/nobel_prizes/physics/laureates/1955/index.html|archive-date=2008-12-01|access-date=2008-10-09}}</ref> इस खोज ने भौतिकी जगत में व्यापक प्रभाव डाला, क्योंकि इससे यह स्पष्ट हुआ कि मौजूदा सैद्धांतिक व्याख्याओं में संशोधन की आवश्यकता है। परिणामस्वरूप [[क्वाण्टम विद्युत्गतिकी|क्वांटम विद्युतगतिकी]] के क्षेत्र में नए अनुसंधानों और सैद्धांतिक नवाचारों को प्रोत्साहन मिला, जिसने आगे चलकर आधुनिक कण भौतिकी के विकास में महत्त्वपूर्ण भूमिका निभाई। अपने इस उत्कृष्ट कार्य के लिए पोलिकार्प कुश को वर्ष 1955 का [[भौतिकी में नोबेल पुरस्कार|भौतिकी का नोबेल पुरस्कार]] प्रदान किया गया।<ref name="PK bio">{{Cite web|last= ब्राउन|first=मैल्कम डब्ल्यू.|year=1993|url=https://www.nytimes.com/1993/03/23/obituaries/polykarp-kusch-nobel-laureate-in-physics-in-1955-is-dead-at-82.html|title=Polykarp Kusch, Nobel Laureate In Physics in 1955, Is Dead at 82|publisher=द न्यूयॉर्क टाइम्स}}</ref> यह सम्मान उन्होंने अमेरिकी भौतिक विज्ञानी [[विलिस इ लाम्ब|विलिस यूजीन लैम्ब]] के साथ संयुक्त रूप से प्राप्त किया, जिनके अनुसंधान ने भी [[परमाणु संरचना]] और [[क्वांटम सिद्धांत]] की समझ को नई दिशा प्रदान की। पोलिकार्प कुश का कार्य आज भी आधुनिक भौतिकी के आधारभूत प्रयोगात्मक योगदानों में गिना जाता है। == जीवनी == पॉलीकार्प कुश्च का जन्म 26 जनवरी 1911 को जर्मनी के ब्लैंकेनबर्ग नगर में हुआ था। वे [[लूथरवाद|लूथरन]] मिशनरी जॉन मैथियास कुश्च और हेनरिटा वान डेर हास के पुत्र थे। 1912 में उनका परिवार संयुक्त राज्य अमेरिका में आकर बस गया और बाद में 1922 में उन्हें [[संयुक्त राज्य की नागरिकता|अमेरिकी नागरिकता]] प्राप्त हुई।<ref name="NAS bio">{{Cite web|last=रैमसे|first=नॉर्मन एफ.|year=2008|url=https://www.nasonline.org/wp-content/uploads/2024/06/kusch-polykarp.pdf|title=Polykarp Kusch|publisher=राष्ट्रीय विज्ञान अकादमी}}</ref> मध्य-पश्चिमी अमेरिका में अपनी प्रारम्भिक शिक्षा पूर्ण करने के बाद कुश्च ने ओहायो राज्य के क्लीवलैंड स्थित केस इंस्टीट्यूट ऑफ टेक्नोलॉजी में प्रवेश लिया। यहीं से उन्होंने भौतिकी में स्नातक शिक्षा प्राप्त की और 1931 में [[विज्ञान स्नातक]] की उपाधि प्राप्त हुई। इसके पश्चात उन्होंने इलिनॉय विश्वविद्यालय में उच्च शिक्षा ग्रहण की, जहाँ से 1933 में उन्होंने [[विज्ञान स्नातकोत्तर|विज्ञान परास्नातक]] की उपाधि प्राप्त हुई। कुश्च ने अपनी आगे की शिक्षा भी इलिनॉय विश्वविद्यालय में जारी रखी और प्रसिद्ध भौतिक विज्ञानी फ्रांसिस व्हीलर लूमिस के निर्देशन में अनुसंधान कार्य किया। उनका शोध मुख्यतः प्रकाशीय आणविक वर्णक्रमिकी के क्षेत्र से संबंधित था। इसी विषय में किए गए उनके उत्कृष्ट अनुसंधान के आधार पर उन्हें 1936 में भौतिकी में [[पीएचडी|डॉक्टरेट]] की उपाधि प्रदान की गई।<ref>{{Cite web|title=Polykarp Kusch – Biographical|url=https://www.nobelprize.org/prizes/physics/1955/kusch/biographical/|url-status=live|publisher=[[नोबेल संस्थान]]|archive-url=https://web.archive.org/web/20260307081935/https://www.nobelprize.org/prizes/physics/1955/kusch/biographical/|archive-date=2026-03-07|access-date=2026-05-07}}</ref> यह शोध कार्य उनके वैज्ञानिक जीवन की प्रारम्भिक आधारशिला बना और आगे चलकर उन्हें परमाणु तथा कण भौतिकी के क्षेत्र में महत्त्वपूर्ण उपलब्धियों तक पहुँचाने में सहायक सिद्ध हुआ। वर्ष 1937 में पॉलीकार्प कुश्च [[कोलंबिया विश्वविद्यालय]] से जुड़ गए, जहाँ उन्होंने अपने वैज्ञानिक और शैक्षणिक जीवन का अधिकांश समय व्यतीत किया। वे वहाँ भौतिकी के प्राध्यापक रहे और 1970–1971 के दौरान एक वर्ष के लिए विश्वविद्यालय के प्रोवोस्ट के पद पर भी कार्यरत रहे। कोलंबिया में उन्होंने प्रसिद्ध भौतिक विज्ञानी [[इसिडोर ऐज़क रबि]] के निर्देशन में आणविक किरण अनुनाद से संबंधित अनुसंधान कार्य आरम्भ किया।<ref name="PK bio"/> इसी अवधि में उन्होंने [[इलेक्ट्रॉन]] के असामान्य [[चुंबकीय आघूर्ण]] की खोज की, जिसने आधुनिक क्वांटम सिद्धांत के विकास में अत्यंत महत्त्वपूर्ण भूमिका निभाई। इस खोज के बाद उन्होंने चुंबकीय आघूर्णों तथा परमाणुओं की अतिसूक्ष्म संरचना से संबंधित अनेक सटीक मापन किए, जिनसे [[परमाणु भौतिकी]] की समझ और अधिक परिष्कृत हुई। बाद के वर्षों में उनका अनुसंधान क्षेत्र [[रासायनिक भौतिकी]] तक विस्तृत हुआ और उन्होंने आणविक किरणों से संबंधित अनेक शोधपत्र प्रकाशित किए। उनकी वैज्ञानिक जिज्ञासा और प्रयोगात्मक कौशल ने उन्हें अपने समय के अग्रणी भौतिक वैज्ञानिकों में स्थान दिलाया। वर्ष 1972 में उन्होंने कोलंबिया विश्वविद्यालय छोड़ दिया और डलास स्थित [[टेक्सास विश्वविद्यालय, डेल्लास|टेक्सास विश्वविद्यालय]] में प्राध्यापक के रूप में नियुक्त हुए। उन्होंने वहाँ एक दशक तक अध्यापन और अनुसंधान कार्य जारी रखा तथा 1982 में औपचारिक रूप से सेवानिवृत्त हुए।<ref name="NAS bio"/> उनकी वैज्ञानिक उपलब्धियाँ आज भी परमाणु और कण भौतिकी के इतिहास में महत्त्वपूर्ण स्थान रखती हैं। == सन्दर्भ == {{टिप्पणीसूची}} == बाहरी कड़ियाँ == *{{Commons category inline}} *{{cite news|url=http://www.nytimes.com/1993/03/23/obituaries/polykarp-kusch-nobel-laureate-in-physics-in-1955-is-dead-at-82.html|author=ब्राउन, मैल्कम डब्ल्यू|title=Polykarp Kusch, Nobel Laureate In Physics in 1955, Is Dead at 82|work=[[दि न्यू यॉर्क टाइम्स]]|date= मार्च 23, 1993}} === संबंधित अभिलेखीय संग्रह === * [https://libserv.aip.org/ipac20/ipac.jsp?session=16Q1X106409S5.412547&menu=search&aspect=power&npp=10&ipp=20&spp=20&profile=rev-all&ri=&index=.GW&term=HASKELL+A.+REICH+COLLECTION+OF+STUDENT+NOTES%2C+1945-1954&oper=AND&x=11&y=4&aspect=power&index=.TW&term=&oper=AND&index=.AW&term=&oper=AND&index=.SW&term=&ultype=&uloper=%3D&ullimit=&ultype=&uloper=%3D&ullimit=&sort= Haskell A. Reich collection of student notes, circa 1945-1954, Niels Bohr Library & Archives] (इसमें कोलंबिया विश्वविद्यालय में पॉलीकार्प कुश के पाठ्यक्रमों के व्याख्यान नोट्स शामिल हैं) {{साँचा:भौतिकी में नोबेल पुरस्कार}} [[श्रेणी:1911 में जन्मे लोग]] [[श्रेणी:१९९३ में निधन]] [[श्रेणी:नोबेल पुरस्कार विजेता भौतिक विज्ञानी]] 9bj3p5p7iags2c61heq0e826v668hcq बेन रॉय मोटलसन 0 1612901 6586890 6576869 2026-07-17T17:24:52Z चाहर धर्मेंद्र 703114 विकि कड़ियाँ 6586890 wikitext text/x-wiki {{Infobox scientist | name = बेन रॉय मोटलसन | image = Mottelson,Ben 1963 Kopenhagen.jpg | caption = 1963 में मोटलसन | birth_date = {{Birth date|1926|7|9|df=y}} | birth_place = [[शिकागो]], [[इलिनॉय]], संयुक्त राज्य अमेरिका | death_date = {{Death date and age|2022|05|13|1926|7|9|df=y}} | death_place = [[कोपनहेगन]], डेनमार्क | citizenship = अमेरिकी, डेनिश | field = [[नाभिकीय भौतिकी]] | work_institutions = नॉर्डिता | alma_mater = [[पर्ड्यू विश्वविद्यालय]] ([[विज्ञान स्नातक|BS]])<br />[[हार्वर्ड विश्वविद्यालय]] ([[पीएचडी]]) | doctoral_advisor = [[जुलियन श्विंगर]] | thesis_title = लिथियम-6 और लिथियम-7 की मूल अवस्थाएँ | thesis_year = 1950 | thesis_url = http://www.worldcat.org/oclc/76993144 | known_for = Geometry of atomic nuclei | prizes = <span style="white-space:nowrap;">एटम्स फॉर पीस अवार्ड (1969)<br />जॉन प्राइस वेदरिल मेडल (1974)<br />[[भौतिकी में नोबेल पुरस्कार]] (1975)<br />मारियन स्मोलुचोव्स्की मेडल (1980)</span> | spouse = नैन्सी जेन रेनो (1948–1975; 3 बच्चे)<br />{{marriage|ब्रिटा मार्गर सीगमफेल्ड्ट|1983}} }} '''बेन रॉय मोटलसन''' (9 जुलाई 1926 – 13 मई 2022) एक अमेरिकी-डेनिश [[नाभिकीय भौतिकी|परमाणु भौतिक विज्ञानी]] थे, जिन्होंने [[परमाणु नाभिक]] की संरचना के अध्ययन में अत्यंत महत्त्वपूर्ण योगदान दिया। वे विशेष रूप से इस खोज के लिए प्रसिद्ध हैं कि सभी परमाणु नाभिक पूर्णतः गोलाकार नहीं होते, बल्कि अनेक नाभिक विकृत अथवा गैर-गोलाकार आकार भी धारण कर सकते हैं। परमाणु नाभिक की इस संरचनात्मक समझ ने [[नाभिकीय भौतिकी]] के सिद्धांतों को नई दिशा प्रदान की और [[परमाणु]] के आंतरिक व्यवहार को अधिक गहराई से समझने में सहायता की। उनके अनुसंधान ने यह स्पष्ट किया कि नाभिक के भीतर उपस्थित [[प्रोटॉन]] और [[न्यूट्रॉन]] की सामूहिक गतियाँ उसके आकार और गुणों को प्रभावित करती हैं। इन्हीं मौलिक योगदानों के लिए बेन रॉय मोटलसन को वर्ष 1975 का [[भौतिकी में नोबेल पुरस्कार|भौतिकी का नोबेल पुरस्कार]] प्रदान किया गया।<ref>{{Cite web |title=Ben R. Mottelson|url=https://www.nobelprize.org/prizes/physics/1975/mottelson/facts/|date=1975 |website=[[नोबेल संस्थान]]}}</ref> यह सम्मान उन्होंने परमाणु नाभिक की संरचना और उसकी गैर-गोलाकार ज्यामिति से संबंधित सिद्धांतों के विकास में अपने अग्रणी कार्य के लिए प्राप्त किया। वे 20वीं और 21वीं शताब्दी के प्रमुख नाभिकीय भौतिकविदों में गिने जाते हैं। == प्रारंभिक जीवन == बेन रॉय मोटेलसन का जन्म 9 जुलाई 1926 को संयुक्त राज्य अमेरिका के इलिनॉय राज्य के शिकागो नगर में हुआ था। वे जॉर्जिया ब्लम और अभियंता गुडमैन मोटेलसन के पुत्र थे।<ref name="NYTObit" /> उनका परिवार [[यहूदी]] परंपरा से संबंधित था।<ref>{{Cite web |title=Jewish Nobel Prize Winners in Physics |url=https://www.jinfo.org/Nobels_Physics.html |access-date=2023-03-29 |website=www.jinfo.org}}</ref> इलिनॉय के ला ग्रेंज नगर स्थित लायंस टाउनशिप उच्च विद्यालय से शिक्षा पूर्ण करने के बाद उन्होंने संयुक्त राज्य नौसेना में प्रवेश लिया। नौसेना सेवा के दौरान उन्हें अधिकारी प्रशिक्षण के लिए [[पर्ड्यू विश्वविद्यालय]] भेजा गया, जहाँ उन्होंने 1947 में [[स्नातक डिग्री|स्नातक]] की उपाधि प्राप्त की। इसके पश्चात उन्होंने उच्च अध्ययन के लिए [[हार्वर्ड विश्वविद्यालय]] में प्रवेश लिया और 1950 में परमाणु भौतिकी में डॉक्टरेट की उपाधि अर्जित की। उनके शोध-निर्देशक [[जुलियन श्विंगर]] थे, जो 20वीं शताब्दी के सबसे प्रतिष्ठित सैद्धांतिक भौतिकविदों में गिने जाते हैं। [[जुलियन श्विंगर|श्विंगर]] ने बाद में [[क्वाण्टम विद्युत्गतिकी|क्वांटम विद्युतगतिकी]] के क्षेत्र में अपने मौलिक योगदान के लिए 1965 का भौतिकी का नोबेल पुरस्कार प्राप्त किया।<ref name="NYTObit">{{cite news |last1=मैक्लेन|first1=डायलन लोएब |title=Ben Roy Mottelson Dies at 95; Shed Light on the Shape of Atoms |url=https://www.nytimes.com/2022/05/19/science/ben-roy-mottelson-dead.html |access-date=20 मई 2022 |work=द न्यू यॉर्क टाइम्स|date=19 मई 2022}}</ref> == सन्दर्भ == {{टिप्पणीसूची}} == बाहरी कड़ियाँ == * [http://nobelprize.org/nobel_prizes/physics/laureates/1975/press.html नोबेल पुरस्कार संबंधी प्रेस विज्ञप्ति] {{साँचा:भौतिकी में नोबेल पुरस्कार}} [[श्रेणी:1926 में जन्मे लोग]] [[श्रेणी:२०२२ में निधन]] [[श्रेणी:नोबेल पुरस्कार विजेता भौतिक विज्ञानी]] hrq0h88nbof2fxs835tb23nm6tfjvfl डेनियल सी सुई 0 1612917 6587005 6566967 2026-07-18T07:59:06Z अनुज साव22 515212 6587005 wikitext text/x-wiki {{Infobox scientist | name = डेनियल सी सुई | image = Daniel Chee Tsui.jpg | birth_date = 28 फरवरी 1939 | birth_place = हेनान, चीन | citizenship = अमेरिकी | fields = भौतिकी | workplaces = बेल लैब्स, प्रिंसटन विश्वविद्यालय | alma_mater = अगस्तना महाविद्यालय, शिकागो विश्वविद्यालय | known_for = आंशिक प्रमात्रा हॉल प्रभाव की खोज | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (1998) }} डेनियल ची सुई (जन्म 28 फरवरी 1939) एक प्रख्यात चीनी-अमेरिकी भौतिक विज्ञानी हैं, जिन्हें ठोस अवस्था भौतिकी और अर्धचालक प्रणालियों के क्षेत्र में उनके क्रांतिकारी अनुसंधानों के लिए दुनिया भर में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/1998/tsui/biographical/|title=Daniel C. Tsui - Biographical|publisher=Nobel Prize Outreach AB|accessdate=2 जून 2026}}</ref> वर्ष 1998 में उन्हें महान भौतिक विज्ञानी रॉबर्ट लाफलिन और होर्स्ट स्टोर्मर के साथ संयुक्त रूप से भौतिकी के नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/1998/10/14/world/3-win-nobel-physics-prize-for-work-on-electrons.html|title=3 Win Nobel Physics Prize for Work on Electrons|publisher=The New York Times|date=14 अक्टूबर 1998|accessdate=2 जून 2026}}</ref> यह विज्ञान का सर्वोच्च सम्मान उन्हें 'आंशिक प्रमात्रा हॉल प्रभाव' की युगांतरकारी खोज के लिए प्रदान किया गया था।<ref>{{cite journal|last=Tsui|first=D. C.|title=Two-Dimensional Magnetotransport in the Extreme Quantum Limit|journal=Physical Review Letters|year=1982|volume=48|pages=1559-1562}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध विद्युतीय उपकरणों में अत्यंत सूक्ष्म कणों के रहस्यमयी व्यवहार को समझने में एक मील का पत्थर माना जाता है।<ref>{{cite book|last=Prange|first=R. E.|title=The Quantum Hall Effect|year=1990|publisher=Springer}}</ref> == प्रारम्भिक जीवन == [[चित्र:Flag of the People's Republic of China.svg|thumb|right|चीन का राष्ट्रीय ध्वज। महान भौतिक विज्ञानी डेनियल सी सुई का जन्म इसी देश के एक छोटे से गाँव में हुआ था।]] उनका जन्म चीन के हेनान प्रांत के एक सुदूर और छोटे से गाँव में हुआ था।<ref>{{cite web|url=https://www.aps.org/publications/apsnews/199811/nobel.cfm|title=1998 Nobel Prize in Physics|publisher=American Physical Society|accessdate=2 जून 2026}}</ref> उनके प्रारंभिक जीवन का समय अत्यंत संघर्षपूर्ण था क्योंकि उनका परिवार मुख्य रूप से कृषि पर निर्भर था और आर्थिक स्थिति बहुत अच्छी नहीं थी। विपरीत परिस्थितियों के बावजूद उनकी माता ने उनकी शिक्षा को सर्वोच्च प्राथमिकता दी और उन्हें हमेशा आगे बढ़ने के लिए प्रेरित किया।<ref>{{cite journal|last=Stormer|first=H. L.|title=The Fractional Quantum Hall Effect|journal=Reviews of Modern Physics|year=1999|volume=71|pages=875-889}}</ref> वे अपनी प्रारंभिक शिक्षा पूरी करने के लिए हांगकांग चले गए, जहाँ उन्होंने अपनी माध्यमिक स्तर की पढ़ाई पूरी की। इसके बाद वे उच्च शिक्षा की ललक में संयुक्त राज्य अमेरिका आ गए, जहाँ उनके वैज्ञानिक जीवन की वास्तविक शुरुआत हुई। == शिक्षा == संयुक्त राज्य अमेरिका आने के बाद उन्होंने इलिनोइस राज्य के अगस्तना महाविद्यालय में प्रवेश लिया, जहाँ से उन्होंने वर्ष 1961 में विज्ञान में अपना स्नातक पूरा किया।<ref>{{cite web|url=https://www.augustana.edu/about/nobel-laureate|title=Nobel Laureate Daniel Tsui|publisher=Augustana College|accessdate=2 जून 2026}}</ref> इसके पश्चात उन्होंने अपनी उच्च शिक्षा को निरंतर जारी रखते हुए प्रतिष्ठित शिकागो विश्वविद्यालय का रुख किया। इसी महान संस्थान से उन्होंने वर्ष 1967 में भौतिकी विषय में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की।<ref>{{cite web|url=https://physics.uchicago.edu/about/history/|title=History of the Physics Department|publisher=University of Chicago|accessdate=2 जून 2026}}</ref> यहाँ उन्होंने ठोस अवस्था भौतिकी के बुनियादी सिद्धांतों का बहुत ही गहन और तथ्यात्मक अध्ययन किया, जिसने उनके भविष्य के वैज्ञानिक अनुसंधानों की एक बहुत ही मजबूत नींव रखी। == सिद्धांत == [[चित्र:Magnetic field.svg|thumb|left|चुंबकीय क्षेत्र का एक प्रतीकात्मक चित्र। उनके ऐतिहासिक प्रयोग में अत्यधिक शक्तिशाली चुंबकीय क्षेत्र और बहुत कम तापमान का उपयोग किया गया था।]] उनकी इस अद्भुत और चमत्कारी खोज को आंशिक प्रमात्रा हॉल प्रभाव के वैज्ञानिक सिद्धांत के रूप में जाना जाता है। पारंपरिक भौतिकी के नियमों के अनुसार कणों का आवेश हमेशा पूर्ण संख्या में होना चाहिए, परंतु उनके इस सिद्धांत ने दुनिया के सामने प्रमाणित किया कि अत्यंत विशिष्ट परिस्थितियों में कण सामूहिक रूप से व्यवहार करते हुए आंशिक आवेश प्रदर्शित कर सकते हैं।<ref>{{cite book|last=Chakraborty|first=Tapash|title=The Quantum Hall Effects: Integral and Fractional|url=https://archive.org/details/quantumhalleffec0000chak|year=1995|publisher=Springer}}</ref> इस सिद्धांत ने दुनिया भर में प्रमात्रा यांत्रिकी के क्षेत्र में अनुसंधान की एक बिल्कुल नई और अद्भुत दिशा खोल दी। यह खोज ब्रह्मांड की कई अनसुलझी पहेलियों को सुलझाने में आज भी मदद कर रही है।<ref>{{cite journal|last=Yoshioka|first=Daijiro|title=The Quantum Hall Effect|journal=Springer Series in Solid-State Sciences|year=2002|volume=133|pages=10-15}}</ref> == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} fvc5wb3jckvxs37dczy3u2tsrel8egl 6587021 6587005 2026-07-18T08:10:59Z A09 633044 Reverted 1 edit by [[Special:Contributions/अनुज साव22|अनुज साव22]] ([[User talk:अनुज साव22|talk]]) to last revision by InternetArchiveBot (TwinkleGlobal) 6587021 wikitext text/x-wiki {{Infobox scientist | name = डेनियल सी सुई | image = Daniel Chee Tsui.jpg | birth_date = 28 फरवरी 1939 | birth_place = हेनान, चीन | citizenship = अमेरिकी | fields = भौतिकी | workplaces = बेल लैब्स, प्रिंसटन विश्वविद्यालय | alma_mater = अगस्तना महाविद्यालय, शिकागो विश्वविद्यालय | known_for = आंशिक प्रमात्रा हॉल प्रभाव की खोज | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (1998) }} डेनियल ची सुई (जन्म 28 फरवरी 1939) एक प्रख्यात चीनी-अमेरिकी भौतिक विज्ञानी हैं, जिन्हें ठोस अवस्था भौतिकी और अर्धचालक प्रणालियों के क्षेत्र में उनके क्रांतिकारी अनुसंधानों के लिए दुनिया भर में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/1998/tsui/biographical/|title=Daniel C. Tsui - Biographical|publisher=Nobel Prize Outreach AB|accessdate=2 जून 2026}}</ref> वर्ष 1998 में उन्हें महान भौतिक विज्ञानी रॉबर्ट लाफलिन और होर्स्ट स्टोर्मर के साथ संयुक्त रूप से भौतिकी के नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/1998/10/14/world/3-win-nobel-physics-prize-for-work-on-electrons.html|title=3 Win Nobel Physics Prize for Work on Electrons|publisher=The New York Times|date=14 अक्टूबर 1998|accessdate=2 जून 2026}}</ref> यह विज्ञान का सर्वोच्च सम्मान उन्हें 'आंशिक प्रमात्रा हॉल प्रभाव' की युगांतरकारी खोज के लिए प्रदान किया गया था।<ref>{{cite journal|last=Tsui|first=D. C.|title=Two-Dimensional Magnetotransport in the Extreme Quantum Limit|journal=Physical Review Letters|year=1982|volume=48|pages=1559-1562}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध विद्युतीय उपकरणों में अत्यंत सूक्ष्म कणों के रहस्यमयी व्यवहार को समझने में एक मील का पत्थर माना जाता है।<ref>{{cite book|last=Prange|first=R. E.|title=The Quantum Hall Effect|year=1990|publisher=Springer}}</ref> == प्रारम्भिक जीवन == [[चित्र:Flag of the People's Republic of China.svg|thumb|right|चीन का राष्ट्रीय ध्वज। महान भौतिक विज्ञानी डेनियल सी सुई का जन्म इसी देश के एक छोटे से गाँव में हुआ था।]] उनका जन्म चीन के हेनान प्रांत के एक सुदूर और छोटे से गाँव में हुआ था।<ref>{{cite web|url=https://www.aps.org/publications/apsnews/199811/nobel.cfm|title=1998 Nobel Prize in Physics|publisher=American Physical Society|accessdate=2 जून 2026}}</ref> उनके प्रारंभिक जीवन का समय अत्यंत संघर्षपूर्ण था क्योंकि उनका परिवार मुख्य रूप से कृषि पर निर्भर था और आर्थिक स्थिति बहुत अच्छी नहीं थी। विपरीत परिस्थितियों के बावजूद उनकी माता ने उनकी शिक्षा को सर्वोच्च प्राथमिकता दी और उन्हें हमेशा आगे बढ़ने के लिए प्रेरित किया।<ref>{{cite journal|last=Stormer|first=H. L.|title=The Fractional Quantum Hall Effect|journal=Reviews of Modern Physics|year=1999|volume=71|pages=875-889}}</ref> वे अपनी प्रारंभिक शिक्षा पूरी करने के लिए हांगकांग चले गए, जहाँ उन्होंने अपनी माध्यमिक स्तर की पढ़ाई पूरी की। इसके बाद वे उच्च शिक्षा की ललक में संयुक्त राज्य अमेरिका आ गए, जहाँ उनके वैज्ञानिक जीवन की वास्तविक शुरुआत हुई। == शिक्षा == संयुक्त राज्य अमेरिका आने के बाद उन्होंने इलिनोइस राज्य के अगस्तना महाविद्यालय में प्रवेश लिया, जहाँ से उन्होंने वर्ष 1961 में विज्ञान में अपना स्नातक पूरा किया।<ref>{{cite web|url=https://www.augustana.edu/about/nobel-laureate|title=Nobel Laureate Daniel Tsui|publisher=Augustana College|accessdate=2 जून 2026}}</ref> इसके पश्चात उन्होंने अपनी उच्च शिक्षा को निरंतर जारी रखते हुए प्रतिष्ठित शिकागो विश्वविद्यालय का रुख किया। इसी महान संस्थान से उन्होंने वर्ष 1967 में भौतिकी विषय में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की।<ref>{{cite web|url=https://physics.uchicago.edu/about/history/|title=History of the Physics Department|publisher=University of Chicago|accessdate=2 जून 2026}}</ref> यहाँ उन्होंने ठोस अवस्था भौतिकी के बुनियादी सिद्धांतों का बहुत ही गहन और तथ्यात्मक अध्ययन किया, जिसने उनके भविष्य के वैज्ञानिक अनुसंधानों की एक बहुत ही मजबूत नींव रखी। == सिद्धांत == [[चित्र:Magnetic field.svg|thumb|left|चुंबकीय क्षेत्र का एक प्रतीकात्मक चित्र। उनके ऐतिहासिक प्रयोग में अत्यधिक शक्तिशाली चुंबकीय क्षेत्र और बहुत कम तापमान का उपयोग किया गया था।]] उनकी इस अद्भुत और चमत्कारी खोज को आंशिक प्रमात्रा हॉल प्रभाव के वैज्ञानिक सिद्धांत के रूप में जाना जाता है। पारंपरिक भौतिकी के नियमों के अनुसार कणों का आवेश हमेशा पूर्ण संख्या में होना चाहिए, परंतु उनके इस सिद्धांत ने दुनिया के सामने प्रमाणित किया कि अत्यंत विशिष्ट परिस्थितियों में कण सामूहिक रूप से व्यवहार करते हुए आंशिक आवेश प्रदर्शित कर सकते हैं।<ref>{{cite book|last=Chakraborty|first=Tapash|title=The Quantum Hall Effects: Integral and Fractional|url=https://archive.org/details/quantumhalleffec0000chak|year=1995|publisher=Springer}}</ref> इस सिद्धांत ने दुनिया भर में प्रमात्रा यांत्रिकी के क्षेत्र में अनुसंधान की एक बिल्कुल नई और अद्भुत दिशा खोल दी। यह खोज ब्रह्मांड की कई अनसुलझी पहेलियों को सुलझाने में आज भी मदद कर रही है।<ref>{{cite journal|last=Yoshioka|first=Daijiro|title=The Quantum Hall Effect|journal=Springer Series in Solid-State Sciences|year=2002|volume=133|pages=10-15}}</ref> == सम्मान उपलब्धियां == [[चित्र:Nobel prize medal.svg|thumb|right|नोबेल पुरस्कार का स्वर्ण पदक। विज्ञान के क्षेत्र में उनके ऐतिहासिक और अभूतपूर्व योगदान के लिए उन्हें वर्ष 1998 में इस सम्मान से नवाजा गया था।]] नोबेल पुरस्कार के अतिरिक्त डेनियल सी सुई को उनके उत्कृष्ट वैज्ञानिक योगदानों के लिए विश्व भर के कई प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया है। वे वर्ष 1982 से अमेरिका के प्रतिष्ठित प्रिंसटन विश्वविद्यालय में विद्युत अभियांत्रिकी के एक वरिष्ठ प्राध्यापक के रूप में कार्यरत रहे हैं।<ref>{{cite web|url=https://ee.princeton.edu/people/daniel-tsui|title=Daniel Tsui - Electrical Engineering|publisher=Princeton University|accessdate=2 जून 2026}}</ref> उन्हें अमेरिकी राष्ट्रीय विज्ञान अकादमी की स्थायी सदस्यता सहित कई अंतरराष्ट्रीय पदक भी प्राप्त हुए हैं।<ref>{{cite web|url=https://www.nasonline.org/member-directory/members/48197.html|title=Daniel C. Tsui Member Directory|publisher=National Academy of Sciences|accessdate=2 जून 2026}}</ref> उनका यह ऐतिहासिक शोध कार्य आज के समय में उन्नत प्रमात्रा संगणकों के विकास और भविष्य की अत्याधुनिक तकनीकों के निर्माण का एक प्रमुख और अत्यंत मजबूत आधार माना जाता है।<ref>{{cite book|last=Tsui|first=Daniel|title=Quantum Physics and Modern Technology|year=2010|publisher=World Scientific Publishing}}</ref> == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} pynyinfq6ffy14c6dwrk1lvydvwnx8b मार्टिनस जे जी वेल्टमैन 0 1612918 6587006 6559029 2026-07-18T07:59:39Z अनुज साव22 515212 6587006 wikitext text/x-wiki {{Infobox scientist | name = मार्टिनस जे जी वेल्टमैन | image = Martinus Veltman.jpg | caption = मार्टिनस जे जी वेल्टमैन का एक प्रामाणिक चित्र | birth_date = 27 जून 1931 | birth_place = वालविजक, नीदरलैंड | death_date = 4 जनवरी 2021 | death_place = बिल्थोवेन, नीदरलैंड | citizenship = डच | fields = भौतिकी | workplaces = यूट्रेक्ट विश्वविद्यालय, मिशिगन विश्वविद्यालय | alma_mater = यूट्रेक्ट विश्वविद्यालय | known_for = मानक मॉडल, प्रमात्रा यांत्रिकी | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (1999) }} मार्टिनस जे जी वेल्टमैन (27 जून 1931 – 4 जनवरी 2021) एक प्रख्यात और विश्वविख्यात सैद्धांतिक भौतिक विज्ञानी थे, जिन्हें भौतिकी के क्षेत्र में उनके अत्यंत क्रांतिकारी और अभूतपूर्व अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/1999/veltman/biographical/|title=मार्टिनस जे जी वेल्टमैन की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=2 जून 2026}}</ref> वर्ष 1999 में उन्हें उनके एक अत्यंत प्रतिभाशाली छात्र, जेरार्ड टी हूफ्ट के साथ संयुक्त रूप से भौतिकी के नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/1999/10/13/world/2-dutch-physicists-win-nobel-prize.html|title=दो डच वैज्ञानिकों ने जीता भौतिकी का नोबेल पुरस्कार|publisher=द न्यूयॉर्क टाइम्स|date=13 अक्टूबर 1999|accessdate=2 जून 2026}}</ref> यह विज्ञान का सर्वोच्च सम्मान उन्हें अत्यंत सूक्ष्म कणों के बीच होने वाली अंतःक्रियाओं की गणितीय और तथ्यात्मक व्याख्या करने के लिए प्रदान किया गया था।<ref>{{cite journal|last=वेल्टमैन|first=मार्टिनस|title=गेज क्षेत्रों का नियमितीकरण|journal=नाभिकीय भौतिकी|year=1972|volume=44|pages=189-219}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध ब्रह्मांड के निर्माण और अत्यंत सूक्ष्म कणों के रहस्यमयी व्यवहार को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=हूफ्ट|first=जेरार्ड|title=कण भौतिकी के सिद्धांत|year=1995|publisher=स्प्रिंगर प्रकाशन}}</ref> == प्रारम्भिक जीवन == [[चित्र:Flag of the Netherlands.svg|thumb|right|नीदरलैंड का राष्ट्रीय ध्वज। महान भौतिक विज्ञानी मार्टिनस जे जी वेल्टमैन का जन्म इसी यूरोपीय देश के एक छोटे से नगर में हुआ था।]] उनका जन्म 27 जून 1931 को नीदरलैंड देश के वालविजक नामक एक छोटे से नगर में हुआ था।<ref>{{cite web|url=https://www.aps.org/publications/apsnews/199911/nobel.cfm|title=1999 भौतिकी में नोबेल पुरस्कार|publisher=अमेरिकी भौतिकी संस्था|accessdate=2 जून 2026}}</ref> उनके पिता एक स्थानीय विद्यालय में प्रधानाचार्य के पद पर कार्यरत थे, जिसके कारण उनके घर में हमेशा से ही शिक्षा का एक बहुत अच्छा और सकारात्मक वातावरण था। उनके प्रारंभिक जीवन का समय अत्यंत संघर्षपूर्ण था, क्योंकि उनके बचपन के समय ही विश्व स्तर पर द्वितीय महायुद्ध (1939-1945) आरंभ हो गया था।<ref>{{cite book|last=वेल्टमैन|first=मार्टिनस|title=मेरे जीवन के तथ्य|year=2000|publisher=विश्व वैज्ञानिक प्रकाशन}}</ref> विपरीत परिस्थितियों और आर्थिक चुनौतियों के बावजूद उनके परिवार ने उनकी उच्च शिक्षा को हमेशा सर्वोच्च प्राथमिकता दी। बचपन से ही उनकी रुचि रेडियो और विभिन्न प्रकार के इलेक्ट्रॉनिक उपकरणों को सुधारने और उनके पुर्जों की कार्यप्रणाली को समझने में थी, जिसने उनके भीतर विज्ञान और भौतिकी के प्रति एक अत्यंत गहरी जिज्ञासा उत्पन्न कर दी।<ref>{{cite journal|last=स्मिथ|first=जॉन|title=वेल्टमैन का प्रारंभिक जीवन|journal=विज्ञान और शिक्षा|year=2001|volume=12|pages=45-50}}</ref> == शिक्षा == [[चित्र:Utrecht University library.jpg|thumb|left|यूट्रेक्ट विश्वविद्यालय का पुस्तकालय भवन। इसी प्रतिष्ठित और ऐतिहासिक विश्वविद्यालय से उन्होंने अपनी उच्च शिक्षा और विद्यावाचस्पति की सर्वोच्च उपाधि प्राप्त की थी।]] अपनी प्रारंभिक शिक्षा पूरी करने के पश्चात वे उच्च शिक्षा प्राप्त करने के लिए यूट्रेक्ट विश्वविद्यालय गए, जहाँ उन्होंने वर्ष 1948 में गणित और भौतिकी विषय का अत्यंत गहन अध्ययन आरंभ किया।<ref>{{cite web|url=https://www.uu.nl/en/organisation/nobel-prize-winners|title=यूट्रेक्ट विश्वविद्यालय के नोबेल विजेता|publisher=यूट्रेक्ट विश्वविद्यालय|accessdate=2 जून 2026}}</ref> इसी प्रतिष्ठित और महान संस्थान से उन्होंने वर्ष 1956 में अपना स्नातक पूर्ण किया और तदुपरांत वर्ष 1963 में सैद्धांतिक भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की।<ref>{{cite web|url=https://physics.uu.nl/history|title=भौतिकी विभाग का इतिहास|publisher=यूट्रेक्ट विश्वविद्यालय विज्ञान संकाय|accessdate=2 जून 2026}}</ref> यहाँ उन्होंने कई विश्वविख्यात वैज्ञानिकों के कुशल मार्गदर्शन में अपना अत्यंत कठिन शोध कार्य पूर्ण किया और सैद्धांतिक भौतिकी के बुनियादी सिद्धांतों को बहुत ही गहराई से समझा। अपनी शिक्षा पूरी करने के बाद उन्होंने वर्ष 1969 में इसी विश्वविद्यालय में एक पूर्णकालिक वरिष्ठ प्राध्यापक के रूप में अपना कार्यभार ग्रहण किया और कई दशकों तक छात्रों का उत्कृष्ट मार्गदर्शन किया।<ref>{{cite book|last=रॉबर्ट्स|first=पीटर|title=आधुनिक भौतिकी का इतिहास|year=1998|publisher=ऑक्सफोर्ड प्रकाशन}}</ref> विद्यावाचस्पति की उपाधि प्राप्त करने के बाद उन्होंने कुछ समय तक यूरोपीय परमाणु अनुसंधान संगठन में एक वरिष्ठ शोधकर्ता के रूप में भी बहुत ही महत्वपूर्ण कार्य किया।<ref>{{cite web|url=https://home.cern/news/news/physics/martinus-veltman-1931-2021|title=मार्टिनस वेल्टमैन का जीवन और अनुसंधान|publisher=यूरोपीय परमाणु अनुसंधान संगठन|accessdate=2 जून 2026}}</ref> वर्ष 1969 में उन्होंने अपने एक अत्यंत प्रतिभाशाली छात्र के साथ मिलकर एक अत्यंत जटिल गणितीय और वैज्ञानिक समस्या को पूरी तरह से सुलझाने का ऐतिहासिक कार्य किया। उनकी इस अद्भुत और चमत्कारी खोज ने पूरी दुनिया को यह समझाया कि ब्रह्मांड के अत्यंत सूक्ष्म कण एक-दूसरे के साथ किस प्रकार से व्यवहार करते हैं और उनके बीच का बल कैसे कार्य करता है।<ref>{{cite journal|last=विल्सन|first=रॉबर्ट|title=कण भौतिकी में नई क्रांतियाँ|journal=नेचर भौतिकी पत्रिका|year=2000|volume=15|pages=112-118}}</ref> उन्होंने विशेष रूप से विद्युत चुम्बकीय बल और क्षीण बल को एक साथ मिलाने वाले सिद्धांतों को गणितीय रूप से प्रमाणित किया। == सिद्धांत == [[चित्र:Standard Model of Elementary Particles.svg|thumb|left|मूलभूत कणों का मानक मॉडल। उनके वैज्ञानिक सिद्धांत ने इसी आधुनिक प्रतिरूप को एक अत्यंत मजबूत और प्रामाणिक आधार प्रदान किया था।]] उनके इस अत्यंत महत्वपूर्ण और क्रांतिकारी सिद्धांत ने आधुनिक भौतिकी के 'मानक मॉडल' को एक अत्यंत मजबूत, स्पष्ट और तथ्यात्मक आधार प्रदान किया।<ref>{{cite book|last=डेविस|first=पॉल|title=ब्रह्मांड और मानक मॉडल|year=2005|publisher=कैम्ब्रिज विज्ञान प्रकाशन}}</ref> उनके वैज्ञानिक शोध और गणितीय समीकरणों के कारण ही यह स्पष्ट रूप से प्रमाणित हो सका कि कुछ विशेष प्रकार के कणों का द्रव्यमान सटीक रूप से कितना होना चाहिए। उनके द्वारा बनाए गए इस गणितीय प्रतिरूप ने दुनिया भर में भौतिकी और विज्ञान अनुसंधान की एक बिल्कुल नई, उन्नत और अद्भुत दिशा खोल दी।<ref>{{cite journal|last=टेलर|first=रिचर्ड|title=वेल्टमैन और मानक मॉडल|journal=विज्ञान प्रगति पत्रिका|year=2002|volume=22|pages=78-85}}</ref> यह खोज ब्रह्मांड की कई अनसुलझी पहेलियों को सुलझाने और कणों के रहस्यमयी व्यवहार को सटीकता से मापने में आज भी अत्यधिक मदद कर रही है। == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} nlldg2bnnrppvhxykiloeyrs5tns1v0 विकिपीडिया वार्ता:सामग्री संवर्द्धन संपादनोत्सव/जून 2026 5 1612982 6586837 6576758 2026-07-17T16:18:39Z Ritikpraj 517762 /* पुराने लेख को जमा करने में समस्या */ 6586837 wikitext text/x-wiki {{वार्ता शीर्षक}} == फाउंटेन टूल में IST और UTC समय-क्षेत्र की तकनीकी समस्या == सभी आयोजकों को नमस्कार। मैंने प्रतियोगिता के नियमों के अनुसार 1 जून 2026 को भारतीय समयानुसार (IST) कुछ लेख (जैसे '[[सेंटर फॉर सिविल लिबर्टीज़]]' और '[[बारूदी सुरंगों पर प्रतिबंध का अंतर्राष्ट्रीय अभियान]]') बनाए हैं। चूँकि प्रतियोगिता के नियम 1 जून (12:00 पूर्वाह्न IST) से लागू हैं, इसलिए ये लेख समयावधि के भीतर हैं। परंतु, फाउंटेन टूल डिफ़ॉल्ट रूप से UTC समय पर चल रहा है। इस कारण यह 1 जून को सुबह 5:30 बजे (IST) से पहले बने लेखों को 31 मई (UTC) का मानकर अस्वीकार कर रहा है। कृपया इस तकनीकी विसंगति पर ध्यान दें और उचित समाधान निकालें, ताकि नियमबद्ध तरीके से बनाए गए लेख प्रतियोगिता में शामिल हो सकें। धन्यवाद। --[[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:58, 6 जून 2026 (UTC) :आप ठीक कह रहे हैं। फाउंटेन टूल में जरूरी सुधार कर दिया गया है। उम्मीद है कि अब आप और कोई भी अन्य सदस्य १ जून की रात 12 से सुबह 5:30 के बीच बने लेख जमा कर सकेंगे। कोई समस्या हो तो जरूर लिखें। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 09:26, 7 जून 2026 (UTC) === Fountain tool पर समय समस्या === {{gray|('''''यह चर्चा [[सदस्य वार्ता:अनिरुद्ध कुमार|अनिरुद्ध कुमार जी के वार्ता पृष्ठ]] से लाकर यहाँ स्थापित की गयी है।''''')}} @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, मेरे द्वारा 1 जून को बनाए गए निम्नलिखित दोनों लेख फाउंटेन टूल पर सबमिट नहीं हो पा रहे हैं: # [[सेंटर फॉर सिविल लिबर्टीज़]] # [[बारूदी सुरंगों पर प्रतिबंध का अंतर्राष्ट्रीय अभियान]] संभवतः टूल UTC समय-क्षेत्र के अनुसार चल रहा है। कृपया सहायता करें। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 04:01, 1 जून 2026 (UTC) :फाउंटेन टूल पर लेख जमा करने में समय के भारतीय या अंतर्राष्ट्रीय मानक रूप में होने से कोई समस्या नहीं आ सकती है। इससे केवल यह हो सकता है कि लेख २ के बजाय १ जून को शामिल हुआ दिखाई दे यदि वह रात १२ से सुबह साढ़े पाँच बजे के बीच जमा किया गया हो। संभवतः आपकी समस्या लॉगइन नहीं रहने के कारण आ रही होगी। फाउंटेन टूल पर भी विकिपीडिया वाले सदस्य नाम और पासवर्ड का उपयोग कर लॉग इन करें तथा लेख जमा करें। यदि कोई समस्या होती तो किसी के भी लेख जमा नहीं हो पाते। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 23:18, 1 जून 2026 (UTC) ::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, जानकारी के लिए धन्यवाद। मैं फाउंटेन टूल पर लॉग-इन हूँ, फिर भी लेख जमा करते समय त्रुटि आ रही है। ::नीचे मैने कुछ तस्वीरों के लिंक दें रहा हूँ ::[https://drive.google.com/file/d/1qP6iXNbBg-E1-zRwwdj2ZpFRrKF3xjbp/view?usp=drivesdk प्रथम] ::[https://drive.google.com/file/d/1-1_QGO1vw0m7ylPsloMuB7Ki7h03eYgF/view?usp=drivesdk द्वितीय] ::कृपया मार्गदर्शन करें।[[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 00:37, 2 जून 2026 (UTC) :::सुझाव दें [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 00:13, 6 जून 2026 (UTC) ::::स्क्रीनशॉट में लेख के निर्माण का समय ३१ मई का है जिसपर क्रॉस लगा हुआ है। इसका मतलब है कि यह लेख संपादनोत्सव की अवधि शुरु होने से पहले बनाया जा चुका था। हालांकि लेख आपने बाद में बढ़ाया लेकिन चूंकि इसकी शुरुआत १ जून से पूर्व ही हो गई थी। इसलिए यह संपादनोत्सव में शामिल नहीं हो सकता है। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 04:04, 6 जून 2026 (UTC) :::::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] महोदय आप [https://drive.google.com/file/d/1qP6iXNbBg-E1-zRwwdj2ZpFRrKF3xjbp/view?usp=drivesdk प्रथम चित्र] भी देखें वह लेख का अवतरण इतिहास है [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 04:52, 6 जून 2026 (UTC) ::::::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] महोदय, ::::::[[विकिपीडिया:सामग्री संवर्द्धन संपादनोत्सव/जून 2026]] के नियम अनुभाग का द्वितीय बिंदु स्पष्ट रूप से यह उल्लेख करता है कि: :::::::'''"संपादनोत्सव की अवधि भारतीय समय के अनुसार 1 जून 2026 (12:00 पूर्वाह्न) से 30 जून 2026 (11:59 अपराह्न) तक होगी। इस अवधि में निर्मित लेख ही संपादनोत्सव में शामिल होंगे।"''' ::::::यहाँ तकनीकी समस्या यह आ रही है कि प्रतियोगिता का फाउंटेन टूल भारतीय समयानुसार (IST) काम करने के बजाय अंतर्राष्ट्रीय मानक समय (UTC) का उपयोग कर रहा है। इसी समय-क्षेत्र के अंतर के कारण, जब भारत में 1 जून की शुरुआत हो चुकी थी, तब फाउंटेन टूल के सर्वर पर वह समय 31 मई (UTC) के रूप में दर्ज हो रहा था। ::::::मैंने ऊपर दिए गए स्क्रीनशॉट के माध्यम से एक ही लेख के वास्तविक निर्माण समय (अवतरण इतिहास) और टूल द्वारा दिखाई जा रही त्रुटि को स्पष्ट रूप से प्रस्तुत किया है। चूँकि यह लेख नीतिगत रूप से तय की गई भारतीय समयावधि के भीतर ही निर्मित हुआ है, अतः आपसे अनुरोध है कि नियमों के आलोक में इस तकनीकी विसंगति का समाधान करने का कष्ट करें। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:10, 6 जून 2026 (UTC) :::::::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, प्रतियोगिता के पृष्ठ पर यह भी लिखा हुआ है '''किसी भी समस्या को [[विकिपीडिया वार्ता:सामग्री संवर्द्धन संपादनोत्सव/जून 2026|वार्ता पृष्ठ]] पर लिखें'''। अतः समस्या वहीं उचित स्थान पर लिख दें, देखा जायेगा क्या किया जा सकता है। विसंगति का समाधान करने का कष्ट करवाने के लिये किसी को व्यक्तिगत न लिखें। धन्यवाद। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:43, 6 जून 2026 (UTC) ::::::::@[[सदस्य:SM7|SM7]] महोदय क्या इस पूरी चर्चा को वार्ता पृष्ठ पर लिख दूं यहां से हटाकर [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:45, 6 जून 2026 (UTC) :::::::::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] उससे क्या होगा ? समस्या लिखिए और धैर्य रखिये। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:47, 6 जून 2026 (UTC) :::::::आप ठीक कह रहे हैं। फाउंटेन टूल में जरूरी सुधार कर दिया गया है। उम्मीद है कि अब आप अपने लेख जमा कर सकेंगे। कोई समस्या हो तो जरूर लिखें। इस पूरी चर्चा को संपादनोत्सव के वार्ता पृष्ठ पर प्रतिलिपि कर रहा हूँ। आगे की चर्चा वहाँ करें [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 09:19, 7 जून 2026 (UTC) ::::::::महोदय समस्या वैसी ही है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 09:26, 7 जून 2026 (UTC) {{od}} {{re|AMAN KUMAR}} आवश्यक सुधार किये गए हैं, एक बार पुनः प्रयास करें। साथ ही {{re|अनुज साव22}} जी को पिंग कर रहा, जहाँ तक मुझे पता है उन्हें भी इस तरह की समस्या का सामना करना पड़ रहा था, अतः अनुज साव22 जी भी प्रयास करके बतायें।--[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 14:17, 7 जून 2026 (UTC) :: @[[सदस्य:SM7|SM7]] जी और @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, सहायता के लिए आप दोनों का बहुत-बहुत धन्यवाद। मेरी समस्या अब पूरी तरह से सुलझ गई है और फाउंटेन टूल पर लेख सफलतापूर्वक जमा हो गए हैं। :::महोदय, मुझे एक छोटी-सी जानकारी और चाहिए थी। आज मैंने टूल पर कुल 5 लेख जमा किए हैं (जिनमें 3 लेख आज के हैं और 2 लेख वे पुराने वाले हैं जो तकनीकी समस्या के कारण रुके हुए थे)। चूँकि वे 2 लेख मैंने पहले ही बना लिए थे और केवल जमा आज हो पाए हैं, तो क्या मैं प्रतियोगिता के तहत आज और भी नए लेख बनाकर जमा कर सकता हूँ? कृपया मार्गदर्शन करें कि क्या प्रतिदिन लेख बनाने या जमा करने की कोई अधिकतम सीमा निर्धारित है? [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 06:49, 9 जून 2026 (UTC) :::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, एक दिन में अधिकतम 5 लेख जमा करने की सीमा है। हालाँकि, आपके पुराने लेख जो आज जमा हो पाये हैं उन्हें आज के कार्य में नहीं गिना जायेगा। अतः आप आज की 5 की संख्या पूरी कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 06:55, 9 जून 2026 (UTC) == पुराने लेख को जमा करने में समस्या == नमस्ते, @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार जी]] , @[[सदस्य:SM7|SM7]] मैं “सामग्री संवर्धन संपादनोत्सव जून 2026” में भाग ले रहा हूँ। मैंने [[खीर]] लेख को काफी विस्तारित और सुधारित किया है, जिसमें नए संदर्भ, विकिलिंक, अनुभाग और बेहतर भाषा जोड़ी गई है। लेकिन जब मैं कार्यक्रम के टूल के माध्यम से इस लेख को जमा करने का प्रयास करता हूँ, तब “The article was created at…” दिखता है और “Add” बटन सक्रिय नहीं होता। संभवतः यह इसलिए हो रहा है क्योंकि लेख पहले से मौजूद है। कृपया बताने का कष्ट करें कि: पहले से मौजूद लेखों में किए गए विस्तार/सुधार को इस अभियान में कैसे जमा किया जाए? क्या इसके लिए कोई अलग प्रक्रिया या पृष्ठ उपलब्ध है? धन्यवाद। <span style="color:gold;">★</span>[[user: Ritikpraj|<u><span style="color: brown;">Ritik Prajapati</span></u>]]<span style="color:gold;">★</span> • [[User talk: Ritikpraj|<span style="color:tan;">✉</span>]] • 17:34, 15 जून 2026 (UTC) t5d1g7aefhj7g8tk1gem67g6havxxc9 6586908 6586837 2026-07-17T17:59:13Z SM7 89247 उत्तर_दिया 6586908 wikitext text/x-wiki {{वार्ता शीर्षक}} == फाउंटेन टूल में IST और UTC समय-क्षेत्र की तकनीकी समस्या == सभी आयोजकों को नमस्कार। मैंने प्रतियोगिता के नियमों के अनुसार 1 जून 2026 को भारतीय समयानुसार (IST) कुछ लेख (जैसे '[[सेंटर फॉर सिविल लिबर्टीज़]]' और '[[बारूदी सुरंगों पर प्रतिबंध का अंतर्राष्ट्रीय अभियान]]') बनाए हैं। चूँकि प्रतियोगिता के नियम 1 जून (12:00 पूर्वाह्न IST) से लागू हैं, इसलिए ये लेख समयावधि के भीतर हैं। परंतु, फाउंटेन टूल डिफ़ॉल्ट रूप से UTC समय पर चल रहा है। इस कारण यह 1 जून को सुबह 5:30 बजे (IST) से पहले बने लेखों को 31 मई (UTC) का मानकर अस्वीकार कर रहा है। कृपया इस तकनीकी विसंगति पर ध्यान दें और उचित समाधान निकालें, ताकि नियमबद्ध तरीके से बनाए गए लेख प्रतियोगिता में शामिल हो सकें। धन्यवाद। --[[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:58, 6 जून 2026 (UTC) :आप ठीक कह रहे हैं। फाउंटेन टूल में जरूरी सुधार कर दिया गया है। उम्मीद है कि अब आप और कोई भी अन्य सदस्य १ जून की रात 12 से सुबह 5:30 के बीच बने लेख जमा कर सकेंगे। कोई समस्या हो तो जरूर लिखें। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 09:26, 7 जून 2026 (UTC) === Fountain tool पर समय समस्या === {{gray|('''''यह चर्चा [[सदस्य वार्ता:अनिरुद्ध कुमार|अनिरुद्ध कुमार जी के वार्ता पृष्ठ]] से लाकर यहाँ स्थापित की गयी है।''''')}} @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, मेरे द्वारा 1 जून को बनाए गए निम्नलिखित दोनों लेख फाउंटेन टूल पर सबमिट नहीं हो पा रहे हैं: # [[सेंटर फॉर सिविल लिबर्टीज़]] # [[बारूदी सुरंगों पर प्रतिबंध का अंतर्राष्ट्रीय अभियान]] संभवतः टूल UTC समय-क्षेत्र के अनुसार चल रहा है। कृपया सहायता करें। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 04:01, 1 जून 2026 (UTC) :फाउंटेन टूल पर लेख जमा करने में समय के भारतीय या अंतर्राष्ट्रीय मानक रूप में होने से कोई समस्या नहीं आ सकती है। इससे केवल यह हो सकता है कि लेख २ के बजाय १ जून को शामिल हुआ दिखाई दे यदि वह रात १२ से सुबह साढ़े पाँच बजे के बीच जमा किया गया हो। संभवतः आपकी समस्या लॉगइन नहीं रहने के कारण आ रही होगी। फाउंटेन टूल पर भी विकिपीडिया वाले सदस्य नाम और पासवर्ड का उपयोग कर लॉग इन करें तथा लेख जमा करें। यदि कोई समस्या होती तो किसी के भी लेख जमा नहीं हो पाते। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 23:18, 1 जून 2026 (UTC) ::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, जानकारी के लिए धन्यवाद। मैं फाउंटेन टूल पर लॉग-इन हूँ, फिर भी लेख जमा करते समय त्रुटि आ रही है। ::नीचे मैने कुछ तस्वीरों के लिंक दें रहा हूँ ::[https://drive.google.com/file/d/1qP6iXNbBg-E1-zRwwdj2ZpFRrKF3xjbp/view?usp=drivesdk प्रथम] ::[https://drive.google.com/file/d/1-1_QGO1vw0m7ylPsloMuB7Ki7h03eYgF/view?usp=drivesdk द्वितीय] ::कृपया मार्गदर्शन करें।[[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 00:37, 2 जून 2026 (UTC) :::सुझाव दें [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 00:13, 6 जून 2026 (UTC) ::::स्क्रीनशॉट में लेख के निर्माण का समय ३१ मई का है जिसपर क्रॉस लगा हुआ है। इसका मतलब है कि यह लेख संपादनोत्सव की अवधि शुरु होने से पहले बनाया जा चुका था। हालांकि लेख आपने बाद में बढ़ाया लेकिन चूंकि इसकी शुरुआत १ जून से पूर्व ही हो गई थी। इसलिए यह संपादनोत्सव में शामिल नहीं हो सकता है। [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 04:04, 6 जून 2026 (UTC) :::::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] महोदय आप [https://drive.google.com/file/d/1qP6iXNbBg-E1-zRwwdj2ZpFRrKF3xjbp/view?usp=drivesdk प्रथम चित्र] भी देखें वह लेख का अवतरण इतिहास है [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 04:52, 6 जून 2026 (UTC) ::::::@[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] महोदय, ::::::[[विकिपीडिया:सामग्री संवर्द्धन संपादनोत्सव/जून 2026]] के नियम अनुभाग का द्वितीय बिंदु स्पष्ट रूप से यह उल्लेख करता है कि: :::::::'''"संपादनोत्सव की अवधि भारतीय समय के अनुसार 1 जून 2026 (12:00 पूर्वाह्न) से 30 जून 2026 (11:59 अपराह्न) तक होगी। इस अवधि में निर्मित लेख ही संपादनोत्सव में शामिल होंगे।"''' ::::::यहाँ तकनीकी समस्या यह आ रही है कि प्रतियोगिता का फाउंटेन टूल भारतीय समयानुसार (IST) काम करने के बजाय अंतर्राष्ट्रीय मानक समय (UTC) का उपयोग कर रहा है। इसी समय-क्षेत्र के अंतर के कारण, जब भारत में 1 जून की शुरुआत हो चुकी थी, तब फाउंटेन टूल के सर्वर पर वह समय 31 मई (UTC) के रूप में दर्ज हो रहा था। ::::::मैंने ऊपर दिए गए स्क्रीनशॉट के माध्यम से एक ही लेख के वास्तविक निर्माण समय (अवतरण इतिहास) और टूल द्वारा दिखाई जा रही त्रुटि को स्पष्ट रूप से प्रस्तुत किया है। चूँकि यह लेख नीतिगत रूप से तय की गई भारतीय समयावधि के भीतर ही निर्मित हुआ है, अतः आपसे अनुरोध है कि नियमों के आलोक में इस तकनीकी विसंगति का समाधान करने का कष्ट करें। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:10, 6 जून 2026 (UTC) :::::::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, प्रतियोगिता के पृष्ठ पर यह भी लिखा हुआ है '''किसी भी समस्या को [[विकिपीडिया वार्ता:सामग्री संवर्द्धन संपादनोत्सव/जून 2026|वार्ता पृष्ठ]] पर लिखें'''। अतः समस्या वहीं उचित स्थान पर लिख दें, देखा जायेगा क्या किया जा सकता है। विसंगति का समाधान करने का कष्ट करवाने के लिये किसी को व्यक्तिगत न लिखें। धन्यवाद। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:43, 6 जून 2026 (UTC) ::::::::@[[सदस्य:SM7|SM7]] महोदय क्या इस पूरी चर्चा को वार्ता पृष्ठ पर लिख दूं यहां से हटाकर [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 05:45, 6 जून 2026 (UTC) :::::::::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] उससे क्या होगा ? समस्या लिखिए और धैर्य रखिये। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 05:47, 6 जून 2026 (UTC) :::::::आप ठीक कह रहे हैं। फाउंटेन टूल में जरूरी सुधार कर दिया गया है। उम्मीद है कि अब आप अपने लेख जमा कर सकेंगे। कोई समस्या हो तो जरूर लिखें। इस पूरी चर्चा को संपादनोत्सव के वार्ता पृष्ठ पर प्रतिलिपि कर रहा हूँ। आगे की चर्चा वहाँ करें [[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] ([[सदस्य वार्ता:अनिरुद्ध कुमार|वार्ता]]) 09:19, 7 जून 2026 (UTC) ::::::::महोदय समस्या वैसी ही है। [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 09:26, 7 जून 2026 (UTC) {{od}} {{re|AMAN KUMAR}} आवश्यक सुधार किये गए हैं, एक बार पुनः प्रयास करें। साथ ही {{re|अनुज साव22}} जी को पिंग कर रहा, जहाँ तक मुझे पता है उन्हें भी इस तरह की समस्या का सामना करना पड़ रहा था, अतः अनुज साव22 जी भी प्रयास करके बतायें।--[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 14:17, 7 जून 2026 (UTC) :: @[[सदस्य:SM7|SM7]] जी और @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार]] जी, सहायता के लिए आप दोनों का बहुत-बहुत धन्यवाद। मेरी समस्या अब पूरी तरह से सुलझ गई है और फाउंटेन टूल पर लेख सफलतापूर्वक जमा हो गए हैं। :::महोदय, मुझे एक छोटी-सी जानकारी और चाहिए थी। आज मैंने टूल पर कुल 5 लेख जमा किए हैं (जिनमें 3 लेख आज के हैं और 2 लेख वे पुराने वाले हैं जो तकनीकी समस्या के कारण रुके हुए थे)। चूँकि वे 2 लेख मैंने पहले ही बना लिए थे और केवल जमा आज हो पाए हैं, तो क्या मैं प्रतियोगिता के तहत आज और भी नए लेख बनाकर जमा कर सकता हूँ? कृपया मार्गदर्शन करें कि क्या प्रतिदिन लेख बनाने या जमा करने की कोई अधिकतम सीमा निर्धारित है? [[User:AMAN KUMAR|<b style="color:olive;font-size:18px;text-shadow:2px 2px 4px #888"><u>विक्रम प्रताप</u></b>]]<sup>[[User talk:AMAN KUMAR|<b style="color:teal"><u>(बातचीत)</u></b>]]</sup>-- 06:49, 9 जून 2026 (UTC) :::@[[सदस्य:AMAN KUMAR|AMAN KUMAR]] जी, एक दिन में अधिकतम 5 लेख जमा करने की सीमा है। हालाँकि, आपके पुराने लेख जो आज जमा हो पाये हैं उन्हें आज के कार्य में नहीं गिना जायेगा। अतः आप आज की 5 की संख्या पूरी कर सकते हैं। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 06:55, 9 जून 2026 (UTC) == पुराने लेख को जमा करने में समस्या == नमस्ते, @[[सदस्य:अनिरुद्ध कुमार|अनिरुद्ध कुमार जी]] , @[[सदस्य:SM7|SM7]] मैं “सामग्री संवर्धन संपादनोत्सव जून 2026” में भाग ले रहा हूँ। मैंने [[खीर]] लेख को काफी विस्तारित और सुधारित किया है, जिसमें नए संदर्भ, विकिलिंक, अनुभाग और बेहतर भाषा जोड़ी गई है। लेकिन जब मैं कार्यक्रम के टूल के माध्यम से इस लेख को जमा करने का प्रयास करता हूँ, तब “The article was created at…” दिखता है और “Add” बटन सक्रिय नहीं होता। संभवतः यह इसलिए हो रहा है क्योंकि लेख पहले से मौजूद है। कृपया बताने का कष्ट करें कि: पहले से मौजूद लेखों में किए गए विस्तार/सुधार को इस अभियान में कैसे जमा किया जाए? क्या इसके लिए कोई अलग प्रक्रिया या पृष्ठ उपलब्ध है? धन्यवाद। <span style="color:gold;">★</span>[[user: Ritikpraj|<u><span style="color: brown;">Ritik Prajapati</span></u>]]<span style="color:gold;">★</span> • [[User talk: Ritikpraj|<span style="color:tan;">✉</span>]] • 17:34, 15 जून 2026 (UTC) :@[[सदस्य:Ritikpraj|Ritikpraj]] जी, ऐसी कोई प्रक्रिया नहीं उपलब्ध है। आपको नया लेख बनाना था। और अभी जिस तरह से आपने पिंग करने का प्रयास किया है उस तरह यह नहीं काम करता है। पिंग साँचे या सदस्य के नाम की कड़ी के साथ जबतक संदेश में आपके हस्ताक्षर न हों यह अधिसूचना नहीं भेजता है। मैंने इत्तफाक से आप का संदेश देख लिया। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:59, 17 जुलाई 2026 (UTC) 7e8xdbhg9ol4slfdkgdv6klnqw0crgw तोशीहादे मोस्कवा 0 1612988 6587010 6559337 2026-07-18T08:02:27Z अनुज साव22 515212 6587010 wikitext text/x-wiki {{Infobox scientist | name = तोशिहिदे मास्कावा | native_name = 益川 敏英 | image = Toshihide Masukawa-press conference Dec 07th, 2008-2.jpg | birth_date = 7 फरवरी 1940 | birth_place = नागोया, जापान | death_date = 23 जुलाई 2021 | death_place = [[क्योटो]], [[जापान]] | citizenship = [[जापानी]] | fields = [[भौतिकी]] | workplaces = क्योटो विश्वविद्यालय, नागोया विश्वविद्यालय | alma_mater = नागोया विश्वविद्यालय | known_for = सीपी उल्लंघन, सीकेएम आव्यूह | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (2008) }} तोशिहिदे मास्कावा (7 फरवरी 1940 – 23 जुलाई 2021) एक अत्यंत प्रख्यात और विश्वविख्यात जापानी सैद्धांतिक भौतिक विज्ञानी थे, जिन्हें उपपरमाण्विक कणों और प्रमात्रा यांत्रिकी के क्षेत्र में उनके ऐतिहासिक अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2008/maskawa/biographical/|title=तोशिहिदे मास्कावा की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=3 जून 2026}}</ref> वर्ष 2008 में उन्हें भौतिकी के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण वैज्ञानिक योगदान के लिए मकोतो कोबायाशी और योइचिरो नाम्बू के साथ संयुक्त रूप से भौतिकी के सर्वोच्च सम्मान, नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/2008/10/08/science/08nobel.html|title=जापानी वैज्ञानिकों ने जीता भौतिकी का नोबेल|publisher=द न्यूयॉर्क टाइम्स|date=8 अक्टूबर 2008|accessdate=3 जून 2026}}</ref> यह महान सम्मान उन्हें कण भौतिकी में सममिति टूटने के रहस्य को सुलझाने और प्रकृति में क्वार्क की कम से कम तीन पीढ़ियों के अस्तित्व की सटीक भविष्यवाणी करने के लिए प्रदान किया गया था।<ref>{{cite journal|last=मास्कावा|first=तोशिहिदे|title=कमजोर अंतःक्रिया में सीपी उल्लंघन|journal=सैद्धांतिक भौतिकी प्रगति पत्रिका|year=1973|volume=49|pages=652-657}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध ब्रह्मांड के मूलभूत कणों के व्यवहार और उनके निर्माण को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=स्मिथ|first=रॉबर्ट|title=आधुनिक भौतिकी और कण विज्ञान|year=2010|publisher=विज्ञान शिक्षा प्रकाशन}}</ref> == प्रारंभिक जीवन और शिक्षा == उनका जन्म 7 फरवरी 1940 को जापान के नागोया नामक एक अत्यंत प्रमुख और ऐतिहासिक नगर में हुआ था।<ref>{{cite book|last=डेविस|first=पॉल|title=मास्कावा का प्रारंभिक जीवन और युद्ध|year=2012|publisher=भौतिकी शिक्षा प्रकाशन}}</ref> उनके प्रारंभिक जीवन का समय अत्यंत संघर्षपूर्ण था क्योंकि उनका बचपन द्वितीय महायुद्ध के अत्यंत विनाशकारी दौर में बीता था। महायुद्ध के दौरान उनके नगर पर भारी बमबारी हुई थी, जिसने उनके बाल मन पर गहरा प्रभाव डाला और उन्हें शांति के महत्व को समझने की अत्यंत गहरी प्रेरणा दी। युद्ध के पश्चात के कठिन समय में भी उनके परिवार ने उनकी शिक्षा को हमेशा सर्वोच्च प्राथमिकता दी। बचपन से ही उनकी विज्ञान, विशेषकर गणित और भौतिकी के अत्यंत जटिल प्रश्नों को सुलझाने में अत्यधिक रुचि थी।<ref>{{cite journal|last=जॉनसन|first=माइकल|title=महान भौतिक विज्ञानियों का प्रारंभिक जीवन|journal=प्रायोगिक भौतिकी पत्रिका|year=2009|volume=25|pages=112-118}}</ref> अपनी प्रारंभिक और माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए प्रतिष्ठित नागोया विश्वविद्यालय में प्रवेश लिया।<ref>{{cite web|url=https://en.nagoya-u.ac.jp/about_nu/history_data/index.html|title=नागोया विश्वविद्यालय का इतिहास|publisher=नागोया विश्वविद्यालय|accessdate=3 जून 2026}}</ref> इसी महान संस्थान से उन्होंने वर्ष 1962 में भौतिकी विषय में अपना स्नातक अत्यंत उत्कृष्ट अंकों के साथ पूर्ण किया। इसके पश्चात वे अपना अनुसंधान कार्य जारी रखने के लिए वहीं रुक गए और वर्ष 1967 में भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की। यहाँ उन्होंने कण भौतिकी पर अपना बहुत ही महत्वपूर्ण शोध कार्य पूर्ण किया था, जिसने उनके भविष्य के सबसे बड़े वैज्ञानिक सिद्धांत की अत्यंत मजबूत नींव रखी।<ref>{{cite web|url=https://www.phys.nagoya-u.ac.jp/en/history/|title=नागोया विश्वविद्यालय के भौतिकी विभाग का इतिहास|publisher=नागोया विश्वविद्यालय विज्ञान संकाय|accessdate=3 जून 2026}}</ref> == पुरस्कार और मान्यता == विज्ञान और कण भौतिकी के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 2008 में भौतिकी के नोबेल पुरस्कार से नवाजा गया।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2008/summary/|title=2008 भौतिकी नोबेल पुरस्कार का सारांश|publisher=नोबेल फाउंडेशन|accessdate=3 जून 2026}}</ref> इस महान पुरस्कार ने अंतर्राष्ट्रीय स्तर पर उनके द्वारा किए गए शोध को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। नोबेल पुरस्कार के अतिरिक्त उन्हें दुनिया भर के कई अत्यंत प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया। वर्ष 1985 में उन्हें विज्ञान के क्षेत्र में असाधारण योगदान के लिए जापान के सबसे प्रतिष्ठित 'सकुराई पुरस्कार' से अलंकृत किया गया था।<ref>{{cite book|last=क्लार्क|first=जेम्स|title=नोबेल विजेताओं और जापानी वैज्ञानिकों का इतिहास|year=2015|publisher=ऑक्सफोर्ड विज्ञान प्रकाशन}}</ref> इसके अतिरिक्त उन्हें जापान अकादमी पुरस्कार और संस्कृति क्रम सम्मान से भी सम्मानित किया गया। उनके ऐतिहासिक शोध कार्य के कारण ही आज भौतिकी के मानक प्रतिरूप को एक अत्यंत मजबूत आधार मिला है। == इन्हें भी देखें == * [[मकोतो कोबायाशी]] * [[कण भौतिकी]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} 8zuxkvc1fhtio5twvlvu8a4456yk268 योहीरो नांबू 0 1612989 6587011 6559338 2026-07-18T08:04:40Z अनुज साव22 515212 6587011 wikitext text/x-wiki {{Infobox scientist | name = योइचिरो नाम्बू<br />南部 陽一郎 | image = YoichiroNambu.jpg | birth_date = 18 जनवरी 1921 | birth_place = टोक्यो, जापान | death_date = 5 जुलाई 2015 | death_place = ओसाका, जापान | citizenship = जापानी-अमेरिकी | fields = भौतिकी | workplaces = शिकागो विश्वविद्यालय, उन्नत अध्ययन संस्थान | alma_mater = टोक्यो विश्वविद्यालय | known_for = सहज सममिति टूटना, प्रमात्रा रंगगतिकी, तंतु सिद्धांत | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (2008) }} योइचिरो नाम्बू (18 जनवरी 1921 – 5 जुलाई 2015) एक अत्यंत प्रख्यात और विश्वविख्यात जापानी-अमेरिकी सैद्धांतिक भौतिक विज्ञानी थे, जिन्हें उपपरमाण्विक भौतिकी और प्रमात्रा यांत्रिकी के क्षेत्र में उनके ऐतिहासिक अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2008/nambu/biographical/|title=योइचिरो नाम्बू की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=3 जून 2026}}</ref> वर्ष 2008 में उन्हें भौतिकी के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण वैज्ञानिक योगदान के लिए मकोतो कोबायाशी और तोशिहिदे मास्कावा के साथ संयुक्त रूप से भौतिकी के सर्वोच्च सम्मान, नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/2008/10/08/science/08nobel.html|title=तीन वैज्ञानिकों ने जीता भौतिकी का नोबेल|publisher=द न्यूयॉर्क टाइम्स|date=8 अक्टूबर 2008|accessdate=3 जून 2026}}</ref> यह महान सम्मान उन्हें उपपरमाण्विक भौतिकी में 'सहज सममिति टूटने' की चमत्कारी प्रक्रिया की खोज के लिए प्रदान किया गया था।<ref>{{cite journal|last=नाम्बू|first=योइचिरो|title=कण भौतिकी में सहज सममिति|journal=भौतिकी समीक्षा पत्रिका|year=1960|volume=117|pages=648-663}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध ब्रह्मांड के मूलभूत कणों के द्रव्यमान और उनके व्यवहार को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=स्मिथ|first=रॉबर्ट|title=आधुनिक भौतिकी और कण|year=2010|publisher=विज्ञान शिक्षा प्रकाशन}}</ref> == प्रारम्भिक जीवन == उनका जन्म 18 जनवरी 1921 को जापान की राजधानी टोक्यो में हुआ था। जब वे केवल दो वर्ष के थे, तब टोक्यो में एक अत्यंत भयंकर भूकंप आया था, जिसके कारण उनके परिवार को अपनी सुरक्षा के लिए फुकुई नामक एक छोटे से नगर में विस्थापित होना पड़ा।<ref>{{cite book|last=डेविस|first=पॉल|title=नाम्बू का प्रारंभिक जीवन|year=2012|publisher=भौतिकी शिक्षा प्रकाशन}}</ref> उनके पिता एक स्थानीय विद्यालय में शिक्षक थे, जिसके कारण उनके घर में हमेशा से ही अध्ययन और ज्ञानार्जन का एक अत्यंत उत्कृष्ट वातावरण रहता था। बचपन से ही उनकी विज्ञान और गणित के अत्यंत जटिल प्रश्नों को सुलझाने में अत्यधिक रुचि थी।<ref>{{cite journal|last=जॉनसन|first=माइकल|title=महान भौतिक विज्ञानियों का प्रारंभिक जीवन|journal=प्रायोगिक भौतिकी पत्रिका|year=2009|volume=25|pages=112-118}}</ref> उनके प्रारंभिक जीवन का काफी समय द्वितीय महायुद्ध के अत्यंत संघर्षपूर्ण दौर में बीता, जिसने उन्हें जीवन में अत्यंत कठोर परिश्रम करने की प्रेरणा दी। == शिक्षा == अपनी प्रारंभिक और माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए जापान के सबसे प्रतिष्ठित संस्थान, टोक्यो विश्वविद्यालय में प्रवेश लिया।<ref>{{cite web|url=https://www.u-tokyo.ac.jp/en/about/history.html|title=टोक्यो विश्वविद्यालय का इतिहास|publisher=टोक्यो विश्वविद्यालय|accessdate=3 जून 2026}}</ref> इसी महान संस्थान से उन्होंने वर्ष 1942 में भौतिकी विषय में अपना स्नातक अत्यंत उत्कृष्ट अंकों के साथ पूर्ण किया। इसके पश्चात द्वितीय महायुद्ध के कारण उन्हें एक सैन्य अनुसंधान प्रयोगशाला में कार्य करने के लिए भेज दिया गया, जहाँ उन्होंने राडार तकनीक पर कार्य किया।<ref>{{cite journal|last=टेलर|first=रिचर्ड|title=प्रमात्रा यांत्रिकी का ऐतिहासिक विकास|journal=नेचर भौतिकी पत्रिका|year=2004|volume=15|pages=78-85}}</ref> युद्ध समाप्त होने के पश्चात वे पुनः विश्वविद्यालय लौट आए और वर्ष 1952 में भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की। यहाँ उन्होंने कण भौतिकी पर अपना बहुत ही महत्वपूर्ण शोध कार्य पूर्ण किया था।<ref>{{cite web|url=https://www.s.u-tokyo.ac.jp/en/overview/history.html|title=टोक्यो विश्वविद्यालय के पूर्व छात्र और नोबेल विजेता|publisher=टोक्यो विश्वविद्यालय विज्ञान संकाय|accessdate=3 जून 2026}}</ref> == सम्मान == विज्ञान और प्रमात्रा भौतिकी के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 2008 में भौतिकी के नोबेल पुरस्कार से नवाजा गया।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2008/summary/|title=2008 भौतिकी नोबेल पुरस्कार का सारांश|publisher=नोबेल फाउंडेशन|accessdate=3 जून 2026}}</ref> नोबेल पुरस्कार के अतिरिक्त उन्हें दुनिया भर के कई अत्यंत प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया। उन्हें विज्ञान के क्षेत्र में असाधारण योगदान के लिए 'राष्ट्रीय विज्ञान पदक' और 'वुल्फ पुरस्कार' जैसे सर्वोच्च सम्मानों से भी अलंकृत किया गया था।<ref>{{cite book|last=क्लार्क|first=जेम्स|title=नोबेल विजेताओं का इतिहास|year=2015|publisher=ऑक्सफोर्ड विज्ञान प्रकाशन}}</ref> वे 1970 में अमेरिकी नागरिक बन गए और कई दशकों तक शिकागो विश्वविद्यालय में एक पूर्णकालिक वरिष्ठ प्राध्यापक के रूप में कार्यरत रहे। 5 जुलाई 2015 को 94 वर्ष की अत्यंत परिपक्व आयु में ओसाका नगर में उनका शांतिपूर्ण निधन हो गया, परंतु सैद्धांतिक भौतिकी के जगत में उनका अमूल्य योगदान सदा के लिए अमर रहेगा।<ref>{{cite news|url=https://www.bbc.com/news/science-environment-20150717|title=महान भौतिक विज्ञानी योइचिरो नाम्बू का निधन|publisher=बीबीसी समाचार|date=17 जुलाई 2015|accessdate=3 जून 2026}}</ref> == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] * [[मकोतो कोबायाशी]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} hyu400nuxu5oy4wlja34egwonczr2kw माइकल कोस्टरलिट्ज़ 0 1612990 6587008 6559342 2026-07-18T08:01:08Z अनुज साव22 515212 6587008 wikitext text/x-wiki {{Infobox scientist | name = जे. माइकल कोस्टरलिट्ज़ | image = 2016 Nobel Reception US Embassy Sweden (31557185216) (cropped).jpg | birth_date = 22 जून 1943 | birth_place = एबरडीन, स्कॉटलैंड | citizenship = ब्रिटिश, अमेरिकी | fields = भौतिकी | workplaces = ब्राउन विश्वविद्यालय, बर्मिंघम विश्वविद्यालय | alma_mater = कैम्ब्रिज विश्वविद्यालय, ऑक्सफोर्ड विश्वविद्यालय | known_for = कोस्टरलिट्ज़-थौलेस संक्रमण, टोपोलॉजिकल चरण संक्रमण | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (2016) }} जे. माइकल कोस्टरलिट्ज़ (जन्म 22 जून 1943) एक अत्यंत प्रख्यात और विश्वविख्यात ब्रिटिश-अमेरिकी भौतिक विज्ञानी हैं, जिन्हें ठोस अवस्था भौतिकी के क्षेत्र में उनके ऐतिहासिक अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2016/kosterlitz/biographical/|title=माइकल कोस्टरलिट्ज़ की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=3 जून 2026}}</ref> वर्ष 2016 में उन्हें भौतिकी के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण वैज्ञानिक योगदान के लिए डेविड थौलेस और डंकन हाल्डेन के साथ संयुक्त रूप से भौतिकी के सर्वोच्च सम्मान, नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/2016/10/05/science/nobel-prize-physics-topology.html|title=तीन वैज्ञानिकों ने जीता भौतिकी का नोबेल पुरस्कार|publisher=द न्यूयॉर्क टाइम्स|date=5 अक्टूबर 2016|accessdate=3 जून 2026}}</ref> यह महान सम्मान उन्हें पदार्थ के सांस्थितिक (टोपोलॉजिकल) चरण संक्रमण और पदार्थ की नवीन अवस्थाओं की सैद्धांतिक खोज के लिए प्रदान किया गया था।<ref>{{cite journal|last=कोस्टरलिट्ज़|first=माइकल|title=द्वि-आयामी प्रणालियों में चरण संक्रमण|journal=भौतिकी समीक्षा पत्रिका|year=1973|volume=6|pages=1181-1203}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध आधुनिक भौतिकी, उन्नत सामग्री विज्ञान और प्रमात्रा (क्वांटम) प्रणालियों को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=स्मिथ|first=रॉबर्ट|title=आधुनिक भौतिकी और टोपोलॉजी|year=2018|publisher=विज्ञान शिक्षा प्रकाशन}}</ref> == प्रारंभिक जीवन और शिक्षा == उनका जन्म 22 जून 1943 को स्कॉटलैंड के एबरडीन नामक एक अत्यंत ऐतिहासिक नगर में हुआ था।<ref>{{cite book|last=डेविस|first=पॉल|title=कोस्टरलिट्ज़ का प्रारंभिक जीवन|year=2017|publisher=भौतिकी शिक्षा प्रकाशन}}</ref> उनके माता-पिता जर्मन यहूदी थे, जो द्वितीय महायुद्ध की विनाशकारी नीतियों से बचने के लिए जर्मनी छोड़कर ब्रिटेन आ गए थे। उनके पिता एक बहुत बड़े और प्रख्यात जीव-रसायन विज्ञानी थे, जिसके कारण बचपन से ही उनके घर में विज्ञान और अनुसंधान का एक अत्यंत उत्कृष्ट वातावरण विद्यमान था। इसी शैक्षिक वातावरण ने उनके भीतर ब्रह्मांड के रहस्यों को सुलझाने की अत्यंत गहरी लालसा उत्पन्न की।<ref>{{cite journal|last=जॉनसन|first=माइकल|title=महान भौतिक विज्ञानियों का प्रारंभिक जीवन|journal=प्रायोगिक भौतिकी पत्रिका|year=2014|volume=25|pages=112-118}}</ref> अपनी प्रारंभिक और माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए अत्यंत प्रतिष्ठित कैम्ब्रिज विश्वविद्यालय में प्रवेश लिया।<ref>{{cite web|url=https://www.cam.ac.uk/about-the-university/history/nobel-prize|title=कैम्ब्रिज विश्वविद्यालय का इतिहास और नोबेल विजेता|publisher=कैम्ब्रिज विश्वविद्यालय|accessdate=3 जून 2026}}</ref> इसी महान संस्थान से उन्होंने गणित और भौतिकी विषय में अपना स्नातक अत्यंत उत्कृष्ट अंकों के साथ पूर्ण किया। इसके पश्चात वे अपना अनुसंधान कार्य जारी रखने के लिए ऑक्सफोर्ड विश्वविद्यालय चले गए। इसी प्रतिष्ठित संस्थान से उन्होंने वर्ष 1969 में उच्च ऊर्जा भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की। यहाँ उन्होंने कण भौतिकी के अत्यंत जटिल गणितीय समीकरणों पर अपना बहुत ही महत्वपूर्ण शोध कार्य पूर्ण किया था।<ref>{{cite web|url=https://www.ox.ac.uk/about/oxford-people/nobel-laureates|title=ऑक्सफोर्ड विश्वविद्यालय के पूर्व छात्र|publisher=ऑक्सफोर्ड विश्वविद्यालय विज्ञान संकाय|accessdate=3 जून 2026}}</ref> == पुरस्कार और मान्यता == विज्ञान और भौतिकी के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 2016 में भौतिकी के नोबेल पुरस्कार से नवाजा गया।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2016/summary/|title=2016 भौतिकी नोबेल पुरस्कार का सारांश|publisher=नोबेल फाउंडेशन|accessdate=3 जून 2026}}</ref> इस महान पुरस्कार ने अंतर्राष्ट्रीय स्तर पर उनके द्वारा किए गए शोध को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। नोबेल पुरस्कार के अतिरिक्त उन्हें दुनिया भर के कई अत्यंत प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया। वर्ष 1981 में उन्हें ब्रिटिश भौतिकी संस्थान द्वारा अत्यंत प्रतिष्ठित 'मैक्सवेल पदक' से अलंकृत किया गया था।<ref>{{cite book|last=क्लार्क|first=जेम्स|title=नोबेल विजेताओं का इतिहास|year=2018|publisher=ऑक्सफोर्ड विज्ञान प्रकाशन}}</ref> इसके अतिरिक्त वर्ष 2000 में उन्हें अमेरिकी भौतिकी समाज द्वारा 'लार्स ओन्सागर पुरस्कार' से भी सम्मानित किया गया। उनके ऐतिहासिक शोध कार्य के कारण ही आज प्रमात्रा संगणक (क्वांटम कंप्यूटर) और नई उन्नत सामग्रियों के निर्माण का मार्ग प्रशस्त हुआ है।<ref>{{cite web|url=https://www.aps.org/programs/honors/prizes/prizerecipient.cfm|title=लार्स ओन्सागर पुरस्कार विजेता|publisher=अमेरिकी भौतिकी समाज|accessdate=3 जून 2026}}</ref> == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] * [[डंकन हाल्डेन]] * [[ठोस अवस्था भौतिकी]] * [[अतिचालकता]] * [[टोपोलॉजी]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} swh6p9y812gg2qyk7tiynqjyq1bkwnf कॉन्स्टेंटिन नोवोसेलोव 0 1612991 6587007 6559343 2026-07-18T08:00:25Z अनुज साव22 515212 6587007 wikitext text/x-wiki {{Infobox scientist | name = कॉन्स्टेंटिन नोवोसेलोव | image = Konstantin_Novoselov_portrait.jpg | birth_date = 23 अगस्त 1974 | birth_place = निज़नी टैगिल, [[सोवियत संघ]] | citizenship = [[रूसी]], [[ब्रिटिश]] | fields = भौतिकी, नैनो तकनीक | workplaces = [[मैनचेस्टर विश्वविद्यालय]], सिंगापुर राष्ट्रीय विश्वविद्यालय | alma_mater = मास्को भौतिकी और प्रौद्योगिकी संस्थान, रैडबौड विश्वविद्यालय | known_for = ग्राफीन की खोज | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (2010) }} कॉन्स्टेंटिन सर्गेइविच नोवोसेलोव (जन्म 23 अगस्त 1974) एक अत्यंत प्रख्यात और विश्वविख्यात रूसी-ब्रिटिश भौतिक विज्ञानी हैं, जिन्हें ठोस अवस्था भौतिकी और अतिसूक्ष्म पदार्थ विज्ञान (नैनो तकनीक) के क्षेत्र में उनके ऐतिहासिक अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2010/novoselov/biographical/|title=कॉन्स्टेंटिन नोवोसेलोव की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=3 जून 2026}}</ref> वर्ष 2010 में उन्हें भौतिकी के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण वैज्ञानिक योगदान के लिए आंद्रे जीम के साथ संयुक्त रूप से भौतिकी के सर्वोच्च सम्मान, नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/2010/10/06/science/06nobel.html|title=ग्राफीन की खोज के लिए भौतिकी का नोबेल|publisher=द न्यूयॉर्क टाइम्स|date=6 अक्टूबर 2010|accessdate=3 जून 2026}}</ref> यह महान सम्मान उन्हें कार्बन के अत्यंत पतले और द्वि-आयामी रूप, 'ग्राफीन' की युगांतरकारी खोज और उसके रहस्यमयी गुणों का तथ्यात्मक विश्लेषण करने के लिए प्रदान किया गया था।<ref>{{cite journal|last=नोवोसेलोव|first=कॉन्स्टेंटिन|title=ग्राफीन में विद्युत क्षेत्र प्रभाव|journal=विज्ञान पत्रिका|year=2004|volume=306|pages=666-669}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध आधुनिक पदार्थ विज्ञान, इलेक्ट्रॉनिक्स और भविष्य की उन्नत तकनीकों को विकसित करने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=स्मिथ|first=रॉबर्ट|title=आधुनिक नैनो तकनीक का इतिहास|year=2015|publisher=विज्ञान शिक्षा प्रकाशन}}</ref> == प्रारंभिक जीवन और शिक्षा == उनका जन्म 23 अगस्त 1974 को तत्कालीन सोवियत संघ (वर्तमान रूस) के निज़नी टैगिल नामक एक अत्यंत प्रमुख औद्योगिक नगर में हुआ था।<ref>{{cite book|last=डेविस|first=पॉल|title=नोवोसेलोव का प्रारंभिक जीवन और रूस|year=2012|publisher=भौतिकी शिक्षा प्रकाशन}}</ref> उनके पिता एक स्थानीय कारखाने में अभियंता (इंजीनियर) के रूप में कार्यरत थे और उनकी माता एक विद्यालय में शिक्षिका थीं। घर में तकनीकी और शैक्षिक वातावरण होने के कारण बचपन से ही उनकी विज्ञान, विशेषकर भौतिकी और अत्यंत जटिल गणितीय प्रश्नों को सुलझाने में अत्यधिक रुचि थी। उनके प्रारंभिक जीवन का समय सोवियत संघ के भारी राजनीतिक और सामाजिक बदलावों के बीच बीता, जिसने उन्हें सीमित संसाधनों में भी अत्यंत उत्कृष्ट कार्य करने की प्रेरणा दी।<ref>{{cite journal|last=जॉनसन|first=माइकल|title=महान भौतिक विज्ञानियों का प्रारंभिक जीवन|journal=प्रायोगिक भौतिकी पत्रिका|year=2014|volume=25|pages=112-118}}</ref> [[चित्र:Moscow State University.jpg|thumb|left|मास्को का ऐतिहासिक विश्वविद्यालय भवन। उन्होंने अपनी प्रारंभिक उच्च शिक्षा रूस की राजधानी मास्को के उत्कृष्ट संस्थानों से ही पूर्ण की थी।]] अपनी प्रारंभिक और माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए रूस के सबसे प्रतिष्ठित संस्थान, मास्को भौतिकी और प्रौद्योगिकी संस्थान में प्रवेश लिया।<ref>{{cite web|url=https://mipt.ru/english/about/history/|title=मास्को भौतिकी और प्रौद्योगिकी संस्थान का इतिहास|publisher=मास्को तकनीकी संस्थान|accessdate=3 जून 2026}}</ref> इसी महान संस्थान से उन्होंने वर्ष 1997 में भौतिकी विषय में अपना स्नातक अत्यंत उत्कृष्ट अंकों के साथ पूर्ण किया। इसके पश्चात वे अपना अनुसंधान कार्य जारी रखने के लिए नीदरलैंड चले गए और वहाँ रैडबौड विश्वविद्यालय में आंद्रे जीम के मार्गदर्शन में शोध करने लगे। इसी प्रतिष्ठित संस्थान से उन्होंने वर्ष 2004 में भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की। यहाँ उन्होंने अत्यंत शक्तिशाली चुम्बकीय क्षेत्र और अतिसूक्ष्म पदार्थों पर अपना बहुत ही महत्वपूर्ण शोध कार्य पूर्ण किया था।<ref>{{cite web|url=https://www.ru.nl/en/about-us/history|title=रैडबौड विश्वविद्यालय का इतिहास और पूर्व छात्र|publisher=रैडबौड विश्वविद्यालय विज्ञान संकाय|accessdate=3 जून 2026}}</ref> == पुरस्कार और मान्यता == विज्ञान और पदार्थ भौतिकी के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 2010 में भौतिकी के नोबेल पुरस्कार से नवाजा गया।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2010/summary/|title=2010 भौतिकी नोबेल पुरस्कार का सारांश|publisher=नोबेल फाउंडेशन|accessdate=3 जून 2026}}</ref> इस महान पुरस्कार को प्राप्त करते समय उनकी आयु मात्र 36 वर्ष थी, जिसके कारण वे पिछले कई दशकों में भौतिकी का नोबेल जीतने वाले सबसे कम उम्र के वैज्ञानिक बन गए थे। इस महान पुरस्कार ने अंतर्राष्ट्रीय स्तर पर उनके द्वारा किए गए शोध को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। नोबेल पुरस्कार के अतिरिक्त उन्हें दुनिया भर के कई अत्यंत प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया। उन्हें यूरोपियन भौतिकी संस्था द्वारा अतिसूक्ष्म विज्ञान के लिए 'यूरोफिजिक्स पुरस्कार' से भी अलंकृत किया गया था।<ref>{{cite book|last=क्लार्क|first=जेम्स|title=नोबेल विजेताओं का इतिहास|year=2018|publisher=ऑक्सफोर्ड विज्ञान प्रकाशन}}</ref> उनके ऐतिहासिक शोध कार्य के कारण ही आज दुनिया भर की प्रयोगशालाएं ग्राफीन पर खरबों का निवेश कर रही हैं। == इन्हें भी देखें == * [[भौतिकी में नोबेल पुरस्कार]] * [[ग्राफीन]] * [[आंद्रे जीम]] * [[ठोस अवस्था भौतिकी]] * [[कार्बन]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} k1skt09zjfb3tzp8vi7o6s7uex2tk80 एरिक ए॰ कॉर्नेल 0 1612992 6587009 6559346 2026-07-18T08:01:38Z अनुज साव22 515212 6587009 wikitext text/x-wiki {{Infobox scientist | name = एरिक ए॰ कॉर्नेल | image = Physics Nobel Laureate Eric Allin Cornell, in June of 2015.jpg | birth_date = 19 दिसंबर 1961 | birth_place = [[पालो ऑल्टो]], [[संयुक्त राज्य अमेरिका]] | citizenship = [[अमेरिकी]] | fields = भौतिकी | alma_mater = [[स्टैनफोर्ड विश्वविद्यालय]], [[मैसाचुसेट्स प्रौद्योगिकी संस्थान]] | known_for = [[बोस-आइंस्टीन संघनन]] | awards = '''[[भौतिकी में नोबेल पुरस्कार]]''' (2001) }} एरिक एलिन कॉर्नेल (जन्म 19 दिसंबर 1961) एक अत्यंत प्रख्यात और विश्वविख्यात अमेरिकी भौतिक विज्ञानी हैं, जिन्हें प्रमात्रा यांत्रिकी और अत्यधिक निम्न तापमान भौतिकी के क्षेत्र में उनके ऐतिहासिक अनुसंधानों के लिए पूरी दुनिया में जाना जाता है।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2001/cornell/biographical/|title=एरिक ए॰ कॉर्नेल की जीवनी|publisher=नोबेल पुरस्कार समिति|accessdate=3 जून 2026}}</ref> वर्ष 2001 में उन्हें भौतिकी के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण वैज्ञानिक योगदान के लिए कार्ल वीमन और वोल्फगैंग केटरले के साथ संयुक्त रूप से भौतिकी के सर्वोच्च सम्मान, नोबेल पुरस्कार से सम्मानित किया गया था।<ref>{{cite news|url=https://www.nytimes.com/2001/10/10/world/3-scientists-win-nobel-physics-prize.html|title=तीन वैज्ञानिकों ने जीता भौतिकी का नोबेल पुरस्कार|publisher=द न्यूयॉर्क टाइम्स|date=10 अक्टूबर 2001|accessdate=3 जून 2026}}</ref> यह महान सम्मान उन्हें 'बोस-आइंस्टीन संघनन' नामक पदार्थ की एक बिल्कुल नई अवस्था का निर्माण करने के लिए प्रदान किया गया था।<ref>{{cite journal|last=कॉर्नेल|first=एरिक|title=बोस-आइंस्टीन संघनन का निर्माण|journal=आधुनिक भौतिकी की समीक्षा|year=2002|volume=74|pages=875-893}}</ref> उनका यह अत्यंत महत्वपूर्ण शोध ब्रह्मांड के मूलभूत कणों के व्यवहार को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>{{cite book|last=स्मिथ|first=रॉबर्ट|title=आधुनिक भौतिकी और सूक्ष्म कण|year=2005|publisher=विज्ञान शिक्षा प्रकाशन}}</ref> == प्रारंभिक जीवन और शिक्षा == उनका जन्म 19 दिसंबर 1961 को संयुक्त राज्य अमेरिका के कैलिफोर्निया राज्य में स्थित पालो ऑल्टो नामक नगर में हुआ था।<ref>{{cite book|last=डेविस|first=पॉल|title=कॉर्नेल का प्रारंभिक जीवन|year=2010|publisher=भौतिकी शिक्षा प्रकाशन}}</ref> उनके प्रारंभिक जीवन का काफी समय मैसाचुसेट्स में बीता, जहाँ उन्होंने अपनी प्रारंभिक शिक्षा प्राप्त की। बचपन से ही उनकी विज्ञान, गणित और विभिन्न प्रकार के उपकरणों की आंतरिक कार्यप्रणाली को समझने में अत्यधिक रुचि थी।<ref>{{cite journal|last=जॉनसन|first=माइकल|title=महान भौतिक विज्ञानियों का प्रारंभिक जीवन|journal=प्रायोगिक भौतिकी पत्रिका|year=2003|volume=22|pages=112-118}}</ref> इसी स्वाभाविक वैज्ञानिक जिज्ञासा ने उन्हें भौतिकी के क्षेत्र में अपना करियर बनाने के लिए प्रेरित किया। अपनी माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए अत्यंत प्रतिष्ठित [[स्टैनफोर्ड विश्वविद्यालय]] में प्रवेश लिया।<ref>{{cite web|url=https://www.stanford.edu/about/history|title=स्टैनफोर्ड विश्वविद्यालय का इतिहास|publisher=स्टैनफोर्ड विश्वविद्यालय|accessdate=3 जून 2026}}</ref> इसी महान संस्थान से उन्होंने वर्ष 1985 में भौतिकी विषय में अपना स्नातक अत्यंत उत्कृष्ट अंकों के साथ पूर्ण किया। इसके पश्चात वे अपना अनुसंधान कार्य जारी रखने के लिए मैसाचुसेट्स प्रौद्योगिकी संस्थान चले गए, जहाँ उन्हें कई महान वैज्ञानिकों के साथ कार्य करने का अत्यंत दुर्लभ और सुनहरा अवसर प्राप्त हुआ।<ref>{{cite journal|last=टेलर|first=रिचर्ड|title=प्रमात्रा यांत्रिकी में नई क्रांतियाँ|journal=नेचर भौतिकी पत्रिका|year=2004|volume=15|pages=78-85}}</ref> इसी प्रतिष्ठित संस्थान से उन्होंने वर्ष 1990 में भौतिकी में अपनी विद्यावाचस्पति (डॉक्टरेट) की सर्वोच्च उपाधि सफलतापूर्वक प्राप्त की। यहाँ उन्होंने परमाणुओं के द्रव्यमान को मापने और लेज़र तकनीक पर अपना बहुत ही महत्वपूर्ण शोध कार्य पूर्ण किया था।<ref>{{cite web|url=https://physics.mit.edu/about/history/|title=मैसाचुसेट्स प्रौद्योगिकी संस्थान के पूर्व छात्र|publisher=एमआईटी विज्ञान संकाय|accessdate=3 जून 2026}}</ref> == पुरस्कार और मान्यता == विज्ञान और प्रमात्रा भौतिकी के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 2001 में भौतिकी के नोबेल पुरस्कार से नवाजा गया।<ref>{{cite web|url=https://www.nobelprize.org/prizes/physics/2001/summary/|title=2001 भौतिकी नोबेल पुरस्कार का सारांश|publisher=नोबेल फाउंडेशन|accessdate=3 जून 2026}}</ref> इस महान पुरस्कार ने अंतर्राष्ट्रीय स्तर पर उनके द्वारा किए गए शोध को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। नोबेल पुरस्कार के अतिरिक्त उन्हें दुनिया भर के कई अत्यंत प्रतिष्ठित वैज्ञानिक संगठनों द्वारा बहुत ही बड़े सम्मानों से नवाजा गया। वर्ष 1998 में उन्हें विज्ञान के क्षेत्र में असाधारण योगदान के लिए अत्यधिक प्रतिष्ठित 'लोरेंट्ज़ पदक' से अलंकृत किया गया था।<ref>{{cite book|last=क्लार्क|first=जेम्स|title=नोबेल विजेताओं का इतिहास|year=2015|publisher=ऑक्सफोर्ड विज्ञान प्रकाशन}}</ref> उनके ऐतिहासिक शोध कार्य के कारण ही आज भौतिकी की कई अनसुलझी पहेलियों को सुलझाने में विश्व भर के वैज्ञानिकों को अत्यधिक सहायता मिल रही है। == इन्हें भी देखें == * [[बोस-आइंस्टीन संघनन]] * [[सत्येंद्र नाथ बोस]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} i8ypuerj9wb8ipewactsfgu3x8rbxch क्लास पोंटस अर्नोल्डसन 0 1613123 6587012 6560111 2026-07-18T08:05:15Z अनुज साव22 515212 6587012 wikitext text/x-wiki {{Infobox scientist | name = क्लास पोंटस अर्नोल्डसन | image = Klas Pontus Arnoldson.jpg | caption = नोबेल शांति पुरस्कार विजेता क्लास पोंटस अर्नोल्डसन | birth_date = 27 अक्टूबर 1844 | birth_place = गोथेनबर्ग, स्वीडन | death_date = 20 फरवरी 1916 | death_place = stockholm, स्वीडन | citizenship = स्वीडिश | fields = शांतिवाद, राजनीति, पत्रकारिता | known_for = स्वीडिश शांति और मध्यस्थता समाज | awards = '''[[नोबेल शांति पुरस्कार]]''' (1908) }} क्लास पोंटस अर्नोल्डसन (27 अक्टूबर 1844 – 20 फरवरी 1916) एक अत्यंत प्रख्यात और विश्वविख्यात स्वीडिश राजनीतिज्ञ, पत्रकार, लेखक और शांतिवादी नेता थे, जिन्हें स्कैंडिनेवियाई देशों के बीच शांति स्थापित करने और अंतरराष्ट्रीय मध्यस्थता के लिए उनके ऐतिहासिक आंदोलनों के लिए पूरी दुनिया में जाना जाता है।<ref>[https://www.nobelprize.org/prizes/peace/1908/arnoldson/biographical/ नोबेल पुरस्कार समिति: क्लास पोंटस अर्नोल्डसन का प्रामाणिक जीवन परिचय]</ref> वर्ष 1908 में उन्हें वैश्विक शांति के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण योगदान के लिए डेनमार्क के फ्रेडरिक बाजेर के साथ संयुक्त रूप से नोबेल शांति पुरस्कार से सम्मानित किया गया था।<ref>[https://books.google.co.in/books?id=4HNMAwAAQBAJ&pg=PA300&redir_esc=y#v=onepage&q&f=false/]</ref> यह महान सम्मान उन्हें 'स्वीडिश शांति और मध्यस्थता समाज' की स्थापना करने और अंतरराष्ट्रीय विवादों को युद्ध के बजाय कूटनीति तथा बातचीत के माध्यम से सुलझाने की अत्यंत ऐतिहासिक वकालत करने के लिए प्रदान किया गया था।<ref>[https://www.britannica.com/biography/Klas-Pontus-Arnoldson एन्साइक्लोपीडिया ब्रिटानिका: स्वीडिश शांतिवादी क्लास पोंटस अर्नोल्डसन का इतिहास]</ref> उनका यह अत्यंत महत्वपूर्ण राजनीतिक और सामाजिक कार्य आधुनिक मानवाधिकारों और यूरोपीय शांति संधियों को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है। == प्रारंभिक जीवन और शिक्षा == उनका जन्म 27 अक्टूबर 1844 को स्वीडन के गोथेनबर्ग नामक एक अत्यंत ऐतिहासिक और प्रमुख नगर में हुआ था। उनके पिता एक स्थानीय संगीतकार थे, जिनका निधन तब हो गया था जब अर्नोल्डसन केवल 16 वर्ष के थे। पिता के असामयिक निधन के कारण उनके परिवार को अत्यंत भयंकर आर्थिक कठिनाइयों का सामना करना पड़ा। धन के अभाव के कारण उन्हें अपनी प्रारंभिक स्कूली शिक्षा बीच में ही छोड़नी पड़ी और अपने परिवार का भरण-पोषण करने के लिए रेल विभाग में एक साधारण कर्मचारी के रूप में कार्य करना पड़ा। हालाँकि उन्होंने अपनी औपचारिक स्कूली शिक्षा छोड़ दी थी, परंतु उनके भीतर ज्ञान प्राप्त करने की अत्यंत गहरी लालसा थी। उन्होंने स्वाध्याय के माध्यम से इतिहास, दर्शनशास्त्र और धर्मशास्त्र के अत्यंत जटिल ग्रंथों का गहन अध्ययन किया। वे रेल विभाग में कार्य करते हुए भी अपने खाली समय में स्वतंत्र रूप से विभिन्न समाचार पत्रों के लिए अत्यंत विचारोत्तेजक और प्रगतिशील लेख लिखते रहते थे। इसी वैचारिक अध्ययन और संघर्षपूर्ण जीवन ने उन्हें मानव अधिकारों और शांतिपूर्ण समाज के महत्व को समझने की अत्यंत गहरी प्रेरणा दी। == सम्मान और साहित्य == अंतरराष्ट्रीय कूटनीति, मानवाधिकारों और वैश्विक शांति के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व प्रयासों के लिए उन्हें वर्ष 1908 में नोबेल शांति पुरस्कार से नवाजा गया। वे केवल एक राजनेता नहीं थे, बल्कि एक अत्यंत उत्कृष्ट और प्रभावशाली लेखक भी थे। उन्होंने 'विश्व शांति की आशा' नामक एक अत्यंत प्रसिद्ध पुस्तक भी लिखी थी, जिसने पूरे यूरोप में शांति आंदोलन को एक नया और अत्यंत मजबूत वैचारिक आधार प्रदान किया। उन्होंने अपने नोबेल पुरस्कार की संपूर्ण धनराशि को शांति आंदोलनों और सामाजिक कार्यों के लिए पूरी तरह से दान कर दिया था। 20 फरवरी 1916 को 71 वर्ष की अत्यंत परिपक्व आयु में स्वीडन की राजधानी स्टॉकहोम में उनका शांतिपूर्ण निधन हो गया, परंतु वैश्विक शांति के जगत में उनका अमूल्य योगदान सदा के लिए अमर रहेगा। == इन्हें भी देखें == * [[नोबेल शांति पुरस्कार]] * [[शांतिवाद]] * [[स्वीडन]] * [[नॉर्वे]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} lakxla35owmkzmf460fjl0z2y3ysjug बर्था वॉन सटनर 0 1613125 6587013 6560119 2026-07-18T08:05:53Z अनुज साव22 515212 6587013 wikitext text/x-wiki {{Infobox scientist | name = बर्था वॉन सटनर | image = Bertha von Suttner nobel.jpg | caption = नोबेल शांति पुरस्कार विजेता बर्था वॉन सटनर | birth_date = 9 जून 1843 | birth_place = प्राग, ऑस्ट्रियाई साम्राज्य | death_date = 21 जून 1914 | death_place = वियना, ऑस्ट्रिया-हंगरी | citizenship = ऑस्ट्रियाई | fields = शांतिवाद, साहित्य | known_for = शांति आंदोलन, हथियार डाल दो (उपन्यास) | awards = '''[[नोबेल शांति पुरस्कार]]''' (1905) }} बर्था सोफी फेलिसिटास वॉन सटनर (9 जून 1843 – 21 जून 1914) एक अत्यंत प्रख्यात ऑस्ट्रियाई लेखिका, उपन्यासकार और शांतिवादी समाज सुधारक थीं, जिन्हें वैश्विक शांति और युद्ध के विरोध में उनके ऐतिहासिक आंदोलनों के लिए पूरी दुनिया में जाना जाता है<ref>[https://www.nobelprize.org/prizes/peace/1905/suttner/biographical/ नोबेल पुरस्कार समिति: बर्था वॉन सटनर की जीवनी और तथ्य]</ref>। वर्ष 1905 में उन्हें वैश्विक शांति के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण योगदान के लिए नोबेल शांति पुरस्कार से सम्मानित किया गया था। वह इस महान और सर्वोच्च सम्मान को प्राप्त करने वाली दुनिया की सबसे पहली महिला थीं और वर्ष 1903 में मैरी क्यूरी के बाद नोबेल जीतने वाली दूसरी महिला बनीं<ref>[https://www.britannica.com/biography/Bertha-Freifrau-von-Suttner एन्साइक्लोपीडिया ब्रिटानिका: बर्था वॉन सटनर का प्रामाणिक जीवन परिचय]</ref>। इसके अतिरिक्त वह यह पुरस्कार जीतने वाली पहली ऑस्ट्रियाई नागरिक भी थीं। उनका यह अत्यंत महत्वपूर्ण साहित्य और शांति आंदोलन आधुनिक मानव अधिकारों और अंतरराष्ट्रीय शांति संधियों को स्पष्ट रूप से समझने और स्थापित करने में एक बहुत बड़ा मील का पत्थर माना जाता है। == प्रारंभिक जीवन और शिक्षा == उनका जन्म 9 जून 1843 को ऑस्ट्रियाई साम्राज्य के प्राग नामक एक अत्यंत ऐतिहासिक नगर में एक प्रतिष्ठित कुलीन परिवार में हुआ था। उनके पिता एक ऑस्ट्रियाई सेनापति थे, जिनका निधन उनके जन्म से पूर्व ही 75 वर्ष की आयु में हो गया था और उनकी माता उनसे 45 वर्ष छोटी थीं<ref>[https://www.womeninworldhistory.com/lesson7.html विश्व इतिहास में महिलाएं: उन्नीसवीं सदी की महान सामाजिक कार्यकर्ता]</ref>। एक कुलीन सैन्य परिवार में जन्म लेने के बावजूद उनका बचपन अत्यंत आर्थिक कठिनाइयों के दौर में बीता था। बचपन से ही उनकी साहित्य, विदेशी भाषाओं और संगीत को समझने में अत्यधिक रुचि थी। उन्होंने घर पर ही अत्यंत उत्कृष्ट शिक्षा प्राप्त की और कई विदेशी भाषाओं (जैसे फ्रांसीसी, इतालवी और अंग्रेजी) में पूरी तरह से महारत हासिल कर ली थी। किशोरावस्था में उन्होंने एक ओपेरा गायिका बनने का भी गहन प्रयास किया था, परंतु मंच के अत्यधिक डर के कारण उन्हें इसमें सफलता प्राप्त नहीं हुई<ref>[https://www.history.com/topics/womens-history/womens-history-month हिस्ट्री चैनल: इतिहास की महान महिलाएं और उनके योगदान]</ref>। == पुरस्कार और सम्मान == साहित्य और वैश्विक शांति के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व अनुसंधान के लिए उन्हें वर्ष 1905 में नोबेल शांति पुरस्कार से नवाजा गया। वे केवल एक लेखिका नहीं थीं, बल्कि उन्होंने ऑस्ट्रियाई शांति समाज की भी स्थापना की थी और वे अंतरराष्ट्रीय शांति सम्मेलनों की एक अत्यंत प्रमुख वक्ता थीं। वर्ष 1907 में हेग शांति सम्मेलन में भाग लेने वाली वे एकमात्र महिला थीं। 21 जून 1914 को 71 वर्ष की अत्यंत परिपक्व आयु में ऑस्ट्रिया की राजधानी वियना नगर में कैंसर के कारण उनका शांतिपूर्ण निधन हो गया। उनके निधन के ठीक सात दिन बाद ही प्रथम विश्व युद्ध प्रारंभ हो गया था, जिसकी विनाशकारी चेतावनी वे अपने पूरे जीवन काल में देती रही थीं। उनके सम्मान में आज भी यूरोप की कई सड़कों और सिक्कों पर उनका नाम और चित्र अंकित है। == इन्हें भी देखें == * [[नोबेल शांति पुरस्कार]] * [[अल्फ्रेड नोबेल]] * [[शांतिवाद]] * [[ऑस्ट्रियाई साम्राज्य]] * [[मानवाधिकार]] * [[साहित्य में नोबेल पुरस्कार]] * [[महिला सशक्तिकरण]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} akc6qdhzr5y0i5setottg4ra86b40ax फ्रेड्रिक बेजर 0 1613127 6587014 6560124 2026-07-18T08:06:37Z अनुज साव22 515212 6587014 wikitext text/x-wiki {{Infobox scientist | name = फ्रेडरिक बाजेर | image = Frederik Bajer by E. Møller.jpg | birth_date = 21 अप्रैल 1837 | birth_place = नेस्टवेड, डेनमार्क | death_date = 22 जनवरी 1922 | death_place = कोपेनहेगन, डेनमार्क | citizenship = डैनिश | fields = शांतिवाद, राजनीति, शिक्षा | known_for = अंतर्राष्ट्रीय शांति ब्यूरो, डैनिश शांति समाज | awards = '''[[नोबेल शांति पुरस्कार]]''' (1908) }} फ्रेडरिक बाजेर (21 अप्रैल 1837 – 22 जनवरी 1922) एक अत्यंत प्रख्यात और विश्वविख्यात डैनिश लेखक, शिक्षक, राजनीतिज्ञ और शांतिवादी नेता थे, जिन्हें पूरे यूरोप में शांति आंदोलनों को संगठित करने और अंतरराष्ट्रीय मध्यस्थता को बढ़ावा देने के लिए पूरी दुनिया में जाना जाता है।<ref>[https://www.nobelprize.org/prizes/peace/1908/bajer/facts/ नोबेल पुरस्कार समिति: फ्रेडरिक बाजेर के प्रामाणिक तथ्य]</ref> वर्ष 1908 में उन्हें वैश्विक शांति के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण योगदान के लिए स्वीडन के क्लास पोंटस अर्नोल्डसन के साथ संयुक्त रूप से नोबेल शांति पुरस्कार से सम्मानित किया गया था।<ref>[https://www.nytimes.com/1908/12/11/archives/the-nobel-peace-prize.html द न्यूयॉर्क टाइम्स: 1908 का नोबेल शांति पुरस्कार समाचार]</ref> यह महान सम्मान उन्हें 'अंतर्राष्ट्रीय शांति ब्यूरो' की स्थापना करने और विभिन्न देशों के बीच उत्पन्न होने वाले राजनीतिक विवादों को युद्ध के बजाय शांतिपूर्ण कानूनी तरीकों व कूटनीति से सुलझाने की ऐतिहासिक वकालत करने के लिए प्रदान किया गया था।<ref>[https://www.britannica.com/biography/Fredrik-Bajer एन्साइक्लोपीडिया ब्रिटानिका: फ्रेडरिक बाजेर का विस्तृत जीवन परिचय]</ref> उनका यह अत्यंत महत्वपूर्ण राजनीतिक और सामाजिक कार्य आधुनिक अंतरराष्ट्रीय संबंधों, मध्यस्थता प्रणालियों और यूरोपीय शांति संधियों को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है।<ref>[https://www.nobelprize.org/prizes/peace/1908/bajer/biographical/ नोबेल फाउंडेशन: फ्रेडरिक बाजेर की आधिकारिक जीवनी]</ref> == प्रारंभिक जीवन और शिक्षा == उनका जन्म 21 अप्रैल 1837 को डेनमार्क के नेस्टवेड नामक एक अत्यंत प्रमुख और ऐतिहासिक नगर में एक पादरी के परिवार में हुआ था। उनके प्रारंभिक जीवन का परिवेश काफी हद तक धार्मिक, नैतिक और अनुशासित था, जिसने उनके चरित्र को मजबूत बनाने में एक अत्यंत महत्वपूर्ण भूमिका निभाई।<ref>[https://www.gutenberg.org/ प्रोजेक्ट गुटेनबर्ग: ऐतिहासिक शांति साहित्य और पुस्तकें]</ref> उन्होंने शुरुआत में एक सैन्य अधिकारी बनने की उच्च शिक्षा प्राप्त की और वर्ष 1856 में डैनिश सेना में एक युवा अधिकारी के रूप में भर्ती हुए। उन्होंने वर्ष 1864 में डेनमार्क और प्रुशिया के बीच छिड़े अत्यंत भयंकर युद्ध में भी एक सैन्य अधिकारी के रूप में सक्रिय रूप से भाग लिया था। इस भयंकर युद्ध की विनाशलीला, व्यापक रक्तपात और निर्दोष नागरिकों की असीम पीड़ा को अत्यंत निकट से देखने के बाद उनका हृदय पूरी तरह से परिवर्तित हो गया। इस युद्ध की विभीषिका ने उनके बाल मन और आंतरिक चेतना पर इतना गहरा प्रभाव डाला कि उन्हें यह दृढ़ विश्वास हो गया कि युद्ध कभी भी किसी अंतरराष्ट्रीय समस्या का स्थायी समाधान नहीं हो सकता है। इसके पश्चात उन्होंने सेना छोड़ने का एक अत्यंत साहसिक और ऐतिहासिक निर्णय लिया। उन्होंने वर्ष 1865 में सेना से पूरी तरह से त्यागपत्र दे दिया और अपना पूरा जीवन वैश्विक शांति के प्रसार, सामाजिक सुधारों और अंतरराष्ट्रीय भाईचारे के लिए समर्पित कर दिया। == पुरस्कार और सम्मान == अंतरराष्ट्रीय कूटनीति, कूटनीतिक मध्यस्थता और वैश्विक शांति के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व प्रयासों के लिए उन्हें वर्ष 1908 में नोबेल शांति पुरस्कार से नवाजा गया।<ref>[https://www.un.org/en/ संयुक्त राष्ट्र संघ: शांति और सुरक्षा का वैश्विक मंच]</ref> इस महान पुरस्कार ने अंतरराष्ट्रीय स्तर पर उनके द्वारा किए गए कार्यों को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। वे केवल एक राजनेता और संगठनकर्ता नहीं थे, बल्कि एक अत्यंत उत्कृष्ट और प्रभावशाली लेखक भी थे। उन्होंने अंतरराष्ट्रीय मध्यस्थता के इतिहास, तटस्थता और स्कैंडिनेवियाई देशों की राजनीति पर कई महत्वपूर्ण पुस्तकें और शोध पत्र लिखे, जिन्होंने पूरे यूरोप में शांति आंदोलन को एक नया और अत्यंत मजबूत वैचारिक आधार प्रदान किया। उन्होंने अपने नोबेल पुरस्कार की संपूर्ण धनराशि को भी अंतर्राष्ट्रीय शांति ब्यूरो और अन्य शांतिवादी गतिविधियों के लिए पूरी तरह से दान कर दिया था। 22 जनवरी 1922 को 84 वर्ष की अत्यंत परिपक्व आयु में डेनमार्क की राजधानी कोपेनहेगन में उनका शांतिपूर्ण निधन हो गया, परंतु वैश्विक शांति के जगत में उनका अमूल्य योगदान सदा के लिए अमर रहेगा। == इन्हें भी देखें == * [[नोबेल शांति पुरस्कार]] * [[क्लास पोंटस अर्नोल्डसन]] * [[डेनमार्क]] == सन्दर्भ == {{टिप्पणीसूची|2}} {{Authority control}} 716zbrdoo96if2pegv7ol935c1hslen अगस्टे बर्नार्ट 0 1613130 6587015 6560131 2026-07-18T08:07:37Z अनुज साव22 515212 6587015 wikitext text/x-wiki {{Infobox scientist | name = अगस्टे बर्नार्ट | image = Auguste Beernaert.jpg | caption = नोबेल शांति पुरस्कार विजेता अगस्टे बर्नार्ट | birth_date = 26 जुलाई 1829 | birth_place = ओस्टेंड, बेल्जियम | death_date = 6 अक्टूबर 1912 | death_place = ल्यूसर्न, स्विट्जरलैंड | citizenship = बेल्जियन | fields = राजनीति, कानून, शांतिवाद | known_for = बेल्जियम के प्रधानमंत्री, हेग शांति सम्मेलन | awards = '''[[नोबेल शांति पुरस्कार]]''' (1909) }} अगस्टे मैरी फ्रेंकोइस बर्नार्ट (26 जुलाई 1829 – 6 अक्टूबर 1912) एक अत्यंत प्रख्यात और विश्वविख्यात बेल्जियन राजनेता, विधिवेत्ता और शांतिवादी नेता थे, जिन्हें अंतरराष्ट्रीय कानून को सुदृढ़ करने और वैश्विक विवादों को कूटनीति के माध्यम से सुलझाने के लिए पूरी दुनिया में जाना जाता है। वर्ष 1909 में उन्हें वैश्विक शांति के क्षेत्र में उनके अभूतपूर्व और अत्यंत महत्वपूर्ण योगदान के लिए फ्रांस के पॉल हेन्री डी एस्टोर्नेल्स डी कॉन्स्टेंट के साथ संयुक्त रूप से नोबेल शांति पुरस्कार से सम्मानित किया गया था। यह महान सम्मान उन्हें 'अंतर-संसदीय संघ' में उनके ऐतिहासिक कार्यों और हेग शांति सम्मेलनों में अंतरराष्ट्रीय मध्यस्थता न्यायालय की स्थापना में उनकी अत्यंत महत्वपूर्ण भूमिका के लिए प्रदान किया गया था। उनका यह राजनीतिक और कूटनीतिक कार्य आधुनिक अंतरराष्ट्रीय कानूनों और यूरोपीय शांति संधियों को स्पष्ट रूप से समझने में एक बहुत बड़ा मील का पत्थर माना जाता है। == प्रारंभिक जीवन और शिक्षा == उनका जन्म 26 जुलाई 1829 को बेल्जियम के ओस्टेंड नामक एक अत्यंत प्रमुख और ऐतिहासिक तटीय नगर में हुआ था। उनके पिता एक बहुत ही सम्मानित और उच्च पदस्थ सरकारी अधिकारी थे, जिसके कारण बचपन से ही उनके घर में उच्च शिक्षा, तार्किक विश्लेषण और सार्वजनिक सेवा का एक अत्यंत उत्कृष्ट वातावरण विद्यमान रहता था। बचपन से ही उनकी कुशाग्र बुद्धि के कारण उन्हें कानून, समाजशास्त्र और प्रशासनिक व्यवस्था के अत्यंत जटिल प्रश्नों को सुलझाने में अत्यधिक आनंद आता था। अपनी प्रारंभिक और माध्यमिक शिक्षा उत्कृष्ट रूप से पूर्ण करने के पश्चात, उन्होंने उच्च शिक्षा प्राप्त करने के लिए बेल्जियम के अत्यंत प्रतिष्ठित ल्यूवेन कैथोलिक विश्वविद्यालय में प्रवेश लिया। इसी महान संस्थान से उन्होंने वर्ष 1851 में कानून विषय में अपनी सर्वोच्च उपाधि अत्यंत उत्कृष्ट अंकों के साथ सफलतापूर्वक प्राप्त की। इसके पश्चात उन्होंने बर्लिन, पेरिस और हीडलबर्ग के महान विश्वविद्यालयों में भी अंतरराष्ट्रीय कानून का गहन अध्ययन किया। == पुरस्कार और सम्मान == अंतरराष्ट्रीय कानून, कूटनीतिक मध्यस्थता और वैश्विक शांति के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व प्रयासों के लिए उन्हें वर्ष 1909 में नोबेल शांति पुरस्कार से नवाजा गया। इस महान पुरस्कार ने अंतरराष्ट्रीय स्तर पर उनके द्वारा किए गए न्यायपूर्ण कार्यों को एक नई और अत्यधिक प्रतिष्ठित मान्यता प्रदान की। उन्होंने शांति के आदर्शों को केवल विचारों तक सीमित नहीं रखा, बल्कि उन्हें एक ठोस कानूनी और संस्थागत रूप प्रदान किया, जिसका लाभ आज पूरी दुनिया उठा रही है। 6 अक्टूबर 1912 को 83 वर्ष की अत्यंत परिपक्व आयु में स्विट्जरलैंड के ल्यूसर्न नगर में उनका शांतिपूर्ण निधन हो गया। आज भी आधुनिक अंतरराष्ट्रीय कानून और मध्यस्थता प्रणालियां उन्हीं के द्वारा रखे गए अत्यंत मजबूत आधार पर खड़ी हैं और उनके महान योगदान की गवाही देती हैं। == इन्हें भी देखें == * [[नोबेल शांति पुरस्कार]] * [[बेल्जियम]] * [[अंतरराष्ट्रीय कानून]] == सन्दर्भ == <ref>[https://www.nobelprize.org/prizes/peace/1909/beernaert/facts/ नोबेल पुरस्कार समिति: अगस्टे बर्नार्ट के प्रामाणिक तथ्य एवं जानकारी]</ref> <ref>[https://www.odis.be/hercules/_en_home.php/biography/Auguste-Beernaert ]</ref> {{Authority control}} nlwvotrycnjbtekddop4j5xyz443udo पॉल एस्टोरनेल्स डी कॉन्स्टेंट 0 1613132 6587016 6560133 2026-07-18T08:08:51Z अनुज साव22 515212 6587016 wikitext text/x-wiki {{Infobox scientist | name = पॉल एस्टोरनेल्स डी कॉन्स्टेंट | image = Paul Balluet nobel.jpg | caption = नोबेल शांति पुरस्कार विजेता पॉल एस्टोरनेल्स डी कॉन्स्टेंट | birth_date = 22 नवंबर 1852 | birth_place = ला फ्लेचे, फ्रांस | death_date = 15 मई 1924 | death_place = पेरिस, फ्रांस | citizenship = फ्रांसीसी | fields = कूटनीति, राजनीति, शांतिवाद | known_for = अंतरराष्ट्रीय मध्यस्थता, हेग शांति सम्मेलन | awards = '''[[नोबेल शांति पुरस्कार]]''' (1909) }} पॉल हेनरी बेंजामिन बलुएट डी एस्टोरनेल्स डी कॉन्स्टेंट (22 नवंबर 1852 – 15 मई 1924) एक अत्यंत प्रख्यात फ्रांसीसी राजनयिक, राजनीतिज्ञ, अंतरराष्ट्रीय मध्यस्थता के प्रबल समर्थक और वर्ष 1909 के नोबेल शांति पुरस्कार विजेता थे। वे शांति संधियों और विवादों के कूटनीतिक समाधान के सबसे बड़े पैरोकारों में से एक माने जाते थे। == प्रारंभिक जीवन और शिक्षा == उनका जन्म 22 नवंबर 1852 को फ्रांस के ला फ्लेचे (सार्थे) में लॉयर घाटी में ऐतिहासिक कॉन्स्टेंट डी रेबेक परिवार में हुआ था। फ्रांसीसी क्रांति युग के प्रसिद्ध लेखक और महान राजनीतिज्ञ बेंजामिन कॉन्स्टेंट उनके रिश्तेदार थे।<ref>[https://www.nobelprize.org/prizes/peace/1909/balluet/biographical/ नोबेल पुरस्कार समिति: पॉल एस्टोरनेल्स डी कॉन्स्टेंट का आधिकारिक जीवन परिचय]</ref> पेरिस के एक अत्यंत प्रतिष्ठित संस्थान (लाइसियम लुइस-ले-ग्रैंड) में कानून और प्राच्य भाषाओं का गहन अध्ययन करने के पश्चात, एस्टोरनेल्स डी कॉन्स्टेंट ने वर्ष 1876 में कूटनीति के क्षेत्र में अपना शानदार करियर आरंभ किया। उनके प्रारंभिक राजनयिक पदों में मोंटेनेग्रो, तुर्क साम्राज्य, नीदरलैंड, ग्रेट ब्रिटेन और ट्यूनीशिया शामिल थे। वर्ष 1882 में वे विदेश मंत्रालय के लेवांत ब्यूरो के सहायक निदेशक के रूप में कार्य करने के लिए पेरिस लौट आए। वर्ष 1890 में उन्हें लंदन में फ्रांसीसी दूत के रूप में तैनात किया गया, जहाँ उन्होंने औपनिवेशिक विवादों को लेकर ब्रिटेन के साथ युद्ध टालने में एक अत्यंत महत्वपूर्ण भूमिका निभाई। == पुरस्कार और सम्मान == अंतरराष्ट्रीय कानून, कूटनीतिक मध्यस्थता और वैश्विक शांति के क्षेत्र में उनके इस ऐतिहासिक और अभूतपूर्व प्रयासों के लिए 10 दिसंबर 1909 को उन्हें बेल्जियम के अगस्टे बर्नार्ट के साथ संयुक्त रूप से नोबेल शांति पुरस्कार प्राप्त हुआ। यह महान सम्मान अंतरराष्ट्रीय कानून के निर्माण और हेग सम्मेलनों के सफल आयोजन में उनके अथक प्रयासों के लिए था। फ्रेडरिक पासी और लुइस रेनॉल्ट के बाद यह प्रतिष्ठित सम्मान पाने वाले वे तीसरे फ्रांसीसी नागरिक बने। उनकी महान स्मृति में उनके गृह नगर ला फ्लेचे में दो शैक्षणिक संस्थानों के नाम उनके नाम पर रखे गए हैं और ले मान्स नगर में उनका एक सुंदर स्मारक भी स्थापित किया गया है। == इन्हें भी देखें == * [[नोबेल शांति पुरस्कार]] * [[अगस्टे बर्नार्ट]] == सन्दर्भ == {{Authority control}} pf8rmkrx7c0grttguhvby2c4a0djq89 मार्ल 0 1613936 6587017 6567141 2026-07-18T08:09:39Z अनुज साव22 515212 6587017 wikitext text/x-wiki {{Infobox rock |name=मार्ल |type=अवसादी शैल |coordinates= |image= Piece of marl.JPG|alt=|thumb|Marl |alt= मार्ल शैल का एक दृश्य |caption= मार्ल शैल का एक नमूना |composition= [[कैल्शियम कार्बोनेट]] (CaCO<sub>3</sub>), मृत्तिका (क्ले) और गाद (सिल्ट) }} '''मार्ल''' या मार्लस्टोन एक कार्बोनेट-समृद्ध अवसादी मिट्टी या मडस्टोन है, जिसमें मृत्तिका और गाद की अलग-अलग मात्राएँ घुली होती हैं।<ref>{{Cite book |last=Pettijohn |first=F. J. |year=1957 |title=Sedimentary Rocks |edition=2nd |publisher=Harper & Brothers |location=New York |pages=368–369 |oclc=551748}}</ref> जब यह कठोर होकर शैल का रूप ले लेता है, तो इसे 'मार्लस्टोन' कहा जाता है। ऐतिहासिक रूप से, इस शब्द का प्रयोग विभिन्न प्रकार के पदार्थों के लिए किया जाता था, जो मुख्य रूप से मृत्तिका और कैल्शियम कार्बोनेट के मिश्रण से बनी भुरभुरी व मिट्टी जैसी संरचनाएँ थीं और मीठे पानी के वातावरण में निर्मित हुई थीं। इनमें आमतौर पर 35–65% मृत्तिका और 65–35% कार्बोनेट होता है।<ref>{{Cite book |last=Blatt |first=Harvey |last2=Tracy |first2=Robert J. |year=1996 |title=Petrology : igneous, sedimentary, and metamorphic |url=https://archive.org/details/petrologyigneous0000blat_2edi |edition=2nd |publisher=W.H. Freeman |location=New York |isbn=0716724383 |page=[https://archive.org/details/petrologyigneous0000blat_2edi/page/217 217]}}</ref> मार्लस्टोन लगभग मार्ल के समान संरचना वाला ही एक कठोर शैल है, जिसे अधिक सटीक रूप से 'अशुद्ध मृत्तिकामय चूना पत्थर' कहा जा सकता है। अधिकांश मार्ल में मौजूद प्रमुख कार्बोनेट खनिज [[कैल्साइट]] होता है, लेकिन इसमें एरागोनाइट या डोलोमाइट जैसे अन्य कार्बोनेट खनिज भी मौजूद हो सकते हैं। एक विशेष प्रकार का मार्ल 'ग्लौकोनिटिक मार्ल' कहलाता है, जिसमें ग्लौकोनाइट नामक खनिज के कण होते हैं, जो इसे हरा रंग प्रदान करते हैं।<ref>{{Cite journal |last=Nourmohamadi |first=Mohammad Sadi |display-authors=et al. |date=30 November 2020 |title=Green Glauconitic Marl Bed As A Sequence Stratigraphical Key For Interpretation Of Contact Between Qamchuqa And Bekhme Formations |journal=Bulletin of the Geological Society of Malaysia |volume=70 |issue=1 |pages=29–38 |doi=10.7186/bg70202003}}</ref> == उपयोग और आर्थिक महत्व == === कृषि === कृषि में मार्ल का उपयोग ऐतिहासिक रूप से सबसे पुराने 'मृदा सुधारक' के रूप में होता आया है। उपलब्ध कैल्शियम को बढ़ाने के साथ-साथ, मार्ल मिट्टी की संरचना में सुधार करने और मिट्टी की अम्लीयता को कम करने में अत्यधिक मूल्यवान है। 16वीं शताब्दी से ब्रिटेन में कृषि क्रांति के दौरान इसका बड़े पैमाने पर उपयोग हुआ। आज भी इसका उपयोग अम्लीय मिट्टी के लिए एक न्यूट्रलाइजिंग एजेंट के रूप में किया जाता है। === पोर्टलैंड सीमेंट === मार्ल प्रचुर मात्रा में उपलब्ध होता है और इसका उपयोग [[पोर्टलैंड सीमेंट]] के निर्माण में व्यापक रूप से किया जाता है। एक पूरक सीमेंटिंग सामग्री के रूप में यह बेहतर भौतिक और यांत्रिक गुण प्रदान करता है और इसे कम तापमान पर कैल्साइन किया जा सकता है।<ref>{{Cite journal |last=Rakhimov |first=Ravil Z. |last2=Rakhimova |first2=Nailia R. |last3=Gaifullin |first3=Albert R. |last4=Morozov |first4=Vladimir P. |date=May 2017 |title=Properties of Portland cement pastes enriched with addition of calcined marl |journal=Journal of Building Engineering |volume=11 |pages=30–36 |doi=10.1016/j.jobe.2017.03.007}}</ref> === सिविल इंजीनियरिंग और परमाणु अपशिष्ट भंडारण === इंग्लैंड और फ्रांस के बीच की चैनल टनल का निर्माण वेस्ट मेलबरी मार्ली चॉक संरचना में किया गया था, क्योंकि इसकी पारगम्यता बहुत कम होती है और इसमें दरारों का अभाव होता है। इसके अतिरिक्त, कुछ मार्ल परतों की अत्यंत कम पारगम्यता के कारण, उन्हें परमाणु अपशिष्ट (nuclear waste) के सुरक्षित भंडारण के लिए एक आदर्श विकल्प माना जा रहा है। मध्य स्विट्जरलैंड का वेलनबर्ग ऐसा ही एक प्रस्तावित स्थल है।<ref>{{Cite book |last=Pearson |first=F.J. |last2=Scholtis |first2=A. |year=2021 |title=Water-rock interaction : proceedings of the 8th International Symposium, WRI-8 |chapter=Controls on the chemistry of pore water in a marl of very low permeability |publisher=Taylor & Francis |location=London |isbn=9780203734049 |doi=10.1201/9780203734049-8}}</ref> == मार्ल झीलें == मार्ल झील एक ऐसी झील होती है जिसके निचले तलछट में मार्ल के बड़े भंडार होते हैं। ये प्रायः उन क्षेत्रों में पाई जाती हैं जहाँ हाल ही में हिमनदीकरण हुआ हो।<ref>{{Cite journal |last=Pentecost |first=Allan |date=December 2009 |title=The Marl Lakes of the British Isles |journal=Freshwater Reviews |volume=2 |issue=2 |pages=167–197 |doi=10.1608/FRJ-2.2.4}}</ref> इनका पानी क्षारीय होता है जो घुले हुए कैल्शियम कार्बोनेट से समृद्ध होता है। पारिस्थितिक रूप से ये बहुत महत्वपूर्ण मानी जाती हैं, लेकिन बढ़ते प्रदूषण, गाद और जल निकासी के कारण इन्हें खतरा भी है। {{Clear}} == सन्दर्भ == {{Reflist|30em}} == इन्हें भी देखें == * [[अवसादी शैल]] * [[चूना पत्थर]] * [[कैल्शियम कार्बोनेट]] == बाहरी कड़ियाँ == * [https://www.minerals.net/ अवसादी चट्टानों का अवलोकन] * [https://geology.com/rocks/ चट्टानों के प्रकार और निर्माण संबंधी जानकारी उपलब्ध है] {{Authority control}} [[श्रेणी:अवसादी शैलें]] [[श्रेणी:मृदा]] [[श्रेणी:कृषि विज्ञान]] [[श्रेणी:निर्माण सामग्री]] k0cw511qodo92s1ljqs3prt2vkpoa5j 6587018 6587017 2026-07-18T08:10:01Z A09 633044 [[Special:Contributions/अनुज साव22|अनुज साव22]] ([[User talk:अनुज साव22|talk]]) के संपादनों को हटाकर InternetArchiveBot (6587017) के आखिरी अवतरण को पूर्ववत किया: सामग्री बिना सूचना हटाई। 6567141 wikitext text/x-wiki {{Infobox rock |name=मार्ल |type=अवसादी शैल |coordinates= |image= Piece of marl.JPG|alt=|thumb|Marl |alt= मार्ल शैल का एक दृश्य |caption= मार्ल शैल का एक नमूना |composition= [[कैल्शियम कार्बोनेट]] (CaCO<sub>3</sub>), मृत्तिका (क्ले) और गाद (सिल्ट) }} '''मार्ल''' या मार्लस्टोन एक कार्बोनेट-समृद्ध अवसादी मिट्टी या मडस्टोन है, जिसमें मृत्तिका और गाद की अलग-अलग मात्राएँ घुली होती हैं।<ref>{{Cite book |last=Pettijohn |first=F. J. |year=1957 |title=Sedimentary Rocks |edition=2nd |publisher=Harper & Brothers |location=New York |pages=368–369 |oclc=551748}}</ref> जब यह कठोर होकर शैल का रूप ले लेता है, तो इसे 'मार्लस्टोन' कहा जाता है। ऐतिहासिक रूप से, इस शब्द का प्रयोग विभिन्न प्रकार के पदार्थों के लिए किया जाता था, जो मुख्य रूप से मृत्तिका और कैल्शियम कार्बोनेट के मिश्रण से बनी भुरभुरी व मिट्टी जैसी संरचनाएँ थीं और मीठे पानी के वातावरण में निर्मित हुई थीं। इनमें आमतौर पर 35–65% मृत्तिका और 65–35% कार्बोनेट होता है।<ref>{{Cite book |last=Blatt |first=Harvey |last2=Tracy |first2=Robert J. |year=1996 |title=Petrology : igneous, sedimentary, and metamorphic |url=https://archive.org/details/petrologyigneous0000blat_2edi |edition=2nd |publisher=W.H. Freeman |location=New York |isbn=0716724383 |page=[https://archive.org/details/petrologyigneous0000blat_2edi/page/217 217]}}</ref> मार्लस्टोन लगभग मार्ल के समान संरचना वाला ही एक कठोर शैल है, जिसे अधिक सटीक रूप से 'अशुद्ध मृत्तिकामय चूना पत्थर' कहा जा सकता है। अधिकांश मार्ल में मौजूद प्रमुख कार्बोनेट खनिज [[कैल्साइट]] होता है, लेकिन इसमें एरागोनाइट या डोलोमाइट जैसे अन्य कार्बोनेट खनिज भी मौजूद हो सकते हैं। एक विशेष प्रकार का मार्ल 'ग्लौकोनिटिक मार्ल' कहलाता है, जिसमें ग्लौकोनाइट नामक खनिज के कण होते हैं, जो इसे हरा रंग प्रदान करते हैं।<ref>{{Cite journal |last=Nourmohamadi |first=Mohammad Sadi |display-authors=et al. |date=30 November 2020 |title=Green Glauconitic Marl Bed As A Sequence Stratigraphical Key For Interpretation Of Contact Between Qamchuqa And Bekhme Formations |journal=Bulletin of the Geological Society of Malaysia |volume=70 |issue=1 |pages=29–38 |doi=10.7186/bg70202003}}</ref> == प्राप्ति और विस्तार == डोवर की सफेद चट्टानों की निचली स्तर-संरचना ग्लौकोनिटिक मार्ल और चूना पत्थर की परतों से बनी है।<ref>{{Cite journal |last=Bristow |first=Roger |last2=Mortimore |first2=Rory |last3=Wood |first3=Christopher |date=January 1997 |title=Lithostratigraphy for mapping the Chalk of southern England |journal=Proceedings of the Geologists' Association |volume=108 |issue=4 |pages=293–315 |doi=10.1016/S0016-7878(97)80014-4}}</ref> फ्रांस और यूनाइटेड किंगडम के बीच बनी 'चैनल टनल' (Channel Tunnel) इन्ही मार्ल परतों से होकर गुजरती है।<ref>{{Cite book |editor-last=Harris |editor-first=C.S. |year=1996 |title=Engineering Geology of the Channel Tunnel |url=https://archive.org/details/engineeringgeolo0000unse_c5q1 |publisher=Thomas Telford |location=London |isbn=0-7277-2045-7 |page=[https://archive.org/details/engineeringgeolo0000unse_c5q1/page/57 57]}}</ref> हिमनद-पश्चात झीलों के तलछट में भी मार्ल आम रूप से पाया जाता है। विशेष रूप से, 'कारा' नामक मैक्रो-शैवाल उच्च पीएच और क्षारीयता वाली उथली झीलों में पनपता है। जब यह शैवाल मर जाता है, तो इसके कैल्सीफाइड हिस्से टूटकर सूक्ष्म कार्बोनेट कणों में बदल जाते हैं, जो गाद और मिट्टी के साथ मिलकर मार्ल का निर्माण करते हैं। अर्जेंटीना के 'वाका मुएर्टा' संरचना में भी मार्ल एक प्रमुख शैल प्रकार है। == उपयोग और आर्थिक महत्व == === कृषि === कृषि में मार्ल का उपयोग ऐतिहासिक रूप से सबसे पुराने 'मृदा सुधारक' के रूप में होता आया है। उपलब्ध कैल्शियम को बढ़ाने के साथ-साथ, मार्ल मिट्टी की संरचना में सुधार करने और मिट्टी की अम्लीयता को कम करने में अत्यधिक मूल्यवान है। 16वीं शताब्दी से ब्रिटेन में कृषि क्रांति के दौरान इसका बड़े पैमाने पर उपयोग हुआ। आज भी इसका उपयोग अम्लीय मिट्टी के लिए एक न्यूट्रलाइजिंग एजेंट के रूप में किया जाता है। === पोर्टलैंड सीमेंट === मार्ल प्रचुर मात्रा में उपलब्ध होता है और इसका उपयोग [[पोर्टलैंड सीमेंट]] के निर्माण में व्यापक रूप से किया जाता है। एक पूरक सीमेंटिंग सामग्री के रूप में यह बेहतर भौतिक और यांत्रिक गुण प्रदान करता है और इसे कम तापमान पर कैल्साइन किया जा सकता है।<ref>{{Cite journal |last=Rakhimov |first=Ravil Z. |last2=Rakhimova |first2=Nailia R. |last3=Gaifullin |first3=Albert R. |last4=Morozov |first4=Vladimir P. |date=May 2017 |title=Properties of Portland cement pastes enriched with addition of calcined marl |journal=Journal of Building Engineering |volume=11 |pages=30–36 |doi=10.1016/j.jobe.2017.03.007}}</ref> === सिविल इंजीनियरिंग और परमाणु अपशिष्ट भंडारण === इंग्लैंड और फ्रांस के बीच की चैनल टनल का निर्माण वेस्ट मेलबरी मार्ली चॉक संरचना में किया गया था, क्योंकि इसकी पारगम्यता बहुत कम होती है और इसमें दरारों का अभाव होता है। इसके अतिरिक्त, कुछ मार्ल परतों की अत्यंत कम पारगम्यता के कारण, उन्हें परमाणु अपशिष्ट (nuclear waste) के सुरक्षित भंडारण के लिए एक आदर्श विकल्प माना जा रहा है। मध्य स्विट्जरलैंड का वेलनबर्ग ऐसा ही एक प्रस्तावित स्थल है।<ref>{{Cite book |last=Pearson |first=F.J. |last2=Scholtis |first2=A. |year=2021 |title=Water-rock interaction : proceedings of the 8th International Symposium, WRI-8 |chapter=Controls on the chemistry of pore water in a marl of very low permeability |publisher=Taylor & Francis |location=London |isbn=9780203734049 |doi=10.1201/9780203734049-8}}</ref> == मार्ल झीलें == मार्ल झील एक ऐसी झील होती है जिसके निचले तलछट में मार्ल के बड़े भंडार होते हैं। ये प्रायः उन क्षेत्रों में पाई जाती हैं जहाँ हाल ही में हिमनदीकरण हुआ हो।<ref>{{Cite journal |last=Pentecost |first=Allan |date=December 2009 |title=The Marl Lakes of the British Isles |journal=Freshwater Reviews |volume=2 |issue=2 |pages=167–197 |doi=10.1608/FRJ-2.2.4}}</ref> इनका पानी क्षारीय होता है जो घुले हुए कैल्शियम कार्बोनेट से समृद्ध होता है। पारिस्थितिक रूप से ये बहुत महत्वपूर्ण मानी जाती हैं, लेकिन बढ़ते प्रदूषण, गाद और जल निकासी के कारण इन्हें खतरा भी है। {{Clear}} == सन्दर्भ == {{Reflist|30em}} == इन्हें भी देखें == * [[अवसादी शैल]] * [[चूना पत्थर]] * [[कैल्शियम कार्बोनेट]] == बाहरी कड़ियाँ == * [https://www.minerals.net/ अवसादी चट्टानों का अवलोकन] * [https://geology.com/rocks/ चट्टानों के प्रकार और निर्माण संबंधी जानकारी उपलब्ध है] {{Authority control}} [[श्रेणी:अवसादी शैलें]] [[श्रेणी:मृदा]] [[श्रेणी:कृषि विज्ञान]] [[श्रेणी:निर्माण सामग्री]] guyacrcr29i6yogx0vgea49qrqtmz4x ज्वालामुखी राख 0 1613938 6587019 6577585 2026-07-18T08:10:17Z अनुज साव22 515212 6587019 wikitext text/x-wiki {{Infobox scientist | name = टेफ्रा (ज्वालामुखी सामग्री) | image = Volcanic eruption.jpg | caption = ज्वालामुखी विस्फोट के दौरान उत्पन्न प्राकृतिक सामग्री }} [[चित्र:Plume from eruption of Chaiten volcano, Chile.jpg|thumb|चैटेन ज्वालामुखी (चिली) के 2008 के विस्फोट से उठा राख का गुबार, जो पैटागोनिया में प्रशांत महासागर से अटलांटिक महासागर तक फैला हुआ है।]] [[चित्र:Eyjafjallajokull-April-17.JPG|thumb|17 अप्रैल 2010 को एइजाफजल्लाजोकुल (Eyjafjallajökull) ज्वालामुखी से उठती राख का दृश्य।]] [[चित्र:MtCleveland ISS013-E-24184.jpg|thumb|माउंट क्लीवलैंड (अलेउतियन द्वीप समूह) से उठता हुआ गहरा राख का गुबार।]] '''ज्वालामुखी राख''' चट्टानों के छोटे टुकड़ों, खनिज क्रिस्टलों और ज्वालामुखी काँच का एक बारीक मिश्रण है, जो [[ज्वालामुखी|ज्वालामुखी विस्फोटों]] के दौरान उत्पन्न होता है। इसके कणों का व्यास 2 मिलीमीटर (0.079 इंच) से कम होता है।<ref>{{cite journal |last=Rose |first=W.I. |author2=Durant, A.J. |title=Fine ash content of explosive eruptions |journal=Journal of Volcanology and Geothermal Research |year=2009 |volume=186 |issue=1–2 |pages=32–39 |doi=10.1016/j.jvolgeores.2009.01.010}}</ref> अक्सर "ज्वालामुखी राख" शब्द का प्रयोग अनौपचारिक रूप से सभी प्रकार के विस्फोटक उत्पादों (जिन्हें भूविज्ञान में 'टेफ्रा' या ''टेफ्रा'' कहा जाता है) के लिए भी किया जाता है, जिनमें 2 मिमी से बड़े कण भी शामिल होते हैं। ज्वालामुखी राख का निर्माण मुख्य रूप से तब होता है जब मैग्मा में घुली हुई गैसें अचानक फैलती हैं और वायुमंडल में अत्यधिक दबाव के साथ हिंसक रूप से बाहर निकलती हैं। गैसों का यह प्रचंड बल मैग्मा को छोटे-छोटे टुकड़ों में विखंडित कर देता है। ये टुकड़े वायुमंडल में जाकर ज्वालामुखी चट्टान और काँच के कणों के रूप में ठोस हो जाते हैं। इसके अतिरिक्त, जब मैग्मा पानी (जैसे भूजल, झील या समुद्र) के संपर्क में आता है, तो पानी तुरंत भाप में बदल जाता है, जिससे मैग्मा का और भी तीव्र विखंडन होता है। हवा में पहुँचने के बाद, यह बारीक राख हवा के बहाव के साथ उद्गम स्थल से हजारों किलोमीटर दूर तक फैल सकती है। अपने व्यापक फैलाव के कारण, ज्वालामुखी राख समाज और पर्यावरण पर कई तरह के प्रभाव डाल सकती है, जिनमें मानव और पशु स्वास्थ्य संबंधी समस्याएं, विमानन में बाधा, और महत्वपूर्ण बुनियादी ढांचे (जैसे- बिजली आपूर्ति प्रणाली, दूरसंचार और कृषि) को नुकसान शामिल है। == निर्माण == ज्वालामुखी राख का निर्माण मुख्यतः विस्फोटक ज्वालामुखी उद्गारों और मैग्मा के जल के साथ संपर्क के दौरान होता है। जैसे-जैसे मैग्मा पृथ्वी की सतह की ओर बढ़ता है, उसका दबाव कम होने लगता है। इससे मैग्मा में घुले हुए वाष्पशील पदार्थ (मुख्य रूप से पानी और कार्बन डाइऑक्साइड) गैस के बुलबुले बनाने लगते हैं। जब ये बुलबुले मैग्मा के आयतन का 70-80% हिस्सा घेर लेते हैं, तो वे एक-दूसरे से जुड़कर हिंसक रूप से फट जाते हैं और मैग्मा को छोटे-छोटे टुकड़ों में तोड़ देते हैं। यही विखंडित पदार्थ वायुमंडल में जाकर ठंडे होते हैं और राख का रूप ले लेते हैं। जल के साथ संपर्क के मामलों में (लीडेनफ्रॉस्ट प्रभाव के कारण), अत्यधिक गर्म मैग्मा और ठंडे पानी के बीच तेजी से ऊष्मा का स्थानांतरण होता है, जिससे भाप का भयानक विस्फोट होता है और राख के अत्यधिक बारीक कण उत्पन्न होते हैं। == गुण और विशेषताएँ == === रासायनिक === ज्वालामुखी राख में मौजूद खनिज और तत्व सीधे उस मैग्मा की रासायनिक संरचना पर निर्भर करते हैं जिससे वे उत्पन्न हुए हैं। बेसाल्ट जैसे कम ऊर्जा वाले विस्फोटों से गहरे रंग की राख उत्पन्न होती है, जिसमें लगभग 45-55% सिलिका होता है और यह लोहे और मैग्नीशियम से भरपूर होती है। दूसरी ओर, रायोलाइट जैसे अत्यधिक विस्फोटक उद्गारों से हल्के रंग की राख बनती है, जिसमें सिलिका की मात्रा 69% से अधिक होती है। ताजी राख की सतह पर अक्सर अम्लीय गैसों (जैसे सल्फर डाइऑक्साइड और हाइड्रोक्लोरिक एसिड) का लेप होता है। यह लेप पानी के संपर्क में आने पर संक्षारक और विद्युत का सुचालक हो सकता है, जिससे बिजली के तारों और उपकरणों को भारी नुकसान पहुँचता है। === भौतिक === राख के कणों का घनत्व सामग्री के आधार पर भिन्न होता है (जैसे प्यूमिस के लिए 700-1200 kg/m³, और काँच के टुकड़ों के लिए 2350-2450 kg/m³ तक)। ये कण बहुत ही कठोर और नुकीले होते हैं (मोह्स कठोरता पैमाने पर इनकी कठोरता लगभग 5 होती है)। इसी नुकीलेपन के कारण यह राख अत्यधिक अपघर्षक होती है और मशीनों या उपकरणों को घिस सकती है। {{Clear}} == सन्दर्भ == {{Reflist|30em}} == बाहरी कड़ियाँ == * [https://volcanoes.usgs.gov/ash/ ज्वालामुखी राख: USGS की आधिकारिक जानकारी] {{Authority control}} [[श्रेणी:ज्वालामुखी विज्ञान]] [[श्रेणी:प्रदूषण]] [[श्रेणी:प्राकृतिक आपदाएँ]] acuq8loge4u7kl49kyzmi5qzhus2bu5 6587020 6587019 2026-07-18T08:10:53Z A09 633044 Reverted 1 edit by [[Special:Contributions/अनुज साव22|अनुज साव22]] ([[User talk:अनुज साव22|talk]]) to last revision by InternetArchiveBot (TwinkleGlobal) 6587020 wikitext text/x-wiki {{Infobox scientist | name = टेफ्रा (ज्वालामुखी सामग्री) | image = Volcanic eruption.jpg | caption = ज्वालामुखी विस्फोट के दौरान उत्पन्न प्राकृतिक सामग्री }} [[चित्र:Plume from eruption of Chaiten volcano, Chile.jpg|thumb|चैटेन ज्वालामुखी (चिली) के 2008 के विस्फोट से उठा राख का गुबार, जो पैटागोनिया में प्रशांत महासागर से अटलांटिक महासागर तक फैला हुआ है।]] [[चित्र:Eyjafjallajokull-April-17.JPG|thumb|17 अप्रैल 2010 को एइजाफजल्लाजोकुल (Eyjafjallajökull) ज्वालामुखी से उठती राख का दृश्य।]] [[चित्र:MtCleveland ISS013-E-24184.jpg|thumb|माउंट क्लीवलैंड (अलेउतियन द्वीप समूह) से उठता हुआ गहरा राख का गुबार।]] '''ज्वालामुखी राख''' चट्टानों के छोटे टुकड़ों, खनिज क्रिस्टलों और ज्वालामुखी काँच का एक बारीक मिश्रण है, जो [[ज्वालामुखी|ज्वालामुखी विस्फोटों]] के दौरान उत्पन्न होता है। इसके कणों का व्यास 2 मिलीमीटर (0.079 इंच) से कम होता है।<ref>{{cite journal |last=Rose |first=W.I. |author2=Durant, A.J. |title=Fine ash content of explosive eruptions |journal=Journal of Volcanology and Geothermal Research |year=2009 |volume=186 |issue=1–2 |pages=32–39 |doi=10.1016/j.jvolgeores.2009.01.010}}</ref> अक्सर "ज्वालामुखी राख" शब्द का प्रयोग अनौपचारिक रूप से सभी प्रकार के विस्फोटक उत्पादों (जिन्हें भूविज्ञान में 'टेफ्रा' या ''टेफ्रा'' कहा जाता है) के लिए भी किया जाता है, जिनमें 2 मिमी से बड़े कण भी शामिल होते हैं। ज्वालामुखी राख का निर्माण मुख्य रूप से तब होता है जब मैग्मा में घुली हुई गैसें अचानक फैलती हैं और वायुमंडल में अत्यधिक दबाव के साथ हिंसक रूप से बाहर निकलती हैं। गैसों का यह प्रचंड बल मैग्मा को छोटे-छोटे टुकड़ों में विखंडित कर देता है। ये टुकड़े वायुमंडल में जाकर ज्वालामुखी चट्टान और काँच के कणों के रूप में ठोस हो जाते हैं। इसके अतिरिक्त, जब मैग्मा पानी (जैसे भूजल, झील या समुद्र) के संपर्क में आता है, तो पानी तुरंत भाप में बदल जाता है, जिससे मैग्मा का और भी तीव्र विखंडन होता है। हवा में पहुँचने के बाद, यह बारीक राख हवा के बहाव के साथ उद्गम स्थल से हजारों किलोमीटर दूर तक फैल सकती है। अपने व्यापक फैलाव के कारण, ज्वालामुखी राख समाज और पर्यावरण पर कई तरह के प्रभाव डाल सकती है, जिनमें मानव और पशु स्वास्थ्य संबंधी समस्याएं, विमानन में बाधा, और महत्वपूर्ण बुनियादी ढांचे (जैसे- बिजली आपूर्ति प्रणाली, दूरसंचार और कृषि) को नुकसान शामिल है। == निर्माण == ज्वालामुखी राख का निर्माण मुख्यतः विस्फोटक ज्वालामुखी उद्गारों और मैग्मा के जल के साथ संपर्क के दौरान होता है। जैसे-जैसे मैग्मा पृथ्वी की सतह की ओर बढ़ता है, उसका दबाव कम होने लगता है। इससे मैग्मा में घुले हुए वाष्पशील पदार्थ (मुख्य रूप से पानी और कार्बन डाइऑक्साइड) गैस के बुलबुले बनाने लगते हैं। जब ये बुलबुले मैग्मा के आयतन का 70-80% हिस्सा घेर लेते हैं, तो वे एक-दूसरे से जुड़कर हिंसक रूप से फट जाते हैं और मैग्मा को छोटे-छोटे टुकड़ों में तोड़ देते हैं। यही विखंडित पदार्थ वायुमंडल में जाकर ठंडे होते हैं और राख का रूप ले लेते हैं। जल के साथ संपर्क के मामलों में (लीडेनफ्रॉस्ट प्रभाव के कारण), अत्यधिक गर्म मैग्मा और ठंडे पानी के बीच तेजी से ऊष्मा का स्थानांतरण होता है, जिससे भाप का भयानक विस्फोट होता है और राख के अत्यधिक बारीक कण उत्पन्न होते हैं। == गुण और विशेषताएँ == === रासायनिक === ज्वालामुखी राख में मौजूद खनिज और तत्व सीधे उस मैग्मा की रासायनिक संरचना पर निर्भर करते हैं जिससे वे उत्पन्न हुए हैं। बेसाल्ट जैसे कम ऊर्जा वाले विस्फोटों से गहरे रंग की राख उत्पन्न होती है, जिसमें लगभग 45-55% सिलिका होता है और यह लोहे और मैग्नीशियम से भरपूर होती है। दूसरी ओर, रायोलाइट जैसे अत्यधिक विस्फोटक उद्गारों से हल्के रंग की राख बनती है, जिसमें सिलिका की मात्रा 69% से अधिक होती है। ताजी राख की सतह पर अक्सर अम्लीय गैसों (जैसे सल्फर डाइऑक्साइड और हाइड्रोक्लोरिक एसिड) का लेप होता है। यह लेप पानी के संपर्क में आने पर संक्षारक और विद्युत का सुचालक हो सकता है, जिससे बिजली के तारों और उपकरणों को भारी नुकसान पहुँचता है। === भौतिक === राख के कणों का घनत्व सामग्री के आधार पर भिन्न होता है (जैसे प्यूमिस के लिए 700-1200 kg/m³, और काँच के टुकड़ों के लिए 2350-2450 kg/m³ तक)। ये कण बहुत ही कठोर और नुकीले होते हैं (मोह्स कठोरता पैमाने पर इनकी कठोरता लगभग 5 होती है)। इसी नुकीलेपन के कारण यह राख अत्यधिक अपघर्षक होती है और मशीनों या उपकरणों को घिस सकती है। == मुख्य प्रभाव == === मानव और पशु स्वास्थ्य === राख के बारीक कणों (10 माइक्रोमीटर से कम) को सांस के माध्यम से अंदर लेने पर श्वसन संबंधी समस्याएं, आंखों और त्वचा में जलन, और गले में खराश हो सकती है। सामान्यतः यह प्रभाव अल्पकालिक होता है, लेकिन लंबे समय तक इसके संपर्क में रहने से 'सिलिकोसिस' जैसी बीमारी का खतरा रहता है। जानवरों के लिए यह और भी घातक है; राख से ढका चारा खाने पर जानवरों के दांत घिस सकते हैं और उच्च फ्लोरीन सामग्री होने की स्थिति में 'फ्लोरीन विषाक्तता' के कारण उनकी मृत्यु भी हो सकती है।<ref>{{cite journal |last=Cronin |first=S.J. |author2=Neall, V.E. |author3=Lecointre, J.A. |title=Environmental hazards of fluoride in volcanic ash: a case study from Ruapehu Volcano, New Zealand |url=https://archive.org/details/journal-of-volcanology-and-geothermal-research_2003-03-01_121_3-4/page/271 |journal=Journal of Volcanology and Geothermal Research |year=2003 |volume=121 |issue=3–4 |pages=271–291 |doi=10.1016/S0377-0273(02)00465-1}}</ref> === बुनियादी ढाँचा === * '''विमानन:''' उड़ते हुए विमानों के लिए ज्वालामुखी राख सबसे बड़ा खतरा है। राख विमान के इंजनों के अंदर जाकर पिघल जाती है और टर्बाइन ब्लेड पर जम जाती है, जिससे इंजन बीच हवा में काम करना बंद कर सकते हैं। विमान की खिड़कियों को भी इन अपघर्षक कणों से भारी नुकसान पहुँचता है। 2010 में आइसलैंड के ज्वालामुखी विस्फोट के कारण यूरोप का संपूर्ण हवाई यातायात कई दिनों तक ठप हो गया था। * '''विद्युत और जल आपूर्ति:''' भीगी हुई ज्वालामुखी राख बिजली के तारों और इंसुलेटर पर जमा होकर 'फ्लैशओवर' या शॉर्ट-सर्किट का कारण बन सकती है। इसके अलावा, खुले जल स्रोत और जल शोधन संयंत्र भी राख गिरने से प्रदूषित और अवरुद्ध हो सकते हैं। * '''इमारतें:''' राख के भारी जमाव और उस पर होने वाली बारिश के कारण छतों का वजन अप्रत्याशित रूप से बढ़ जाता है, जिससे कमजोर इमारतों की छतों के गिरने का गंभीर खतरा रहता है। === पर्यावरण और कृषि === यद्यपि प्रारंभ में भारी राख का गिरना फसलों, चरागाहों और छोटे जंगलों को नष्ट कर सकता है, लेकिन दीर्घावधि में यह मिट्टी के लिए अत्यधिक फायदेमंद साबित होता है। ज्वालामुखी राख में फास्फोरस, नाइट्रोजन और अन्य महत्वपूर्ण खनिज भरपूर मात्रा में होते हैं। वर्षा के पानी के साथ यह मिट्टी में घुलकर उसे अत्यधिक उपजाऊ 'एंडिसोल' मिट्टी में बदल देती है। विश्व भर के ज्वालामुखीय द्वीपों पर मौजूद हरे-भरे जंगल इसी राख से समृद्ध मिट्टी का परिणाम हैं। {{Clear}} == सन्दर्भ == {{Reflist|30em}} == बाहरी कड़ियाँ == * [https://volcanoes.usgs.gov/ash/ ज्वालामुखी राख: USGS की आधिकारिक जानकारी] {{Authority control}} [[श्रेणी:ज्वालामुखी विज्ञान]] [[श्रेणी:प्रदूषण]] [[श्रेणी:प्राकृतिक आपदाएँ]] b5kigjn5mr08ynga6f8ujh44ubm9zgi 6587023 6587020 2026-07-18T08:12:58Z अनुज साव22 515212 6587023 wikitext text/x-wiki {{Infobox scientist | name = टेफ्रा (ज्वालामुखी सामग्री) | image = Volcanic eruption.jpg | caption = ज्वालामुखी विस्फोट के दौरान उत्पन्न प्राकृतिक सामग्री }} [[चित्र:Plume from eruption of Chaiten volcano, Chile.jpg|thumb|चैटेन ज्वालामुखी (चिली) के 2008 के विस्फोट से उठा राख का गुबार, जो पैटागोनिया में प्रशांत महासागर से अटलांटिक महासागर तक फैला हुआ है।]] [[चित्र:Eyjafjallajokull-April-17.JPG|thumb|17 अप्रैल 2010 को एइजाफजल्लाजोकुल (Eyjafjallajökull) ज्वालामुखी से उठती राख का दृश्य।]] [[चित्र:MtCleveland ISS013-E-24184.jpg|thumb|माउंट क्लीवलैंड (अलेउतियन द्वीप समूह) से उठता हुआ गहरा राख का गुबार।]] '''ज्वालामुखी राख''' चट्टानों के छोटे टुकड़ों, खनिज क्रिस्टलों और ज्वालामुखी काँच का एक बारीक मिश्रण है, जो [[ज्वालामुखी|ज्वालामुखी विस्फोटों]] के दौरान उत्पन्न होता है। इसके कणों का व्यास 2 मिलीमीटर (0.079 इंच) से कम होता है।<ref>{{cite journal |last=Rose |first=W.I. |author2=Durant, A.J. |title=Fine ash content of explosive eruptions |journal=Journal of Volcanology and Geothermal Research |year=2009 |volume=186 |issue=1–2 |pages=32–39 |doi=10.1016/j.jvolgeores.2009.01.010}}</ref> अक्सर "ज्वालामुखी राख" शब्द का प्रयोग अनौपचारिक रूप से सभी प्रकार के विस्फोटक उत्पादों (जिन्हें भूविज्ञान में 'टेफ्रा' या ''टेफ्रा'' कहा जाता है) के लिए भी किया जाता है, जिनमें 2 मिमी से बड़े कण भी शामिल होते हैं। ज्वालामुखी राख का निर्माण मुख्य रूप से तब होता है जब मैग्मा में घुली हुई गैसें अचानक फैलती हैं और वायुमंडल में अत्यधिक दबाव के साथ हिंसक रूप से बाहर निकलती हैं। गैसों का यह प्रचंड बल मैग्मा को छोटे-छोटे टुकड़ों में विखंडित कर देता है। ये टुकड़े वायुमंडल में जाकर ज्वालामुखी चट्टान और काँच के कणों के रूप में ठोस हो जाते हैं। इसके अतिरिक्त, जब मैग्मा पानी (जैसे भूजल, झील या समुद्र) के संपर्क में आता है, तो पानी तुरंत भाप में बदल जाता है, जिससे मैग्मा का और भी तीव्र विखंडन होता है। हवा में पहुँचने के बाद, यह बारीक राख हवा के बहाव के साथ उद्गम स्थल से हजारों किलोमीटर दूर तक फैल सकती है। अपने व्यापक फैलाव के कारण, ज्वालामुखी राख समाज और पर्यावरण पर कई तरह के प्रभाव डाल सकती है, जिनमें मानव और पशु स्वास्थ्य संबंधी समस्याएं, विमानन में बाधा, और महत्वपूर्ण बुनियादी ढांचे (जैसे- बिजली आपूर्ति प्रणाली, दूरसंचार और कृषि) को नुकसान शामिल है। == निर्माण == ज्वालामुखी राख का निर्माण मुख्यतः विस्फोटक ज्वालामुखी उद्गारों और मैग्मा के जल के साथ संपर्क के दौरान होता है। जैसे-जैसे मैग्मा पृथ्वी की सतह की ओर बढ़ता है, उसका दबाव कम होने लगता है। इससे मैग्मा में घुले हुए वाष्पशील पदार्थ (मुख्य रूप से पानी और कार्बन डाइऑक्साइड) गैस के बुलबुले बनाने लगते हैं। जब ये बुलबुले मैग्मा के आयतन का 70-80% हिस्सा घेर लेते हैं, तो वे एक-दूसरे से जुड़कर हिंसक रूप से फट जाते हैं और मैग्मा को छोटे-छोटे टुकड़ों में तोड़ देते हैं। यही विखंडित पदार्थ वायुमंडल में जाकर ठंडे होते हैं और राख का रूप ले लेते हैं। जल के साथ संपर्क के मामलों में (लीडेनफ्रॉस्ट प्रभाव के कारण), अत्यधिक गर्म मैग्मा और ठंडे पानी के बीच तेजी से ऊष्मा का स्थानांतरण होता है, जिससे भाप का भयानक विस्फोट होता है और राख के अत्यधिक बारीक कण उत्पन्न होते हैं। == गुण और विशेषताएँ == === रासायनिक === ज्वालामुखी राख में मौजूद खनिज और तत्व सीधे उस मैग्मा की रासायनिक संरचना पर निर्भर करते हैं जिससे वे उत्पन्न हुए हैं। बेसाल्ट जैसे कम ऊर्जा वाले विस्फोटों से गहरे रंग की राख उत्पन्न होती है, जिसमें लगभग 45-55% सिलिका होता है और यह लोहे और मैग्नीशियम से भरपूर होती है। दूसरी ओर, रायोलाइट जैसे अत्यधिक विस्फोटक उद्गारों से हल्के रंग की राख बनती है, जिसमें सिलिका की मात्रा 69% से अधिक होती है। ताजी राख की सतह पर अक्सर अम्लीय गैसों (जैसे सल्फर डाइऑक्साइड और हाइड्रोक्लोरिक एसिड) का लेप होता है। यह लेप पानी के संपर्क में आने पर संक्षारक और विद्युत का सुचालक हो सकता है, जिससे बिजली के तारों और उपकरणों को भारी नुकसान पहुँचता है।<ref>{{cite journal |last=Cronin |first=S.J. |author2=Neall, V.E. |author3=Lecointre, J.A. |title=Environmental hazards of fluoride in volcanic ash: a case study from Ruapehu Volcano, New Zealand |url=https://archive.org/details/journal-of-volcanology-and-geothermal-research_2003-03-01_121_3-4/page/271 |journal=Journal of Volcanology and Geothermal Research |year=2003 |volume=121 |issue=3–4 |pages=271–291 |doi=10.1016/S0377-0273(02)00465-1}}</ref> === भौतिक === राख के कणों का घनत्व सामग्री के आधार पर भिन्न होता है (जैसे प्यूमिस के लिए 700-1200 kg/m³, और काँच के टुकड़ों के लिए 2350-2450 kg/m³ तक)। ये कण बहुत ही कठोर और नुकीले होते हैं (मोह्स कठोरता पैमाने पर इनकी कठोरता लगभग 5 होती है)। इसी नुकीलेपन के कारण यह राख अत्यधिक अपघर्षक होती है और मशीनों या उपकरणों को घिस सकती है। == मुख्य प्रभाव == === मानव और पशु स्वास्थ्य === राख के बारीक कणों (10 माइक्रोमीटर से कम) को सांस के माध्यम से अंदर लेने पर श्वसन संबंधी समस्याएं, आंखों और त्वचा में जलन, और गले में खराश हो सकती है। सामान्यतः यह प्रभाव अल्पकालिक होता है, लेकिन लंबे समय तक इसके संपर्क में रहने से 'सिलिकोसिस' जैसी बीमारी का खतरा रहता है। जानवरों के लिए यह और भी घातक है; राख से ढका चारा खाने पर जानवरों के दांत घिस सकते हैं और उच्च फ्लोरीन सामग्री होने की स्थिति में 'फ्लोरीन विषाक्तता' के कारण उनकी मृत्यु भी हो सकती है।<ref>{{cite journal |last=Cronin |first=S.J. |author2=Neall, V.E. |author3=Lecointre, J.A. |title=Environmental hazards of fluoride in volcanic ash: a case study from Ruapehu Volcano, New Zealand |url=https://archive.org/details/journal-of-volcanology-and-geothermal-research_2003-03-01_121_3-4/page/271 |journal=Journal of Volcanology and Geothermal Research |year=2003 |volume=121 |issue=3–4 |pages=271–291 |doi=10.1016/S0377-0273(02)00465-1}}</ref> === बुनियादी ढाँचा === * '''विमानन:''' उड़ते हुए विमानों के लिए ज्वालामुखी राख सबसे बड़ा खतरा है। राख विमान के इंजनों के अंदर जाकर पिघल जाती है और टर्बाइन ब्लेड पर जम जाती है, जिससे इंजन बीच हवा में काम करना बंद कर सकते हैं। विमान की खिड़कियों को भी इन अपघर्षक कणों से भारी नुकसान पहुँचता है। 2010 में आइसलैंड के ज्वालामुखी विस्फोट के कारण यूरोप का संपूर्ण हवाई यातायात कई दिनों तक ठप हो गया था। * '''विद्युत और जल आपूर्ति:''' भीगी हुई ज्वालामुखी राख बिजली के तारों और इंसुलेटर पर जमा होकर 'फ्लैशओवर' या शॉर्ट-सर्किट का कारण बन सकती है। इसके अलावा, खुले जल स्रोत और जल शोधन संयंत्र भी राख गिरने से प्रदूषित और अवरुद्ध हो सकते हैं। * '''इमारतें:''' राख के भारी जमाव और उस पर होने वाली बारिश के कारण छतों का वजन अप्रत्याशित रूप से बढ़ जाता है, जिससे कमजोर इमारतों की छतों के गिरने का गंभीर खतरा रहता है। === पर्यावरण और कृषि === यद्यपि प्रारंभ में भारी राख का गिरना फसलों, चरागाहों और छोटे जंगलों को नष्ट कर सकता है, लेकिन दीर्घावधि में यह मिट्टी के लिए अत्यधिक फायदेमंद साबित होता है। ज्वालामुखी राख में फास्फोरस, नाइट्रोजन और अन्य महत्वपूर्ण खनिज भरपूर मात्रा में होते हैं। वर्षा के पानी के साथ यह मिट्टी में घुलकर उसे अत्यधिक उपजाऊ 'एंडिसोल' मिट्टी में बदल देती है। विश्व भर के ज्वालामुखीय द्वीपों पर मौजूद हरे-भरे जंगल इसी राख से समृद्ध मिट्टी का परिणाम हैं। {{Clear}} == सन्दर्भ == {{Reflist|30em}} == बाहरी कड़ियाँ == * [https://volcanoes.usgs.gov/ash/ ज्वालामुखी राख: USGS की आधिकारिक जानकारी] {{Authority control}} [[श्रेणी:ज्वालामुखी विज्ञान]] [[श्रेणी:प्रदूषण]] [[श्रेणी:प्राकृतिक आपदाएँ]] e6ezb1bx1enh16rftk7bghqo5bw2p1w मदन पाल 0 1614307 6586850 6580549 2026-07-17T16:40:53Z Pushkar Singh 415569 /* */ सन्दर्भ जोड़ा 6586850 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== {{टिप्पणीसूची}} 1q8h09mqof37s103zu2z5ibkdogbeu3 6586851 6586850 2026-07-17T16:44:27Z Pushkar Singh 415569 /* */ 6586851 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== {{टिप्पणीसूची}} 4o6noepy8tjoqg1zvk4n5tmhclblqgi 6586852 6586851 2026-07-17T16:45:16Z Pushkar Singh 415569 /* पुरस्कार */ 6586852 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==सन्दर्भ== {{सन्दर्भ}} ni7e0gwvparwu5zq0vbh0ueylybv29x 6586857 6586852 2026-07-17T16:48:56Z Pushkar Singh 415569 /* सन्दर्भ */ 6586857 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==सन्दर्भ== {{सन्दर्भ}} {{श्रेणी: हिन्दी फ़िल्मों के गीतकार}} {{श्रेणी: जीवित लोग}} 1zy0h3yt5juh8sysi2prqd6ldd94539 6586859 6586857 2026-07-17T16:51:02Z Pushkar Singh 415569 /* सन्दर्भ */ 6586859 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==सन्दर्भ== {{सन्दर्भ}} [[श्रेणी:हिन्दी फ़िल्मों के गीतकार]] [[श्रेणी:जीवित लोग]] [[श्रेणी: भारतीय गीतकार]] {{आधार}} 8jlxwvavm6blgnadc5mlpx5iwtndp5i 6586864 6586859 2026-07-17T16:59:52Z Pushkar Singh 415569 /* */ 6586864 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति (1995 फ़िल्म)|वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==सन्दर्भ== {{सन्दर्भ}} [[श्रेणी:हिन्दी फ़िल्मों के गीतकार]] [[श्रेणी:जीवित लोग]] [[श्रेणी: भारतीय गीतकार]] {{आधार}} l1dl4cnpqo39nj2nrx51ir749w2u66d 6586867 6586864 2026-07-17T17:00:49Z Pushkar Singh 415569 6586867 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति (1995 फ़िल्म)|वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==सन्दर्भ== {{सन्दर्भ}} [[श्रेणी:हिन्दी फ़िल्मों के गीतकार]] [[श्रेणी:जीवित लोग]] [[श्रेणी:भारतीय गीतकार]] [[श्रेणी: फ़िल्म गीतकार]] {{आधार}} 9et5iv5r3bxongf4w0rac578zh76rcw 6586874 6586867 2026-07-17T17:07:42Z Pushkar Singh 415569 /* पुरस्कार */ 6586874 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति (1995 फ़िल्म)|वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==इन्हें भी देखें== [[समीर]] [[जावेद अख़्तर]] [[शैलेन्द्र]] [[आनन्द बक्शी]] ==सन्दर्भ== {{सन्दर्भ}} [[श्रेणी:हिन्दी फ़िल्मों के गीतकार]] [[श्रेणी:जीवित लोग]] [[श्रेणी:भारतीय गीतकार]] [[श्रेणी: फ़िल्म गीतकार]] {{आधार}} 2tx8iah7tte2i1rriqbo0k7cauuxya0 6586876 6586874 2026-07-17T17:10:41Z Pushkar Singh 415569 /* इन्हें भी देखें */ 6586876 wikitext text/x-wiki {{हहेच लेख| कारण=उल्लेखनीयता संदिग्ध।| चर्चा_पृष्ठ= विकिपीडिया:पृष्ठ हटाने हेतु चर्चा/लेख/मदन पाल}}''' '''मदन पाल''' भारतीय फ़िल्म उद्योग (बॉलीवुड) के एक गीतकार, शायर और पटकथा लेखक हैं। उन्होंने मुख्य रूप से १९९० के दशक और उसके बाद की कई व्यावसायिक रूप से सफल बॉलीवुड फ़िल्मों, ग़ज़ल एल्बमों और भजनों के लिए गीतों की रचना की है। ग़ज़ल गायक जगजीत सिंह की आवाज़ में गाए गए उनके ग़ैर-फ़िल्मी गीत और फ़िल्मी संगीत श्रोताओं के बीच लोकप्रिय हैं। मदन पाल ने हिन्दी फ़िल्मों और ग़ज़ल एल्बमों के लिए 90 से अधिक गीत लिखे।<ref>{{Cite web |title=Madan Pal – 90+ songs written by the lyricist |url=https://www.hindigeetmala.net/lyricist/madan_pal.php |website=HindiGeetMala |access-date=17 July 2026 }}</ref> [[आशिकी|आशिक़ी]], [[दिल का क्या कसूर]] , [[वीरगति (1995 फ़िल्म)|वीरगति]] जैसी कई फ़िल्मों में उन्होंने गीत लिखे। <ref>{{Cite web |title=Madan Pal |website=IMDb |url=https://www.imdb.com/name/nm1007819/ |access-date=17 July 2026 }}</ref> ==व्यक्तिगत जीवन== ==संगीत कॅरियर== {| class="wikitable sortable" |- ! वर्ष !! गीत !! संगीतकार !! गायक/गायिका |- | १९९२ || "दिल का क्या कसूर" <small>(सह-लेखन)</small> || [[नदीम-श्रवण]] || [[कुमार सानु]] |- | १९९२ || "अपनी आँखों के झरोखे में" || बब्बू मलिक || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९२ || "तेरी चाहत के सिवा कुछ भी" || बब्बू मलिक || [[साधना सरगम]], [[उदित नारायण]] |- | १९९५ || "ये दिल में रहने वाले" || [[आदेश श्रीवास्तव]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९६ || "लव बर्ड्स कुकू कुकू" || [[आदेश श्रीवास्तव]] || [[पूर्णिमा (गायिका)|पूर्णिमा]], [[सोनू निगम]] |- | १९९६ || "चंदा की चोरी करके" || [[आदेश श्रीवास्तव]] || [[आदित्य नारायण]], [[कविता कृष्णमूर्ति]] |- | १९९८ || "हृदय में तू ही तू" || [[आनंद-मिलिंद]] || [[कुमार सानु]], [[अलका याज्ञिक]] |- | १९९९ || "सावन बरसे तरसे दिल" || [[आदेश श्रीवास्तव]] || [[हरिहरन]], [[साधना सरगम]] |- | २००० || "बनठन के चली देखो" || [[हिमेश रेशमिया]] || [[सुखविंदर सिंह]], [[सुनिधि चौहान]] |- | २००१ || "आँखों के इशारा समझो" || [[आदेश श्रीवास्तव]] || [[अलका याज्ञिक]], [[उदित नारायण]] |} ==फ़िल्में== ==पुरस्कार== ==इन्हें भी देखें== [[समीर (गीतकार)|समीर]] [[जावेद अख़्तर]] [[शैलेन्द्र]] [[आनन्द बक्शी]] ==सन्दर्भ== {{सन्दर्भ}} [[श्रेणी:हिन्दी फ़िल्मों के गीतकार]] [[श्रेणी:जीवित लोग]] [[श्रेणी:भारतीय गीतकार]] [[श्रेणी: फ़िल्म गीतकार]] {{आधार}} fnez288c3nng7xb49b8wf7kffcmujjn एंडी बर्नहेम 0 1614754 6587030 6572337 2026-07-18T09:59:40Z Pushkar Singh 415569 /* */ चित्र जोड़ा 6587030 wikitext text/x-wiki '''एण्डी बर्नहेम''' एक ब्रिटिश राजनेता हैं जो ब्रिटेन की संसद में सांसद हैं। [[चित्र:Official portrait of Andy Burnham MP 2026 (cropped 3x4).jpg|अंगूठा|2026 में एंडी बर्नहम का आधिकारिक चित्र]] b2ibnm3quwtpx688ybyfrq9ox8wvul4 6587032 6587030 2026-07-18T10:16:37Z Pushkar Singh 415569 /* */ 6587032 wikitext text/x-wiki '''एण्डी बर्नहेम'''({{|ˈbɜːrnəm} {{Audio|Andrew Murray Burnham pronunciation.wav|उच्चारण}})एक ब्रिटिश राजनेता हैं जो ब्रिटेन की संसद में सांसद हैं। [[चित्र:Official portrait of Andy Burnham MP 2026 (cropped 3x4).jpg|अंगूठा|2026 में एंडी बर्नहम का आधिकारिक चित्र]] n9g7ta3uw27d3o8su0cp4h3u4blfrgx 6587033 6587032 2026-07-18T10:20:33Z Pushkar Singh 415569 /* */ 6587033 wikitext text/x-wiki '''एण्डी बर्नहेम''' [[विकिपीडिया:IPA for English|bɜːrnəm]] {{Audio|Andrew Murray Burnham pronunciation.wav|उच्चारण}})एक ब्रिटिश राजनेता हैं जो ब्रिटेन की संसद में सांसद हैं। [[चित्र:Official portrait of Andy Burnham MP 2026 (cropped 3x4).jpg|अंगूठा|2026 में एंडी बर्नहम का आधिकारिक चित्र]] d203wdvxke4hcplo5xviht0ne1rn6uw विकिपीडिया:आँकड़े/2026/जुलाई 4 1615595 6586745 6583875 2026-07-17T12:14:19Z NeechalBOT 98381 statistics 6586745 wikitext text/x-wiki <!--- stats starts--->{{सदस्य:Neechalkaran/statnotice}}{| class="wikitable sortable" style="width:90%" |- ! Date(Time) ! Pages ! Articles ! Edits ! Users ! Files ! Activeusers {{User:Neechalkaran/template/daily |Date =1-7-2026 6:14 |Pages = 1390976 |dPages = 61 |Articles = 170455 |dArticles = 23 |Edits = 6563116 |dEdits = 393 |Files = 4684 |dFiles = 0 |Users = 912675 |dUsers = 141 |Ausers = 1036 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =2-7-2026 6:14 |Pages = 1391001 |dPages = 25 |Articles = 170466 |dArticles = 11 |Edits = 6563420 |dEdits = 304 |Files = 4684 |dFiles = 0 |Users = 912798 |dUsers = 123 |Ausers = 1044 |dAusers = 8 }} {{User:Neechalkaran/template/daily |Date =3-7-2026 6:14 |Pages = 1391025 |dPages = 24 |Articles = 170477 |dArticles = 11 |Edits = 6564037 |dEdits = 617 |Files = 4684 |dFiles = 0 |Users = 912924 |dUsers = 126 |Ausers = 1044 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =4-7-2026 6:14 |Pages = 1391026 |dPages = 1 |Articles = 170475 |dArticles = -2 |Edits = 6564818 |dEdits = 781 |Files = 4684 |dFiles = 0 |Users = 913078 |dUsers = 154 |Ausers = 1044 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =5-7-2026 6:14 |Pages = 1391052 |dPages = 26 |Articles = 170486 |dArticles = 11 |Edits = 6565217 |dEdits = 399 |Files = 4684 |dFiles = 0 |Users = 913244 |dUsers = 166 |Ausers = 1016 |dAusers = -28 }} {{User:Neechalkaran/template/daily |Date =6-7-2026 6:14 |Pages = 1391098 |dPages = 46 |Articles = 170501 |dArticles = 15 |Edits = 6565615 |dEdits = 398 |Files = 4685 |dFiles = 1 |Users = 913396 |dUsers = 152 |Ausers = 1016 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =7-7-2026 6:14 |Pages = 1391019 |dPages = -79 |Articles = 170464 |dArticles = -37 |Edits = 6566059 |dEdits = 444 |Files = 4685 |dFiles = 0 |Users = 913584 |dUsers = 188 |Ausers = 1016 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =8-7-2026 6:14 |Pages = 1391054 |dPages = 35 |Articles = 170474 |dArticles = 10 |Edits = 6566441 |dEdits = 382 |Files = 4685 |dFiles = 0 |Users = 913778 |dUsers = 194 |Ausers = 996 |dAusers = -20 }} {{User:Neechalkaran/template/daily |Date =9-7-2026 6:14 |Pages = 1391074 |dPages = 20 |Articles = 170482 |dArticles = 8 |Edits = 6566819 |dEdits = 378 |Files = 4685 |dFiles = 0 |Users = 913896 |dUsers = 118 |Ausers = 996 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =10-7-2026 6:14 |Pages = 1391026 |dPages = -48 |Articles = 170489 |dArticles = 7 |Edits = 6567516 |dEdits = 697 |Files = 4685 |dFiles = 0 |Users = 914050 |dUsers = 154 |Ausers = 996 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =11-7-2026 6:14 |Pages = 1391043 |dPages = 17 |Articles = 170505 |dArticles = 16 |Edits = 6567796 |dEdits = 280 |Files = 4686 |dFiles = 1 |Users = 914174 |dUsers = 124 |Ausers = 967 |dAusers = -29 }} {{User:Neechalkaran/template/daily |Date =12-7-2026 6:14 |Pages = 1391020 |dPages = -23 |Articles = 170505 |dArticles = 0 |Edits = 6568245 |dEdits = 449 |Files = 4685 |dFiles = -1 |Users = 914308 |dUsers = 134 |Ausers = 967 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =13-7-2026 6:14 |Pages = 1391044 |dPages = 24 |Articles = 170512 |dArticles = 7 |Edits = 6568529 |dEdits = 284 |Files = 4685 |dFiles = 0 |Users = 914446 |dUsers = 138 |Ausers = 967 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =14-7-2026 6:14 |Pages = 1391068 |dPages = 24 |Articles = 170520 |dArticles = 8 |Edits = 6568765 |dEdits = 236 |Files = 4685 |dFiles = 0 |Users = 914579 |dUsers = 133 |Ausers = 955 |dAusers = -12 }} {{User:Neechalkaran/template/daily |Date =15-7-2026 6:14 |Pages = 1391055 |dPages = -13 |Articles = 170509 |dArticles = -11 |Edits = 6569153 |dEdits = 388 |Files = 4685 |dFiles = 0 |Users = 914699 |dUsers = 120 |Ausers = 955 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =16-7-2026 6:14 |Pages = 1391084 |dPages = 29 |Articles = 170520 |dArticles = 11 |Edits = 6569870 |dEdits = 717 |Files = 4685 |dFiles = 0 |Users = 914840 |dUsers = 141 |Ausers = 955 |dAusers = 0 }} {{User:Neechalkaran/template/daily |Date =17-7-2026 6:14 |Pages = 1391092 |dPages = 8 |Articles = 170521 |dArticles = 1 |Edits = 6571926 |dEdits = 2056 |Files = 4685 |dFiles = 0 |Users = 914994 |dUsers = 154 |Ausers = 928 |dAusers = -27 }} <!---Place new stats here---> |} <!--- stats ends---> 7g8rl8o04hjho3xvvd1x8pscbng1nyt ओजापाली 0 1615859 6586968 6586664 2026-07-18T02:49:25Z QuestForTrueTruth 852879 विविधताएँ / रूप के बारे में जानकारी दी गई है। 6586968 wikitext text/x-wiki {{नया असमीक्षित लेख|date=जुलाई 2026}} '''ओजापाली''' असम की एक कथात्मक गीत-नृत्य परंपरा है, जिसका प्रदर्शन एक समूह द्वारा किया जाता है। इस समूह का नेतृत्व एक ''ओजा'' (मुख्य प्रस्तोता) करता है तथा ''पाली'' (कोरस) उसका सहयोग करती है। विद्वान इसकी जड़ों को अखिल भारतीय '''''कथाकथा''''' (महाकाव्य कथावाचन) परंपरा से जोड़ते हैं और इसका विकास [[असम]] में नव-वैष्णव आंदोलन से बहुत पहले का मानते हैं।{{sfn|Baruah|Choudhury|2023|p=106}}{{sfn|Borah|2023|pp=48–49}} दरंग ज़िला विशेष रूप से राजा धर्मनारायण (1615–1637) के समय से ओजापाली प्रदर्शन का एक ऐतिहासिक केंद्र माना जाता है।<ref>{{cite web |title=Ojapali Tradition and National Movement in Assam |url=https://indianculture.gov.in/node/2820144}}</ref>इस कला रूप में मुख्य रूप से छोटे झांझ (''खुटीताल'') की संगत के साथ गाकर कथा-वाचन, संवाद, हाव-भाव तथा आंशिक रूप से तात्कालिक नाट्य प्रस्तुति का समावेश होता है।{{sfn|Baruah|Choudhury|2023|pp=106–109}}{{sfn|Baruah|2017|pp=12–15}} [[File:Oja Pali.jpg|thumb|असम का एक ओजापाली दल (एंसेंबल)]] == उत्पत्ति और ऐतिहासिक संदर्भ == ओजापाली को कहानी कहने की '''''कथाकथा''''' परंपरा से विकसित माना जाता है, जिसे स्थानीय अनुष्ठानों और सामुदायिक प्रस्तुतियों के अनुरूप अनुकूलित किया गया।{{sfn|Baruah|Choudhury|2023|pp=106–111}} इसके महाकाव्य-आधारित रूप असमिया ''रामायण'' और ''महाभारत'' के पुनर्कथनों का उल्लेख करते हैं, जबकि गैर-महाकाव्य रूप शाक्त (शक्ति) उपासना परंपराओं में निहित हैं।{{sfn|Baruah|2016|pp=100–103}} यह कला-रूप [[कामता साम्राज्य|कामता साम्राज्य]] के अधीन सुदृढ़ हुआ और राजा धर्मनारायण के शासनकाल में दरांग में इसका संरक्षण किया गया। पंद्रहवीं–सोलहवीं शताब्दी के दौरान, ओजापाली का असम के [[भक्ति आंदोलन]] के साथ संपर्क हुआ; बाद के लेखकों का उल्लेख है कि ओजापाली के तत्वों ने नव-वैष्णव सत्रों से संबंधित रंगमंच और संगीत के विकास को प्रभावित किया।{{sfn|Baruah|Choudhury|2023|pp=107–109}} कई कला इतिहासकार और प्रदर्शन कला के विद्वान यह भी सुझाव देते हैं कि श्रीमंत शंकरदेव की नाट्य शैली (''अंकिया नाट''/''भाओना'') पर ओजापाली का प्रभाव था।<ref>{{Cite web |title=Social Reserch Foundation |url=https://www.socialresearchfoundation.com/new/publish-journal.php?editID=1430 |access-date=2025-09-09 |website=www.socialresearchfoundation.com}}</ref><ref>{{Cite journal |last=Sarma |first=Madan |date=2022-08-04 |title=Anka or Aṅkīyā Nāṭ: Genesis and Structure |url=https://www.academia.edu/84166432 |journal=Mahapurusjyoti}}</ref> == प्रदर्शन और शैली == एक ओजापाली दल में सामान्यतः एक '''ओजा''' (मुख्य कलाकार) और चार या पाँच '''पाली''' (कोरस) होते हैं। मुख्य कोरस गायक, '''दाइना-पाली''', ओजा के दाहिनी ओर खड़ा होता है और संवादात्मक प्रत्युत्तर तथा व्याख्या के माध्यम से कथा को आगे बढ़ाता है।{{sfn|Baruah|2016|p=101}}{{sfn|Baruah|Choudhury|2023|pp=108–109}} प्रस्तुति में गाए जाने वाले पद, संवाद, लयबद्ध पदचालन तथा हाव-भाव का समावेश होता है; दल 'खुटीताल' (छोटे झांझ) की सहायता से ताल बनाए रखता है, और कुछ संदर्भों में इसके साथ अन्य तालवाद्य वाद्यों का भी सहयोग लिया जा सकता है।{{sfn|Baruah|Choudhury|2023|pp=108–109}}वेशभूषा इसकी विभिन्न उपशैलियों के अनुसार भिन्न होती है: ब्याह दल प्रायः सफेद पगड़ी और ''चपकन'' पहनते हैं, जबकि सत्रिया ओजापाली में संकरी वेशभूषा तथा सत्र परंपरा के अनुरूप आभूषण धारण किए जाते हैं।{{sfn|Baruah|2016|p=102}} == विविधताएँ / रूप == विद्वानों के स्रोत सामान्यतः तीन प्रमुख रूपों का उल्लेख करते हैं, जिन्हें कभी-कभी "महाकाव्य-आधारित" और "गैर-महाकाव्य/शाक्त-संबद्ध" शीर्षकों के अंतर्गत वर्गीकृत किया जाता है:{{sfn|Baruah|Choudhury|2023|p=107}}{{sfn|Baruah|2023|pp=1–2}} * '''ब्याह/बिगोया (व्यास-गोवा) ओजापाली''' – महाकाव्य-आधारित; ''रामायण'', ''महाभारत'', ''भागवत पुराण'' तथा अन्य पुराणिक विषयों पर आधारित कथाओं का वाचन।{{sfn|Baruah|Choudhury|2023|p=107}} * '''सुकानन्नी / मारोई-गोवा (मनसा) ओजापाली''' – शाक्त परंपरा से संबद्ध; सर्प देवी मनसा (''मारोई'') पर केंद्रित अनुष्ठानिक आख्यान। अनेक मंडलियाँ ''पद्म-पुराण'' परंपरा में कवि नारायणदेव द्वारा रचित ''पदावली'' का गायन करती हैं।<ref>{{cite journal |last=Baruah |first=Sudarshan |title=Types of Ojapali: Sattriya Ojapali and Manasha Ojapali |journal=Naad-Nartan: Journal of Dance & Music |year=2023 |url=https://naadnartan.in/wp-content/uploads/2023/08/Dr.-Sudarshan-Baruah.pdf}}</ref> * '''रामायणी ओजापाली''' – ''रामायण'' के प्रसंगों पर केंद्रित प्रस्तुतियाँ।{{sfn|Baruah|Choudhury|2023|p=107}} इसके अतिरिक्त, सत्र परिवेश के भीतर एक विशिष्ट '''सत्त्रीय ओजापाली''' का विकास हुआ; विद्वान इसे शंकरदेव का अनुकूलन बताते हैं, जो ब्याह के तत्वों का संकारी सौंदर्यशास्त्र के साथ संश्लेषण करता है।<ref>{{cite journal |title=Satriya Ojapali Music of Assam and Its Classical Elements |journal=Sangeet Galaxy |url=https://sangeetgalaxy.co.in/wp-content/uploads/2020/07/3573219253-SatriyaOjapaliClassicalelements_final.pdf}}</ref> tud3aku5pwu1cyks3re9brpdq6q97ey सदस्य वार्ता:Edgar senpai 3 1615888 6586952 6580634 2026-07-18T00:17:56Z Xqbot 9835 बॉट: [[सदस्य वार्ता:AdobeVistima]] को दोहरे पुननिर्देशित ठीक किया। 6586952 wikitext text/x-wiki #पुनर्प्रेषित [[सदस्य वार्ता:AdobeVistima]] notlsr6hn73fsnqjyheu4c1wiv0fma8 पति पत्नी और वो दो 0 1615978 6586848 6586732 2026-07-17T16:34:05Z SM7 89247 [[Special:Contributions/~2026-40019-55|~2026-40019-55]] ([[User talk:~2026-40019-55|Talk]]) के संपादनों को हटाकर [[User:स्वर्ण|स्वर्ण]] के आखिरी अवतरण को पूर्ववत किया 6581984 wikitext text/x-wiki {{Infobox film | name = पति पत्नी और वो दो | image = Pati Patni Aur Woh Do poster.jpg | caption = सिनेमाघरीय प्रदर्शन प्रचार-पत्र | director = [[मुदस्सर अज़ीज़]] | producer = {{plainlist| * [[भूषण कुमार]] * रेणु रवि चोपड़ा * कृष्ण कुमार }} | screenplay = रवि कुमार<br />मुदस्सर अज़ीज़ | writer = मुदस्सर अज़ीज़ | starring = {{plainlist| * [[आयुष्मान खुराना]] * [[वामिका गब्बी]] * [[सारा अली ख़ान]] * [[रकुल प्रीत सिंह]] }} | music = {{ubl | '''गीत :''' | राजेश रोशन | रोचक कोहली | तनिष्क बागची | नीलकमल सिंह | टोनी कक्कड़ | बादशाह | देव्व सदाना | '''पार्श्वसंगीत :''' | केतन सोढा }} | cinematography = जिष्णु भट्टाचार्य | editing = निनाद खानोलकर | production_companies = {{plainlist| * टी-सीरीज़ फ़िल्म्स * बी॰ आर॰ स्टूडियोज़ }} | distributor = ज़ी स्टूडियोज़ | released = {{film date|df=yes|2026|05|15}} | runtime = ११७ मिनट | country = [[भारत]] | language = [[हिन्दी]] | budget = अनुमानित ₹६० करोड़ | gross = ₹६४.०६ करोड़ }} '''पति पत्नी और वो दो''' २०२६ की एक भारतीय हिन्दी भाषी [[हास्य प्रेमकहानी फ़िल्में|प्रेमप्रधान हास्य]] [[चलचित्र]] है, जिसका लेखन और निर्देशन [[मुदस्सर अज़ीज़]] ने किया है। [[टी-सीरीज़|टी-सीरीज़ फ़िल्म्स]] और बी॰ आर॰ स्टूडियोज़ के अधीन [[भूषण कुमार]] तथा [[रेणु रवि चोपड़ा]] द्वारा निर्मित, यह २०१९ की चलचित्र [[पति पत्नी और वो (2019 फ़िल्म)|पति पत्नी और वो]] का आध्यात्मिक अनुवर्ती है।<ref name="TOIPostponed">{{Cite news|url=https://timesofindia.indiatimes.com/entertainment/hindi/bollywood/news/pati-patni-aur-woh-do-postponed-ayushmann-khurrana-sara-ali-khan-starrer-to-now-release-in-may-2026/articleshow/128067843.cms|title='Pati Patni Aur Woh Do' postponed; Ayushmann Khurrana, Sara Ali Khan starrer to now release in May 2026|date=8 February 2026|work=[[The Times of India]]|access-date=26 March 2026}}</ref><ref>{{Cite web|url=https://www.bhaskarenglish.in/entertainment/news/teaser-of-the-years-sixth-sequel-out-137742732.html|title=Teaser of the year's sixth sequel out: Ayushmann to romance three actresses in 'Pati Patni Aur Woh Do'; film was earlier postponed|date=20 April 2026|website=Bhaskar English|access-date=7 May 2026}}</ref> चलचित्र में [[आयुष्मान खुराना]], [[वामिका गब्बी]], [[सारा अली ख़ान]] और [[रकुल प्रीत सिंह]] का नवीन सामूहिक कलाकार-वर्ग है। चलचित्र १५ मई २०२६ को सिनेमाघरों में प्रदर्शित हुई और इसे समीक्षकों से मिश्रित-से-नकारात्मक प्रतिक्रियाएँ मिलीं। चलचित्र अर्ध-सफल रही और कठिनाई से अपनी लागत वसूल कर पाई।<ref>{{Cite web|url=https://www.hindustantimes.com/entertainment/bollywood/pati-patni-aur-woh-do-box-office-collection-day-2-ayushmann-khurrana-film-shows-spike-collects-over-9-crore-101778982831722.html|title=Pati Patni Aur Woh Do box office collection day 2: Ayushmann Khurrana film shows spike; collects over ₹9 crore|last=Nyayapati|first=Neeshita|date=17 May 2026|website=Hindustan Times|access-date=18 May 2026}}</ref> == कथानक == प्रजापति उपाख्य प्रजा एक वन विभाग का अधिकारी है, जो [[प्रयागराज]] में अपनी पत्नी अपर्णा के साथ रहता है। प्रजा का जीवन अस्त-व्यस्त हो जाता है जब अपर्णा यह समाचार देती है कि राजनेता गजराज तिवारी का पुत्र सनी एक मुस्लिम युवती से प्रेम-सम्बन्ध रख रहा है; छायाचित्रों में सनी किसी [[हिजाब]] धारिणी के साथ दिखाई दिया था। इस ख़बर से बनारस में एक लघु विवाद उत्पन्न होता है, और गजराज तथा अपर्णा दोनों उस युवती की पहचान के लिए आक्रामक रूप से खोज करते हैं। अपर्णा से अज्ञात, सनी की प्रेमिका चंचल है, जो प्रजा की बनारस-परिचित है। चंचल ने गुण्डों से अपनी पहचान छिपाने के लिए हिजाब धारण कर रखा था। यह जानकर कि अपर्णा की रपट ने यह गड़बड़ी उत्पन्न की है, प्रजा सहायता करने को तत्पर हो जाती है। प्रजा अपर्णा से कहता है कि वह कार्यवश कानपुर में है, और फिर चंचल के साथ बनारस के सार्वजनिक स्थलों पर दिखाई देता है। गजराज के गुण्डे उनके छायाचित्र खींच लेते हैं, परन्तु उन्हें विश्वास नहीं होता कि ये दोनों वास्तविक जोड़ी हैं, इसलिए वे उनका पीछा करते रहते हैं। खीझकर चंचल, प्रजा को बाध्य करती है कि वे प्रेमी-युगल बनकर एक सस्ते अतिथिगृह में कमरा लें। अतिथिगृह पर स्थानीय आरक्षी छापा मारती है और झूठी पहचान वाले सभी लोग बन्दी बना लिए जाते हैं। प्रयाग में, नीलोफ़र को प्रजा का एक संकट कालीन आह्वान मिलता है जिसमें वह जमानत का अनुरोध करता है। नीलोफ़र प्रजा की सहकर्मी और अपर्णा की मित्र है। वह प्रजा की जमानत तो करवा देती है, परन्तु उसकी ‘बेवफ़ाई’ की जानकारी अपर्णा को देने का वचन भी देती है। प्रजा नीलोफ़र के पीछे-पीछे अपना पक्ष समझाने का प्रयास करता है, परन्तु इस प्रक्रिया में वह अपर्णा द्वारा देख लिया जाता है, जो सनी की प्रेमिका के बारे में सुराग़ ढूँढ़ने बनारस आई हुई है। अपर्णा को विश्वास हो जाता है कि प्रजा उसे धोखा दे रहा है। घर लौटने पर, प्रजा को बनारस में एक जंगली वृक को पकड़ने का कार्य-भार सौंपा जाता है। वह नीलोफ़र और अपने दल के साथ आता है, और चंचल के साथ अन्तिम बार सार्वजनिक रूप से दिखता है। एक पारिवारिक विवाह समारोह में वह चंचल के साथ सगाई की घोषणा करता है, जिससे चंचल के परिवार में आनन्द छा जाता है। यह सूचना सनी तक पहुँचती है, जो चंचल के आशय पर सन्देह करने लगता है। वह प्रजा का अपहरण करके उससे पूछताछ करता है, परन्तु प्रजा के साथ एक शोभनीय-विपरीत स्थिति में पकड़ा जाता है, जिससे गजराज के गुण्डे यह अनुमान कर लेते हैं कि दोनों समलैंगिक हैं। वे यह समाचार गजराज तक पहुँचाते हैं, जो समझता है कि यदि यह बात सार्वजनिक हो गई तो उसकी राजनीतिक आकांक्षाएँ नष्ट हो जाएँगी। गजराज अब पूर्णतः आश्वस्त हो जाता है कि प्रजा ही वह रहस्यमयी ‘हिजाबधारी युवती’ था। अगले दिन, प्रजा, चंचल, अपर्णा और नीलोफ़र को गजराज के कृषिभवन में बन्दी बना लिया जाता है, और वह सनी से सम्पर्क करने का प्रयास करता है। सनी वास्तव में विमानतल पर होता है, योजनानुसार चंचल के साथ भागने की प्रतीक्षा में। यह देखकर कि वे एक वन के समीप हैं, प्रजा जंगली संसर्ग-ध्वनियाँ निकालने लगती है। अचानक वह जंगली वृक प्रकट होता है, उसके पीछे प्रजा का प्रशिक्षक-दल भी आ जाता है जो उसे पकड़ने के लिए नियुक्त है। कोलाहल मच जाता है, और प्रजा चंचल को लेकर विमानतल की ओर निकलकर भागता है। गजराज सनी को जाने से रोकने पहुँचता है, किन्तु प्रजा जब उसकी प्रतिष्ठा नष्ट करने की धमकी देता है तो वह मान जाता है। चंचल, प्रेमियों का पुनर्मिलन कराने के लिए प्रजा का धन्यवाद करती है, और अपर्णा उस पर व्यभिचार का सन्देह करने के लिए क्षमा माँगती है। == कलाकार == * [[आयुष्मान खुराना]] – प्रजापति पाण्डेय * [[सारा अली ख़ान]] – चंचल कुमारी, सनी की प्रेमिका * [[वामिका गब्बी]] – अपर्णा त्रिवेदी, प्रजापति की पत्नी * [[रकुल प्रीत सिंह]] – नीलोफ़र ख़ान, प्रजा और अपर्णा की मित्र * [[विजय राज़]] – धर्मवीर सिंह * [[तिग्मांशु धूलिया]] – गजराज तिवारी * [[विशाल वशिष्ठ]] – सुधांशु “सनी” तिवारी * गुनीत सिंह सोढी – सुरीन्दर * [[दुर्गेश कुमार]] – महीन्दर * [[आयशा रज़ा मिश्रा|आयशा रज़ा मिश्र]] – बुआ जी * शिरीष कुमार शर्मा – आशोक त्रिवेदी * [[दीपिका अमिन]] – भावना त्रिवेदी * राजवीर सिंह – महेश निगम, वन-अधिकारी == निर्माण == === विकास === २०२१ के अन्तिम भाग में, टी-सीरीज़ और बी॰ आर॰ स्टूडियोज़ ने २०१९ की पति पत्नी और वो की अनुवर्ती-कृति की घोषणा की।<ref name="CSRJournal">{{Cite web|url=https://thecsrjournal.in/ayushmann-khurrana-sara-ali-khans-pati-patni-aur-woh-do-gets-new-release-date/|title=Ayushmann Khurrana & Sara Ali Khan's 'Pati Patni Aur Woh Do' Gets New Release Date|date=8 February 2026|website=The CSR Journal|access-date=26 March 2026}}</ref> यद्यपि प्रथम चलचित्र में [[कार्तिक आर्यन]] मुख्य भूमिका में थे, निर्माताओं ने आयुष्मान खुराना के नेतृत्व वाले एक नवीन कलाकार-वर्ग के साथ कथा को पुनर्जीवित करने का निर्णय लिया।<ref name="BHDeets">{{Cite web|url=https://www.bollywoodhungama.com/news/bollywood/ayushmann-khurrana-starrer-pati-patni-aur-woh-gets-new-release-date-deets-inside/|title=Ayushmann Khurrana starrer Pati Patni Aur Woh Do gets new release date; deets inside|date=8 February 2026|website=Bollywood Hungama|access-date=26 March 2026}}</ref> निर्देशक मुदस्सर अज़ीज़ इस परियोजना के सञ्चालन हेतु लौटे और उन्होंने इसे “अधिक प्रक्षुब्ध पारिस्थितिक हास्य” से युक्त “आध्यात्मिक उत्तराधिकारी” बताया।<ref name="TOIPostponed2">{{Cite news|url=https://timesofindia.indiatimes.com/entertainment/hindi/bollywood/news/pati-patni-aur-woh-do-postponed-ayushmann-khurrana-sara-ali-khan-starrer-to-now-release-in-may-2026/articleshow/128067843.cms|title='Pati Patni Aur Woh Do' postponed; Ayushmann Khurrana, Sara Ali Khan starrer to now release in May 2026|date=8 February 2026|work=[[The Times of India]]|access-date=26 March 2026}}</ref> === चित्रांकन === [[प्रिंसिपल फोटोग्राफी|मुख्य चित्रांकन]] वर्ष २०२५ के समय उत्तर भारत के विभिन्न स्थलों पर सम्पन्न हुआ, जिसमें [[प्रयागराज]] का एक महत्त्वपूर्ण कार्यकाल सम्मिलित था।<ref name="IndiaTodayDate">{{Cite web|url=https://www.indiatoday.in/movies/bollywood/story/ayushmann-khurrana-sara-ali-khan-pati-patni-aur-woh-do-gets-new-release-date-2865005-2026-02-08|title=Ayushmann Khurrana Sara Ali Khan Pati Patni Aur Woh Do gets new release date|date=8 February 2026|website=[[India Today]]|access-date=26 March 2026}}</ref> २०२५ के अन्त में एक बाह्य-चित्रांकन के समय चलचित्र-दल और स्थानीय निवासियों के बीच विवाद के कारण निर्माण में अल्प विघ्न उत्पन्न हुआ।<ref name="CinemaExpress">{{Cite web|url=https://www.cinemaexpress.com/hindi/news/2026/Feb/08/ayushmann-khurrana-wamiqa-gabbi-and-sara-ali-khan-starrer-pati-patni-aur-woh-do-release-pushed|title=Ayushmann Khurrana, Wamiqa Gabbi and Sara Ali Khan starrer Pati Patni Aur Woh Do release pushed|date=8 February 2026|website=Cinema Express|access-date=26 March 2026}}</ref> फ़रवरी २०२६ तक, चलचित्र चित्र-पश्चात् कार्य के अन्तिम चरण में है तथा केवल एक अन्तिम गीत-अनुक्रम का चित्रांकन शेष है।<ref name="BHDeets2">{{Cite web|url=https://www.bollywoodhungama.com/news/bollywood/ayushmann-khurrana-starrer-pati-patni-aur-woh-gets-new-release-date-deets-inside/|title=Ayushmann Khurrana starrer Pati Patni Aur Woh Do gets new release date; deets inside|date=8 February 2026|website=Bollywood Hungama|access-date=26 March 2026}}</ref> == संगीत == चलचित्र का संगीत [[राजेश रोशन]], [[रोचक कोहली]], [[तनिष्क बागची]], [[नीलकमल सिंह]], [[टोनी कक्कड़]], [[बादशाह (गायक)|बादशाह]] तथा देव सदाना ने रचा है और गीत [[इन्दीवर]], कुमार, [[कुनाल वर्मा]], बादशाह, नीलकमल सिंह एवं अरसलान निज़ामी ने लिखे हैं। प्रथम गीत “रूप दी रानी”, सन् १९९० की चलचित्र बहार आने तक के गीत “काली तेरी चोटी है परान्दा” का पुनर्निर्माण था, जिसे अनुराधा पौडवाल और मंगल सिंह ने गाया था, संगीत राजेश रोशन ने दिया था और गीत इन्दीवर ने लिखे थे; यह २२ अप्रैल २०२६ को जारी किया गया।<ref>{{Cite web|url=https://www.freepressjournal.in/entertainment/roop-di-rani-from-pati-patni-aur-woh-do-out-ayushmann-wamiqa-sara-rakul-dance-their-heart-out-in-this-entertaining-recreated-song-watch|title=Roop Di Rani From Pati Patni Aur Woh Do Out: Ayushmann, Wamiqa, Sara & Rakul Dance Their Heart Out In This Entertaining Recreated Song|date=22 April 2026|work=First Press Journal|access-date=5 May 2026}}</ref> दूसरा गीत “दिल वाले चोर” २५ अप्रैल २०२६ को जारी हुआ। तीसरा गीत, देव्व सदाना के “दिल लगाना मना था” का पुनर्सृजन, “हमने वहीं लगाया दिल” के रूप में ६ मई २०२६ को आया।<ref>{{Cite web|url=https://www.news18.com/movies/bollywood/pati-patni-aur-woh-do-ayushmann-khurrana-wamiqa-gabbi-and-others-shine-in-song-humne-wahin-lagaya-dil-ws-l-10077452.html|title=Pati Patni Aur Woh Do: Ayushmann Khurrana, Wamiqa Gabbi And Others Shine In Song Humne Wahin Lagaya Dil|date=8 May 2026|work=News18|access-date=10 May 2026}}</ref> चौथा गीत “अँगड़ाई” ९ मई २०२६ को जारी हुआ।<ref>{{Cite web|url=https://www.bollywoodhungama.com/videos/movie-songs/angdayi-song-pati-patni-aur-woh-do-ayushmann-khurrana-rakul-preet-singh-tanishk-faheem-arslan-zahrah-2/|title=Angdayi (Song) &#124; Pati Patni Aur Woh Do &#124; Ayushmann Khurrana &#124; Rakul Preet Singh &#124; Tanishk &#124; Faheem &#124; Arslan &#124; Zahrah|last=Hungama|first=Bollywood}}</ref> == प्रदर्शन == यह चलचित्र मूलतः ४ मार्च २०२६ को होली-पर्व के अवसर पर प्रदर्शित होने वाली थी।<ref name="TV9Hindi">{{Cite web|url=https://www.tv9hindi.com/entertainment/bollywood-news/ayushmann-khurrana-pati-patni-aur-woh-do-all-set-to-release-on-15th-may-2026-3679602.html|title=Ayushmann Khurrana Pati Patni Aur Woh Do all set to release on 15th May 2026|date=8 February 2026|website=TV9 Bharatvarsh|language=hi|access-date=26 March 2026}}</ref> ८ फ़रवरी २०२६ को निर्माताओं ने घोषणा की कि मार्च में भीड़-भरे प्रदर्शन-काल तथा निर्माण-विलम्ब से बचने के लिए चलचित्र का विमोचन स्थगित कर १५ मई २०२६ किया गया है।<ref name="BMS">{{Cite web|url=https://in.bookmyshow.com/movies/pati-patni-aur-woh-do/ET00485890|title=Pati Patni Aur Woh Do (2026) - Movie &vert; Release Date|website=BookMyShow|access-date=26 March 2026}}</ref><ref name="TimesNow">{{Cite web|url=https://www.timesnowhindi.com/entertainment/bollywood/pati-patni-aur-woh-do-ayushmann-khurrana-starrer-get-new-release-date-article-153583320|title=Pati Patni Aur Woh Do: Release date of Ayushmann Khurrana starrer changed|date=9 February 2026|website=Times Now Hindi|language=hi|access-date=26 March 2026}}</ref><ref name="Jagran">{{Cite web|url=https://www.jagran.com/entertainment/bollywood-pati-patni-aur-woh-do-release-date-out-ayushmann-khurrana-sara-ali-khan-wamiqa-gabbi-rakul-preet-singh-40135306.html|title=Ayushmann Khurrana's Pati Patni Aur Woh Do Release Date Out|date=8 February 2026|website=[[Dainik Jagran]]|language=hi|access-date=26 March 2026}}</ref> == प्रतिक्रिया == द इंडियन एक्सप्रेस के लिए लिखते हुए शालिनी लैंगर ने ५ में से १.५ तारा देते हुए कहा कि “यह चलचित्र सभी कुछ ऐसे आधुनिकता के आवरण में प्रस्तुत करती है जो नौकरी करने वाली स्त्रियों की, खुले सम्बन्धों वाली स्त्रियों की परिकल्पना तो कर सकता है, किन्तु ऐसी स्त्री की कल्पना नहीं कर सकता जिसका जीवन पुरुष के इर्द-गिर्द न घूमता हो।”<ref>{{cite web|url=https://indianexpress.com/article/entertainment/movie-review/pati-patni-aur-woh-do-movie-review-ayushmann-khurranas-chaotic-film-has-more-confusion-less-comedy-10690959/|title=Pati Patni Aur Woh Do movie review: Ayushmann Khurrana's chaotic film has more confusion, less comedy|last=Langer|first=Shalini|date=15 May 2026|website=The Indian Express}}</ref> द हॉलीवुड रिपोर्टर इण्डिया के राहुल देसाई ने इसे “आपत्तिजनक होने के लिए अत्यधिक अहास्य” बताया।<ref>{{cite web|url=https://www.hollywoodreporterindia.com/reviews/theatrical/pati-patni-aur-woh-do-movie-review-this-is-no-laughing-matter|title='Pati Patni Aur Woh Do' Movie Review: This Is No Laughing Matter|last=Desai|first=Rahul|date=15 May 2026|website=The Hollywood Reporter India}}</ref> हिन्दुस्तान टाइम्स के ऋषभ सूरी ने ३.५ तारा दिए और कहा कि “पति पत्नी और वो दो अपनी पैनी पटकथा और सशक्त अभिनय से सफ़ल होती है।”<ref>{{cite web|url=https://www.hindustantimes.com/entertainment/bollywood/pati-patni-aur-woh-do-review-spririted-ayushmann-khurrana-sara-wamiqa-rakul-preet-make-this-comedy-work-101778834090676.html|title=Pati Patni Aur Woh Do review: Spririted Ayushmann Khurrana, Sara, Wamiqa, Rakul Preet make this comedy work|last=Suri|first=Rishabh|date=15 May 2026|website=Hindustan Times}}</ref> द हिन्दू के अनुज कुमार ने टिप्पणी की कि “आयुष्मान खुराना एक ऐसे प्रहसन-प्रधान वैवाहिक हास्य को सँभालते हैं जो सब कुछ दीवार पर उछालता है।”<ref>{{cite web|url=https://www.thehindu.com/entertainment/movies/pati-patni-aur-woh-do-movie-review-the-perils-of-excess/article70983206.ece|title='Pati Patni Aur Woh Do' movie review: The perils of excess|last=Kumar|first=Anuj|date=15 May 2026|website=The Hindu}}</ref> इण्डिया टुडे की विनीता कुमार ने ५ में से ३ तारा दिए और लिखा कि “यह चलचित्र हल्की-फुल्की और जनता को लुभाने वाली बनी रहती है तथा किसी गम्भीर बात को कहने से बचती है — एक स्वच्छ, सहज मनोरंजक।”<ref>{{cite web|url=https://www.indiatoday.in/movies/reviews/story/pati-patni-aur-woh-do-review-ayushmann-khurrana-film-is-funny-harmless-and-comfortably-paisa-vasool-2912221-2026-05-15|title=Pati Patni Aur Woh Do review: Funny, harmless and comfortably paisa vasool|last=Kumar|first=Vineeta|date=15 May 2026|website=India Today}}</ref> स्क्रॉल.इन की नन्दिनी रामनाथ ने अपनी समीक्षा में लिखा, “पति पत्नी और वो दो में अज़ीज़ और सह-लेखक रवि कुमार कभी-कभी पूर्वाग्रह और क्षुद्रता पर व्यंग्य करने में सफल रहते हैं। जाति, धर्म अथवा यौनिकता पर आधारित पक्षपात को छेदना, चाहे वह जितना भी कम क्रान्तिकारी प्रतीत हो, इस बात से अधिक मनोरञ्जक है कि मनुष्यों को मुर्ग़ियों की भाँति चिल्लाते और भागते देखा जाए।”<ref>{{cite web|url=https://scroll.in/reel/1092745/pati-patni-aur-woh-do-review-comedy-of-errors-struggles-to-raise-the-laughs|title='Pati Patni Aur Woh Do' review: Comedy of errors struggles to raise the laughs|last=Ramnath|first=Nandini|date=15 May 2026|website=Scroll.in}}</ref> फ़र्स्टपोस्ट के विनम्र माथुर ने २/५ तारा देते हुए कहा, “यह बेवफ़ाई की कथा नहीं है, परन्तु भ्रम-प्रहसन भी नहीं है। यह लगभग भय-प्रहसन बनने की स्थिति तक पहुँच जाती है।”<ref>{{cite web|url=https://www.firstpost.com/entertainment/pati-patni-aur-woh-do-movie-review-ayushmann-khurrana-sara-ali-khan-rakul-preet-singh-try-to-salvage-this-comedy-of-terrors-14011693.html|title='Pati Patni Aur Woh Do' Movie Review: Ayushmann Khurrana, Sara Ali Khan, Rakul Preet Singh try to salvage this comedy of (t)errors|last=Mathur|first=Vinamra|date=15 May 2026|website=Firstpost}}</ref> फ़िल्मफ़ेयर के देवेश शर्मा ने ५ में से ३ तारा देकर कहा, “अपने सर्वोत्तम क्षणों में पति पत्नी और वो दो में उस जीवन्त मध्यवर्गीय प्रहसन की झलक मिलती है जो वह बनना चाहती है। किन्तु पटकथा अत्यधिक बिखरी रहती है, स्वर-परिवर्तन अत्यधिक आकस्मिक हैं और हास्य पूर्णतः एकरस न हो सकने के कारण चलचित्र पूर्णतः प्रभाव नहीं छोड़ पाती।”<ref>{{cite web|url=https://www.filmfare.com/news/bollywood/pati-patni-aur-woh-do-review-loud-comedy-of-errors-83919.html|title=Pati Patni Aur Woh Do Review: Loud Comedy of Errors|last=Sharma|first=Devesh|date=15 May 2026|website=Filmfare}}</ref> बॉलीवुड हंगामा ने ३/५ तारा दिए और कहा, “समग्रतः, पति पत्नी और वो दो एक शालीन व्यावसायिक मनोरञ्जक है जो अपने कथानक और उन्मादकारी अन्तिम दृश्य के कारण कारगर सिद्ध होती है।”<ref>{{cite web|url=https://www.bollywoodhungama.com/movie/pati-patni-aur-woh-do/critic-review/pati-patni-aur-woh-do-movie-review/pati-patni-aur-woh-do-is-a-decent-commercial-entertainer/|title=Pati Patni Aur Woh Do Movie Review: PATI PATNI AUR WOH DO is a decent commercial entertainer.|date=15 May 2026|website=Bollywood Hungama}}</ref> == सन्दर्भ == {{Reflist}} == बाह्य कड़ियाँ == * {{आईएमडीबी शीर्षक|33054858}} * {{Bollywoodhungama|pati-patni-aur-woh-do}} [[श्रेणी:टी-सीरीज़ की फ़िल्में]] [[श्रेणी:भारतीय रोमांटिक कॉमेडी फ़िल्में]] [[श्रेणी:भारतीय सीक्वल फ़िल्में]] [[श्रेणी:Articles with hAudio microformats]] [[श्रेणी:2026 की फ़िल्में]] dydc7fwpyi44kpl3zdr01qqd1iad8sy यातना शिविर 0 1616012 6586762 6582506 2026-07-17T15:58:11Z अमर तिवारी 932885 /* इतिहास */ नाज़ी शिविर जोड़ा 6586762 wikitext text/x-wiki [[चित्र:Boercamp1.jpg|अंगूठाकार|270x270पिक्सेल|दक्षिण अफ़्रीका में [[द्वितीय बोअर युद्ध]] यातना शिविर में [[बोअर]] महिलाएँ और बच्चे (1899–1902) ]] '''यातना शिविर''' एक प्रकार का [[कारावास]] होता है जहाँ [[राजनीतिक बँधुआ|राजनीतिक बँधुओं]] या [[अल्पसंख्यक|अल्पसंख्यकों]] को [[बेगार]] करवाने या मारने के लिए रखा जाता है। यातना शिविरों के ख्यात उदाहरणों में से [[नाज़ी यातना शिविर]], [[बोअर यातना शिविर]], [[द्वितीय विश्वयुद्ध]] के दौरान अमेरिका द्वारा जर्मन, इतालवी और जापानी अमेरिकियों की नज़रबंदी, और सोवियत [[गुलाग]] हैं। == इतिहास == === रूसी शिविर === {{main|गुलाग}} [[चित्र:Vorkuta.jpg|अंगूठाकार|[[वोर्कुतलाग]], एक बड़े [[गुलाग]], के एक उपशिविर का दंड कक्ष, 1945]] [[रूसी साम्राज्य]] में अपराधों के लिए [[निर्वासन]] और [[बेगार]] के दंड सुनाए जाते थे। सबसे बड़े अपराधों के लिए दिए गए दंड की श्रेणी [[कातांगा प्रान्त|कातोर्गा]] थी, जो श्रम शिविर कारावास के समान था। इतिहासकार [[ऐन ऐपलबॉम]] के अनुसार, कातोर्गा कोई आम दंड नहीं था; 1906 को लगभग 6,000 कातोर्गा अपराधी पहले से ही दंड काट रहे थे, और 1916 में 28,600 ऐसे अपराधी थे।<ref>Applebaum, Anne. ''Gulag: A History.'' Anchor, 2004, pp. xxxi</ref> रूसी गृहयुद्ध के समय, [[लेनिन]] और [[बोलशेविक पार्टी|बोलशेविक]] ने "विशेष" कारावास शिविरों की स्थापना की, जो [[चेका]] के प्राधिकरण में था।<ref>Applebaum, Anne. "Gulag: A History". Anchor, 2003, pp. 12</ref><ref>The Lost Literature of Socialism, [[George Watson (scholar)|George Watson]]</ref> लेनिन की योजना के अनुसार, इन शिविरों का अलग मक़सद था।<ref>Applebaum, Anne. "Gulag: A History". Anchor, 2003, pp. 5</ref> [[प्रथम विश्व युद्ध|प्रथम विश्वयुद्ध]] के बाद वाले चरम स्थितियाँ हेतु, इनमें युद्ध बँधुओं को रखा गया था।<ref>{{cite book|url=https://books.google.com/books?id=z23IBgAAQBAJ&dq=lenin+concentration+camps+stalinist+obviously&pg=PA512|title=Reconstructing Lenin: An Intellectual Biography|last1=Krausz|first1=Tamás|date=27 February 2015|publisher=NYU Press|isbn=978-1-58367-449-9|page=512|language=en}}</ref> 1929 को, अपराधी और राजनीतिक बँधुओं की श्रेणीकरण को विस्थापित किया गया,<ref>Applebaum, Anne. ''Gulag: A History.'' Anchor, 2003, pp. 50.</ref> शिविरों का प्राधिकरण [[संयुक्त राज्य राजनीतिक निदेशालय]] को दिया गया, और उनका विस्तार उस हद तक किया गया कि वे सोवियत अर्थव्यवस्था का बड़ा भाग बन गए।<ref name="Ellman">{{cite journal|last=Ellman|first=Michael|year=2002|title=Soviet Repression Statistics: Some Comments|url=http://sovietinfo.tripod.com/ELM-Repression_Statistics.pdf|journal=Europe-Asia Studies|volume=54|issue=2|pages=1151–1172|doi=10.1080/0966813022000017177|s2cid=43510161|access-date=14 August 2011}}</ref> इस गुलाग प्रणाली में कई सौ<ref>{{Cite web|url=https://www.britannica.com/place/Gulag|title=Gulag {{!}} Definition, History, Prison, & Facts|date=2024-06-21|website=Britannica|language=en|access-date=2024-07-15}}</ref> शिविर थे तथा 1929 से 1953 तक 1.8 करोड़ लोगों को यहाँ रखा गया था।<ref name="Applebaum">{{Cite web|url=https://www.pulitzer.org/winners/anne-applebaum|title=Gulag: A History, by Anne Applebaum (Doubleday)|date=2004|publisher=The Pulitzer Prizes|access-date=2019-11-13}}</ref> [[ख़ुरुश्चेव पिघल]] के दौरान, गुलाग अपने आकार के एक चौथाई तक सिकुड़ गया और सोवियत समाज में उसका महत्त्व भी घटा।<ref>Marc Elie. Khrushchev's Gulag: the Soviet Penitentiary System after Stalin's death, 1953-1964. Denis Kozlov et Eleonory Gilburd. ''[https://hal.science/hal-00859338/ The Thaw: Soviet Society and Culture during the 1950s and 1960s]'', Toronto University Press, pp.109-142, 2013, 978-1442644601. ⟨hal-00859338⟩</ref> === नाज़ी शिविर === {{main|नाज़ी यातना शिविर}} [[File:Buchenwald Slave Laborers Liberation.jpg|thumb|[[बूख़नवाल्ड यातना शिविर]] में यहूदी बेगारी, 16 अप्रैल 1945]] 1933 को जब [[नाज़ी जर्मनी|नाज़ियों]] सत्ता में आए, उन्होंने राजनीतिक बँधुओं, ख़ासकर [[जर्मनी साम्यवादी दल|साम्यवादियों]] और [[जर्मनी समाजिक लोकतांत्रिक दल|समाजिक लोकतंत्रवादियों]], के लिए अनेक यातना शिविर स्थापित किया।<ref>White, Joseph Robert (2009). "Introduction to the Early Camps". Early Camps, Youth Camps, and Concentration Camps and Subcamps under the SS-Business Administration Main Office (WVHA). ''Encyclopedia of Camps and Ghettos, 1933–1945''. Vol. 1. Indiana University Press. pp. 3–16. {{ISBN|978-0-253-35328-3}}.</ref> उस वर्ष के अंत बँधुओं को रिहा कर दिया गया, और 1936 तक शिविरों की जनसंख्या घटने लगी। 1937 को नाज़ियों ने हज़ारों "असमाजिकों" को गिरफ़्तार किया, जिनमें से [[रोमा (लोग)|रोमानी]], बेघर, मानसिक रोगी, तथा अवज्ञाकारी शामिल थे। 1938 से [[यहूदी|यहूदियों]] उनके सबसे बड़े निशाने थे। द्वितीय विश्वयुद्ध की शुरुआत से, शिविरों का विस्तार किया गया और उन्हें अधिक घातक बनाया गया।<ref>[[Nikolaus Wachsmann|Wachsmann, Nikolaus]] (2009). "The Dynamics of Destruction: The Development of the Concentration Camps, 1933–1945". In Jane Caplan; Nikolaus Wachsmann (eds.). ''Concentration Camps in Nazi Germany: The New Histories''. Routledge. pp. 17–43. {{ISBN|978-1-135-26322-5}}.</ref> अपने चरम पर, नाज़ी यातना शिविर प्रणाली में 15,000 शिविर<ref name="jewishvirtuallibrary1">{{cite web|url=https://www.jewishvirtuallibrary.org/jsource/Holocaust/cclist.html|title=Concentration Camp Listing|publisher=Editions Kritak|location=Belgium|quote=Sourced from Van Eck, Ludo ''Le livre des Camps''}} and {{cite book|title=Atlas of the Holocaust|author=Gilbert, Martin|publisher=William Morrow|year=1993|isbn=0-688-12364-3|location=New York}}. In this online site are the names of 149 camps and 814 subcamps, organized by country.</ref> और कम से कम 7,15,000 बँधुए थे।<ref>{{cite book|title=The Third Reich in Power|last=Evans|first=Richard J.|publisher=Penguin Group|year=2005|isbn=978-0-14-303790-3|location=New York}}</ref> लगभग 16.5 लाख लोगों को शिविरों में भेजा गया, जिनमें से लगभग दस लाख की मृत्यु कारावास के दौरान हुई। == गैलरी == <gallery mode="packed" heights="115" style="font-size:88%;line-height:120%"> चित्र:Herero_Nama_Shark_Island_Death_Camp_Lieutenant_von_Durling_05.jpg|[[शार्क आइलैंड यातना शिविर]] में बँधुओं के साथ लेफ़्टिनेंट फ़ॉन डुर्लिंग चित्र:Armrefugees.jpg|[[आर्मीनियाई नरसंहार]] के समय [[देर अज़-ज़ोर शिविर|देर अज़-ज़ोर]] में एक मरे घोड़े के पास आर्मीनियाई शरणार्थी चित्र:Tampere_prison_camp_women.jpg|[[फ़िनिश गृहयुद्ध]] की शुरुआत के कई महीनों बाद, [[ताम्पेरे शिविर]] में महिलाएँ, 1918 चित्र:Boven-Digoel.jpg|[[बोवन-डिगोल यातना शिविर]] में भेजे गए इंडोनेशियाई बँधुए, 1927 चित्र:The_fence_at_the_old_GULag_in_Perm-36.JPG|[[गुलाग]] पेर्म-36 का [[बाड़]], 1943 को खोला गया चित्र:Auschwitz_Resistance_280_cropped.jpg|[[आउशवित्स यातना शिविर]] के [[गैस कक्ष|गैस कक्षों]] में बँधुओं के मारने बाद उनके शरीरों को जलाए जा रहे हैं चित्र:Ustaše_militia_execute_prisoners_near_the_Jasenovac_concentration_camp.jpg|[[यासेनोवात्स यातना शिविर]] के पास [[उस्ताशे]] सैनिक बँधुओं को मारते चित्र:"Persons_of_Japanese_ancestry_arrive_at_the_Santa_Anita_Assembly_Center_from_San_Pedro._Evacuees_lived_at_this_center_at_-_NARA_-_539960.jpg|जापानी-अमेरिकियों के लिए [[मैनज़नार]] नज़रबंदी शिविर, 1942 चित्र:Japanese_internment_camp_in_British_Columbia.jpg|ब्रिटिश कोलम्बिया में जापानी-कनाडाइयों के लिए नज़रबंदी शिविर चित्र:New_Village_in_Malaya,_1950s.jpg|[[नया गाँव|नए गाँव]] का एक मॉडल, [[मलायाई आपातकाल]] (1948–1960) के समय इन्हें चीनी मलेशियाइयों और साम्यवादियों को अलग करने के लिए बनाया गया था चित्र:Photo_de_l'infirmerie_et_des_locaux_disiplinaire_du_camp_de_Thol.jpg|काँ द तोल, [[अल्जीरियाई युद्ध]] के समय अल्जीरियाइयों के लिए फ़्रांसीसी यातना शिविर<ref>{{Cite journal|last=Arthur Grosjean|date=10 March 2014|title=Internement, emprisonnement et guerre d'indépendance algérienne en métropole : l'exemple du camp de Thol (1958-1965)|url=http://journals.openedition.org/criminocorpus/2676|journal=Criminocorpus. Revue d'Histoire de la justice, des crimes et des peines|language=fr|doi=10.4000/criminocorpus.2676|s2cid=162123460|archive-url=https://web.archive.org/web/20221107072404/https://journals.openedition.org/criminocorpus/2676|archive-date=7 November 2022|access-date=7 November 2022}}</ref> चित्र:Manjača_Camp.jpg|[[मान्याचा शिविर]] में [[बोस्नियाक]] बँधुए चित्र:Xinjiang_Internment_Map,_US-Aus_Gov_Assessment.jpg|चीन में शिनजियांग नज़रबंदी शिविरों का मानचित्र </gallery> == यह भी देखें == * [[श्रम शिविर]] * [[गुलाग]] * [[नया गाँव]] * [[लाओगाई]] == संदर्भ == {{Reflist}} 9vf6aw3ti1idlawartsjrbarbodh91c अभिदीप चौधरी 0 1616089 6586927 6585442 2026-07-17T19:16:28Z Captain sparrow199 824241 पद का नाम सुधारा 6586927 wikitext text/x-wiki {{ज्ञानसन्दूक व्यक्ति|name=अभिदीप चौधरी|image=|occupation=हेपेटो-पैंक्रियाटो-बिलियरी (एचपीबी) एवं लिवर प्रत्यारोपण शल्य चिकित्सक|education=MBBS, MS, FACS, FRCS (Glasgow), Multiorgan Transplant Surgery Fellowship (Pittsburgh, USA)|known_for=}} '''अभिदीप चौधरी''' एक भारतीय हेपेटोपैन्क्रिएटोबिलियरी (एचपीबी) एवं लिवर प्रत्यारोपण सर्जन हैं।<ref>{{Cite web |title=दिल्ली के 7 प्रसिद्ध लिवर ट्रांसप्लांट सर्जन, जानिए किस डॉक्टर की किस क्षेत्र में है विशेषज्ञता |url=https://hindi.news18.com/photogallery/lifestyle/health-delhi-top-7-liver-transplant-surgeons-expert-doctors-and-specialist-local18-ws-l-9754262.html |website=News18 हिन्दी |language=hi |access-date=16 July 2026 }}</ref> वे नई दिल्ली स्थित बीएलके-मैक्स सुपर स्पेशलिटी अस्पताल में हेपाटो-पैंक्रियाटो-बिलियरी (एचपीबी) सर्जरी एवं लिवर प्रत्यारोपण विभाग के चेयरमैन तथा विभागाध्यक्ष हैं। इसके अतिरिक्त, वे लिवर ट्रांसप्लांटेशन सोसाइटी ऑफ इंडिया (एलटीएसआई) के अध्यक्ष-निर्वाचित हैं। यह संस्था लिवर प्रत्यारोपण के क्षेत्र में शिक्षा, अनुसंधान और व्यावसायिक सहयोग को बढ़ावा देती है<ref>{{Cite web|url=https://www.newindianexpress.com/nation/2025/Nov/22/india-becomes-leading-nation-in-living-donor-liver-transplantation|title=India becomes leading nation in living donor liver transplantation|last=Srivastava|first=Ashish|date=2025-11-22|website=The New Indian Express|language=en|access-date=2025-11-24}}</ref><ref>{{Cite web|url=https://www.theweek.in/wire-updates/national/2025/11/22/des64-health-liver-transplants-experts.html|title=India a leader in living-donor liver transplants due to infra regulatory oversight Experts- The Week|website=www.theweek.in|access-date=2025-11-24}}</ref><ref>{{Cite news|url=https://www.maxhealthcare.in/doctor/abhideep-chaudhary|title=Dr. Abhideep Chaudhary - Liver Transplant and Biliary Sciences, Book Online Appointment, Video Consultation, Check OPD Timings, View Fees {{!}} Max Hospital|access-date=2025-11-24|archive-url=http://web.archive.org/web/20231111144109/https://www.maxhealthcare.in/doctor/abhideep-chaudhary|archive-date=2023-11-11|language=en-us}}</ref><ref>{{Cite web|url=https://www.tribuneindia.com/news/amritsar/paediatric-liver-transplant-is-a-challenge/|title=Paediatric liver transplant is a challenge|website=The Tribune|language=en|access-date=2025-11-24}}</ref> == प्रारंभिक जीवन और करियर == अभिदीप चौधरी ने एमबीबीएस तथा एमएस (जनरल सर्जरी) की शिक्षा प्राप्त की। इसके बाद उन्होंने संयुक्त राज्य अमेरिका के यूनिवर्सिटी ऑफ पिट्सबर्ग मेडिकल सेंटर स्थित थॉमस स्टार्ज़ल ट्रांसप्लांटेशन इंस्टीट्यूट से मल्टीऑर्गन ट्रांसप्लांट सर्जरी में फेलोशिप की। बाद में उन्होंने सर गंगा राम अस्पताल, नई दिल्ली तथा जयपी अस्पताल, नोएडा में हेपेटोबिलियरी एवं लिवर प्रत्यारोपण सर्जरी के क्षेत्र में कार्य किया। वर्ष 2019 से वे बीएलके-मैक्स सुपर स्पेशियलिटी अस्पताल, नई दिल्ली में एचपीबी सर्जरी एवं लिवर प्रत्यारोपण विभाग के प्रमुख हैं।<ref>{{Cite web|url=https://www.maxhealthcare.in/doctor/abhideep-chaudhary|title=Dr. Abhideep Chaudhary|website=Max Healthcare}}</ref> मार्च 2018 में उन्होंने एक 18 माह की बच्ची का सफल लिवर प्रत्यारोपण किया, जिसमें उसकी माता ने जीवित दाता के रूप में लिवर का एक भाग दान किया। इस मामले को ''द हिन्दू'' ने प्रमुखता से प्रकाशित किया।<ref>{{Cite news|url=https://www.thehindu.com/news/cities/Delhi/mother-gives-new-lease-of-life-to-daughter/article22954182.ece|title=Mother gives new lease of life to daughter|date=6 March 2018|work=The Hindu}}</ref> इसी वर्ष उन्होंने किर्गिस्तान से आए दो भाई-बहनों के बीच जीवित दाता लिवर प्रत्यारोपण का सफल नेतृत्व किया। इस शल्यक्रिया को ''द हिन्दू'' तथा ''द टाइम्स ऑफ इंडिया'' में प्रकाशित किया गया।<ref>{{Cite news|url=https://www.thehindu.com/news/cities/Delhi/kyrgyzstan-youth-gives-sibling-a-second-chance-at-life/article24274700.ece|title=Kyrgyzstan youth gives sibling a second chance at life|date=27 June 2018|work=The Hindu}}</ref> == जनस्वास्थ्य जागरूकता == अभिदीप चौधरी यकृत स्वास्थ्य (लिवर हेल्थ) के प्रति जन-जागरूकता बढ़ाने के लिए नियमित रूप से सार्वजनिक अभियानों और मीडिया संवादों में भाग लेते रहे हैं। वर्ष 2025 में उन्होंने दिल्ली में हेपेटाइटिस ए एवं ई के बढ़ते मामलों को लेकर लोगों को स्वच्छता, सुरक्षित पेयजल, समय पर टीकाकरण तथा शीघ्र जांच के प्रति जागरूक रहने की सलाह दी। उन्होंने बताया कि मानसून के दौरान वायरल हेपेटाइटिस के मामलों में उल्लेखनीय वृद्धि देखी गई है और समय पर उपचार से गंभीर जटिलताओं को रोका जा सकता है।<ref>{{Cite web|url=https://www.indiatoday.in/health/story/hepatitis-india-monsoon-spike-vaccines-hygiene-unsafe-medical-practices-2762375-2025-07-28|title=Hepatitis in India: A preventable disease still claiming lives|website=India Today|language=en|access-date=16 July 2026}}</ref><ref>{{Cite web|url=https://www.newindianexpress.com/cities/delhi/2025/Jul/29/opds-full-with-hepatitis-a-e-cases-as-monsoon-picks-pace|title=OPDs full with Hepatitis A, E cases as monsoon picks pace|website=The New Indian Express|access-date=16 July 2026}}</ref> विश्व लिवर दिवस तथा अन्य स्वास्थ्य अभियानों के दौरान चौधरी ने युवाओं में ऊर्जा पेय (एनर्जी ड्रिंक), अत्यधिक चीनी वाले पेय तथा शराब के बढ़ते सेवन को लिवर रोगों का प्रमुख कारण बताया। उन्होंने कहा कि अस्वास्थ्यकर जीवनशैली और इन पेयों के अत्यधिक सेवन से फैटी लिवर तथा गंभीर यकृत रोगों का खतरा बढ़ सकता है, और गंभीर स्थिति में लिवर प्रत्यारोपण की आवश्यकता पड़ सकती है।<ref>{{Cite web|url=https://ddnews.gov.in/energy-drinks-are-emerging-as-a-new-cause-of-liver-damage-among-youth/|title=Energy drinks are emerging as a new cause of liver damage among youth|website=DD News|access-date=16 July 2026}}</ref><ref>{{Cite web|url=https://www.amarujala.com/lifestyle/fitness/india-leads-in-living-donor-liver-transplants-worldwide-who-need-liver-transplant-2025-11-23|title=India leads in living donor liver transplants worldwide|website=Amar Ujala|language=hi|access-date=16 July 2026}}</ref><ref>{{Cite web|url=https://www.jagran.com/news/national-world-liver-day-how-to-take-care-of-liver-amidst-increasing-diseases-experts-gave-special-tips-23921398.html|title=World Liver Day: How to take care of liver amidst increasing diseases|website=Dainik Jagran|language=hi|access-date=16 July 2026}}</ref><ref>{{Cite web|url=https://hindi.news18.com/photogallery/lifestyle/health-energy-drinks-are-more-dangerous-than-alcohol-rum-tequila-liver-deteriorating-fast-in-youths-towards-liver-transplant-say-doctors-2-10398434.html|title=Energy drinks are more dangerous than alcohol, say doctors|website=News18 हिन्दी|language=hi|access-date=16 July 2026}}</ref><ref>{{Cite web|url=https://www.etvbharat.com/hi/state/india-becomes-the-highest-number-of-living-donor-liver-transplants-in-the-world-delhi-news-dls25112203673|title=भारत जीवित दाता लिवर प्रत्यारोपण में विश्व में अग्रणी बना|website=ETV Bharat|language=hi|access-date=16 July 2026}}</ref> == संदर्भ == <references /> [[श्रेणी:जन्म वर्ष अज्ञात (जीवित लोग)]] [[श्रेणी:जीवित लोग]] [[श्रेणी:Articles with hCards]] t8gq4whnkt3wmqgrs3tjx6r4h72rbr9 विजय जे. दर्डा 0 1616090 6586914 6586720 2026-07-17T18:21:13Z चाहर धर्मेंद्र 703114 6586914 wikitext text/x-wiki {{db-test|help=off}} '''विजय जवाहरलाल दर्डा''' (जन्म 14 मई 1950) इंडियन नेशनल कांग्रेस पार्टी के एक राजनेता हैं। वे 1998 से राज्यसभा में महाराष्ट्र का प्रतिनिधित्व करते हुए भारत की संसद के सदस्य रहे हैं और लगातार तीन बार भारतीय संसद के उच्च सदन के लिए चुने गए हैं। वे लोकमत मीडिया ग्रुप के चेयरमैन हैं<ref>{{Cite web|url=https://www.hindustantimes.com/mumbai/who-is-vijay-darda/story-cf6SZazEOhxldr3ObjZgnK.html|title=Who is Vijay Darda?|last=Anonymous|date=2012-09-04|website=Hindustan Times|language=en|access-date=2026-07-17}}</ref> वे सकल जैन समाज के संस्थापक और अध्यक्ष भी हैं।<ref>{{Citation|title=Sakal Jain Samaj|date=2026-07-11|url=https://en.wikipedia.org/w/index.php?title=Sakal_Jain_Samaj&oldid=1363644923|work=Wikipedia|language=en|access-date=2026-07-17}}</ref> दर्डा 1997 से 1998 तक इंडियन न्यूज़पेपर सोसाइटी, नई दिल्ली के अध्यक्ष रहे। वे अभी भी इसकी कार्यकारी समिति के सदस्य हैं<ref>{{Cite web|url=https://indiantelevision.com/mam/abc-vijay-darda-becomes-chairman-sam-balsara-is-deputy-chairman/|title=ABC: Vijay Darda becomes chairman, Sam Balsara is deputy chairman|last=Team|first=indiantelevision com|date=2010-09-17|language=en-US|access-date=2026-07-17}}</ref> == शुरुआती जीवन और राजनीतिक करियर == दर्डा का जन्म यवतमाल में एक श्वेतांबर जैन परिवार में हुआ था। उनके पिता, जवाहरलाल दर्डा, भारत की आज़ादी की लड़ाई के दौरान एक स्वतंत्रता सेनानी थे। जवाहरलाल दर्डा ने 15 दिसंबर 1971 को नागपुर में 'लोकमत' नाम का मराठी दैनिक समाचार पत्र शुरू किया था<ref>{{Cite web|url=https://india.mom-gmr.org/en/owners/companies/detail/company/company/show/lokmat-media/|title=Lokmat Media|website=india.mom-gmr.org|language=en|access-date=2026-07-17}}</ref> 26 जुलाई 2023 को दिल्ली की एक स्पेशल कोर्ट ने छत्तीसगढ़ कोल ब्लॉक आवंटन मामले में दर्डा के खिलाफ फैसला सुनाया। राउज़ एवेन्यू कोर्ट ने इस मामले में उन्हें 'प्रिवेंशन ऑफ़ करप्शन एक्ट' की अन्य धाराओं के तहत दोषी ठहराया<ref>{{Cite web|url=https://www.jagran.com/delhi/new-delhi-city-ncr-former-congress-rajya-sabha-member-vijay-darda-sentenced-to-four-years-in-chhattisgarh-coal-scam-case-23482864.html?app=true&utm_source=referral&utm_medium=social&utm_campaign=deeplink|title=छत्तीसगढ़ कोयला घोटाला मामला: कांग्रेस के पूर्व राज्यसभा सदस्य विजय दर्डा को चार साल की सजा - ncr Former Congress Rajya Sabha member Vijay Darda sentenced to four years in Chhattisgarh coal scam case|website=Jagran|language=hi|access-date=2026-07-17}}</ref> == संदर्भ. == Localized exception with key rest-html-backend-error [[श्रेणी:1950 में जन्मे लोग]] [[श्रेणी:जीवित लोग]] [[श्रेणी:Pages with unreviewed translations]] <references /> [[श्रेणी:राज्यसभा सदस्य]] [[श्रेणी:लोकमत मीडिया]] [[श्रेणी:दर्डा परिवार]] [[श्रेणी:मराठी राजनेता]] 91h1uim23oc44ieq63i4mqulypotdc9 सदस्य वार्ता:AalekhakBot 3 1616101 6586905 6586713 2026-07-17T17:50:47Z SM7 89247 उत्तर_दिया 6586905 wikitext text/x-wiki {{unblock| Mujhe nahi pata tha ki bot naam allowed nahi hai. Main apna username badal kar ek normal naam rakhne ke liye tayar hoon. Please mujhe unblock karein ताकि main rename request daal saku.}} == अवरोध हटाने के अनुरोध पर उत्तर == कृपया [[वि:सना|सदस्यनाम नीति]] ध्यान पूर्वक पढ़ लें। सदस्यनाम बदलने के लिये आपको मेटा विकि पर अनुरोध करना है, यहाँ नहीं। अनुरोध करने से पहले '''[[:toollabs:steinsplitter/uv|इस टूल से]]''' जाँच लें कि जिस नाम के लिये आप अनुरोध करने जा रहे वो पहले से किसी ने न ले रखा हो। इसके बाद '''[[m:Special:GlobalRenameRequest|इस फॉर्म को भरकर]]''' अथवा '''[[m:Steward_requests/Username_changes|अनुरोध पृष्ठ पर]]''' बताई गयी विधि द्वारा अनुरोध करें। नाम बदलने के बाद इसी वार्ता पन्ने पर मुझे सूचित करें। --[[User:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[User talk:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> 17:50, 17 जुलाई 2026 (UTC) tff5h25037w3pf1kotdyylcll8ypugj वार्ता:विजय जे. दर्डा 1 1616102 6586999 6586719 2026-07-18T06:10:44Z Nagpurjournalism 856407 /* शीघ्र हटाने पर चर्चा */ नया अनुभाग 6586999 wikitext text/x-wiki == शीघ्र हटाने पर चर्चा == इस पृष्ठ को परीक्षण पृष्ठ होने के कारण नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[सदस्य:Nagpurjournalism|Nagpurjournalism]] ([[सदस्य वार्ता:Nagpurjournalism|वार्ता]]) 07:35, 17 जुलाई 2026 (UTC) विजय जवाहरलाल दर्डा इंडियन नेशनल कांग्रेस पार्टी के एक राजनेता हैं। वे 1998 से राज्यसभा में महाराष्ट्र का प्रतिनिधित्व करते हुए भारत की संसद के सदस्य रहे हैं और लगातार तीन बार भारतीय संसद के उच्च सदन के लिए चुने गए हैं। वे लोकमत मीडिया ग्रुप के चेयरमैन हैं, वे सकल जैन समाज के संस्थापक और अध्यक्ष भी हैं। दर्डा 1997 से 1998 तक इंडियन न्यूज़पेपर सोसाइटी, नई दिल्ली के अध्यक्ष रहे। वे अभी भी इसकी कार्यकारी समिति के सदस्य हैं --[[सदस्य:Nagpurjournalism|Nagpurjournalism]] ([[सदस्य वार्ता:Nagpurjournalism|वार्ता]]) 07:35, 17 जुलाई 2026 (UTC) संदर्भ भी साथ में दे रहे हैं https://www.hindustantimes.com/mumbai/who-is-vijay-darda/story-cf6SZazEOhxldr3ObjZgnK.html https://www.deccanherald.com/content/97303/vijay-darda-elected-abc-chairperson.html https://www.business-standard.com/article/beyond-business/newsmaker-vijay-darda-112090700074_1.html https://www.lokmat.com/national/memorial-home-for-kargil-jawans-by-lokmat-a601/ https://nocorruption.in/politician/vijay-jawaharlal-darda/ http://www.lokmat.net/vijay-darda.html {{सही}}[[सदस्य:Nagpurjournalism|Nagpurjournalism]] ([[सदस्य वार्ता:Nagpurjournalism|वार्ता]]) 07:44, 17 जुलाई 2026 (UTC) == शीघ्र हटाने पर चर्चा == इस पृष्ठ को परीक्षण पृष्ठ होने के कारण नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[सदस्य:Amit Gajanan|Amit Gajanan]] ([[सदस्य वार्ता:Amit Gajanan|वार्ता]]) 07:52, 17 जुलाई 2026 (UTC) विजय दर्डा लोकमत मीडिया के चेयरमैन हैं और राज्यसभा के 18 साल तक सदस्‍य भी थे, वह अखबार के प्रमुख होने के करण उनकी जानकारी लोगो तक पहुंचानी चाहिए [[सदस्य:Amit Gajanan|Amit Gajanan]] ([[सदस्य वार्ता:Amit Gajanan|वार्ता]]) 07:52, 17 जुलाई 2026 (UTC) {{सही}} {{सही}} == शीघ्र हटाने पर चर्चा == इस पृष्ठ को परीक्षण पृष्ठ होने के कारण नहीं हटाया जाना चाहिये क्योंकि... (यहाँ अपना कारण बताएँ) --[[सदस्य:Nagpurjournalism|Nagpurjournalism]] ([[सदस्य वार्ता:Nagpurjournalism|वार्ता]]) 06:10, 18 जुलाई 2026 (UTC) विजय दर्डा लोकमत मीडिया के अध्यक्ष हैं जो महाराष्ट्र का नंबर एक का मराठी अखबार है, इसके अलावा दर्दा राज्यसभा सदस्य भी रह चुके हैं, समाज के हजारो लोगो की मदद की है, बर्फीली ज़दियो में सैनिको को रहने लायक घर बनाये सैनिको से लेकर बढ़ में जिनके घर बह गए उनको मदत, इसीलिये इनको समाज के सामने लाने के लिए यह पेज बनाया है,, ==सन्दर्भ== https://www.hindustantimes.com/mumbai/who-is-vijay-darda/story-cf6SZazEOhxldr3ObjZgnK.html https://www.hindustantimes.com/india/indian-rly-honours-tatya-tope-s-family/story-24EOwr0g5tTkCqjLYUo66O.html https://theprint.in/india/kargil-war-memorial-home-for-jawans-helmed-by-lokmat-media-inaugurated-in-dras-on-vijay-diwas/1059182/ https://www.lokmat.com/national/contribution-of-rs-71-lakh-for-accommodation-of-personnel-deployed-in-kargil-checks-handed-over-to-defense-minister-by-lokmat-foundation-a653/ https://economictimes.indiatimes.com/news/politics-and-nation/congress-member-flags-vidarbha-farmers-suicide-issue-in-rajya-sabha/articleshow/39425120.cms https://www.lokmatnews.in/spirituality/nagpur-sakal-jain-samaj-triumphant-voice-for-social-harmony-organization-remains-inspiring-even-28-years-after-its-inception-b507/ https://www.business-standard.com/article/beyond-business/newsmaker-vijay-darda-112090700074_1.html https://www.lokmat.com/national/murari-bapu-released-coffee-table-book-ram-rasayan-based-on-ramayana-katha-a-a719/ {{सही}}{{आधार}}[[सदस्य:Nagpurjournalism|Nagpurjournalism]] ([[सदस्य वार्ता:Nagpurjournalism|वार्ता]]) 06:10, 18 जुलाई 2026 (UTC) {{सही}} 3529qxfzbg14pj68z8fftfkaugp0kjb २०२६ नीट विवाद 0 1616105 6586747 2026-07-17T12:18:04Z स्वर्ण 883468 "[[:en:Special:Redirect/revision/1364549049|2026 NEET controversy]]" पृष्ठ का अनुवाद करके निर्मित किया गया 6586747 wikitext text/x-wiki {{ज्ञानसन्दूक घटना|name=NTA NEET controversy 2026|image=|Image_Caption=Protests following the cancellation of NEET-UG 2026|date=3 May 2026|Location=India|coordinates=|type=Examination scandal|cause=Alleged paper leak and irregularities|participants=[[National Testing Agency]], students, [[Central Bureau of Investigation]], [[Rajasthan Police]]|outcome=Cancellation of the 3 May examination; re-examination scheduled; CBI probe and arrests}}'''२०२६ नीट विवाद''' (जिसे '''२०२६ नीट-यूजी''' विवाद भी कहा जाता है) भारत की [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षा सेवा (एनटीए)]] द्वारा आयोजित [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)|राष्ट्रीय पात्रता व प्रवेश परीक्षा]] २०२६ में व्यापक स्तर पर हुए प्रश्नपत्र रिसाव और अनियमितताओं का एक बड़ा प्रकरण है। ३ मई २०२६ ई॰ को आयोजित यह परीक्षा, जिसमें स्नातक चिकित्सा एवं दन्त चिकित्सा पाठ्यक्रमों में प्रवेश चाहने वाले २२.७० लाख से अधिक अभ्यर्थी सम्मिलित हुए थे, १२ मई २०२६ को अन्वेषण के पश्चात् रद्द कर दी गई। अन्वेषण से ज्ञात हुआ कि पूर्व-प्रसारित एक अनुमानित प्रश्नपत्र और वास्तविक प्रश्नपत्र के बीच पर्याप्त समानता थी, जिसके परिणामस्वरूप एनटीए के आन्तरिक लोगों सहित अनेक व्यक्तियों को गिरफ़्तार किया गया।<ref>{{Cite news|url=https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|title=NEET-UG 2026 under scanner as Rajasthan SOG probes ‘guess paper’ leak|last=|first=|date=2026-05-11|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> इस विवाद ने देशव्यापी प्रदर्शनों, राजनीतिक आलोचनाओं और [[भारत का उच्चतम न्यायालय|भारत के उच्चतम न्यायालय]] में याचिकाओं को जन्म दिया। यह प्रकरण पूर्व की परीक्षा-सम्बन्धी अनियमितताओं, विशेषतः २०२४ के नीट विवाद के समान था। == पृष्ठभूमि == [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)|राष्ट्रीय पात्रता व प्रवेश परीक्षा]], जो पूर्व में [[अखिल भारतीय आयुर्विज्ञान-पूर्व परीक्षा|अखिल भारतीय आयुर्विज्ञान पूर्व परीक्षा]] (एआईपीएमटी) कहलाती थी, [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षा सेवा]] (एनटीए) द्वारा स्नातक चिकित्सा पाठ्यक्रमों में प्रवेश हेतु आयोजित एक अखिल भारतीय प्रवेश परीक्षा है।<ref>{{Cite press release|title=Medical Council of India Notification|date=1 March 2018|publisher=[[National Medical Commission|Medical Council of India]]|url=https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|access-date=6 December 2020|archive-date=17 April 2021|archive-url=https://web.archive.org/web/20210417182348/https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|url-status=dead}}</ref> चिकित्सा पाठ्यक्रमों में प्रवेश के लिए अनिवार्य होने के कारण, यह आवेदकों की संख्या की दृष्टि से भारत की सबसे बड़ी परीक्षा है।<ref>{{Cite press release|title=Medical Council of India Notification|date=1 March 2018|publisher=[[National Medical Commission|Medical Council of India]]|url=https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|access-date=6 December 2020|archive-date=17 April 2021|archive-url=https://web.archive.org/web/20210417182348/https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|url-status=dead}}</ref> सितम्बर २०१९ में राष्ट्रीय आयुर्विज्ञान आयोग अधिनियम २०१९ के लागू होने के पश्चात्, नीट-स्नातक भारत के समस्त चिकित्सा महाविद्यालयों, जिनमें [[अखिल भारतीय आयुर्विज्ञान संस्थान]] (एम्स) और [[जवाहरलाल स्नातकोत्तर चिकित्सा शिक्षा एवं अनुसंधान संस्थान|जवाहरलाल स्नातकोत्तर आयुर्विज्ञान शिक्षा एवं अनुसन्धान संस्थान]] (जिपमर) भी सम्मिलित हैं (जो तब तक पृथक परीक्षाएँ आयोजित करते थे), में प्रवेश के लिए एकमात्र परीक्षा बन गई।<ref>{{Cite web|url=https://www.livemint.com/news/india/common-neet-under-graduate-exam-from-2020-21-as-per-nmc-act-centre-11570173347395.html|title=Common NEET under graduate exam from 2020–21 as per NMC Act: Centre|last=Sharma|first=Neetu Chandra|date=4 October 2019|website=Livemint|language=en|access-date=28 July 2020}}</ref> २०२४ में, पाँच मई को नीट-स्नातक परीक्षा के दिन, एक ऐसा ही विवाद तब उत्पन्न हुआ था जब सामाजिक माध्यमों पर अनेक पोस्टों में आरोप लगाया गया कि परीक्षा के प्रश्न पहले ही प्रसारित कर दिए गए थे।<ref>{{cite news|url=https://thewire.in/article/education/neet-ug-nta-paper-leak-rajasthan-bihar|title=NEET: NTA Says 'No Paper Leak' in Rajasthan; Patna Police File FIR|date=6 May 2024|work=[[The Wire (India)|The Wire]]|access-date=22 June 2024|archive-url=https://web.archive.org/web/20240729060542/https://thewire.in/article/education/neet-ug-nta-paper-leak-rajasthan-bihar|archive-date=29 July 2024|url-status=live}}</ref> == प्रश्नपत्र रिसाव और परीक्षा रद्दीकरण == तीन मई की परीक्षा के कुछ ही समय पश्चात् यह आरोप उभरे कि सीकर, राजस्थान जैसे प्रशिक्षण केंद्रों में [[वाट्सऐप|व्हाट्सएप]] तथा अन्य माध्यमों से साझा किए गए एक अनुमानित प्रश्नपत्र या प्रश्न-बैंक के अनेक प्रश्न वास्तविक परीक्षा के प्रश्नों, विशेषकर रसायन विज्ञान और जीव विज्ञान में, से साम्य रखते थे।<ref>{{Cite web|url=https://indianexpress.com/article/education/neet-ug-cancellation-anatomy-of-a-leak-a-paid-whatsapp-group-a-whistleblower-under-cloud-and-a-guess-paper-that-spread-like-wildfire-10686438/|title=Anatomy of a NEET leak: A paid WhatsApp group, a whistleblower under cloud, and a ‘guess paper’ that spread like wildfire|last=Khan|first=Hamza|date=2026-05-13|website=[[The Indian Express]]|language=en|access-date=2026-05-17}}</ref> समाचारों के अनुसार, १२० तक प्रश्नों में समानता थी।<ref>{{Cite web|url=https://theprint.in/india/what-we-know-about-neet-ug-leak-pdf-that-got-120-of-180-questions-right-nashik-student-detained/2928960/|title=What we know about NEET (UG) ‘leak’—PDF that got 120 of 180 questions right, Nashik student detained|last=Kumar|first=Mayank|date=2026-05-12|website=ThePrint|language=en-US|access-date=2026-05-17}}</ref> [[सीकर]] के एक रसायन विज्ञान शिक्षक, शशिकान्त सुथार ने अनुमानित प्रश्नपत्र की सामग्री की तुलना आधिकारिक प्रश्नपत्र से करने के पश्चात् अधिकारियों को प्रसारित प्रश्नों के वितरण की सूचना दी और बताया कि लगभग १४० प्रश्न वास्तविक परीक्षा से मेल खाते थे।<ref>{{Cite news|url=https://www.ndtv.com/india-news/how-a-rajasthan-chemistry-teacher-blew-the-lid-off-neet-paper-leak-11516723|title=Exclusive: How A Chemistry Teacher Blew The Lid Off NEET Paper Leak|last=Asim|first=Mohd|date=19 May 2026|work=NDTV|url-status=live}}</ref> राजस्थान पुलिस के विशेष अभियान समूह ने अन्वेषण प्रारम्भ किया, जिसके फलस्वरूप अनेक गिरफ़्तारियाँ हुईं।<ref>{{Cite web|url=https://indianexpress.com/article/education/exclusive-what-teacher-who-first-flagged-neet-leak-wrote-in-his-complaint-10688249/|title=Exclusive {{!}} What teacher who first flagged NEET leak wrote in his complaint|last=Khan|first=Hamza|date=2026-05-14|website=The Indian Express|language=en|access-date=2026-05-17}}</ref> बाद में, यह मामला [[केन्द्रीय अन्वेषण ब्यूरो]] (सीबीआई) को स्थानान्तरित कर दिया गया।<ref name="The Hindu_NEET_Protests_Live">{{Cite news|url=https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|title=NEET-UG 2026 cancelled LIVE: CBI to probe paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512102104/https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> १२ मई २०२६ को एनटीए ने घोषणा की कि परीक्षा आधिकारिक रूप से रद्द कर दी गई है और पुनर्परीक्षा आयोजित की जाएगी। एक्स (X) पर जारी वक्तव्य में एनटीए ने कहा कि यह निर्णय “छात्रों के हित में” और राष्ट्रीय परीक्षा प्रणाली की विश्वसनीयता की रक्षा हेतु लिया गया है।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-what-happens-next-heres-what-students-need-to-know/article70969954.ece|title=NEET-UG 2026 cancelled: What happens next? Here's what students need to know|work=The Hindu|access-date=2026-05-15|archive-url=https://web.archive.org/web/20260512213730/https://www.thehindu.com/education/neet-ug-2026-cancelled-what-happens-next-heres-what-students-need-to-know/article70969954.ece|archive-date=2026-05-12|language=en}}</ref> साथ ही यह सुनिश्चित किया गया कि पुनर्परीक्षा की तिथियाँ पृथक से घोषित की जाएँगी।<ref name="TheHindu_NEET_Reconduct">{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|title=NEET UG 2026 cancelled: Fresh exam to be conducted following paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512080216/https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> एनटीए ने यह भी स्पष्ट किया कि अभ्यर्थियों द्वारा पहले जमा शुल्क लौटा दिया जाएगा और न तो नवीन पंजीकरण की आवश्यकता होगी और न ही किसी अतिरिक्त शुल्क की; पूर्ववत अभ्यर्थी आँकड़ों और परीक्षा केन्द्रों का ही उपयोग किया जाएगा।<ref name="TheHindu_NEET_Reconduct2">{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|title=NEET UG 2026 cancelled: Fresh exam to be conducted following paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512080216/https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> १५ मई को एनटीए ने घोषणा की कि पुनर्परीक्षा २१ जून २०२६ को होगी तथा अभ्यर्थियों को उनके आवेदन शुल्क की वापसी का आश्वासन दिया गया।<ref>{{Cite news|url=https://www.thehindu.com/education/national-testing-agency-announces-neet-ug-re-exam-on-june-21/article70981544.ece|title=National Testing Agency announces NEET-UG re-exam on June 21|last=PTI|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite web|url=https://indianexpress.com/article/india/neet-ug-2026-retest-to-be-held-on-june-21-nta-announces-10690442/|title=NEET-UG 2026 re-exam to be held on June 21, says National Testing Agency|date=2026-05-15|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref name=":0">{{Cite web|url=https://thewire.in/education/neet-2026-re-examination-on-june-21-minister-pradhan-says-exam-to-be-computer-based-from-next-year|title=NEET 2026 Re-Examination on June 21, Minister Pradhan Says Exam to be Computer-Based from Next Year|website=The Wire|language=en|access-date=2026-05-17}}</ref> == अन्वेषण एवं गिरफ़्तारियाँ == राजस्थान में [[राजस्थान पुलिस|विशेष अभियान समूह]] ने लातूर के एक प्रशिक्षण संस्थान से पता चले एक अभ्यास-प्रश्नपत्र के ४५ में से ४२ प्रश्नों के वास्तविक परीक्षा में मिलने के पश्चात् जाँच प्रारम्भ की।<ref name="TheHind_NTA_Commitment">{{Cite news|url=https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|title=NEET-UG 2026: NTA says committed to fair, credible exams amid Rajasthan SOG probe|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260511105956/https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|archive-date=2026-05-11|language=en|url-status=live}}</ref> प्रश्नपत्र का पता लगने पर, [[नाशिक|नासिक]], महाराष्ट्र में डॉ॰ शुभम खैरनार को प्रारम्भिक रूप से गिरफ़्तार किया गया, जिन्होंने प्राथमिक स्रोत से प्रश्नपत्र प्राप्त कर १५ लाख रुपये में विद्यार्थियों को वितरित किए थे। १२ मई २०२६ को सीबीआई ने आधिकारिक रूप से अन्वेषण का कार्यभार ग्रहण किया और पुणे स्थित रसायन विज्ञान के प्राध्यापक पी॰ वी॰ कुलकर्णी, जिन्हें एनटीए की प्रक्रियाओं से जुड़ा मुख्य अभियुक्त बताया गया, तथा जीव विज्ञान की प्राध्यापिका मनीषा गुरुनाथ मण्डारे सहित अनेक व्यक्तियों की गिरफ़्तारी की घोषणा की।<ref name="The Hindu_NEET_Protests_Live2">{{Cite news|url=https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|title=NEET-UG 2026 cancelled LIVE: CBI to probe paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512102104/https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref><ref>{{Cite news|url=https://indianexpress.com/article/education/neet-paper-leak-nta-cancels-neet-ug-2026-fresh-dates-soon-10685084/|title=Amid paper leak row, National Testing Agency cancels NEET UG 2026|date=2026-05-12|work=The Indian Express|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512142237/https://indianexpress.com/article/education/neet-paper-leak-nta-cancels-neet-ug-2026-fresh-dates-soon-10685084/|archive-date=2026-05-12|language=en-US|url-status=live}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/cbi-arrests-mastermind-linked-to-neet-ug-2026-biology-paper-leak/article70986701.ece|title=CBI arrests ‘mastermind’ linked to NEET-UG 2026 biology paper leak|last=Pandey|first=Devesh K.|date=2026-05-16|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite news|url=https://www.pib.gov.in/PressReleasePage.aspx?PRID=2261565&reg=3&lang=2|title=CBI arrests Kingpin in NEET-UG 2026 Paper Leak Case|date=15 May 2026|access-date=17 May 2026|publisher=[[Press Information Bureau]]}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/cbi-nabs-alleged-mastermind-behind-neet-ug-2026-chemistry-paper-leak/article70983707.ece|title=CBI nabs alleged mastermind behind NEET-UG 2026 chemistry paper leak|last=Pandey|first=Devesh K.|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> अभियुक्त कथित रूप से विशेष कक्षाएँ चला रहे थे, जिनमें परीक्षा के प्रश्न लिखवाए जाते थे और हस्तलिखित टिप्पणियाँ वास्तविक परीक्षा से मेल खाती पाई गईं।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-ug-leak-question-paper-was-handwritten-scanned-and-circulated-students-paid-lakhs-cbi-probe-finds/articleshow/131082712.cms|title=NEET-UG leak: Question paper was handwritten, scanned and circulated; students paid lakhs, CBI probe finds|date=2026-05-14|work=The Times of India|access-date=2026-05-17|issn=0971-8257}}</ref> छापों के समय, अधिकारियों ने प्रश्न रिसाव से जुड़े विद्युतीय उपकरण और टिप्पणियाँ बरामद कीं।<ref>{{Cite news|url=https://www.news18.com/india/neet-paper-leak-case-cbi-finds-digital-footprints-recovered-phones-sent-for-forensic-tests-ws-l-10091409.html|title=NEET Paper Leak Case: CBI Finds Digital Footprints, Recovered Phones Sent For Forensic Tests|work=News18|access-date=2026-05-19|archive-url=https://web.archive.org/web/20260515003900/https://www.news18.com/india/neet-paper-leak-case-cbi-finds-digital-footprints-recovered-phones-sent-for-forensic-tests-ws-l-10091409.html|archive-date=2026-05-15|language=en-US}}</ref> अन्वेषकों के अनुसार, यह तन्त्र राजस्थान, महाराष्ट्र एवं अन्य राज्यों में फैला हुआ था। केन्द्रीय शिक्षामन्त्री [[धर्मेंद्र प्रधान|धर्मेन्द्र प्रधान]] ने स्वीकार किया कि “निन्ंत्रण शृंखला में सेंध” लगी थी और २०२७ से नीट को संगणक-आधारित परीक्षा प्रारूप में परिवर्तित करने की योजना की घोषणा की।<ref>{{Cite web|url=https://indianexpress.com/article/education/neet-ug-2026-to-go-cbt-from-next-year-re-exam-on-june-21-dharmendra-pradhan-after-paper-leak-row-10690559/|title=NEET insider held for paper leak, Government says exam to be online from 2027|date=2026-05-15|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-paper-leak-row-exam-to-go-fully-computer-based-from-next-year-says-education-minister-pradhan/article70981929.ece|title=NEET-UG paper leak row: Exam to go fully computer-based from next year, says Education Minister Pradhan|last=|first=|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref name=":02">{{Cite web|url=https://thewire.in/education/neet-2026-re-examination-on-june-21-minister-pradhan-says-exam-to-be-computer-based-from-next-year|title=NEET 2026 Re-Examination on June 21, Minister Pradhan Says Exam to be Computer-Based from Next Year|website=The Wire|language=en|access-date=2026-05-17}}</ref> सीबीआई अन्वेषकों को ऐसे साक्ष्य प्राप्त हुए कि २०२५ का नीट-स्नातक प्रश्नपत्र भी उसी गिरोह द्वारा दूषित किया गया था, जो २०२६ के रिसाव का उत्तरदायी था।<ref>{{Cite web|url=https://www.indiatoday.in/india/story/neet-ug-2025-paper-leak-sikar-suspects-linked-to-maharashtra-network-2912097-2026-05-15|title=Rajasthan family at centre of NEET leak row had obtained 2025 paper as well: Sources|last=Kumar|first=Sharat|date=2026-05-15|website=India Today|language=en|access-date=2026-05-28}}</ref> १८ मई २०२६ को सीबीआई ने महाराष्ट्र के [[लातूर]] स्थित रेणुकाई रसायन विज्ञान प्रशिक्षण संस्थान के स्वामी शिवराज मोटेगांवकर को प्रश्नपत्र रिसाव के सम्बन्ध में गिरफ़्तार किया।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-paper-leak-fallout-why-nta-must-transform-nta-into-a-single-digital-testing-authority/article70995494.ece|title=NEET paper leak fallout: Why NTA must transform into a single digital testing authority|last=Rao|first=O. R. S.|date=2026-05-19|work=The Hindu|access-date=2026-05-19|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite web|url=https://indianexpress.com/article/education/shivraj-maotegaonkar-10th-arrest-neet-paper-leak-case-10695558/|title=From bicycle tutor to coaching giant: Who is Shivraj Motegaonkar, the 10th arrest by CBI in NEET UG paper leak case?|last=Ozarkar|first=Vallabh|date=2026-05-18|website=The Indian Express|language=en|access-date=2026-05-19}}</ref> अन्वेषण अभिकरण ने नई दिल्ली न्यायालय को बताया कि मोटेगांवकर को २३ अप्रैल २०२६ को रसायन विज्ञान के प्रश्न प्राप्त हुए थे। बाद में एक वीडियो में वे यह दावा करते भी दिखे कि उनके विद्यार्थियों को दिए गए अभ्यास प्रश्न वास्तविक परीक्षा में उपस्थित थे। उनके आवास और संस्थान से प्रश्न-बैंक, प्रलेख, फ़ोन और सुवाह्य संगणक आगे के विश्लेषण हेतु ज़ब्त किए गए। उन्हें नौ दिनों की सीबीआई हिरासत में भेज दिया गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-leak-cbi-arrests-coaching-centre-founder/articleshow/131185733.cms|title=NEET leak: CBI arrests coaching centre founder|date=2026-05-19|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref><ref>{{Cite web|url=https://cbi.gov.in/assets/files/media/658964047PC%20Dated%2019.05.2026%20(1).pdf|title=CBI in the News: Clippings dated 19.05.2026|website=[[Central Bureau of Investigation]]|access-date=2 June 2026}}</ref> सीबीआई ने नागपुर में दो स्थानों पर उन अभ्यर्थियों के आवासों पर आगे की जाँच की, जिन्हें कथित तौर पर रिसाव प्रश्नपत्र प्राप्त हुए थे। ऐसा विश्वास था कि वे पुणे में पूर्व में गिरफ़्तार सौन्दर्य प्रसाधनालय स्वामिनी मनीषा वाघमारे के सम्पर्क में थे। अभिकरण को सन्देह था कि विद्यार्थियों को परीक्षा से एक दिन पूर्व पुणे बुलाया गया, जहाँ एक निजी सत्र में प्रश्नों पर विचार-विमर्श किया गया। तथापि, इस अन्वेषण के पश्चात् कोई गिरफ़्तारी नहीं हुई।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/nagpur/neet-paper-leak-cbi-raids-nagpur-chanda-students/articleshow/131210786.cms|title=NEET paper leak: CBI raids Nagpur & Chanda students|date=2026-05-20|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> २२ मई २०२६ को सीबीआई ने पुणे के एक विद्यालय की प्रधानाध्यापिका मनीषा संजय हवालदार को भौतिकी का प्रश्नपत्र कथित रूप से प्रसारित करने के आरोप में गिरफ़्तार किया, जो बाद में वास्तविक परीक्षा में प्रकट हुआ।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/aurangabad/cbi-arrests-pune-headmistress-in-neet-ug-2026-paper-leak-case-questions-third-latur-doctor/articleshow/131266587.cms|title=CBI arrests Pune headmistress in NEET-UG 2026 paper leak case, questions third Latur doctor|date=2026-05-24|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> उन्हें इन प्रश्नों तक इसलिए पहुँच थी क्योंकि उन्हें एनटीए द्वारा विषय विशेषज्ञ के रूप में नियुक्त किया गया था। हवालदार ने अन्वेषकों के समक्ष स्वीकार किया कि उन्होंने भौतिकी के प्रश्नों को स्मृति से याद कर एक विद्यार्थी के साथ साझा किया था। ये आगे मण्डारे के अनुरोध पर एक सन्देश अनुप्रयोग के माध्यम से प्रसारित हुए। पुणे स्थित उनके आवास पर छापे के समय सीबीआई ने अनेक नीट-स्नातक प्रश्नपत्र, एनटीए परिचय पत्र की प्रतिलिपियाँ और नकदी सहित अन्य सामग्री बरामद की। हवालदार ने यह भी स्वीकार किया कि उन्होंने विद्यालय के संगणक का उपयोग कर रिसाव सामग्री मुद्रित की और तत्पश्चात मण्डारे के साथ हुई वार्ता का इतिहास मिटा दिया तथा अपनी हस्तलिखित टिप्पणियाँ जला दीं।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/pune/arrested-headmistress-recalled-physics-questions-from-neet-paper-from-memory-provided-them-to-student-cbi/articleshow/131285379.cms|title=NEET paper leak: Arrested headmistress recalled physics questions from from memory, CBI tells court|date=2026-05-24|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> हवालदार से भौतिकी के प्रश्न प्राप्त करने वाले विद्यार्थी को २६ मई २०२६ को गिरफ़्तार किया गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/pune/cbi-arrests-student-who-received-physics-questions-from-pune-school-headmistress-in-neet-ug-paper-leak-case/articleshow/131337108.cms|title=CBI arrests student who received physics questions from Pune school headmistress in NEET-UG paper leak case|date=2026-05-27|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> सीबीआई ने बाद में स्पष्ट किया कि यह ‘विद्यार्थी’ वस्तुतः भौतिकी का शिक्षक तेजस हर्षदकुमार शाह था, जो पुणे स्थित डॉ॰ अभंग प्रभु चिकित्सा अकादमी से सम्बद्ध था। सीबीआई ने लातूर के शिशु रोग विशेषज्ञ डॉ॰ मनोज शिरुरे को भी गिरफ़्तार किया। उत्तरार्ध पर संदेह था कि वे उन चिकित्सकों के समूह में उपस्थित थे जिन्होंने अपने सम्बन्धियों के लिए रिसाव प्रश्नपत्र प्राप्त करने हेतु धनराशि का भुगतान किया था। सीबीआई अन्वेषण से शाह और हवालदार के पति के मध्य वित्तीय लेनदेन और व्हाट्सएप वार्ता का ख़ुलासा हुआ। शाह का नम्बर हवालदार के उपकरण में ‘ईश्वर’ के रूप में सुरक्षित था। शाह ने हवालदार से रिसाव प्रश्न प्राप्त कर उन्हें मोटेगांवकर को दिया, जिन्होंने अन्ततः उन्हें शिरुरे तक पहुँचाया। अभिकरण ने आगे जोड़ा कि शिरुरे और कुलकर्णी ने कथित रूप से उन विद्यार्थियों के लिए विशेष प्रशिक्षण सत्र चलाए जिनके परिवारों ने रिसाव प्रश्नों के लिए प्रति २ लाख रुपये (लगभग २१०० अमरीकी डॉलर) से १० लाख रुपये (लगभग १०,००० अमरीकी डॉलर) तक का भुगतान किया था।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/aurangabad/cbi-arrests-latur-paediatrician-pune-physics-teacher-in-neet-ug-paper-leak-case/articleshow/131358581.cms|title=‘God’ in contact list: CBI uncovers chilling WhatsApp trail in NEET-UG leak probe|date=2026-05-28|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> == प्रतिक्रियाएँ == परीक्षा रद्द होने से दिल्ली एवं अन्य नगरों में छात्रों और अभिभावकों द्वारा व्यापक प्रदर्शन हुए, जिनमें दिल्ली के [[शास्त्री भवन]] में [[नेशनल स्टूडेंट यूनियन ऑफ इंडिया|भारतीय राष्ट्रीय छात्र संघ]] के सदस्यों का प्रदर्शन भी सम्मिलित था।<ref>{{Cite web|url=https://www.bbc.com/news/articles/cwy2gd508n9o|title=NEET 2026: Protests in India after medical entrance test scrapped over leak claims|last=Yadav|first=Nikita|date=2026-05-12|website=[[BBC]]|language=en-GB|access-date=2026-05-17}}</ref> लोगों ने उत्तरदायित्व की माँग की तथा राष्ट्रीय परीक्षा अभिकरण के अधिकारियों के त्यागपत्र का आह्वान किया। अनेक छात्र समूहों ने कहा कि बार-बार हो रहे व्यवधानों से तनाव, चिन्ता और अभिप्रेरणा की हानि हुई है। समाचार माध्यमों के अनुसार, प्रश्नपत्र रिसाव के पश्चात् न्यूनतम तीन छात्रों ने [[आत्महत्या]] कर ली।<ref>{{Cite web|url=https://www.bbc.com/news/articles/ckgpdge641po|title=NEET 2026: India's aspiring doctors heartbroken by exam paper leak|last=Dey|first=Abhishek|last2=Yadav|first2=Nikita|date=2026-05-13|website=[[BBC]]|language=en-GB|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/education/we-protest-then-we-study-again-neet-2026-cancellation-leaves-students-helpless/article71005215.ece|title=We protest, then we study again': NEET 2026 cancellation leaves students helpless|last=Ahmed|first=Mantasha|date=2026-05-22|work=The Hindu|access-date=2026-05-22|language=en-IN|issn=0971-751X}}</ref> पूर्व मुख्यमन्त्री [[एम॰ के॰ स्टालिन]] ने केन्द्र सरकार से आग्रह किया कि वर्ष २०२६ के लिए नीट-स्नातक को छूट प्रदान की जाए और राज्यों को अपनी चिकित्सा प्रवेश प्रक्रिया निर्धारित करने की अनुमति दी जाए। उन्होंने नीट की आलोचना करते हुए तर्क दिया कि इसने चिकित्सा प्रवेश को अत्यधिक व्यावसायीकृत और प्रशिक्षण-केन्द्र-चालित प्रणाली में बदल दिया है, जिसमें शैक्षिक योग्यता या सामाजिक प्रतिबद्धता के स्थान पर आर्थिक विशेषाधिकार सफलता को निरंतर प्रभावित कर रहा है।<ref>{{Cite web|url=https://www.newindianexpress.com/states/tamil-nadu/2026/May/15/stalin-urges-pm-modi-to-exempt-neet-for-2026-27-allow-states-to-admit-students-based-on-marks|title=Stalin urges PM Modi to exempt NEET for 2026-27, allow states to admit students based on marks|last=|first=|date=2026-05-15|website=The New Indian Express|language=en|access-date=2026-05-31}}</ref><ref>{{Cite web|url=https://www.aninews.in/news/national/general-news/mk-stalin-urges-centre-to-exempt-neet-ug-for-2026-2027-allow-state-govts-to-make-admissions20260515083344/|title=MK Stalin urges Centre to exempt NEET-UG for 2026-2027, allow state govts to make admissions|website=ANI News|language=en|access-date=2026-05-31}}</ref> [[सी. जोसेफ विजय|सी॰ जोसेफ़ विजय]] सहित राजनीतिक नेताओं ने नीट को समाप्त करने का आह्वान किया। [[लोक सभा में विपक्ष के नेता|विपक्ष के नेता]] [[राहुल गांधी|राहुल गान्धी]] ने परीक्षा से निपटने के सरकार के ढंग की आलोचना करते हुए इस रिसाव को युवाओं के भविष्य के विरुद्ध “अपराध” बताया और परीक्षा प्रक्रिया की तुलना नीलामी से की।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-cancellation-rahul-gandhi-paper-leak/article70969233.ece|title=NEET-UG cancellation: PM's 'amrit kaal' turned into 'vish kaal' for country, Rahul Gandhi slams Government|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512105310/https://www.thehindu.com/education/neet-ug-cancellation-rahul-gandhi-paper-leak/article70969233.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> गान्धी की आलोचना पर प्रतिक्रिया देते हुए [[भारतीय जनता पार्टी]] (भाजपा) के प्रवक्ता [[संजय मयूख]] ने काँग्रेस नेता से इस विषय पर संकीर्ण राजनीति करने से विरत रहने का आग्रह किया।<ref>{{Cite web|url=https://theprint.in/india/not-the-time-to-exploit-students-anguish-bjp-slams-rahul-accuses-him-of-politicising-neet-leak/2933331/|title='Not the time to exploit students' anguish': BJP slams Rahul, accuses him of politicising NEET leak|last=|date=2026-05-16|website=ThePrint|language=en-US|access-date=2026-05-17}}</ref> अखिल भारतीय आयुर्विज्ञान संघ जैसे चिकित्सा संगठनों ने उच्चतम न्यायालय में याचिकाएँ दायर कर एनटीए में सुधार और न्यायालय-निगरानी में पुनर्परीक्षा की माँग की। शिक्षाविदों ने भी पुनर्परीक्षा की आलोचना करते हुए कहा कि यह ईमानदार विद्यार्थियों के साथ अन्यायपूर्ण था तथा इसने परीक्षा प्रणाली के प्रबन्धन में व्याप्त गम्भीर ख़ामियों को उजागर कर दिया।<ref>{{Cite web|url=https://indianexpress.com/article/legal-news/nta-exam-medical-body-supreme-court-after-neet-ug-paper-leak-10688631/|title=Replace NTA, hold exam under judicial supervision: Key demands of medical body in Supreme Court post NEET paper leak|last=Shaji|first=Ashish|date=2026-05-14|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/neet-ug-paper-leak-doctors-body-moves-supreme-court-to-make-nta-a-statutory-body-accountable-to-parliament/article70987832.ece|title=NEET-UG paper leak: Doctors' body moves Supreme Court to make NTA a statutory body accountable to Parliament|last=Rajagopal|first=Krishnadas|date=2026-05-16|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/cities/Mangalore/neet-2026-leak-re-examination-is-unfair-on-students-say-educationalists-in-coastal-karnataka/article70968984.ece|title=NEET UG 2026 cancelled: Re-exam is unfair on students, say educationalists in coastal Karnataka|last=|first=|date=2026-05-12|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> २५ मई २०२६ को [[भारत का उच्चतम न्यायालय|भारत के उच्चतम न्यायालय]] ने उस वर्ष के नीट-स्नातक प्रश्नपत्र रिसाव मामले पर अपने २०२४ के निर्णय के पश्चात् गठित समिति की सिफ़ारिशों के कार्यान्वयन पर स्थिति प्रतिवेदन माँगा।<ref>{{Cite news|url=https://www.business-standard.com/india-news/sc-pulls-up-nta-over-neet-ug-2026-cancellation-seeks-status-report-126052501487_1.html|title=SC pulls up NTA over NEET-UG 2026 cancellation, seeks status report|last=Mishra|first=Bhavini|date=25 May 2026|work=Business Standard|access-date=25 May 2026}}</ref> == विरोध प्रदर्शन == ६ जून २०२६ को [[कॉकरोच जनता पार्टी]] ने [[जंतर मंतर, दिल्ली|नई दिल्ली के जन्तर मन्तर]] पर एक प्रदर्शन का नेतृत्व किया जिसमें नीट प्रश्नपत्र रिसाव को लेकर केन्द्रीय शिक्षामन्त्री धर्मेन्द्र प्रधान के त्यागपत्र की माँग की गई।<ref>{{Cite web|url=https://www.aljazeera.com/features/2026/6/6/im-a-cockroach-gen-z-protest-movement-lands-in-indian-capital|title=‘I’m a cockroach’: Gen Z protest movement lands in Indian capital|last=Sharma|first=Yashraj|date=6 June 2026|website=Al Jazeera|language=en|access-date=2026-06-06}}</ref> पर्यावरणविद् एवं [[शैक्षिक सुधार|शिक्षा सुधारक]] [[सोनम वांगचुक]] कॉकरोच जनता पार्टी द्वारा आयोजित एक प्रदर्शन में प्रमुख व्यक्तित्व रहे हैं, जो राष्ट्रीय परीक्षाओं के संचालन में उत्तरदायित्व की माँग कर रहे हैं। वे [[अखिल भारतीय विद्यार्थी संघ]] के छः छात्रों के साथ अनिश्चितकालीन [[भूख हड़ताल]] का नेतृत्व कर रहे हैं। == पुनर्परीक्षा == २१ जून २०२६ को निर्धारित पुनर्परीक्षा से जुड़े प्रश्नपत्र निर्माताओं, अनुवादकों, मध्यस्थों एवं अन्य दल सदस्यों को एक अज्ञात स्थान पर सुरक्षित रखा गया। अंकीय उपकरणों का उपयोग प्रतिबन्धित कर दिया गया और केवल अधिकृत कार्मिकों को ही सुविधा केन्द्र में प्रवेश की अनुमति थी। समस्त सम्बद्ध व्यक्तियों को बाहरी स्रोतों से किसी भी सम्पर्क से बचाने के लिए परीक्षा समाप्ति तक निगरानी में रखा गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-paper-setters-to-be-in-lockdown-till-re-exam/articleshow/131573837.cms|title=NEET paper setters to be in lockdown till re-exam|date=2026-06-08|work=The Times of India|access-date=2026-06-17|issn=0971-8257}}</ref> प्रश्नपत्र विकास से लेकर अन्तिम परिवहन तक, प्रत्येक चरण पर सुरक्षा बढ़ा दी गई। रक्षामन्त्री [[राजनाथ सिंह]] की अध्यक्षता में हुई पूर्व उच्च-स्तरीय बैठक के सुझाव के पश्चात्, यह सुनिश्चित किया गया कि [[भारतीय वायुसेना]] के विमान प्रश्नपत्रों को विभिन्न उप-स्थानों तक ले जाएँगे, जहाँ से उन्हें पुनर्परीक्षा हेतु परीक्षा केन्द्रों पर भेजा जाएगा।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/govt-may-use-iaf-aircraft-to-transport-question-papers-for-neet-retest-report/articleshow/131373365.cms|title=Govt may use IAF aircraft to transport question papers for NEET retest: Report|date=2026-05-28|work=The Times of India|access-date=2026-05-28|issn=0971-8257}}</ref><ref>{{Cite news|url=https://economictimes.indiatimes.com/news/india/iaf-to-transport-neet-question-papers-enhanced-security-measures-announced-for-june-21-exam/articleshow/131557535.cms|title=IAF being engaged to transport NEET question papers: NTA DG|date=2026-06-06|work=The Economic Times|access-date=2026-06-17|issn=0013-0389}}</ref> पुनर्परीक्षा के प्रवेशपत्र डाउनलोड करते समय अनेक अभ्यर्थियों ने आधिकारिक प्रवेशद्वार पर तकनीकी बाधाएँ आने की सूचना दी और शुल्क वापसी प्रक्रिया के सम्बन्ध में स्पष्टीकरण भी माँगा। उठाई गई समस्याओं को एनटीए ने स्वीकार किया और सम्बन्धित दलों द्वारा शीघ्र समाधान का आश्वासन दिया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/education/news/neet-ug-admit-card-2026-nta-assures-quick-fix-as-hall-ticket-download-problems-continue/articleshow/131734818.cms|title=NEET UG admit card 2026: NTA assures quick fix as re-NEET hall ticket download problems continue|date=2026-06-15|work=The Times of India|access-date=2026-06-20|issn=0971-8257}}</ref> इसके अतिरिक्त, अभिकरण ने यह भी बताया कि वापसी राशि सीधे आधिकारिक प्रवेशद्वार पर साझा बैंक विवरण में जमा कर दी जाएगी तथा विद्यार्थियों को इस प्रक्रिया से जुड़े अन्तर्जाल पर प्रसारित होने वाले कपटपूर्ण सन्देशों से सावधान रहने की सलाह दी।<ref>{{Cite web|url=https://www.hindustantimes.com/india-news/neetug-retest-students-face-trouble-accessing-admit-cards-101781582738784.html|title=NEET-UG retest students face trouble accessing admit cards|last=Maurya|first=Sanjay|date=2026-06-16|website=Hindustan Times|language=en|access-date=2026-06-20}}</ref> एनटीए ने सन्दिग्ध गतिविधि पर निगरानी रखने तथा पुनर्परीक्षा से सम्बन्धित मिथ्या सूचना चिह्नित करने के लिए सामाजिक माध्यमों एवं सन्देशन मंचों की निगरानी हेतु सम्बन्धित प्राधिकरणों के साथ कार्य किया। इस प्रयास के अंग के रूप में, [[अहमदाबाद नगर पुलिस]] के साइबर अपराध प्रकोष्ठ ने राजस्थान से दो लोगों को गिरफ़्तार किया, जिन पर तत्काल सन्देश सेवा [[टेलीग्राम]] पर ऐसे चैनल संचालित करने का आरोप था जो नीट की पुनर्परीक्षा के प्रश्न उपलब्ध कराने का वचन देकर धन माँग रहे थे। यद्यपि, उनके पास प्रश्नपत्र का कोई वास्तविक साक्ष्य नहीं पाया गया।<ref>{{Cite news|url=https://www.thehindu.com/news/national/gujarat/ahmedabad-cyber-crime-police-bust-two-networks-running-neet-scams/article71105438.ece|title=Ahmedabad Cyber Crime Police bust two networks running NEET scams|last=|first=|date=2026-06-15|work=The Hindu|access-date=2026-06-20|language=en-IN|issn=0971-751X}}</ref> १६ जून २०२६ को [[इलेक्ट्रॉनिकी और सूचना प्रौद्योगिकी मंत्रालय|इलेक्ट्रॉनिकी एवं सूचना प्रौद्योगिकी मन्त्रालय]] (मेइटी) ने पुनर्परीक्षा से सम्बन्धित किसी भी अनावश्यक आँकड़े के प्रसार को रोकने के लिए २२ जून २०२६ तक सम्पूर्ण भारत में टेलीग्राम को अस्थायी रूप से अवरुद्ध करने का निदेश जारी किया। मन्त्रालय ने टेलीग्राम को ३० जून २०२६ तक सन्देश सम्पादन सुविधा को अवरुद्ध करने का भी निर्देश दिया ताकि इसके दुरुपयोग को सीमित किया जा सके।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/technology/tech-news/government-blocks-telegram-till-june-22-but-meitys-second-order-targeting-neet-ug-leaks-is/articleshow/131762730.cms|title=Government blocks Telegram till June 22 under Section 69A, NTA thanks MeitY for 'stepping in quickly'; some features blocked till June 30|date=2026-06-16|work=The Times of India|access-date=2026-06-17|issn=0971-8257}}</ref> इस क़दम का एनटीए ने स्वागत किया और आगे यह भी कहा कि जिन सामान्य जनता ने वास्तविक प्रयोजनों हेतु इस मंच का उपयोग किया, उन्हें हुई असुविधा पर उन्हें खेद है।<ref>{{cite web|url=https://www.thequint.com/opinion/government-ban-telegram-neet-paper-leak-own-failure|title=Banning Telegram is a Disproportionate Response to the NEET Paper Leak Crisis|last1=Choudhary|first1=Vedant|date=17 June 2026|website=TheQuint|language=en|access-date=18 June 2026}}</ref> टेलीग्राम ने इस निर्णय को [[दिल्ली उच्च न्यायालय]] में चुनौती दी थी। तथापि, न्यायालय ने आदेश को बरक़रार रखा।<ref>{{Cite news|url=https://www.thehindu.com/news/national/delhi-hc-upholds-temporary-ban-on-telegram-amid-neet-ug-re-exam/article71120875.ece|title=Ban on Telegram stays; it’s justified, says Delhi HC|last=Mishra|first=Ishita|date=2026-06-19|work=The Hindu|access-date=2026-06-20|language=en-IN|issn=0971-751X}}</ref> == सम्बन्धित विषय == * [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षण सेवा]] * [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)]] == सन्दर्भ == {{Reflist}} == अग्रिम पठन == * {{Cite news|url=https://www.aljazeera.com/news/2026/5/26/come-back-my-son-indian-exam-leak-leaves-trail-of-death-despair-anger|title=‘Come back, my son’: Indian exam leak leaves trail of death, despair, anger|last=Ammad|first=Aatif|date=26 May 2026|work=[[Al Jazeera English]]|access-date=26 May 2026}} * {{Cite news|url=https://frontline.thehindu.com/the-nation/neet-2026-cancellation-student-crisis/article71001783.ece|title=The real NEET crisis lies inside the system|last=Lakhera|first=Vedaant|date=22 May 2026|work=[[Frontline (magazine)]]|access-date=23 May 2026}} * {{Cite news|url=https://indianexpress.com/article/upsc-current-affairs/upsc-essentials/upsc-ethics-neet-paper-leak-ethical-governance-public-exams-nta-10694090/|title=NEET Paper Leak: What is ethical governance in public examinations?|last=Nilay|first=Nanditesh|date=17 May 2026|work=[[The Indian Express]]|access-date=17 May 2026}} * {{Cite news|url=https://indianexpress.com/article/education/the-professor-next-door-how-a-retired-latur-chemistry-teacher-went-from-neet-mentor-to-cbis-key-accused-10693289/|title=The professor next door: How a retired Latur chemistry teacher went from NEET mentor to CBI’s key accused|last=Ozarkar|first=Vallabh|date=16 May 2026|work=The Indian Express|access-date=17 May 2026}} * {{Cite web|url=https://www.livemint.com/news/india/neet-2026-paper-leak-from-involvement-of-nta-member-full-modus-operandi-to-arrests-what-we-know-so-far-on-cbi-probe-11778994671555.html|title=NEET 2026 paper leak: From involvement of NTA member to full modus operandi to arrests — what we know so far on CBI probe|last=Naaz|first=Fareha|date=16 May 2026|website=Mint|access-date=17 May 2026}} * {{Cite news|url=https://www.thehindu.com/opinion/editorial/testing-troubles-on-the-national-testing-agency-neet-ug-2026/article70974446.ece|title=Testing troubles: On the National Testing Agency, NEET-UG 2026|date=14 May 2026|work=The Hindu|access-date=19 May 2026}} * {{Cite news|url=https://timesofindia.indiatimes.com/education/news/neet-2026-paper-leak-how-many-more-scandals-before-students-lose-faith-completely/articleshow/131033092.cms|title=NEET 2026 paper leak: How many more scandals before students lose faith completely?|last=Tewari|first=Trisha|date=12 May 2026|work=[[The Times of India]]|access-date=21 May 2026}} * {{Cite news|url=https://www.news18.com/india/why-was-neet-ug-2026-cancelled-inside-the-paper-leak-trail-that-forced-nta-to-order-re-examination-ws-l-10086610.html|title=Why Was NEET-UG 2026 Cancelled? Inside The Paper Leak Trail That Forced NTA To Order Re-Examination|last=Ratti|first=Pragati|date=12 May 2026|work=News18|access-date=17 May 2026}} [[श्रेणी:भारत में शिक्षा]] [[श्रेणी:शिक्षा]] [[श्रेणी:विवाद]] 6gu7qqrzfwc0s2igoihl3eotgub6crw 6586748 6586747 2026-07-17T12:24:19Z स्वर्ण 883468 6586748 wikitext text/x-wiki {{Infobox event | name = एनटीए नीट विवाद २०२६ <br> <small> {{lang|en|NTA NEET controversy 2026|italics=no}} </small> | image = | image_caption = नीट स्नातक २०२६ के रद्द होने के पश्चात् विरोध प्रदर्शन | date = ३ मई २०२६ ईस्वी | location = {{IND}} | coordinates = | type = परीक्षा काण्ड | cause = कथित प्रश्नपत्र रिसाव एवं अनियमितताएँ | participants = [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षण सेवा]], छात्रगण, [[केन्द्रीय अन्वेषण ब्यूरो]], [[राजस्थान पुलिस]] | outcome = ३ मई की परीक्षा का रद्दीकरण; पुनर्परीक्षा निर्धारित; सीबीआई अन्वेषण एवं गिरफ़्तारियाँ }} '''२०२६ नीट विवाद''' ({{langx|en|2026 NEET controversy|italics=no}}; जिसे '''२०२६ नीट-यूजी''' विवाद भी कहा जाता है) भारत गणराज्य की [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षा सेवा (एनटीए)]] द्वारा आयोजित [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)|राष्ट्रीय पात्रता व प्रवेश परीक्षा]] २०२६ में व्यापक स्तर पर हुए प्रश्नपत्र रिसाव और अनियमितताओं का एक बड़ा प्रकरण है। ३ मई २०२६ ई॰ को आयोजित यह परीक्षा, जिसमें स्नातक चिकित्सा एवं दन्त चिकित्सा पाठ्यक्रमों में प्रवेश चाहने वाले २२.७० लाख से अधिक अभ्यर्थी सम्मिलित हुए थे, १२ मई २०२६ को अन्वेषण के पश्चात् रद्द कर दी गई। अन्वेषण से ज्ञात हुआ कि पूर्व-प्रसारित एक अनुमानित प्रश्नपत्र और वास्तविक प्रश्नपत्र के बीच पर्याप्त समानता थी, जिसके परिणामस्वरूप एनटीए के आन्तरिक लोगों सहित अनेक व्यक्तियों को गिरफ़्तार किया गया।<ref>{{Cite news|url=https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|title=NEET-UG 2026 under scanner as Rajasthan SOG probes ‘guess paper’ leak|last=|first=|date=2026-05-11|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> इस विवाद ने देशव्यापी प्रदर्शनों, राजनीतिक आलोचनाओं और [[भारत का उच्चतम न्यायालय|भारत के उच्चतम न्यायालय]] में याचिकाओं को जन्म दिया। यह प्रकरण पूर्व की परीक्षा-सम्बन्धी अनियमितताओं, विशेषतः २०२४ के नीट विवाद के समान था। == पृष्ठभूमि == [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)|राष्ट्रीय पात्रता व प्रवेश परीक्षा]], जो पूर्व में [[अखिल भारतीय आयुर्विज्ञान-पूर्व परीक्षा|अखिल भारतीय आयुर्विज्ञान पूर्व परीक्षा]] (एआईपीएमटी) कहलाती थी, [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षा सेवा]] (एनटीए) द्वारा स्नातक चिकित्सा पाठ्यक्रमों में प्रवेश हेतु आयोजित एक अखिल भारतीय प्रवेश परीक्षा है।<ref>{{Cite press release|title=Medical Council of India Notification|date=1 March 2018|publisher=[[National Medical Commission|Medical Council of India]]|url=https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|access-date=6 December 2020|archive-date=17 April 2021|archive-url=https://web.archive.org/web/20210417182348/https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|url-status=dead}}</ref> चिकित्सा पाठ्यक्रमों में प्रवेश के लिए अनिवार्य होने के कारण, यह आवेदकों की संख्या की दृष्टि से भारत की सबसे बड़ी परीक्षा है।<ref>{{Cite press release|title=Medical Council of India Notification|date=1 March 2018|publisher=[[National Medical Commission|Medical Council of India]]|url=https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|access-date=6 December 2020|archive-date=17 April 2021|archive-url=https://web.archive.org/web/20210417182348/https://www.nmc.org.in/ActivitiWebClient/open/getDocument?path=/Documents/Public/Portal/Gazette/Eligibility-01.03.2018.pdf|url-status=dead}}</ref> सितम्बर २०१९ में राष्ट्रीय आयुर्विज्ञान आयोग अधिनियम २०१९ के लागू होने के पश्चात्, नीट-स्नातक भारत के समस्त चिकित्सा महाविद्यालयों, जिनमें [[अखिल भारतीय आयुर्विज्ञान संस्थान]] (एम्स) और [[जवाहरलाल स्नातकोत्तर चिकित्सा शिक्षा एवं अनुसंधान संस्थान|जवाहरलाल स्नातकोत्तर आयुर्विज्ञान शिक्षा एवं अनुसन्धान संस्थान]] (जिपमर) भी सम्मिलित हैं (जो तब तक पृथक परीक्षाएँ आयोजित करते थे), में प्रवेश के लिए एकमात्र परीक्षा बन गई।<ref>{{Cite web|url=https://www.livemint.com/news/india/common-neet-under-graduate-exam-from-2020-21-as-per-nmc-act-centre-11570173347395.html|title=Common NEET under graduate exam from 2020–21 as per NMC Act: Centre|last=Sharma|first=Neetu Chandra|date=4 October 2019|website=Livemint|language=en|access-date=28 July 2020}}</ref> २०२४ में, पाँच मई को नीट-स्नातक परीक्षा के दिन, एक ऐसा ही विवाद तब उत्पन्न हुआ था जब सामाजिक माध्यमों पर अनेक पोस्टों में आरोप लगाया गया कि परीक्षा के प्रश्न पहले ही प्रसारित कर दिए गए थे।<ref>{{cite news|url=https://thewire.in/article/education/neet-ug-nta-paper-leak-rajasthan-bihar|title=NEET: NTA Says 'No Paper Leak' in Rajasthan; Patna Police File FIR|date=6 May 2024|work=[[The Wire (India)|The Wire]]|access-date=22 June 2024|archive-url=https://web.archive.org/web/20240729060542/https://thewire.in/article/education/neet-ug-nta-paper-leak-rajasthan-bihar|archive-date=29 July 2024|url-status=live}}</ref> == प्रश्नपत्र रिसाव और परीक्षा रद्दीकरण == तीन मई की परीक्षा के कुछ ही समय पश्चात् यह आरोप उभरे कि सीकर, राजस्थान जैसे प्रशिक्षण केंद्रों में [[वाट्सऐप|व्हाट्सएप]] तथा अन्य माध्यमों से साझा किए गए एक अनुमानित प्रश्नपत्र या प्रश्न-बैंक के अनेक प्रश्न वास्तविक परीक्षा के प्रश्नों, विशेषकर रसायन विज्ञान और जीव विज्ञान में, से साम्य रखते थे।<ref>{{Cite web|url=https://indianexpress.com/article/education/neet-ug-cancellation-anatomy-of-a-leak-a-paid-whatsapp-group-a-whistleblower-under-cloud-and-a-guess-paper-that-spread-like-wildfire-10686438/|title=Anatomy of a NEET leak: A paid WhatsApp group, a whistleblower under cloud, and a ‘guess paper’ that spread like wildfire|last=Khan|first=Hamza|date=2026-05-13|website=[[The Indian Express]]|language=en|access-date=2026-05-17}}</ref> समाचारों के अनुसार, १२० तक प्रश्नों में समानता थी।<ref>{{Cite web|url=https://theprint.in/india/what-we-know-about-neet-ug-leak-pdf-that-got-120-of-180-questions-right-nashik-student-detained/2928960/|title=What we know about NEET (UG) ‘leak’—PDF that got 120 of 180 questions right, Nashik student detained|last=Kumar|first=Mayank|date=2026-05-12|website=ThePrint|language=en-US|access-date=2026-05-17}}</ref> [[सीकर]] के एक रसायन विज्ञान शिक्षक, शशिकान्त सुथार ने अनुमानित प्रश्नपत्र की सामग्री की तुलना आधिकारिक प्रश्नपत्र से करने के पश्चात् अधिकारियों को प्रसारित प्रश्नों के वितरण की सूचना दी और बताया कि लगभग १४० प्रश्न वास्तविक परीक्षा से मेल खाते थे।<ref>{{Cite news|url=https://www.ndtv.com/india-news/how-a-rajasthan-chemistry-teacher-blew-the-lid-off-neet-paper-leak-11516723|title=Exclusive: How A Chemistry Teacher Blew The Lid Off NEET Paper Leak|last=Asim|first=Mohd|date=19 May 2026|work=NDTV|url-status=live}}</ref> राजस्थान पुलिस के विशेष अभियान समूह ने अन्वेषण प्रारम्भ किया, जिसके फलस्वरूप अनेक गिरफ़्तारियाँ हुईं।<ref>{{Cite web|url=https://indianexpress.com/article/education/exclusive-what-teacher-who-first-flagged-neet-leak-wrote-in-his-complaint-10688249/|title=Exclusive {{!}} What teacher who first flagged NEET leak wrote in his complaint|last=Khan|first=Hamza|date=2026-05-14|website=The Indian Express|language=en|access-date=2026-05-17}}</ref> बाद में, यह मामला [[केन्द्रीय अन्वेषण ब्यूरो]] (सीबीआई) को स्थानान्तरित कर दिया गया।<ref name="The Hindu_NEET_Protests_Live">{{Cite news|url=https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|title=NEET-UG 2026 cancelled LIVE: CBI to probe paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512102104/https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> १२ मई २०२६ को एनटीए ने घोषणा की कि परीक्षा आधिकारिक रूप से रद्द कर दी गई है और पुनर्परीक्षा आयोजित की जाएगी। एक्स (X) पर जारी वक्तव्य में एनटीए ने कहा कि यह निर्णय “छात्रों के हित में” और राष्ट्रीय परीक्षा प्रणाली की विश्वसनीयता की रक्षा हेतु लिया गया है।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-what-happens-next-heres-what-students-need-to-know/article70969954.ece|title=NEET-UG 2026 cancelled: What happens next? Here's what students need to know|work=The Hindu|access-date=2026-05-15|archive-url=https://web.archive.org/web/20260512213730/https://www.thehindu.com/education/neet-ug-2026-cancelled-what-happens-next-heres-what-students-need-to-know/article70969954.ece|archive-date=2026-05-12|language=en}}</ref> साथ ही यह सुनिश्चित किया गया कि पुनर्परीक्षा की तिथियाँ पृथक से घोषित की जाएँगी।<ref name="TheHindu_NEET_Reconduct">{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|title=NEET UG 2026 cancelled: Fresh exam to be conducted following paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512080216/https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> एनटीए ने यह भी स्पष्ट किया कि अभ्यर्थियों द्वारा पहले जमा शुल्क लौटा दिया जाएगा और न तो नवीन पंजीकरण की आवश्यकता होगी और न ही किसी अतिरिक्त शुल्क की; पूर्ववत अभ्यर्थी आँकड़ों और परीक्षा केन्द्रों का ही उपयोग किया जाएगा।<ref name="TheHindu_NEET_Reconduct2">{{Cite news|url=https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|title=NEET UG 2026 cancelled: Fresh exam to be conducted following paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512080216/https://www.thehindu.com/education/neet-ug-2026-cancelled-to-be-reconducted-paper-leak-nta-may-12-2026/article70968713.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> १५ मई को एनटीए ने घोषणा की कि पुनर्परीक्षा २१ जून २०२६ को होगी तथा अभ्यर्थियों को उनके आवेदन शुल्क की वापसी का आश्वासन दिया गया।<ref>{{Cite news|url=https://www.thehindu.com/education/national-testing-agency-announces-neet-ug-re-exam-on-june-21/article70981544.ece|title=National Testing Agency announces NEET-UG re-exam on June 21|last=PTI|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite web|url=https://indianexpress.com/article/india/neet-ug-2026-retest-to-be-held-on-june-21-nta-announces-10690442/|title=NEET-UG 2026 re-exam to be held on June 21, says National Testing Agency|date=2026-05-15|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref name=":0">{{Cite web|url=https://thewire.in/education/neet-2026-re-examination-on-june-21-minister-pradhan-says-exam-to-be-computer-based-from-next-year|title=NEET 2026 Re-Examination on June 21, Minister Pradhan Says Exam to be Computer-Based from Next Year|website=The Wire|language=en|access-date=2026-05-17}}</ref> == अन्वेषण एवं गिरफ़्तारियाँ == राजस्थान में [[राजस्थान पुलिस|विशेष अभियान समूह]] ने लातूर के एक प्रशिक्षण संस्थान से पता चले एक अभ्यास-प्रश्नपत्र के ४५ में से ४२ प्रश्नों के वास्तविक परीक्षा में मिलने के पश्चात् जाँच प्रारम्भ की।<ref name="TheHind_NTA_Commitment">{{Cite news|url=https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|title=NEET-UG 2026: NTA says committed to fair, credible exams amid Rajasthan SOG probe|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260511105956/https://www.thehindu.com/news/national/rajasthan/neet-ug-2026-nta-says-committed-to-fair-credible-exams-amid-rajasthan-sog-probe/article70965258.ece|archive-date=2026-05-11|language=en|url-status=live}}</ref> प्रश्नपत्र का पता लगने पर, [[नाशिक|नासिक]], महाराष्ट्र में डॉ॰ शुभम खैरनार को प्रारम्भिक रूप से गिरफ़्तार किया गया, जिन्होंने प्राथमिक स्रोत से प्रश्नपत्र प्राप्त कर १५ लाख रुपये में विद्यार्थियों को वितरित किए थे। १२ मई २०२६ को सीबीआई ने आधिकारिक रूप से अन्वेषण का कार्यभार ग्रहण किया और पुणे स्थित रसायन विज्ञान के प्राध्यापक पी॰ वी॰ कुलकर्णी, जिन्हें एनटीए की प्रक्रियाओं से जुड़ा मुख्य अभियुक्त बताया गया, तथा जीव विज्ञान की प्राध्यापिका मनीषा गुरुनाथ मण्डारे सहित अनेक व्यक्तियों की गिरफ़्तारी की घोषणा की।<ref name="The Hindu_NEET_Protests_Live2">{{Cite news|url=https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|title=NEET-UG 2026 cancelled LIVE: CBI to probe paper leak allegations|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512102104/https://www.thehindu.com/education/neet-ug-nta-exam-cancellation-protest-around-india-cbi-probe-paper-leak-may-12-2026-live-updates/article70969020.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref><ref>{{Cite news|url=https://indianexpress.com/article/education/neet-paper-leak-nta-cancels-neet-ug-2026-fresh-dates-soon-10685084/|title=Amid paper leak row, National Testing Agency cancels NEET UG 2026|date=2026-05-12|work=The Indian Express|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512142237/https://indianexpress.com/article/education/neet-paper-leak-nta-cancels-neet-ug-2026-fresh-dates-soon-10685084/|archive-date=2026-05-12|language=en-US|url-status=live}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/cbi-arrests-mastermind-linked-to-neet-ug-2026-biology-paper-leak/article70986701.ece|title=CBI arrests ‘mastermind’ linked to NEET-UG 2026 biology paper leak|last=Pandey|first=Devesh K.|date=2026-05-16|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite news|url=https://www.pib.gov.in/PressReleasePage.aspx?PRID=2261565&reg=3&lang=2|title=CBI arrests Kingpin in NEET-UG 2026 Paper Leak Case|date=15 May 2026|access-date=17 May 2026|publisher=[[Press Information Bureau]]}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/cbi-nabs-alleged-mastermind-behind-neet-ug-2026-chemistry-paper-leak/article70983707.ece|title=CBI nabs alleged mastermind behind NEET-UG 2026 chemistry paper leak|last=Pandey|first=Devesh K.|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> अभियुक्त कथित रूप से विशेष कक्षाएँ चला रहे थे, जिनमें परीक्षा के प्रश्न लिखवाए जाते थे और हस्तलिखित टिप्पणियाँ वास्तविक परीक्षा से मेल खाती पाई गईं।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-ug-leak-question-paper-was-handwritten-scanned-and-circulated-students-paid-lakhs-cbi-probe-finds/articleshow/131082712.cms|title=NEET-UG leak: Question paper was handwritten, scanned and circulated; students paid lakhs, CBI probe finds|date=2026-05-14|work=The Times of India|access-date=2026-05-17|issn=0971-8257}}</ref> छापों के समय, अधिकारियों ने प्रश्न रिसाव से जुड़े विद्युतीय उपकरण और टिप्पणियाँ बरामद कीं।<ref>{{Cite news|url=https://www.news18.com/india/neet-paper-leak-case-cbi-finds-digital-footprints-recovered-phones-sent-for-forensic-tests-ws-l-10091409.html|title=NEET Paper Leak Case: CBI Finds Digital Footprints, Recovered Phones Sent For Forensic Tests|work=News18|access-date=2026-05-19|archive-url=https://web.archive.org/web/20260515003900/https://www.news18.com/india/neet-paper-leak-case-cbi-finds-digital-footprints-recovered-phones-sent-for-forensic-tests-ws-l-10091409.html|archive-date=2026-05-15|language=en-US}}</ref> अन्वेषकों के अनुसार, यह तन्त्र राजस्थान, महाराष्ट्र एवं अन्य राज्यों में फैला हुआ था। केन्द्रीय शिक्षामन्त्री [[धर्मेंद्र प्रधान|धर्मेन्द्र प्रधान]] ने स्वीकार किया कि “निन्ंत्रण शृंखला में सेंध” लगी थी और २०२७ से नीट को संगणक-आधारित परीक्षा प्रारूप में परिवर्तित करने की योजना की घोषणा की।<ref>{{Cite web|url=https://indianexpress.com/article/education/neet-ug-2026-to-go-cbt-from-next-year-re-exam-on-june-21-dharmendra-pradhan-after-paper-leak-row-10690559/|title=NEET insider held for paper leak, Government says exam to be online from 2027|date=2026-05-15|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-paper-leak-row-exam-to-go-fully-computer-based-from-next-year-says-education-minister-pradhan/article70981929.ece|title=NEET-UG paper leak row: Exam to go fully computer-based from next year, says Education Minister Pradhan|last=|first=|date=2026-05-15|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref name=":02">{{Cite web|url=https://thewire.in/education/neet-2026-re-examination-on-june-21-minister-pradhan-says-exam-to-be-computer-based-from-next-year|title=NEET 2026 Re-Examination on June 21, Minister Pradhan Says Exam to be Computer-Based from Next Year|website=The Wire|language=en|access-date=2026-05-17}}</ref> सीबीआई अन्वेषकों को ऐसे साक्ष्य प्राप्त हुए कि २०२५ का नीट-स्नातक प्रश्नपत्र भी उसी गिरोह द्वारा दूषित किया गया था, जो २०२६ के रिसाव का उत्तरदायी था।<ref>{{Cite web|url=https://www.indiatoday.in/india/story/neet-ug-2025-paper-leak-sikar-suspects-linked-to-maharashtra-network-2912097-2026-05-15|title=Rajasthan family at centre of NEET leak row had obtained 2025 paper as well: Sources|last=Kumar|first=Sharat|date=2026-05-15|website=India Today|language=en|access-date=2026-05-28}}</ref> १८ मई २०२६ को सीबीआई ने महाराष्ट्र के [[लातूर]] स्थित रेणुकाई रसायन विज्ञान प्रशिक्षण संस्थान के स्वामी शिवराज मोटेगांवकर को प्रश्नपत्र रिसाव के सम्बन्ध में गिरफ़्तार किया।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-paper-leak-fallout-why-nta-must-transform-nta-into-a-single-digital-testing-authority/article70995494.ece|title=NEET paper leak fallout: Why NTA must transform into a single digital testing authority|last=Rao|first=O. R. S.|date=2026-05-19|work=The Hindu|access-date=2026-05-19|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite web|url=https://indianexpress.com/article/education/shivraj-maotegaonkar-10th-arrest-neet-paper-leak-case-10695558/|title=From bicycle tutor to coaching giant: Who is Shivraj Motegaonkar, the 10th arrest by CBI in NEET UG paper leak case?|last=Ozarkar|first=Vallabh|date=2026-05-18|website=The Indian Express|language=en|access-date=2026-05-19}}</ref> अन्वेषण अभिकरण ने नई दिल्ली न्यायालय को बताया कि मोटेगांवकर को २३ अप्रैल २०२६ को रसायन विज्ञान के प्रश्न प्राप्त हुए थे। बाद में एक वीडियो में वे यह दावा करते भी दिखे कि उनके विद्यार्थियों को दिए गए अभ्यास प्रश्न वास्तविक परीक्षा में उपस्थित थे। उनके आवास और संस्थान से प्रश्न-बैंक, प्रलेख, फ़ोन और सुवाह्य संगणक आगे के विश्लेषण हेतु ज़ब्त किए गए। उन्हें नौ दिनों की सीबीआई हिरासत में भेज दिया गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-leak-cbi-arrests-coaching-centre-founder/articleshow/131185733.cms|title=NEET leak: CBI arrests coaching centre founder|date=2026-05-19|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref><ref>{{Cite web|url=https://cbi.gov.in/assets/files/media/658964047PC%20Dated%2019.05.2026%20(1).pdf|title=CBI in the News: Clippings dated 19.05.2026|website=[[Central Bureau of Investigation]]|access-date=2 June 2026}}</ref> सीबीआई ने नागपुर में दो स्थानों पर उन अभ्यर्थियों के आवासों पर आगे की जाँच की, जिन्हें कथित तौर पर रिसाव प्रश्नपत्र प्राप्त हुए थे। ऐसा विश्वास था कि वे पुणे में पूर्व में गिरफ़्तार सौन्दर्य प्रसाधनालय स्वामिनी मनीषा वाघमारे के सम्पर्क में थे। अभिकरण को सन्देह था कि विद्यार्थियों को परीक्षा से एक दिन पूर्व पुणे बुलाया गया, जहाँ एक निजी सत्र में प्रश्नों पर विचार-विमर्श किया गया। तथापि, इस अन्वेषण के पश्चात् कोई गिरफ़्तारी नहीं हुई।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/nagpur/neet-paper-leak-cbi-raids-nagpur-chanda-students/articleshow/131210786.cms|title=NEET paper leak: CBI raids Nagpur & Chanda students|date=2026-05-20|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> २२ मई २०२६ को सीबीआई ने पुणे के एक विद्यालय की प्रधानाध्यापिका मनीषा संजय हवालदार को भौतिकी का प्रश्नपत्र कथित रूप से प्रसारित करने के आरोप में गिरफ़्तार किया, जो बाद में वास्तविक परीक्षा में प्रकट हुआ।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/aurangabad/cbi-arrests-pune-headmistress-in-neet-ug-2026-paper-leak-case-questions-third-latur-doctor/articleshow/131266587.cms|title=CBI arrests Pune headmistress in NEET-UG 2026 paper leak case, questions third Latur doctor|date=2026-05-24|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> उन्हें इन प्रश्नों तक इसलिए पहुँच थी क्योंकि उन्हें एनटीए द्वारा विषय विशेषज्ञ के रूप में नियुक्त किया गया था। हवालदार ने अन्वेषकों के समक्ष स्वीकार किया कि उन्होंने भौतिकी के प्रश्नों को स्मृति से याद कर एक विद्यार्थी के साथ साझा किया था। ये आगे मण्डारे के अनुरोध पर एक सन्देश अनुप्रयोग के माध्यम से प्रसारित हुए। पुणे स्थित उनके आवास पर छापे के समय सीबीआई ने अनेक नीट-स्नातक प्रश्नपत्र, एनटीए परिचय पत्र की प्रतिलिपियाँ और नकदी सहित अन्य सामग्री बरामद की। हवालदार ने यह भी स्वीकार किया कि उन्होंने विद्यालय के संगणक का उपयोग कर रिसाव सामग्री मुद्रित की और तत्पश्चात मण्डारे के साथ हुई वार्ता का इतिहास मिटा दिया तथा अपनी हस्तलिखित टिप्पणियाँ जला दीं।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/pune/arrested-headmistress-recalled-physics-questions-from-neet-paper-from-memory-provided-them-to-student-cbi/articleshow/131285379.cms|title=NEET paper leak: Arrested headmistress recalled physics questions from from memory, CBI tells court|date=2026-05-24|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> हवालदार से भौतिकी के प्रश्न प्राप्त करने वाले विद्यार्थी को २६ मई २०२६ को गिरफ़्तार किया गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/pune/cbi-arrests-student-who-received-physics-questions-from-pune-school-headmistress-in-neet-ug-paper-leak-case/articleshow/131337108.cms|title=CBI arrests student who received physics questions from Pune school headmistress in NEET-UG paper leak case|date=2026-05-27|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> सीबीआई ने बाद में स्पष्ट किया कि यह ‘विद्यार्थी’ वस्तुतः भौतिकी का शिक्षक तेजस हर्षदकुमार शाह था, जो पुणे स्थित डॉ॰ अभंग प्रभु चिकित्सा अकादमी से सम्बद्ध था। सीबीआई ने लातूर के शिशु रोग विशेषज्ञ डॉ॰ मनोज शिरुरे को भी गिरफ़्तार किया। उत्तरार्ध पर संदेह था कि वे उन चिकित्सकों के समूह में उपस्थित थे जिन्होंने अपने सम्बन्धियों के लिए रिसाव प्रश्नपत्र प्राप्त करने हेतु धनराशि का भुगतान किया था। सीबीआई अन्वेषण से शाह और हवालदार के पति के मध्य वित्तीय लेनदेन और व्हाट्सएप वार्ता का ख़ुलासा हुआ। शाह का नम्बर हवालदार के उपकरण में ‘ईश्वर’ के रूप में सुरक्षित था। शाह ने हवालदार से रिसाव प्रश्न प्राप्त कर उन्हें मोटेगांवकर को दिया, जिन्होंने अन्ततः उन्हें शिरुरे तक पहुँचाया। अभिकरण ने आगे जोड़ा कि शिरुरे और कुलकर्णी ने कथित रूप से उन विद्यार्थियों के लिए विशेष प्रशिक्षण सत्र चलाए जिनके परिवारों ने रिसाव प्रश्नों के लिए प्रति २ लाख रुपये (लगभग २१०० अमरीकी डॉलर) से १० लाख रुपये (लगभग १०,००० अमरीकी डॉलर) तक का भुगतान किया था।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/city/aurangabad/cbi-arrests-latur-paediatrician-pune-physics-teacher-in-neet-ug-paper-leak-case/articleshow/131358581.cms|title=‘God’ in contact list: CBI uncovers chilling WhatsApp trail in NEET-UG leak probe|date=2026-05-28|work=The Times of India|access-date=2026-06-01|issn=0971-8257}}</ref> == प्रतिक्रियाएँ == परीक्षा रद्द होने से दिल्ली एवं अन्य नगरों में छात्रों और अभिभावकों द्वारा व्यापक प्रदर्शन हुए, जिनमें दिल्ली के [[शास्त्री भवन]] में [[नेशनल स्टूडेंट यूनियन ऑफ इंडिया|भारतीय राष्ट्रीय छात्र संघ]] के सदस्यों का प्रदर्शन भी सम्मिलित था।<ref>{{Cite web|url=https://www.bbc.com/news/articles/cwy2gd508n9o|title=NEET 2026: Protests in India after medical entrance test scrapped over leak claims|last=Yadav|first=Nikita|date=2026-05-12|website=[[BBC]]|language=en-GB|access-date=2026-05-17}}</ref> लोगों ने उत्तरदायित्व की माँग की तथा राष्ट्रीय परीक्षा अभिकरण के अधिकारियों के त्यागपत्र का आह्वान किया। अनेक छात्र समूहों ने कहा कि बार-बार हो रहे व्यवधानों से तनाव, चिन्ता और अभिप्रेरणा की हानि हुई है। समाचार माध्यमों के अनुसार, प्रश्नपत्र रिसाव के पश्चात् न्यूनतम तीन छात्रों ने [[आत्महत्या]] कर ली।<ref>{{Cite web|url=https://www.bbc.com/news/articles/ckgpdge641po|title=NEET 2026: India's aspiring doctors heartbroken by exam paper leak|last=Dey|first=Abhishek|last2=Yadav|first2=Nikita|date=2026-05-13|website=[[BBC]]|language=en-GB|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/education/we-protest-then-we-study-again-neet-2026-cancellation-leaves-students-helpless/article71005215.ece|title=We protest, then we study again': NEET 2026 cancellation leaves students helpless|last=Ahmed|first=Mantasha|date=2026-05-22|work=The Hindu|access-date=2026-05-22|language=en-IN|issn=0971-751X}}</ref> पूर्व मुख्यमन्त्री [[एम॰ के॰ स्टालिन]] ने केन्द्र सरकार से आग्रह किया कि वर्ष २०२६ के लिए नीट-स्नातक को छूट प्रदान की जाए और राज्यों को अपनी चिकित्सा प्रवेश प्रक्रिया निर्धारित करने की अनुमति दी जाए। उन्होंने नीट की आलोचना करते हुए तर्क दिया कि इसने चिकित्सा प्रवेश को अत्यधिक व्यावसायीकृत और प्रशिक्षण-केन्द्र-चालित प्रणाली में बदल दिया है, जिसमें शैक्षिक योग्यता या सामाजिक प्रतिबद्धता के स्थान पर आर्थिक विशेषाधिकार सफलता को निरंतर प्रभावित कर रहा है।<ref>{{Cite web|url=https://www.newindianexpress.com/states/tamil-nadu/2026/May/15/stalin-urges-pm-modi-to-exempt-neet-for-2026-27-allow-states-to-admit-students-based-on-marks|title=Stalin urges PM Modi to exempt NEET for 2026-27, allow states to admit students based on marks|last=|first=|date=2026-05-15|website=The New Indian Express|language=en|access-date=2026-05-31}}</ref><ref>{{Cite web|url=https://www.aninews.in/news/national/general-news/mk-stalin-urges-centre-to-exempt-neet-ug-for-2026-2027-allow-state-govts-to-make-admissions20260515083344/|title=MK Stalin urges Centre to exempt NEET-UG for 2026-2027, allow state govts to make admissions|website=ANI News|language=en|access-date=2026-05-31}}</ref> [[सी. जोसेफ विजय|सी॰ जोसेफ़ विजय]] सहित राजनीतिक नेताओं ने नीट को समाप्त करने का आह्वान किया। [[लोक सभा में विपक्ष के नेता|विपक्ष के नेता]] [[राहुल गांधी|राहुल गान्धी]] ने परीक्षा से निपटने के सरकार के ढंग की आलोचना करते हुए इस रिसाव को युवाओं के भविष्य के विरुद्ध “अपराध” बताया और परीक्षा प्रक्रिया की तुलना नीलामी से की।<ref>{{Cite news|url=https://www.thehindu.com/education/neet-ug-cancellation-rahul-gandhi-paper-leak/article70969233.ece|title=NEET-UG cancellation: PM's 'amrit kaal' turned into 'vish kaal' for country, Rahul Gandhi slams Government|work=The Hindu|access-date=2026-05-13|archive-url=https://web.archive.org/web/20260512105310/https://www.thehindu.com/education/neet-ug-cancellation-rahul-gandhi-paper-leak/article70969233.ece|archive-date=2026-05-12|language=en|url-status=live}}</ref> गान्धी की आलोचना पर प्रतिक्रिया देते हुए [[भारतीय जनता पार्टी]] (भाजपा) के प्रवक्ता [[संजय मयूख]] ने काँग्रेस नेता से इस विषय पर संकीर्ण राजनीति करने से विरत रहने का आग्रह किया।<ref>{{Cite web|url=https://theprint.in/india/not-the-time-to-exploit-students-anguish-bjp-slams-rahul-accuses-him-of-politicising-neet-leak/2933331/|title='Not the time to exploit students' anguish': BJP slams Rahul, accuses him of politicising NEET leak|last=|date=2026-05-16|website=ThePrint|language=en-US|access-date=2026-05-17}}</ref> अखिल भारतीय आयुर्विज्ञान संघ जैसे चिकित्सा संगठनों ने उच्चतम न्यायालय में याचिकाएँ दायर कर एनटीए में सुधार और न्यायालय-निगरानी में पुनर्परीक्षा की माँग की। शिक्षाविदों ने भी पुनर्परीक्षा की आलोचना करते हुए कहा कि यह ईमानदार विद्यार्थियों के साथ अन्यायपूर्ण था तथा इसने परीक्षा प्रणाली के प्रबन्धन में व्याप्त गम्भीर ख़ामियों को उजागर कर दिया।<ref>{{Cite web|url=https://indianexpress.com/article/legal-news/nta-exam-medical-body-supreme-court-after-neet-ug-paper-leak-10688631/|title=Replace NTA, hold exam under judicial supervision: Key demands of medical body in Supreme Court post NEET paper leak|last=Shaji|first=Ashish|date=2026-05-14|website=The Indian Express|language=en|access-date=2026-05-17}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/national/neet-ug-paper-leak-doctors-body-moves-supreme-court-to-make-nta-a-statutory-body-accountable-to-parliament/article70987832.ece|title=NEET-UG paper leak: Doctors' body moves Supreme Court to make NTA a statutory body accountable to Parliament|last=Rajagopal|first=Krishnadas|date=2026-05-16|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref><ref>{{Cite news|url=https://www.thehindu.com/news/cities/Mangalore/neet-2026-leak-re-examination-is-unfair-on-students-say-educationalists-in-coastal-karnataka/article70968984.ece|title=NEET UG 2026 cancelled: Re-exam is unfair on students, say educationalists in coastal Karnataka|last=|first=|date=2026-05-12|work=The Hindu|access-date=2026-05-17|language=en-IN|issn=0971-751X}}</ref> २५ मई २०२६ को [[भारत का उच्चतम न्यायालय|भारत के उच्चतम न्यायालय]] ने उस वर्ष के नीट-स्नातक प्रश्नपत्र रिसाव मामले पर अपने २०२४ के निर्णय के पश्चात् गठित समिति की सिफ़ारिशों के कार्यान्वयन पर स्थिति प्रतिवेदन माँगा।<ref>{{Cite news|url=https://www.business-standard.com/india-news/sc-pulls-up-nta-over-neet-ug-2026-cancellation-seeks-status-report-126052501487_1.html|title=SC pulls up NTA over NEET-UG 2026 cancellation, seeks status report|last=Mishra|first=Bhavini|date=25 May 2026|work=Business Standard|access-date=25 May 2026}}</ref> == विरोध प्रदर्शन == ६ जून २०२६ को [[कॉकरोच जनता पार्टी]] ने [[जंतर मंतर, दिल्ली|नई दिल्ली के जन्तर मन्तर]] पर एक प्रदर्शन का नेतृत्व किया जिसमें नीट प्रश्नपत्र रिसाव को लेकर केन्द्रीय शिक्षामन्त्री धर्मेन्द्र प्रधान के त्यागपत्र की माँग की गई।<ref>{{Cite web|url=https://www.aljazeera.com/features/2026/6/6/im-a-cockroach-gen-z-protest-movement-lands-in-indian-capital|title=‘I’m a cockroach’: Gen Z protest movement lands in Indian capital|last=Sharma|first=Yashraj|date=6 June 2026|website=Al Jazeera|language=en|access-date=2026-06-06}}</ref> पर्यावरणविद् एवं [[शैक्षिक सुधार|शिक्षा सुधारक]] [[सोनम वांगचुक]] कॉकरोच जनता पार्टी द्वारा आयोजित एक प्रदर्शन में प्रमुख व्यक्तित्व रहे हैं, जो राष्ट्रीय परीक्षाओं के संचालन में उत्तरदायित्व की माँग कर रहे हैं। वे [[अखिल भारतीय विद्यार्थी संघ]] के छः छात्रों के साथ अनिश्चितकालीन [[भूख हड़ताल]] का नेतृत्व कर रहे हैं। == पुनर्परीक्षा == २१ जून २०२६ को निर्धारित पुनर्परीक्षा से जुड़े प्रश्नपत्र निर्माताओं, अनुवादकों, मध्यस्थों एवं अन्य दल सदस्यों को एक अज्ञात स्थान पर सुरक्षित रखा गया। अंकीय उपकरणों का उपयोग प्रतिबन्धित कर दिया गया और केवल अधिकृत कार्मिकों को ही सुविधा केन्द्र में प्रवेश की अनुमति थी। समस्त सम्बद्ध व्यक्तियों को बाहरी स्रोतों से किसी भी सम्पर्क से बचाने के लिए परीक्षा समाप्ति तक निगरानी में रखा गया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/neet-paper-setters-to-be-in-lockdown-till-re-exam/articleshow/131573837.cms|title=NEET paper setters to be in lockdown till re-exam|date=2026-06-08|work=The Times of India|access-date=2026-06-17|issn=0971-8257}}</ref> प्रश्नपत्र विकास से लेकर अन्तिम परिवहन तक, प्रत्येक चरण पर सुरक्षा बढ़ा दी गई। रक्षामन्त्री [[राजनाथ सिंह]] की अध्यक्षता में हुई पूर्व उच्च-स्तरीय बैठक के सुझाव के पश्चात्, यह सुनिश्चित किया गया कि [[भारतीय वायुसेना]] के विमान प्रश्नपत्रों को विभिन्न उप-स्थानों तक ले जाएँगे, जहाँ से उन्हें पुनर्परीक्षा हेतु परीक्षा केन्द्रों पर भेजा जाएगा।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/india/govt-may-use-iaf-aircraft-to-transport-question-papers-for-neet-retest-report/articleshow/131373365.cms|title=Govt may use IAF aircraft to transport question papers for NEET retest: Report|date=2026-05-28|work=The Times of India|access-date=2026-05-28|issn=0971-8257}}</ref><ref>{{Cite news|url=https://economictimes.indiatimes.com/news/india/iaf-to-transport-neet-question-papers-enhanced-security-measures-announced-for-june-21-exam/articleshow/131557535.cms|title=IAF being engaged to transport NEET question papers: NTA DG|date=2026-06-06|work=The Economic Times|access-date=2026-06-17|issn=0013-0389}}</ref> पुनर्परीक्षा के प्रवेशपत्र डाउनलोड करते समय अनेक अभ्यर्थियों ने आधिकारिक प्रवेशद्वार पर तकनीकी बाधाएँ आने की सूचना दी और शुल्क वापसी प्रक्रिया के सम्बन्ध में स्पष्टीकरण भी माँगा। उठाई गई समस्याओं को एनटीए ने स्वीकार किया और सम्बन्धित दलों द्वारा शीघ्र समाधान का आश्वासन दिया।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/education/news/neet-ug-admit-card-2026-nta-assures-quick-fix-as-hall-ticket-download-problems-continue/articleshow/131734818.cms|title=NEET UG admit card 2026: NTA assures quick fix as re-NEET hall ticket download problems continue|date=2026-06-15|work=The Times of India|access-date=2026-06-20|issn=0971-8257}}</ref> इसके अतिरिक्त, अभिकरण ने यह भी बताया कि वापसी राशि सीधे आधिकारिक प्रवेशद्वार पर साझा बैंक विवरण में जमा कर दी जाएगी तथा विद्यार्थियों को इस प्रक्रिया से जुड़े अन्तर्जाल पर प्रसारित होने वाले कपटपूर्ण सन्देशों से सावधान रहने की सलाह दी।<ref>{{Cite web|url=https://www.hindustantimes.com/india-news/neetug-retest-students-face-trouble-accessing-admit-cards-101781582738784.html|title=NEET-UG retest students face trouble accessing admit cards|last=Maurya|first=Sanjay|date=2026-06-16|website=Hindustan Times|language=en|access-date=2026-06-20}}</ref> एनटीए ने सन्दिग्ध गतिविधि पर निगरानी रखने तथा पुनर्परीक्षा से सम्बन्धित मिथ्या सूचना चिह्नित करने के लिए सामाजिक माध्यमों एवं सन्देशन मंचों की निगरानी हेतु सम्बन्धित प्राधिकरणों के साथ कार्य किया। इस प्रयास के अंग के रूप में, [[अहमदाबाद नगर पुलिस]] के साइबर अपराध प्रकोष्ठ ने राजस्थान से दो लोगों को गिरफ़्तार किया, जिन पर तत्काल सन्देश सेवा [[टेलीग्राम]] पर ऐसे चैनल संचालित करने का आरोप था जो नीट की पुनर्परीक्षा के प्रश्न उपलब्ध कराने का वचन देकर धन माँग रहे थे। यद्यपि, उनके पास प्रश्नपत्र का कोई वास्तविक साक्ष्य नहीं पाया गया।<ref>{{Cite news|url=https://www.thehindu.com/news/national/gujarat/ahmedabad-cyber-crime-police-bust-two-networks-running-neet-scams/article71105438.ece|title=Ahmedabad Cyber Crime Police bust two networks running NEET scams|last=|first=|date=2026-06-15|work=The Hindu|access-date=2026-06-20|language=en-IN|issn=0971-751X}}</ref> १६ जून २०२६ को [[इलेक्ट्रॉनिकी और सूचना प्रौद्योगिकी मंत्रालय|इलेक्ट्रॉनिकी एवं सूचना प्रौद्योगिकी मन्त्रालय]] (मेइटी) ने पुनर्परीक्षा से सम्बन्धित किसी भी अनावश्यक आँकड़े के प्रसार को रोकने के लिए २२ जून २०२६ तक सम्पूर्ण भारत में टेलीग्राम को अस्थायी रूप से अवरुद्ध करने का निदेश जारी किया। मन्त्रालय ने टेलीग्राम को ३० जून २०२६ तक सन्देश सम्पादन सुविधा को अवरुद्ध करने का भी निर्देश दिया ताकि इसके दुरुपयोग को सीमित किया जा सके।<ref>{{Cite news|url=https://timesofindia.indiatimes.com/technology/tech-news/government-blocks-telegram-till-june-22-but-meitys-second-order-targeting-neet-ug-leaks-is/articleshow/131762730.cms|title=Government blocks Telegram till June 22 under Section 69A, NTA thanks MeitY for 'stepping in quickly'; some features blocked till June 30|date=2026-06-16|work=The Times of India|access-date=2026-06-17|issn=0971-8257}}</ref> इस क़दम का एनटीए ने स्वागत किया और आगे यह भी कहा कि जिन सामान्य जनता ने वास्तविक प्रयोजनों हेतु इस मंच का उपयोग किया, उन्हें हुई असुविधा पर उन्हें खेद है।<ref>{{cite web|url=https://www.thequint.com/opinion/government-ban-telegram-neet-paper-leak-own-failure|title=Banning Telegram is a Disproportionate Response to the NEET Paper Leak Crisis|last1=Choudhary|first1=Vedant|date=17 June 2026|website=TheQuint|language=en|access-date=18 June 2026}}</ref> टेलीग्राम ने इस निर्णय को [[दिल्ली उच्च न्यायालय]] में चुनौती दी थी। तथापि, न्यायालय ने आदेश को बरक़रार रखा।<ref>{{Cite news|url=https://www.thehindu.com/news/national/delhi-hc-upholds-temporary-ban-on-telegram-amid-neet-ug-re-exam/article71120875.ece|title=Ban on Telegram stays; it’s justified, says Delhi HC|last=Mishra|first=Ishita|date=2026-06-19|work=The Hindu|access-date=2026-06-20|language=en-IN|issn=0971-751X}}</ref> == सम्बन्धित विषय == * [[राष्ट्रीय परीक्षण सेवा (भारत)|राष्ट्रीय परीक्षण सेवा]] * [[राष्ट्रीय पात्रता व प्रवेश परीक्षा (नीट)]] == सन्दर्भ == {{Reflist}} == अग्रिम पठन == * {{Cite news|url=https://www.aljazeera.com/news/2026/5/26/come-back-my-son-indian-exam-leak-leaves-trail-of-death-despair-anger|title=‘Come back, my son’: Indian exam leak leaves trail of death, despair, anger|last=Ammad|first=Aatif|date=26 May 2026|work=[[Al Jazeera English]]|access-date=26 May 2026}} * {{Cite news|url=https://frontline.thehindu.com/the-nation/neet-2026-cancellation-student-crisis/article71001783.ece|title=The real NEET crisis lies inside the system|last=Lakhera|first=Vedaant|date=22 May 2026|work=[[Frontline (magazine)]]|access-date=23 May 2026}} * {{Cite news|url=https://indianexpress.com/article/upsc-current-affairs/upsc-essentials/upsc-ethics-neet-paper-leak-ethical-governance-public-exams-nta-10694090/|title=NEET Paper Leak: What is ethical governance in public examinations?|last=Nilay|first=Nanditesh|date=17 May 2026|work=[[The Indian Express]]|access-date=17 May 2026}} * {{Cite news|url=https://indianexpress.com/article/education/the-professor-next-door-how-a-retired-latur-chemistry-teacher-went-from-neet-mentor-to-cbis-key-accused-10693289/|title=The professor next door: How a retired Latur chemistry teacher went from NEET mentor to CBI’s key accused|last=Ozarkar|first=Vallabh|date=16 May 2026|work=The Indian Express|access-date=17 May 2026}} * {{Cite web|url=https://www.livemint.com/news/india/neet-2026-paper-leak-from-involvement-of-nta-member-full-modus-operandi-to-arrests-what-we-know-so-far-on-cbi-probe-11778994671555.html|title=NEET 2026 paper leak: From involvement of NTA member to full modus operandi to arrests — what we know so far on CBI probe|last=Naaz|first=Fareha|date=16 May 2026|website=Mint|access-date=17 May 2026}} * {{Cite news|url=https://www.thehindu.com/opinion/editorial/testing-troubles-on-the-national-testing-agency-neet-ug-2026/article70974446.ece|title=Testing troubles: On the National Testing Agency, NEET-UG 2026|date=14 May 2026|work=The Hindu|access-date=19 May 2026}} * {{Cite news|url=https://timesofindia.indiatimes.com/education/news/neet-2026-paper-leak-how-many-more-scandals-before-students-lose-faith-completely/articleshow/131033092.cms|title=NEET 2026 paper leak: How many more scandals before students lose faith completely?|last=Tewari|first=Trisha|date=12 May 2026|work=[[The Times of India]]|access-date=21 May 2026}} * {{Cite news|url=https://www.news18.com/india/why-was-neet-ug-2026-cancelled-inside-the-paper-leak-trail-that-forced-nta-to-order-re-examination-ws-l-10086610.html|title=Why Was NEET-UG 2026 Cancelled? Inside The Paper Leak Trail That Forced NTA To Order Re-Examination|last=Ratti|first=Pragati|date=12 May 2026|work=News18|access-date=17 May 2026}} [[श्रेणी:भारत में शिक्षा]] [[श्रेणी:शिक्षा]] [[श्रेणी:विवाद]] l5kks14t5wo7dhsyfwdq27afd1hte1p श्रेणी:लेख जिनमें फ़ारसी-भाषा का पाठ है 14 1616107 6586751 2026-07-17T12:39:45Z ~2026-40084-43 936684 gt 6586751 wikitext text/x-wiki hy dsw7a2zpujh99cp1vo5cma17wax83vp 6586752 6586751 2026-07-17T12:54:02Z AMAN KUMAR 911487 वर्तनी/व्याकरण सुधार 6586752 wikitext text/x-wiki लेख जिनमें फ़ारसी-भाषा उपस्थित है eoyzp3uxhaeq7x2t9bpbnrqzd14g61i 6586836 6586752 2026-07-17T16:15:49Z SM7 89247 +श्रेणी हेडर टैग 6586836 wikitext text/x-wiki {{Non-Hindi-language text category}} sifhr3shbv0xpsx8clrg9ds8dupz7y8 साँचा:Possibly empty category 10 1616108 6586839 2026-07-17T16:27:04Z SM7 89247 [[साँचा:खाली श्रेणी]] को अनुप्रेषित 6586839 wikitext text/x-wiki #पुनर्प्रेषित [[साँचा:खाली श्रेणी]] d21bzqujfvk4wx0npqhpzhh8s1gu82w साँचा:CatAutoTOC 10 1616109 6586841 2026-07-17T16:28:11Z SM7 89247 SM7 ने पृष्ठ [[साँचा:CatAutoTOC]] को [[साँचा:Automatic category TOC]] पर स्थानांतरित किया 6586841 wikitext text/x-wiki #पुनर्प्रेषित [[साँचा:Automatic category TOC]] 4a2fj3dw7kjfrkgmfkk9yx34ear7zsu साँचा:CatAutoTOC/core 10 1616110 6586843 2026-07-17T16:28:11Z SM7 89247 SM7 ने पृष्ठ [[साँचा:CatAutoTOC/core]] को [[साँचा:Automatic category TOC/core]] पर स्थानांतरित किया 6586843 wikitext text/x-wiki #पुनर्प्रेषित [[साँचा:Automatic category TOC/core]] nazhrwbhoy8wfnlkhkty2tlmp8jq3x6 साँचा:Non-Hindi-language text category 10 1616111 6586844 2026-07-17T16:29:25Z SM7 89247 नया साँचा निर्मित 6586844 wikitext text/x-wiki {{#invoke:Lang/documentor tool|non_english_language_text_category}}<noinclude> {{Documentation}} </noinclude> jzmf3k6cqx9ifv8lhh8mkfb2s3vt430 6586846 6586844 2026-07-17T16:31:12Z SM7 89247 सुधार किया गया 6586846 wikitext text/x-wiki <includeonly>{{#invoke:Lang/documentor tool|non_english_language_text_category}}</includeonly><noinclude> {{Documentation}} </noinclude> 5b1numqii9i5yr89jv3q3e33w0ok0ay २०२६ बैंकॉक मद्यशाला अग्निकाण्ड 0 1616114 6586939 2026-07-17T23:53:08Z स्वर्ण 883468 "[[:en:Special:Redirect/revision/1364685244|2026 Bangkok pub fire]]" पृष्ठ का अनुवाद करके निर्मित किया गया 6586939 wikitext text/x-wiki {{ज्ञानसन्दूक घटना|date=12–13 July 2026}}आईसीटी ([[यूटीसी+०७:००]]) समयानुसार १२ जुलाई २०२६ ई॰ को मध्यरात्रि से कुछ पहले [[बैंकॉक]], [[थाईलैण्ड]] के चतुचक जनपद में स्थित एक बियर भवन एवं सजीव संगीत स्थल, “रोङ बीयर ना लात फ्राओ” ({{Langx|th|โรงเบียร์ ณ ลาดพร้าว}}, शाब्दिक अर्थ “लात फ्राओ का बियर भवन”) में आग लग गई। इस अग्निकाण्ड में ३३ लोगों की मृत्यु हो गई और ७० से अधिक घायल हुए, जिनमें २४ की स्थिति गम्भीर बताई गई।<ref name=":2">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> कारण की जाँच जारी है और नगर अधिकारियों का प्रारम्भिक आकलन छत पर लगे [[वातानुकूलन]] यन्त्र में विद्युत् [[लघु परिपथ|लघुपथ]] का होना है।<ref>{{cite news|url=https://www.reuters.com/world/asia-pacific/how-flammable-decor-lax-rules-turned-bangkok-pub-into-death-trap-2026-07-14/|title=How flammable decor and lax rules turned Bangkok pub into a death trap|last1=Sriring|first1=Orathai|date=14 July 2026|access-date=17 July 2026|publisher=[[Reuters]]}}</ref> == पृष्ठभूमि == रोङ बीयर ना लात फ्राओ एक भोजनालय, बियर भवन और सजीव संगीत स्थल था, जो २०२३ में खोला गया। यह लात फ्राओ मार्ग पर, यूनियन मॉल और फहोन योथिन एमआरटी स्टेशन के समीप स्थित है।<ref name="Guardian">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref> भवन में दो मुख्य प्रवेश द्वार और दो अग्नि-निर्गम द्वार थे।<ref name="Sanook">{{Cite web|url=https://www.sanook.com/news/9898846/|title=เปิดผังร้าน โรงเบียร์ ลาดพร้าว มีทางออกกี่ทาง? คนเคยไปเที่ยว รีวิวใช้ได้จริงกี่ทาง|date=13 July 2026|website=[[Sanook.com]]|language=th|trans-title=The floor plan of Lat Phrao Beer Hall; visitors reveal how many exit is actually available?|archive-url=https://web.archive.org/web/20260714043252/https://www.sanook.com/news/9898846/|archive-date=14 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ के स्वामी सुविचा और बंगोर्न सैलाबाथ ने १४ नवम्बर २०२४ को “रोंग बीयर ना लात फ्राओ लिमिटेड” कम्पनी की स्थापना की, जिसमें सुविचा के पास ९५ प्रतिशत तथा शेष ५ प्रतिशत अंश बंगोर्न के थे। कम्पनी ने मूलतः अपना व्यवसाय प्रयोजन “भोजन, मादक पेय का विक्रय तथा विविध संगीत एवं मनोरंजन कार्यक्रम आयोजित करना” पंजीकृत किया था, जिसे बाद में बदलकर केवल “भोजनालय व्यवसाय संचालन” कर दिया गया।<ref name="than-nlpcompany">{{Cite web|url=https://www.thansettakij.com/general-news/663821|title=เปิดผู้ถือหุ้น "โรงเบียร์ ณ ลาดพร้าว" ชื่อตรงกับเจ้าของร้านไฟไหม้ยโสธรปี 62|last=nuttapol_wan|date=13 July 2026|website=Thansettakij|language=th|trans-title=Shareholders of 'Rong Beer Na Lat Phrao' also owned a restaurant in Yasothon, which caught fire in 2019|archive-url=https://web.archive.org/web/20260715160723/https://www.thansettakij.com/general-news/663821|archive-date=15 July 2026|access-date=13 July 2026|url-status=live}}</ref> === पूर्ववर्ती घटनाएँ === थाईलैण्ड में इससे पूर्व भी मनोरंजन स्थलों पर घातक अग्निकाण्ड हो चुके हैं। १ जनवरी २००९ को बैंकॉक के सान्तिका क्लब में लगी आग से ६६ लोगों की मृत्यु हुई और २०० से अधिक घायल हुए थे, जबकि २०२२ में चोनबुरी प्रान्त के माउण्टेन बी संगीत पब में आग लगने से २६ मौतें और २२ घायल हुए थे।<ref name="AP">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="Thairath1">{{cite news|url=https://www.thairath.co.th/scoop/infographic/2945903|title=|date=13 July 2026|work=[[Thairath]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260713191022/https://www.thairath.co.th/scoop/infographic/2945903|archive-date=13 July 2026|language=th|script-title=th:ย้อนรอย "ไฟไหม้สถานบันเทิง" ครั้งใหญ่ ไทยต้องถอดบทเรียนอีกกี่รอบ?|trans-title=Recap of the previous major "pub fires": How many times Thailand has to learnt its lesson?|url-status=live}}</ref><ref name=":0">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ की स्थापना से पहले सुविचा और बंगोर्न ने यासोथोन में “सालेङ” ({{Langx|th|ซาเล้ง}}, शाब्दिक अर्थ “ऑटो रिक्शा”) नामक एक भोजनालय खोला था। २४ दिसम्बर २०१९ को उस भोजनालय के जीर्णोद्धार के समय आग लग गई, जिसमें एक व्यक्ति घायल हुआ।<ref name=":02">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> == अग्निकाण्ड == बैंकॉक की नगर सरकार ने बताया कि आग १२ जुलाई को मध्यरात्रि से कुछ पहले आरम्भ हुई।<ref name="AP2">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> आपातकालीन सेवाओं को २३:५७ पर सूचना मिली और अग्निशमन कर्मियों ने लगभग आधे घण्टे में आग पर नियन्त्रण पा लिया।<ref name="CNA">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> अधिकारियों ने बताया कि आग सामने के मंच क्षेत्र के पास शुरू हुई और तीव्र गति से फैली। आग लगते ही विद्युत आपूर्ति ठप हो गई, जिससे भीतर अन्धकार छा गया।<ref name="AP3">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> बहुत से ग्राहक भवन के पिछले भाग में स्थित रसोई और शौचालयों की ओर चले गए, जहाँ बाद में अग्निशमन कर्मियों को कई पीड़ित मिले।<ref name="CNA2">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> आन्तरिक भाग, फ़र्नीचर और छत को व्यापक क्षति पहुँची।<ref name="AP4">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="NationTV">{{cite news|url=https://www.nationtv.tv/news/current-issue/378980144|title=|date=13 July 2026|work=[[Nation TV (Thai TV channel)|Nation TV]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714045159/https://www.nationtv.tv/news/current-issue/378980144|archive-date=14 July 2026|language=th|script-title=th:เปิดสาเหตุไฟไหม้โรงเบียร์ ณ ลาดพร้าว เสียชีวิต 27 ราย นายกฯ เผยควันออกจากคัตเอาต์เวทีก่อนไฟดับทั้งร้าน|trans-title=Cause examined in Rong Beer Na Lat Phrao fire that killed 27; PM reveals the stage circuit breaker began to smoke before the blackout|url-status=live}}</ref> प्रधानमन्त्री [[अनुदिन जाञवीरकूल]] ने कहा कि स्थल पर प्रस्तुति दे रहे एक संगीतकार ने बताया कि विद्युत् आपूर्ति बन्द होने से पहले उन्होंने मंच के निकट एक [[परिपथ विच्छेदक]] से धुआँ उठते देखा। इसके बाद संगीतकार ने एक विस्फोट सुना और बताया कि घना धुआँ शीघ्र ही समूचे भवन में भर गया।<ref name="AP5">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> समाचार अभिकरणों द्वारा प्रमाणित दृश्य-रिकॉर्डिंग में सामने के प्रवेश द्वार से धुआँ और ज्वालाएँ निकलती दिखीं, जब ग्राहक भाग रहे थे, जिनमें से कुछ के वस्त्रों में आग लगी हुई थी।<ref name="CNA3">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> == हताहत == अधिकारियों ने बताया कि न्यूनतम २८ लोगों की मृत्यु की पुष्टि हुई और ७० से अधिक अस्पताल में भर्ती हुए, जिनमें २४ की स्थिति गम्भीर थी।<ref name="CNA4">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref><ref name=":03">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> मृतकों में १८ महिलाएँ और ९ पुरुष थे। प्रारम्भिक निष्कर्षों से संकेत मिला कि अधिकतर मौतें धुएँ के साँस लेने से हुईं।<ref name=":04">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> प्रशासन ने सम्बन्धियों के लिए पंजीकरण केन्द्र स्थापित किया और मृतकों एवं घायलों की पहचान आरम्भ की।<ref name="AP6">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १४ जुलाई को मृतक संख्या बढ़कर ३० हो गई।<ref>{{cite news|url=https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|title=Death toll from a Bangkok music bar fire rises to 30, dozens remain in hospital|last=Ji|first=Tian Macleod|date=13 July 2026|work=[[Associated Press]]|accessdate=13 July 2026|archive-url=https://web.archive.org/web/20260714045717/https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|archive-date=14 July 2026|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १५ जुलाई को दो घायलों की मृत्यु के पश्चात मृतक संख्या ३२ तक पहुँची। उसी दिन बाद में एक अन्य पीड़ित के दम तोड़ देने से मृतक संख्या ३३ हो गई।<ref name=":22">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> घायलों में स्थल के सह-स्वामी सुविचा सैलाबाथ भी शामिल थे, जो आग के समय भीतर उपस्थित थे।<ref name="Guardian2">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref><ref name="Matichon1">{{Cite news|url=https://www.matichon.co.th/local/crime/news_5803232|title=ยืนยันตัวตน ผู้เสียชีวิตเหตุโรงเบียร์ 13 รายแล้ว ขณะที่ยอดบาดเจ็บ-สูญหายเพิ่ม|work=[[Matichon]]|accessdate=17 July 2026|archive-url=https://web.archive.org/web/20260715031942/https://www.matichon.co.th/local/crime/news_5803232|archive-date=15 July 2026|trans-title=13 victims of the beer hall fire identified, with more injured and missing were reported|url-status=live}}</ref> मृतकों में एक लाओसियाई कर्मी था, जबकि दो अन्य घायल हुए।<ref>{{cite news|url=https://www.thaipbs.or.th/news/content/508280|title=แรงงานชาวลาวกังวลอนาคต หลังร้าน "โรงเบียร์ ณ ลาดพร้าว" ไฟไหม้|access-date=17 July 2026|archive-url=https://web.archive.org/web/20260716160809/https://www.thaipbs.or.th/news/content/508280|archive-date=16 July 2026|publisher=[[Thai Public Broadcasting Service]]|trans-title=Fire at "Rong Beer Na Lat Phrao" left the future of Laotian workers uncertain|url-status=live}}</ref> थाई स्वतन्त्र संगीत बैण्ड “थोटसाकान” के तीन सदस्य, जिन्होंने आग से पहले रात्रि में प्रस्तुति दी थी, अन्ततः अपनी चोटों से ग्रस्त हो गए; बैण्ड सदस्य पचारा सोंगफाथकैव ने [[फेसबुक|फ़ेसबुक]] पर एक सन्देश में बताया कि वे कीबोर्ड वादक क्वाङ, महिला गायिका ब्रीज़ और ड्रम वादक ब्यू थे।<ref>{{Cite news|url=https://www.bbc.com/news/articles/crr8gnx01d7o|title='There was no way out': Witnesses describe how deadly inferno swept through Bangkok bar|last1=Aemocha|first1=Panisa|date=13 July 2026|access-date=15 July 2026|archive-url=https://web.archive.org/web/20260714085224/https://www.bbc.com/news/articles/crr8gnx01d7o|archive-date=14 July 2026|publisher=[[BBC News]]|last2=Ninbut|first2=Paweena|last3=Ng|first3=Kelly|url-status=live}}</ref> == जाँच == १३ जुलाई को घटनास्थल की घेराबन्दी कर दी गई, जबकि विधि-विज्ञान अधिकारी भवन के अवशेषों का परीक्षण करते रहे।<ref name="AP7">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> यद्यपि कारण स्थापित नहीं हो पाया था, बैंकॉक के आपदा प्रशासन का प्रारम्भिक आकलन था कि छत के वातानुकूलन यन्त्र में हुए विद्युत् लघुपथ ने आग को जन्म दिया, जो ठीक नीचे लगी ज्वलनशील ध्वनिरोधी छत के कारण और भड़क गई।<ref name="CNA6">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> राज्यपाल चडचार्ट सिट्टीपुण्ट ने कहा कि अन्वेषक छत की सामग्री तथा इस बात की जाँच करेंगे कि आपातकालीन निकास अवरुद्ध थे या नहीं।<ref name="AP8">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> उन्होंने बताया कि बियर की पेटियों ने रसोई के पास के एक निकास और एक मेज़ ने दूसरे निकास को अवरुद्ध कर रखा था।<ref name="CNA5">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> उन्होंने यह भी कहा कि ज्वलनशील छत सज्जा ने आग के तीव्र प्रसार में योगदान दिया हो सकता है।<ref name=":05">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> यह मद्यशाला “मनोरंजन स्थल” के बजाय “सजीव संगीत सहित भोजनालय” के रूप में आधिकारिक रूप से पंजीकृत थी, इसलिए क़ानूनन उसे अग्निरोधी सामग्री का उपयोग करना आवश्यक नहीं था।<ref name="BBCSafetyLapses">{{cite news|url=https://www.bbc.com/news/articles/clyxyzlp9p2o|title=Death toll from Bangkok bar fire rises to 30 as police probe safety lapses|last1=Sricham|first1=Jiraporn|date=13 July 2026|access-date=13 July 2026|publisher=[[BBC News]]|last2=Ng|first2=Kelly}}</ref> == सम्बन्धित विषय == * [[२०२६ स्विट्ज़रलैण्ड नववर्ष पूर्वसन्ध्या बार अग्निकाण्ड]] == सन्दर्भ == {{Reflist}} {{Authority control}} [[श्रेणी:विकिडेटा पर उपलब्ध निर्देशांक]] [[श्रेणी:थाईलैंड]] [[श्रेणी:थाईलैण्ड]] [[श्रेणी:थाईलैण्ड का इतिहास]] 561vrxi1o0vizbchek9e4cn49h66u6o 6586941 6586939 2026-07-17T23:56:08Z स्वर्ण 883468 [[२०२६ बैंकॉक मधुशाला अग्निकाण्ड]] को अनुप्रेषित 6586941 wikitext text/x-wiki #redirect [[२०२६ बैंकॉक मधुशाला अग्निकाण्ड]] hy78dpcakhr5artkrlnguma63x6n5w0 २०२६ बैंकॉक मधुशाला अग्निकाण्ड 0 1616115 6586940 2026-07-17T23:55:59Z स्वर्ण 883468 नया पृष्ठ: {{ज्ञानसन्दूक घटना|date=12–13 July 2026}}आईसीटी ([[यूटीसी+०७:००]]) समयानुसार १२ जुलाई २०२६ ई॰ को मध्यरात्रि से कुछ पहले [[बैंकॉक]], [[थाईलैण्ड]] के चतुचक जनपद में स्थित एक बियर भवन एवं सजीव संगीत स्थल,... 6586940 wikitext text/x-wiki {{ज्ञानसन्दूक घटना|date=12–13 July 2026}}आईसीटी ([[यूटीसी+०७:००]]) समयानुसार १२ जुलाई २०२६ ई॰ को मध्यरात्रि से कुछ पहले [[बैंकॉक]], [[थाईलैण्ड]] के चतुचक जनपद में स्थित एक बियर भवन एवं सजीव संगीत स्थल, “रोङ बीयर ना लात फ्राओ” ({{Langx|th|โรงเบียร์ ณ ลาดพร้าว}}, शाब्दिक अर्थ “लात फ्राओ का बियर भवन”) में आग लग गई। इस अग्निकाण्ड में ३३ लोगों की मृत्यु हो गई और ७० से अधिक घायल हुए, जिनमें २४ की स्थिति गम्भीर बताई गई।<ref name=":2">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> कारण की जाँच जारी है और नगर अधिकारियों का प्रारम्भिक आकलन छत पर लगे [[वातानुकूलन]] यन्त्र में विद्युत् [[लघु परिपथ|लघुपथ]] का होना है।<ref>{{cite news|url=https://www.reuters.com/world/asia-pacific/how-flammable-decor-lax-rules-turned-bangkok-pub-into-death-trap-2026-07-14/|title=How flammable decor and lax rules turned Bangkok pub into a death trap|last1=Sriring|first1=Orathai|date=14 July 2026|access-date=17 July 2026|publisher=[[Reuters]]}}</ref> == पृष्ठभूमि == रोङ बीयर ना लात फ्राओ एक भोजनालय, बियर भवन और सजीव संगीत स्थल था, जो २०२३ में खोला गया। यह लात फ्राओ मार्ग पर, यूनियन मॉल और फहोन योथिन एमआरटी स्टेशन के समीप स्थित है।<ref name="Guardian">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref> भवन में दो मुख्य प्रवेश द्वार और दो अग्नि-निर्गम द्वार थे।<ref name="Sanook">{{Cite web|url=https://www.sanook.com/news/9898846/|title=เปิดผังร้าน โรงเบียร์ ลาดพร้าว มีทางออกกี่ทาง? คนเคยไปเที่ยว รีวิวใช้ได้จริงกี่ทาง|date=13 July 2026|website=[[Sanook.com]]|language=th|trans-title=The floor plan of Lat Phrao Beer Hall; visitors reveal how many exit is actually available?|archive-url=https://web.archive.org/web/20260714043252/https://www.sanook.com/news/9898846/|archive-date=14 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ के स्वामी सुविचा और बंगोर्न सैलाबाथ ने १४ नवम्बर २०२४ को “रोंग बीयर ना लात फ्राओ लिमिटेड” कम्पनी की स्थापना की, जिसमें सुविचा के पास ९५ प्रतिशत तथा शेष ५ प्रतिशत अंश बंगोर्न के थे। कम्पनी ने मूलतः अपना व्यवसाय प्रयोजन “भोजन, मादक पेय का विक्रय तथा विविध संगीत एवं मनोरंजन कार्यक्रम आयोजित करना” पंजीकृत किया था, जिसे बाद में बदलकर केवल “भोजनालय व्यवसाय संचालन” कर दिया गया।<ref name="than-nlpcompany">{{Cite web|url=https://www.thansettakij.com/general-news/663821|title=เปิดผู้ถือหุ้น "โรงเบียร์ ณ ลาดพร้าว" ชื่อตรงกับเจ้าของร้านไฟไหม้ยโสธรปี 62|last=nuttapol_wan|date=13 July 2026|website=Thansettakij|language=th|trans-title=Shareholders of 'Rong Beer Na Lat Phrao' also owned a restaurant in Yasothon, which caught fire in 2019|archive-url=https://web.archive.org/web/20260715160723/https://www.thansettakij.com/general-news/663821|archive-date=15 July 2026|access-date=13 July 2026|url-status=live}}</ref> === पूर्ववर्ती घटनाएँ === थाईलैण्ड में इससे पूर्व भी मनोरंजन स्थलों पर घातक अग्निकाण्ड हो चुके हैं। १ जनवरी २००९ को बैंकॉक के सान्तिका क्लब में लगी आग से ६६ लोगों की मृत्यु हुई और २०० से अधिक घायल हुए थे, जबकि २०२२ में चोनबुरी प्रान्त के माउण्टेन बी संगीत पब में आग लगने से २६ मौतें और २२ घायल हुए थे।<ref name="AP">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="Thairath1">{{cite news|url=https://www.thairath.co.th/scoop/infographic/2945903|title=|date=13 July 2026|work=[[Thairath]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260713191022/https://www.thairath.co.th/scoop/infographic/2945903|archive-date=13 July 2026|language=th|script-title=th:ย้อนรอย "ไฟไหม้สถานบันเทิง" ครั้งใหญ่ ไทยต้องถอดบทเรียนอีกกี่รอบ?|trans-title=Recap of the previous major "pub fires": How many times Thailand has to learnt its lesson?|url-status=live}}</ref><ref name=":0">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ की स्थापना से पहले सुविचा और बंगोर्न ने यासोथोन में “सालेङ” ({{Langx|th|ซาเล้ง}}, शाब्दिक अर्थ “ऑटो रिक्शा”) नामक एक भोजनालय खोला था। २४ दिसम्बर २०१९ को उस भोजनालय के जीर्णोद्धार के समय आग लग गई, जिसमें एक व्यक्ति घायल हुआ।<ref name=":02">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> == अग्निकाण्ड == बैंकॉक की नगर सरकार ने बताया कि आग १२ जुलाई को मध्यरात्रि से कुछ पहले आरम्भ हुई।<ref name="AP2">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> आपातकालीन सेवाओं को २३:५७ पर सूचना मिली और अग्निशमन कर्मियों ने लगभग आधे घण्टे में आग पर नियन्त्रण पा लिया।<ref name="CNA">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> अधिकारियों ने बताया कि आग सामने के मंच क्षेत्र के पास शुरू हुई और तीव्र गति से फैली। आग लगते ही विद्युत आपूर्ति ठप हो गई, जिससे भीतर अन्धकार छा गया।<ref name="AP3">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> बहुत से ग्राहक भवन के पिछले भाग में स्थित रसोई और शौचालयों की ओर चले गए, जहाँ बाद में अग्निशमन कर्मियों को कई पीड़ित मिले।<ref name="CNA2">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> आन्तरिक भाग, फ़र्नीचर और छत को व्यापक क्षति पहुँची।<ref name="AP4">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="NationTV">{{cite news|url=https://www.nationtv.tv/news/current-issue/378980144|title=|date=13 July 2026|work=[[Nation TV (Thai TV channel)|Nation TV]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714045159/https://www.nationtv.tv/news/current-issue/378980144|archive-date=14 July 2026|language=th|script-title=th:เปิดสาเหตุไฟไหม้โรงเบียร์ ณ ลาดพร้าว เสียชีวิต 27 ราย นายกฯ เผยควันออกจากคัตเอาต์เวทีก่อนไฟดับทั้งร้าน|trans-title=Cause examined in Rong Beer Na Lat Phrao fire that killed 27; PM reveals the stage circuit breaker began to smoke before the blackout|url-status=live}}</ref> प्रधानमन्त्री [[अनुदिन जाञवीरकूल]] ने कहा कि स्थल पर प्रस्तुति दे रहे एक संगीतकार ने बताया कि विद्युत् आपूर्ति बन्द होने से पहले उन्होंने मंच के निकट एक [[परिपथ विच्छेदक]] से धुआँ उठते देखा। इसके बाद संगीतकार ने एक विस्फोट सुना और बताया कि घना धुआँ शीघ्र ही समूचे भवन में भर गया।<ref name="AP5">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> समाचार अभिकरणों द्वारा प्रमाणित दृश्य-रिकॉर्डिंग में सामने के प्रवेश द्वार से धुआँ और ज्वालाएँ निकलती दिखीं, जब ग्राहक भाग रहे थे, जिनमें से कुछ के वस्त्रों में आग लगी हुई थी।<ref name="CNA3">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> == हताहत == अधिकारियों ने बताया कि न्यूनतम २८ लोगों की मृत्यु की पुष्टि हुई और ७० से अधिक अस्पताल में भर्ती हुए, जिनमें २४ की स्थिति गम्भीर थी।<ref name="CNA4">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref><ref name=":03">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> मृतकों में १८ महिलाएँ और ९ पुरुष थे। प्रारम्भिक निष्कर्षों से संकेत मिला कि अधिकतर मौतें धुएँ के साँस लेने से हुईं।<ref name=":04">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> प्रशासन ने सम्बन्धियों के लिए पंजीकरण केन्द्र स्थापित किया और मृतकों एवं घायलों की पहचान आरम्भ की।<ref name="AP6">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १४ जुलाई को मृतक संख्या बढ़कर ३० हो गई।<ref>{{cite news|url=https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|title=Death toll from a Bangkok music bar fire rises to 30, dozens remain in hospital|last=Ji|first=Tian Macleod|date=13 July 2026|work=[[Associated Press]]|accessdate=13 July 2026|archive-url=https://web.archive.org/web/20260714045717/https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|archive-date=14 July 2026|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १५ जुलाई को दो घायलों की मृत्यु के पश्चात मृतक संख्या ३२ तक पहुँची। उसी दिन बाद में एक अन्य पीड़ित के दम तोड़ देने से मृतक संख्या ३३ हो गई।<ref name=":22">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> घायलों में स्थल के सह-स्वामी सुविचा सैलाबाथ भी शामिल थे, जो आग के समय भीतर उपस्थित थे।<ref name="Guardian2">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref><ref name="Matichon1">{{Cite news|url=https://www.matichon.co.th/local/crime/news_5803232|title=ยืนยันตัวตน ผู้เสียชีวิตเหตุโรงเบียร์ 13 รายแล้ว ขณะที่ยอดบาดเจ็บ-สูญหายเพิ่ม|work=[[Matichon]]|accessdate=17 July 2026|archive-url=https://web.archive.org/web/20260715031942/https://www.matichon.co.th/local/crime/news_5803232|archive-date=15 July 2026|trans-title=13 victims of the beer hall fire identified, with more injured and missing were reported|url-status=live}}</ref> मृतकों में एक लाओसियाई कर्मी था, जबकि दो अन्य घायल हुए।<ref>{{cite news|url=https://www.thaipbs.or.th/news/content/508280|title=แรงงานชาวลาวกังวลอนาคต หลังร้าน "โรงเบียร์ ณ ลาดพร้าว" ไฟไหม้|access-date=17 July 2026|archive-url=https://web.archive.org/web/20260716160809/https://www.thaipbs.or.th/news/content/508280|archive-date=16 July 2026|publisher=[[Thai Public Broadcasting Service]]|trans-title=Fire at "Rong Beer Na Lat Phrao" left the future of Laotian workers uncertain|url-status=live}}</ref> थाई स्वतन्त्र संगीत बैण्ड “थोटसाकान” के तीन सदस्य, जिन्होंने आग से पहले रात्रि में प्रस्तुति दी थी, अन्ततः अपनी चोटों से ग्रस्त हो गए; बैण्ड सदस्य पचारा सोंगफाथकैव ने [[फेसबुक|फ़ेसबुक]] पर एक सन्देश में बताया कि वे कीबोर्ड वादक क्वाङ, महिला गायिका ब्रीज़ और ड्रम वादक ब्यू थे।<ref>{{Cite news|url=https://www.bbc.com/news/articles/crr8gnx01d7o|title='There was no way out': Witnesses describe how deadly inferno swept through Bangkok bar|last1=Aemocha|first1=Panisa|date=13 July 2026|access-date=15 July 2026|archive-url=https://web.archive.org/web/20260714085224/https://www.bbc.com/news/articles/crr8gnx01d7o|archive-date=14 July 2026|publisher=[[BBC News]]|last2=Ninbut|first2=Paweena|last3=Ng|first3=Kelly|url-status=live}}</ref> == जाँच == १३ जुलाई को घटनास्थल की घेराबन्दी कर दी गई, जबकि विधि-विज्ञान अधिकारी भवन के अवशेषों का परीक्षण करते रहे।<ref name="AP7">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> यद्यपि कारण स्थापित नहीं हो पाया था, बैंकॉक के आपदा प्रशासन का प्रारम्भिक आकलन था कि छत के वातानुकूलन यन्त्र में हुए विद्युत् लघुपथ ने आग को जन्म दिया, जो ठीक नीचे लगी ज्वलनशील ध्वनिरोधी छत के कारण और भड़क गई।<ref name="CNA6">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> राज्यपाल चडचार्ट सिट्टीपुण्ट ने कहा कि अन्वेषक छत की सामग्री तथा इस बात की जाँच करेंगे कि आपातकालीन निकास अवरुद्ध थे या नहीं।<ref name="AP8">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> उन्होंने बताया कि बियर की पेटियों ने रसोई के पास के एक निकास और एक मेज़ ने दूसरे निकास को अवरुद्ध कर रखा था।<ref name="CNA5">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> उन्होंने यह भी कहा कि ज्वलनशील छत सज्जा ने आग के तीव्र प्रसार में योगदान दिया हो सकता है।<ref name=":05">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> यह मधुशाला “मनोरंजन स्थल” के बजाय “सजीव संगीत सहित भोजनालय” के रूप में आधिकारिक रूप से पंजीकृत थी, इसलिए क़ानूनन उसे अग्निरोधी सामग्री का उपयोग करना आवश्यक नहीं था।<ref name="BBCSafetyLapses">{{cite news|url=https://www.bbc.com/news/articles/clyxyzlp9p2o|title=Death toll from Bangkok bar fire rises to 30 as police probe safety lapses|last1=Sricham|first1=Jiraporn|date=13 July 2026|access-date=13 July 2026|publisher=[[BBC News]]|last2=Ng|first2=Kelly}}</ref> == सम्बन्धित विषय == * [[२०२६ स्विट्ज़रलैण्ड नववर्ष पूर्वसन्ध्या बार अग्निकाण्ड]] == सन्दर्भ == {{Reflist}} {{Authority control}} [[श्रेणी:विकिडेटा पर उपलब्ध निर्देशांक]] [[श्रेणी:थाईलैंड]] [[श्रेणी:थाईलैण्ड]] [[श्रेणी:थाईलैण्ड का इतिहास]] r6wdqwsswbwi9fx0ptchssc17sicbis 6586950 6586940 2026-07-18T00:08:26Z स्वर्ण 883468 6586950 wikitext text/x-wiki {{Infobox event | name = २०२६ ई॰ बैंकॉक मधुशाला अग्निकाण्ड <br> {{lang|th|ค.ศ. ๒๐๒๖ เหตุเพลิงไหม้ผับกรุงเทพฯ}} | date = १२–१३ जुलाई २०२६ ई॰ | time = २३:५७ | timezone = आईसीटी; [[यूटीसी+०७:००]] | location = रोङ बीयर ना लात फ्राओ, चतुचक जनपद, [[बैंकॉक]], [[थाईलैण्ड]] | coordinates = {{coord|format=dms|region:TH-10_type:event|display=inline,title}} | type = भवन अग्निकाण्ड | cause = १८ जुलाई २०२६ तक जाँचाधीन | deaths = ३३ | injuries = ७०+ }} आईसीटी ([[यूटीसी+०७:००]]) समयानुसार १२ जुलाई २०२६ ई॰ को मध्यरात्रि से कुछ पहले [[बैंकॉक]], [[थाईलैण्ड]] के चतुचक जनपद में स्थित एक बियर भवन एवं सजीव संगीत स्थल, “रोङ बीयर ना लात फ्राओ” ({{Langx|th|โรงเบียร์ ณ ลาดพร้าว}}, शाब्दिक अर्थ “लात फ्राओ का बियर भवन”) में आग लग गई। इस अग्निकाण्ड में ३३ लोगों की मृत्यु हो गई और ७० से अधिक घायल हुए, जिनमें २४ की स्थिति गम्भीर बताई गई।<ref name=":2">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> कारण की जाँच जारी है और नगर अधिकारियों का प्रारम्भिक आकलन छत पर लगे [[वातानुकूलन]] यन्त्र में विद्युत् [[लघु परिपथ|लघुपथ]] का होना है।<ref>{{cite news|url=https://www.reuters.com/world/asia-pacific/how-flammable-decor-lax-rules-turned-bangkok-pub-into-death-trap-2026-07-14/|title=How flammable decor and lax rules turned Bangkok pub into a death trap|last1=Sriring|first1=Orathai|date=14 July 2026|access-date=17 July 2026|publisher=[[Reuters]]}}</ref> == पृष्ठभूमि == रोङ बीयर ना लात फ्राओ एक भोजनालय, बियर भवन और सजीव संगीत स्थल था, जो २०२३ में खोला गया। यह लात फ्राओ मार्ग पर, यूनियन मॉल और फहोन योथिन एमआरटी स्टेशन के समीप स्थित है।<ref name="Guardian">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref> भवन में दो मुख्य प्रवेश द्वार और दो अग्नि-निर्गम द्वार थे।<ref name="Sanook">{{Cite web|url=https://www.sanook.com/news/9898846/|title=เปิดผังร้าน โรงเบียร์ ลาดพร้าว มีทางออกกี่ทาง? คนเคยไปเที่ยว รีวิวใช้ได้จริงกี่ทาง|date=13 July 2026|website=[[Sanook.com]]|language=th|trans-title=The floor plan of Lat Phrao Beer Hall; visitors reveal how many exit is actually available?|archive-url=https://web.archive.org/web/20260714043252/https://www.sanook.com/news/9898846/|archive-date=14 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ के स्वामी सुविचा और बंगोर्न सैलाबाथ ने १४ नवम्बर २०२४ को “रोंग बीयर ना लात फ्राओ लिमिटेड” कम्पनी की स्थापना की, जिसमें सुविचा के पास ९५ प्रतिशत तथा शेष ५ प्रतिशत अंश बंगोर्न के थे। कम्पनी ने मूलतः अपना व्यवसाय प्रयोजन “भोजन, मादक पेय का विक्रय तथा विविध संगीत एवं मनोरंजन कार्यक्रम आयोजित करना” पंजीकृत किया था, जिसे बाद में बदलकर केवल “भोजनालय व्यवसाय संचालन” कर दिया गया।<ref name="than-nlpcompany">{{Cite web|url=https://www.thansettakij.com/general-news/663821|title=เปิดผู้ถือหุ้น "โรงเบียร์ ณ ลาดพร้าว" ชื่อตรงกับเจ้าของร้านไฟไหม้ยโสธรปี 62|last=nuttapol_wan|date=13 July 2026|website=Thansettakij|language=th|trans-title=Shareholders of 'Rong Beer Na Lat Phrao' also owned a restaurant in Yasothon, which caught fire in 2019|archive-url=https://web.archive.org/web/20260715160723/https://www.thansettakij.com/general-news/663821|archive-date=15 July 2026|access-date=13 July 2026|url-status=live}}</ref> === पूर्ववर्ती घटनाएँ === थाईलैण्ड में इससे पूर्व भी मनोरंजन स्थलों पर घातक अग्निकाण्ड हो चुके हैं। १ जनवरी २००९ को बैंकॉक के सान्तिका क्लब में लगी आग से ६६ लोगों की मृत्यु हुई और २०० से अधिक घायल हुए थे, जबकि २०२२ में चोनबुरी प्रान्त के माउण्टेन बी संगीत पब में आग लगने से २६ मौतें और २२ घायल हुए थे।<ref name="AP">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="Thairath1">{{cite news|url=https://www.thairath.co.th/scoop/infographic/2945903|title=|date=13 July 2026|work=[[Thairath]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260713191022/https://www.thairath.co.th/scoop/infographic/2945903|archive-date=13 July 2026|language=th|script-title=th:ย้อนรอย "ไฟไหม้สถานบันเทิง" ครั้งใหญ่ ไทยต้องถอดบทเรียนอีกกี่รอบ?|trans-title=Recap of the previous major "pub fires": How many times Thailand has to learnt its lesson?|url-status=live}}</ref><ref name=":0">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ की स्थापना से पहले सुविचा और बंगोर्न ने यासोथोन में “सालेङ” ({{Langx|th|ซาเล้ง}}, शाब्दिक अर्थ “ऑटो रिक्शा”) नामक एक भोजनालय खोला था। २४ दिसम्बर २०१९ को उस भोजनालय के जीर्णोद्धार के समय आग लग गई, जिसमें एक व्यक्ति घायल हुआ।<ref name=":02">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> == अग्निकाण्ड == बैंकॉक की नगर सरकार ने बताया कि आग १२ जुलाई को मध्यरात्रि से कुछ पहले आरम्भ हुई।<ref name="AP2">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> आपातकालीन सेवाओं को २३:५७ पर सूचना मिली और अग्निशमन कर्मियों ने लगभग आधे घण्टे में आग पर नियन्त्रण पा लिया।<ref name="CNA">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> अधिकारियों ने बताया कि आग सामने के मंच क्षेत्र के पास शुरू हुई और तीव्र गति से फैली। आग लगते ही विद्युत आपूर्ति ठप हो गई, जिससे भीतर अन्धकार छा गया।<ref name="AP3">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> बहुत से ग्राहक भवन के पिछले भाग में स्थित रसोई और शौचालयों की ओर चले गए, जहाँ बाद में अग्निशमन कर्मियों को कई पीड़ित मिले।<ref name="CNA2">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> आन्तरिक भाग, फ़र्नीचर और छत को व्यापक क्षति पहुँची।<ref name="AP4">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="NationTV">{{cite news|url=https://www.nationtv.tv/news/current-issue/378980144|title=|date=13 July 2026|work=[[Nation TV (Thai TV channel)|Nation TV]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714045159/https://www.nationtv.tv/news/current-issue/378980144|archive-date=14 July 2026|language=th|script-title=th:เปิดสาเหตุไฟไหม้โรงเบียร์ ณ ลาดพร้าว เสียชีวิต 27 ราย นายกฯ เผยควันออกจากคัตเอาต์เวทีก่อนไฟดับทั้งร้าน|trans-title=Cause examined in Rong Beer Na Lat Phrao fire that killed 27; PM reveals the stage circuit breaker began to smoke before the blackout|url-status=live}}</ref> प्रधानमन्त्री [[अनुदिन जाञवीरकूल]] ने कहा कि स्थल पर प्रस्तुति दे रहे एक संगीतकार ने बताया कि विद्युत् आपूर्ति बन्द होने से पहले उन्होंने मंच के निकट एक [[परिपथ विच्छेदक]] से धुआँ उठते देखा। इसके बाद संगीतकार ने एक विस्फोट सुना और बताया कि घना धुआँ शीघ्र ही समूचे भवन में भर गया।<ref name="AP5">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> समाचार अभिकरणों द्वारा प्रमाणित दृश्य-रिकॉर्डिंग में सामने के प्रवेश द्वार से धुआँ और ज्वालाएँ निकलती दिखीं, जब ग्राहक भाग रहे थे, जिनमें से कुछ के वस्त्रों में आग लगी हुई थी।<ref name="CNA3">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> == हताहत == अधिकारियों ने बताया कि न्यूनतम २८ लोगों की मृत्यु की पुष्टि हुई और ७० से अधिक अस्पताल में भर्ती हुए, जिनमें २४ की स्थिति गम्भीर थी।<ref name="CNA4">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref><ref name=":03">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> मृतकों में १८ महिलाएँ और ९ पुरुष थे। प्रारम्भिक निष्कर्षों से संकेत मिला कि अधिकतर मौतें धुएँ के साँस लेने से हुईं।<ref name=":04">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> प्रशासन ने सम्बन्धियों के लिए पंजीकरण केन्द्र स्थापित किया और मृतकों एवं घायलों की पहचान आरम्भ की।<ref name="AP6">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १४ जुलाई को मृतक संख्या बढ़कर ३० हो गई।<ref>{{cite news|url=https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|title=Death toll from a Bangkok music bar fire rises to 30, dozens remain in hospital|last=Ji|first=Tian Macleod|date=13 July 2026|work=[[Associated Press]]|accessdate=13 July 2026|archive-url=https://web.archive.org/web/20260714045717/https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|archive-date=14 July 2026|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १५ जुलाई को दो घायलों की मृत्यु के पश्चात मृतक संख्या ३२ तक पहुँची। उसी दिन बाद में एक अन्य पीड़ित के दम तोड़ देने से मृतक संख्या ३३ हो गई।<ref name=":22">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> घायलों में स्थल के सह-स्वामी सुविचा सैलाबाथ भी शामिल थे, जो आग के समय भीतर उपस्थित थे।<ref name="Guardian2">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref><ref name="Matichon1">{{Cite news|url=https://www.matichon.co.th/local/crime/news_5803232|title=ยืนยันตัวตน ผู้เสียชีวิตเหตุโรงเบียร์ 13 รายแล้ว ขณะที่ยอดบาดเจ็บ-สูญหายเพิ่ม|work=[[Matichon]]|accessdate=17 July 2026|archive-url=https://web.archive.org/web/20260715031942/https://www.matichon.co.th/local/crime/news_5803232|archive-date=15 July 2026|trans-title=13 victims of the beer hall fire identified, with more injured and missing were reported|url-status=live}}</ref> मृतकों में एक लाओसियाई कर्मी था, जबकि दो अन्य घायल हुए।<ref>{{cite news|url=https://www.thaipbs.or.th/news/content/508280|title=แรงงานชาวลาวกังวลอนาคต หลังร้าน "โรงเบียร์ ณ ลาดพร้าว" ไฟไหม้|access-date=17 July 2026|archive-url=https://web.archive.org/web/20260716160809/https://www.thaipbs.or.th/news/content/508280|archive-date=16 July 2026|publisher=[[Thai Public Broadcasting Service]]|trans-title=Fire at "Rong Beer Na Lat Phrao" left the future of Laotian workers uncertain|url-status=live}}</ref> थाई स्वतन्त्र संगीत बैण्ड “थोटसाकान” के तीन सदस्य, जिन्होंने आग से पहले रात्रि में प्रस्तुति दी थी, अन्ततः अपनी चोटों से ग्रस्त हो गए; बैण्ड सदस्य पचारा सोंगफाथकैव ने [[फेसबुक|फ़ेसबुक]] पर एक सन्देश में बताया कि वे कीबोर्ड वादक क्वाङ, महिला गायिका ब्रीज़ और ड्रम वादक ब्यू थे।<ref>{{Cite news|url=https://www.bbc.com/news/articles/crr8gnx01d7o|title='There was no way out': Witnesses describe how deadly inferno swept through Bangkok bar|last1=Aemocha|first1=Panisa|date=13 July 2026|access-date=15 July 2026|archive-url=https://web.archive.org/web/20260714085224/https://www.bbc.com/news/articles/crr8gnx01d7o|archive-date=14 July 2026|publisher=[[BBC News]]|last2=Ninbut|first2=Paweena|last3=Ng|first3=Kelly|url-status=live}}</ref> == जाँच == १३ जुलाई को घटनास्थल की घेराबन्दी कर दी गई, जबकि विधि-विज्ञान अधिकारी भवन के अवशेषों का परीक्षण करते रहे।<ref name="AP7">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> यद्यपि कारण स्थापित नहीं हो पाया था, बैंकॉक के आपदा प्रशासन का प्रारम्भिक आकलन था कि छत के वातानुकूलन यन्त्र में हुए विद्युत् लघुपथ ने आग को जन्म दिया, जो ठीक नीचे लगी ज्वलनशील ध्वनिरोधी छत के कारण और भड़क गई।<ref name="CNA6">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> राज्यपाल चडचार्ट सिट्टीपुण्ट ने कहा कि अन्वेषक छत की सामग्री तथा इस बात की जाँच करेंगे कि आपातकालीन निकास अवरुद्ध थे या नहीं।<ref name="AP8">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> उन्होंने बताया कि बियर की पेटियों ने रसोई के पास के एक निकास और एक मेज़ ने दूसरे निकास को अवरुद्ध कर रखा था।<ref name="CNA5">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> उन्होंने यह भी कहा कि ज्वलनशील छत सज्जा ने आग के तीव्र प्रसार में योगदान दिया हो सकता है।<ref name=":05">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> यह मधुशाला “मनोरंजन स्थल” के बजाय “सजीव संगीत सहित भोजनालय” के रूप में आधिकारिक रूप से पंजीकृत थी, इसलिए क़ानूनन उसे अग्निरोधी सामग्री का उपयोग करना आवश्यक नहीं था।<ref name="BBCSafetyLapses">{{cite news|url=https://www.bbc.com/news/articles/clyxyzlp9p2o|title=Death toll from Bangkok bar fire rises to 30 as police probe safety lapses|last1=Sricham|first1=Jiraporn|date=13 July 2026|access-date=13 July 2026|publisher=[[BBC News]]|last2=Ng|first2=Kelly}}</ref> == सम्बन्धित विषय == * [[२०२६ स्विट्ज़रलैण्ड नववर्ष पूर्वसन्ध्या बार अग्निकाण्ड]] == सन्दर्भ == {{Reflist}} {{Authority control}} [[श्रेणी:विकिडेटा पर उपलब्ध निर्देशांक]] [[श्रेणी:थाईलैंड]] [[श्रेणी:थाईलैण्ड]] [[श्रेणी:थाईलैण्ड का इतिहास]] et833x46ggfzp06hnigi60h0luwbjun 6586951 6586950 2026-07-18T00:13:14Z स्वर्ण 883468 6586951 wikitext text/x-wiki {{Infobox event | name = २०२६ ई॰ बैंकॉक मधुशाला अग्निकाण्ड <br> {{lang|th|ค.ศ. ๒๐๒๖ เหตุเพลิงไหม้ผับกรุงเทพฯ}} | date = १२–१३ जुलाई २०२६ ई॰ | time = २३:५७ | timezone = आईसीटी; [[यूटीसी+०७:००]] | location = रोङ बीयर ना लात फ्राओ, चतुचक जनपद, [[बैंकॉक]], [[थाईलैण्ड]] | coordinates = {{coord|format=dms|region:TH-10_type:event|display=inline,title}} | type = भवन अग्निकाण्ड | cause = १८ जुलाई २०२६ तक जाँचाधीन | deaths = ३३ | injuries = ७०+ }} आईसीटी ([[यूटीसी+०७:००]]) समयानुसार १२ जुलाई २०२६ ई॰ को मध्यरात्रि से कुछ पहले [[बैंकॉक]], [[थाईलैण्ड]] के चतुचक जनपद में स्थित एक बियर भवन एवं सजीव संगीत स्थल, “रोङ बीयर ना लात फ्राओ” ({{Langx|th|โรงเบียร์ ณ ลาดพร้าว}}, शाब्दिक अर्थ “लात फ्राओ का बियर भवन”) में आग लग गई। इस अग्निकाण्ड में ३३ लोगों की मृत्यु हो गई और ७० से अधिक घायल हुए, जिनमें २४ की स्थिति गम्भीर बताई गई।<ref name=":2">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> १८ जुलाई २०२६ तक घटना के कारणों की जाँच जारी है और नगर अधिकारियों का प्रारम्भिक आकलन छत पर लगे [[वातानुकूलन]] यन्त्र में विद्युत् [[लघु परिपथ|लघुपथ]] का होना है।<ref>{{cite news|url=https://www.reuters.com/world/asia-pacific/how-flammable-decor-lax-rules-turned-bangkok-pub-into-death-trap-2026-07-14/|title=How flammable decor and lax rules turned Bangkok pub into a death trap|last1=Sriring|first1=Orathai|date=14 July 2026|access-date=17 July 2026|publisher=[[Reuters]]}}</ref> == पृष्ठभूमि == रोङ बीयर ना लात फ्राओ एक भोजनालय, बियर भवन और सजीव संगीत स्थल था, जो २०२३ में खोला गया। यह लात फ्राओ मार्ग पर, यूनियन मॉल और फहोन योथिन एमआरटी स्टेशन के समीप स्थित है।<ref name="Guardian">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref> भवन में दो मुख्य प्रवेश द्वार और दो अग्नि-निर्गम द्वार थे।<ref name="Sanook">{{Cite web|url=https://www.sanook.com/news/9898846/|title=เปิดผังร้าน โรงเบียร์ ลาดพร้าว มีทางออกกี่ทาง? คนเคยไปเที่ยว รีวิวใช้ได้จริงกี่ทาง|date=13 July 2026|website=[[Sanook.com]]|language=th|trans-title=The floor plan of Lat Phrao Beer Hall; visitors reveal how many exit is actually available?|archive-url=https://web.archive.org/web/20260714043252/https://www.sanook.com/news/9898846/|archive-date=14 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ के स्वामी सुविचा और बंगोर्न सैलाबाथ ने १४ नवम्बर २०२४ को “रोंग बीयर ना लात फ्राओ लिमिटेड” कम्पनी की स्थापना की, जिसमें सुविचा के पास ९५ प्रतिशत तथा शेष ५ प्रतिशत अंश बंगोर्न के थे। कम्पनी ने मूलतः अपना व्यवसाय प्रयोजन “भोजन, मादक पेय का विक्रय तथा विविध संगीत एवं मनोरंजन कार्यक्रम आयोजित करना” पंजीकृत किया था, जिसे बाद में बदलकर केवल “भोजनालय व्यवसाय संचालन” कर दिया गया।<ref name="than-nlpcompany">{{Cite web|url=https://www.thansettakij.com/general-news/663821|title=เปิดผู้ถือหุ้น "โรงเบียร์ ณ ลาดพร้าว" ชื่อตรงกับเจ้าของร้านไฟไหม้ยโสธรปี 62|last=nuttapol_wan|date=13 July 2026|website=Thansettakij|language=th|trans-title=Shareholders of 'Rong Beer Na Lat Phrao' also owned a restaurant in Yasothon, which caught fire in 2019|archive-url=https://web.archive.org/web/20260715160723/https://www.thansettakij.com/general-news/663821|archive-date=15 July 2026|access-date=13 July 2026|url-status=live}}</ref> === पूर्ववर्ती घटनाएँ === थाईलैण्ड में इससे पूर्व भी मनोरंजन स्थलों पर घातक अग्निकाण्ड हो चुके हैं। १ जनवरी २००९ को बैंकॉक के सान्तिका क्लब में लगी आग से ६६ लोगों की मृत्यु हुई और २०० से अधिक घायल हुए थे, जबकि २०२२ में चोनबुरी प्रान्त के माउण्टेन बी संगीत पब में आग लगने से २६ मौतें और २२ घायल हुए थे।<ref name="AP">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="Thairath1">{{cite news|url=https://www.thairath.co.th/scoop/infographic/2945903|title=|date=13 July 2026|work=[[Thairath]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260713191022/https://www.thairath.co.th/scoop/infographic/2945903|archive-date=13 July 2026|language=th|script-title=th:ย้อนรอย "ไฟไหม้สถานบันเทิง" ครั้งใหญ่ ไทยต้องถอดบทเรียนอีกกี่รอบ?|trans-title=Recap of the previous major "pub fires": How many times Thailand has to learnt its lesson?|url-status=live}}</ref><ref name=":0">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> रोङ बीयर ना लात फ्राओ की स्थापना से पहले सुविचा और बंगोर्न ने यासोथोन में “सालेङ” ({{Langx|th|ซาเล้ง}}, शाब्दिक अर्थ “ऑटो रिक्शा”) नामक एक भोजनालय खोला था। २४ दिसम्बर २०१९ को उस भोजनालय के जीर्णोद्धार के समय आग लग गई, जिसमें एक व्यक्ति घायल हुआ।<ref name=":02">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> == अग्निकाण्ड == बैंकॉक की नगर सरकार ने बताया कि आग १२ जुलाई को मध्यरात्रि से कुछ पहले आरम्भ हुई।<ref name="AP2">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> आपातकालीन सेवाओं को २३:५७ पर सूचना मिली और अग्निशमन कर्मियों ने लगभग आधे घण्टे में आग पर नियन्त्रण पा लिया।<ref name="CNA">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> अधिकारियों ने बताया कि आग सामने के मंच क्षेत्र के पास शुरू हुई और तीव्र गति से फैली। आग लगते ही विद्युत आपूर्ति ठप हो गई, जिससे भीतर अन्धकार छा गया।<ref name="AP3">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> बहुत से ग्राहक भवन के पिछले भाग में स्थित रसोई और शौचालयों की ओर चले गए, जहाँ बाद में अग्निशमन कर्मियों को कई पीड़ित मिले।<ref name="CNA2">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> आन्तरिक भाग, फ़र्नीचर और छत को व्यापक क्षति पहुँची।<ref name="AP4">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref><ref name="NationTV">{{cite news|url=https://www.nationtv.tv/news/current-issue/378980144|title=|date=13 July 2026|work=[[Nation TV (Thai TV channel)|Nation TV]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714045159/https://www.nationtv.tv/news/current-issue/378980144|archive-date=14 July 2026|language=th|script-title=th:เปิดสาเหตุไฟไหม้โรงเบียร์ ณ ลาดพร้าว เสียชีวิต 27 ราย นายกฯ เผยควันออกจากคัตเอาต์เวทีก่อนไฟดับทั้งร้าน|trans-title=Cause examined in Rong Beer Na Lat Phrao fire that killed 27; PM reveals the stage circuit breaker began to smoke before the blackout|url-status=live}}</ref> प्रधानमन्त्री [[अनुदिन जाञवीरकूल]] ने कहा कि स्थल पर प्रस्तुति दे रहे एक संगीतकार ने बताया कि विद्युत् आपूर्ति बन्द होने से पहले उन्होंने मंच के निकट एक [[परिपथ विच्छेदक]] से धुआँ उठते देखा। इसके बाद संगीतकार ने एक विस्फोट सुना और बताया कि घना धुआँ शीघ्र ही समूचे भवन में भर गया।<ref name="AP5">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> समाचार अभिकरणों द्वारा प्रमाणित दृश्य-रिकॉर्डिंग में सामने के प्रवेश द्वार से धुआँ और ज्वालाएँ निकलती दिखीं, जब ग्राहक भाग रहे थे, जिनमें से कुछ के वस्त्रों में आग लगी हुई थी।<ref name="CNA3">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> == हताहत == अधिकारियों ने बताया कि न्यूनतम २८ लोगों की मृत्यु की पुष्टि हुई और ७० से अधिक अस्पताल में भर्ती हुए, जिनमें २४ की स्थिति गम्भीर थी।<ref name="CNA4">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref><ref name=":03">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> मृतकों में १८ महिलाएँ और ९ पुरुष थे। प्रारम्भिक निष्कर्षों से संकेत मिला कि अधिकतर मौतें धुएँ के साँस लेने से हुईं।<ref name=":04">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> प्रशासन ने सम्बन्धियों के लिए पंजीकरण केन्द्र स्थापित किया और मृतकों एवं घायलों की पहचान आरम्भ की।<ref name="AP6">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १४ जुलाई को मृतक संख्या बढ़कर ३० हो गई।<ref>{{cite news|url=https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|title=Death toll from a Bangkok music bar fire rises to 30, dozens remain in hospital|last=Ji|first=Tian Macleod|date=13 July 2026|work=[[Associated Press]]|accessdate=13 July 2026|archive-url=https://web.archive.org/web/20260714045717/https://apnews.com/article/thailand-fire-bar-bangkok-dd1d309ea2c1f91f9991ebf8d24e5e09|archive-date=14 July 2026|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> १५ जुलाई को दो घायलों की मृत्यु के पश्चात मृतक संख्या ३२ तक पहुँची। उसी दिन बाद में एक अन्य पीड़ित के दम तोड़ देने से मृतक संख्या ३३ हो गई।<ref name=":22">{{cite news|url=https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|title=Singer's death brings Bangkok pub fire toll to 33|date=16 July 2026|work=[[Bangkok Post]]|accessdate=16 July 2026|archive-url=https://web.archive.org/web/20260717162133/https://www.bangkokpost.com/thailand/general/3286820/singers-death-brings-bangkok-pub-fire-toll-to-33|archive-date=17 July 2026|url-status=live}}</ref> घायलों में स्थल के सह-स्वामी सुविचा सैलाबाथ भी शामिल थे, जो आग के समय भीतर उपस्थित थे।<ref name="Guardian2">{{cite news|url=https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|title=At least 27 killed in fire at Bangkok pub with another 22 critically injured|last=May|first=Natasha|date=13 July 2026|work=[[The Guardian]]|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714215053/https://www.theguardian.com/world/2026/jul/12/at-least-27-killed-in-blaze-at-bangkok-pub-thai-officials-say|archive-date=14 July 2026|url-status=live}}</ref><ref name="Matichon1">{{Cite news|url=https://www.matichon.co.th/local/crime/news_5803232|title=ยืนยันตัวตน ผู้เสียชีวิตเหตุโรงเบียร์ 13 รายแล้ว ขณะที่ยอดบาดเจ็บ-สูญหายเพิ่ม|work=[[Matichon]]|accessdate=17 July 2026|archive-url=https://web.archive.org/web/20260715031942/https://www.matichon.co.th/local/crime/news_5803232|archive-date=15 July 2026|trans-title=13 victims of the beer hall fire identified, with more injured and missing were reported|url-status=live}}</ref> मृतकों में एक लाओसियाई कर्मी था, जबकि दो अन्य घायल हुए।<ref>{{cite news|url=https://www.thaipbs.or.th/news/content/508280|title=แรงงานชาวลาวกังวลอนาคต หลังร้าน "โรงเบียร์ ณ ลาดพร้าว" ไฟไหม้|access-date=17 July 2026|archive-url=https://web.archive.org/web/20260716160809/https://www.thaipbs.or.th/news/content/508280|archive-date=16 July 2026|publisher=[[Thai Public Broadcasting Service]]|trans-title=Fire at "Rong Beer Na Lat Phrao" left the future of Laotian workers uncertain|url-status=live}}</ref> थाई स्वतन्त्र संगीत बैण्ड “थोटसाकान” के तीन सदस्य, जिन्होंने आग से पहले रात्रि में प्रस्तुति दी थी, अन्ततः अपनी चोटों से ग्रस्त हो गए; बैण्ड सदस्य पचारा सोंगफाथकैव ने [[फेसबुक|फ़ेसबुक]] पर एक सन्देश में बताया कि वे कीबोर्ड वादक क्वाङ, महिला गायिका ब्रीज़ और ड्रम वादक ब्यू थे।<ref>{{Cite news|url=https://www.bbc.com/news/articles/crr8gnx01d7o|title='There was no way out': Witnesses describe how deadly inferno swept through Bangkok bar|last1=Aemocha|first1=Panisa|date=13 July 2026|access-date=15 July 2026|archive-url=https://web.archive.org/web/20260714085224/https://www.bbc.com/news/articles/crr8gnx01d7o|archive-date=14 July 2026|publisher=[[BBC News]]|last2=Ninbut|first2=Paweena|last3=Ng|first3=Kelly|url-status=live}}</ref> == जाँच == १३ जुलाई को घटनास्थल की घेराबन्दी कर दी गई, जबकि विधि-विज्ञान अधिकारी भवन के अवशेषों का परीक्षण करते रहे।<ref name="AP7">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> यद्यपि कारण स्थापित नहीं हो पाया था, बैंकॉक के आपदा प्रशासन का प्रारम्भिक आकलन था कि छत के वातानुकूलन यन्त्र में हुए विद्युत् लघुपथ ने आग को जन्म दिया, जो ठीक नीचे लगी ज्वलनशील ध्वनिरोधी छत के कारण और भड़क गई।<ref name="CNA6">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> राज्यपाल चडचार्ट सिट्टीपुण्ट ने कहा कि अन्वेषक छत की सामग्री तथा इस बात की जाँच करेंगे कि आपातकालीन निकास अवरुद्ध थे या नहीं।<ref name="AP8">{{cite news|url=https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|title=Fire at a pub in Bangkok kills at least 27 people|last=Delgado|first=Anton L.|date=12 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714194600/https://apnews.com/article/thailand-bangkok-fire-pub-0869e3d356d4be11c5633f9ceb3dc329|archive-date=14 July 2026|publisher=[[Associated Press]]|last2=Saksornchai|first2=Jintamas|url-status=live}}</ref> उन्होंने बताया कि बियर की पेटियों ने रसोई के पास के एक निकास और एक मेज़ ने दूसरे निकास को अवरुद्ध कर रखा था।<ref name="CNA5">{{cite news|url=https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|title=Bangkok bar fire kills 27, officials say emergency exits were obstructed|date=13 July 2026|access-date=13 July 2026|archive-url=https://web.archive.org/web/20260714174641/https://www.channelnewsasia.com/asia/bangkok-bar-fire-27-killed-rong-beer-na-lat-phrao-6249566|archive-date=14 July 2026|publisher=[[CNA (TV network)|CNA]]|url-status=live}}</ref> उन्होंने यह भी कहा कि ज्वलनशील छत सज्जा ने आग के तीव्र प्रसार में योगदान दिया हो सकता है।<ref name=":05">{{Cite web|url=https://www.bbc.com/news/articles/c24yev53q06o|title=At least 28 killed, 25 critically injured after fire engulfs Bangkok bar|last=Head|first=Jonathan|last2=Sales|first2=Dan|date=13 July 2026|publisher=[[BBC News]]|language=en-GB|archive-url=https://web.archive.org/web/20260712214104/https://www.bbc.com/news/articles/c24yev53q06o|archive-date=12 July 2026|access-date=13 July 2026|url-status=live}}</ref> यह मधुशाला “मनोरंजन स्थल” के बजाय “सजीव संगीत सहित भोजनालय” के रूप में आधिकारिक रूप से पंजीकृत थी, इसलिए क़ानूनन उसे अग्निरोधी सामग्री का उपयोग करना आवश्यक नहीं था।<ref name="BBCSafetyLapses">{{cite news|url=https://www.bbc.com/news/articles/clyxyzlp9p2o|title=Death toll from Bangkok bar fire rises to 30 as police probe safety lapses|last1=Sricham|first1=Jiraporn|date=13 July 2026|access-date=13 July 2026|publisher=[[BBC News]]|last2=Ng|first2=Kelly}}</ref> == सम्बन्धित विषय == * [[२०२६ स्विट्ज़रलैण्ड नववर्ष पूर्वसन्ध्या बार अग्निकाण्ड]] == सन्दर्भ == {{Reflist}} {{Authority control}} [[श्रेणी:विकिडेटा पर उपलब्ध निर्देशांक]] [[श्रेणी:थाईलैंड]] [[श्रेणी:थाईलैण्ड]] [[श्रेणी:थाईलैण्ड का इतिहास]] sn9rgmd15f5d9fbjevqugtfapt6e5uq सदस्य वार्ता:Ram900 3 1616116 6586942 2026-07-18T00:00:52Z Sanjeev bot 127039 स्वागत संदेश जोड़ा 6586942 wikitext text/x-wiki {{साँचा:सहायता|name=Ram900}} -- [[सदस्य:Sanjeev bot|Sanjeev bot]] ([[सदस्य वार्ता:Sanjeev bot|वार्ता]]) 00:00, 18 जुलाई 2026 (UTC) oep1m5vw6bbamjoc6b6dkll5h7en5jm सदस्य वार्ता:Jaidevphephanawala 3 1616117 6586943 2026-07-18T00:00:53Z Sanjeev bot 127039 स्वागत संदेश जोड़ा 6586943 wikitext text/x-wiki {{साँचा:सहायता|name=Jaidevphephanawala}} -- [[सदस्य:Sanjeev bot|Sanjeev bot]] ([[सदस्य वार्ता:Sanjeev bot|वार्ता]]) 00:00, 18 जुलाई 2026 (UTC) jh5ndge43q4jm0wc8fm38yxbhnbeiuq सदस्य वार्ता:Savi pathak 3 1616118 6586944 2026-07-18T00:00:55Z Sanjeev bot 127039 स्वागत संदेश जोड़ा 6586944 wikitext text/x-wiki {{साँचा:सहायता|name=Savi pathak}} -- [[सदस्य:Sanjeev bot|Sanjeev bot]] ([[सदस्य वार्ता:Sanjeev bot|वार्ता]]) 00:00, 18 जुलाई 2026 (UTC) ijf048tisqi6qzvjzyfzuhc2xe5sc3o सदस्य वार्ता:सिद्ध संदेश भारत 3 1616119 6586945 2026-07-18T00:00:56Z Sanjeev bot 127039 स्वागत संदेश जोड़ा 6586945 wikitext text/x-wiki {{साँचा:सहायता|name=सिद्ध संदेश भारत}} -- [[सदस्य:Sanjeev bot|Sanjeev bot]] ([[सदस्य वार्ता:Sanjeev bot|वार्ता]]) 00:00, 18 जुलाई 2026 (UTC) 4cno42dm55qxkffutbhjup2zr3l9a3t 2026 बैंकॉक पब अग्निकांड 0 1616120 6586946 2026-07-18T00:01:49Z स्वर्ण 883468 [[२०२६ बैंकॉक मधुशाला अग्निकाण्ड]] को अनुप्रेषित 6586946 wikitext text/x-wiki #redirect [[२०२६ बैंकॉक मधुशाला अग्निकाण्ड]] hy78dpcakhr5artkrlnguma63x6n5w0 नौवहन महानिदेशालय 0 1616121 6586953 2026-07-18T00:25:44Z स्वर्ण 883468 "[[:en:Special:Redirect/revision/1356454809|Directorate General of Shipping]]" पृष्ठ का अनुवाद करके निर्मित किया गया 6586953 wikitext text/x-wiki {{ज्ञानसन्दूक कम्पनी|name=Directorate General of Shipping|logo=Logo Directorate General of Shipping (India).png|logo_size=120px|type=[[Government agency]]|locations=[[Mumbai]], [[India]]|key_people=Shyam Jagannathan, Director General of Shipping|area_served=[[India]]|industry=Maritime|products=|revenue=|operating_income=|net_income=|num_employees=|parent=[[Ministry of Ports, Shipping and Waterways (India)|Ministry of Ports, Shipping and Waterways]]|homepage=http://www.dgshipping.gov.in/|footnotes=}}'''नौवहन महानिदेशालय''' ({{Langx|en|The Directorate General of Shipping|italic=no}}), [[भारत|भारत गणराज्य]], [[भारत सरकार]] के [[पत्तन, पोत परिवहन और जलमार्ग मंत्रालय, भारत सरकार|नौवहन मन्त्रालय]] के अधीन एक सम्बद्ध कार्यालय है, जो भारतीय पंजीकृत पोतों तथा भारतीय पत्तनों पर उपस्थित पोतों हेतु [[जीवन]], [[स्वास्थ्य]], [[रक्त वाहिका|पोत]] एवं [[प्राकृतिक पर्यावरण|पर्यावरण]] के लिए उत्तरदायी है। यह महानिदेशालय [[मुम्बई]] में स्थित है तथा इसका नेतृत्व नौवहन महानिदेशक एवं भारत सरकार के अपर सचिव श्री श्याम जगन्नाथन, भा॰प्र॰से॰ करते हैं।<ref>{{Cite web|url=https://www.dgshipping.gov.in/Content/DirectorGeneralShippingAbout.aspx|title=Director General of Shipping|website=www.dgshipping.gov.in|access-date=2022-09-22}}</ref> == कर्तव्य == इस महानिदेशालय का प्रमुख कार्य यह सुनिश्चित करना है कि भारतीय पोत एवं नौवहन कम्पनियाँ उच्च सुरक्षा एवं पर्यावरणीय मानकों का पालन करें, भारतीय [[नाविक|नाविकों]] के पास उच्च अर्हताएँ तथा अच्छी कार्य एवं आवास दशाएँ हों, तथा भारतीय [[जलीय क्षेत्र|क्षेत्र]] एवं पत्तनों में विदेशी पोत अन्तर्राष्ट्रीय नियमों का अनुपालन करें। नौवहन महानिदेशक को व्यापारिक नौवहन अधिनियम, १९५८ की धारा ७ के अन्तर्गत वैधानिक शक्तियाँ प्रदान की गई हैं, और वे अधिनियम के प्रावधानों के कार्यान्वयन हेतु उत्तरदायी हैं। यह महानिदेशालय विभिन्न अन्तर्राष्ट्रीय अभिसमयों का कार्यान्वयन सुनिश्चित करता है, जिनमें सुरक्षा से सम्बन्धित सोलास ([[समुद्री जीवन सुरक्षा हेतु अन्तर्राष्ट्रीय अभिसमय]]), प्रदूषण निवारण हेतु [[मारपोल ७३/७८]] तथा अन्तर्राष्ट्रीय समुद्री संगठन की अन्य अनिवार्य आवश्यकताएँ सम्मिलित हैं। == निदेशक == <templatestyles src="Module:Message box/ambox.css"></templatestyles>{{Expandsect|date=August 2011}}श्री श्याम जगन्नाथन, भारतीय प्रशासनिक सेवा के १९९७ असम-मेघालय संवर्ग के अधिकारी, वर्तमान में नौवहन महानिदेशालय, भारत के निदेशक हैं।<ref>{{Cite web|url=https://www.dgshipping.gov.in/Content/DirectorGeneralShippingAbout.aspx|title=Director General of Shipping|website=www.dgshipping.gov.in|access-date=2023-09-27}}</ref> वे मई २०२१ से केन्द्रीय प्रतिनियुक्ति पर हैं और नौवहन महानिदेशालय में तीन वर्ष तक निदेशक के रूप में सेवारत रहेंगे। == सम्बन्धित विषय == {{प्रवेशद्वार|भारत}} * [[भारत की सीमाएँ]] * [[भारत की जलवायु]] * [[भारत में मत्स्य पालन]] * [[भारत सारावली|भारत की रूपरेखा]] == सन्दर्भ == {{Reflist}} == बाह्य कड़ियाँ == * [http://www.dgshipping.gov.in/ नौवहन महानिदेशालय] * [https://www.theshack.npk-knots.com/dg-shipping-know-it-better/ नौवहन महानिदेशालय – इसे भली-भाँति जानिए] [[श्रेणी:भारत]] [[श्रेणी:समुद्र विज्ञान]] [[श्रेणी:नौवहन]] 66s5mv73119cd22786jkvzwwfftur5m 6586954 6586953 2026-07-18T00:27:41Z स्वर्ण 883468 6586954 wikitext text/x-wiki {{Infobox company | name = नौवहन महानिदेशालय | logo = Logo Directorate General of Shipping (India).png | logo_size = 120px | type = सरकारी अभिकरण | founded = सितम्बर १९४९ | hq_location = [[मुम्बई]], {{भारत}} | key_people = श्याम जगन्नाथन, नौवहन महानिदेशक | area_served = {{IND}} | industry = समुद्री | products = | revenue = | operating_income = | net_income = | num_employees = | parent = [[पत्तन, पोत परिवहन और जलमार्ग मंत्रालय, भारत सरकार]] | subsidiaries = | website = http://www.dgshipping.gov.in/ | footnotes = }} '''नौवहन महानिदेशालय''' ({{Langx|en|The Directorate General of Shipping|italic=no}}), [[भारत|भारत गणराज्य]], [[भारत सरकार]] के [[पत्तन, पोत परिवहन और जलमार्ग मंत्रालय, भारत सरकार|नौवहन मन्त्रालय]] के अधीन एक सम्बद्ध कार्यालय है, जो भारतीय पंजीकृत पोतों तथा भारतीय पत्तनों पर उपस्थित पोतों हेतु [[जीवन]], [[स्वास्थ्य]], [[रक्त वाहिका|पोत]] एवं [[प्राकृतिक पर्यावरण|पर्यावरण]] के लिए उत्तरदायी है। यह महानिदेशालय [[मुम्बई]] में स्थित है तथा इसका नेतृत्व नौवहन महानिदेशक एवं भारत सरकार के अपर सचिव श्री श्याम जगन्नाथन, भा॰प्र॰से॰ करते हैं।<ref>{{Cite web|url=https://www.dgshipping.gov.in/Content/DirectorGeneralShippingAbout.aspx|title=Director General of Shipping|website=www.dgshipping.gov.in|access-date=2022-09-22}}</ref> == कर्तव्य == इस महानिदेशालय का प्रमुख कार्य यह सुनिश्चित करना है कि भारतीय पोत एवं नौवहन कम्पनियाँ उच्च सुरक्षा एवं पर्यावरणीय मानकों का पालन करें, भारतीय [[नाविक|नाविकों]] के पास उच्च अर्हताएँ तथा अच्छी कार्य एवं आवास दशाएँ हों, तथा भारतीय [[जलीय क्षेत्र|क्षेत्र]] एवं पत्तनों में विदेशी पोत अन्तर्राष्ट्रीय नियमों का अनुपालन करें। नौवहन महानिदेशक को व्यापारिक नौवहन अधिनियम, १९५८ की धारा ७ के अन्तर्गत वैधानिक शक्तियाँ प्रदान की गई हैं, और वे अधिनियम के प्रावधानों के कार्यान्वयन हेतु उत्तरदायी हैं। यह महानिदेशालय विभिन्न अन्तर्राष्ट्रीय अभिसमयों का कार्यान्वयन सुनिश्चित करता है, जिनमें सुरक्षा से सम्बन्धित सोलास ([[समुद्री जीवन सुरक्षा हेतु अन्तर्राष्ट्रीय अभिसमय]]), प्रदूषण निवारण हेतु [[मारपोल ७३/७८]] तथा अन्तर्राष्ट्रीय समुद्री संगठन की अन्य अनिवार्य आवश्यकताएँ सम्मिलित हैं। == निदेशक == <templatestyles src="Module:Message box/ambox.css"></templatestyles>{{Expandsect|date=August 2011}}श्री श्याम जगन्नाथन, भारतीय प्रशासनिक सेवा के १९९७ असम-मेघालय संवर्ग के अधिकारी, वर्तमान में नौवहन महानिदेशालय, भारत के निदेशक हैं।<ref>{{Cite web|url=https://www.dgshipping.gov.in/Content/DirectorGeneralShippingAbout.aspx|title=Director General of Shipping|website=www.dgshipping.gov.in|access-date=2023-09-27}}</ref> वे मई २०२१ से केन्द्रीय प्रतिनियुक्ति पर हैं और नौवहन महानिदेशालय में तीन वर्ष तक निदेशक के रूप में सेवारत रहेंगे। == सम्बन्धित विषय == {{प्रवेशद्वार|भारत}} * [[भारत की सीमाएँ]] * [[भारत की जलवायु]] * [[भारत में मत्स्य पालन]] * [[भारत सारावली|भारत की रूपरेखा]] == सन्दर्भ == {{Reflist}} == बाह्य कड़ियाँ == * [http://www.dgshipping.gov.in/ नौवहन महानिदेशालय] * [https://www.theshack.npk-knots.com/dg-shipping-know-it-better/ नौवहन महानिदेशालय – इसे भली-भाँति जानिए] [[श्रेणी:भारत]] [[श्रेणी:समुद्र विज्ञान]] [[श्रेणी:नौवहन]] fdqb6kz7qhr4sh4efo6pdp9fo6cpfjt मॉड्यूल:Message box/ambox.css 828 1616122 6586955 2026-07-18T00:30:24Z स्वर्ण 883468 नया पृष्ठ: /* {{pp|small=y}} */ .ambox { border: 1px solid #a2a9b1; /* @noflip */ border-left: 10px solid #36c; /* Default "notice" blue */ background-color: #fbfbfb; box-sizing: border-box; } /* Single border between stacked boxes. * category and TemplateStyles are wrapped in an "empty" span [[phab:T378906]] * [[phab:T200206]] may be relevant at a later date */ .ambox + .mw-empty-elt + .ambox, .ambox + .mw-empty-elt + .mw-empty-elt + .ambox, /* * and Template:Dat... 6586955 sanitized-css text/css /* {{pp|small=y}} */ .ambox { border: 1px solid #a2a9b1; /* @noflip */ border-left: 10px solid #36c; /* Default "notice" blue */ background-color: #fbfbfb; box-sizing: border-box; } /* Single border between stacked boxes. * category and TemplateStyles are wrapped in an "empty" span [[phab:T378906]] * [[phab:T200206]] may be relevant at a later date */ .ambox + .mw-empty-elt + .ambox, .ambox + .mw-empty-elt + .mw-empty-elt + .ambox, /* * and Template:Dated maintenance category. we can probably remove this flavor * when T200206 is fixed */ .ambox + .mw-empty-elt + .mw-empty-elt + .mw-empty-elt + .ambox { margin-top: -1px; } /* For the "small=left" option. */ /* must override .ambox + .ambox styles above */ html body.mediawiki .ambox.mbox-small-left { /* @noflip */ margin: 4px 1em 4px 0; overflow: hidden; width: 238px; border-collapse: collapse; font-size: 88%; line-height: 1.25em; } .ambox-speedy { /* @noflip */ border-left: 10px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ambox-delete { /* @noflip */ border-left: 10px solid #b32424; /* Red */ } .ambox-content { /* @noflip */ border-left: 10px solid #f28500; /* Orange */ } .ambox-style { /* @noflip */ border-left: 10px solid #fc3; /* Yellow */ } .ambox-move { /* @noflip */ border-left: 10px solid #9932cc; /* Purple */ } .ambox-protection { /* @noflip */ border-left: 10px solid #a2a9b1; /* Gray-gold */ } .ambox .mbox-text { border: none; /* @noflip */ padding: 0.25em 0.5em; width: 100%; } .ambox .mbox-image { border: none; /* @noflip */ padding: 2px 0 2px 0.5em; text-align: center; } .ambox .mbox-imageright { border: none; /* @noflip */ padding: 2px 0.5em 2px 0; text-align: center; } /* An empty narrow cell */ .ambox .mbox-empty-cell { border: none; padding: 0; width: 1px; } .ambox .mbox-image-div { width: 52px; } @media (min-width: 720px) { .ambox { margin: 0 10%; /* 10% = Will not overlap with other elements */ } } @media print { body.ns-0 .ambox { display: none !important; } } idzaktajuuk2185o4mwkmbswy6znoaz तटीय भारत 0 1616123 6586956 2026-07-18T00:33:53Z स्वर्ण 883468 [[भारत#जलवायु]] को अनुप्रेषित 6586956 wikitext text/x-wiki #redirect [[भारत#जलवायु]] keymnaxybeeugavrzhmql2x82a2b99i भारत का अनन्य आर्थिक क्षेत्र 0 1616124 6586957 2026-07-18T00:35:27Z स्वर्ण 883468 [[भारतीय अर्थव्यवस्था]] को अनुप्रेषित 6586957 wikitext text/x-wiki #redirect [[भारतीय अर्थव्यवस्था]] tuqlfxrnnpp9l8la2mha47uzubkrc2r जुआन ब्रांको 0 1616126 6586991 2026-07-18T04:58:35Z حساب کاربری0088 936773 नया पृष्ठ: '''जुआन ब्रांको''' (जन्म 26 अगस्त 1989, [[एस्टेपोना]], स्पेन) फ्रांसीसी-स्पेनिश वकील, निबंधकार और राजनीतिक कार्यकर्ता हैं।<ref>{{cite news |last=Bassets |first=Marc |title=El abogado hispanofrancés en el centro de la polémica por el vídeo sexual del candidato de Macron en París |url=https://... 6586991 wikitext text/x-wiki '''जुआन ब्रांको''' (जन्म 26 अगस्त 1989, [[एस्टेपोना]], स्पेन) फ्रांसीसी-स्पेनिश वकील, निबंधकार और राजनीतिक कार्यकर्ता हैं।<ref>{{cite news |last=Bassets |first=Marc |title=El abogado hispanofrancés en el centro de la polémica por el vídeo sexual del candidato de Macron en París |url=https://elpais.com/internacional/2020/02/18/actualidad/1582019402_252772.html |work=El País |date=2020-02-18 |language=es}}</ref><ref name="LExpress">{{cite news |last1=Fechner |first1=Benoist |last2=Dupuis |first2=Jérôme |last3=Gallet |first3=Ludwig |title=Juan Branco, l'avocat qui veut la peau de la Macronie et conseille le tombeur de Griveaux |url=https://www.lexpress.fr/politique/juan-branco-le-radical-chic-qui-veut-la-peau-de-la-macronie_2061348.html |work=L'Express |date=2019-02-11 |language=fr}}</ref> वे [[इमैनुएल मैक्रों]] की राष्ट्रपतियों के इर्द-गिर्द बने सत्ता-जाल की आलोचना करने वाली पुस्तक ''Crépuscule'' (2019) और [[जूलियन असांजे]], [[पीली बनियान आंदोलन]] तथा [[उस्मान सोन्को]] के नेतृत्व वाले सेनेगली विपक्ष की कानूनी रक्षा के लिए जाने जाते हैं।<ref name="LExpress"/><ref name="LeMonde1902">{{cite news |title=Derrière la chute de Benjamin Griveaux, enquête sur le rôle d'un trio sans foi ni loi |url=https://www.lemonde.fr/politique/article/2020/02/17/derriere-la-chute-de-benjamin-griveaux-un-trio-sans-foi-ni-loi_6029811_823448.html |work=Le Monde |date=2020-02-17 |language=fr}}</ref> == शिक्षा == पुर्तगाली फ़िल्म निर्माता [[पाउलो ब्रांको]] और स्पेनिश मनोविश्लेषक डोलोरेस लोपेज़ के पुत्र जुआन ब्रांको पेरिस में पले-बढ़े।<ref name="ElPais">{{cite news |last=Bassets |first=Marc |title=El abogado hispanofrancés en el centro de la polémica por el vídeo sexual del candidato de Macron en París |url=https://elpais.com/internacional/2020/02/18/actualidad/1582019402_252772.html |work=El País |date=2020-02-18 |language=es}}</ref> उन्होंने [[पेरिस राजनीतिक अध्ययन संस्थान]] और [[École normale supérieure]] (उल्म) में अध्ययन किया और 26 नवंबर 2014 को ''De l'affaire Katanga au contrat social global : un regard sur la Cour pénale internationale'' शीर्षक से कानून में डॉक्टरेट की थीसिस "très honorable" तथा जूरी की सर्वसम्मत बधाई के साथ पूरी की।<ref>{{cite web |title=De l'affaire Katanga au contrat social global : un regard sur la Cour pénale internationale |url=https://theses.fr/2014ENSU0004 |website=theses.fr |date=2014-11-26 |language=fr}}</ref><ref>{{cite web |title=Procès-verbal de soutenance de thèse de Juan Branco (26 novembre 2014) |url=https://ruches.org/api/media/faq-doc-097eb2c9af46.jpg |format=JPG |language=fr}}</ref><ref>{{cite web |title=Diplôme de doctorat en droit de l'École normale supérieure n° 10890914 (1er mars 2015) |url=https://ruches.org/api/media/faq-doc-1c022745375e.jpg |format=JPG |language=fr}}</ref> इस कार्य ने 2015 में वारेन संस्थान का थीसिस पुरस्कार ("अंतर्राष्ट्रीय आपराधिक न्याय" श्रेणी) जीता — जो उस वर्ष [[अंतर्राष्ट्रीय आपराधिक न्यायालय]] और [[संवैधानिक परिषद (फ्रांस)|संवैधानिक परिषद]] के अध्यक्ष द्वारा संयुक्त रूप से प्रदान किया गया — और LGDJ द्वारा प्रकाशित हुआ; थीसिस को ENS के इतिहास की पहली कानून थीसिस बताया गया है।<ref>{{cite web |title=Lauréats 2015 |url=https://prix-joinet.ifjd.org/laureats-2015-prix-joinet/ |website=Institut Louis Joinet (ex-Institut Varenne) |language=fr}}</ref><ref>{{cite web |title=Prix de Thèse de l'Institut Varenne — Lettre d'information de l'ENS, janvier 2016 |url=https://www.ens.psl.eu/sites/default/files/LettreInfo_ENS_Janvier2016_WEB.pdf |website=École normale supérieure (PSL) |format=PDF |language=fr}}</ref> इसके बाद वे [[येल लॉ स्कूल]] में विज़िटिंग रिसर्चर और 2015-2016 में लक्ज़मबर्ग के मैक्स प्लांक संस्थान तथा [[रोम ला सापिएंज़ा विश्वविद्यालय]] में शोधकर्ता रहे।<ref>{{cite news |title=Affaire Griveaux : ce qu'il faut savoir sur Juan Branco |url=https://www.lefigaro.fr/actualite-france/affaire-griveaux-ce-qu-il-faut-savoir-sur-juan-branco-20200217 |work=Le Figaro |date=2020-02-17 |language=fr}}</ref> इससे पहले वे हेग में अंतर्राष्ट्रीय आपराधिक न्यायालय में (सितंबर 2010 – मार्च 2011) अभियोजक कार्यालय के साथ संपर्क अधिकारी (PSU) के रूप में ठेका-कर्मी रहे, और फिर 19 सितंबर से 31 दिसंबर 2012 तक फ्रांस के विदेश मंत्री के Direction de la prospective में मानवाधिकार और अंतर्राष्ट्रीय न्याय पर परामर्श हेतु बाहरी सहयोगी रहे।<ref>{{cite web |title=Contrats de service de Juan Branco à la Cour pénale internationale (PSU Liaison Officer, 2010-2011) |url=https://media.ruches.org/faq-doc-b948a15dbe5c.jpg |format=JPG |language=fr}}</ref><ref>{{cite web |title=Contrat de collaborateur extérieur du ministre des Affaires étrangères (Direction de la prospective, 19 septembre – 31 décembre 2012) |url=https://media.ruches.org/faq-doc-01efa8aa770e.png |format=PNG |language=fr}}</ref> == वकालत करियर == 2017 में उन्हें पेरिस बार में स्वीकृत किया गया।<ref name="ElPais"/> मीडिया ने 2015 से 2019 के बीच उन्हें जूलियन असांजे और [[विकीलीक्स]] का फ्रांस में वकील या कानूनी सलाहकार बताया; इस दौरान वे न्यायाधीश [[बाल्तासार गार्ज़ोन]] के नेतृत्व वाली असांजे रक्षा टीम में काम करते रहे।<ref name="LExpress"/><ref name="ElPais"/> जून 2019 में उन्होंने वकील ओमेर शाट्ज़ के साथ मिलकर [[यूरोपीय संघ]] की भूमध्यसागरीय प्रवासन नीति के खिलाफ अंतर्राष्ट्रीय आपराधिक न्यायालय में शिकायत दर्ज कराई, जिसमें यूरोपीय नेताओं पर [[मानवता के विरुद्ध अपराध]] का आरोप लगाया गया।<ref>{{cite news |title=Deux avocats accusent l'Union européenne de crimes contre l'humanité envers les migrants de Libye |url=https://www.lemonde.fr/international/article/2019/06/03/plainte-contre-l-union-europeenne-devant-la-cpi-pour-le-traitement-des-migrants-en-libye_5470685_3210.html |work=Le Monde |date=2019-06-03 |language=fr}}</ref><ref>{{cite news |title=Décès de migrants en Méditerranée : des avocats veulent traduire l'Union européenne en justice |url=http://www.lefigaro.fr/flash-actu/deces-de-migrants-en-mediterranee-des-avocats-veulent-traduire-l-ue-en-justice-20190603 |work=Le Figaro |date=2019-06-03 |language=fr}}</ref> 2021 में उन्होंने [[FC बार्सिलोना]] के सदस्यों (सोसियोस) के एक समूह को [[लियोनेल मेसी]] के [[पेरिस सेंट-जर्मेन]] में स्थानांतरण के विरुद्ध शिकायत तैयार करने में सहायता की<ref>{{cite news |title=FC Barcelone : Avec l'aide de Juan Branco, des socios préparent une plainte pour faire capoter l'arrivée de Messi au PSG |url=https://www.20minutes.fr/sport/3099759-20210809-fc-barcelone-aide-juan-branco-socios-preparent-plainte-faire-capoter-arrivee-messi-psg |work=20 Minutes |date=2021-08-09 |language=fr}}</ref> और 2022 में [[ला लीगा]] के वकील के रूप में [[किलियन एम्बापे]] के PSG के साथ अनुबंध की समीक्षा और रद्दीकरण की मांग की।<ref>{{cite news |title=Foot: Juan Branco, avocat de la Liga, veut demander l'abrogation du contrat de Mbappé |url=https://www.lefigaro.fr/sports/football/espagne/foot-juan-branco-avocat-de-la-liga-veut-demander-l-abrogation-du-contrat-de-mbappe-20220617 |work=Le Figaro |date=2022-06-17 |language=fr}}</ref><ref>{{cite news |title=PSG : L'avocat de la Liga demande à la ministre des Sports d'annuler le contrat de Mbappé |url=https://rmcsport.bfmtv.com/football/transferts/psg-l-avocat-de-la-liga-demande-a-la-ministre-des-sports-d-annuler-le-contrat-de-mbappe_AV-202206170325.html |work=RMC Sport |date=2022-06-17 |language=fr}}</ref> 2017 के विधानसभा चुनावों में वे [[ला फ्रांस इनसुमिस]] के समर्थन से [[सेन-सेंट-डेनिस]] के बारहवें निर्वाचन क्षेत्र से उम्मीदवार थे; यह उम्मीदवारी स्वयं में पार्टी सदस्यता सिद्ध नहीं करती।<ref name="ElPais"/><ref name="LExpress"/> == साहित्यिक कार्य और पत्रकारिता == ''Crépuscule'' दिसंबर 2018 से ऑनलाइन मुफ्त उपलब्ध हुई और 2019 में Au Diable Vauvert द्वारा प्रकाशित हुई; इसकी लगभग 150,000 प्रतियाँ बिकीं और दस लाख से अधिक बार डाउनलोड हुई।<ref name="LeMonde1902"/><ref name="LExpress"/> ''Abattre l'ennemi'' (2021) और ''Coup d'état : manuel insurrectionnel'' (2023) के साथ यह फ्रांसीसी संस्थागत व्यवस्था की आलोचना की त्रयी बनाती है। अन्य पुस्तकें: ''Réponses à Hadopi'' (2011), ''L'Ordre et le monde'' (2016, Fayard), ''Contre Macron'' (2017), ''Assange, l'antisouverain'' (2020), ''Treize pillards'' (2022), ''Hanouna'' (2023), ''Paroles'' और ''Comment fabriquer une guillotine'' (2024) तथा ''La renégation héroïque'' (2025, मेहदी बेल्हाज कासेम के साथ)। पत्रकार और शोधकर्ता के रूप में 2018 में वे [[मिनुस्का]] बलों पर [[बांगी]] में नरसंहार का सार्वजनिक आरोप लगाने के बाद [[मध्य अफ़्रीकी गणराज्य]] से निर्वासित हुए।<ref>{{cite news |title=Un expert indépendant expulsé de Centrafrique par l'ONU |url=https://www.marianne.net/monde/un-expert-independant-expulse-de-centrafrique-par-l-onu |work=Marianne |date=2018-05-29 |language=fr}}</ref> रिपोर्टर के रूप में उन्होंने Le Monde diplomatique में [[कांगो लोकतांत्रिक गणराज्य]] (2012), मध्य अफ़्रीकी गणराज्य (2018) और [[जिबूती]] से [[यमन]] के युद्ध पर (2019) रिपोर्ट लिखीं।<ref>{{cite news |title=Qui veut vraiment la paix au Congo ? |url=https://www.monde-diplomatique.fr/2012/11/BRANCO/48344 |work=Le Monde diplomatique |date=2012-11 |language=fr}}</ref><ref>{{cite news |title=De Djibouti au Yémen, les rivages rouges |url=https://blog.mondediplo.net/de-djibouti-au-yemen-les-rivages-rouges |work=Les blogs du Diplo |date=2019-01-28 |language=fr}}</ref> डॉन डिलिलो और डेविड क्रोननबर्ग के अनुसार, ''Cosmopolis'' उपन्यास का फ़िल्म रूपांतरण (क्रोननबर्ग की फ़िल्म, 2012) का विचार उन्हीं का था और निर्देशक के लिए क्रोननबर्ग का सुझाव भी उन्होंने ही दिया।<ref>{{cite news |title=Don DeLillo, un entretien avec Slate : avec Cosmopolis, "mes mots ont pris une autre vie" |url=https://www.slate.fr/story/56689/don-delillo-cosmopolis |work=Slate.fr |date=2012-05-25 |language=fr}}</ref><ref>{{cite news |title=David Cronenberg sur "Cosmopolis" : "le livre était prophétique, le film est contemporain" |url=https://www.slate.fr/story/56743/cronenberg-entretien-cosmopolis-pattinson-dialogues-don-delillo |work=Slate.fr |date=2012-05-27 |language=fr}}</ref> 2025 में उन्होंने अपनी पहली पूर्ण फ़िल्म ''Le Massacre de Gilles de Rais'' (पुर्तगाली निर्माण, 98 मिनट) का निर्देशन किया, जो पिंगयाओ अंतर्राष्ट्रीय फ़िल्मोत्सव (आधिकारिक चयन), साओ पाउलो अंतर्राष्ट्रीय फ़िल्मोत्सव (आधिकारिक चयन – अंतर्राष्ट्रीय परिप्रेक्ष्य), LEFFEST लिस्बन (गैर-प्रतियोगी) और Festival of Films Regained के लिए चुनी गई।<ref>{{cite web |title=Le Massacre de Gilles de Rais |url=https://leopardofilmes.com/en/film/le-massacre-de-gilles-de-rais/ |website=Leopardo Filmes |language=en}}</ref><ref>{{cite web |title=The Massacre of Gilles de Rais |url=https://mubi.com/fr/fr/films/the-massacre-of-gilles-de-rais |website=MUBI |language=fr}}</ref> == राजनीतिक गतिविधि == छात्र जीवन में वे पहले [[डॉमिनिक द वीलपां]] के निकट आए और फिर युवा हरित दल में शामिल होकर इसके इल-द-फ़्रांस शाखा के प्रमुख बने; 2008 के पेरिस नगरपालिका चुनावों में हरित सूची में रहे और उसी दौरान «Jeune République» संघ की स्थापना की।<ref name="ElPais"/><ref name="LExpress"/> 2010-2011 में वे [[हाडोपी कानून]] के विरोध के प्रमुख चेहरों में से थे और इस विषय पर एक पुस्तिका प्रकाशित की।<ref>{{cite news |title=Juan Branco : "Hadopi crée une ligne de fracture très forte qui empêche tout dialogue" |url=https://www.20minutes.fr/culture/730414-20110525-juan-branco-hadopi-cree-ligne-fracture-tres-forte-empeche-tout-dialogue |work=20 Minutes |date=2011-05-25 |language=fr}}</ref><ref>{{cite news |title=Juan Branco: "Ce qui me fait rire, Bernard-Henri Lévy en Libye et partout ailleurs" |url=https://www.liberation.fr/cinema/2011/11/30/juan-branco-ce-qui-me-fait-rire-bernard-henri-levy-en-libye-et-partout-ailleurs_778280/ |work=Libération |date=2011-11-30 |language=fr}}</ref> 2024-2025 में उन्होंने [[फ्रांस के राष्ट्रपति चुनाव, 2027|2027 के राष्ट्रपति चुनाव]] में अपनी उम्मीदवारी घोषित की और नागरिक आंदोलन «Les Ruches» का नेतृत्व कर रहे हैं।<ref>{{cite news |title=Présidentielle 2027 : qui sont les candidats officiellement déclarés ? |url=https://www.france24.com/fr/france/20260524-france-presidentielle-2027-qui-sont-les-candidats-officiellement-declares |work=France 24 |date=2026-05-24 |language=fr}}</ref><ref>{{cite news |title=Présidentielle 2027 : les candidats invités à engager une vision pour la culture |url=https://culture.newstank.fr/article/view/445492/presidentielle-2027-candidats-invites-af-engager-vision-culture.html |work=News Tank Culture |date=2026-06-22 |language=fr}}</ref> == न्यायिक प्रक्रियाएँ और अंतिम निर्णय == === ग्रिवो प्रकरण === रूसी कलाकार [[प्योत्र पावलेंस्की]] ने [[बेंजामिन ग्रिवो]] को पेरिस महापौर पद की दौड़ से हटा देने वाले निजी वीडियो प्रकाशित करने से पहले ब्रांको से वकील के रूप में परामर्श लिया था।<ref>{{cite news |title=Juan Branco « consulté » par Piotr Pavlenski avant la publication des vidéos intimes de Griveaux |url=https://www.nouvelobs.com/elections-municipales-2020/20200214.OBS24861/juan-branco-consulte-par-piotr-pavlenski-avant-la-publication-des-videos-intimes-de-griveaux.html |work=Le Nouvel Obs |date=2020-02-14 |language=fr}}</ref> इस प्रकरण में ब्रांको पर कोई आपराधिक आरोप नहीं लगाया गया और पेरिस बार द्वारा 2021 में दी गई फटकार जून 2023 में पेरिस अपील न्यायालय द्वारा रद्द कर दी गई। पावलेंस्की और एलेक्ज़ांड्रा द तादेओ को अक्टूबर 2023 में छह माह की निलंबित कारावास की सज़ा हुई। === सेनेगल === उस्मान सोन्को की रक्षा टीम के सदस्य के रूप में वे 5 अगस्त 2023 को [[मॉरीतानिया]] में गिरफ़्तार हुए, सेनेगली अधिकारियों को सौंपे गए, [[डकार]] में कैद हुए और कई आरोपों से प्रचार्ज हुए; 7 अगस्त को अस्थायी रिहाई मिली और वे फ्रांस लौट आए।<ref>{{cite news |last1=Ollivier |first1=Théa |last2=Kane |first2=Coumba |title=Juan Branco arrêté à la frontière entre le Sénégal et la Mauritanie |url=https://www.lemonde.fr/afrique/article/2023/08/05/juan-branco-arrete-a-la-frontiere-entre-le-senegal-et-la-mauritanie_6184563_3212.html |work=Le Monde |date=2023-08-05 |language=fr}}</ref><ref>{{cite news |last=Ollivier |first1=Théa |title=La libération de Juan Branco fait polémique au Sénégal |url=https://www.lemonde.fr/afrique/article/2023/08/08/au-senegal-la-liberation-de-juan-branco-fait-polemique_6184795_3212.html |work=Le Monde |date=2023-08-08 |language=fr}}</ref> स्पेन में, राष्ट्रीय न्यायालय (ऑडिएंसिया नासियोनाल) ने 2024 में मॉरीतानिया में उनके कथित अपहरण और सेनेगल में कथित जबरन स्थानांतरण की जाँच शुरू की; ब्रांको ने 15 अप्रैल 2024 को गवाह-पीड़ित के रूप में बयान दिया और शिकायत स्वीकार होने के बाद न्यायाधीश ने नई जाँच और अंतर्राष्ट्रीय सहयोग के अनुरोध का आदेश दिया।<ref>{{cite news |title=La Audiencia Nacional investiga si Senegal secuestró al abogado franco-español Juan Branco |url=https://www.europapress.es/nacional/noticia-audiencia-nacional-investiga-si-senegal-secuestro-abogado-franco-espanol-juan-branco-quien-citara-victima-20240325103504.html |work=Europa Press |date=2024-03-25 |language=es}}</ref><ref>{{cite news |title=La AN cita el 15 de abril como víctima al abogado franco-español Juan Branco |url=https://www.europapress.es/nacional/noticia-an-cita-15-abril-victima-abogado-franco-espanol-juan-branco-presunto-secuestro-senegal-20240412102801.html |work=Europa Press |date=2024-04-12 |language=es}}</ref><ref>{{cite news |title=El juez que investiga si Senegal secuestró al abogado franco-español Juan Branco da un nuevo impulso a la instrucción |url=https://www.europapress.es/nacional/noticia-juez-investiga-si-senegal-secuestro-abogado-franco-espanol-juan-branco-da-nuevo-impulso-instruccion-20240529172623.html |work=Europa Press |date=2024-05-29 |language=es}}</ref> === मानहानि === ''Nouvel Obs'' का 16 फ़रवरी 2020 का लेख, जिसमें दावा किया गया था कि ब्रांको कभी पावलेंस्की के आधिकारिक रक्षक नियुक्त नहीं हुए, अंतिम मानहानि दोषसिद्धि में परिणत हुआ: पेरिस आपराधिक न्यायालय के निर्णय (2 मार्च 2022), अपील न्यायालय के निर्णय (4 सितंबर 2024) और कैसेशन न्यायालय के रद्द कर वापस भेजने के बाद, पेरिस अपील न्यायालय (पोल 2, कक्ष 7, 24 जून 2026 का निर्णय, RG सं. 24/17847) ने बयानों को असत्य और मानहानिकारक ठहराया, nouvelobs.com के प्रकाशन निदेशक को मानहानि का दोषी घोषित किया और प्रकाशक कंपनी को दीवानी उत्तरदायी ठहराया।<ref>{{cite web |title=Cour d'appel de Paris, pôle 2, chambre 7, arrêt du 24 juin 2026 (RG n° 24/17847) |url=https://archive.org/details/branco-obs-griveaux |format=PDF |language=fr}}</ref> === पत्रकारिता नैतिकता === पत्रकारिता नैतिकता एवं मध्यस्थता परिषद (CDJM) ने अपने 5 मई 2020 के निर्णय सं. 20-014 में, अपोलीन द मालेरब द्वारा «Bourdin Direct» कार्यक्रम (BFMTV, 17 फ़रवरी 2020) में ब्रांको के साक्षात्कार के विरुद्ध 23 शिकायतों को आंशिक रूप से उचित ठहराया: परिषद के अनुसार, साक्षात्कार "ऐसे पक्षपात का प्रमाण है जो पत्रकारिता जाँच की स्वतंत्रता से आगे जाता है" और पत्रकार का अंतिम वाक्य बिना सबूत आरोप तथा प्रत्युत्तर के अधिकार के नियमों का उल्लंघन करता है।<ref>{{cite web |title=Avis sur la saisine n° 20-014 |url=https://cdjm.org/avis-20-014/ |website=Conseil de déontologie journalistique et de médiation |date=2020-05-05 |language=fr}}</ref> === अनुशासनात्मक दंड === अपने से संबंधित न्यायिक फ़ाइल के दस्तावेज़ सार्वजनिक करने पर — जिसे उन्होंने अपनी रक्षा की आवश्यकता बताकर उचित ठहराया — पेरिस बार के अनुशासन परिषद ने 2024 में उन्हें तीन वर्ष के लिए निलंबित किया, जिसमें नौ माह अनिवार्य था; पेरिस अपील ��्यायालय ने 16 अक्टूबर 2025 को दंड की पुष्टि की और अनिवार्य भाग लागू हो गया।<ref>{{cite news |title=Pour avoir violé le secret de l'enquête le concernant, l'avocat Juan Branco suspendu pour neuf mois |url=https://www.leparisien.fr/faits-divers/pour-avoir-viole-le-secret-de-lenquete-le-concernant-lavocat-juan-branco-suspendu-pour-neuf-mois-24-10-2025-NJD463X5X5CAHOU3RSYSDTXERY.php |work=Le Parisien |date=2025-10-24 |language=fr}}</ref> == स्रोत == <references/> {{DEFAULTSORT:ब्रांको, जुआन}} [[श्रेणी:1989 में जन्म]] [[श्रेणी:जीवित लोग]] [[श्रेणी:फ्रांसीसी वकील]] [[श्रेणी:फ्रांसीसी लेखक]] jqoa6s3q44033ppcoelp4i7qxs8a00b श्री बद्री नारायण मंदिर, बिलसी 0 1616127 6586992 2026-07-18T05:16:40Z श्री बद्री नारायण मंदिर बिल्सी 936779 नया पृष्ठ: '''परिचय एवं इतिहास''' 6586992 wikitext text/x-wiki '''परिचय एवं इतिहास''' cqljvernw9qyzh8e1ehen1vcz54onsw 6586993 6586992 2026-07-18T05:35:39Z श्री बद्री नारायण मंदिर बिल्सी 936779 /* */ 6586993 wikitext text/x-wiki यह मंदिर 127 वर्ष पुराना है यहां बद्रीनारायण लक्ष्मीनरायण की मूर्तियां विरजमान है जिनकी नियमित रूप से पूजा अर्चना की जाती है यह अटल चौक के निकट मुख्य बाजार मोहल्ला नंबर दो में स्थित है rxlabxsnc8v6vytdplkpeijrshh3si8 विक्रम-१ 0 1616128 6587026 2026-07-18T09:05:45Z Pushkar Singh 415569 नया पृष्ठ: विक्रम-१ (संस्कृत: विक्रम, अर्थ: 'पराक्रमी'; नामकरण: विक्रम साराभाई के नाम पर; विक्रम-I के नाम से भी जाना जाता है) स्काईरूट एयरोस्पेस द्वारा विकसित चार-चरणीय, व्यययोग्य (एक बार उपयोग यो... 6587026 wikitext text/x-wiki विक्रम-१ (संस्कृत: विक्रम, अर्थ: 'पराक्रमी'; नामकरण: विक्रम साराभाई के नाम पर; विक्रम-I के नाम से भी जाना जाता है) स्काईरूट एयरोस्पेस द्वारा विकसित चार-चरणीय, व्यययोग्य (एक बार उपयोग योग्य) लघु-भार कक्षीय प्रक्षेपण यान है। इसके पहले तीन चरण ठोस ईंधन वाले हैं, जबकि चौथा चरण द्रव ईंधन वाला है। इसकी पहली उड़ान, आगमन, १८ जुलाई २०२६ को संपन्न हुई। यह प्रक्षेपण सफल रहा। 79ijsed7l0b0get436guot3gk8ype6w 6587027 6587026 2026-07-18T09:08:41Z Pushkar Singh 415569 /* */ 6587027 wikitext text/x-wiki विक्रम-१ (संस्कृत: विक्रम, अर्थ: 'पराक्रमी'; नामकरण: विक्रम साराभाई के नाम पर; विक्रम-I के नाम से भी जाना जाता है) स्काईरूट एयरोस्पेस द्वारा विकसित चार-चरणीय, व्यययोग्य (एक बार उपयोग योग्य) लघु-भार कक्षीय प्रक्षेपण यान है। इसके पहले तीन चरण ठोस ईंधन वाले हैं, जबकि चौथा चरण द्रव ईंधन वाला है। इसकी पहली उड़ान, आगमन, १८ जुलाई २०२६ को संपन्न हुई। यह प्रक्षेपण सफल रहा। [[File:Vikram-1.svg|विक्रम-१]] a21bz1suilhn9la6pmgep3escfyr8s2 6587028 6587027 2026-07-18T09:16:32Z Pushkar Singh 415569 /* */ 6587028 wikitext text/x-wiki विक्रम-१ (संस्कृत: विक्रम, अर्थ: 'पराक्रमी'; नामकरण: विक्रम साराभाई के नाम पर; विक्रम-I के नाम से भी जाना जाता है) स्काईरूट एयरोस्पेस द्वारा विकसित चार-चरणीय, व्यययोग्य (एक बार उपयोग योग्य) लघु-भार कक्षीय प्रक्षेपण यान है। इसके पहले तीन चरण ठोस ईंधन वाले हैं, जबकि चौथा चरण द्रव ईंधन वाला है। इसकी पहली उड़ान, आगमन, १८ जुलाई २०२६ को संपन्न हुई। यह प्रक्षेपण सफल रहा। [[File:Vikram-1.svg|thumb|विक्रम-१]] nbfccjjp6tefu8y0zxr6s85yoblhw2p 6587029 6587028 2026-07-18T09:22:33Z Pushkar Singh 415569 /* */ 6587029 wikitext text/x-wiki '''विक्रम-१''' या '''विक्रम-1''' ('''संस्कृत साहित्य: अर्थ:'पराक्रमी' ''' [[अंग्रेज़ी]]:'''Brave'''; नामकरण:विक्रम साराभाई के नाम पर; विक्रम-I के नाम से भी जाना जाता है) स्काईरूट एयरोस्पेस द्वारा विकसित चार-चरणीय, व्यययोग्य (एक बार उपयोग योग्य) लघु-भार कक्षीय प्रक्षेपण यान है। इसके पहले तीन चरण ठोस ईंधन वाले हैं, जबकि चौथा चरण द्रव ईंधन वाला है। इसकी पहली उड़ान, आगमन, १८ जुलाई २०२६ को संपन्न हुई। यह प्रक्षेपण सफल रहा। [[चित्र:Vikram-1.svg|अंगूठा|upright=0.6|विक्रम-1]] 41ph8lrwav30p0olot6eezoox7pcd5v एण्डी बर्नहेम 0 1616129 6587031 2026-07-18T10:03:02Z Pushkar Singh 415569 [[एंडी बर्नहेम]] को अनुप्रेषित 6587031 wikitext text/x-wiki #अनुप्रेषित[[एंडी बर्नहेम]] atpt70wfrb03lysk2evkdmvpr49ujv8 एण्डी बर्नहम 0 1616130 6587034 2026-07-18T10:22:22Z Pushkar Singh 415569 [[एंडी बर्नहेम]] को अनुप्रेषित 6587034 wikitext text/x-wiki #redirect[[एंडी बर्नहेम]] eixv8fd76f48s3lhroy1toyl2ic8809 वार्ता:एंडी बर्नहेम 1 1616131 6587035 2026-07-18T10:33:26Z Pushkar Singh 415569 /* क्या शीर्षक परिवर्तन होना चाहिए? */ नया अनुभाग 6587035 wikitext text/x-wiki == क्या शीर्षक परिवर्तन होना चाहिए? == एंडी बर्नहम IPA के समीप सटीक बैठता है। हालांकि हिन्दी या संस्कृत के शब्दों में पंचम अक्षर को प्राथमिकता दी जाती है। इसी तरह शीर्षक चयन में भी एंडी के बजाय एण्डी सही है लेकिन बर्नहम को '''बर्नहेम''' करने के पीछे का कारण है मैंने [[बीबीसी|बीबीसी हिंदी]] पर बर्नहेम देखा था। स्थानांतरण करना चाहिए या नहीं इस पर प्रबंधकगण विचार करें यों तो मैंने दो4redirect बना दिए हैं। यहा हो ये रहा कि सही नाम के बजाय ग़लत नाम पर redirect कर दिया है। [[सदस्य:Pushkar Singh|Pushkar Singh]] ([[सदस्य वार्ता:Pushkar Singh|वार्ता]]) 10:33, 18 जुलाई 2026 (UTC) m9d2bvlt618ocsadhvd04jn0ysxf7np 6587036 6587035 2026-07-18T10:34:54Z Pushkar Singh 415569 /* क्या शीर्षक परिवर्तन होना चाहिए? */ त्रुटि सुधारी 6587036 wikitext text/x-wiki == क्या शीर्षक परिवर्तन होना चाहिए? == एंडी बर्नहम IPA के समीप सटीक बैठता है। हालांकि हिन्दी या संस्कृत के शब्दों में पंचम अक्षर को प्राथमिकता दी जाती है। इसी तरह शीर्षक चयन में भी एंडी के बजाय एण्डी सही है लेकिन बर्नहम को '''बर्नहेम''' करने के पीछे का कारण है मैंने [[बीबीसी|बीबीसी हिंदी]] पर बर्नहेम देखा था। स्थानांतरण करना चाहिए या नहीं इस पर प्रबंधकगण विचार करें यों तो मैंने दो redirect बना दिए हैं। यहा हो ये रहा कि सही नाम के बजाय ग़लत नाम पर redirect कर दिया है। [[सदस्य:Pushkar Singh|Pushkar Singh]] ([[सदस्य वार्ता:Pushkar Singh|वार्ता]]) 10:33, 18 जुलाई 2026 (UTC) oa2331jiwi8q46jeqi1zfpa4kwe5kj3