JasperReports এবং i18n (Internationalization)

জ্যাসপার রিপোর্ট (JasperReports) - Java Technologies

307

JasperReports একটি শক্তিশালী রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলির জন্য রিপোর্ট তৈরি করতে ব্যবহৃত হয়। যখন আপনি বিভিন্ন ভাষায় রিপোর্ট তৈরি করতে চান বা একটি আন্তর্জাতিক অ্যাপ্লিকেশন তৈরি করছেন, তখন i18n (Internationalization) এবং l10n (Localization) গুরুত্বপূর্ণ বিষয় হয়ে ওঠে।

i18n (Internationalization) হল এমন একটি প্রক্রিয়া যেখানে সফটওয়্যার বা অ্যাপ্লিকেশন এমনভাবে ডিজাইন করা হয় যাতে এটি বিভিন্ন ভাষা এবং অঞ্চলের জন্য কাস্টমাইজ করা যায়। JasperReports i18n সাপোর্ট করে এবং আপনি সহজেই বিভিন্ন ভাষার রিপোর্ট তৈরি করতে পারেন।

এই নির্দেশিকা জুড়ে, আমরা JasperReports ব্যবহার করে Internationalization (i18n) কনফিগারেশন এবং কাস্টমাইজেশন সম্পর্কে আলোচনা করব।


JasperReports-এ i18n (Internationalization) কনফিগারেশন

JasperReports-এ i18n সমর্থন করার জন্য সাধারণত নিম্নলিখিত বিষয়গুলো সঠিকভাবে কনফিগার করা হয়:

  1. Resource Bundles ব্যবহার করা
  2. Locale সেট করা
  3. Dynamic Text Translation ব্যবহার করা

JasperReports-এর মধ্যে i18n কনফিগারেশনের জন্য .properties ফাইল ব্যবহার করা হয়, যেখানে আপনি প্রতিটি ভাষার জন্য কাস্টম টেক্সট যোগ করতে পারেন এবং রিপোর্টে ভাষার পরিবর্তন অনুযায়ী আউটপুট জেনারেট করতে পারেন।


1. Resource Bundles ব্যবহার করা

Resource Bundles হল key-value pairs যা আপনার অ্যাপ্লিকেশনে বিভিন্ন ভাষার জন্য স্ট্রিং মান সংরক্ষণ করে। যখন রিপোর্টে স্থানীয় ভাষা (local language) পরিবর্তন করতে হবে, তখন ResourceBundle ফাইলটি ব্যবহার করা হয়।

Step 1: Resource Bundle তৈরি করুন

প্রতিটি ভাষার জন্য একটি .properties ফাইল তৈরি করুন। উদাহরণস্বরূপ, একটি English (ইংরেজি) এবং French (ফরাসি) ফাইল তৈরি করতে পারেন।

messages_en.properties (English):

reportTitle=Sales Report
product=Product
price=Price
quantity=Quantity

messages_fr.properties (French):

reportTitle=Rapport des ventes
product=Produit
price=Prix
quantity=Quantité

Step 2: JasperReports JRXML-এ Resource Bundle ব্যবহার করা

এখন, JRXML ফাইলে আপনি Resource Bundle ব্যবহার করতে পারেন যাতে প্রতিটি ফিল্ডের জন্য অনুবাদ করা স্ট্রিংগুলি রিপোর্টে অন্তর্ভুক্ত করা যায়।

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
                                  http://jasperreports.sourceforge.net/xsd/jasperreports.xsd"
              name="InternationalizedReport" pageWidth="595" pageHeight="842" columnWidth="515"
              leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
    
    <parameter name="REPORT_RESOURCE_BUNDLE" class="java.util.ResourceBundle" isForPrompting="false"/>
    
    <!-- Title using Resource Bundle -->
    <title>
        <band height="60">
            <textField>
                <reportElement x="0" y="0" width="515" height="50"/>
                <textFieldExpression><![CDATA[$R{reportTitle}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    
    <!-- Column Header -->
    <columnHeader>
        <band height="40">
            <textField>
                <reportElement x="0" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$R{product}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$R{price}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$R{quantity}]]></textFieldExpression>
            </textField>
        </band>
    </columnHeader>
    
    <!-- Detail Section -->
    <detail>
        <band height="30">
            <textField>
                <reportElement x="0" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$F{product}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$F{price}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="30"/>
                <textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

এখানে, $R{} ব্যবহার করে Resource Bundle থেকে স্ট্রিং মানগুলো খোঁজা হয়েছে, যেমন $R{product} বা $R{price}। এটি ব্যবহৃত হয় messages_en.properties বা messages_fr.properties ফাইল থেকে অনুবাদিত টেক্সট আনতে।

Step 3: Report Generation with Locale

জাভা কোডের মাধ্যমে রিপোর্ট তৈরি করার সময় Locale সেট করতে হবে।

import net.sf.jasperreports.engine.*;
import java.util.*;

public class ReportGenerator {
    public static void main(String[] args) throws JRException {
        // Set Locale
        Locale locale = Locale.FRENCH; // Change to Locale.ENGLISH for English report
        
        // Load resource bundle
        ResourceBundle resourceBundle = ResourceBundle.getBundle("messages", locale);

        // Parameters for the report
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("REPORT_RESOURCE_BUNDLE", resourceBundle);

        // Fill the report
        JasperReport jasperReport = JasperCompileManager.compileReport("report.jrxml");
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());

        // Export to PDF
        JasperExportManager.exportReportToPdfFile(jasperPrint, "SalesReport_" + locale.getLanguage() + ".pdf");
    }
}

