i18n (Internationalization) একটি গুরুত্বপূর্ণ প্রক্রিয়া যা জাভা অ্যাপ্লিকেশনকে বিভিন্ন ভাষা এবং অঞ্চল ভিত্তিক কনফিগারেশন সমর্থন করতে সাহায্য করে। যখন আপনি একটি RESTful Web Service তৈরি করেন, যেখানে একাধিক ভাষায় তথ্য প্রদান করার প্রয়োজন হয়, তখন আপনার সার্ভিসটি আন্তর্জাতিককরণের জন্য উপযুক্ত হতে হবে। এই প্রক্রিয়ায় আপনাকে RESTful Web Services-এ Localization এবং Internationalization কনফিগার করতে হবে যাতে ব্যবহারকারী তার স্থানীয় ভাষায় ডেটা পায়।
i18n এর জন্য RESTful Web Services Configuration:
RESTful Web Services সাধারণত HTTP প্রোটোকলের উপর ভিত্তি করে কাজ করে এবং এই সার্ভিসগুলো ক্লায়েন্টদের বিভিন্ন ফরম্যাটে (যেমন JSON, XML) তথ্য প্রদান করতে সক্ষম। আন্তর্জাতিককরণ (i18n) এর জন্য বিভিন্ন কৌশল অবলম্বন করা যায়।
i18n সমর্থন করার জন্য RESTful Web Service কনফিগারেশন স্টেপস:
Locale ভিত্তিক রিসোর্স কনফিগারেশন:
- RESTful Web Service সার্ভিসে সাধারণত একাধিক ভাষা সমর্থন করার জন্য
Localeহেডার ব্যবহার করা হয়। - ক্লায়েন্ট (যেমন ব্রাউজার বা মোবাইল অ্যাপ্লিকেশন) থেকে প্রাপ্ত
Accept-Languageহেডার অনুযায়ী সার্ভার অনুরোধটি প্রসেস করে এবং উপযুক্ত ভাষার ডেটা রিটার্ন করে।
উদাহরণ:
@Path("/messages") public class MessageService { @GET @Path("/greeting") @Produces(MediaType.APPLICATION_JSON) public Response getGreeting(@HeaderParam("Accept-Language") String language) { Locale locale = new Locale(language); ResourceBundle bundle = ResourceBundle.getBundle("messages", locale); String greeting = bundle.getString("greeting"); return Response.ok(new Message(greeting)).build(); } }- এখানে,
Accept-Languageহেডারটি সার্ভিসকে বলে দেয় যে ক্লায়েন্ট কোন ভাষায় ডেটা চায়, এবং তার ভিত্তিতেResourceBundleথেকে উপযুক্ত ভাষায় তথ্য প্রদান করা হয়।
- RESTful Web Service সার্ভিসে সাধারণত একাধিক ভাষা সমর্থন করার জন্য
Resource Bundles ব্যবহার:
- RESTful Web Services-এ
ResourceBundleব্যবহার করা হয় স্থানিক ডেটা এবং ভাষার অনুবাদ লোড করার জন্য। .propertiesফাইল ব্যবহার করে বিভিন্ন ভাষায় অনুবাদ সংরক্ষণ করা হয়, যেমন:messages_en.properties(ইংরেজি)messages_fr.properties(ফরাসি)messages_de.properties(জার্মান)
উদাহরণ:
messages_en.properties:greeting=Hello, World!messages_fr.properties:greeting=Bonjour le monde!- সার্ভার তখন ভাষার ওপর নির্ভর করে সঠিক স্ট্রিং নির্বাচন করে পাঠাবে।
- RESTful Web Services-এ
Locale Based Content Rendering:
- RESTful Web Service সার্ভিসে কন্টেন্ট রেন্ডারিং
Localeঅনুযায়ী করা যেতে পারে। উদাহরণস্বরূপ, আপনি যদি কোনো তারিখ বা সময়ের ডেটা পাঠান, তাহলে তা স্থানীয় অঞ্চলের নিয়ম অনুসারে ফরম্যাট করতে হবে।
উদাহরণ:
@GET @Path("/date") @Produces(MediaType.APPLICATION_JSON) public Response getDate(@HeaderParam("Accept-Language") String language) { Locale locale = new Locale(language); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, locale); String formattedDate = dateFormat.format(new Date()); return Response.ok(new Message(formattedDate)).build(); }- RESTful Web Service সার্ভিসে কন্টেন্ট রেন্ডারিং
JSON বা XML Response Formatting:
- একাধিক ভাষা সমর্থন করতে, সার্ভিসটি JSON বা XML রেসপন্স ফরম্যাটে ডেটা পাঠায়।
- RESTful Web Services JSON বা XML ফরম্যাটে ডেটা পাঠানোর জন্য
@Producesএবং@Consumesঅ্যানোটেশন ব্যবহার করে থাকে।
উদাহরণ:
@Path("/user") public class UserService { @GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response getUser(@PathParam("id") int id, @HeaderParam("Accept-Language") String language) { Locale locale = new Locale(language); ResourceBundle bundle = ResourceBundle.getBundle("messages", locale); User user = getUserFromDatabase(id); String greeting = bundle.getString("greeting"); user.setGreeting(greeting); return Response.ok(user).build(); } }Exception Handling:
- আপনি যখন আন্তর্জাতিককরণ সাপোর্ট করেন, তখন বিভিন্ন ভাষায় এরর বা এক্সসেপশন মেসেজ প্রদান করতে হবে। এজন্য বিভিন্ন ভাষার এক্সসেপশন মেসেজগুলোর জন্য রিসোর্স ফাইল ব্যবহার করা যেতে পারে।
উদাহরণ:
@GET @Path("/error") @Produces(MediaType.APPLICATION_JSON) public Response throwError(@HeaderParam("Accept-Language") String language) { Locale locale = new Locale(language); ResourceBundle bundle = ResourceBundle.getBundle("errorMessages", locale); String errorMessage = bundle.getString("error.notFound"); return Response.status(Response.Status.NOT_FOUND).entity(new Message(errorMessage)).build(); }- Content Negotiation:
- RESTful Web Services সাধারণত কনটেন্ট নেগোসিয়েশন সাপোর্ট করে, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ভাষা, মিডিয়া টাইপ ইত্যাদির সমঝোতা করে।
- Accept-Language হেডার দিয়ে কনটেন্ট নেগোসিয়েশন করা হয়। এতে সার্ভার জানে যে ক্লায়েন্ট কোন ভাষায় ডেটা চায় এবং সার্ভার সেই ভাষায় উপযুক্ত রেসপন্স প্রদান করে।
Time Zone Handling:
- যদি আপনার API সময় সম্পর্কিত ডেটা প্রদান করে, তবে আপনি তারিখ এবং সময় টাইমজোন অনুযায়ী স্থানিককরণের জন্য Java
TimeZoneএবংZonedDateTimeক্লাস ব্যবহার করতে পারেন। - আপনি
LocaleএবংTimeZoneএর সংমিশ্রণ ব্যবহার করে স্থানিককরণের সময় এবং তারিখ ডেটা ফেরত দিতে পারেন।
উদাহরণ:
@GET @Path("/time") @Produces(MediaType.APPLICATION_JSON) public Response getTime(@HeaderParam("Accept-Language") String language, @HeaderParam("TimeZone") String timeZone) { Locale locale = new Locale(language); TimeZone zone = TimeZone.getTimeZone(timeZone); ZonedDateTime now = ZonedDateTime.now(zone); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z", locale); String formattedTime = now.format(formatter); return Response.ok(new Message(formattedTime)).build(); }- যদি আপনার API সময় সম্পর্কিত ডেটা প্রদান করে, তবে আপনি তারিখ এবং সময় টাইমজোন অনুযায়ী স্থানিককরণের জন্য Java
i18n সমর্থন করার জন্য RESTful Web Services কনফিগার করা হলে, ক্লায়েন্টদের বিভিন্ন ভাষা এবং অঞ্চল অনুযায়ী কনটেন্ট প্রদান করা সম্ভব হয়। ResourceBundle ক্লাস, Locale হেডার, Accept-Language হেডার ব্যবহার করে ভাষাভিত্তিক কনটেন্ট প্রদান করা যায়। একাধিক ভাষা, তারিখ, সময়, এবং অন্যান্য স্থানিক ডেটা সঠিকভাবে কনফিগার করার জন্য এই কৌশলগুলো অনুসরণ করা উচিত।
Read more