2013-08-05 5 views
4

Прекрасный польский язык использует разные грамматики для названия месяцев, когда говорят такие вещи, как «Март 2013» (без дня) против «17 марта 2013 года» (с днем).Польские месяцы в форматировании даты

Использование PHP strftime() с %B дает правильное название месяца для дня без дневного. Как я могу правильно записать дату в дневном случае? Должен ли я сам что-то кодировать или уже есть какая-то поддержка для таких случаев?

ответ

5

Вам нужно два массива:

$m_en = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); 

$m_pol = array("Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"); 

все, что вам нужно сделать сейчас:

$workoutSlug = str_replace($m_en, $m_pol, $input); 

Input есть вы вход вы хотите перевести.

1

Как вы, вероятно, не знаете всех языков в мире, я бы предположить, что такая функциональность необходима для любого языка, и Английский - исключение, где это правило ничего не меняет. Затем я создам класс формата, который будет содержать допустимую строку даты в зависимости от языка.

Ваша собственная функция может реализовать логику как замену месяца с Marzec на Marca, поэтому вы храните два массива с соответствующим индексом и в зависимости от месяца вы выбираете, какой элемент из массива следует заменить тем, какой элемент массива2 в выходной строке перед возвращение.

Иногда самый простой вариант - это лучшее, что вы можете сделать.

7

Существует IntlDateFormatter, международная версия DateFormatter с PHP5.3, если вы включите внутреннее расширение.

if (version_compare(PHP_VERSION, '5.3.0', '<')) { 
    exit ('IntlDateFormatter is available on PHP 5.3.0 or later.'); 
}  
if (!class_exists('IntlDateFormatter')) { 
    exit ('You need to install php_intl extension.'); 
} 
$polishDateFormatter = new IntlDateFormatter(
    'pl_PL', 
    IntlDateFormatter::LONG, 
    IntlDateFormatter::NONE 
); 

$now = new DateTime("2013-08-06"); 
echo $polishDateFormatter->format($now), "\n"; 

Этот код возвращает меня,

6 Sierpnia 2013

, который я надеюсь, правильно. (Я не знаю польский ;-)

Вы также можете проверить IntlDateFormatter :: SHORT, MEDIUM и FULL, чтобы получить другие обозначения во втором параметре конструктора.

Смежные вопросы