Skill

JSF এর মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট (i18n)

জেএসএফ (JSF) - Web Development

235

i18n (Internationalization) হল একটি প্রক্রিয়া যার মাধ্যমে একটি অ্যাপ্লিকেশনকে বিভিন্ন ভাষায় সহজে কাস্টমাইজ করা যায়। JSF (JavaServer Faces) এর মাধ্যমে মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট (i18n) প্রদান করা সম্ভব, যা ব্যবহারকারীদের বিভিন্ন ভাষায় অ্যাপ্লিকেশনটি ব্যবহার করার সুযোগ দেয়। এটি ব্যবহারকারীদের জন্য আরও ভালো অভিজ্ঞতা প্রদান করে এবং বিশ্বব্যাপী অ্যাপ্লিকেশনগুলি ব্যবহারের উপযোগী করে তোলে।

JSF তে মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট (i18n) কিভাবে কাজ করে?


JSF এর মাধ্যমে মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট বা i18n কার্যকর করতে আপনাকে বিভিন্ন ভাষার জন্য পৃথক resource bundle ব্যবহার করতে হবে। এই রিসোর্স বন্ডলগুলি সাধারণত .properties ফাইল হিসেবে থাকে, যেখানে বিভিন্ন ভাষার জন্য স্ট্রিং নির্ধারণ করা হয়।

i18n এর মৌলিক ধারণা

  • Resource Bundle: প্রতিটি ভাষার জন্য আলাদা আলাদা ফাইল থাকবে, যেমন messages_en.properties ইংরেজি ভাষার জন্য, messages_fr.properties ফরাসি ভাষার জন্য ইত্যাদি।
  • Locale: একটি নির্দিষ্ট ভাষা এবং সংস্কৃতি (যেমন ইংরেজি, ফরাসি, বাংলা ইত্যাদি)।
  • FacesContext: JSF ফ্রেমওয়ার্কে লোকাল বা ভাষার পরিবর্তন সঠিকভাবে হ্যান্ডল করতে FacesContext ব্যবহার করা হয়।

১. Resource Bundle তৈরি করা


প্রথমে, আপনাকে messages.properties নামক একটি ফাইল তৈরি করতে হবে, যেখানে সমস্ত স্ট্রিং বা টেক্সট থাকবে। এই ফাইলটি আপনার অ্যাপ্লিকেশনের ভাষা এবং আঞ্চলিক কনফিগারেশনের উপর নির্ভর করবে। আপনি ইংরেজি, ফরাসি, বাংলাসহ বিভিন্ন ভাষার জন্য আলাদা আলাদা ফাইল তৈরি করতে পারেন।

উদাহরণ: messages_en.properties (ইংরেজি)

greeting=Hello, welcome to JSF!
loginMessage=Please enter your username and password.

উদাহরণ: messages_fr.properties (ফরাসি)

greeting=Bonjour, bienvenue sur JSF!
loginMessage=Veuillez entrer votre nom d'utilisateur et votre mot de passe.

২. FacesConfig.xml এ Resource Bundle কনফিগার করা


এখন, faces-config.xml ফাইলের মধ্যে resource-bundle কনফিগার করতে হবে, যাতে JSF অ্যাপ্লিকেশন ভাষার পরিবর্তন সঠিকভাবে হ্যান্ডল করতে পারে।

উদাহরণ: faces-config.xml

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">

    <!-- Resource Bundle Configuration -->
    <application>
        <resource-bundle>
            <base-name>messages</base-name>
            <var>msg</var>
        </resource-bundle>
    </application>
</faces-config>

এখানে:

  • base-name: আপনার .properties ফাইলের নাম, এখানে messages ব্যবহার করা হয়েছে।
  • var: এটি সেই ভ্যারিয়েবল যা JSF পেজে ব্যবহার করা হবে (যেমন, msg নামে এটি ব্যবহৃত হবে)।

৩. JSF পেজে রিসোর্স বন্ডল ব্যবহার করা


এখন, আপনি JSF পেজে msg ভ্যারিয়েবল ব্যবহার করে আপনার রিসোর্স বন্ডল থেকে স্ট্রিংগুলি লোড করতে পারবেন।

উদাহরণ: JSF পেজ (XHTML)

<h:outputText value="#{msg.greeting}" />
<h:outputText value="#{msg.loginMessage}" />

এখানে:

  • #{msg.greeting}: এটি রিসোর্স বন্ডল থেকে greeting স্ট্রিংটি নিয়ে আসবে এবং সেটি পেজে প্রদর্শন করবে।
  • #{msg.loginMessage}: এটি রিসোর্স বন্ডল থেকে loginMessage স্ট্রিংটি নিয়ে আসবে এবং সেটি পেজে প্রদর্শন করবে।

৪. Locale সেট করা


