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:
- Locale Parameter Definition: রিপোর্টে locale প্যারামিটার ডিফাইন করতে হবে, যার মাধ্যমে আপনার রিপোর্টে language নির্ধারণ করা হবে।
<parameter name="Locale" class="java.util.Locale"/>
এখানে, Locale প্যারামিটারটি Locale class এর মাধ্যমে নির্ধারণ করা হবে, যা ভাষা এবং অঞ্চল নির্ধারণ করবে।
- 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
- 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
- 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 ডাইনামিকভাবে পরিচালনা করতে এবং ব্যবহারকারীর ইনপুট অনুযায়ী রিপোর্ট কাস্টমাইজ করতে সাহায্য করে।
Read more