2014-02-14 7 views
1

windows vistaPHP을 실행 중입니다. 그래서 로케일 기능이 어떻게 작동하는지 알기 위해 노력하고 있습니다. 나는 그것이에서 입증 된 바와 같이 결과 등 "ko 페이지", "ko 페이지"처럼 (내 생각은 .. 그냥 PHP 로케일을 배우기 시작) CLDR 로케일 ID를 가진 일 처음PHP 로케일 함수 사용 방법

setlocale(LC_ALL, $locale)localeconv()

시작 PHP 문서 예제. 하지만 지금은 setlocale()localeconv()은 과 같은 값으로 작동합니다. "English_United Kingdom.1252""English_United States.1252"은 윈도우 기반 로케일 ID입니다. 내가 할 때

그래서 :

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 

가 어떻게 내 스크립트 로케일 ID를 CLDR에 응답해야합니까 :

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

을 나는 이러한 결과를 얻을?

답변

1

setlocale()은 잘못된 경우를 반환합니다. 수동 :

은 새로운 현재 로케일을 돌려줍니다 FALSE 로케일 기능 이 중 하나를 사용하는 플랫폼

에 한번에 구현되지 않은 경우 "미국", "미국", "미국 ","연합 - 상태 "또는"우리 "

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

+0

그렇다면'setlocale()'함수가 실제로 운영체제에 있고'PHP'가 단지 그것을 호출한다는 것을 의미합니까? 의미는 그것의 인수는'windows'에 정의 된/설치되어 있어야합니다? –

+0

나는 그렇게 생각한다. 위에 제공된 링크에서 로케일 이름을 사용하도록 시도하십시오. 이는 Windows에서 작동해야합니다. –

0

setlocale, localeconv 및 관련 기능은 유니 코드 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' 

실제로 관계없이 운영 체제의 통합 경험을 유니 코드 CLDR 로케일 식별자와 데이터를 사용하려는 경우

는 대신 International extension 사용합니다. PHP 5.3에서 사용할 수 있으며 표준화 된 CLDR 로켈 데이터를 제공하는 ICU (유니 코드 용 국제 구성 요소) 라이브러리에 대한 래퍼입니다.

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