【问题标题】:php how to get the current decimal/thousand separator for a given localephp如何获取给定语言环境的当前小数/千位分隔符
【发布时间】:2011-02-09 11:28:40
【问题描述】:

我已经使用 setlocale() 函数设置了语言环境,比如说“en_US”。

现在我正在尝试像这样格式化没有千位分隔符的货币:

$currency = number_format($value, 2, '.', '');

这可行,但有时我有其他货币,我希望 number_format 根据使用区域设置使用正确的小数分隔符。

有没有办法根据已设置的语言环境以某种方式获取当前的小数点分隔符?

【问题讨论】:

    标签: php localization locale


    【解决方案1】:

    localeconv() 应该这样做。来自手册:

    返回一个关联数组 包含本地化数字和 货币格式信息。

    Here is a list 在 Windows 上被 setlocale() 识别的语言字符串。

    【讨论】:

    • 谢谢,不幸的是返回空数组元素:[thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] =>
    • 它与windows有关。一切都在我的 mac/linux 上运行良好,但我正在寻找一种解决方案,以便在我们的 windows 开发机器上也能将货币格式化。那好吧。感谢您的回答!
    【解决方案2】:

    这不是最好的,但它有效:

    $locale_info = localeconv();
    echo 'decimal_point=' . $locale_info['decimal_point'] . "<br/>\n";
    

    localeconv() 返回一个关联数组,除了小数点字符之外还有其他字段。

    【讨论】:

      【解决方案3】:

      Sean Bright 是对的,使用localeconv() 函数。您确定为您的操作系统设置了正确的语言环境吗,因为基于 Unix 的操作系统使用“en_US.UTF-8”之类的表示法,而 Windows 使用“en-US”。

      【讨论】:

      • 如果您的开发人员计算机和产品服务器上有不同的操作系统,则可以像这样调用setlocalesetlocale(LC_ALL, 'en_US.utf8', 'en-US')。函数将使用首先找到的语言环境。
      • 谢谢,这听起来像是一个解决方案,但即使使用这些替代语言环境,数组在 Windows 上仍然为空
      • 尝试使用来自MSDN manual 的语言环境。 setlocale(LC_ALL, 'en_US.utf8', 'american') 在我的 XP 和 Vista 上都能完美运行,返回带有货币名称、符号和数字分隔符的填充数组。
      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2016-01-14
      • 2017-11-24
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多