paint-brush
स्विफ्ट में स्थानीयकरण का विकास: स्ट्रिंग्स से स्ट्रिंग कैटलॉग तकद्वारा@mniagolov
1,101 रीडिंग
1,101 रीडिंग

स्विफ्ट में स्थानीयकरण का विकास: स्ट्रिंग्स से स्ट्रिंग कैटलॉग तक

द्वारा Maksim Niagolov8m2024/06/12
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

स्विफ्ट अनुप्रयोगों में स्थानीयकरण को आसानी से शामिल करने के लिए शक्तिशाली उपकरण प्रदान करता है। यह मार्गदर्शिका स्विफ्ट में स्थानीयकरण में परिवर्तन को समझाती है, शुरुआती तकनीकों से लेकर नवीनतम टूल तक, ताकि डेवलपर्स को इन क्षमताओं का पूरा लाभ उठाने में मदद मिल सके। स्थानीयकरण उपयोगकर्ता अनुभव को बढ़ाता है, इसकी पहुंच बढ़ाता है, और अंतर्राष्ट्रीय स्तर पर सॉफ़्टवेयर की सफलता पर इसका बहुत प्रभाव पड़ सकता है।
featured image - स्विफ्ट में स्थानीयकरण का विकास: स्ट्रिंग्स से स्ट्रिंग कैटलॉग तक
Maksim Niagolov HackerNoon profile picture

आजकल दुनिया एक वैश्विक बाज़ार बन गई है, ऐसे में आपके मोबाइल एप्लीकेशन की अलग-अलग भाषाओं और संस्कृतियों में होने की क्षमता सिर्फ़ एक विकल्प नहीं है, बल्कि यह एक ज़रूरत भी है। स्थानीयकरण उपयोगकर्ता के अनुभव को बेहतर बनाता है, इसकी पहुँच को बढ़ाता है और अंतरराष्ट्रीय स्तर पर सॉफ़्टवेयर की सफलता पर इसका बहुत बड़ा प्रभाव पड़ सकता है।


iOS डेवलपर्स के लिए, स्विफ्ट शक्तिशाली उपकरण प्रदान करता है जिससे आसानी से अनुप्रयोगों में स्थानीयकरण को शामिल किया जा सके। यह मार्गदर्शिका स्विफ्ट में स्थानीयकरण में प्रारंभिक तकनीकों से लेकर नवीनतम टूल तक के परिवर्तन को समझाती है, ताकि डेवलपर्स को इन क्षमताओं का पूरा लाभ उठाने में मदद मिल सके।


स्थानीयकरण में प्रारंभिक चुनौतियाँ

प्रारंभ में, जब स्विफ्ट को पहली बार पेश किया गया था, तो इसे ऑब्जेक्टिव-सी से स्थानीयकरण बुनियादी ढांचे को विरासत में मिला था, जिसे Localizable.strings फ़ाइल और NSLocalizedString फ़ंक्शन के आसपास बनाया गया था। इस तरह, डेवलपर्स को स्थानीयकृत स्ट्रिंग्स को मैन्युअल रूप से संपादित करने और उन्हें विभिन्न भाषा फ़ाइलों में सिंक्रनाइज़ करने का काम करना पड़ता था, एक ऐसी प्रक्रिया जो त्रुटियों से ग्रस्त और समय लेने वाली दोनों है।

Localizable.strings की मूल बातें

स्थानीयकरण योग्य फ़ाइल एक सरल कुंजी-मूल्य जोड़ी फ़ाइल है जहाँ स्ट्रिंग्स को "कुंजी" = "मूल्य" प्रारूप में संग्रहीत किया जाता है, जहाँ "कुंजी" कोड पहचानकर्ता है और "मूल्य" स्थानीयकृत स्ट्रिंग है जिसे उपयोगकर्ता देखेगा। इस फ़ाइल को डुप्लिकेट किया जाना चाहिए और प्रत्येक समर्थित भाषा में अनुवादित किया जाना चाहिए और उचित संगत '.lproj' निर्देशिकाओं में रखा जाना चाहिए, जैसे कि अंग्रेजी भाषा के लिए 'en.lproj' और जर्मन भाषा के लिए 'de.lproj'

Localizable.strings प्रविष्टि का उदाहरण :

 "hello_world_key" = "Hello, World!";


