переключение даты локали - PullRequest
7 голосов
/ 13 февраля 2012

Может кто-нибудь сказать мне, как переключить формат даты локали в Symfony2?

независимо от того, что я установил в config (framework.session.default_locale), это всегда возвращает дни недели на английском языке (мне понадобитсядень недели на немецком языке):

$start->format("D d.m.Y");

при выводе локали по умолчанию всегда возвращается значение "de" Кстати, независимо от того, что я настроил в config.yml

echo  \Locale::getDefault()

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Я хочу иметь возможность форматировать дату таким образом, чтобы она правильно выводилась (то есть с правильными немецкими рабочими днями) в моей локальной системе И на живом сервере.Попробовал это с помощью strftime, который использует установленные локали системы и столкнулся с реальными проблемами, поскольку пакеты локали имеют разные схемы именования на машинах live и dev.Здесь есть еще один вопрос: PHP: почему моя дата отформатирована на сервере иначе?

Ответы [ 5 ]

8 голосов
/ 16 февраля 2012

Symfony2 не предоставляет никакого средства форматирования даты в своем ядре.

Все, что он делает, это конфигурирует значение \Locale::getDefault(), анализируя сеанс и запрос.

Вы должны предоставить некоторые дополнительные услугидля обработки в соответствии с форматированием локали, например SonataIntlBundle .

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

После активацииВы можете использовать их в своих шаблонах, например:

{{ my_date|format_datetime }}

Больше информации здесь: https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst

4 голосов
/ 22 февраля 2012

Я использовал такой код для форматирования дат в моем проекте (вам нужно включить расширение intl для php):

<?php
    class DefaultController extends Controller {
        public function indexAction() {
            $date = new \DateTime("now");
            $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE);
            $formatter->setPattern("EEEE Y-M-d");
            return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date));
    }

И у меня это прекрасно работает. Как создать скороговорку форматирования вы можете найти на http://userguide.icu -project.org / formatparse / Дата и время

Но я не нашел помощника для ветки, так что вы можете создать свой собственный

2 голосов
/ 10 октября 2014

просто добавьте расширение веточки в ваш config.yml

services:
    twig.extension.intl:
        class: Twig_Extensions_Extension_Intl
        tags:
            - { name: twig.extension }

В веточку вашего шаблона Синтаксис: {{myDate |localizeddate ('sizeDate', 'sizeHour', 'locale'}} myDate: должен быть объектом DateTime sizeDate: может быть none / short / medium / long / full sizeHour: может быть none / short / medium / long / full locale:необязательно, по умолчанию будет использоваться язык сеанса, но вы можете принудительно установить одно значение для разных языковых стандартов

{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }})
<!--
locale "fr" : vendredi 21 décembre 2012 (13:37)
locale "en : Friday, December 21, 2012 (13:37 PM)
-->

Если вы получите сообщение об ошибке " Пожалуйста, установите расширение 'intl' для полной локализации "

установить пакет php5-intl, например, на сервере Debian команда будет: apt-get install php5-intl

Не забудьте очистить кеш;)

2 голосов
/ 20 августа 2012

Более простой способ - сохранить форматы в файлах перевода, например:

В файле "messages. en .yml":

date.format: m/d/Y
time.format: g:i A

В файле "messages. fr .yml":

date.format: d/m/Y
time.format: H:i

Затем в файле ветки вы можете сделать это:

{{ my_date|date('date.format'|trans) }}

Таким образом, дата автоматически будет в правильном формате с использованием текущей локали.

0 голосов
/ 28 октября 2012

Для этой цели есть пакет: https://github.com/michelsalib/BCCExtraToolsBundle Проще в использовании, чем проект сонаты.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...