জেএসএফের আন্তর্জাতিকীকরণ, মেসেজ-বান্ডেল এবং রিসোর্স-বান্ডেল কখন ব্যবহার করবেন?


84

স্থানীয়করণের জন্য কখন এবং কীভাবে আমার ট্যাগ <resource-bundle>এবং <message-bundle>ট্যাগগুলি ব্যবহার করা উচিত faces-config.xml? এই দুজনের মধ্যে পার্থক্য আমার কাছে খুব বেশি পরিষ্কার নয়।

উত্তর:


148

<ম্যাসেজ -বান্ডেল>

<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>

বৈধতা ম্যাসেজগুলি (JSR303 বিনের বৈধকরণ)

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


4
হ্যালো বালাস সি, আমরা একাধিক <ম্যাসেজ -বান্ডেল> এবং জাভা বিন থেকে কীভাবে এটি কল করতে পারি?
T8Z

<রিসোর্স-বুান্ডেল> ব্যবহার করার সময় ফোল্ডার কাঠামোর বিশেষ যত্ন দেওয়া দরকার। যদি বলে যে আপনার ফেস-কনফিগ.এক্সএমএল <resource-bundle> <base-name> org.abc.def.messages </base-name> <var> URL </var> </resource-bundle> এ নিম্নলিখিতটি রয়েছে সমস্ত message.properties, message_es.properties, message_de.properties কেবল 'src / প্রধান / সংস্থানসমূহ / org / abc / def ফোল্ডারে থাকতে হবে। অর্থাত্ 'ডিফ' ফোল্ডারের অধীনে কোনও 'বার্তা' ফোল্ডার তৈরি করবেন না। 'ডিএফ' অবধি রিসোর্স-বান্ডেল এমনটি প্রত্যাশা করছে যেখানে এটি সমস্ত বার্তা_এক্সএক্স.প্রাইপার্টি ফাইলগুলি খুঁজে পেতে পারে।
রাহুল সায়নী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.