এখন, আপনাকে ব্যবহারকারীর পছন্দ অনুযায়ী ভাষা পরিবর্তন করতে হবে। JSF তে, আপনি Locale ব্যবহার করে ভাষার পরিবর্তন করতে পারেন। এর জন্য, Locale সেট করার জন্য আপনাকে FacesContext ব্যবহার করতে হবে। ব্যবহারকারীর ভাষা পরিবর্তন করতে, আপনি কিভাবে Locale কনফিগার করবেন তা নিচে দেখানো হল।

উদাহরণ: Locale সেট করা (JSF Managed Bean)

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import java.util.Locale;

@ManagedBean
@ViewScoped
public class LocaleBean {

    private String selectedLanguage = "en"; // Default to English

    // Getter and Setter for selectedLanguage

    public void changeLanguage() {
        Locale locale = new Locale(selectedLanguage);
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    }
}

JSF পেজে Locale পরিবর্তন করার জন্য বাটন যুক্ত করা

<h:form>
    <h:selectOneMenu value="#{localeBean.selectedLanguage}">
        <f:selectItem itemValue="en" itemLabel="English" />
        <f:selectItem itemValue="fr" itemLabel="French" />
        <f:selectItem itemValue="bn" itemLabel="Bengali" />
    </h:selectOneMenu>

    <h:commandButton value="Change Language" action="#{localeBean.changeLanguage}" />
</h:form>

এখানে:

  • changeLanguage() মেথড ব্যবহারকারী নির্বাচিত ভাষায় Locale সেট করে।
  • h:selectOneMenu ব্যবহারকারীর ভাষা নির্বাচন করার জন্য ড্রপডাউন মেনু তৈরি করা হয়েছে।

৫. Facelets এবং i18n


Facelets পেজে i18n সমর্থন আরও সহজ করা হয়েছে, যেখানে আপনি একাধিক ভাষার জন্য ফাইল তৈরি এবং সঠিক লোডিং কনফিগার করতে পারেন। Facelets এর মাধ্যমে আপনি স্বয়ংক্রিয়ভাবে বিভিন্ন ভাষার পেজ লোড করতে পারেন, যেটি ইউজারের ভাষার উপর ভিত্তি করে কাজ করবে।

উদাহরণ: messages.properties কনফিগারেশন এবং ল্যাঙ্গুয়েজ সিলেকশন

messages.properties:

greeting=Welcome to JSF!

messages_fr.properties:

greeting=Bienvenue sur JSF!

এটি নিশ্চিত করবে যে, ব্যবহারকারী English বা French ভাষায় তাদের পছন্দ অনুযায়ী অ্যাপ্লিকেশন দেখতে পাবে।


সারাংশ


JSF তে i18n (Internationalization) এর মাধ্যমে একাধিক ভাষার সাপোর্ট সহজে কার্যকর করা যায়। Resource Bundles ব্যবহার করে আপনি একাধিক ভাষার জন্য স্ট্রিং এবং টেক্সট কনফিগার করতে পারেন এবং Locale সেট করে ব্যবহারকারীর ভাষা পরিবর্তন করতে পারেন। JSF এর সাথে Facelets এবং Managed Beans ব্যবহার করে মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট কার্যকর করা যায়। JSF ফ্রেমওয়ার্কের মাধ্যমে বিভিন্ন ভাষার সাপোর্ট যুক্ত করার ফলে, আপনার অ্যাপ্লিকেশনটি বিশ্বব্যাপী ব্যবহারকারীদের জন্য আরও অ্যাক্সেসযোগ্য এবং ব্যবহারযোগ্য হয়ে ওঠে।

Content added By

Internationalization (i18n) হল এমন একটি প্রক্রিয়া যার মাধ্যমে একটি অ্যাপ্লিকেশনকে বিভিন্ন ভাষা এবং অঞ্চল অনুযায়ী কাস্টমাইজ করা যায়, যাতে তা বিশ্বব্যাপী ব্যবহারকারীদের জন্য উপযুক্ত হয়। JSF ফ্রেমওয়ার্কে Internationalization (i18n) কনফিগার করা সহজ এবং এটি কয়েকটি গুরুত্বপূর্ণ পদক্ষেপের মাধ্যমে করা যায়। এর মাধ্যমে আপনি ভাষার ভিত্তিতে UI উপাদানগুলি, বার্তা, এবং অন্যান্য টেক্সট পরিবর্তন করতে পারেন।

JSF তে Internationalization (i18n) কনফিগারেশন


JSF ফ্রেমওয়ার্কে Internationalization (i18n) কনফিগার করার জন্য নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে হবে:

  1. মাল্টি-ল্যাঙ্গুয়েজ প্রপার্টি ফাইল তৈরি করা
  2. Faces Config ফাইলে কনফিগারেশন
  3. JSF পেজে বার্তা এবং লেবেল ব্যবহার করা
  4. ল্যাঙ্গুয়েজ চয়েস বা ভাষা পরিবর্তনের অপশন যুক্ত করা

