2014-02-14 6 views
1

Я бегу PHP на windows vista. Итак, я пытаюсь узнать, как работают языковые функции. Я начал сКак использовать функции PHP Locale

setlocale(LC_ALL, $locale) и localeconv()

Сначала работал с идентификаторами локали CLDR (я думаю .., только начал изучать PHP локали), как «en_US», «en_UK», и т.д., в результате чего, как показано в Примеры документации PHP. Но теперь setlocale() и localeconv() работают только с $locale значениями, такими как "English_United Kingdom.1252" и "English_United States.1252", которые, я считаю, являются идентификаторами локали Windows.

Так что, когда я делаю:

var_dump(setlocale(LC_ALL, "en_US")); 
var_dump(localeconv()); 

я получаю эти результаты:

boolean false 

array (size=18) 
    'decimal_point' => string '.' (length=1) 
    'thousands_sep' => string '' (length=0) 
    'int_curr_symbol' => string '' (length=0) 
    'currency_symbol' => string '' (length=0) 
    'mon_decimal_point' => string '' (length=0) 
    'mon_thousands_sep' => string '' (length=0) 
    'positive_sign' => string '' (length=0) 
    'negative_sign' => string '' (length=0) 
    'int_frac_digits' => int 127 
    'frac_digits' => int 127 
    'p_cs_precedes' => int 127 
    'p_sep_by_space' => int 127 
    'n_cs_precedes' => int 127 
    'n_sep_by_space' => int 127 
    'p_sign_posn' => int 127 
    'n_sign_posn' => int 127 
    'grouping' => 
    array (size=0) 
     empty 
    'mon_grouping' => 
    array (size=0) 
     empty 

Как мне сделать мои скрипты реагируют на CLDR региональные идентификаторы?

ответ

1

setlocale() возвращает false в вашем случае. Руководство:

Возвращает новую текущую локаль, или FALSE, если функциональные возможности локаль не реализована на вашей платформе

Попробуйте использовать один из: «США», «Америка», «Соединенные Штаты », "объединившись-государство", или "мы"

http://msdn.microsoft.com/en-us/library/cdax410z%28v=vs.90%29.aspx

+0

Значит ли это, что функция 'setlocale()' фактически находится в операционной системе и что 'PHP' просто называет ее? Это значит, что аргументы должны быть такими же, как определено/установлено на 'windows'? –

+0

Я так думаю. Попробуйте использовать имя локали из приведенной выше ссылки, это должно работать на окнах. –

0

в setlocale, localeconv и связанный с ней функция не работает с идентификаторами локалей Unicode CLDR или данными. Вместо этого они различаются для каждой операционной системы, с идентификаторами локали POSIX и данными на системах * nix и строках локалей Microsoft и данных в Windows.

# works only on Linux after running `locale-gen de_DE.UTF-8` 
# but Windows requires an entirely different locale identifier 
setlocale(LC_ALL, 'de_DE.UTF-8'); 
$locale = localeconv(); 
echo number_format(
    1234.5, 
    1, # fraction digits 
    $locale['decimal_point'], 
    $locale['thousands_sep'] 
); # '1.234,5' 

Если бы вы на самом деле хотели бы использовать Unicode CLDR идентификаторы локали и данные для единого опыта, независимо от операционной системы, используйте International extension вместо этого. Он доступен с PHP 5.3 и представляет собой оболочку библиотеки ICU (International Components for Unicode), которая предоставляет стандартизованные данные локали CLDR.

$fmt = new NumberFormatter('de-DE', NumberFormatter::DECIMAL); # or 'de_DE' 
echo $fmt->format(1234.5); # '1.234,5'