Локализация дат и времени

Задача
Необходимо отображать даты и значения времени в соответствии с настройками локали.

Решение
Это делается при помощи строки формата %c функции strftime():

print strftime('%c');


Можно также хранить строки формата функции strftime() как сообщения в каталоге сообщений:

$MC = new pc_MC_es_US;
print strftime($MC->msg('%Y-%m-%d'));


Обсуждение
Строка формата %c функции strftime() задает возвращаемое этой функцией представление даты и времени, предпочтительное для текущей локали. Ниже показан наиболее быстрый способ форматирования строки времени в соответствии с текущими настройками:

print strftime('%c');


Этот фрагмент кода генерирует множество результатов:

Tue Aug 13 18:37:11 2002 // для локали C по умолчанию
mar 13 ago 2002 18:37:11 EDT // для локали es_US
mar 13 aoы 2002 18:37:11 EDT // для локали fr_FR


Форматированная строка времени, полученная с помощью %c, хотя и соответствует локали, не очень гибкая. Например, если требуется только время, лучше передать другую строку формата функции strftime().

Хуже то, что и сами строки задания формата варьируются от локали к локали. В некоторых локалях значения часов отображаются в диапазоне от 1 до 12 с уточнением A.M./P.M., а в других они должны изменяться от 0 до 23. Чтобы строки времени выводились корректно именно для данной локали, включите нужные элементы в массив $messages для каждого формата времени. Ключ определенного формата времени, например %H:%M, для всех локалей будет одинаков. А вот значение может изменяться, например %H:%M для 24-часовых локалей или %I:%M %P для 12-часовых локалей. Затем найдите соответствующую строку формата и передайте ее функции strftime():$MC = new pc_MC_es_US;
print strftime($MC->msg('%H:%M'));

Смена локали не изменяет часовой пояс, она меняет только форматирование показываемого результата.
Теги:
Интернационализация, локализация
Добавлено: 22 Июля 2018 15:31:55 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...