স্থানীয়করণের জন্য কখন এবং কীভাবে আমার ট্যাগ <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>
। জেএসএফ-তে স্থানীয়করণ দেখুন , প্রতি অনুরোধ / দেখার পরিবর্তে প্রতি সেশনে নির্বাচিত লোকাল কীভাবে মনে রাখা যায় ।