स्विफ्ट कोड में, इस स्ट्रिंग को इस प्रकार प्राप्त किया जा सकता है:

 let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")


NSLocalizedString फ़ंक्शन Localizable.strings से कुंजियों का उपयोग करके स्थानीयकृत सामग्री तक पहुँच को आसान बनाता है।


यह फ़ंक्शन एक कुंजी लेता है, फ़ॉलबैक मान प्रदान करता है, और अनुवादकों के लिए एक टिप्पणी डालता है। टिप्पणी देना महत्वपूर्ण है क्योंकि यह अनुवादकों को अनुवाद की सटीकता और उपयुक्तता को बेहतर बनाने के लिए सबटेक्स्ट देता है।


उदाहरण: दिन के समय के आधार पर उपयोगकर्ता को बधाई देना:

 func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }


संगत Localizable.strings के साथ, प्रविष्टियाँ इस प्रकार दिखेंगी:

 "good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";


Localizable. स्ट्रिंग्स के साथ कुछ चुनौतियाँ हैं जिनका आपको सामना करना पड़ सकता है:
1) स्केलेबिलिटी मुद्दे.

जैसे-जैसे स्ट्रिंग्स की संख्या बढ़ती जाती है, उन्हें संभालना मुश्किल होता जाता है। समय के साथ कई .strings फ़ाइलों को प्रबंधित करना बोझिल हो जाता है।


2) दोहराव.

प्रत्येक भाषा के लिए एक अलग फ़ाइल की आवश्यकता होती है, जिससे स्ट्रिंग्स को प्रबंधित करने में संभावित असंगतता और दोहराए गए प्रयास हो सकते हैं। एक भाषा का समर्थन करने के साथ, यह कोई समस्या नहीं हो सकती है, लेकिन जब आपको कई भाषाओं को प्रबंधित करने की आवश्यकता होती है, तो यह कभी-कभी बहुत परेशानी भरा हो जाता है।


3) संदर्भ का अभाव.

हालाँकि, टिप्पणियाँ NSLocalizedString में जोड़ी जा सकती हैं - भले ही वे हमेशा अनुवादक को संदर्भ को पूरी तरह से समझने में मदद न करें, लेकिन इससे अनुवाद में अशुद्धियाँ हो सकती हैं। डेवलपर्स अक्सर उन्हें ठीक से भरने में बहुत आलसी होते हैं।

बहुवचन के लिए stringsdict में परिवर्तन

stringsdict फ़ाइलों की शुरूआत ने स्विफ्ट स्थानीयकरण के लिए एक महत्वपूर्ण सुधार लाया, जिसने मुख्य रूप से बहुवचन की समस्याओं को संबोधित किया। मुख्य कारण यह है कि भाषाओं के बहुवचन अलग-अलग तरीके से बनते हैं, और जो अंग्रेजी के लिए प्रभावी हो सकता है वह रूसी या अरबी जैसी अन्य भाषाओं के लिए नहीं हो सकता है।


stringsdict आने से पहले, इन्हें प्रबंधित करना बहुत कठिन था। stringsdict प्रोग्रामर्स को “एक”, “कुछ”, “कई” और “अन्य” जैसी श्रेणियों के लिए नियम निर्धारित करने में सक्षम बनाता है, जो विभिन्न भाषाओं में अनुवाद में शुद्धता के समान स्तर को सुनिश्चित करता है।


stringsdict फ़ाइलों को समझना

Stringsdict फ़ाइल एक XML प्रॉपर्टी सूची है, जिसका उपयोग संख्यात्मक मानों के आधार पर स्थानीयकृत स्ट्रिंग बनाने के लिए किया जाता है। इस कार्यक्षमता का उद्देश्य बहुवचन रूपों को सही ढंग से संसाधित करना है क्योंकि विभिन्न भाषाओं में बहुवचन रूपों को संसाधित करने के अपने अलग-अलग नियम हैं।

stringsdict फ़ाइल की संरचना :

stringsdict फ़ाइल के नमूने में उन सभी स्ट्रिंग्स की प्रविष्टियाँ शामिल हैं जिन्हें बहुवचन में बदलने की आवश्यकता है। प्रत्येक प्रविष्टि में एक कुंजी और एक शब्दकोश शामिल होता है जिसमें उपयोगकर्ता विभिन्न बहुवचन श्रेणियों का प्रतिनिधित्व करने वाली एक या अधिक उपकुंजियाँ परिभाषित करता है।


 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>