১. মাল্টি-ল্যাঙ্গুয়েজ প্রপার্টি ফাইল তৈরি করা


প্রথমে, আপনি আপনার অ্যাপ্লিকেশনের জন্য একাধিক প্রপার্টি ফাইল তৈরি করবেন, যেখানে বিভিন্ন ভাষার জন্য বার্তা এবং লেবেল থাকবে। সাধারণত, প্রতিটি ভাষার জন্য একটি আলাদা প্রপার্টি ফাইল তৈরি করা হয়। প্রপার্টি ফাইলের নামের শেষে ল্যাঙ্গুয়েজ কোড এবং দেশের কোড ব্যবহার করা হয় (যেমন messages_en_US.properties বা messages_fr_FR.properties)।

উদাহরণ: messages_en_US.properties (ইংরেজি)

greeting=Welcome to our application!
login=Please login to continue.

উদাহরণ: messages_fr_FR.properties (ফরাসি)

greeting=Bienvenue dans notre application!
login=Veuillez vous connecter pour continuer.

এখানে, messages_en_US.properties ফাইলে ইংরেজি বার্তা এবং messages_fr_FR.properties ফাইলে ফরাসি বার্তা রয়েছে।

২. Faces Config ফাইলে কনফিগারেশন


এখন আপনাকে faces-config.xml ফাইলে আন্তর্জাতিকীকরণ কনফিগারেশন করতে হবে, যাতে JSF জানে কোন প্রপার্টি ফাইল ব্যবহার করতে হবে এবং কোন ভাষা বা লোকেল প্রদর্শিত হবে।

উদাহরণ: faces-config.xml কনফিগারেশন

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
  
    <application>
        <locale-config>
            <default-locale>en_US</default-locale>
        </locale-config>
    </application>
  
</faces-config>

এখানে:

  • <default-locale>: এটি অ্যাপ্লিকেশনের ডিফল্ট লোকেল (ভাষা) সেট করে। আপনি এটিকে en_US বা অন্য ভাষার লোকেলে পরিবর্তন করতে পারেন।

৩. JSF পেজে বার্তা এবং লেবেল ব্যবহার করা


এখন, JSF পেজে বিভিন্ন ভাষার বার্তা প্রদর্শন করতে হবে। এটি করার জন্য, <h:outputText> বা <h:message> ট্যাগের মাধ্যমে প্রপার্টি ফাইল থেকে বার্তা লোড করা যেতে পারে।

উদাহরণ: JSF পেজ (XHTML) – বার্তা লোড করা

<h:outputText value="#{msg.greeting}" />
<h:outputText value="#{msg.login}" />

এখানে:

  • #{msg.greeting} এবং #{msg.login} হল প্রপার্টি ফাইল থেকে বার্তা রিড করার জন্য JSF এর EL (Expression Language)।

প্রপার্টি ফাইল সেটআপ

JSF এর মাধ্যমে বার্তা প্রদর্শন করতে, আপনাকে msg নামক একটি Managed Bean তৈরি করতে হবে যা ResourceBundle ব্যবহার করবে।

import javax.faces.bean.ManagedBean;
import java.util.ResourceBundle;

@ManagedBean
public class MessageBean {
    private ResourceBundle bundle = ResourceBundle.getBundle("messages");

    public String getGreeting() {
        return bundle.getString("greeting");
    }

    public String getLogin() {
        return bundle.getString("login");
    }
}

এখানে:

  • ResourceBundle ব্যবহার করা হচ্ছে messages প্রপার্টি ফাইল থেকে বার্তা রিড করার জন্য।

৪. ল্যাঙ্গুয়েজ চয়েস বা ভাষা পরিবর্তনের অপশন যুক্ত করা


আপনি ব্যবহারকারীদের ভাষা পরিবর্তন করার জন্য একটি language selector বা dropdown menu তৈরি করতে পারেন। যখন ব্যবহারকারী ভাষা পরিবর্তন করবে, তখন অ্যাপ্লিকেশনটি নতুন ভাষায় রিফ্রেশ হবে।

উদাহরণ: Language Selection Dropdown

<h:form>
    <h:selectOneMenu value="#{languageBean.selectedLanguage}">
        <f:selectItem itemLabel="English" itemValue="en_US" />
        <f:selectItem itemLabel="French" itemValue="fr_FR" />
        <f:ajax listener="#{languageBean.changeLanguage}" render="messages" />
    </h:selectOneMenu>
</h:form>

<h:outputText id="messages" value="#{msg.greeting}" />

Managed Bean for Language Selection

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import java.util.Locale;
import java.util.ResourceBundle;

@ManagedBean
public class LanguageBean {
    private String selectedLanguage = "en_US";

    public String getSelectedLanguage() {
        return selectedLanguage;
    }

