尝试使用本地化的primefaces日历。我考虑将javascript属性数组添加到相应的区域设置消息属性文件中。
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;
使用它像:
<script type="text/javascript">
<h:outputFormat value="#{msg.primefacesLocale}" escape="false">
<f:param value="test"/>
</h:outputFormat>
</script>
应通过el函数检索月份和工作日名称,test
值仅用于测试
结果:
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)
这里有什么问题?
修改
使用:<h:outputText value="#{msg.primefacesLocale}" escape="false">
工作正常。
答案 0 :(得分:3)
MessageFormat
API有一些特殊字符。 {
,}
和'
。 {
和}
表示格式参数索引的开始和结束。 '
是一个转义字符(就像\
在字符串中一样)。
您在开头的\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''}';
注意:如上所述,'
是转义字符,如果要按原样表示,请使用其中两个。
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浏览器都是为此而烦恼)。