এখানে, Locale.FRENCH ব্যবহার করে French ভাষায় রিপোর্ট তৈরি করা হচ্ছে। আপনি Locale.ENGLISH ব্যবহার করে ইংরেজি ভাষার রিপোর্টও তৈরি করতে পারবেন।


2. Managing Text Translations with Locale

JasperReports ব্যবহার করে ইন্টারন্যাশনালাইজেশন করার সময় Locale ব্যবহার করা হয়, যা রিপোর্টের জন্য সঠিক ভাষার অনুবাদ নির্বাচন করতে সহায়তা করে। আপনি একাধিক ভাষার জন্য আলাদা আলাদা resource bundles তৈরি করতে পারেন এবং রিপোর্ট তৈরির সময় Locale সেট করে সেই ভাষায় রিপোর্ট পেতে পারেন।

Example: Supporting Multiple Locales

  • English Resource Bundle (messages_en.properties)
  • French Resource Bundle (messages_fr.properties)
# messages_en.properties
reportTitle=Sales Report
product=Product
price=Price
quantity=Quantity

# messages_fr.properties
reportTitle=Rapport des ventes
product=Produit
price=Prix
quantity=Quantité

রিপোর্ট তৈরি করার সময় আপনি Locale অনুসারে সঠিক resource bundle লোড করতে পারেন।

Dynamic Text Formatting (e.g., Dates, Numbers)

JasperReports আপনাকে Locale-specific formatting করতে সহায়তা করে, যেমন তারিখ এবং সংখ্যা ফরম্যাট। উদাহরণস্বরূপ, ইংরেজি ভাষায় MM/dd/yyyy তারিখ ফরম্যাট হতে পারে এবং ফরাসি ভাষায় dd/MM/yyyy হতে পারে।

<textField>
    <reportElement x="0" y="100" width="200" height="30"/>
    <textElement>
        <font fontName="Arial" size="12"/>
    </textElement>
    <textFieldExpression><![CDATA[
        new java.text.SimpleDateFormat("yyyy-MM-dd").format($F{orderDate})
    ]]></textFieldExpression>
</textField>

এখানে, SimpleDateFormat ব্যবহার করে তারিখ ফরম্যাট কাস্টমাইজ করা হয়েছে, এবং Locale অনুযায়ী এটি পরিবর্তিত হবে।


  • JasperReports-এ i18n (Internationalization) ব্যবহার করে আপনি বিভিন্ন ভাষায় রিপোর্ট তৈরি করতে পারেন।
  • Resource bundles এবং Locale ব্যবহার করে আপনি প্রতিটি ভাষার জন্য কাস্টম টেক্সট সংরক্ষণ করতে পারেন এবং রিপোর্টের ভাষা পরিবর্তন করতে পারেন।
  • Dynamic Text Formatting এবং Date/Number Formatting এর মাধ্যমে আপনি বিভিন্ন ভাষায় ফরম্যাট কাস্টমাইজ করতে পারেন, যা রিপোর্টের আন্তর্জাতিককরণের জন্য প্রয়োজনীয়।
  • Jaspersoft Studio এর মাধ্যমে বিভিন্ন ভাষার জন্য resource bundles কনফিগার করা খুবই সহজ এবং এটি ব্যবহারকারীদের জন্য একটি খুবই কার্যকরী সমাধান।

JasperReports-এর মাধ্যমে আপনি একটি রিপোর্টের মাধ্যমে অনেক ভাষার সমর্থন নিশ্চিত করতে পারবেন, যা বিশেষভাবে বৈশ্বিক অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত উপকারী।

Content added By

Internationalization (I18N) হল এমন একটি কৌশল যা সফটওয়্যার বা ওয়েব অ্যাপ্লিকেশনকে বিভিন্ন ভাষা, সংস্কৃতি, এবং অঞ্চলের জন্য সমর্থনযোগ্য করে তোলে। এটি একটি প্রক্রিয়া, যেখানে অ্যাপ্লিকেশনটি এমনভাবে তৈরি করা হয় যাতে ভবিষ্যতে সহজে অন্যান্য ভাষা বা অঞ্চলের জন্য কাস্টমাইজ করা যায়, এবং ব্যবহারকারীদের নিজস্ব ভাষা বা সংস্কৃতিতে সেবা প্রদান করা যায়।

JasperReports-এ Internationalization প্রয়োজনীয় কারণ এটি reports তৈরি করার সময় বিভিন্ন ভাষা ও অঞ্চলকে সমর্থন করতে সাহায্য করে। JasperReports রিপোর্টিং টুলটি এমনভাবে ডিজাইন করা হয়েছে যাতে এটি বিভিন্ন ভাষায় রিপোর্ট আউটপুট তৈরি করতে পারে এবং এটি বিভিন্ন দেশের স্থানীয়তার (locale) জন্য কাস্টমাইজড হতে পারে।


JasperReports এ Internationalization (I18N) কীভাবে কাজ করে?

JasperReports-এ Internationalization সেটআপ করার জন্য কিছু নির্দিষ্ট কৌশল এবং কনফিগারেশন ব্যবহার করতে হয়, যার মাধ্যমে আপনি রিপোর্টের মধ্যে ভাষা পরিবর্তন, স্থানীয় নম্বর ফরম্যাট, মুদ্রা ফরম্যাট, তারিখ ফরম্যাট ইত্যাদি কাস্টমাইজ করতে পারেন।