    public void setSelectedLanguage(String selectedLanguage) {
        this.selectedLanguage = selectedLanguage;
    }

    public void changeLanguage() {
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(selectedLanguage));
    }
}

এখানে:

  • <f:ajax> ব্যবহার করে যখন ব্যবহারকারী ভাষা পরিবর্তন করবে, তখন changeLanguage মেথডটি কল হবে এবং পেজ রিফ্রেশ হবে নতুন ভাষায়।

সারাংশ


JSF তে Internationalization (i18n) কনফিগার করা একটি সহজ এবং কার্যকর প্রক্রিয়া। এটি আপনাকে একাধিক ভাষায় অ্যাপ্লিকেশন কনফিগার করার এবং বিভিন্ন ভাষায় বার্তা প্রদর্শন করতে সহায়তা করে। এর জন্য আপনাকে প্রপার্টি ফাইল, faces-config.xml এবং Managed Bean ব্যবহারের মাধ্যমে ভাষার সেটিংস এবং বার্তা লোড করতে হবে। ভাষা পরিবর্তনের জন্য আপনি JSF AJAX ব্যবহার করে ব্যবহারকারীদের জন্য একটি ডাইনামিক ভাষা চয়েস ইন্টারফেস তৈরি করতে পারেন, যা অ্যাপ্লিকেশনকে আন্তর্জাতিকীকরণের জন্য প্রস্তুত করে।

Content added By

JSF (JavaServer Faces) অ্যাপ্লিকেশনগুলিতে Resource Bundles ব্যবহার করা হয় পৃষ্ঠাগুলির অনুবাদ বা লোকালাইজেশন (i18n) পরিচালনা করতে। এটি বিভিন্ন ভাষায় অ্যাপ্লিকেশনের কন্টেন্ট প্রদর্শন করার জন্য খুবই কার্যকরী, বিশেষ করে আন্তর্জাতিক বা বহুভাষিক অ্যাপ্লিকেশন ডেভেলপমেন্টে।

Resource Bundles কি?


Resource Bundles হলো একটি বৈশিষ্ট্য যা বিভিন্ন ভাষায় একটি অ্যাপ্লিকেশনের স্ট্যাটিক কনটেন্টের অনুবাদ সংরক্ষণ করতে সাহায্য করে। এটি একটি বা একাধিক প্রোপার্টি ফাইল যা বিভিন্ন ভাষার জন্য মেসেজ এবং টেক্সট ধারণ করে। এই প্রোপার্টি ফাইলগুলি .properties এক্সটেনশন সহ তৈরি হয় এবং এগুলিতে কী-ভ্যালু পেয়ার থাকে, যেখানে কী-টি ইংরেজি বা অন্য কোনো ভাষার টেক্সটের প্রতিনিধিত্ব করে এবং ভ্যালু হলো সেই টেক্সটের অনুবাদ।

JSF এ Resource Bundles ব্যবহার


JSF তে Resource Bundles ব্যবহারের জন্য আপনাকে faces-config.xml ফাইলের মাধ্যমে অথবা JSF পৃষ্ঠায় resourceBundle অ্যানোটেশন ব্যবহার করতে হয়।

Resource Bundle তৈরি


প্রথমে, আপনাকে ভাষা অনুসারে বিভিন্ন প্রোপার্টি ফাইল তৈরি করতে হবে, যেমন messages.properties (ডিফল্ট ভাষা) এবং messages_fr.properties (ফরাসী ভাষার জন্য)।

১. messages.properties (ডিফল্ট ভাষা)

greeting=Welcome to our website!
loginButton=Login

২. messages_fr.properties (ফরাসী ভাষার জন্য)

greeting=Bienvenue sur notre site Web!
loginButton=Se connecter

এখানে, greeting এবং loginButton দুটি কী যা প্রোপার্টি ফাইলগুলির মাধ্যমে অনুবাদিত হবে।

JSF পেজে Resource Bundle ব্যবহার


JSF পৃষ্ঠাতে <h:outputText> বা অন্যান্য কম্পোনেন্টের মাধ্যমে অনুবাদিত টেক্সট ব্যবহার করতে #{msg['key']} এক্সপ্রেশন ব্যবহার করা হয়। JSF অটোমেটিক্যালি বর্তমান লোকেল অনুযায়ী সঠিক রিসোর্স বান্ডল নির্বাচন করে।

৩. JSF পেজে Resource Bundle ব্যবহার

<h:html xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>JSF Resource Bundle Example</title>
    </h:head>
    <h:body>
        <h:outputText value="#{msg.greeting}" />
        <h:commandButton value="#{msg.loginButton}" action="#{loginBean.login}" />
    </h:body>
</h:html>

এখানে:

  • #{msg.greeting}: এটি messages.properties বা অন্যান্য ভাষার প্রোপার্টি ফাইল থেকে greeting কী-এর অনুবাদ করবে।
  • #{msg.loginButton}: এটি loginButton কী-এর অনুবাদ করবে।

