2010-10-13 37 views
5

Trong một mẫu tôi hiển thị ngày và tháng của một ngày cụ thể:Cách định dạng ngày dựa trên ngôn ngữ?

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

này hoạt động tốt, vấn đề là tên tháng bằng tiếng Anh. Tôi xác định rằng tôi muốn tên tháng ở một ngôn ngữ khác, ví dụ như tiếng Pháp?

+0

Tôi đã thử đặt "default_culture" trong settings.yml, nhưng điều đó không thay đổi bất cứ điều gì – Manu

Trả lời

5

Symfony có một trợ giúp format_date trong số những người trợ giúp Ngày mà tôi biết. Các định dạng không may được ghi nhận tài liệu sai, see this link để biết gợi ý về chúng.

+2

Yeah ... Đó sẽ là một cách tuyệt vời hơn nhiều để làm đi! Tuy nhiên, tôi sẽ để lại câu trả lời của tôi như là một giải pháp PHP chung. – lonesomeday

+0

Có thể format_date hiển thị tên của tháng không? Tôi không thể tìm thấy tài liệu về nó. – Manu

+0

Nevermind, đã tìm thấy nó - http://trac.symfony-project.org/wiki/formatDateHowTo – Manu

1

default_culture chỉ áp dụng cho khung công tác quốc tế hóa của symfony, không áp dụng cho các hàm PHP gốc. Nếu bạn muốn thay đổi dự án thiết lập này rộng, tôi sẽ làm như vậy trong config/ProjectConfiguration.class.php, sử dụng setlocale, và sau đó sử dụng strftime hơn 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> 

Lưu ý rằng điều này đòi hỏi các thiết lập miền địa phương để được kích hoạt trên máy tính của bạn. Để kiểm tra, hãy làm var_dump(setlocale(LC_ALL, 'fr_FR')); Nếu kết quả là false, bạn không thể sử dụng setlocale để thực hiện việc này và có thể bạn cần phải tự mình viết mã dịch. Hơn nữa, bạn sẽ cần phải có miền địa phương chính xác được cài đặt trên hệ thống của bạn. Để kiểm tra xem ngôn ngữ nào được cài đặt, hãy thực hiện locale -a tại dòng lệnh.

+0

thông số 'strftime% X% X' của cá nhân rất hữu ích –

1

Xin lỗi vì đã quá muộn trong ngày, nhưng tôi muốn thêm suy nghĩ của riêng mình tại đây. Định dạng ngày quốc tế tốt nhất mà tôi đã đưa ra là "% e% b% Y", ví dụ: Ngày 9 tháng 3 năm 2012. Tôi thấy điều này dễ đọc hơn định dạng ISO "% Y-% m-% d", ví dụ: 2012-03-09. Theo tài liệu, định dạng% x phải là ngôn ngữ nhạy cảm, nhưng nó không hoạt động đối với tôi, ít nhất là không phải trên iPhone. Điều này có thể là do Safari không chuyển ngôn ngữ trong tiêu đề HTML, tôi không biết.

0

Đôi khi hữu ích khi sử dụng một mảng với các giá trị có thể khác nhau để setlocale(). Đặc biệt để hỗ trợ các môi trường khác nhau (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"))); 

Theo các tiểu bang tài liệu:

Nếu locale là một mảng hoặc tiếp theo tham số bổ sung sau đó mỗi phần tử mảng hoặc tham số là đã cố gắng được đặt làm ngôn ngữ mới cho đến khi thành công. Điều này rất hữu ích nếu một miền địa phương được biết dưới các tên khác nhau trên các hệ thống khác nhau hoặc để cung cấp dự phòng cho một miền địa phương có thể không có sẵn.

Các vấn đề liên quan