टेक्स्ट और रोजमर्रा के टूल · टेक्स्ट टूलकिट
स्लग जेनरेटर एक्सेंट को कैसे मोड़ते हैं: NFD अपघटन की व्याख्या की गई
· यह काम किस प्रकार करता है
URL-स्लग पाठ-रूपांतरण जावास्क्रिप्ट
बताता है कि कैसे यूनिकोड कैनोनिकल अपघटन एक आधार अक्षर को उसके उच्चारण से अलग करता है, इसलिए 'कैफे क्रीम' कैफे-CR-मी के बजाय कैफे-क्रीम बन जाता है, और जहां अकेले अपघटन कम हो जाता है।
कैफ़-CR-मी - सामान्य स्लग बग जो नामों में गड़बड़ी करता है, और ऐसा क्यों होता है
एक कमजोर स्लग रूटीन `Café Crème` को `caf-cr-me` में बदल सकता है जब यह एक संकीर्ण ASCII सीमा के बाहर के प्रत्येक वर्ण को हटा देता है। दृश्यमान उच्चारण गायब हो जाते हैं, लेकिन अंतर्निहित आधार अक्षर उनके साथ गायब हो जाते हैं, जिससे एक URL रह जाता है जो अब लेख शीर्षक से मिलता-जुलता नहीं है। यह क्षति विशेष रूप से नामों, स्थानों और बार-बार दोहराई जाने वाली एडिटरीय कैटेगरी में स्पष्ट है।
ToolAcre `slugify` में एक अलग रास्ता अपनाता है। यह पहले इनपुट को सामान्य करता है, फिर परिणामी अक्षरों को बनाए रखते हुए संयोजन चिह्नों की एक विशिष्ट श्रृंखला को हटा देता है। इसके बाद ही यह टेक्स्ट और आकार विभाजकों को छोटा करता है। क्रम ही वह कारण है जिसके कारण `Café Crème` गायब स्वरों वाले एक टुकड़े के बजाय `cafe-creme` बन जाता है।
एक वर्ण, दो निरूपण - कैसे é एक एकल कोड बिंदु हो सकता है या एक e जिसके बाद तीव्र उच्चारण का संयोजन हो सकता है
एक जैसे दिखने वाले टेक्स्ट में अलग-अलग आंतरिक क्रम हो सकते हैं। एक `é` एक पूर्वनिर्मित वर्ण के रूप में, या एक सामान्य `e` के रूप में आ सकता है जिसके बाद संयोजन तीव्र चिह्न आता है। एक सामग्री एडिटर आमतौर पर यह नहीं देख सकता है कि कौन सा प्रतिनिधित्व CMS, दस्तावेज़ या क्लिपबोर्ड से आया है, फिर भी एक वर्ण-दर-वर्ण फ़िल्टर दो इनपुट को अलग-अलग व्यवहार कर सकता है।
वह छिपा हुआ अंतर तब मायने रखता है जब कोई प्रतिस्थापन नियम एक रूप को पहचानता है लेकिन दूसरे को नहीं। ToolAcre प्रत्येक पूर्वनिर्मित वर्तनी के लिए एक अलग प्रतिस्थापन लिखने से बचता है। सामान्यीकरण स्लग पाइपलाइन को अधिक सुसंगत मध्यवर्ती रूप देता है, इसलिए समर्थित उच्चारण चिह्नों को एक बाद के चरण में हटाया जा सकता है जबकि आधार अक्षर URL के लिए उपलब्ध रहते हैं।
सामान्यीकरण फॉर्म डी - कैसे विहित अपघटन प्रत्येक उच्चारण अक्षर को आधार अक्षर और संयोजन चिह्नों में फिर से लिखता है
कार्यान्वयन किसी भी लोअरकेसिंग या विभाजक कार्य से पहले `.normalize("NFD")` को कॉल करता है। उन वर्णों के लिए जिनका विहित अपघटन JavaScript रनटाइम द्वारा नियंत्रित होता है, यह एक आधार वर्ण उत्पन्न करता है जिसके बाद एक या अधिक संयोजन चिह्न होते हैं। फ़ंक्शन फ़्रेंच या स्पैनिश वर्तनी की अपनी सूची नहीं रखता है और शब्दार्थ की दृष्टि से शब्दों का निरीक्षण नहीं करता है।
रूपरेखा कहती है कि NFD प्रत्येक उच्चारण वाले अक्षर को फिर से लिखता है, लेकिन स्रोत एक संक्षिप्त कथन का समर्थन करता है। अपघटन चरित्र पर निर्भर करता है, और निम्नलिखित निष्कासन अभिव्यक्ति `U+0300` से `U+036F` तक कोड बिंदुओं को कवर करती है। इसलिए लेख को प्रत्येक स्क्रिप्ट या चिह्न के लिए सार्वभौमिक उच्चारण हटाने का वादा करने के बजाय कोड द्वारा प्रदर्शित व्यवहार का वर्णन करना चाहिए।
NFD समर्थित वर्णों को विघटित करता है; कार्यान्वयन यह वादा नहीं करता कि प्रत्येक उच्चारण अक्षर अलग हो जाता है
सामान्यीकरण के बाद, `slugify` `/[̀-ͯ]/g` लागू करता है और प्रत्येक मिलान चिह्न को एक खाली स्ट्रिंग से बदल देता है। `é` के विघटित रूप में, `e` उस सीमा से मेल नहीं खाता है, जबकि तीव्र चिह्न मेल नहीं खाता है। केवल चिह्न हटाने से पठनीय आधार अक्षर बच जाता है जिसे पहले ASCII-only दृष्टिकोण ने हटा दिया होता।
यह एक्सेंट फोल्डिंग है, सामान्य टेक्स्ट क्लीनअप पास नहीं। नियमित अभिव्यक्ति को जानबूझकर विभाजकों के लिए नियम से पहले रखा जाता है, जिससे आधार अक्षर को बाद में एक अक्षर के रूप में भाग लेने की अनुमति मिलती है। यदि असमर्थित रन पहले ही ध्वस्त हो जाने के बाद निशान हटाना हुआ, तो एक विघटित निशान विभाजक प्लेसमेंट को प्रभावित कर सकता है और कम विश्वसनीय स्लग उत्पन्न कर सकता है।
स्लग पाइपलाइन के बाकी हिस्से - लोअरकेसिंग, गैर-अल्फ़ान्यूमेरिक रन को एकल हाइफ़न तक ढहाना, अग्रणी और अनुगामी विभाजकों को ट्रिम करना, इमोजी को छोड़ना
शेष पाइपलाइन सामान्यीकृत पाठ को कम करती है और प्रत्येक रन को कॉन्फ़िगर विभाजक के साथ बदल देती है जो एक यूनिकोड अक्षर या संख्या नहीं है, जो एक हाइफ़न के लिए डिफ़ॉल्ट है। एक दूसरी अभिव्यक्ति दोनों सिरों से बार-बार विभाजकों को ट्रिम करती है। इमोजी और विराम चिह्न इसलिए सामग्री के रूप में गायब हो जाते हैं, जबकि आसन्न असमर्थित वर्ण कई हाइफ़न के बजाय एक सीमा बन जाते हैं।
रूपरेखा एक गैर-अल्फ़ान्यूमेरिक पतन का वर्णन करती है, लेकिन वास्तविक पैटर्न यूनिकोड संपत्ति एस्केप का उपयोग करता है, न कि केवल ASCII-वर्णमाला का। गैर-लैटिन लिपियों के अक्षर लोअरकेस करने के बाद स्लग में रह सकते हैं। कॉन्फ़िगरेशन पुष्टि करता है कि कोई लिप्यंतरण चरण नहीं है: प्रतीक हटा दिए जाते हैं, लेकिन बनाए गए अक्षर स्वचालित रूप से अनुमानित लैटिन वर्तनी के रूप में दोबारा नहीं लिखे जाते हैं।
इस स्लग पाइपलाइन का शेष भाग किसी भी स्क्रिप्ट से अक्षरों और अंकों को रखता है जबकि अन्य रन को चुने हुए विभाजक से प्रतिस्थापित करता है
कार्यान्वयन के माध्यम से `Café Crème & Co. — Été 2024!` का पालन करें। NFD समर्थित उच्चारण वर्णों को आधार अक्षरों और चिह्नों में अलग करता है। चिह्न-हटाने वाला अभिव्यक्ति `Cafe Creme & Co. — Ete 2024!` छोड़ता है, और विराम चिह्न संसाधित होने से पहले लोअरकेस `cafe creme & co. — ete 2024!` उत्पन्न करता है।
गैर-अक्षर और गैर-संख्या रन तब हाइफ़न बन जाते हैं, जिससे अग्रणी और अनुगामी विभाजकों को ट्रिम करने के बाद सार्थक अनुक्रम `cafe-creme-co-ete-2024` प्राप्त होता है। एम्परसेंड, पूर्ण विराम, डैश और विस्मयादिबोधक चिह्न को बोले गए नाम या कस्टम प्रतिस्थापन प्राप्त नहीं होते हैं। वे इस रूपांतरण में केवल अक्षर-और-संख्या के बीच की सीमाओं के रूप में कार्य करते हैं।
अपघटन क्या नहीं कर सकता - ø, ł, ß और æ जैसे अक्षरों में स्ट्रिप करने के लिए कोई उच्चारण नहीं है और लिप्यंतरण तालिका की आवश्यकता है
अपघटन लिप्यंतरण नहीं है. जैसे पात्र `ø`, `ł`, `ß` और `æ` इस पाइपलाइन के बाद भी यूनिकोड अक्षर हैं, इसलिए संपत्ति-आधारित फ़िल्टर किसी तालिका से परामर्श करने के बजाय उन्हें रखता है `o`, `l`, `ss` या `ae`. यह दावा करना कि उपयोगकर्ताओं को लिप्यंतरण तालिका की आवश्यकता है, अन्यत्र उपयोगी डिज़ाइन सलाह हो सकती है, लेकिन इस टूल में ऐसी कोई तालिका मौजूद नहीं है।
यह अंतर यह भी बताता है कि परिणाम केवल ASCII- के बिना एक वैध प्रोजेक्ट स्लग क्यों हो सकता है। जिन एडिटर की प्रकाशन प्रणाली को ASCII की आवश्यकता होती है, उन्हें आउटपुट का उपयोग करने से पहले उस अलग सिस्टम बाधा की जांच करनी चाहिए। ToolAcre कार्यान्वित अपघटन-और-चिह्न सीमा के लिए एक्सेंट फोल्डिंग का वादा करता है; यह प्रत्येक शीर्षक के लिए भाषा-जागरूक वर्तनी, प्रतिवर्ती रूपांतरण या लैटिन आउटपुट का वादा नहीं करता है।
हटाने योग्य चिह्नों के बिना अक्षर अक्षर ही बने रहते हैं; इस टूल में कोई लिप्यंतरण तालिका नहीं है
विश्वसनीय टेकअवे प्रक्रियात्मक है: पहले सामान्य करें, समर्थित संयोजन चिह्न हटाएं, लोअरकेस, असमर्थित रन को संक्षिप्त करें और विभाजकों को ट्रिम करें। प्रत्येक चरण में एक दृश्यमान जिम्मेदारी होती है, और उनका क्रम विराम चिह्न को हटाने से पहले आधार अक्षरों को संरक्षित करता है। यह उन भाषा नियमों का आविष्कार किए बिना सामान्य `caf-cr-me` विफलता को रोकने के लिए पर्याप्त है जो स्रोत में शामिल नहीं हैं।
काम किए गए शीर्षक को टेक्स्ट केस कन्वर्टर में चिपकाएँ और उसी टेक्स्ट बॉक्स में अंतिम परिणाम का निरीक्षण करने के लिए स्लग विकल्प का चयन करें। यदि किसी शीर्षक में प्रदर्शित उच्चारण मामलों के बाहर के अक्षर शामिल हैं, तो गंतव्य प्लेटफ़ॉर्म के विरुद्ध आउटपुट की समीक्षा करें। कन्वर्टर एक पूर्वानुमानित ब्राउज़र-साइड परिवर्तन प्रदान करता है, जबकि एडिटर मार्ग सम्मेलनों के लिए जिम्मेदार रहता है।