Faces-Config.xml ফাইলে Resource Bundle কনফিগারেশন


faces-config.xml ফাইলের মাধ্যমে resource-bundle কনফিগারেশন করা যেতে পারে, যাতে JSF বিভিন্ন ভাষায় টেক্সট রেন্ডার করার সময় সঠিক রিসোর্স বান্ডল ব্যবহার করে।

৪. faces-config.xml কনফিগারেশন

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
    
    <application>
        <resource-bundle>
            <base-name>messages</base-name>
            <var>msg</var>
        </resource-bundle>
    </application>
</faces-config>

এখানে:

  • <base-name>: এটি রিসোর্স বান্ডলের নাম নির্ধারণ করে, যা messages নামে কনফিগার করা হয়েছে।
  • <var>: এটি msg নাম দিয়ে এই বন্ডলটি অ্যাক্সেস করবে।

Locale এবং Language Switching


JSF তে Locale পরিবর্তন করা খুবই সহজ। আপনি <h:selectOneMenu> বা অন্যান্য কন্ট্রোলের মাধ্যমে ব্যবহারকারীর ভাষা পরিবর্তন করতে পারেন এবং সেটি বর্তমান পৃষ্ঠার জন্য রিফ্রেশ করা যায়।

৫. Language Switching (Locale Change) উদাহরণ

<h:form>
    <h:selectOneMenu value="#{localeBean.language}">
        <f:selectItem itemValue="en" itemLabel="English" />
        <f:selectItem itemValue="fr" itemLabel="Français" />
        <f:ajax render="output" />
    </h:selectOneMenu>

    <h:outputText id="output" value="#{msg.greeting}" />
</h:form>

Managed Bean (Locale Bean):

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.util.Locale;
import java.util.ResourceBundle;

@ManagedBean
@SessionScoped
public class LocaleBean {
    private String language = "en"; // Default language

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
        Locale.setDefault(new Locale(language)); // Set the locale
    }
}

এখানে:

  • <f:ajax render="output": ভাষা পরিবর্তন হলে output ট্যাগটি রিফ্রেশ হবে।
  • Locale.setDefault(new Locale(language)): এটি ব্যবহারকারীর নির্বাচিত ভাষাকে অ্যাপ্লিকেশনের লোকেল হিসেবে সেট করে।

সারাংশ


Resource Bundles ব্যবহার করে JSF অ্যাপ্লিকেশনে লোকালাইজেশন (i18n) করা খুবই সহজ এবং কার্যকর। আপনি faces-config.xml এবং JSF পৃষ্ঠায় #{msg['key']} এক্সপ্রেশন ব্যবহার করে বিভিন্ন ভাষার জন্য টেক্সট অনুবাদ করতে পারেন। JSF অ্যাপ্লিকেশনের ভাষা পরিবর্তন বা Locale switching ব্যবস্থাপনা করার জন্য কাস্টম Managed Bean ব্যবহার করতে পারেন, যা ইউজারের ভাষা নির্বাচন অনুসারে সঠিক রিসোর্স বান্ডল নির্বাচন করবে। JSF এবং Resource Bundles এর মাধ্যমে আপনি আন্তর্জাতিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যা বিভিন্ন ভাষায় কন্টেন্ট প্রদর্শন করবে।

Content added By

Locale Management হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আন্তর্জাতিকীকরণের (Internationalization) অংশ হিসেবে কাজ করে, যেখানে অ্যাপ্লিকেশনটি বিভিন্ন ভাষা এবং সংস্কৃতি অনুযায়ী কনফিগার করা হয়। JSF (JavaServer Faces) ফ্রেমওয়ার্কে Locale Management ব্যবহারকারীর ভাষা এবং সংস্কৃতির উপর ভিত্তি করে ডেটা প্রদর্শন এবং ইনপুট গ্রহণের প্রক্রিয়া সহজ করে।

এছাড়া, Language Switcher ব্যবহারকারীদের ভাষা পরিবর্তন করার জন্য একটি কাস্টম ইন্টারফেস উপাদান সরবরাহ করে, যা UI ভাষাকে সরাসরি পরিবর্তন করতে সক্ষম।

Locale Management in JSF


Locale হল একটি ভাষার এবং সংস্কৃতির সেট, যা দেশের নাম, ভাষা, বা অঞ্চল দ্বারা সংজ্ঞায়িত হয়। JSF তে Locale ব্যবস্থাপনা মূলত দুইটি উপাদান দ্বারা করা হয়:

  1. LocaleResolver: এটি সেট করে এবং পরিচালনা করে ব্যবহারকারীর ভাষা বা সংস্কৃতি।
  2. ResourceBundle: এটি আন্তর্জাতিকীকৃত বার্তা এবং স্ট্রিং সাপোর্ট প্রদান করে।

Locale Configuration in JSF


