При регистрации пользователя хочу предложить выбор его временной зоны (часового пояса). Но при этом список временных зон показывать на родном пользователю языке (локаль "ru_RU", либо "en_US", либо какая угодно). Насколько я понимаю, необходимо лезть в ICU чтобы получить канонические названия временных зон. И потом уже мержить массивы из разных локалей. Как такое реализовать?
Вроде бы заработало. Ловится всего 6 исключений из 425 элементов.
$except = [];
$timezonesData = [];
$timezonesIdentifiers = \DateTimeZone::listIdentifiers();
foreach ($timezonesIdentifiers as $timezone) {
try {
$formatter = new \IntlDateFormatter(
"en_US",
\IntlDateFormatter::FULL,
\IntlDateFormatter::FULL,
$timezone,
\IntlDateFormatter::GREGORIAN,
'zzzz - ZZZZ - vvvv - VV - VVV - VVVV'
);
if ($formatter) {
$t10n = $formatter->format(0);
} else {
$except[] = 'exception 1 '.$e->getMessage(); // continue;
}
} catch (\Throwable $e) {
$except[] = 'exception 2 '.$e->getMessage(); // continue;
} catch (\Exception $e) {
$except[] = 'exception 3 '.$e->getMessage(); // continue;
}
$timezonesData[$timezone] = $t10n;
}
var_dump($except);
var_dump($timezonesData);
Стоит отметить, что должно быть установлено расширение PHP - intl с библиотекой ICU (поновее). Дальше преобразовать текущий код и, я думаю, нетрудно будет получить список в том виде, который нужен. Всем спасибо.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости