firefox язык de-ch (немецкая часть Швейцарии) недоступен - PullRequest
1 голос
/ 03 апреля 2020

в первую очередь. я знаю, что могу форматировать числа, используя js. я хотел бы избежать сохранения параметра с сервера, который задает формат

мои числа, о которых идет речь, являются js числами с плавающей запятой и должны отображаться в формате языка, который пользователь выбирает в браузере.

Я хотел бы положиться на (современные) настройки браузера для форматирования моих десятичных чисел в Швейцарии, мы используем десятичную точку "." поэтому мой скрипт получает значение navigator.languages ​​[0], чтобы использовать его с объектами intl.date и intl.number - (они отлично работают при подаче в "de-ch" в качестве культуры), но получается firefox i можно выбрать только «де» (Deutsch) в качестве языка в опциях. Затем он используется для форматирования и использует «,» для десятичной точки. почему в опциях языка firefox отсутствует настройка "de-ch" (Deutsch-Schweiz)?

мой текущий способ обхода (и чтобы дать немного больше контекста этим вопросам):

let mostPreferedLanguage = globalThis.navigator.languages[0]
if (
  mostPreferedLanguage === "de" &&
  navigator.userAgent.toLowerCase().indexOf("firefox") > -1
) {
  if ((1.1).toString().indexOf(".") > -1) {
    mostPreferedLanguage = "de-ch"
  }
}
export let displayFormats = {
  decimal: {
    default: new Intl.NumberFormat(mostPreferedLanguage, {
      minimumFractionDigits: 2,
      maximumFractionDigits: 2
    }),
    _4Digits: new Intl.NumberFormat(mostPreferedLanguage, {
      minimumFractionDigits: 4,
      maximumFractionDigits: 4
    })
  },
  date: {
    default: new Intl.DateTimeFormat(mostPreferedLanguage, {
      day: "2-digit",
      month: "2-digit",
      year: "numeric"
    }),
    _2DigitsYear: new Intl.DateTimeFormat(mostPreferedLanguage, {
      day: "2-digit",
      month: "2-digit",
      year: "2-digit"
    }),
    defaultTimestamp: new Intl.DateTimeFormat(mostPreferedLanguage, {
      day: "2-digit",
      month: "2-digit",
      year: "2-digit",
      hour: "numeric",
      minute: "numeric",
      second: "numeric",
      hour12: false
    })
  }
}
...