Как мы можем отформатировать валюту, используя размер группы культур в числовом текстовом поле кендо?

Я использую Kendo numericTextBox для отображения валюты. У меня есть требование отформатировать значение на основе выбранной валюты. Я могу правильно отформатировать валюту для «en-US» и «de-DE», но у меня возникают проблемы с правильным форматированием валюты, поскольку культура имеет разный размер группы.

Все примеры и образцы в блоге Кендо находятся на «en-US» и «de-DE», которые имеют одинаковый размер группы.

Для валюты "en-US" свойство groupSize равно [3], что означает, что каждая группа будет разделена после 3 цифр, например. 1,000,000. Но для некоторых других культур, которые имеют другую группировку, например. «en-IN», у которых «groupSize» равен [3,2,0], кендо по-прежнему группирует число только в группу из 3: 1,000,000, в то время как мы ожидаем, что группировка будет состоять из 3 цифр, затем разделителя, затем группы из 2 цифр и т. д.: 10,00,000.

Может ли кто-нибудь помочь мне в этом?

Вот мой пример кода: http://dojo.telerik.com/@jayesh-jayakumar/AtojA/8


person Jayesh Jayakumar    schedule 20.02.2017    source источник


Ответы (1)


Итак, проблема в том, что вы используете старую версию KendoUI без этой функции. Вот фрагмент последней версии кендо, и похоже, что она ведет себя иначе для en-IN: http://dojo.telerik.com/aqEwun

Однако я не уверен, что именно так это работает в этой культуре, потому что он создает только 2 группы цифр, как вы можете видеть на моем примере (из десятичного разделителя это группа из 2, группа из 3 и остальные цифры).

РЕДАКТИРОВАТЬ:

Итак, как вы упомянули, вы хотели бы иметь другое поведение, чем это в примере (начиная с десятичной точки одну группу из 3 цифр, а затем группы из 2). Похоже, это баг и, возможно, когда-нибудь телерик его исправит. До тех пор вы можете изменить значение groupSize в объекте культуры с [3, 2, 0] на [3, 2], чтобы добиться того, чего вы хотите.

Чтобы исправить это глобально во всех связанных культурах, вы можете использовать следующий код:

  for(var i in kendo.cultures){
    var culture = kendo.cultures[i];
    if(JSON.stringify(culture.numberFormat.groupSize) === '[3,2,0]'){
      culture.numberFormat.groupSize = [3, 2];
    }
    if(JSON.stringify(culture.numberFormat.currency.groupSize) === '[3,2,0]'){
      culture.numberFormat.currency.groupSize = [3, 2];
    }
    if(JSON.stringify(culture.numberFormat.percent.groupSize) === '[3,2,0]'){
      culture.numberFormat.percent.groupSize = [3, 2];
    }
  }

PS. Вы можете рассмотреть возможность использования лучшей функции сравнения массивов, чем JSON.stringify().

Обновлен фрагмент: http://dojo.telerik.com/aqEwun/3.

person Jarosław Kończak    schedule 21.02.2017
comment
Ой. Хорошо, я обновлю версию KendoUI и проверю, как она работает. Но, как вы упомянули, группировка неверна. Несмотря на то, что первые две группы отмечены правильно, остальные цифры сгруппированы вместе. Это не так, как ожидалось. Возможно ли каким-либо образом создать собственный формат валюты на основе размера группы на стороне клиента? - person Jayesh Jayakumar; 21.02.2017
comment
Я пробовал с пользовательскими форматами, но безуспешно. Однако я обновил свой ответ решением, включающим изменения определения культуры. - person Jarosław Kończak; 21.02.2017
comment
Большое спасибо @Ярослав. Этот обходной путь поможет мне создать более общее решение для обработки разных культур с проблемой одинакового размера группы. Спасибо за понимание. Как вы упомянули, я надеюсь, что телерик скоро придумает решение этой проблемы. Еще один .. если вы считаете, что мой вопрос правильный, то, пожалуйста, проголосуйте. :) - person Jayesh Jayakumar; 21.02.2017