बहुवचन के लिए stringsdict उपयोग करने का उदाहरण

मान लीजिए कि हमारे पास एक ऐसा एप्लीकेशन है जो उपयोगकर्ता द्वारा पढ़े गए लेखों की संख्या दिखाता है। स्क्रीन पर, यह पढ़े गए लेखों की संख्या का सही बहुवचन रूप प्रस्तुत करने वाला एक संदेश दिखाएगा।


अंग्रेज़ी और पोलिश के लिए Localizable.stringsdict :

 <!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>


यहां, पोलिश स्थानीयकरण कुछ भाषाओं में बहुवचन रूपों की जटिलता को स्पष्ट रूप से प्रदर्शित करता है, जहां विभिन्न संख्यात्मक संदर्भों को सही ढंग से प्रस्तुत करने के लिए कई बहुवचन श्रेणियों (एक, कुछ, अनेक, अन्य) का उपयोग करने की आवश्यकता होती है।


त्वरित कार्यान्वयन:

NSLocalizedString कॉल करते समय फ़ाइल में परिभाषित कुंजियों को संदर्भित करके stringsdict प्रविष्टियों का उपयोग कोड में किया जा सकता है।

 let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)

यह दृष्टिकोण आपको समर्थित भाषाओं के व्याकरण से मेल खाने के लिए आउटपुट स्ट्रिंग को अनुकूल रूप से संशोधित करने की अनुमति देता है; यह सब केवल एक पंक्ति के कोड में।


stringsdict के लाभ

  • दक्षता: इससे समय और प्रयास की बचत होती है जो अन्यथा स्थानीयकरण फ़ाइलों के प्रबंधन और संशोधन पर खर्च होता।
  • सटीकता: शब्द अनुवाद की सटीकता को बढ़ाने में मदद करता है जहां विकास परिवेश के भीतर अधिक संदर्भ सीधे दिया जाता है।
  • लचीलापन: स्थानीयकृत सामग्री के लिए वास्तविक समय और गतिशील समायोजन का समर्थन करता है।

स्ट्रिंग कैटलॉग के साथ आधुनिक स्थानीयकरण तकनीक

Xcode 15 के साथ पेश की गई नई सुविधाओं में से एक स्ट्रिंग कैटलॉग है जो डेवलपर्स को iOS और macOS एप्लिकेशन को पहले से भी अधिक आसानी से स्थानीयकृत करने में मदद करने वाला है। जबकि Localizable.strings और stringsdict स्ट्रिंग्स को संग्रहीत और व्यवस्थित करने के लिए सहायक संसाधन रहे हैं, स्ट्रिंग कैटलॉग स्थानीयकृत स्ट्रिंग्स को प्रबंधित करने के लिए कहीं अधिक सुसंगत और अधिक UI अनुकूल हैं।


ये मुख्य पहलू हैं जिन्हें स्ट्रिंग कैटलॉग में उजागर किया जाना चाहिए:

  • दृश्य संपादक: पारंपरिक सरल सादे पाठ फ़ाइलों के विपरीत, स्ट्रिंग कैटलॉग को Xcode में दृश्य संपादक की सहायता से संपादित किया जाता है, जिससे स्थानीयकृत स्ट्रिंग को जोड़ना, संशोधित करना या हटाना आसान हो जाता है।


  • इन-लाइन दस्तावेज़ीकरण: डेवलपर्स सीधे स्ट्रिंग कैटलॉग के भीतर विवरण और संदर्भ प्रदान कर सकते हैं, जिससे अनुवाद की स्पष्टता और शुद्धता में काफी सुधार होता है।


  • गतिशील स्थानीयकरण: स्ट्रिंग्स कैटलॉग गतिशील स्थानीयकरण का समर्थन करता है, इसलिए डेवलपर्स को एप्लिकेशन से बाहर निकले बिना स्थानीयकृत स्ट्रिंग्स को बदलने की अनुमति होती है, जो परीक्षण और पुनरावृत्त विकास के लिए आदर्श है।


  • उन्नत बहुवचन और अनुकूलन: यह बहुवचन रूपों पर बेहतर नियंत्रण, तथा UI तत्वों और डिवाइस प्रकारों के आधार पर विविधताओं के साथ पाठ प्रदान करके stringsdict की कुछ कमियों को भी दूर करता है।


