आजकल दुनिया एक वैश्विक बाज़ार बन गई है, ऐसे में आपके मोबाइल एप्लीकेशन की अलग-अलग भाषाओं और संस्कृतियों में होने की क्षमता सिर्फ़ एक विकल्प नहीं है, बल्कि यह एक ज़रूरत भी है। स्थानीयकरण उपयोगकर्ता के अनुभव को बेहतर बनाता है, इसकी पहुँच को बढ़ाता है और अंतरराष्ट्रीय स्तर पर सॉफ़्टवेयर की सफलता पर इसका बहुत बड़ा प्रभाव पड़ सकता है।
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 अनुकूल हैं।
ये मुख्य पहलू हैं जिन्हें स्ट्रिंग कैटलॉग में उजागर किया जाना चाहिए:
stringsdict
की कुछ कमियों को भी दूर करता है।
त्वरित कार्यान्वयन:
मान लीजिए कि किसी मैसेजिंग एप्लीकेशन में आपको यूजर को यह बताना है कि उनके द्वारा पढ़े नहीं गए संदेशों की संख्या कितनी है। नोटिफिकेशन को गतिशील होना चाहिए, जिसमें प्राप्त संदेशों की संख्या दिखाई जाए और कंटेंट के प्रकार के अनुसार समायोजित किया जाए।
चरण-दर-चरण सेटअप:
स्ट्रिंग कैटलॉग बनाएँ: अपने प्रोजेक्ट में एक नया स्ट्रिंग कैटलॉग जोड़ें। इससे एक .stringcatalog
फ़ाइल बनेगी।
प्रविष्टियाँ जोड़ें: स्थानीयकृत किए जाने वाले प्रत्येक स्ट्रिंग के लिए प्रविष्टियाँ जोड़ने के लिए संपादक का उपयोग करें। फिर प्रत्येक प्रविष्टि के लिए कुंजियाँ, डिफ़ॉल्ट मान और कोई भी बहुवचन नियम या अनुकूली पैरामीटर निर्दिष्ट करें।
सामग्री का स्थानीयकरण करें: प्रत्येक समर्थित भाषा के लिए अनुवाद प्रदान करें, बहुवचन के लिए अलग-अलग रूप निर्दिष्ट करें, डिवाइस प्रकारों के लिए अनुकूलन आदि।
कोड में कार्यान्वयन: अपने स्विफ्ट कोड में स्थानीयकृत पहचानकर्ताओं का उपयोग करके इन स्ट्रिंग्स को संदर्भित करें।
<!-- 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)
जबकि स्ट्रिंग कैटलॉग महत्वपूर्ण सुधार प्रदान करते हैं, वे चुनौतियों के साथ भी आते हैं। सबसे पहले, यह एक सीखने की अवस्था है; किसी नई प्रणाली या कुछ बनाने के तरीके के आदी होने में समय लगता है। डेवलपर्स के सामने आने वाली एक और संभावित चुनौती स्ट्रिंग कैटलॉग को मौजूदा परियोजनाओं में एकीकृत करने के लिए आवश्यक समय और समायोजन से जुड़ी है, जहां पारंपरिक स्थानीयकरण फ़ाइलें पहले से ही बनाई गई थीं और उपयोग में थीं।
स्विफ्ट में स्ट्रिंग कैटलॉग स्थानीयकरण तकनीक का सबसे हालिया सुधार है जो ऐसे उपकरण प्रदान करता है जो न केवल शक्तिशाली हैं बल्कि लचीले और उपयोगकर्ता के अनुकूल भी हैं। विकास जीवनचक्र के एक हिस्से के रूप में प्रौद्योगिकी को जोड़कर, टीमों ने स्थानीयकरण प्रक्रिया में दक्षता और गुणवत्ता में काफी सुधार किया होगा; इसलिए, बेहतर वैश्विक उत्पाद बनाए जाएंगे।
मैं इस लेख को स्विफ्ट लोकलाइज़ेशन टूल में नवीनतम विकास के साथ लगातार अपडेट करता रहूँगा। अगर आपको लगता है कि मैंने कुछ छोड़ दिया है या मैंने जो कहा है उसके बारे में आपके कोई विचार हैं, तो आप उन्हें नीचे टिप्पणी बॉक्स में साझा कर सकते हैं। अधिक रोचक जानकारी और नवीनतम समाचारों के लिए मुझे फ़ॉलो करना सुनिश्चित करें!