PHP

2015-07-18 5 views
11

में इंटेल एक्सटेंशन से CLDR जानकारी प्राप्त करें मैंने पहले Zend_Locale का उपयोग किया था, लेकिन ऐसा लगता है कि PHP intl एक्सटेंशन में cldr जानकारी है।PHP

मुझे कुछ जानकारी प्राप्त करने की आवश्यकता है जैसे प्रत्येक भाषा के लिए उपलब्ध देश प्राप्त करें? उदाहरण के लिए en में US, UK, GB और fa में IR और AF और CLDR प्रोजेक्ट पर अधिक डेटा उपलब्ध है।

देशों का नाम, प्रत्येक भाषा द्वारा टाइमज़ोन की सूची और सीएलडीआर एक्सएमएल फाइलों पर अधिक डेटा मौजूद है।

यह php intl पर एम्बेड किया गया है या मैं इसे कक्षा या विधि पर डाउनलोड और बाध्य कर सकता हूं?

कौन सा ऑब्जेक्ट या विधि मुझे PHP intl extension पर यह जानकारी दे रही है?

CLDR information

उत्तर

5

मैं एक समाधान के साथ आने के, प्रारंभिक बिंदु स्थानों है।

आप getLocales विधि के साथ सभी स्थानीय लोगों की सूची प्राप्त कर सकते हैं। $locales = ResourceBundle::getLocales(''); यहाँ देखें: http://php.net/manual/en/resourcebundle.locales.php

तो फिर तुम $countryName = Locale::getDisplayRegion($locale, 'en'); के साथ प्रत्येक स्थान के देश का नाम प्राप्त कर सकते हैं या आप Locale::getDisplayLanguage ($locale) और इतने पर के साथ भाषा नाम प्राप्त कर सकते हैं। यहां देखें: http://php.net/manual/en/class.locale.php

उदाहरण के लिए मैं निम्नलिखित कोड के साथ कई टाइमज़ोन नामों से मेल खाता हूं;

<?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); 

    } 
} 

मुझे पता है कि यह सबसे अच्छा जवाब नहीं है लेकिन कम से कम यह आपको किक शुरू कर सकता है।

अद्यतन

स्थान प्रति देश का नाम प्राप्त करने के लिए आप इस एक कोशिश कर सकते हैं;

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

अद्यतन 2

दिन नाम, महीने के नाम, स्थान के अनुसार मुद्रा इकट्ठा

$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; 
    } 
} 

जहां तक ​​मेरा डॉक्स पर पढ़ा है, उपयोगकर्ता के साथ प्रति स्थान की जानकारी इकट्ठा करने के लिए उपरोक्त तरीकों। एक पुस्तकालय है जो इस प्रयोजनों के लिए फायदेमंद हो सकता है। https://github.com/ICanBoogie/CLDR

+0

उत्तर के लिए धन्यवाद। लेकिन मुझे सभी सीएलडीआर जानकारी की आवश्यकता है। प्रत्येक भाषा द्वारा देशों के नाम की तरह। यह cldr डेटा पर है। http://www.unicode.org/Public/cldr/27.0.1/ .. फ़ाइलें डाउनलोड करें और पूरी जानकारी देखें। – sweb

+1

@sweb क्या आप मुझे बता सकते हैं कि कौन सी एक्सएमएल फाइल मुझे cldr डेटाबेस दिखाना चाहिए? यह थोड़ा बड़ा है:) मुझे यकीन है कि किसी बिंदु पर पूर्वनिर्धारित कार्यों के साथ डेटा मैप करने के तरीके हैं, लेकिन यदि यह पर्याप्त नहीं है तो हमें एक्सएमएल डेटा को पार्स और मैप करना चाहिए। मेरे अपडेट को भी देखें, यह आपको प्रति स्थानीय देश नाम देता है जिसमें भाषाएं शामिल हैं। – Ugur

+0

मैं cldr डेटा पर विशेषज्ञ नहीं हूं लेकिन कोर.ज़िप [/common/main/*.xml] पर लगता है कि सभी लोकल डेटा जैसे सप्ताहों का नाम सप्ताह और बहुत कुछ होना चाहिए .. मैं इसे xml प्रक्रिया नहीं करना चाहता हूं। कारण php intl यह है। दिन के महीने और आदि का नाम ... मुझे लगता है कि कुछ विधि या आदि मुझे यह डेटा दे सकते हैं। मैं क्या देख रहा हूँविधि या कक्षा – sweb

संबंधित मुद्दे

 संबंधित मुद्दे