Получите информацию CLDR от расширения Intl в переполнении стека

Я использовал Zend_Locale раньше, но кажется, что расширение PHP intl содержит информацию cldr.

Мне нужно получить некоторую информацию, например, получить доступ к странам для каждого языка?
например en имеет US, UK, GB а также fa имеет IR а также AF и больше данных, доступных по проекту CLDR.

Наименования стран, список часовых поясов для каждого языка и другие данные содержатся в файлах CLDR xml.

Он встроен в php intl или я могу скачать и связать их с классом или методом на нем?

Какой объект или метод дают мне эту информацию о Расширение intl PHP?

Информация CLDR

11

Решение

Я придумаю решение, отправной точкой являются локали.

Вы можете получить список всех локалей с 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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]