【问题标题】:PHP change locale settings?PHP更改区域设置?
【发布时间】:2011-04-26 13:33:51
【问题描述】:

有没有办法编辑/更改localeconv() 中的默认语言环境设置?

我想使用money_format 函数,它工作正常,但我的语言/地区的语言环境不正确。

更准确地说,对于克罗地亚,我们在数字之后使用货币符号,而不是在本地值中设置的之前?

有什么方法可以编辑这个吗?或者至少手动检查、更改值并将新值发送到setlocale()

顺便说一句,在共享主机上工作。

【问题讨论】:

  • setlocale 没有问题。只是它只接受语言字符串作为参数。因此为我的语言加载了不正确的默认值
  • 你研究过 i18n PHP 扩展吗?
  • @Ethan:不,但我会检查一下。实际上 i18n 不是我要找的,我已经用 kohana 覆盖了它。但不管怎样我还是看看
  • Kohana 的 i18n 在技术上只是一个本地化框架,您可以在其中提供翻译(看起来像)。 PHP 扩展提供了本地化时间/日期/货币等方法。

标签: php localization internationalization locale currency


【解决方案1】:

number_format() 与货币符号无关,您的意思可能是 money_format(),但是......好吧 - 只需使用 number_format() 并将您想要的任何货币符号附加到返回值。

【讨论】:

  • 我认为我只好自己创建 money_format 函数,它接受 $foreceSymbolRight 等附加参数。
【解决方案2】:

如果有人感兴趣,我可以用我自己的 money_format() 函数替换它。 它基本上是从here 复制粘贴,并为 forceRightnoSpace

添加了参数
class Helper_Locales
{
    public static function formatNumber($number, $isMoney=false, $forceRight=false, $noSpace=false) {
        $lg = isset($lg) ? $lg : setlocale(LC_MONETARY, '0');
        $ret = setLocale(LC_ALL, $lg);
        setLocale(LC_TIME, 'Europe/Paris');
        if ($ret===FALSE) {
            echo "Language '$lg' is not supported by this system.\n";
            return;
        }
        $LocaleConfig = localeConv();
        forEach($LocaleConfig as $key => $val) $$key = $val;

        // Sign specifications:
        if ($number>=0) {
            $sign = $positive_sign;
            $sign_posn = $p_sign_posn;
            $sep_by_space = $p_sep_by_space;
            $cs_precedes = $p_cs_precedes;
        } else {
            $sign = $negative_sign;
            $sign_posn = $n_sign_posn;
            $sep_by_space = $n_sep_by_space;
            $cs_precedes = $n_cs_precedes;
        }

        // Number format:
        $n = number_format(abs($number), $frac_digits,
            $decimal_point, $thousands_sep);
        $n = str_replace(' ', ' ', $n);
        switch($sign_posn) {
            case 0: $n = "($n)"; break;
            case 1: $n = "$sign$n"; break;
            case 2: $n = "$n$sign"; break;
            case 3: $n = "$sign$n"; break;
            case 4: $n = "$n$sign"; break;
            default: $n = "$n [error sign_posn=$sign_posn !]";
        }

        // Currency format:
        $currency_symbol = strtolower($currency_symbol);
        $m = number_format(abs($number), $frac_digits,
            $mon_decimal_point, $mon_thousands_sep);
        if ($sep_by_space && !$noSpace) $space = ' '; else $space = '';
        if ($cs_precedes && !$forceRight) $m = "$currency_symbol$space$m";
        else $m = "$m$space$currency_symbol";
        $m = str_replace(' ', ' ', $m);
        switch($sign_posn) {
            case 0: $m = "($m)"; break;
            case 1: $m = "$sign$m"; break;
            case 2: $m = "$m$sign"; break;
            case 3: $m = "$sign$m"; break;
            case 4: $m = "$m$sign"; break;
            default: $m = "$m [error sign_posn=$sign_posn !]";
        }
        if ($isMoney) return $m; else return $n;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多