JSP में JSTL fmt:bundle टैग का उपयोग करके अंतर्राष्ट्रीयकरण (i18n)
JSTL (JSP स्टैंडर्ड टैग लाइब्रेरी) का <fmt:bundle> टैग एक रिसोर्स बंडल को निर्दिष्ट स्कोप के लिए उपलब्ध कराता है, जिससे नेस्टेड <fmt:message> टैग्स को बंडल नाम दोहराए बिना कुंजी द्वारा स्थानीयकृत संदेश प्राप्त करने की अनुमति मिलती है।
वाक्यविन्यास
<fmt:bundle basename="bundleName" [prefix="prefix"]>
<fmt:message key="messageKey"/>
</fmt:bundle>
विशेषताएँ
| विशेषता | विवरण | आवश्यक | डिफ़ॉल्ट |
|---|---|---|---|
| basename | रिसोर्स बंडल का आधार नाम (पूरी तरह से योग्य वर्ग नाम) | हाँ | कोई नहीं |
| prefix | <fmt:message> उप-टैग्स में प्रत्येक कुंजी नाम के साथ पूर्वनिर्मित करने का मान | नहीं | कोई नहीं |
रिसोर्स बंडल बनाना (Java वर्ग)
package com.tutorialspoint;
import java.util.ListResourceBundle;
public class Example_En extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return contents;
}
static final Object[][] contents = {
{"count.one", "One"},
{"count.two", "Two"},
{"count.three", "Three"}
};
}
- इस वर्ग को
Example.classमें संकलित करें - इसे अपने वेब एप्लिकेशन के CLASSPATH में रखें (आमतौर पर
WEB-INF/classes)
JSP में उपयोग: prefix के साथ
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<title>JSTL fmt:bundle Tag</title>
</head>
<body>
<fmt:bundle basename="com.tutorialspoint.Example" prefix="count.">
<fmt:message key="one"/><br/>
<fmt:message key="two"/><br/>
<fmt:message key="three"/><br/>
</fmt:bundle>
</body>
</html>
आउटपुट
One
Two
Three
JSP में उपयोग: prefix के बिना
<fmt:bundle basename="com.tutorialspoint.Example">
<fmt:message key="count.one"/><br/>
<fmt:message key="count.two"/><br/>
<fmt:message key="count.three"/><br/>
</fmt:bundle>
आउटपुट
One
Two
Three
रिसोर्स बंडल कैसे काम करते हैं
- कुंजी/मान जोड़े: बंडल्स में स्थानीय-विशिष्ट मानों के लिए कुंजियाँ होती हैं
- स्थानीय नामकरण:
Example_en_US.properties,Example_fr_FR.properties, आदि - फॉलबैक: यदि विशिष्ट स्थानीय नहीं मिलता है, तो डिफ़ॉल्ट (
Example.propertiesयाExample_En) का उपयोग किया जाता है - संकलित वर्ग:
ListResourceBundleका विस्तार करने वाले Java वर्ग (प्रदर्शन के लिए तेज़) - गुण फ़ाइलें:
.propertiesफ़ाइलें (संपादित करना आसान, पुनः संकलन की आवश्यकता नहीं)
गुण फ़ाइल दृष्टिकोण (वैकल्पिक)
count.one=One
count.two=Two
count.three=Three
count.one=एक
count.two=दो
count.three=तीन
फिर JSP में: <fmt:bundle basename="com.tutorialspoint.Example">
उन्नत उपयोग
नेस्टेड बंडल्स
<fmt:bundle basename="common.Messages">
<fmt:message key="welcome"/>
<fmt:bundle basename="module.Specific" prefix="mod.">
<fmt:message key="title"/>
</fmt:bundle>
</fmt:bundle>
चर में संदेश संग्रहीत करना
<fmt:message key="welcome" var="welcomeMsg" scope="session"/>
<c:out value="${welcomeMsg}"/>
पैरामीटरीकृत संदेश
<fmt:message key="greeting">
<fmt:param value="${user.name}"/>
</fmt:message>
सर्वोत्तम अभ्यास
- कुंजियों के लिए सुसंगत नामकरण:
module.feature.key (उदाहरण: user.profile.name)
- हार्डकोडेड स्ट्रिंग्स से बचें JSP में - हमेशा बंडल्स का उपयोग करें
- डिफ़ॉल्ट स्थानीय प्रदान करें फॉलबैक के लिए
- प्रदर्शन के लिए संकलित वर्ग उपयोग करें (गुण फ़ाइलों की तुलना में तेज़)
- बंडल्स को तार्किक रूप से व्यवस्थित करें (मॉड्यूल/सुविधा के अनुसार)
prefix का उपयोग करें दोहराव कम करने के लिए
सामान्य समस्याएं
- ClassNotFoundException: बंडल वर्ग CLASSPATH में नहीं है
- MissingResourceException: कुंजी बंडल में नहीं मिली
- एन्कोडिंग समस्याएं: गुण फ़ाइलों के लिए UTF-8 सुनिश्चित करें
- कैशिंग: बंडल्स कैश किए जाते हैं; परिवर्तनों के लिए पुनः तैनाती आवश्यक हो सकती है
<fmt:message key="greeting">
<fmt:param value="${user.name}"/>
</fmt:message>module.feature.key (उदाहरण: user.profile.name)prefix का उपयोग करें दोहराव कम करने के लिए