স্থানীয়করণের জন্য কখন এবং কীভাবে আমার ট্যাগ <resource-bundle>এবং <message-bundle>ট্যাগগুলি ব্যবহার করা উচিত faces-config.xml? এই দুজনের মধ্যে পার্থক্য আমার কাছে খুব বেশি পরিষ্কার নয়।
উত্তর:
<message-bundle>যখনই আপনি JSF ডিফল্ট সতর্কবার্তা / ত্রুটি বার্তা যা JSF বৈধতা / রূপান্তর কাপড় দ্বারা ব্যবহার করা হয়েছে হয় ওভাররাইড করতে চান ব্যবহার করা যেতে হয়। আপনি জেএসএফ স্পেসিফিকেশনের 2.5.2.4 অধ্যায়ে ডিফল্ট সতর্কতা / ত্রুটি বার্তাগুলির কীগুলি সন্ধান করতে পারেন ।
উদাহরণস্বরূপ, প্যাকেজে থাকা Messages_xx_XX.propertiesফাইলগুলি com.example.i18nনীচে হিসাবে ডিফল্ট required="true"বার্তাকে ওভাররাইড করে :
com/example/i18n/Messages_en.properties
javax.faces.component.UIInput.REQUIRED = {0}: This field is required
com/example/i18n/Messages_nl.properties
javax.faces.component.UIInput.REQUIRED = {0}: Dit veld is vereist
নিম্নলিখিত হিসাবে কনফিগার করা যেতে পারে (লোকেল নির্দিষ্টকারক _xx_XXএবং ফাইল এক্সটেনশন ছাড়াই !):
<message-bundle>com.example.i18n.Messages</message-bundle>
<resource-bundle>যখনই আপনি কোনো স্থানীয় সম্পদ বান্ডিল যা নির্দিষ্ট করার প্রয়োজন ছাড়াই সমগ্র JSF আবেদন সারা উপলব্ধ নিবন্ধিত হতে চান ব্যবহার করা হয় <f:loadBundle>প্রতিটি দৃশ্য।
উদাহরণস্বরূপ, প্যাকেজে Text_xx_XX.propertiesফাইলগুলি com.example.i18nনীচে হিসাবে:
com/example/i18n/Text_en.properties
main.title = Title of main page
main.head1 = Top heading of main page
main.form1.input1.label = Label of input1 of form1 of main page
com/example/i18n/Text_nl.properties
main.title = Titel van hoofd pagina
main.head1 = Bovenste kop van hoofd pagina
main.form1.input1.label = Label van input1 van form1 van hoofd pagina
নিম্নলিখিত হিসাবে কনফিগার করা যেতে পারে (লোকেল নির্দিষ্টকারক _xx_XXএবং ফাইল এক্সটেনশন ছাড়াই !):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
এবং main.xhtmlনিম্নলিখিত হিসাবে ব্যবহার করা হবে :
<h:head>
<title>#{text['main.title']}</title>
</h:head>
<h:body>
<h1 id="head1">#{text['main.head1']}</h1>
<h:form id="form1">
<h:outputLabel for="input1" value="#{text['main.form1.input1.label']}" />
<h:inputText id="input1" label="#{text['main.form1.input1.label']}" />
</h:form>
</h:body>
জাভা EE 6 / JSF 2 সাল থেকে, এছাড়াও আছে যা তাদের দ্বারা প্রতিনিধিত্ব করা হয় নতুন JSR303 সিম ভ্যালিডেশন এপিআই এর @NotNull, Size, @Maxএর, ইত্যাদি টীকা javax.validation.constraintsপ্যাকেজ। আপনার বুঝতে হবে যে এই এপিআই জেএসএফের সাথে সম্পূর্ণ সম্পর্কিত নয় । এটি জেএসএফের অংশ নয়, তবে জেএসএফের বৈধতা পর্বে এটির জন্য সমর্থন রয়েছে । অর্থাৎ এটি JSR303 বাস্তবায়ন (যেমন হাইবারনেট ভ্যালিডেটর) এর উপস্থিতি নির্ধারণ করে এবং সনাক্ত করে এবং তারপরে এটির বৈধতা দেয় (যা ব্যবহার করে <f:validateBean disabled="true"/>, অক্ষম করা যায় )।
জেএসআর 303 নির্দিষ্টকরণের অধ্যায় 4.3.1.1 অনুসারে , কাস্টম জেএসআর 303 বৈধতা বার্তাগুলি ফাইলটির ঠিক নাম থাকতে হবে ValidationMessages_xx_XX.propertiesএবং এটি শ্রেণিপথের মূলের মধ্যে স্থাপন করা প্রয়োজন (এইভাবে, কোনও প্যাকেজে নয়!)।
উপরের উদাহরণগুলিতে, _xx_XXফাইলের নামটি (alচ্ছিক) ভাষা এবং দেশের কোডগুলি উপস্থাপন করে। যদি এটি পুরোপুরি অনুপস্থিত থাকে তবে এটি ডিফল্ট (ফলব্যাক) বান্ডেল হয়ে যায়। ভাষাটি যদি উপস্থিত থাকে, উদাহরণস্বরূপ _en, তখন যখন ক্লায়েন্ট স্পষ্টভাবে এই ভাষার জন্য Accept-Languageএইচটিটিপি অনুরোধ শিরোনামে অনুরোধ করবে তখন এটি ব্যবহার করা হবে । একই ক্ষেত্রে প্রযোজ্য যেমন, _en_USবা _en_GB।
এর <locale-config>উপাদানটিতে আপনি বার্তা এবং সংস্থান বান্ডেল উভয়ের জন্য সমর্থিত লোকেলগুলি নির্দিষ্ট করতে পারেন faces-config.xml।
<locale-config>
<default-locale>en</default-locale>
<supported-locale>nl</supported-locale>
<supported-locale>de</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
কাঙ্ক্ষিত লোকেলের মাধ্যমে সেট করা দরকার <f:view locale>। জেএসএফ-তে স্থানীয়করণ দেখুন , প্রতি অনুরোধ / দেখার পরিবর্তে প্রতি সেশনে নির্বাচিত লোকাল কীভাবে মনে রাখা যায় ।