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 তৈরি করতে সাহায্য করে, যা বৈশ্বিক বাজারে রিপোর্টের অ্যাপ্লিকেশনকে আরও সহজলভ্য এবং ব্যবহারযোগ্য করে তোলে।
Read more