, 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
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
@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
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