Несоответствие локализации номеров Firefox - PullRequest
2 голосов
/ 30 сентября 2019

Я наткнулся на несоответствие в форматировании чисел для локали "km-KH" между Firefox, Chrome и веб-приложением ASP.NET MVC Core.

В Chrome и ASP.NET MVC CoreВ веб-приложении цифры используют точка для десятичного разделителя и запятая для разделителя тысяч. Но в Firefox все наоборот, что, очевидно, вызывает несоответствие.

Если вставить следующий фрагмент в консоль браузера:

(1234.56).toLocaleString('km-KH')
// or
new Intl.NumberFormat('km-KH').format(1234.56)

Chrome отобразит:

"1,234.56"

Firefox отобразит:

"1.234,56"

Мой основной вопрос прост: как исправить это несоответствие?

Насколько я могускажем, Firefox работает неправильно, в то время как Chrome и ASP.NET MVC Core работают должным образом.


Интересный факт : в определении CLDR также есть несоответствие для "km""форматирование чисел: https://github.com/unicode-cldr/cldr-numbers-full/blob/master/main/km/numbers.json

Определенные символы: запятая в качестве десятичного разделителя и точка в качестве разделителя группировки

"symbols-numberSystem-latn": {
  "decimal": ",",
  "group": ".",
  // ...
}

Нокогда они задают десятичный формат, они используют его наоборот:

"decimalFormats-numberSystem-latn": {
  "standard": "#,##0.###",
  // ...
}

Это фактическая ошибка в определении локализации?

1 Ответ

0 голосов
/ 30 сентября 2019

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

.toLocaleString, как известно, работаетпротиворечиво между браузерами. Это происходит потому, что для этой функции нет особо строгих спецификаций. Проверьте этот ответ .

Поскольку @TJ Crowder правильно указывает в своем комментарии , спецификации значительно эволюционировали в более новых версиях спецификаций скрипта ECMA.

Тем не менее, по историческим или другим причинам вывод .toLocaleString все еще в значительной степени зависит от браузера. Хотя он работает очень согласованно для некоторых языков (например, в моем случае вывод локалей fr, ru & en-AU был точно одинаковым для Firefox, Chrome и даже Safari), в случаедругих языков (в моем случае locales jp, km-KH & sq-AL выдало 3 разные вещи в 3 разных браузерах).

Я не могу найти ссылку сейчас, но в какой-то момент яВыяснилось, что, помимо прочего, разница в том, что Firefox пытается использовать языковые предпочтения вашей ОС, в то время как Chrome использует языковые предпочтения, установленные (или автоматически определяемые) специально для Chrome.

В случае, если вы используете(или, возможно, планируют) SSR, это может создать еще одну проблему, поскольку в зависимости от вашего набора инструментов формат может быть выбран из серверной среды, например, в Node.js .

Если вы хотите контролировать точный формат выходных данных, то вам очень нравится и ценится здесь, так что SO moment.js может помочь вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...