Struts 2 একটি শক্তিশালী MVC ফ্রেমওয়ার্ক যা বিভিন্ন ধরনের ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এর মধ্যে internationalization (i18n) এবং localization (l10n) এর সুবিধা রয়েছে, যার মাধ্যমে অ্যাপ্লিকেশনটির ভাষা এবং স্থানীয় কনফিগারেশন কাস্টমাইজ করা যায়। ResourceBundle এবং Locale এই দুটি উপাদানকে ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের ভাষা পরিবর্তন বা স্থানীয়করণ (localization) কার্যকরভাবে পরিচালনা করতে পারেন।
1. ResourceBundle এবং Locale কী?
- ResourceBundle: এটি একটি Java ক্লাস যা ভ্যালিড ল্যাঙ্গুয়েজ রিসোর্স ফাইল (যেমন,
.propertiesফাইল) থেকে বিভিন্ন কনফিগারেশন রিসোর্স (যেমন বার্তা, টেক্সট) লোড করতে ব্যবহৃত হয়। - Locale: Locale Java-তে একটি কনফিগারেশন অবজেক্ট যা ব্যবহারকারীর ভাষা, দেশ এবং অন্যান্য কাস্টম সেটিংস নির্দেশ করে।
Struts 2 তে ResourceBundle এবং Locale ব্যবহারের মাধ্যমে আপনি ভাষা পরিবর্তন এবং বিভিন্ন দেশে অ্যাপ্লিকেশনটি কাস্টমাইজ করতে পারবেন।
2. Struts 2 তে ResourceBundle এবং Locale সেটআপ
1. struts.xml কনফিগারেশন
প্রথমে struts.xml ফাইলে ResourceBundle এবং Locale কনফিগার করা প্রয়োজন। Struts 2 এর মাধ্যমে এটি খুব সহজে করা যায়।
<package name="default" extends="struts-default">
<action name="welcome" class="com.example.WelcomeAction">
<result name="success">/welcome.jsp</result>
</action>
<!-- Enable i18n (Internationalization) -->
<constant name="struts.custom.i18n.resources" value="messages"/>
<constant name="struts.locale" value="en_US"/>
</package>
ব্যাখ্যা:
- struts.custom.i18n.resources: এখানে
messagesনামক ResourceBundle কে রেফারেন্স করা হয়েছে, যার মাধ্যমে বার্তা ফাইল লোড করা হবে। - struts.locale: এটি ডিফল্ট লোকে (locale) সেট করার জন্য ব্যবহৃত হয় (যেমন
"en_US"বা"fr_FR")।
2. Resource Bundle (messages.properties)
messages.properties ফাইলটি এমন একটি ফাইল যা আপনার অ্যাপ্লিকেশনের জন্য আন্তর্জাতিক বার্তা সংরক্ষণ করে। আপনি একাধিক .properties ফাইল তৈরি করতে পারেন বিভিন্ন ভাষার জন্য (যেমন messages_en_US.properties, messages_fr_FR.properties ইত্যাদি)।
messages.properties (ডিফল্ট ইংরেজি):
welcome.message=Welcome to our application!
messages_fr_FR.properties (ফরাসি ভাষায়):
welcome.message=Bienvenue dans notre application!
messages_es_ES.properties (স্প্যানিশ ভাষায়):
welcome.message=¡Bienvenido a nuestra aplicación!
3. Action Class (WelcomeAction)
একটি Action Class তৈরি করুন যেখানে আপনি ResourceBundle থেকে বার্তা টেনে নেবেন এবং সেই বার্তাটি ব্যবহারকারীর কাছে দেখাবেন।
import com.opensymphony.xwork2.ActionSupport;
import java.util.ResourceBundle;
public class WelcomeAction extends ActionSupport {
private String message;
public String execute() {
ResourceBundle bundle = ResourceBundle.getBundle("messages", getLocale());
message = bundle.getString("welcome.message");
return SUCCESS;
}
public String getMessage() {
return message;
}
}
ব্যাখ্যা:
- ResourceBundle.getBundle() মেথডটি ব্যবহার করে সঠিক লোকে অনুযায়ী বার্তা ফাইলটি লোড করা হচ্ছে।
getLocale()মেথডটি ব্যবহারকারীর বর্তমান Locale ফেরত দেয়। - এখানে
messageনামক একটি ফিল্ড তৈরি করা হয়েছে যেখানে welcome.message এর মান রাখা হচ্ছে।
4. JSP ফাইল (welcome.jsp)
JSP ফাইলে আপনি Action Class থেকে প্রাপ্ত বার্তা ব্যবহার করতে পারেন।
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>${welcome.message}</h1> <!-- Display welcome message -->
</body>
</html>
ব্যাখ্যা:
welcome.messageহল সেই বার্তা যা Action Class থেকে পেয়েছি এবং এটি JSP তে প্রদর্শিত হচ্ছে।
3. Locale পরিবর্তন করা
Locale পরিবর্তন করতে হলে, আপনি struts.xml বা Action Class তে Locale সেট করতে পারেন। আপনি যদি ব্যবহারকারীর ভাষা পরিবর্তন করতে চান, তবে আপনি LocaleSwitcherInterceptor ব্যবহার করতে পারেন।
Locale Switcher Interceptor ব্যবহার
struts.xml তে LocaleSwitcherInterceptor ব্যবহার করার জন্য এটি কনফিগার করুন:
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="locale" class="org.apache.struts2.interceptor.LocaleSwitcherInterceptor">
<param name="defaultLocale">en_US</param>
</interceptor>
<interceptor-stack name="defaultStack">
<interceptor-ref name="locale"/>
<interceptor-ref name="actionMapping"/>
<interceptor-ref name="exception"/>
</interceptor-stack>
</interceptors>
</package>
এখানে:
- LocaleSwitcherInterceptor ব্যবহার করা হয়েছে যার মাধ্যমে ডিফল্ট ভাষা (
en_US) সেট করা হয়েছে। - ইউজার যদি ভাষা পরিবর্তন করতে চায়, তবে আপনি URL বা অন্যান্য ইন্টারফেসের মাধ্যমে এটি করতে পারেন।
Locale পরিবর্তনের জন্য Action Class উদাহরণ
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
public class ChangeLocaleAction extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
public String execute() {
String lang = request.getParameter("lang");
if ("fr".equals(lang)) {
setLocale(new Locale("fr", "FR"));
} else {
setLocale(new Locale("en", "US"));
}
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
ব্যাখ্যা:
- এই অ্যাকশনে, ইউজার যদি
lang=frপ্যারামিটার পাঠায় তবে ফরাসি ভাষা নির্বাচন করা হবে, অন্যথায় ইংরেজি ভাষা ব্যবহৃত হবে।
4. Struts 2 তে ResourceBundle এবং Locale এর সুবিধা
- Multi-language Support: এটি আপনাকে একাধিক ভাষা সমর্থন করার সুযোগ দেয়, যার মাধ্যমে আপনি ইউজারদের স্থানীয় ভাষায় অ্যাপ্লিকেশন ব্যবহার করতে পারেন।
- Centralized Message Management: সব ভাষার জন্য বার্তা এবং টেক্সট একক ফাইলে রাখা যায়, যা অ্যাপ্লিকেশনের রক্ষণাবেক্ষণ সহজ করে।
- Flexibility: LocaleSwitcherInterceptor ব্যবহার করে সহজেই ব্যবহারকারীর ভাষা পরিবর্তন করা যায়।
সারাংশ
Struts 2 তে ResourceBundle এবং Locale ব্যবহার করে আপনি সহজেই আপনার অ্যাপ্লিকেশনের ভাষা এবং স্থানীয় কনফিগারেশন কাস্টমাইজ করতে পারেন। এটি internationalization (i18n) এবং localization (l10n) নিশ্চিত করার একটি শক্তিশালী পদ্ধতি। আপনি struts.xml এবং Action Class এ Locale সেট করে এবং ResourceBundle ব্যবহার করে বিভিন্ন ভাষায় বার্তা প্রদর্শন করতে পারেন।