2009-11-16 3 views
5

Я пишу приложение JSF (ICEfaces), используя пакеты ресурсов для обработки интернационализации.Настройка локализации форматирования с плавающей запятой для JSF/ICEfaces?

Приложение красиво применяет (по умолчанию) голландский язык «nl» для набора ресурсов, но не может применять один и тот же язык при форматировании чисел с плавающей запятой, даже если я явно установил языковой стандарт для страницы, используя <f:view locale="nl">.

Как сделать число с плавающей запятой, следуя текущему языку?

ответ

6

Скорее всего, вы не используете преобразователь для format цифр в соответствующем регионе.

<f:view locale="nl"> 
    <h:outputText value="#{numbers.someDouble}"> 
     <f:convertNumber pattern="#,##0.00;(#,##0.00)" /> 
    </h:outputText> 
    <br /> 
    <h:outputText value="#{numbers.someDouble}"> 
     <f:convertNumber locale="en" pattern="#,##0.00;(#,##0.00)" /> 
    </h:outputText> 
    </f:view> 

Этот вид (голландский вид локалите с номером, а затем английский номер локал) производит следующий вывод:

12.341.234,43 
12,341,234.43 
+0

Небольшой тест показал мне, что простое "<е: convertNumber />" уже достаточно в моем случае. Я озадачен тем, почему JSF по умолчанию не форматирует float для текущей локали, но ваше решение работает как шарм. Благодаря! – Timo

+1

'outputText', вероятно, не имеет прямой поддержки чисел; ему будет предоставлен объект (например, 'java.lang.Double') и вызовите' toString' на нем на выходе. У 'inputText' также не будет прямой поддержки; при вводе строки, язык выражения принудительно возвращает его в двойное значение в соответствии с его правилами для принуждения типа. Для более сложной логики требуется конвертер. Это мощная модель, поскольку вы можете конвертировать в/из любого типа, не требуя управления вводом/выводом для поддержки преобразования. – McDowell

+0

Вы правы! Проблема заключается в неявном Java Float.toString(), который не учитывает настройку локали (даже для ОС). тег эффективно сообщает, что outputText использует преобразование строк в локали. – Timo

1

Вы можете использовать Nest <convertNumber> тега и установить региональные настройки по умолчанию для " nl "в faces.config.xml. Таким образом, конвертеры автоматически получают и используют локаль по умолчанию, и вам не нужно указывать шаблон для каждого тега <convertNumber>.

лица-config.xml:

<application> 
     <locale-config> 
      <default-locale>nl</default-locale> 
     </locale-config> 
    </application> 
Смежные вопросы