【问题标题】:How to get country specific formatting rules?如何获取特定国家/地区的格式规则?
【发布时间】:2021-04-11 14:08:18
【问题描述】:

我目前正在为 vega lite API 构建工作流,并希望参数化区域设置的选择。

所以我希望用户通过提供像“us-En”或“fr-FR”这样的 IETF 语言标签来指定她的国家/地区代码,并且我想要获取特定国家/地区的格式规则(请参阅下面的我需要的格式)。

例如,我正在寻找一个函数,它为不同的国家/地区代码生成以下输出:

   function getLocaleFormats(countryCode) {
     if (countryCode === "de-DE") {
      return {
            "decimal": ",",
            "thousands": ".",
            "grouping": [3],
            "currency": ["€", ""],
            "dateTime": "%a %b %e %X %Y",
            "date": "%d.%m.%Y",
            "time": "%H:%M:%S",
            "periods": ["AM", "PM"],
            "days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
            "shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
            "months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
            "shortMonths": ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
        };
     }
   }

任何帮助将不胜感激。

【问题讨论】:

标签: d3.js vega-lite


【解决方案1】:

您正在寻找内置的Intl 对象:

在这些对象的实例上,您可以调用 resolvedOptions() 以获取有关在该语言环境中使用的格式的详细信息。

例子:

const nf = new Intl.NumberFormat('en-US');
const df = new Intl.DateTimeFormat('en-US');

const nfOptions = nf.resolvedOptions();
const dfOptions = df.resolvedOptions();

console.dir(nfOptions);
console.dir(dfOptions);

【讨论】:

  • 我如何获取格式,它将格式应用于字符串。我怎么能从国际。获取格式规则(如问题中所述),例如对于“en-US”是“千”还是“日期”?
  • 如果您需要自定义格式,Intl 不是您的朋友。它具有许多语言环境的通用格式,但它的可配置性有些有限。
  • 获取当前应用于您的实例的选项,例如const f = new Intl.NumberFormat('en-US'); 您可以使用f.resolvedOptions() 了解详情。如果你深入挖掘可用的东西,我相信你可以构造像你展示的那样的对象。
  • 感谢您指出这一点,我不知道 resolveOptions()
【解决方案2】:

我找到了我需要的参考资料,它们在:

  • https://unpkg.com/d3-format@1/locale/${countryCode}.json
  • https://unpkg.com/d3-time-format@1/locale/${countryCode}.json

国家代码是 IETF 语言标签,如“us-En”。

附言我注意到这些格式规则是在 d3.js 中指定的,因为 vega lite 是基于 d3.js 构建的,所以我在问题中添加了 d3.js 和 vega lite 标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2013-07-12
    • 2020-01-11
    • 2014-08-21
    • 2016-01-31
    • 1970-01-01
    • 2012-01-11
    • 2021-04-18
    相关资源
    最近更新 更多