2010-10-13 18 views
5

W szablonie I wyświetlić dzień i miesiąc określonej daty:Jak sformatować daty na podstawie ustawień narodowych?

<div class="jour"><?php echo date('d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo date('M',strtotime($content->getCreatedAt())) ?></div> 

Działa to dobrze, problemem jest nazwa miesiąca jest w języku angielskim. Gdzie mam określić, że chcę nazwy miesięcy w innym języku, na przykład francuski?

+0

Próbowałem ustawienie „default_culture” w settings.yml, ale to niczego nie zmienia – Manu

Odpowiedz

5

Symfony ma pomocnika format_date wśród pomocników Data, który jest świadomy i18n. Formaty są niestety źle udokumentowane, see this link, aby uzyskać podpowiedź na ich temat.

+2

Tak ... To byłoby o wiele ładniejszy sposób Zrób to! Zostawię jednak moją odpowiedź jako ogólne rozwiązanie PHP. – lonesomeday

+0

Czy format_danych wyświetla nazwę miesiąca? Nie mogę znaleźć dokumentacji na ten temat. – Manu

+0

Nieważne, znalazłem - http://trac.symfony-project.org/wiki/formatDateHowTo – Manu

1

default_culture dotyczy wyłącznie internacjonalizacji symfony, a nie macierzystych funkcji PHP. Jeśli chcesz zmienić to ustawienie szeroki projekt, chciałbym zrobić w config/ProjectConfiguration.class.php korzystając setlocale, a następnie użyj strftime zamiast date:

// config/ProjectConfigration.class.php 
setlocale(LC_TIME, 'fr_FR'); 

// *Success.php 
<div class="jour"><?php echo strftime('%d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo strftime('%b',strtotime($content->getCreatedAt())) ?></div> 

Zauważ, że wymaga to ustawienia regionalne mają być włączone na komputerze. Aby sprawdzić, wykonaj var_dump(setlocale(LC_ALL, 'fr_FR')); Jeśli wynik to false, nie możesz użyć setlocale, aby to zrobić i prawdopodobnie musisz samodzielnie wpisać kod tłumaczenia. Ponadto musisz mieć odpowiednie ustawienia regionalne zainstalowane w twoim systemie. Aby sprawdzić, które ustawienia lokalne są zainstalowane, wykonaj locale -a w wierszu poleceń.

+0

osobiście uważam 'strftime% X% X' params bardzo przydatne –

1

Przepraszam za późny dzień, ale chciałbym dodać tutaj swoje własne przemyślenia. Najlepszym międzynarodowym formatem dat, jaki wymyśliłem, jest "% e% b%% Y", np. 9 marca 2012 r. Uważam, że jest to o wiele bardziej czytelne niż format ISO "% Y-% m-% d", np. 2012-03-09. Zgodnie z dokumentami, format% x powinien być wrażliwy na ustawienia regionalne, ale nie działa on dla mnie, a przynajmniej nie na iPhonie. Może to być spowodowane tym, że Safari nie przekazuje ustawień narodowych w nagłówkach HTML, nie wiem.

0

Czasem użyteczne jest użycie tablicy z różnymi możliwymi wartościami do setlocale(). Specjalnie do obsługi różnych środowisk (Windows, Linux, ...)

setlocale(LC_TIME, array('fr', 'fr_FR', 'fr_FR.utf8', 'french', 'french_FRANCE', 'french_FRANCE.utf8')); 
echo strftime("%A %d %B", strtotime(date("Y-m-d"))); 

Jak mówi dokumentacja:

Jeśli locale jest tablicą lub następnie dodatkowych parametrów wtedy każdy element tablicy lub parametr jest próbowano ustawić jako nową lokalizację do momentu osiągnięcia sukcesu. Jest to użyteczne, jeśli lokalizacja jest znana pod różnymi nazwami w różnych systemach lub w celu zapewnienia zastępstwa dla potencjalnie niedostępnego ustawienia narodowego.