2015-07-18 10 views
11

Daha önce Zend_Locale kullanmıştım ancak PHP intl uzantısının cldr bilgilerine sahip olduğu görülüyor.Intl uzantısından CLDR bilgilerini php olarak alın

Her dil için uygun ülkeler almak gibi bazı bilgilere ihtiyacım var mı? örneğin, US, UK, GB ve fa'un IR ve AF ürünlerine sahiptir ve CLDR projesi hakkında daha fazla veri mevcuttur. CLDR xml dosyalarında ülkelerin adları, her dilin zaman dilimlerinin listesi ve daha fazla veri var.

Php intl üzerine gömülü mi, yoksa bunları sınıf veya yönteme göre indirip bağlayabilir miyim?

Bu bilgi bana PHP intl extension üzerinde bu bilgi verir? Bir çözüm ile gelip

CLDR information

cevap

5

, başlangıç ​​noktası yerel ayarlar olduğunu.

Tüm yerel ağların listesini getLocales yöntemiyle alabilirsiniz. http://php.net/manual/en/resourcebundle.locales.php

Sonra $countryName = Locale::getDisplayRegion($locale, 'en'); ile her yerel ayar ülke adını alabilir veya benzeri Locale::getDisplayLanguage ($locale) ve dil adını alabilir: $locales = ResourceBundle::getLocales(''); buraya bakınız. Bkz .: http://php.net/manual/en/class.locale.php

Örneğin, birçok zaman dilimi adlarını aşağıdaki kodla eşleştirmeyi başardım;

<?php 
/* fill the array with values from 
https://gist.github.com/vxnick/380904#gistcomment-1433576 
Unfortunately I couldn't manage to find a proper 
way to convert countrynames to short codes 
*/ 
$countries = []; 
$locales = ResourceBundle::getLocales(''); 

foreach ($locales as $l => $locale) { 
    $countryName = Locale::getDisplayRegion($locale, 'en'); 
    $countryCode = array_search($countryName, $countries); 
    if($countryCode !== false) { 
     $timezone_identifiers = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode); 
     echo "----------------".PHP_EOL; 
     echo $countryName.PHP_EOL; 
     echo Locale::getDisplayLanguage ($locale).PHP_EOL; 
     var_dump($timezone_identifiers); 

    } 
} 

Bunun en iyi cevap olmadığını biliyorum, ancak en azından bu size bir başlangıç ​​verebilir.

Güncelleme

yerel ayar başına ülke adı almak için bu bir deneyebilirsiniz;

<?php 
$locales = ResourceBundle::getLocales(''); 
foreach ($locales as $l => $locale) { 
    $countryName = Locale::getDisplayRegion($locale, 'en'); 
    echo $locale."===>".$countryName.PHP_EOL; 
} 

Güncelleme 2

yerel ayar başına günlük isimleri, ay isimleri, para toplayın

$locales = ResourceBundle::getLocales(''); 

foreach ($locales as $l => $locale) { 
    echo "============= ".PHP_EOL; 
    echo "Locale:". $locale. PHP_EOL; 
    echo "Language: ".Locale::getDisplayLanguage($locale, 'en'); 
    echo PHP_EOL; 
    $formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY); 
    echo "Currency: ".$formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE); 
    echo PHP_EOL;  

    echo PHP_EOL."Days :".PHP_EOL; 
    $dt = new DateTime('this sunday'); 
    for($i = 0; $i<=6; $i++) { 
     echo IntlDateFormatter::formatObject($dt, "eeee", $locale); 
     $dt->add(new DateInterval('P1D')); 
     echo PHP_EOL; 
    } 

    echo PHP_EOL."Months :".PHP_EOL; 
    $dt = new DateTime('01/01/2015'); 
    for($i = 0; $i<12; $i++) { 
     echo IntlDateFormatter::formatObject($dt, "MMMM", $locale); 
     $dt->add(new DateInterval('P1M')); 
     echo PHP_EOL; 
    } 
} 
Ben dokümanlar üzerinde okundu olarak

Bildiğim kadarıyla, kullanıcının sahip ile yerel ayarı başına bilgi toplamak için yukarıdaki gibi yöntemler. Bu amaçla faydalı olabilecek bir kütüphane var. https://github.com/ICanBoogie/CLDR

+0

Cevabınız için teşekkürler. ama tüm cldr bilgilerine sahip olmam gerekiyor. Her bir dile göre ülkelerin adı gibi. Cldr verilerinde. http://www.unicode.org/Public/cldr/27.0.1/ .. dosyaları indirin ve tüm bilgileri görün. – sweb

+1

@sweb, hangi xml dosyasını cldr veritabanına bakmalıyım? Bu biraz büyük:) Eminim, bir noktada önceden tanımlanmış işlevlerle veri eşlemenin yolları vardır, fakat eğer yeterli değilse belki de xml verilerini ayrıştırmalı ve haritalamalısınız. Ayrıca güncellememi kontrol et, size dilleri içeren ülke başına ülke adlarını verir. – Ugur

+0

Ben cldr veri uzman değilim ama core.zip üzerinde görünüyor [/common/main/*.xml] hafta içi ve daha birçok zaman dilimi gibi tüm yerel veriler olması gerekir .. xml işlemek istemiyorum. çünkü php intl'nin buna sahip olması. günler ayın adı ve vs… bence bazı yöntem veya vs bu verileri bana verebilir. Ben ne arıyorum.yöntem veya sınıf – sweb

İlgili konular