我在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
(
)
)
这里发生了什么?为什么基本上所有的值都是空的或奇怪的?
答案 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