كيفية جعل FMT: Setlocale العمل على FMT: Formatnumber مع رمز اللغة فقط في JSP؟

StackOverflow https://stackoverflow.com/questions/2258318

سؤال

أحاول توطين العملة على تطبيق JSP على الويب الخاص بي ، المشكلة هي عندما أطلب اللغة المحلية ، أحصل فقط على رمز اللغة ("EN") بدلاً من رمز اللغة والبلد الكامل ("EN_US"). المشكلة في هذا ، لا تعمل Formatnumber عندما لا تحتوي قيمة Setlocale على اللغة ورمز البلد.

يمكنني حلها عن طريق التحقق من اللغة المحلية في بداية صفحة JSP وتحديد رمز البلد الافتراضي لعدد قليل من اللغات ثم تعيين قيمة setLocale ، ولكن هذه الطريقة تبدو قبيحة للغاية بالنسبة لي. هل هناك طريقة أفضل للقيام بذلك؟

هذه هي الطريقة التي أفعلها الآن:

<c:choose>
    <c:when test="${pageContext.response.locale == 'cs'}">
        <f:setLocale value="cs_CZ" />
    </c:when>
    <c:otherwise>
        <f:setLocale value="en_US" />
    </c:otherwise>
</c:choose>
<f:formatNumber type="currency" value="${product.price}" currencyCode="CZK"/>
هل كانت مفيدة؟

المحلول

العملة تعتمد على البلد ، وليس على اللغة. أنت حقا بحاجة إلى ضبطها كذلك. طريقة أكثر عامة هي استخدام أ Filter لهذا حتى لا تحتاج إلى copypaste في كل JSP.

تحديث: أرى الآن أنك تستخدم HttpServletResponse#getLocale() الذي يرجع المكان المحلي بشكل برمجي أو خلاف ذلك مكان الحاوية الافتراضي. الممارسة العادية هي الاستخدام HttpServletRequest#getLocale() للحصول على لغة العميل ، وهكذا:

${pageContext.request.locale}

معرفة ما إذا كان ذلك يساعد. ومع ذلك ، لا تزال بحاجة إلى التحقق مما إذا كان البلد موجودًا بالفعل. أ Filter هو أفضل مكان لذلك.

نصائح أخرى

أنت تستخدم خطوط !! ستتعامل المشاربون مع المكان المناسب لك ، ويجب أن تحصل عليها من ActionBeanContext:

<c:set var='curLocale' value='${actionBean.context.locale}'/>

لا تتجول في ظهر المشارب! هذا هو الطريق إلى الضيق وعدم الارتياح! المشارب هو صديقك!

بشكل عام ، يجب ألا تحتاج إلى استخدام <fmt:setLocale> لأن المشارب يقوم بالفعل بإعداد اللغة في مرشح الخطوط. ثانية، المشارب هو صديقك !! اقرأ عن هذا في خطوط ويكي:

http://www.stripesframework.org/display/stripes/localization

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