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