PHP изменить настройки локали? - PullRequest
1 голос
/ 26 апреля 2011

есть ли способ отредактировать / изменить настройку локали по умолчанию в localeconv()?

Я хотел бы использовать функцию money_format, и она отлично работает, но локали для моего языка /регион указан неверно.

Если быть точным, для Хорватии мы используем символ валюты после числа, а не до того, который задан в локальных значениях?

Есть ли способы отредактировать это?Или, по крайней мере, вручную проверить, изменить значения и отправить новые значения на setlocale()?

Кстати, на общем хостинге.

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Если кому-то интересно, я заставил его работать собственной заменой функции money_format(). В основном это копирование-вставка из здесь с добавленными параметрами для forceRight и noSpace

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;
    }
}
1 голос
/ 26 апреля 2011

number_format() не имеет ничего общего с символами валюты, вы, вероятно, имели в виду money_format(), но ... хорошо - просто используйте number_format() и добавьте любой символ валюты, который вы хотите, к возвращаемому значению.

...