Internationalization (I18N) হল একটি অ্যাপ্লিকেশন ডিজাইন করার প্রক্রিয়া, যাতে তা বিভিন্ন ভাষা এবং সংস্কৃতি অনুসারে সহজেই অভিযোজিত হতে পারে। Spring MVC তে Internationalization (I18N) কনফিগারেশন করা খুবই সহজ এবং এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে বিভিন্ন ভাষায় কনফিগার করতে পারেন। Spring MVC তে ভাষা পরিবর্তনের জন্য Resource Bundles এবং LocaleResolver ব্যবহৃত হয়।
এই উদাহরণে, আমরা Spring MVC তে Internationalization (I18N) কনফিগার করব এবং একটি সিম্পল অ্যাপ্লিকেশন তৈরি করব যা বিভিন্ন ভাষায় কন্টেন্ট প্রদর্শন করবে।
Step 1: Maven Dependencies
Spring MVC এর জন্য Internationalization ব্যবহার করতে আপনাকে Maven ডিপেনডেন্সি যোগ করতে হবে। Spring Boot স্টার্টারের মাধ্যমে আপনি খুব সহজেই এই কনফিগারেশন করতে পারবেন।
<dependencies>
<!-- Spring Boot Starter Web for MVC functionality -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Thymeleaf for rendering views -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Spring Boot Starter for Internationalization (I18N) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
spring-boot-starter-web: Web অ্যাপ্লিকেশন তৈরি করতে।spring-boot-starter-thymeleaf: Thymeleaf টেমপ্লেট ইঞ্জিন।spring-boot-starter-validation: Validation এবং I18N সমর্থন।
Step 2: Resource Bundle Configuration
Spring MVC তে বিভিন্ন ভাষার জন্য মেসেজ ফাইল ব্যবহার করা হয়, যা Resource Bundles নামে পরিচিত। এখানে আমরা ইংরেজি এবং বাংলার জন্য দুটি মেসেজ রিসোর্স তৈরি করব।
messages.properties (Default English messages):
greeting=Hello, Welcome to our site!
messages_bn.properties (Bengali translations):
greeting=স্বাগতম, আমাদের সাইটে স্বাগতম!
এখন, src/main/resources ডিরেক্টরিতে এই ফাইলগুলি তৈরি করুন। Spring Framework এই রিসোর্স ফাইলগুলো থেকে মেসেজ লোড করবে।
Step 3: LocaleResolver Configuration
Spring MVC তে ইন্টারন্যাশনালাইজেশন (I18N) সেটআপ করার জন্য, আপনাকে LocaleResolver কনফিগার করতে হবে। এটি ব্যবহারকারীর ভাষা নির্বাচন অনুযায়ী সঠিক রিসোর্স লোড করে।
I18N Configuration (LocaleResolver):
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleResolver;
import java.util.Locale;
@Configuration
public class WebConfig implements WebMvcConfigurer {
// Set default locale to English
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages"); // messages.properties files
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
SessionLocaleResolver: এটি ভাষার পরিবর্তনকে সেশন স্তরে সংরক্ষণ করে, তাই ব্যবহারকারী একবার একটি ভাষা নির্বাচন করলে, পরবর্তী রিকোয়েস্টে সেই ভাষাটি থাকবে।MessageSource: এটি রিসোর্স বান্ডেলগুলি লোড করে এবং মেসেজ গুলি সঠিক ভাষায় রিটার্ন করে।
Step 4: Controller Configuration
এখন, আমরা একটি কন্ট্রোলার তৈরি করব, যা বিভিন্ন ভাষায় মেসেজ শো করবে। কন্ট্রোলারে Locale এবং MessageSource ব্যবহৃত হবে।
HomeController.java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
import java.util.Locale;
@Controller
@ComponentScan("com.example")
public class HomeController {
@Autowired
private MessageSource messageSource;
@GetMapping("/home")
public String home(Locale locale, Model model) {
String greeting = messageSource.getMessage("greeting", null, locale);
model.addAttribute("message", greeting);
return "home"; // Return view name (home.html)
}
@GetMapping("/change-language")
public String changeLanguage(@RequestParam("lang") String lang, Locale locale) {
Locale newLocale = new Locale(lang);
locale.setDefault(newLocale); // Change the default locale
return "redirect:/home"; // Redirect to home page to see the updated language
}
}
messageSource.getMessage("greeting", null, locale): এই ফাংশনটিgreetingমেসেজ রিসোর্স থেকে মেসেজ নেয় এবং সেটি ব্যবহারকারীর ভাষায় রিটার্ন করে।locale.setDefault(newLocale): ভাষা পরিবর্তন করার জন্য ব্যবহার করা হয়।
Step 5: Create Views (home.html)
Spring MVC তে থাইমলিফ (Thymeleaf) টেমপ্লেট ইঞ্জিন ব্যবহার করে ভিউ রেন্ডার করা হয়। এখানে, একটি সিম্পল HTML ফাইল তৈরি করা হবে যা বিভিন্ন ভাষার মেসেজ প্রদর্শন করবে।
home.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1 th:text="${message}"></h1> <!-- Display the greeting message -->
<h3>Select Language:</h3>
<a href="/change-language?lang=en">English</a> |
<a href="/change-language?lang=bn">Bengali</a>
</body>
</html>
th:text="${message}": মডেল থেকেmessageডাটা টেমপ্লেট ফাইলের মধ্যে রেন্ডার হবে।
Step 6: Run the Application
- Spring Boot অ্যাপ্লিকেশন চালু করুন:
mvn spring-boot:runঅথবা আপনার IDE থেকেWebConfigএবংHomeControllerক্লাস চালিয়ে অ্যাপ্লিকেশনটি রান করুন। - ব্যবহারকারী ভাষা নির্বাচন করুন:
http://localhost:8080/homeURL এ যান। এখানেEnglishঅথবাBengaliলিঙ্কে ক্লিক করলে ভাষা পরিবর্তন হবে এবং আপনি যে ভাষা নির্বাচন করেছেন সেই ভাষার মেসেজ দেখতে পারবেন।
Conclusion
Spring MVC তে Internationalization (I18N) কনফিগার করা সহজ এবং অত্যন্ত কার্যকরী। Resource Bundles, LocaleResolver, এবং MessageSource এর মাধ্যমে আপনি সহজেই বিভিন্ন ভাষায় মেসেজ প্রদর্শন করতে পারেন এবং ব্যবহারকারীর ভাষা অনুযায়ী কনটেন্ট কাস্টমাইজ করতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে বিভিন্ন ভাষাভাষী ব্যবহারকারীর জন্য উপযোগী এবং বন্ধুত্বপূর্ণ করে তোলে।
Internationalization (I18N) হল এমন একটি প্রক্রিয়া যা সফটওয়্যার অ্যাপ্লিকেশন বা ওয়েব অ্যাপ্লিকেশনগুলোকে বিভিন্ন ভাষায় বা সাংস্কৃতিক পরিবেশে সঠিকভাবে কাজ করার জন্য প্রস্তুত করে। I18N শব্দটি "Internationalization" শব্দের সংক্ষিপ্ত রূপ, যেখানে "I" এবং "N"-এর মধ্যে ১৮টি অক্ষর রয়েছে।
Spring MVC-তে I18N এর মাধ্যমে অ্যাপ্লিকেশন বিভিন্ন ভাষার জন্য localization সমর্থন করে, যা বিভিন্ন অঞ্চলের ব্যবহারকারীদের জন্য প্রাসঙ্গিক ভাষা ও সংস্কৃতিতে তথ্য প্রদান করে।
Spring MVC তে Internationalization (I18N) এর প্রয়োজনীয়তা
- বিভিন্ন ভাষায় অ্যাপ্লিকেশন ব্যবহারের সুবিধা:
- I18N এর মাধ্যমে আপনি অ্যাপ্লিকেশনটি একাধিক ভাষায় কনফিগার করতে পারেন, যার ফলে বৈশ্বিক ব্যবহারকারীদের জন্য এটি ব্যবহার উপযোগী হয়।
- উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন ইংরেজি, ফরাসি, স্প্যানিশ, বা চীনা ভাষায় চালানো যেতে পারে।
- স্থানীয় সংস্কৃতি ও এলাকার অনুকূল:
- অ্যাপ্লিকেশনগুলি বিভিন্ন দেশের সাংস্কৃতিক বৈশিষ্ট্য যেমন তারিখের ফরম্যাট, মুদ্রার প্রতীক, সংখ্যার ফরম্যাট ইত্যাদি অনুযায়ী কনফিগার করা যায়।
- উদাহরণ: আমেরিকাতে তারিখ ফরম্যাট হয়
MM/dd/yyyy, কিন্তু ইউরোপে সাধারণতdd/MM/yyyyব্যবহৃত হয়।
- ব্যবহারকারীর অভিজ্ঞতা উন্নত করা:
- বিভিন্ন ভাষায় অ্যাপ্লিকেশনটি উপস্থাপন করা ব্যবহারকারীদের আরও ভালো অভিজ্ঞতা প্রদান করে, বিশেষ করে যখন তারা তাদের মাতৃভাষায় অ্যাপ্লিকেশন ব্যবহার করে।
- একটি ওয়েবসাইট বা অ্যাপ্লিকেশন ব্যবহারকারীর কাছে আরও গ্রহণযোগ্য এবং প্রাসঙ্গিক হয়ে ওঠে।
- বৈশ্বিক বাজারে প্রসার:
- ইন্টারন্যাশনালাইজেশন একটি অ্যাপ্লিকেশন বা ওয়েবসাইটকে আন্তর্জাতিক বাজারে প্রসারিত করতে সহায়তা করে। এটি বিভিন্ন ভাষাভাষী গ্রাহকদের কাছে পৌঁছানোর জন্য একটি গুরুত্বপূর্ণ ফিচার।
- নতুন ভাষার সমর্থন সহজ:
- ইন্টারন্যাশনালাইজেশন (I18N) একবার কনফিগার করা হলে, নতুন ভাষা যোগ করা খুব সহজ হয়ে যায়। নতুন ভাষার জন্য শুধুমাত্র একটি রিসোর্স ফাইল যোগ করতে হবে, যা অতিরিক্ত কোড পরিবর্তনের প্রয়োজন হয় না।
Spring MVC তে Internationalization (I18N) কনফিগারেশন
Spring MVC তে I18N কার্যকরভাবে কাজ করতে, কয়েকটি পদক্ষেপ অনুসরণ করতে হয়। আসুন দেখি কিভাবে Spring MVC তে Internationalization কনফিগার করা যায়।
Step 1: messages.properties ফাইল তৈরি করা
প্রথমত, আপনাকে messages.properties নামের একটি ফাইল তৈরি করতে হবে যেখানে আপনি অ্যাপ্লিকেশনটির সকল টেক্সট বা স্ট্রিং সন্নিবেশ করবেন। এই ফাইলের মধ্যে key-value pair থাকবে, যেখানে key হবে টেক্সট বা স্ট্রিং এবং value হবে টেক্সটের ভাষার অনুবাদ।
- messages.properties (ডিফল্ট ফাইল):
welcome.message=Welcome to our website!
- messages_fr.properties (ফরাসি ভাষার জন্য):
welcome.message=Bienvenue sur notre site Web!
- messages_es.properties (স্প্যানিশ ভাষার জন্য):
welcome.message=¡Bienvenido a nuestro sitio web!
Step 2: Spring Configuration for I18N
Spring MVC তে I18N কনফিগার করার জন্য আপনাকে LocaleResolver এবং MessageSource কনফিগার করতে হবে।
- LocaleResolver কনফিগারেশন:
WebConfig.java:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public SessionLocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH); // Default locale
return localeResolver;
}
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages"); // File name of message properties
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang"); // URL parameter name to change language
return interceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Explanation:
SessionLocaleResolver: এটি ব্যবহারকারীর সেশন অনুযায়ী স্থানীয় ভাষা নির্বাচন করে। আপনিsetDefaultLocale()মেথড দিয়ে ডিফল্ট ভাষা সেট করতে পারেন।ReloadableResourceBundleMessageSource: এটিmessages.propertiesফাইল থেকে ভাষাগত স্ট্রিং লোড করে।LocaleChangeInterceptor: এই ইন্টারসেপ্টরটি ব্যবহার করে আপনি URL প্যারামিটারlangদিয়ে ভাষা পরিবর্তন করতে পারবেন।
Step 3: Controller for Testing Internationalization
কন্ট্রোলারে Locale এবং MessageSource ব্যবহার করে ভাষা অনুযায়ী মেসেজ পাঠানো হয়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ModelAttribute;
import java.util.Locale;
@Controller
public class HomeController {
@Autowired
private MessageSource messageSource;
@GetMapping("/")
public String home(@RequestParam(value = "lang", required = false) String lang, Locale locale) {
if (lang != null) {
locale = new Locale(lang); // Language change via URL parameter
}
String message = messageSource.getMessage("welcome.message", null, locale);
System.out.println(message);
return "home";
}
}
Explanation:
@RequestParam("lang"): URL থেকেlangপ্যারামিটার গ্রহণ করে ভাষা পরিবর্তন করা হয়।MessageSource.getMessage(): এটি প্রাপ্তlocaleঅনুযায়ী মেসেজের অনুবাদ প্রদান করে।
Step 4: View (JSP) ফাইল
View ফাইলে আপনি welcome.message এর অনুবাদ দেখতে পাবেন।
home.jsp:
<html>
<body>
<h1>${welcome.message}</h1>
<a href="?lang=en">English</a> |
<a href="?lang=fr">Français</a> |
<a href="?lang=es">Español</a>
</body>
</html>
Explanation:
${welcome.message}: এখানে Spring এর ইন্টারন্যাশনালাইজড স্ট্রিং থেকে welcome.message রিটার্ন করা হচ্ছে।- Language Switch Links:
?lang=en,?lang=fr, এবং?lang=esদ্বারা ভাষা পরিবর্তন করা হচ্ছে।
Step 5: Testing
- Default Language (English):
http://localhost:8080/→ "Welcome to our website!" - French Language:
http://localhost:8080/?lang=fr→ "Bienvenue sur notre site Web!" - Spanish Language:
http://localhost:8080/?lang=es→ "¡Bienvenido a nuestro sitio web!"
উপসংহার:
Internationalization (I18N) হল একটি প্রক্রিয়া যা আপনাকে আপনার অ্যাপ্লিকেশনকে বৈশ্বিক ব্যবহারের জন্য প্রস্তুত করতে সাহায্য করে। Spring MVC তে I18N কনফিগারেশন করার মাধ্যমে আপনি একাধিক ভাষায় এবং বিভিন্ন সংস্কৃতিতে অ্যাপ্লিকেশনটি উপস্থাপন করতে পারবেন। MessageSource, LocaleResolver, এবং LocaleChangeInterceptor এর মাধ্যমে আপনি ভাষার জন্য টেক্সট অনুবাদ করতে এবং ব্যবহারকারীর ভাষা নির্বাচন করতে সক্ষম হবেন।
MessageSource হল Spring Framework এর একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা বিভিন্ন ভাষায় বার্তা (messages) পাঠানোর জন্য ব্যবহৃত হয়। এটি সাধারণত internationalization (i18n) এবং localization (l10n) এর জন্য ব্যবহৃত হয়, অর্থাৎ বিভিন্ন ভাষার ব্যবহারকারীদের জন্য অ্যাপ্লিকেশন থেকে বার্তা প্রদানের জন্য।
Spring MVC তে MessageSource কনফিগারেশন করা হলে, আপনি সহজে বিভিন্ন ভাষায় ইউজার ইন্টারফেসের বার্তা, ত্রুটি বার্তা, এবং অন্যান্য স্ট্যাটিক টেক্সট সেট করতে পারেন।
MessageSource কনফিগার করার প্রক্রিয়া:
Spring MVC তে MessageSource কনফিগার করার জন্য আপনাকে কিছু নির্দিষ্ট ধাপ অনুসরণ করতে হবে:
- MessageSource Bean তৈরি করুন:
- Spring Context তে MessageSource Bean কনফিগার করতে হয় যাতে Spring এটি ব্যবহার করতে পারে।
- properties ফাইল তৈরি করুন:
- messages.properties বা অন্যান্য ভাষার জন্য পৃথক ফাইল যেমন messages_en.properties, messages_fr.properties ইত্যাদি তৈরি করতে হবে, যেখানে বিভিন্ন বার্তা এবং ভাষার অনুবাদ সংরক্ষিত থাকবে।
- MessageSource কনফিগারেশন:
- আপনার Spring Context কনফিগারেশনে MessageSource Bean কনফিগার করুন।
- MessageSource থেকে বার্তা রিট্রিভ করা:
- Spring MVC কন্ট্রোলারে MessageSource ব্যবহার করে বার্তা রিট্রিভ করতে হবে।
MessageSource কনফিগারেশন উদাহরণ:
1. Spring Configuration (Java-based):
Spring MVC এ MessageSource কনফিগার করার জন্য, প্রথমে Java Configuration ব্যবহার করতে হবে।
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages"); // properties ফাইলের নাম (messages.properties)
messageSource.setDefaultEncoding("UTF-8"); // এনকোডিং সেট করুন
return messageSource;
}
}
- setBasename("messages"): এটি নির্দেশ করে যে messages.properties ফাইলটি ব্যবহৃত হবে। আপনি যদি বিভিন্ন ভাষার জন্য আলাদা ফাইল ব্যবহার করতে চান, যেমন ইংরেজি এবং ফরাসি, তাহলে messages_en.properties এবং messages_fr.properties তৈরি করতে হবে।
2. messages.properties ফাইল তৈরি করুন:
এখন, আপনাকে messages.properties ফাইল তৈরি করতে হবে যা ডিফল্ট বার্তাগুলি ধারণ করবে। এই ফাইলটি সাধারণত src/main/resources ফোল্ডারে রাখা হয়।
messages.properties (ডিফল্ট ইংরেজি বার্তা):
greeting=Hello, welcome to Spring MVC!
login.error=Invalid username or password.
logout.success=You have been logged out successfully.
messages_fr.properties (ফরাসি অনুবাদ):
greeting=Bonjour, bienvenue dans Spring MVC!
login.error=Nom d'utilisateur ou mot de passe invalide.
logout.success=Vous avez été déconnecté avec succès.
- messages.properties: এটি ডিফল্ট বার্তা ফাইল (ইংরেজি ভাষা)।
- messages_fr.properties: এটি ফরাসি ভাষার বার্তা ফাইল।
3. Controller তে MessageSource ব্যবহার:
Spring MVC কন্ট্রোলারে MessageSource Bean ব্যবহার করে বার্তা রিটার্ন করার জন্য:
@Controller
public class HomeController {
@Autowired
private MessageSource messageSource;
@GetMapping("/home")
public String home(Model model, Locale locale) {
String greeting = messageSource.getMessage("greeting", null, locale);
model.addAttribute("greeting", greeting);
return "home";
}
}
ব্যাখ্যা:
- @Autowired: Spring
MessageSourceBean ইনজেক্ট করছে। - messageSource.getMessage("greeting", null, locale): এখানে
greetingবার্তা কোডটিmessages.propertiesফাইল থেকে লোড হচ্ছে।localeপ্যারামিটারটি ব্যবহারকারীর ভাষার ভিত্তিতে সঠিক বার্তা ফিরিয়ে দেয়। যদি ব্যবহারকারী ফরাসি ভাষা ব্যবহার করেন, তাহলে ফরাসি বার্তা রিটার্ন হবে।
4. View (JSP) Example:
home.jsp (ভিউ):
<html>
<head>
<title>Spring MVC Example</title>
</head>
<body>
<h1>${greeting}</h1>
</body>
</html>
এখানে, ${greeting} এলিমেন্টটি MessageSource থেকে প্রাপ্ত বার্তা দ্বারা প্রতিস্থাপিত হবে, যা messages.properties ফাইল থেকে রিট্রিভ করা হয়েছে।
5. LocaleResolver Configuration:
যেহেতু Spring MVC তে MessageSource ব্যবহার করতে হলে আপনাকে Locale নির্ধারণ করতে হবে, তাই আপনি একটি LocaleResolver কনফিগার করতে পারেন।
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.ENGLISH); // ডিফল্ট ভাষা ইংরেজি
return resolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang"); // URL প্যারামিটার থেকে ভাষা চয়ন করা যাবে
return interceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
- SessionLocaleResolver: এটি ব্যবহারকারীর সেশন অনুযায়ী ভাষা নির্ধারণ করে।
- LocaleChangeInterceptor: এটি URL প্যারামিটার (
lang) এর মাধ্যমে ভাষা পরিবর্তনের অনুমতি দেয়।
6. Language Change URL Example:
ব্যবহারকারী যদি URL এর মাধ্যমে ভাষা পরিবর্তন করতে চান, তাহলে একটি URL প্যারামিটার ব্যবহার করতে হবে:
http://localhost:8080/home?lang=fr
এটি ফরাসি ভাষার বার্তা দেখাবে।
MessageSource এর সুবিধা:
- Internationalization (i18n):
- Spring MVC এর মাধ্যমে MessageSource ব্যবহার করে আপনি সহজেই আপনার অ্যাপ্লিকেশনকে আন্তর্জাতিকভাবে (i18n) কনফিগার করতে পারেন এবং বিভিন্ন ভাষায় বার্তা প্রদান করতে পারেন।
- Separation of Concerns:
- বার্তা এবং ইউজার ইন্টারফেসের অন্যান্য অংশ আলাদা রাখা যায়। এর ফলে কোড রক্ষণাবেক্ষণ করা সহজ হয়।
- Locale-Specific Messages:
- ব্যবহারকারীর লোকেশন এবং ভাষার উপর ভিত্তি করে সঠিক বার্তা প্রদান করা যায়।
- Dynamic Language Switching:
- LocaleChangeInterceptor এর মাধ্যমে অ্যাপ্লিকেশন রিলোড ছাড়া ভাষা পরিবর্তন করা যেতে পারে।
Conclusion:
Spring MVC তে MessageSource কনফিগার করে আপনি অ্যাপ্লিকেশনটির আন্তর্জাতিকীকরণ এবং স্থানীয়করণ পরিচালনা করতে পারেন। এটি ব্যবহারকারীর ভাষা অনুযায়ী বার্তা প্রদানের জন্য খুবই কার্যকর। Spring MVC এবং Spring Security এর সাথে ইন্টিগ্রেট করা হলে এটি multi-language সাপোর্ট এবং নিরাপত্তা ব্যবস্থা উভয়কেই শক্তিশালী করে।
Spring MVC-তে LocaleResolver ব্যবহার করে আপনি ইউজারের রিকোয়েস্টের ভিত্তিতে ডায়নামিকভাবে ভাষা পরিবর্তন করতে পারেন। এটি আন্তর্জাতিকীকরণ (i18n) এবং স্থানীয়করণ (l10n) সমর্থন প্রদান করে, যেখানে অ্যাপ্লিকেশনটি ব্যবহারকারীর পছন্দ অনুযায়ী ভাষা এবং স্থানীয় সেটিংসে রেসপন্স প্রদান করে।
LocaleResolver কী?
Spring MVC তে LocaleResolver একটি ইন্টারফেস যা ইউজারের ভাষা (locale) নির্বাচন করে এবং সেই অনুযায়ী অ্যাপ্লিকেশনকে আন্তর্জাতিক ভাষার রিসোর্স ফাইল (যেমন, messages.properties) লোড করতে সহায়তা করে। এটি ইউজারের রিকোয়েস্ট বা ব্রাউজারের locale প্যারামিটার অনুযায়ী ভাষা পরিবর্তন করতে সাহায্য করে।
LocaleResolver এর কাজের প্রক্রিয়া:
- LocaleResolver ইউজারের প্রেফারড ভাষা (locale) নির্ধারণ করে।
- ইউজারের ভাষা অনুযায়ী সঠিক রিসোর্স (যেমন,
messages.properties) নির্বাচন করা হয়। - Spring MVC আন্তর্জাতিক ভাষার রিসোর্সে থাকা কীগুলিকে সঠিক ভাষায় রেন্ডার করে।
LocaleResolver কনফিগারেশন উদাহরণ
Step 1: LocaleResolver Configuration
Spring MVC-তে LocaleResolver কনফিগার করতে SessionLocaleResolver অথবা CookieLocaleResolver ব্যবহার করা হয়। এখানে SessionLocaleResolver উদাহরণ হিসেবে দেখানো হয়েছে।
WebConfig.java (LocaleResolver কনফিগারেশন)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public SessionLocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.US); // Default Locale
return localeResolver;
}
}
- SessionLocaleResolver: এটি ইউজারের ভাষা সেশনেই সংরক্ষণ করে রাখে। অ্যাপ্লিকেশন পুনরায় রিফ্রেশ হলে ইউজারের নির্বাচিত ভাষা টিকে থাকে।
- setDefaultLocale(Locale.US): ডিফল্ট ভাষা যুক্ত করা হয়েছে, এখানে এটি US English (Locale.US)। আপনি চাইলে Locale.FRANCE বা Locale.GERMANY দিয়েও সেট করতে পারেন।
Step 2: LocaleChangeInterceptor Configuration
এখন LocaleChangeInterceptor কনফিগার করা প্রয়োজন। এটি ইউজারের রিকোয়েস্টে ভাষা পরিবর্তন করার জন্য সাহায্য করে। এটি রিকোয়েস্ট প্যারামিটার (যেমন lang=en বা lang=fr) চেক করে এবং LocaleResolver-কে সংশ্লিষ্ট ভাষা সেট করতে বলে।
WebConfig.java (LocaleChangeInterceptor কনফিগারেশন)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang"); // The request parameter used to change the language
registry.addInterceptor(interceptor);
}
}
- setParamName("lang"):
langপ্যারামিটারটি ব্যবহার করা হবে ভাষা পরিবর্তনের জন্য। উদাহরণস্বরূপ,?lang=enবা?lang=frরিকোয়েস্টে এই প্যারামিটার থাকবে।
Step 3: Messages Properties Files
অন্য ভাষার জন্য রিসোর্স ফাইল তৈরি করতে হবে। এখানে দুটি ফাইলের উদাহরণ দেওয়া হলো: একটিতে ইংরেজি (messages.properties) এবং আরেকটিতে ফরাসি (messages_fr.properties) ভাষার কনটেন্ট থাকবে।
messages.properties (English)
greeting=Hello, Welcome to Spring MVC!
messages_fr.properties (French)
greeting=Bonjour, bienvenue dans Spring MVC!
- এই ফাইলগুলো
src/main/resourcesডিরেক্টরির মধ্যে থাকতে হবে। Spring Framework এই ফাইলগুলোকে নির্বাচিত Locale অনুযায়ী লোড করে।
Step 4: Controller Example
কন্ট্রোলার ক্লাসে আমরা এখন messages.properties বা messages_fr.properties ফাইল থেকে ডেটা রিটার্ন করতে পারি, যেটি ইউজারের সেশন বা রিকোয়েস্ট প্যারামিটার অনুযায়ী পরিবর্তিত হবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@Autowired
private MessageSource messageSource;
@GetMapping("/greet")
public String greet(Model model) {
String greetingMessage = messageSource.getMessage("greeting", null, null);
model.addAttribute("message", greetingMessage);
return "greet"; // Return the view name (greet.jsp or greet.html)
}
}
- messageSource.getMessage("greeting", null, null): এই মেথডটি
greetingকী ব্যবহার করে সঠিক ভাষার রিসোর্স ফাইল থেকে ডেটা রিটার্ন করে। - model.addAttribute("message", greetingMessage): এখানে
greetingMessageভিউতে পাঠানো হচ্ছে।
Step 5: View Example
এখন greet.jsp বা greet.html ভিউ তৈরি করতে হবে, যেখানে কন্ট্রোলার থেকে পাঠানো ডেটা রেন্ডার হবে।
greet.jsp (JSP View)
<!-- /WEB-INF/views/greet.jsp -->
<html>
<body>
<h1>${message}</h1> <!-- The greeting message -->
</body>
</html>
Step 6: Language Change via URL
যখন আপনি ইউজারের ভাষা পরিবর্তন করতে চান, তখন আপনি URL-এ lang প্যারামিটার পাঠাতে পারেন।
Example:
- URL for English:
http://localhost:8080/greet?lang=en
- URL for French:
http://localhost:8080/greet?lang=fr
এখন, রিকোয়েস্টের প্যারামিটার অনুযায়ী ভাষা পরিবর্তিত হবে এবং ব্যবহারকারীকে সঠিক ভাষায় সাড়া দেওয়া হবে।
Conclusion
Spring MVC তে LocaleResolver এবং LocaleChangeInterceptor ব্যবহার করে আপনি সহজে ডায়নামিক ভাষা পরিবর্তন করতে পারেন। এই কনফিগারেশন ব্যবহারকারীর রিকোয়েস্ট অনুযায়ী ভাষা পরিবর্তন করার সুযোগ দেয়। আন্তর্জাতিকীকরণ (i18n) এবং স্থানীয়করণ (l10n) এর মাধ্যমে, আপনি বিশ্বের বিভিন্ন অঞ্চলের ব্যবহারকারীদের জন্য ভাষা এবং স্থানীয় কনটেন্ট প্রদানের ব্যবস্থা করতে পারবেন। Spring MVC তে এই ফিচারটি ব্যবহারের মাধ্যমে একটি বহুভাষী ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব।
I18N (Internationalization) হল একটি প্রক্রিয়া যার মাধ্যমে একটি অ্যাপ্লিকেশন বা ওয়েবসাইট বিভিন্ন ভাষায় এবং স্থানীয়তার সাথে সামঞ্জস্যপূর্ণ হয়। Spring MVC তে I18N ব্যবহার করতে হলে, বিভিন্ন ভাষায় মেসেজগুলি এবং ইউজার ইন্টারফেস কনটেন্ট লোকালাইজ করার জন্য Spring এর MessageSource এবং LocaleResolver ব্যবহার করা হয়।
Spring MVC তে I18N সেটআপ করার জন্য আমরা একাধিক ভাষার জন্য মেসেজ ফাইল তৈরি করব, এবং সেই অনুযায়ী ইউজারের লোকেশন বা ভাষার ভিত্তিতে সেগুলি লোড করব।
Step-by-Step Example for I18N in Spring MVC
1. Spring Boot Dependencies
Spring Boot অ্যাপ্লিকেশন তৈরি করলে I18N এর জন্য কোনো অতিরিক্ত ডিপেনডেন্সি লাগবে না, কারণ Spring Boot স্টার্টার ওয়েব মডিউল ইন্টারন্যাশনালাইজেশন এবং লোকালাইজেশন সাপোর্ট দেয়। তবে, আপনি Thymeleaf বা অন্য টেমপ্লেট ইঞ্জিন ব্যবহার করলে সেই ইঞ্জিনের জন্য আলাদা ডিপেনডেন্সি যুক্ত করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2. Message Properties File তৈরি করা
Spring MVC-তে ভাষা নির্ভর মেসেজ ফাইল তৈরি করা হয়, যেখানে প্রতিটি ভাষার জন্য আলাদা আলাদা .properties ফাইল থাকে।
messages.properties (Default, English)
greeting=Hello, Welcome to our website!
welcomeMessage=We are glad to have you here.
messages_bn.properties (Bengali Translation)
greeting=স্বাগতম, আমাদের ওয়েবসাইটে!
welcomeMessage=আমরা আপনাকে এখানে দেখতে পেয়ে খুশি।
messages_fr.properties (French Translation)
greeting=Bonjour, bienvenue sur notre site Web!
welcomeMessage=Nous sommes heureux de vous avoir ici.
এখানে আমরা তিনটি ভাষার জন্য মেসেজ ফাইল তৈরি করেছি: ইংরেজি, বাংলা এবং ফরাসি।
3. Spring Configuration for I18N
Spring MVC তে MessageSource এবং LocaleResolver কনফিগার করা হয়। MessageSource হল একটি ইন্টারফেস যা বিভিন্ন ভাষার মেসেজ রিসোর্স ফাইল থেকে মেসেজগুলো লোড করার জন্য ব্যবহৃত হয়। LocaleResolver হল একটি ইন্টারফেস যা ব্যবহারকারীর লোকাল সেটিংস অনুসারে ভাষা এবং লোকেশন নির্ধারণ করে।
I18N Configuration in Spring Boot
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
public class I18NConfig implements WebMvcConfigurer {
// MessageSource bean configuration
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
// LocaleResolver bean configuration
@Bean
public SessionLocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH); // Default language is English
return localeResolver;
}
// LocaleChangeInterceptor bean configuration
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang"); // "lang" parameter used to change language
return interceptor;
}
@Override
public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor()); // Register interceptor
}
}
MessageSource: এটিmessages.propertiesফাইল থেকে ভাষার ভিত্তিতে মেসেজ লোড করে।LocaleResolver: এটি ব্যবহারকারীর বর্তমান ভাষা বা স্থানীয়তা নির্ধারণ করে।LocaleChangeInterceptor: এটি URL বা HTTP প্যারামিটার ব্যবহার করে ভাষা পরিবর্তন করার সুবিধা দেয় (যেমন?lang=bnবা?lang=fr)।
4. Controller Class
কন্ট্রোলারে আমরা ভাষাভিত্তিক মেসেজ পাঠানোর জন্য MessageSource ইনজেক্ট করব এবং @RequestParam বা @ModelAttribute ব্যবহার করে ভাষা পরিবর্তন করবো।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HomeController {
@Autowired
private MessageSource messageSource;
@GetMapping("/home")
public String home(Model model) {
String greeting = messageSource.getMessage("greeting", null, LocaleContextHolder.getLocale());
String welcomeMessage = messageSource.getMessage("welcomeMessage", null, LocaleContextHolder.getLocale());
model.addAttribute("greeting", greeting);
model.addAttribute("welcomeMessage", welcomeMessage);
return "home";
}
@GetMapping("/changeLanguage")
public String changeLanguage(@RequestParam("lang") String lang) {
Locale locale = new Locale(lang);
LocaleContextHolder.setLocale(locale);
return "redirect:/home";
}
}
messageSource.getMessage(): এটি মেসেজ প্রপার্টি ফাইল থেকে ভাষাভিত্তিক মেসেজ লোড করার জন্য ব্যবহৃত হয়।LocaleContextHolder.getLocale(): এটি বর্তমান ব্যবহারকারীর লোকাল বা ভাষা নির্ধারণ করতে ব্যবহৃত হয়।@RequestParam("lang"): এটি ইউআরএল থেকে ভাষা প্যারামিটার গ্রহণ করে, যেমন?lang=bn(বাংলা) বা?lang=fr(ফরাসি)।
5. Thymeleaf Template (home.html)
Thymeleaf টেমপ্লেট ব্যবহার করে আমরা মডেল ডেটা প্রদর্শন করব:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring MVC I18N Example</title>
</head>
<body>
<h1 th:text="${greeting}"></h1> <!-- Display localized greeting message -->
<p th:text="${welcomeMessage}"></p> <!-- Display localized welcome message -->
<br/>
<a href="/changeLanguage?lang=en">English</a>
<a href="/changeLanguage?lang=bn">বাংলা</a>
<a href="/changeLanguage?lang=fr">Français</a>
</body>
</html>
th:text="${greeting}": Thymeleaf এর মাধ্যমেgreetingমডেল ডেটাকে প্রদর্শন করা হচ্ছে। এই ডেটাটি English, Bengali, বা French ভাষা অনুযায়ী পরিবর্তিত হবে।
6. Running the Application
- Spring Boot Application Class:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- Run: Spring Boot অ্যাপ্লিকেশনটি রান করার পর
/homeURL এ গিয়ে ভাষা পরিবর্তন এবং মেসেজ দেখুন।
Conclusion
Spring MVC তে I18N (Internationalization) ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে একাধিক ভাষায় এবং স্থানীয়তার ভিত্তিতে কনফিগার করতে পারেন। MessageSource এবং LocaleResolver ব্যবহার করে আপনি বিভিন্ন ভাষার জন্য মেসেজ এবং কন্টেন্ট পরিচালনা করতে পারবেন। Thymeleaf বা অন্য টেমপ্লেট ইঞ্জিনের মাধ্যমে এই ভাষা-ভিত্তিক কনটেন্ট সহজেই UI তে প্রদর্শন করা যায়।
Read more