PHP: Локаль осведомленный числовой формат

Поскольку Guido van Rossum, создатель Python и других разработчиков, на самом деле не нравится стиль форматирования кода с запятой и фигурными скобками.

Для краткого взгляда на то, как они относятся к этим вещи, попробуйте:

from __future__ import braces

Заявления в Python должны быть разделены пустыми строками, а составные операторы в Python должны быть ограничены отступом.

Существование ; и однострочные составные утверждения (например, for i in x: print i) предназначены только для очень ограниченных уступок ... и вы не можете их комбинировать.

19
задан Jason S 12 January 2009 в 23:21
поделиться

4 ответа

При развертывании локализованного веб-сайта Вы собираетесь хотеть удостовериться Вы setlocale (). Для пения в припеве прочь yaauie's выше сообщения, я добавил бы что-то как следующий фрагмент кода в коде инициализации:

$locale = ( isset($_COOKIE['locale']) ) ? 
            $_COOKIE['locale'] : 
            $_SERVER['HTTP_ACCEPT_LANGUAGE'];
setlocale(LC_ALL, $locale);

Затем мы изменяем вышеупомянутую функцию number_format_locale(), быть похожими так:

function number_format_locale($number,$decimals=2) {
    $locale = localeconv();
    return number_format($number,$decimals,
               $locale['decimal_point'],
               $locale['thousands_sep']);
 }

Конечно, это находится в идеальном мире, в зависимости от платформы, которую Вы развертываете на, и какую версию файлов локали Вы установили, Вам, возможно, придется кодировать вокруг некоторых неисправностей. Но установка локали собирается помочь с деньгами, числами и датами.

19
ответ дан 30 November 2019 в 03:25
поделиться
string number_format (float $number, int $decimals, string $dec_point, string $thousands_sep)

видят php doku для number_format

, которым Другая полезная ссылка может быть Zend_Locale от Платформы Зенда - это может обнаружить язык Вашего пользователя и также помочь с числом/валютой, форматирующим

6
ответ дан 30 November 2019 в 03:25
поделиться

От http://us3.php.net/manual/en/function.number-format.php#76448 :

<?php

    function strtonumber( $str, $dec_point=null, $thousands_sep=null )
    {
        if( is_null($dec_point) || is_null($thousands_sep) ) {
            $locale = localeconv();
            if( is_null($dec_point) ) {
                $dec_point = $locale['decimal_point'];
            }
            if( is_null($thousands_sep) ) {
                $thousands_sep = $locale['thousands_sep'];
            }
        }
        $number = (float) str_replace($dec_point, '.', str_replace($thousands_sep, '', $str));
        if( $number == (int) $number ) {
            return (int) $number;
        } else {
            return $number;
        }
    }

?>

, Который, кажется, точно, что Вы ищете. :)

3
ответ дан 30 November 2019 в 03:25
поделиться

Вы могли использовать серверную переменную HTTP_ACCEPT_LANGUAGE для предположения их локали и ожидаемого числового формата.

Если бы я должен был реализовать это, то я позволил бы пользователю устанавливать предпочтение для переопределения предполагаемого, и моя функция будет похожа на это:

function number_format_locale($number,$decimals=2) {
    $locale = ( isset($_COOKIE['locale']) ? 
                    $_COOKIE['locale'] : 
                    $_SERVER['HTTP_ACCEPT_LANGUAGE']
               )
    switch($locale) {
        case 'en-us':
        case 'en-ca':
            $decimal = '.';
            $thousands = ',';
            break;
        case 'fr':
        case 'ca':
        case 'de':
        case 'en-gb':
            $decimal = ',';
            $thousands = ' ';
            break;
        case 'es':
        case 'es-mx':
        default:
            $decimal = ',';
            $thousands = ' ';
    }
    return $number_format($number,$decimals,$decimal,$thousands);
}
-1
ответ дан 30 November 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: