Java में अंतर्राष्ट्रीयकरण (i18n): पूर्ण गाइड
अंतर्राष्ट्रीयकरण (संक्षेप में i18n — अंग्रेज़ी शब्द internationalization से, जहाँ पहले अक्षर 'i' और अंतिम 'n' के बीच 18 अक्षर हैं) सॉफ़्टवेयर को इस तरह डिज़ाइन करने की प्रक्रिया है कि उसे बिना सोर्स कोड बदले विभिन्न भाषाओं और क्षेत्रों के लिए अनुकूलित किया जा सके। Java अंतर्राष्ट्रीयकरण के लिए शक्तिशाली और अंतर्निहित टूल्स प्रदान करता है, जो डेवलपर्स को आसानी से बहुभाषी एप्लिकेशन बनाने में मदद करते हैं।
इस लेख में, हम Java में i18n के मुख्य घटकों: Locale, ResourceBundle, प्रॉपर्टीज़ फ़ाइलें और MessageFormat को विस्तार से समझेंगे। आप सीखेंगे कि स्थानीयकृत संसाधनों को सही ढंग से कैसे संरचित करें और अनुवाद न मिलने पर होने वाली त्रुटियों को कैसे संभालें।
1. Java में i18n के मुख्य घटक
Java में अंतर्राष्ट्रीयकरण तीन प्रमुख तत्वों पर आधारित है:
- Locale — एक ऑब्जेक्ट जो किसी विशिष्ट भौगोलिक, राजनीतिक या सांस्कृतिक क्षेत्र को दर्शाता है। इसमें भाषा, देश (वैकल्पिक) और वेरिएंट (वैकल्पिक) के बारे में जानकारी होती है।
- ResourceBundle — एक क्लास जो प्रॉपर्टीज़ फ़ाइलों (
.properties) या अन्य स्रोतों से स्थानीयकृत संसाधनों (स्ट्रिंग्स, फ़ॉर्मेट) को लोड करता है। - प्रॉपर्टीज़ फ़ाइलें —
.propertiesएक्सटेंशन वाली टेक्स्ट फ़ाइलें, जिनमेंकुंजी=मानजोड़े स्टोर होते हैं। फ़ाइल का नाम इस नियम से बनता है:आधारनाम_भाषा_देश.properties।
हिंदी और अंग्रेज़ी भाषाओं के लिए फ़ाइल संरचना का उदाहरण:
Messages.properties // डिफ़ॉल्ट फ़ाइल
Messages_en.properties // अंग्रेज़ी (सामान्य)
Messages_en_US.properties // अंग्रेज़ी (अमेरिका)
Messages_hi_IN.properties // हिंदी (भारत)
2. प्रॉपर्टीज़ फ़ाइलें बनाना
पहले बेस फ़ाइल Messages.properties बनाएँ (डिफ़ॉल्ट मान अंग्रेज़ी में):
greeting=Hello
farewell=Goodbye
app.name=My Application
अब हिंदी स्थानीयकरण Messages_hi_IN.properties बनाएँ:
greeting=नमस्ते
farewell=अलविदा
app.name=मेरा एप्लिकेशन
अंग्रेज़ी (अमेरिका) के लिए — Messages_en_US.properties:
greeting=Hello
farewell=Goodbye
app.name=My Application
3. Locale और ResourceBundle का उपयोग
स्थानीयकृत स्ट्रिंग्स लोड करने के लिए निम्नलिखित कोड का उपयोग करें:
import java.util.Locale;
import java.util.ResourceBundle;
public class I18nExample {
public static void main(String[] args) {
// लोकेल सेट करें (उदाहरण: हिंदी, भारत)
Locale hiLocale = new Locale("hi", "IN");
ResourceBundle bundle = ResourceBundle.getBundle("Messages", hiLocale);
// स्थानीयकृत स्ट्रिंग्स प्राप्त करें
String greeting = bundle.getString("greeting");
String farewell = bundle.getString("farewell");
String appName = bundle.getString("app.name");
System.out.println(greeting + " " + farewell); // नमस्ते अलविदा
System.out.println(appName); // मेरा एप्लिकेशन
}
}
यदि लोकेल नहीं मिलता है, तो Java स्वचालित रूप से खोज श्रृंखला का उपयोग करता है:
- पहले सटीक मिलान वाली फ़ाइल खोजता है (
Messages_hi_IN.properties)। - फिर बिना देश वाली फ़ाइल (
Messages_hi.properties)। - उसके बाद बेस फ़ाइल (
Messages.properties)। - यदि कुछ नहीं मिलता —
MissingResourceExceptionअपवाद फेंकता है।
4. MessageFormat के साथ संदेश फ़ॉर्मेटिंग
अक्सर स्ट्रिंग्स में परिवर्तनीय भाग होते हैं। इसके लिए MessageFormat का उपयोग किया जाता है। डायनामिक डेटा के साथ उदाहरण:
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class MessageFormatExample {
public static void main(String[] args) {
Locale hiLocale = new Locale("hi", "IN");
ResourceBundle bundle = ResourceBundle.getBundle("Messages", hiLocale);
// मान लें कि Messages_hi_IN.properties में यह कुंजी है:
// welcome.message=स्वागत है {0}! आपका नाम {1} है।
String pattern = bundle.getString("welcome.message");
String formatted = MessageFormat.format(pattern, "राहुल", "कोडर");
System.out.println(formatted); // स्वागत है राहुल! आपका नाम कोडर है।
}
}
MessageFormat संख्याओं, तिथियों और मुद्रा को भी स्वचालित रूप से स्थानीयकृत कर सकता है। उदाहरण:
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatExample {
public static void main(String[] args) {
Locale hiLocale = new Locale("hi", "IN");
String pattern = "आज की तारीख: {0,date,long} और समय: {1,time,short}";
String formatted = MessageFormat.format(pattern, new Date(), new Date());
System.out.println(formatted);
}
}
5. सर्वोत्तम अभ्यास
- हमेशा डिफ़ॉल्ट प्रॉपर्टीज़ फ़ाइल रखें (बिना भाषा/देश के)।
- कुंजियों के लिए सार्थक नाम चुनें (जैसे
button.submit,error.notfound)। - स्ट्रिंग्स में HTML टैग्स से बचें; उन्हें कोड में जोड़ें।
- बड़े प्रोजेक्ट्स के लिए प्रॉपर्टीज़ फ़ाइलों को मॉड्यूल के अनुसार विभाजित करें।
- अनुवाद की कमी को संभालने के लिए
MissingResourceExceptionको पकड़ें।
इन टूल्स और तकनीकों का उपयोग करके, आप Java में मजबूत और बहुभाषी एप्लिकेशन बना सकते हैं जो दुनिया भर के उपयोगकर्ताओं की ज़रूरतों को पूरा करते हैं।