JasperReports-এ I18N সঠিকভাবে প্রয়োগ করতে হলে আপনাকে নিচের পদক্ষেপগুলি অনুসরণ করতে হবে:


1. Resource Bundle (Properties File)

JasperReports-এ আন্তর্জাতিকীকরণের জন্য Resource Bundles ব্যবহার করা হয়। Resource Bundles সাধারণত .properties ফাইল হিসেবে সংরক্ষিত থাকে এবং এতে বিভিন্ন ভাষায় প্রয়োজনীয় টেক্সট সংরক্ষিত থাকে। এগুলো রিপোর্টে ব্যবহৃত static text এবং dynamic text পরিবর্তন করার জন্য ব্যবহার করা হয়।

Step 1: Resource Bundle ফাইল তৈরি করা

প্রথমে, আপনি properties ফাইল তৈরি করবেন যা বিভিন্ন ভাষায় প্রয়োজনীয় strings ধারণ করবে। উদাহরণস্বরূপ, একটি ইংরেজি এবং একটি বাংলা resource bundle ফাইল তৈরি করা যায়।

English.properties:

report.title=Sales Report
report.customer=Customer
report.date=Date

Bengali.properties:

report.title=বিক্রয় রিপোর্ট
report.customer=গ্রাহক
report.date=তারিখ

Step 2: JRXML ফাইলে Resource Bundle ব্যবহার করা

JRXML ফাইলের মধ্যে text এবং labels পরিবর্তন করার জন্য আপনি Resource Bundle এর মান ব্যবহার করতে পারেন।

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
    http://jasperreports.sourceforge.net/xsd/jasperreport.xsd">
    
    <!-- Load Resource Bundle -->
    <parameter name="ReportTitle" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["net/sf/jasperreports/engine/resources/English"]]></defaultValueExpression>
    </parameter>

    <title>
        <band height="50">
            <staticText>
                <reportElement x="0" y="0" width="515" height="50"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$R{report.title}]]></text> <!-- Using resource bundle key -->
            </staticText>
        </band>
    </title>

</jasperReport>

এখানে, $R{report.title} ব্যবহার করা হয়েছে যা Resource Bundle থেকে "Sales Report" বা "বিক্রয় রিপোর্ট" ইনপুট হিসাবে ব্যবহার করবে, ভাষা অনুযায়ী।


2. Locale Settings

JasperReports এ Locale সেট করার মাধ্যমে আপনি কোন ভাষার resource bundle ফাইলটি লোড হবে তা নির্ধারণ করতে পারেন। Locale একটি Java ক্লাস যা নির্দিষ্ট অঞ্চলের ভাষা, তারিখ ফরম্যাট, মুদ্রা ফরম্যাট ইত্যাদি পরিচালনা করে।

Step 1: Locale সেট করা

import net.sf.jasperreports.engine.*;
import java.util.*;

public class LocaleExample {
    public static void main(String[] args) {
        try {
            // Set locale to Bengali (Bangladesh)
            Locale locale = new Locale("bn", "BD");  // Bengali, Bangladesh
            ResourceBundle bundle = ResourceBundle.getBundle("net.sf.jasperreports.engine.resources.Bengali", locale);
            
            // Prepare parameters
            Map<String, Object> parameters = new HashMap<>();
            parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, bundle);

            // Compile the report
            JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");

            // Fill the report with data
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());

            // Export to PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "output/bengali_sales_report.pdf");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

এখানে, Locale bn_BD (বাংলা, বাংলাদেশ) সেট করা হয়েছে এবং সেই অনুযায়ী Bengali.properties ফাইলটি লোড হবে।


3. Number, Currency, and Date Format

Internationalization এর মধ্যে number formatting, currency formatting, এবং date formatting খুবই গুরুত্বপূর্ণ। JasperReports এই ফরম্যাটিংগুলোর জন্য Locale ব্যবহার করে।

Example: Date Format Based on Locale

<textField>
    <reportElement x="0" y="0" width="170" height="30"/>
    <textElement fontSize="12"/>
    <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("dd/MM/yyyy").format($F{dateField})]]></textFieldExpression>
</textField>

এখানে SimpleDateFormat ব্যবহার করা হয়েছে যা locale অনুসারে date format প্রদর্শন করবে।

Example: Currency Format Based on Locale

<textField>
    <reportElement x="0" y="0" width="170" height="30"/>
    <textElement fontSize="12"/>
    <textFieldExpression><![CDATA[
        new java.text.NumberFormat.getCurrencyInstance(new java.util.Locale("en", "US")).format($F{amount})
    ]]></textFieldExpression>
</textField>

এখানে, currency format Locale-এর উপর ভিত্তি করে পরিবর্তিত হবে (যেমন: USD, INR ইত্যাদি)।


4. Font and Layout Customization

প্রতিটি ভাষার জন্য ভিন্ন font এবং layout ব্যবহার করা যেতে পারে। যেমন, right-to-left ভাষার (যেমন: আরবি, হিব্রু) জন্য RTL ফন্ট এবং লেআউট ব্যবহার করা উচিত।

RTL Layout Example:

<textElement textAlignment="Right"/>
<textField>
    <reportElement x="0" y="0" width="170" height="30"/>
    <textElement fontSize="12" isBold="true"/>
    <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>

এখানে, textAlignment="Right" ব্যবহার করে রিপোর্টের টেক্সট right-to-left আউটপুট হবে।


