[英]How to display date names (day, month) in Turkish - Php5, Apache2, Intl
我已經在服務器上安裝了Intl。
我將default_timezone
更改為Europe / Istanbul,並將intl.default_locale
為tr_TR。
我仍然得到英文的日期名稱。
我想念什么?
我應該更改其他設置嗎?
我建議使用IntlDateFormatter
。 這在PHP的intl
模塊中可用,從該問題的標題來看,此擴展可用。
示例/粗略實現:
$locale = 'tr_TR'; // a canonicalized locale
$format = 'MMM e'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
$locale, // string locale
IntlDateFormatter::NONE, // int date type
IntlDateFormatter::NONE, // int time type
'UTC', // string timezone
IntlDateFormatter::GREGORIAN, // int cal type
$format // string pattern
);
var_dump($dt->format('c')); // string '2014-06-25T08:22:48-07:00' (length=25)
var_dump($df->format($dt)); // string 'Haz 3' (length=5)
首先,使用任何Intl *類都是有益的,因為您不需要使用setlocale
或Locale::setDefault
不斷重置PHP的運行時語言環境(這可能會使IMO雜亂無章)。 這使您能夠以結構化的方式輕松地使用不同的語言環境進行輸出/格式化。 它還推動使用PHP5的新OOPness-不再浪費date
,您應該現在使用DateTime
。
IntlDateFormatter構造函數具有相當長的簽名,如下所示:
$locale
一個規范化的語言環境,通過Locale::canonicalize
過濾所選的語言環境,可以確保獲得正確的語言Locale::canonicalize
。 $dateType
我將此設置為'none'(int -1
),並使用format參數( $pattern
)獲得最大的靈活性。 也接受“短”,“中”,“長”和“滿”。 您可以在ICU項目文檔中閱讀有關它們的更多信息。 $timeType
與$dateType
相同,但要處理時間。 $timezone
這不是 DateTimeZone
的實例,而是一個字符串時區。 PHP的Date
類與intl的類不兼容(某些內置適配器(如IntlDateFormatter::format
方法除外)除外。 $calendar
通常為Gregorian( null
),但也可以接受IntlCalendar
的實例。 $pattern
pattern-要使用的解析/渲染格式,可以認為它等同於date
的第一個參數。 但是, 它們並不相同 :ICU(此類使用的基礎庫)采用的ISO格式已在Zend Framework文檔中進行了詳細記錄 。 例如,而不是使用'Y'
為4位數的年份,您將使用'yyyy'
。 ISO格式比PHP的要健壯得多。 一旦有了IntlDateFormatter
的實例以及DateTime
對象,就可以使用IntlDateFormatter::format
兩者粘合在一起,以給定的語言使用給定的語言環境以給定的格式(包含先前定義的)呈現一個包含所需日期/時間的字符串IntlDateFormatter::format
。 format
方法只接受一個參數: DateTime
一個實例-小菜一碟!
$instanceOfIntlDateFormatter->format($instanceOfDateTime);
另外, format
方法可以接受各種各樣的對象(類型為mixed
),引用:
要格式化的值。 這可能是
DateTime
對象,IntlCalendar
對象,表示自歷元以來(可能是小數)的秒數的數字類型,或者是localtime()
輸出的格式的數組。
關於時區參數的注釋: DateTime
在PHP 5.5.0版本中更改。 我將以下內容用作解決方法(不記得詳細信息,自己解決)。
$timezoneForIntl = $instanceOfDateTime->getTimezone();
if ( version_compare(PHP_VERSION,'5.5.0','<') ) {
$timezoneForIntl = $timezoneForIntl->getName();
}
<?php
setlocale(LC_ALL, 'tr_TR.UTF-8');
echo strftime("%e %B %Y %A", time());
?>
打印出:30 Ekim 2015 Cuma
代碼工作正常。
public function getTurkishDate(){
$locale = 'tr_TR'; // a canonicalized locale
$format = 'dd-MMMM-YYYY'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
$locale, // string locale
IntlDateFormatter::NONE, // int date type
IntlDateFormatter::NONE, // int time type
'UTC', // string timezone
IntlDateFormatter::GREGORIAN, // int cal type
$format // string pattern
);
return $df->format($dt); //string 07-Ağustos-2018
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.