1

Trying to use primefaces calendar with localization. I thought about adding the javascript properties array into the corresponding locale message properties file.

http://code.google.com/p/primefaces/wiki/PrimeFacesLocales

primefacesLocale=PrimeFaces.locales['de'] = \u007B closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag'\u007D;

Using it like:

<script type="text/javascript">
    <h:outputFormat value="#{msg.primefacesLocale}" escape="false">
        <f:param value="test"/>
    </h:outputFormat>
</script>

Month- and weekday names should be retrieved via el functions, test value is just for testing

Results in:

java.lang.IllegalArgumentException: can't parse argument number:  closeText: 'Schließen'
    at java.text.MessageFormat.makeFormat(MessageFormat.java:1420)
    at java.text.MessageFormat.applyPattern(MessageFormat.java:479)
    at java.text.MessageFormat.<init>(MessageFormat.java:381)
    at com.sun.faces.renderkit.html_basic.OutputMessageRenderer.encodeEnd(OutputMessageRenderer.java:113)

Whats wrong here?

Edit:

Using: <h:outputText value="#{msg.primefacesLocale}" escape="false"> works fine.

4

1 に答える 1

3

MessageFormatAPIにはいくつかの特殊文字があります。{}および'。_ {and}は、フォーマット引数インデックスの開始と終了を表します。は'エスケープ文字です (\文字列のように)。

最初\u007Bにあった は を表します{。で囲むことで、実際にはエスケープされているはず'です。\u007Dを表すエンディングも同様}

primefacesLocale=PrimeFaces.locales['de'] = '\u007B' closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag''\u007D';

{ちなみに、それらと}プレーンなバニラをひもに入れることもできます。

primefacesLocale=PrimeFaces.locales['de'] = '{' closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag''}';

注: 前述のとおり、'はエスケープ文字です。そのまま表現したい場合は、そのうちの 2 つを使用してください。

primefacesLocale=PrimeFaces.locales['de'] = '{' closeText: ''Schlie\u00DFen'', prevText: ''Zur\u00FCck'', nextText: ''Weiter'', {0} weekHeader: ''Woche'', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '''', timeOnlyTitle: ''Nur Zeit'', timeText: ''Zeit'', hourText: ''Stunde'', minuteText: ''Minute'', secondText: ''Sekunde'', currentText: ''Aktuelles Datum'', ampm: false, month: ''Monat'', week: ''Woche'', day: ''Tag'', allDayText: ''Ganzer Tag'''}';

ただし、これは無効な JSON です。文字列のキーと値は二重引用符で囲む必要があります (ただし、ほとんどの Web ブラウザーはこれを許可しています)。

于 2012-11-15T21:26:15.860 に答える