为什么大多数来自localeconv基本上都是空的?

时间:2010-10-15 03:45:28

标签: php locale

我在Windows 7上运行PHP 5.3.0,Apache 2.2.11,我试图运行它:

setlocale(LC_ALL, 'sv_SE.UTF-8');
print_r(localeconv());

得到了这个:

Array
(
    [decimal_point] => .
    [thousands_sep] => 
    [int_curr_symbol] => 
    [currency_symbol] => 
    [mon_decimal_point] => 
    [mon_thousands_sep] => 
    [positive_sign] => 
    [negative_sign] => 
    [int_frac_digits] => 127
    [frac_digits] => 127
    [p_cs_precedes] => 127
    [p_sep_by_space] => 127
    [n_cs_precedes] => 127
    [n_sep_by_space] => 127
    [p_sign_posn] => 127
    [n_sign_posn] => 127
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
        )

)

这里发生了什么?为什么基本上所有的值都是空的或奇怪的?

2 个答案:

答案 0 :(得分:2)

显然,在Windows上区域设置的命名方式不同... 叹息 ...这修复了它:

setlocale(LC_ALL, 'sv_SE.UTF-8', 'sve');

答案 1 :(得分:0)

@Svish

好吧,原因是语言环境取决于平台。 据我所知,Linux计算机使用下划线作为其分隔符。 但是,Windows计算机使用短划线作为分隔符。

例如;-

平台 平台选择的首选语言环境

Linux | sv_SE

Windows | sv-SE

好处是setlocale()支持添加后备 locales

例如;

$locale = 'sv_SE';

// Replace underscores with dashes for the fallback locale.
setlocale(LC_ALL, $locale . '.UTF-8',
 str_replace('_', '-', $locale) . '.UTF-8');
print_r(localeconv());

// Output:

// Array
// (
//     [decimal_point] => ,
//     [thousands_sep] =>  
//     [int_curr_symbol] => SEK
//     [currency_symbol] => kr
//     [mon_decimal_point] => ,
//     [mon_thousands_sep] =>  
//     [positive_sign] =>
//     [negative_sign] => -
//     [int_frac_digits] => 2
//     [frac_digits] => 2
//     [p_cs_precedes] => 0
//     [p_sep_by_space] => 1
//     [n_cs_precedes] => 0
//     [n_sep_by_space] => 1
//     [p_sign_posn] => 1
//     [n_sign_posn] => 1
//     [grouping] => Array
//         (
//             [0] => 3
//         )

//     [mon_grouping] => Array
//         (
//             [0] => 3
//         )

// )

平台将自动选择其首选/支持的语言环境。

您可以轻松查看平台首选的语言环境。即

/* try different possible locale names for german */
$loc_de = setlocale(LC_ALL,  'de_DE', 'de-DE');
echo "Preferred locale for german on this system is '$loc_de'";

// Output:
// Preferred locale for german on this system is 'de-DE'

有关更多详细信息,请查看: https://www.php.net/manual/en/function.setlocale.php