Kotlin अनुप्रयोगों का अंतर्राष्ट्रीयकरण: भाषाओं में कैसे न उलझें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

आपके अनुप्रयोग को आज ही अंतर्राष्ट्रीयकरण की आवश्यकता क्यों है

\n\n

कल्पना करें: आपने एक शानदार Kotlin अनुप्रयोग लिखा है — सुविधाजनक, तेज़, सुंदर UI के साथ। लेकिन इसमें सभी लेबल रूसी में हैं। बर्लिन या टोक्यो का कोई उपयोगकर्ता आपका उत्पाद खोलता है और... 10 सेकंड में बंद कर देता है। क्यों? क्योंकि वह एक शब्द भी नहीं समझता। अंतर्राष्ट्रीयकरण (i18n) केवल "बटन का अनुवाद" नहीं है, बल्कि आपके कोड और दुनिया भर के लाखों उपयोगकर्ताओं के बीच एक पुल है।

\n\n

इस लेख में, हम देखेंगे कि किसी भी पैमाने के प्रोजेक्ट्स में Kotlin अंतर्राष्ट्रीयकरण को सही तरीके से कैसे लागू किया जाए: Android अनुप्रयोगों से लेकर Ktor पर सर्वर सेवाओं तक। आप सीखेंगे कि सामान्य गलतियों से कैसे बचें, सामान्य तर्क के लिए Kotlin Multiplatform का उपयोग कैसे करें, और क्यों "जादुई स्ट्रिंग्स" बुराई हैं।

\n\n

Kotlin में i18n की मूल बातें: सरल से जटिल तक

\n\n

संसाधन फ़ाइलें: स्थानीयकरण की नींव

\n\n

Kotlin अनुप्रयोग स्थानीयकरण को व्यवस्थित करने का सबसे विश्वसनीय तरीका सभी स्ट्रिंग लिटरल को अलग-अलग संसाधन फ़ाइलों में रखना है। Android Studio में ये मानक strings.xml हैं, लेकिन शुद्ध Kotlin (backend, desktop) के लिए हम .properties या JSON का उपयोग कर सकते हैं।

\n\n

Android के लिए उदाहरण:

\n\n
// res/values/strings.xml (रूसी — डिफ़ॉल्ट)\n<resources>\n    <string name="app_name">मेरा अनुप्रयोग</string>\n    <string name="welcome_message">स्वागत है, %s!</string>\n    <string name="points">आपके %d अंक हैं</string>\n</resources>\n\n// res/values-en/strings.xml (अंग्रेज़ी)\n<resources>\n    <string name="app_name">My App</string>\n    <string name="welcome_message">Welcome, %s!</string>\n    <string name="points">You have %d points</string>\n</resources>
\n\n

कोड में context.getString() के माध्यम से एक्सेस करें:

\n\n
val userName = "एलेक्सी"\nval message = context.getString(R.string.welcome_message, userName)\n// परिणाम: "स्वागत है, एलेक्सी!" (या अंग्रेज़ी में "Welcome, Alexey!")
\n\n

ध्यान दें: हम स्ट्रिंग्स के लिए %s और संख्याओं के लिए %d का उपयोग करते हैं। स्ट्रिंग्स को कभी भी मैन्युअल रूप से न जोड़ें — जापानी या अरबी में शब्द क्रम भिन्न हो सकता है।

\n\n

बहुवचन रूपों (Plural Forms) के साथ कार्य करना

\n\n

हिंदी भाषा में भी जटिल विभक्ति नियम हैं: 1 अंक, 2 अंक, 5 अंक। अंग्रेज़ी में यह सरल है: 1 point, 2 points। Kotlin अंतर्राष्ट्रीयकरण को इसे ध्यान में रखना चाहिए।

\n\n

Android में इसके लिए <plurals> है:

\n\n
// strings.xml\n<plurals name="points_count">\n    <item quantity="one">%d अंक</item>\n    <item quantity="few">%d अंक</item>\n    <item quantity="many">%d अंक</item>\n    <item quantity="other">%d अंक</item>\n</plurals>\n\n// कोड में\nval points = 3\nval text = resources.getQuantityString(R.plurals.points_count, points, points)\n// "3 अंक"
\n\n

सर्वर-साइड Kotlin के लिए, आप icu4j लाइब्रेरी का उपयोग कर सकते हैं या अपना स्वयं का सरल resolver लिख सकते हैं। मुख्य नियम: संख्याओं वाले टेक्स्ट को कभी हार्डकोड न करें।

\n\n

Kotlin Multiplatform (KMP) में अंतर्राष्ट्रीयकरण

\n\n

यदि आप Kotlin Multiplatform पर क्रॉस-प्लेटफ़ॉर्म अनुप्रयोग लिख रहे हैं, तो कार्य जटिल हो जाता है। सामान्य कोड के पास Android संसाधनों तक पहुँच नहीं है। समाधान — एक सामान्य इंटरफ़ेस और प्लेटफ़ॉर्म-विशिष्ट कार्यान्वयन का उपयोग करना है।

\n\n

KMP के लिए आर्किटेक्चर

\n\n

common मॉड्यूल में एक expect-क्लास बनाएँ:

\n\n
// commonMain\nexpect class StringProvider {\n    fun getString(key: String, vararg args: Any): String\n}\n\n// सामान्य कोड में उपयोग\nclass Greeting(private val strings: StringProvider) {\n    fun greet(name: String): String {\n        return strings.getString("welcome", name)\n    }\n}
\n\n

Android के लिए कार्यान्वयन:

\n\n

ब्लॉग

पुस्तक अनुशंसाएँ