سؤال

بالنظر إلى ملفات خصائص ResourceBundle التالية:

  1. الرسائل
  2. messages_en.properties
  3. messages_es.properties
  4. Messages_ {بعض المحطة} .properties

ملاحظة: تحتوي الرسائل. properties على جميع الرسائل الخاصة بالمكان الافتراضي. الرسائل _en.properties فارغة حقًا - إنها موجودة فقط من أجل الصواب. الرسائل _en.properties سوف تعود إلى الرسائل.

وبالنظر إلى معاملات التكوين التالية في web.xml:

<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>messages</param-value>
</context-param>

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
    <param-value>en</param-value>
</context-param>

أتوقع أنه إذا كانت اللغة المختارة هي "ES" ، ولم يتم ترجمة مورد في "ES" ، فسيعود ذلك إلى "EN" ، وأخيراً إلى "الرسائل. .

هذه هي الطريقة التي تعمل بها الأمور في رصيف. لقد اختبرت هذا أيضًا على WebSphere.

الراتنج هو المشكلة

المشكلة هي عندما أحصل على الراتنج (3.0.23). قرار الاحتياط لا يعمل على الإطلاق! من أجل الحصول على رسائل لعرضها ، يجب أن أفعل ما يلي:

  1. إعادة تسمية الرسائل. تبديل محتويات الرسائل.
  2. تأكد من تعريف المفتاح في Messages_en.properties أيضًا في Messages_ {كل لغة أخرى} .properties (حتى لو كانت نفسها بالضبط).

إذا لم أفعل هذا ، أحصل على "؟؟؟ في JSPs.

الرجاء المساعدة! هذا محير.

- ليه

المحلول

أضف المتابعة إلى pom.xml (إذا كنت تستخدم Maven)

...
<properties>
    <taglibs.version>1.1.2</taglibs.version>
</properties>
...

    <!--
        Resin ships with a crappy JSTL implementation that doesn't work with
        fallback locales for resource bundles correctly; we therefore include
        our own JSTL implementation in the WAR, and avoid this problem. This
        can be removed if the target container is not resin.
    -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>${taglibs.version}</version>
        <scope>compile</scope>
    </dependency>
هل كانت مفيدة؟

المحلول

أنا لا أفعل الراتنج ، لذلك لا تثقلني عليه ، لكن الأعراض تجعل الأمر يبدو كما لو أنه يشحن بتنفيذ JSTL غير المخبوز. حاول على سبيل المثال تجاوزها مع واحدة أكثر لائقة في الويب /WEB-INF/lib. إذا Servlet 2.5 ، احصل JSTL-1.2.JAR, ، أو إذا Servlet 2.4 ، احصل JSTL.JAR و Standard.JAR.

نصائح أخرى

مجرد فكرة ، ولكن يمكنك محاولة إضافة هذا السياق البارام أيضًا:

<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
    <param-value>en</param-value>
</context-param>

من الممكن أن يستخدم Resin شيئًا من هذا القبيل باعتباره لغة "الاحتياط".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top