JSF তে Locale কনফিগার করার জন্য আপনাকে faces-config.xml ফাইলে locale-config এবং message-bundle কনফিগার করতে হয়। এতে আপনার অ্যাপ্লিকেশন বিভিন্ন ভাষার বার্তা ফাইল লোড করতে পারে।

উদাহরণ: faces-config.xml এ Locale কনফিগারেশন

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
    
    <locale-config>
        <default-locale>en</default-locale> <!-- Default locale is English -->
        <supported-locale>en</supported-locale> <!-- English as supported language -->
        <supported-locale>fr</supported-locale> <!-- French as supported language -->
    </locale-config>
    
</faces-config>

এখানে:

  • default-locale: অ্যাপ্লিকেশন শুরু করার সময় ডিফল্ট ভাষা (এখানে ইংরেজি)।
  • supported-locale: যেসব ভাষা অ্যাপ্লিকেশন সমর্থন করবে, সেগুলির তালিকা।

Resource Bundle Configuration in JSF


JSF তে বিভিন্ন ভাষার বার্তা এবং স্ট্রিং সংরক্ষণ করার জন্য ResourceBundle ব্যবহার করা হয়। আপনি একটি messages.properties ফাইল তৈরি করে এতে ভাষানুযায়ী বার্তা সংরক্ষণ করবেন।

উদাহরণ: messages.properties (English)

welcomeMessage=Welcome to our application
errorMessage=Something went wrong, please try again

উদাহরণ: messages_fr.properties (French)

welcomeMessage=Bienvenue dans notre application
errorMessage=Quelque chose a mal tourné, veuillez réessayer

এখানে:

  • messages.properties ফাইলটি ইংরেজি ভাষার জন্য বার্তা ধারণ করে।
  • messages_fr.properties ফাইলটি ফরাসি ভাষার জন্য বার্তা ধারণ করে।

Language Switcher in JSF


Language Switcher একটি কাস্টম কম্পোনেন্ট যা ব্যবহারকারীদের ভাষা পরিবর্তন করতে সহায়তা করে। এটি UI এর একটি অংশ হিসেবে কাজ করে, যেখানে ব্যবহারকারী নির্বাচিত ভাষা অনুযায়ী অ্যাপ্লিকেশনের ভাষা পরিবর্তন করতে পারেন।

উদাহরণ: Language Switcher Implementation

১. LocaleBean (Managed Bean)
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import java.util.Locale;

@ManagedBean
@SessionScoped
public class LocaleBean {

    private Locale locale;

    public Locale getLocale() {
        return locale != null ? locale : FacesContext.getCurrentInstance().getViewRoot().getLocale();
    }

    public void setLocale(Locale locale) {
        this.locale = locale;
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    }

    public void switchToEnglish() {
        setLocale(new Locale("en"));
    }

    public void switchToFrench() {
        setLocale(new Locale("fr"));
    }
}

এখানে:

  • setLocale মেথডটি ব্যবহার করে আপনি ইউজারের ভাষা পরিবর্তন করতে পারেন।
  • switchToEnglish এবং switchToFrench মেথডগুলি ভাষা পরিবর্তন করার জন্য ব্যবহৃত হয়।
২. LocaleBean এর সাথে JSF পেজে Language Switcher
<h:form>
    <h:commandButton value="Switch to English" action="#{localeBean.switchToEnglish}" />
    <h:commandButton value="Switch to French" action="#{localeBean.switchToFrench}" />
</h:form>

<h:outputText value="#{msg.welcomeMessage}" />

এখানে:

  • #{msg.welcomeMessage}: এটি Resource Bundle থেকে বার্তা গ্রহণ করবে।
  • Language Switcher: দুইটি বাটন দ্বারা ব্যবহারকারী ইংরেজি এবং ফরাসি ভাষার মধ্যে সুইচ করতে পারেন।

৩. faces-config.xml এ Managed Bean এর কনফিগারেশন

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
    
    <managed-bean>
        <managed-bean-name>localeBean</managed-bean-name>
        <managed-bean-class>com.example.LocaleBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

</faces-config>

এখানে, localeBean Managed Bean হিসেবে কনফিগার করা হয়েছে এবং এটি session scope এ রয়েছে, যা ইউজারের সেশনের মধ্যে ভাষা পরিবর্তন সক্ষম করবে।

JSF Locale Handling With Cookies


এছাড়া, Locale পরিবর্তন করার পর যদি আপনি সেটি cookies বা session এ সংরক্ষণ করতে চান, তাহলে তা JSF এ খুব সহজে করা যায়। এর মাধ্যমে, পরবর্তী রিকোয়েস্টে ব্যবহারকারীর ভাষা সংরক্ষিত থাকবে।

import javax.faces.context.FacesContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

public void setLocaleWithCookie(Locale locale) {
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    Cookie localeCookie = new Cookie("locale", locale.getLanguage());
    localeCookie.setMaxAge(60*60*24*365); // Set cookie expiration time
    response.addCookie(localeCookie);
}