Internationalization (I18N) JasperReports-এ রিপোর্টের ভাষা এবং অন্যান্য সাংস্কৃতিক সেটিংস কাস্টমাইজ করার জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি নিশ্চিত করে যে আপনার রিপোর্ট বিভিন্ন ভাষায় এবং দেশের অবস্থান অনুসারে সঠিকভাবে প্রদর্শিত হবে।

  • Resource Bundle ব্যবহার করে আপনি রিপোর্টের static text বিভিন্ন ভাষায় কাস্টমাইজ করতে পারেন।
  • Locale সেট করে আপনি রিপোর্টের মধ্যে language-specific formatting (যেমন: তারিখ, মুদ্রা, সংখ্যা) প্রয়োগ করতে পারেন।
  • Fonts এবং layout কাস্টমাইজ করে আপনি বিভিন্ন ভাষার জন্য উপযুক্ত ডিজাইন তৈরি করতে পারেন।

এই সমস্ত কৌশল JasperReports-এ internationalized reports তৈরি করতে সাহায্য করে, যা বৈশ্বিক বাজারে রিপোর্টের অ্যাপ্লিকেশনকে আরও সহজলভ্য এবং ব্যবহারযোগ্য করে তোলে।

Content added By

JasperReports একটি আন্তর্জাতিককরণ (i18n) সমর্থনকারী রিপোর্টিং টুল, যা Multiple Language Support প্রদান করতে সক্ষম। এটি Properties files ব্যবহার করে dynamic content বা labels বিভিন্ন ভাষায় প্রদর্শন করতে সহায়তা করে। JasperReports রিপোর্টের মধ্যে ভাষার রূপান্তরের জন্য resource bundles ব্যবহার করা হয়, যা properties files-এ সংরক্ষিত থাকে।

এই নিবন্ধে, আমরা JasperReports-এ Multiple Language Support কিভাবে কার্যকরভাবে সেটআপ করতে হয় তা দেখব, এবং কীভাবে properties files ব্যবহার করে একাধিক ভাষায় রিপোর্টের কন্টেন্ট প্রদর্শন করা যায়।


Multiple Language Support in JasperReports

Multiple Language Support কনফিগার করার জন্য প্রধানত দুটি উপায় রয়েছে:

  1. Properties Files ব্যবহার করা
  2. JasperReports Parameters এর মাধ্যমে ভাষা নির্ধারণ করা

এই দুটি উপায় ব্যবহার করে আপনি JasperReports রিপোর্টের labels, messages, এবং অন্যান্য টেক্সট কাস্টমাইজ করতে পারেন যাতে এটি বিভিন্ন ভাষায় প্রদর্শিত হয়।


1. Properties Files তৈরি করা

প্রথমেই আপনাকে একটি properties file তৈরি করতে হবে, যেখানে আপনি বিভিন্ন ভাষার জন্য কন্টেন্ট সংরক্ষণ করবেন। প্রতিটি ভাষার জন্য আলাদা properties file তৈরি করা হয়। উদাহরণস্বরূপ, আপনি English, Spanish, এবং French ভাষার জন্য আলাদা ফাইল তৈরি করতে পারেন।

Example: English (messages_en.properties)

report.title=Employee Report
report.column.name=Employee Name
report.column.age=Employee Age
report.column.salary=Employee Salary

Example: Spanish (messages_es.properties)

report.title=Informe de Empleados
report.column.name=Nombre del Empleado
report.column.age=Edad del Empleado
report.column.salary=Salario del Empleado

Example: French (messages_fr.properties)

report.title=Rapport des Employés
report.column.name=Nom de l'employé
report.column.age=Âge de l'employé
report.column.salary=Salaire de l'employé

এই properties files-এ আপনার রিপোর্টের বিভিন্ন টেক্সট কন্টেন্ট (যেমন শিরোনাম, কলাম লেবেল ইত্যাদি) সংরক্ষণ করা হয়, এবং আপনি যে ভাষায় রিপোর্ট তৈরি করতে চান, সেই অনুযায়ী প্রপার্টি ফাইল নির্বাচন করা হবে।


2. JRXML ফাইলে Properties ফাইল রেফারেন্স করা

আপনি JasperReports এর JRXML ফাইলে resource bundle ব্যবহার করে ভাষার রূপান্তরের জন্য properties files রেফারেন্স করতে পারেন।

