জাভা ResourceBundle ক্লাস ব্যবহার করে স্থানীয়করণ (Localization) বা আন্তর্জাতিককরণ (Internationalization) সহজে করা সম্ভব। এটি এমন একটি মেকানিজম যা বিভিন্ন ভাষার জন্য রিসোর্স যেমন স্ট্রিং, তারিখ, সংখ্যা ইত্যাদি সংরক্ষণ এবং লোড করার জন্য ব্যবহৃত হয়। ResourceBundle.Control ক্লাসটি ResourceBundle লোড করার নিয়ন্ত্রণ এবং কাস্টমাইজেশনের জন্য ব্যবহৃত হয়।
ResourceBundle.Control এর ভূমিকা:
ResourceBundle.Control একটি কন্ট্রোলার ক্লাস যা ResourceBundle লোড করার প্রক্রিয়াকে কাস্টমাইজ করতে সহায়ক। এর মাধ্যমে আপনি বিভিন্ন কনফিগারেশন সেট করতে পারেন যেমন:
- কিভাবে ফাইল সনাক্ত করা হবে।
- লোকেল এবং রিসোর্স ফাইলের নাম কিভাবে নির্বাচিত হবে।
- কিভাবে
ResourceBundleলোড করা হবে।
এই কন্ট্রোলের মাধ্যমে আপনি রিসোর্স বান্ডলের লোড প্রক্রিয়া কাস্টমাইজ করতে পারেন, বিশেষত যদি আপনি কাস্টম ফাইল ফরম্যাট ব্যবহার করতে চান বা রিসোর্স ফাইলগুলিকে বিভিন্নভাবে লোড করতে চান।
ResourceBundle.Control এর প্রধান পদ্ধতিগুলি:
- getFormats(String baseName):
- এটি রিটার্ন করে রিসোর্স ফাইলের ফরম্যাটের একটি তালিকা (যেমন:
.properties,.xml)।
- এটি রিটার্ন করে রিসোর্স ফাইলের ফরম্যাটের একটি তালিকা (যেমন:
- getBundle(String baseName, Locale locale, ClassLoader loader, Control control):
- এটি রিটার্ন করে উপযুক্ত
ResourceBundleযেটি নির্দিষ্টbaseNameএবংlocaleঅনুযায়ী লোড করা হয়েছে।
- এটি রিটার্ন করে উপযুক্ত
- getFallbackLocale(String baseName, Locale locale):
- এটি ব্যাকআপ লোকেল প্রদান করে যদি নির্দিষ্ট লোকেলটি পাওয়া না যায়।
- newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload):
- এই পদ্ধতি রিসোর্স ফাইলটি লোড করতে ব্যবহৃত হয় এবং এটি কাস্টম লোডিং পদ্ধতি সংজ্ঞায়িত করতে পারে। এটি কাস্টম ফাইল ফরম্যাট বা নির্দিষ্ট ফাইল লোকেশনের জন্য ব্যবহার করা যেতে পারে।
উদাহরণ:
ধরা যাক আপনি একটি কাস্টম ResourceBundle.Control তৈরি করতে চান যা .xml ফাইল থেকে রিসোর্স লোড করবে। নিচে একটি উদাহরণ দেয়া হলো:
import java.util.*;
import java.io.*;
import java.nio.file.*;
public class CustomControl extends ResourceBundle.Control {
// এই মেথডটি আমাদের রিসোর্স ফাইলের ফরম্যাট নির্ধারণ করবে
@Override
public List<String> getFormats(String baseName) {
return Arrays.asList("xml");
}
// এই মেথডটি আমাদের নির্দিষ্ট লোকেল অনুযায়ী রিসোর্স ফাইল লোড করতে ব্যবহৃত হবে
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException {
// এখানে আমরা কাস্টম XML ফাইল লোড করার জন্য কোড লিখব
if (format.equals("xml")) {
String bundleName = baseName.replace('.', '/') + "_" + locale + ".xml";
InputStream stream = loader.getResourceAsStream(bundleName);
if (stream != null) {
return new XMLResourceBundle(stream);
}
}
return super.newBundle(baseName, locale, format, loader, reload);
}
public static void main(String[] args) {
// আমাদের কাস্টম Control ক্লাস ব্যবহার করে ResourceBundle লোড করা
ResourceBundle.Control control = new CustomControl();
ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.US, control);
// রিসোর্স ফাইল থেকে স্ট্রিং লোড করা
System.out.println(bundle.getString("greeting"));
}
}
এই কোডের কার্যকারিতা:
- getFormats: এই মেথডটি শুধুমাত্র "xml" ফরম্যাটে ফাইলের তালিকা প্রদান করবে।
- newBundle: এই মেথডটি
ResourceBundleলোড করার জন্য কাস্টম লজিক বাস্তবায়ন করে। এখানে আমরা XML ফাইল থেকে রিসোর্স লোড করার জন্য একটি কাস্টম পদ্ধতি ব্যবহার করেছি। - XMLResourceBundle: XML ফাইলের মধ্যে রিসোর্স লোড করার জন্য আপনি একটি কাস্টম
ResourceBundleক্লাস তৈরি করতে পারেন, যা XML ফাইল থেকে ডেটা পড়বে।
এটি কাস্টম রিসোর্স ফরম্যাট এবং বিশেষ ফাইল পাথ ব্যবহার করার জন্য অত্যন্ত উপকারী।
ResourceBundle.Control ব্যবহার করে আপনি ResourceBundle লোড করার প্রক্রিয়া কাস্টমাইজ করতে পারেন এবং কাস্টম ফরম্যাট, ফাইল লোকেশন, এবং রিসোর্স লোড করার জন্য অন্যান্য কাস্টম পদ্ধতি তৈরি করতে পারেন। এটি আন্তর্জাতিককরণ এবং স্থানীয়করণের ক্ষেত্রে আরও ফ্লেক্সিবিলিটি প্রদান করে, বিশেষ করে যখন আপনার বিভিন্ন ধরনের ফাইল বা ফরম্যাট ব্যবহার করার প্রয়োজন হয়।
Read more