Swift में अंतर्राष्ट्रीयकरण (i18n): iOS और macOS के लिए पूरी गाइड
अंतर्राष्ट्रीयकरण (i18n) एक ऐप को इस तरह डिज़ाइन करने की प्रक्रिया है कि उसे बिना कोड बदले विभिन्न भाषाओं और क्षेत्रों के लिए अनुकूलित किया जा सके। Apple इकोसिस्टम (iOS, macOS, watchOS, tvOS) में, Swift और Xcode में लोकलाइज़ेशन के टूल्स पहले से मौजूद हैं। इस लेख में हम विस्तार से जानेंगे कि NSLocalizedString और आधुनिक String Catalog का उपयोग करके मल्टीलैंग्वेज ऐप कैसे बनाएं।
बुनियादी बातें: NSLocalizedString
Swift में अंतर्राष्ट्रीयकरण का मूल तंत्र NSLocalizedString फ़ंक्शन है। यह .strings या .xcstrings (String Catalog) फ़ाइलों में स्ट्रिंग का अनुवाद ढूंढता है।
let greeting = NSLocalizedString("hello_world", comment: "होम स्क्रीन पर अभिवादन")
print(greeting) // डिवाइस की भाषा के अनुसार अनुवाद दिखाएगा
comment पैरामीटर अनुवादक के लिए संकेत के रूप में काम करता है। "hello_world" कुंजी पूरे प्रोजेक्ट में अद्वितीय होनी चाहिए।
लोकलाइज़ेशन फ़ाइलें बनाना
Xcode में, आप Project Info > Localizations के माध्यम से समर्थित भाषाएँ जोड़ सकते हैं। इसके बाद प्रत्येक .strings फ़ाइल या Storyboard के लिए लोकलाइज़ेशन सबफ़ाइलें बन जाएँगी।
Localizable.strings (अंग्रेज़ी) का उदाहरण:
"hello_world" = "Hello, World!";
"welcome_message" = "Welcome to our app %@";
हिंदी संस्करण (Localizable.strings (Hindi)):
"hello_world" = "नमस्ते, दुनिया!";
"welcome_message" = "हमारे ऐप में आपका स्वागत है %@";
पैरामीटर के साथ स्ट्रिंग फ़ॉर्मेटिंग
डायनामिक डेटा वाली स्ट्रिंग के लिए, फ़ॉर्मेट स्पेसिफ़ायर का उपयोग करें। Swift में यह दो तरीकों से किया जा सकता है:
तरीका 1: String(format:)
let userName = "राहुल"
let points = 150
let message = String(format: NSLocalizedString("user_score", comment: "उपयोगकर्ता के अंक"), userName, points)
print(message) // "राहुल ने 150 अंक प्राप्त किए"
लोकलाइज़ेशन फ़ाइल में:
"user_score" = "%@ ने %d अंक प्राप्त किए";
तरीका 2: Swift String Interpolation (iOS 15+)
let message = "\(userName) ने \(points) अंक प्राप्त किए"
लेकिन यह तरीका लोकलाइज़ेशन के लिए उपयुक्त नहीं है, क्योंकि विभिन्न भाषाओं में शब्द क्रम अलग हो सकता है। केवल String(format:) या इन्फ़्लेक्शन के साथ AttributedString का उपयोग करें।
बहुवचन (Pluralization)
हिंदी में भी वचन के नियम हैं: "1 फ़ाइल", "2 फ़ाइलें", "5 फ़ाइलें"। इसके लिए Apple stringsdict (XML) या String Catalog प्रदान करता है जिसमें बहुवचन नियम होते हैं।
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>files_count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d फ़ाइल</string>
<key>other</key>
<string>%d फ़ाइलें</string>
</dict>
</dict>
</dict>
</plist>
उपयोग