C#本地化货币格式

时间:2017-11-23 14:54:41

标签: c# localization internationalization currency

类似问题的答案是不够的。因此,在将此标记为类似问题的副本(例如Proper currency format when not displaying the native currency of a culture)之前,请考虑整个问题。

我希望根据任何区域设置的格式规范正确格式化任何货币。这意味着

  1. 货币不必与区域设置的货币相匹配。
  2. 区域设置不必使用ISO代码进行格式化。
  3. 换句话说,我不希望仅对数字应用区域设置感知格式,同时重新使用其他区域设置中的货币符号,因为

    1. 货币的货币符号可能因地区不同而不同
    2. 不同的区域设置可以对不同的货币使用相同的货币符号
    3. 让我们考虑两个区域,en-US和en-AU,以及两种货币,USD和AUD。我预计“100美元是131澳元”的本地化输出 en-US:100.00美元是131.00澳元 en-AU:USD100.00是$ 131.00

      在javascript中,使用Intl.NumberFormat

      可以轻松实现
      let aud = {style: 'currency', currency: 'AUD'};
      let usd = {style: 'currency', currency: 'USD'};
      let usFormatAUD = new Intl.NumberFormat('en-US', aud);
      let usFormatUSD = new Intl.NumberFormat('en-US', usd);
      let auFormatAUD = new Intl.NumberFormat('en-AU', aud);
      let auFormatUSD = new Intl.NumberFormat('en-AU', usd);
      

      然后

      `${usFormatUSD.format(100)} is ${usFormatAUD.format(131)}`
      

      将给出“$ 100.00是A $ 131.00”

      `${auFormatUSD.format(100)} is ${auFormatAUD.format(131)}`
      

      将给出“USD100.00是$ 131.00”

      根据类似问题的答案建议将NumberFormatInfo.CurrencySymbol从一个区域设置复制到另一个区域设置会导致“$ 100.00 is $ 131.00”,这不保留实际货币的含义。

      在类似问题的答案中使用货币代码会导致“USD100.00为AUD131.00”,这是两种语言区域中货币格式不正确的。

0 个答案:

没有答案