त्वरित कार्यान्वयन:

मान लीजिए कि किसी मैसेजिंग एप्लीकेशन में आपको यूजर को यह बताना है कि उनके द्वारा पढ़े नहीं गए संदेशों की संख्या कितनी है। नोटिफिकेशन को गतिशील होना चाहिए, जिसमें प्राप्त संदेशों की संख्या दिखाई जाए और कंटेंट के प्रकार के अनुसार समायोजित किया जाए।


चरण-दर-चरण सेटअप:

  1. स्ट्रिंग कैटलॉग बनाएँ: अपने प्रोजेक्ट में एक नया स्ट्रिंग कैटलॉग जोड़ें। इससे एक .stringcatalog फ़ाइल बनेगी।


  2. प्रविष्टियाँ जोड़ें: स्थानीयकृत किए जाने वाले प्रत्येक स्ट्रिंग के लिए प्रविष्टियाँ जोड़ने के लिए संपादक का उपयोग करें। फिर प्रत्येक प्रविष्टि के लिए कुंजियाँ, डिफ़ॉल्ट मान और कोई भी बहुवचन नियम या अनुकूली पैरामीटर निर्दिष्ट करें।


  3. सामग्री का स्थानीयकरण करें: प्रत्येक समर्थित भाषा के लिए अनुवाद प्रदान करें, बहुवचन के लिए अलग-अलग रूप निर्दिष्ट करें, डिवाइस प्रकारों के लिए अनुकूलन आदि।


  4. कोड में कार्यान्वयन: अपने स्विफ्ट कोड में स्थानीयकृत पहचानकर्ताओं का उपयोग करके इन स्ट्रिंग्स को संदर्भित करें।


 <!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>


आप इस स्ट्रिंग तक इस प्रकार पहुंच सकते हैं:

 let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)



स्ट्रिंग कैटलॉग के लाभ

  • दक्षता: स्थानीयकरण फ़ाइलों के प्रबंधन के लिए आवश्यक समय और प्रयास की बचत होती है।


  • सटीकता: विकास परिवेश में अधिक अतिरिक्त प्रत्यक्ष संदर्भ प्रदान करके सटीकता में सुधार करता है।


  • लचीलापन: स्थानीयकृत सामग्री के लिए वास्तविक समय और यहां तक कि गतिशील अद्यतन का समर्थन करता है, जो तीव्र विकास चक्र में विशेष रूप से उपयोगी है।

चुनौतियां

जबकि स्ट्रिंग कैटलॉग महत्वपूर्ण सुधार प्रदान करते हैं, वे चुनौतियों के साथ भी आते हैं। सबसे पहले, यह एक सीखने की अवस्था है; किसी नई प्रणाली या कुछ बनाने के तरीके के आदी होने में समय लगता है। डेवलपर्स के सामने आने वाली एक और संभावित चुनौती स्ट्रिंग कैटलॉग को मौजूदा परियोजनाओं में एकीकृत करने के लिए आवश्यक समय और समायोजन से जुड़ी है, जहां पारंपरिक स्थानीयकरण फ़ाइलें पहले से ही बनाई गई थीं और उपयोग में थीं।

निष्कर्ष

स्विफ्ट में स्ट्रिंग कैटलॉग स्थानीयकरण तकनीक का सबसे हालिया सुधार है जो ऐसे उपकरण प्रदान करता है जो न केवल शक्तिशाली हैं बल्कि लचीले और उपयोगकर्ता के अनुकूल भी हैं। विकास जीवनचक्र के एक हिस्से के रूप में प्रौद्योगिकी को जोड़कर, टीमों ने स्थानीयकरण प्रक्रिया में दक्षता और गुणवत्ता में काफी सुधार किया होगा; इसलिए, बेहतर वैश्विक उत्पाद बनाए जाएंगे।


मैं इस लेख को स्विफ्ट लोकलाइज़ेशन टूल में नवीनतम विकास के साथ लगातार अपडेट करता रहूँगा। अगर आपको लगता है कि मैंने कुछ छोड़ दिया है या मैंने जो कहा है उसके बारे में आपके कोई विचार हैं, तो आप उन्हें नीचे टिप्पणी बॉक्स में साझा कर सकते हैं। अधिक रोचक जानकारी और नवीनतम समाचारों के लिए मुझे फ़ॉलो करना सुनिश्चित करें!