[英]Set locale for Symfony 2.5 application (force locale)
我想將我的Symfony 2.5應用程序的語言環境強制設置為ru_RU.UTF-8
。 我希望將此語言環境用於strftime()
函數。
我的app/config.yml
具有以下配置:
framework:
default_locale: "ru_RU.UTF-8"
我在我的一個控制器中使用以下代碼進行調試:
//setlocale(LC_TIME, 'ru_RU.UTF-8');
var_dump(setlocale(LC_TIME, 0));
var_dump(strftime('%B', time()));
die();
像這樣執行時,它顯示: string(1) "C" string(6) "August"
。
但是,當第一行取消注釋時,它顯示: string(11) "ru_RU.UTF-8" string(12) "Август"
,因此語言環境已安裝在系統中並且可以正常工作。
我如何使Symfony始終使用配置中指定的語言環境?
$ locale -a :
C
C.UTF-8
en_US.utf8
POSIX
ru_RU
ru_RU.iso88595
ru_RU.utf8
Symfony的語言環境設置不會影響PHP設置,而只是Symfony設置。
您必須使用setlocale()
來配置PHP的語言環境。 您可以將其放置在前端控制器( web/app.php
和web/app_dev.php
)中或為kernel.request創建一個偵聽器。
任何基於setlocale()
解決方案(如@Wouter J的答案 ),遲早都會使您頭疼,因為它依賴於當前計算機的語言環境設置。 因此,無論何時切換服務器,它都可能停止工作。 開發服務器和生產服務器之間可能會有所不同。
更好的方法是放棄strftime()
,而使用IntlDateFormatter::formatObject
:
\IntlDateFormatter::formatObject($entity->getTimestamp(), \IntlDateFormatter::FULL, 'de_AT');
這僅需要安裝PHP intl
擴展。 還有一個PHP的\\IntlDateFormatter
的Symfony替代品,但我想只有在沒有intl
擴展名的情況下才有必要。
對於Twig,您可以使用localizeddate過濾器。 安裝說明: https : //stackoverflow.com/a/24390635/1668200
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.