এখানে:

  • Cookie ব্যবহার করা হয়েছে যাতে ব্যবহারকারীর ভাষা নির্বাচন পরবর্তী রিকোয়েস্টে সংরক্ষিত থাকে।

সারাংশ


JSF তে Locale Management ব্যবহার করে আপনি আন্তর্জাতিককৃত (Internationalized) অ্যাপ্লিকেশন তৈরি করতে পারেন, যেখানে ব্যবহারকারী তাদের পছন্দসই ভাষায় অ্যাপ্লিকেশনটি দেখতে পারবেন। Language Switcher তৈরি করে, আপনি সহজেই ব্যবহারকারীদের ভাষা পরিবর্তন করার সুযোগ দিতে পারেন। ResourceBundle ব্যবহার করে ভাষাভিত্তিক বার্তা এবং টেক্সট প্রদর্শন করা যায়। JSF অ্যাপ্লিকেশনের জন্য Locale কনফিগারেশন এবং Language Switcher কার্যকরীভাবে ব্যবহার করে একটি মাল্টি-ল্যাঙ্গুয়েজ ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব।

Content added By

JSF (JavaServer Faces) অ্যাপ্লিকেশনগুলির মধ্যে Multilingual Support এবং Data Formatting ব্যবহারকারীদের জন্য অ্যাপ্লিকেশনটি বিভিন্ন ভাষায় এবং অঞ্চলের জন্য উপযোগী করতে সাহায্য করে। Internationalization (i18n) এবং Localization (l10n) ফিচারগুলির মাধ্যমে আপনি সহজেই একাধিক ভাষায় পেজ কনফিগার এবং ডেটা ফরম্যাটিং নিশ্চিত করতে পারেন। এই টিউটোরিয়ালে আমরা দেখব কিভাবে JSF অ্যাপ্লিকেশনগুলিতে Multilingual Pages কনফিগার করা যায় এবং Data Formatting ব্যবহার করা যায়।

১. Multilingual পেজ কনফিগারেশন (i18n)


Multilingual Support বা i18n (Internationalization) এর মাধ্যমে একটি JSF অ্যাপ্লিকেশনকে একাধিক ভাষায় কনফিগার করা যায়। এটি সাধারণত resource bundles ব্যবহার করে করা হয়, যা বিভিন্ন ভাষার জন্য স্ট্রিং সংরক্ষণ করে। JSF অ্যাপ্লিকেশনগুলি Locale পরিবর্তন করার মাধ্যমে বিভিন্ন ভাষার সাপোর্ট প্রদান করে।

১.১. Resource Bundle তৈরি করা

প্রথমে, আপনাকে ভাষার স্ট্রিং সংরক্ষণের জন্য resource bundle তৈরি করতে হবে। আপনি .properties ফাইল ব্যবহার করে এই স্ট্রিংগুলি সংরক্ষণ করতে পারেন।

messages_en.properties (ইংরেজি):

greeting=Hello, welcome to our application!
loginMessage=Please enter your username and password.

messages_fr.properties (ফরাসি):

greeting=Bonjour, bienvenue sur notre application!
loginMessage=Veuillez entrer votre nom d'utilisateur et votre mot de passe.

এখানে:

  • messages_en.properties ইংরেজি ভাষার জন্য, এবং messages_fr.properties ফরাসি ভাষার জন্য।

১.২. faces-config.xml কনফিগারেশন

এখন faces-config.xml ফাইলে resource bundle কনফিগার করতে হবে, যাতে JSF বিভিন্ন ভাষার স্ট্রিংগুলি সঠিকভাবে লোড করতে পারে।

faces-config.xml:

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
    
    <application>
        <resource-bundle>
            <base-name>messages</base-name>
            <var>msg</var>
        </resource-bundle>
    </application>
</faces-config>

এখানে:

  • base-name: resource bundle এর নাম, যেটি messages রাখা হয়েছে।
  • var: এটি হলো bean এর ভ্যারিয়েবল নাম, যেখানে আপনি resource bundle এর স্ট্রিং অ্যাক্সেস করবেন (যেমন msg ব্যবহার হবে)।

১.৩. JSF পেজে Resource Bundle ব্যবহার করা