JRXML ফাইলের মধ্যে Resource Bundle ব্যবহার করা

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
              http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
              name="EmployeeReport" language="java" pageWidth="595" pageHeight="842" 
              columnWidth="515" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

    <!-- Resource Bundle for Localization -->
    <property name="net.sf.jasperreports.default.locale" value="en"/>
    <property name="net.sf.jasperreports.resource.bundle" value="messages"/>

    <!-- Title -->
    <title>
        <band height="50">
            <staticText>
                <reportElement x="0" y="0" width="515" height="50"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$R{report.title}]]></text>
            </staticText>
        </band>
    </title>

    <!-- Column Header -->
    <columnHeader>
        <band height="30">
            <staticText>
                <reportElement x="0" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$R{report.column.name}]]></text>
            </staticText>
            <staticText>
                <reportElement x="170" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$R{report.column.age}]]></text>
            </staticText>
            <staticText>
                <reportElement x="340" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$R{report.column.salary}]]></text>
            </staticText>
        </band>
    </columnHeader>

    <!-- Detail -->
    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="170" height="20"/>
                <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="170" y="0" width="170" height="20"/>
                <textFieldExpression><![CDATA[$F{employee_age}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="340" y="0" width="170" height="20"/>
                <textFieldExpression><![CDATA[$F{employee_salary}]]></textFieldExpression>
            </textField>
        </band>
    </detail>

</jasperReport>

এখানে:

  • $R{report.title}: resource bundle থেকে report.title প্রপার্টি লোড করবে।
  • $R{report.column.name}, $R{report.column.age}, এবং $R{report.column.salary}: এগুলি properties files থেকে কলাম নাম নিয়ে আসবে।

Important Notes:

  • $R{key} সিনট্যাক্স ব্যবহার করে আপনি properties file এর মধ্যে থাকা যেকোনো প্রপার্টির মান রিপোর্টে লোড করতে পারেন।
  • net.sf.jasperreports.resource.bundle প্রপার্টি ব্যবহার করে আপনি resource bundle রেফারেন্স করবেন (যেমন messages), যেখানে messages.properties ফাইলটি রিপোর্টের ল্যাঙ্গুয়েজ অনুযায়ী কন্টেন্ট রেন্ডার করবে।

3. Java কোডের মাধ্যমে Properties File নির্বাচন করা

আপনি চাইলে Java কোডের মাধ্যমে locale পরিবর্তন করতে পারেন, এবং এটি properties file পরিবর্তন করে রিপোর্টের ভাষা কাস্টমাইজ করা যাবে।

Java Example: Setting Locale and Resource Bundle Dynamically

import net.sf.jasperreports.engine.*;
import java.util.*;

public class JasperReportLocalization {
    public static void main(String[] args) {
        try {
            // Compile the report
            JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");

            // Set the locale dynamically
            Locale locale = new Locale("es", "ES");  // For Spanish
            Map<String, Object> parameters = new HashMap<>();
            parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, ResourceBundle.getBundle("messages", locale));

            // Fill the report with data
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());

            // Export the report to PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "output/spanish_report.pdf");

            System.out.println("Report generated successfully in Spanish!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • Locale locale = new Locale("es", "ES"): ভাষা পরিবর্তন করতে ব্যবহৃত হয়।
  • ResourceBundle.getBundle("messages", locale): এটি messages.properties ফাইলের সঠিক ভাষার কন্টেন্ট লোড করবে।

4. Multi-language Support with JasperReports Studio

JasperReports Studio-এ আপনি multiple language support খুব সহজেই সেটআপ করতে পারেন:

  1. JRXML File তৈরি করুন।
  2. Resource Bundle নির্বাচন করুন (যেমন: messages), যাতে এটি properties ফাইল থেকে localized text পেতে পারে।
  3. Locale পরিবর্তন করতে, parameters যোগ করুন যাতে আপনি ভাষার উপর ভিত্তি করে রিপোর্ট কাস্টমাইজ করতে পারেন।

  • JasperReports ব্যবহার করে multiple language support সেটআপ করার জন্য properties files একটি শক্তিশালী এবং সহজ উপায়।
  • আপনি JRXML ফাইলে resource bundle ব্যবহার করে রিপোর্টের কন্টেন্ট বিভিন্ন ভাষায় রেন্ডার করতে পারেন।
  • Java কোডের মাধ্যমে locale এবং resource bundle dynamically পরিবর্তন করে আপনি রিপোর্টের ভাষা কাস্টমাইজ করতে পারবেন।
  • এটি internationalization (i18n) এবং localization (l10n) প্রক্রিয়ায় সহায়ক, বিশেষ করে যখন আপনার রিপোর্টে একাধিক ভাষায় কন্টেন্ট দেখানো প্রয়োজন হয়।
Content added By

JasperReports-এ locale management হল এমন একটি প্রক্রিয়া, যার মাধ্যমে আপনি ব্যবহারকারীর ভাষা এবং অঞ্চলের (locale) উপর ভিত্তি করে রিপোর্টের কনটেন্ট কাস্টমাইজ করতে পারেন। এটি একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার বিশেষ করে যখন আপনি multi-language রিপোর্ট তৈরি করতে চান বা আপনার রিপোর্টের কনটেন্টকে region-specific ভাষায় প্রদর্শন করতে চান।

এই নিবন্ধে, আমরা JasperReports-এ dynamic locale management ব্যবহার করার পদ্ধতি এবং এর প্রক্রিয়া নিয়ে আলোচনা করব। এর মাধ্যমে আপনি ব্যবহারকারীর locale অনুযায়ী রিপোর্টের কনটেন্ট, যেমন labels, date formats, currency symbols ইত্যাদি কাস্টমাইজ করতে পারবেন।


1. Locale Management Overview

Locale সাধারণত একটি নির্দিষ্ট ভাষা, দেশ বা অঞ্চলের জন্য সংস্কৃতি সম্পর্কিত সেটিংস নির্ধারণ করে, যেমন ভাষা, সময়ের ফরম্যাট, মুদ্রার প্রতীক, সংখ্যা ফরম্যাট ইত্যাদি। JasperReports-এ locale ব্যবহারের মাধ্যমে আপনি রিপোর্টের কনটেন্ট কাস্টমাইজ করতে পারেন, যেমন:

  • Date Format: ব্যবহারকারীর ভাষা অনুযায়ী তারিখের ফরম্যাট পরিবর্তন করা (যেমন: "dd-MM-yyyy" বা "yyyy/MM/dd")।
  • Currency Format: ব্যবহারকারীর অঞ্চলের মুদ্রা প্রতীক প্রদর্শন করা।
  • Text Translation: রিপোর্টের টেক্সট, লেবেল এবং শিরোনাম অনুবাদ করা।

JasperReports locale-sensitive ফিচারের মাধ্যমে আপনার রিপোর্টের কনটেন্টের ভাষা পরিবর্তন এবং কাস্টমাইজ করা সম্ভব।


2. Locale Configuration in JasperReports

JasperReports-এ locale কনফিগার করার জন্য আপনি রিপোর্টের parameters এবং expressions ব্যবহার করতে পারেন, যা আপনার language এবং region-specific কনটেন্ট প্রদর্শন করবে।

Locale Configuration Example in JRXML:

  1. Locale Parameter Definition: রিপোর্টে locale প্যারামিটার ডিফাইন করতে হবে, যার মাধ্যমে আপনার রিপোর্টে language নির্ধারণ করা হবে।
<parameter name="Locale" class="java.util.Locale"/>

এখানে, Locale প্যারামিটারটি Locale class এর মাধ্যমে নির্ধারণ করা হবে, যা ভাষা এবং অঞ্চল নির্ধারণ করবে।

  1. Using Locale in the Report: প্যারামিটার ব্যবহার করে আপনি রিপোর্টের বিভিন্ন অংশে ভাষা কাস্টমাইজ করতে পারেন।
<textField>
    <reportElement x="0" y="0" width="200" height="30"/>
    <textElement>
        <font fontName="Arial" size="14"/>
    </textElement>
    <textFieldExpression><![CDATA[
        new java.text.SimpleDateFormat("dd-MM-yyyy", $P{Locale}).format($F{date})
    ]]></textFieldExpression>
</textField>

এখানে, SimpleDateFormat ক্লাস ব্যবহার করে date ফিল্ডের format নির্ধারণ করা হচ্ছে, এবং Locale প্যারামিটার দ্বারা তারিখের ফরম্যাট কাস্টমাইজ করা হচ্ছে।


3. Locale-based Text Translation

আপনি যদি বিভিন্ন ভাষার জন্য dynamic text translation করতে চান, তবে JasperReports properties files ব্যবহার করে কাস্টম টেক্সট তৈরি করতে পারে। আপনি একটি resource bundle তৈরি করতে পারেন, যেখানে প্রতিটি ভাষার জন্য টেক্সট থাকবে এবং আপনার রিপোর্টে সেই ভাষার কন্টেন্ট প্রিন্ট হবে।

Example: Resource Bundle for Text Translation

  1. Create Property Files for Translations: বিভিন্ন ভাষার জন্য আলাদা property files তৈরি করুন, যেমন messages_en.properties, messages_fr.properties ইত্যাদি।

messages_en.properties (English):

report.title=Employee Report
column.name=Name
column.age=Age

messages_fr.properties (French):

report.title=Rapport des employés
column.name=Nom
column.age=Âge
  1. Use Resource Bundle in JRXML: এরপর, JRXML ফাইলে আপনি resource bundle ব্যবহার করতে পারেন এবং locale প্যারামিটার দ্বারা সঠিক ভাষা নির্বাচন করতে পারেন।
<parameter name="ResourceBundle" class="java.util.ResourceBundle"/>
<parameter name="Locale" class="java.util.Locale"/>

<textField>
    <reportElement x="0" y="0" width="200" height="30"/>
    <textElement>
        <font fontName="Arial" size="14"/>
    </textElement>
    <textFieldExpression><![CDATA[
        $P{ResourceBundle}.getString("report.title")
    ]]></textFieldExpression>
</textField>

এখানে, getString("report.title") ব্যবহার করা হয়েছে, যা resource bundle থেকে সঠিক ভাষার টেক্সট নিয়ে আসবে।


4. Setting Locale Dynamically in Java Code

আপনি JasperReports-এ locale এবং resource bundle ডাইনামিকভাবে Java code থেকে সেট করতে পারেন। এভাবে ব্যবহারকারী ইনপুট অনুযায়ী রিপোর্টের ভাষা পরিবর্তন করতে পারবেন।

Setting Locale in Java Code:

import net.sf.jasperreports.engine.*;
import java.util.*;

public class LocaleDrivenReport {
    public static void main(String[] args) {
        try {
            // Set the locale based on user input (e.g., en_US for English, fr_FR for French)
            Locale userLocale = new Locale("en", "US"); // or new Locale("fr", "FR")
            ResourceBundle resourceBundle = ResourceBundle.getBundle("messages", userLocale);

            // Define parameters including the locale
            Map<String, Object> parameters = new HashMap<>();
            parameters.put("Locale", userLocale);
            parameters.put("ResourceBundle", resourceBundle);

            // Compile the report
            JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");

            // Fill the report with data
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());

            // Export the report to PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");

            System.out.println("Report generated successfully!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

এখানে, Locale প্যারামিটার এবং ResourceBundle ব্যবহার করা হয়েছে যা userLocale দ্বারা সেট করা হচ্ছে। আপনি Locale সেট করার জন্য ব্যবহারকারীর ভাষা বা অঞ্চলের ভিত্তিতে সেট করতে পারেন।


5. Formatting Numbers and Dates Based on Locale

Locale-based formatting ব্যবহার করে আপনি numbers, currencies, এবং dates কাস্টমাইজ করতে পারেন।

Number Formatting Example:

<textField>
    <reportElement x="0" y="0" width="200" height="30"/>
    <textElement fontSize="14"/>
    <textFieldExpression><![CDATA[
        java.text.NumberFormat.getCurrencyInstance($P{Locale}).format($F{salary})
    ]]></textFieldExpression>
</textField>

এখানে, getCurrencyInstance() ব্যবহার করে salary ফিল্ডের মানের মুদ্রা প্রতীক এবং ফরম্যাট Locale অনুযায়ী পরিবর্তিত হবে।

Date Formatting Example:

<textField>
    <reportElement x="0" y="0" width="200" height="30"/>
    <textElement fontSize="14"/>
    <textFieldExpression><![CDATA[
        new java.text.SimpleDateFormat("yyyy-MM-dd", $P{Locale}).format($F{hire_date})
    ]]></textFieldExpression>
</textField>

এখানে, SimpleDateFormat ব্যবহার করে hire_date ফিল্ডের তারিখের ফরম্যাট Locale অনুযায়ী কাস্টমাইজ করা হচ্ছে।


  • JasperReports-এ dynamic locale management ব্যবহার করে আপনি রিপোর্টের কনটেন্টের ভাষা এবং ফরম্যাট কাস্টমাইজ করতে পারেন।
  • Locale প্যারামিটার ব্যবহার করে আপনি রিপোর্টের language, date formats, currency symbols ইত্যাদি পরিবর্তন করতে পারেন।
  • Resource bundle এবং locale-based formatting ব্যবহার করে text translation, number formatting, currency formatting, এবং date formatting কাস্টমাইজ করা সম্ভব।
  • User-driven Reports তৈরির জন্য JasperReports আপনার রিপোর্টের locale ডাইনামিকভাবে পরিচালনা করতে এবং ব্যবহারকারীর ইনপুট অনুযায়ী রিপোর্ট কাস্টমাইজ করতে সাহায্য করে।
Content added By

JasperReports-এ text translation এবং text formatting ব্যবহার করে আপনি আন্তর্জাতিকীকরণ (i18n) এবং স্থানীয়করণ (l10n) সমর্থন করতে পারেন, যা বিভিন্ন ভাষায় রিপোর্ট তৈরি এবং প্রদর্শন করতে সহায়ক। এছাড়াও, text formatting ব্যবহার করে আপনি রিপোর্টে টেক্সটের ভিজ্যুয়াল প্রদর্শন কাস্টমাইজ করতে পারেন, যেমন ফন্ট সাইজ, স্টাইল, অ্যালাইনমেন্ট ইত্যাদি।

এই নিবন্ধে, আমরা JasperReports-এ text translation এবং text formatting এর কাস্টমাইজেশন নিয়ে বিস্তারিত আলোচনা করব।


1. Text Translation in JasperReports

Text Translation হল ব্যবহারকারীর ভাষার ভিত্তিতে রিপোর্টের টেক্সট পরিবর্তন করার প্রক্রিয়া। এটি মূলত i18n এবং l10n নিশ্চিত করতে ব্যবহৃত হয়, যেমন রিপোর্টের টেক্সট ব্যবহারকারীর নির্বাচিত ভাষায় প্রদর্শন করা।

JasperReports-এ Text Translation এর জন্য কনফিগারেশন:

  1. Resource Bundle ব্যবহার করে, আপনি বিভিন্ন ভাষার জন্য translated text রাখতে পারেন।
  2. TextField বা StaticText-এ Resource Bundle থেকে প্যারামিটার পাঠানো হয়, যাতে টেক্সট ভাষা অনুযায়ী পরিবর্তিত হয়।

Step 1: Create a Resource Bundle (Properties Files)

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

English (messages_en.properties):

reportTitle=Employee Report
nameLabel=Name
ageLabel=Age

Spanish (messages_es.properties):

reportTitle=Informe de empleados
nameLabel=Nombre
ageLabel=Edad

Step 2: Define Parameters in JRXML

এখন JRXML ফাইলের মধ্যে Resource Bundle ব্যবহার করে টেক্সট যোগ করুন।

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
                                  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
              name="EmployeeReport" language="java" pageWidth="595" pageHeight="842"
              columnWidth="515" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    
    <!-- Set the resource bundle for text translation -->
    <parameter name="RESOURCE_BUNDLE" class="java.util.ResourceBundle"/>
    
    <!-- Title -->
    <title>
        <band height="50">
            <staticText>
                <reportElement x="0" y="0" width="515" height="50"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("reportTitle")]]></text>
            </staticText>
        </band>
    </title>

    <!-- Column Header -->
    <columnHeader>
        <band height="30">
            <staticText>
                <reportElement x="0" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("nameLabel")]]></text>
            </staticText>
            <staticText>
                <reportElement x="170" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("ageLabel")]]></text>
            </staticText>
        </band>
    </columnHeader>

    <!-- Detail -->
    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="170" height="20"/>
                <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="170" y="0" width="170" height="20"/>
                <textFieldExpression><![CDATA[$F{employee_age}]]></textFieldExpression>
            </textField>
        </band>
    </detail>

</jasperReport>

Step 3: Pass Resource Bundle and Locale in Java Code

রিপোর্টে locale এবং resource bundle পাস করার জন্য Java কোডে নিম্নলিখিত কনফিগারেশন যুক্ত করুন।

import net.sf.jasperreports.engine.*;
import java.util.*;
import java.util.Locale;

public class ReportGenerator {
    public static void main(String[] args) {
        try {
            // Define Locale (e.g., Spanish)
            Locale locale = new Locale("es", "ES");

            // Load the ResourceBundle for the selected locale
            ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);

            // Parameters
            Map<String, Object> parameters = new HashMap<>();
            parameters.put("RESOURCE_BUNDLE", bundle);

            // Compile the report
            JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");

            // Fill the report with data
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());

            // Export the report to PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");

            System.out.println("Report generated successfully!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • ResourceBundle: messages_en.properties বা messages_es.properties ফাইল থেকে অনুবাদকৃত টেক্সটগুলো পাচ্ছে।
  • Locale: এই সেটিংটি নির্ধারণ করে কোন ভাষা ব্যবহার হবে (ইংরেজি, স্প্যানিশ ইত্যাদি)।
  • Text Elements: JRXML ফাইলে, $P{RESOURCE_BUNDLE}.getString("key") দিয়ে ফাইল থেকে টেক্সট অনুবাদ করা হচ্ছে।

2. Text Formatting in JasperReports

Text Formatting JasperReports-এ টেক্সটের ভিজ্যুয়াল প্রেজেন্টেশন কাস্টমাইজ করতে ব্যবহৃত হয়। আপনি টেক্সটের font, size, color, alignment, bold, italic, underline ইত্যাদি পরিবর্তন করতে পারেন।

Text Formatting Examples:

Font Customization (Font Size, Color, and Style):
<textField>
    <reportElement x="0" y="0" width="170" height="20"/>
    <textElement fontSize="12" fontName="Arial" isBold="true" isItalic="true" isUnderline="true" forecolor="#FF5733"/>
    <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
  • fontSize: ফন্টের আকার (এখানে 12px)।
  • fontName: ফন্টের নাম (এখানে Arial)।
  • isBold: টেক্সটকে bold করার জন্য।
  • isItalic: টেক্সটকে italic করার জন্য।
  • isUnderline: টেক্সটকে underline করার জন্য।
  • forecolor: টেক্সটের রঙ (এখানে #FF5733 রঙ ব্যবহার করা হয়েছে)।
Text Alignment and Vertical Alignment:
<textField>
    <reportElement x="0" y="0" width="170" height="20"/>
    <textElement textAlignment="Center" verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
  • textAlignment: টেক্সটের অনুভূতি কাস্টমাইজ করতে (যেমন: Left, Center, Right)।
  • verticalAlignment: টেক্সটের উল্লম্ব অবস্থান (যেমন: Top, Middle, Bottom)।
Text Background and Border:
<textField>
    <reportElement x="0" y="0" width="170" height="20"/>
    <textElement backcolor="#FFFF99" isBold="true"/>
    <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
    <textElement>
        <pen lineWidth="1" lineColor="#000000"/>
    </textElement>
</textField>
  • backcolor: টেক্সটের ব্যাকগ্রাউন্ড রঙ কাস্টমাইজ করতে (এখানে #FFFF99 হল হালকা হলুদ)।
  • pen: টেক্সটের চারপাশে সীমানা তৈরি করতে।

3. Combining Text Translation and Formatting

আপনি text translation এবং text formatting একসঙ্গে ব্যবহার করে একটি আরও উন্নত রিপোর্ট তৈরি করতে পারেন, যা ব্যবহারকারীর ভাষা এবং প্রয়োজন অনুযায়ী কাস্টমাইজড হবে।

Example of Combining Both Translation and Formatting:

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
                                  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
              name="EmployeeReport" language="java" pageWidth="595" pageHeight="842"
              columnWidth="515" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

    <parameter name="RESOURCE_BUNDLE" class="java.util.ResourceBundle"/>

    <!-- Title -->
    <title>
        <band height="50">
            <staticText>
                <reportElement x="0" y="0" width="515" height="50"/>
                <textElement textAlignment="Center" verticalAlignment="Middle" fontSize="14" isBold="true"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("reportTitle")]]></text>
            </staticText>
        </band>
    </title>

    <!-- Column Header -->
    <columnHeader>
        <band height="30">
            <staticText>
                <reportElement x="0" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle" fontSize="12" isBold="true"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("nameLabel")]]></text>
            </staticText>
            <staticText>
                <reportElement x="170" y="0" width="170" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle" fontSize="12" isBold="true"/>
                <text><![CDATA[$P{RESOURCE_BUNDLE}.getString("ageLabel")]]></text>
            </staticText>
        </band>
    </columnHeader>

    <!-- Detail -->
    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="170" height="20"/>
                <textElement fontSize="10" isBold="false"/>
                <textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="170" y="0" width="170" height="20"/>
                <textElement fontSize="10" isBold="false"/>
                <textFieldExpression><![CDATA[$F{employee_age}]]></textFieldExpression>
            </textField>
        </band>
    </detail>

</jasperReport>

এখানে, আপনি translation এবং formatting একসঙ্গে ব্যবহার করছেন, যেখানে রিপোর্টের শিরোনাম, কলাম হেডার এবং ডেটার ফরম্যাটিং সবই প্যারামিটার এবং ভাষার উপর ভিত্তি করে কাস্টমাইজড।


  • Text Translation এবং Text Formatting JasperReports-এ আন্তর্জাতিকীকরণ এবং স্থানীয়করণ সক্ষম করতে ব্যবহৃত হয়।
  • আপনি ResourceBundle ব্যবহার করে বিভিন্ন ভাষায় টেক্সট ট্রান্সলেট করতে পারেন এবং font, size, alignment,

color, bold, italic, underline ইত্যাদি ব্যবহার করে টেক্সট ফরম্যাট করতে পারেন।

  • এই দুইটি ফিচার একসঙ্গে ব্যবহার করে আপনি আন্তর্জাতিকীকরণ এবং স্থানীয়করণ নিশ্চিত করতে পারেন, যা ব্যবহারকারীদের জন্য আরও উন্নত এবং কাস্টমাইজড রিপোর্ট তৈরি করতে সহায়ক।
Content added By
Promotion

Are you sure to start over?

Loading...