JSF পেজে resource bundle থেকে স্ট্রিং গুলি ব্যবহার করতে EL Expressions (#{msg.key}) ব্যবহার করতে হবে।

<h:outputText value="#{msg.greeting}" />
<h:outputText value="#{msg.loginMessage}" />

এখানে, #{msg.greeting} এবং #{msg.loginMessage} রিসোর্স বন্ডল থেকে স্ট্রিংগুলো লোড করবে এবং পেজে প্রদর্শন করবে।

১.৪. Locale পরিবর্তন করা

JSF তে Locale পরিবর্তন করার জন্য FacesContext এবং Locale ব্যবহার করা হয়।

LocaleBean.java (Managed Bean):

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import java.util.Locale;

@ManagedBean
@SessionScoped
public class LocaleBean {
    private String selectedLanguage = "en"; // Default to English

    public void changeLanguage() {
        Locale locale = new Locale(selectedLanguage);
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    }

    public String getSelectedLanguage() {
        return selectedLanguage;
    }

    public void setSelectedLanguage(String selectedLanguage) {
        this.selectedLanguage = selectedLanguage;
    }
}

JSF পেজে Language Selection:

<h:form>
    <h:selectOneMenu value="#{localeBean.selectedLanguage}">
        <f:selectItem itemValue="en" itemLabel="English" />
        <f:selectItem itemValue="fr" itemLabel="French" />
    </h:selectOneMenu>
    
    <h:commandButton value="Change Language" action="#{localeBean.changeLanguage}" />
</h:form>

এখানে:

  • changeLanguage() মেথড ব্যবহারকারী নির্বাচিত ভাষা সেট করে এবং FacesContext এর মাধ্যমে পেজের Locale আপডেট করে।

২. Data Formatting (ডেটা ফরম্যাটিং)


JSF তে Data Formatting ব্যবহার করে আপনি ব্যবহারকারীদের উপযোগীভাবে ডেটা প্রদর্শন করতে পারেন, যেমন তারিখ, মুদ্রা, সংখ্যা ইত্যাদি। JSF স্বয়ংক্রিয়ভাবে JSF Converters ব্যবহার করে ডেটা ফরম্যাট করতে সাহায্য করে।

২.১. Date Formatting

JSF তে তারিখ ফরম্যাট করতে h:outputText কম্পোনেন্টের মাধ্যমে JSF date converter ব্যবহার করা হয়।

<h:outputText value="#{userBean.birthDate}" converter="javax.faces.DateTime" />

এখানে:

  • javax.faces.DateTime কনভার্টার ব্যবহার করে তারিখটি ইউজারের লোকাল ফরম্যাটে প্রদর্শিত হবে।

২.২. Currency Formatting

Currency ফরম্যাট করতে <h:outputText> কম্পোনেন্টে JSF Currency Converter ব্যবহার করতে পারেন।

<h:outputText value="#{userBean.salary}" converter="javax.faces.Currency" />

এখানে:

  • javax.faces.Currency কনভার্টার ব্যবহার করে মুদ্রা মান ফরম্যাট করা হয়, যা ইউজারের লোকাল মুদ্রা সিম্বল ব্যবহার করবে।

২.৩. Number Formatting

Number ফরম্যাটিংয়ের জন্য JSF Number Converter ব্যবহার করতে পারেন।

<h:outputText value="#{userBean.someNumber}" converter="javax.faces.Number" />

এখানে:

  • javax.faces.Number কনভার্টারটি নম্বরটির ফরম্যাট ইউজারের লোকাল কনফিগারেশন অনুযায়ী প্রদর্শন করবে।

৩. JSF Custom Converter


আপনি চাইলে Custom Converter তৈরি করে JSF এ বিশেষ ধরনের ডেটা ফরম্যাটিং করতে পারেন, যেমন ডেটা কাস্টমাইজড ফরম্যাটে দেখানো।

উদাহরণ: Custom Converter

@FacesConverter(forClass = Date.class)
public class CustomDateConverter implements Converter {

    private static final String DATE_FORMAT = "yyyy-MM-dd";

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
            return sdf.parse(value);
        } catch (ParseException e) {
            return null;
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return sdf.format((Date) value);
    }
}

এখানে, CustomDateConverter ক্লাসটি তারিখ ফরম্যাটিংয়ের জন্য কাস্টম কনভার্টার তৈরি করেছে।

সারাংশ


JSF অ্যাপ্লিকেশনগুলির জন্য Multilingual Support এবং Data Formatting অত্যন্ত গুরুত্বপূর্ণ ফিচার। i18n কনফিগারেশন ব্যবহার করে আপনি সহজেই বিভিন্ন ভাষার স্ট্রিং লোড করতে পারেন এবং Locale পরিবর্তন করতে পারেন। এছাড়া, JSF Converters (যেমন Date, Currency, Number) ব্যবহার করে ডেটা ফরম্যাটিং করতে পারেন, যা ব্যবহারকারীদের অভিজ্ঞতা আরও উন্নত করে। Custom Converters ব্যবহার করে আপনি নিজের প্রয়োজন অনুযায়ী ডেটা ফরম্যাটিং কাস্টমাইজ করতে পারেন। JSF এর মাধ্যমে মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট এবং ডেটা ফরম্যাটিং আপনার অ্যাপ্লিকেশনকে বিশ্বব্যাপী ব্যবহারকারীদের জন্য উপযোগী এবং ইন্টারঅ্যাকটিভ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...