簡體   English   中英

如何用土耳其語顯示日期名稱(日,月)-Php5,Apache2,Intl

[英]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 *類都是有益的,因為您不需要使用setlocaleLocale::setDefault不斷重置PHP的運行時語言環境(這可能會使IMO雜亂無章)。 這使您能夠以結構化的方式輕松地使用不同的語言環境進行輸出/格式化。 它還推動使用PHP5的新OOPness-不再浪費date ,您應該現在使用DateTime

IntlDateFormatter構造函數具有相當長的簽名,如下所示:

  1. $locale一個規范化的語言環境,通過Locale::canonicalize過濾所選的語言環境,可以確保獲得正確的語言Locale::canonicalize
  2. $dateType我將此設置為'none'(int -1 ),並使用format參數( $pattern )獲得最大的靈活性。 也接受“短”,“中”,“長”和“滿”。 您可以在ICU項目文檔中閱讀有關它們的更多信息。
  3. $timeType$dateType相同,但要處理時間。
  4. $timezone不是 DateTimeZone的實例,而是一個字符串時區。 PHP的Date類與intl的類不兼容(某些內置適配器(如IntlDateFormatter::format方法除外)除外。
  5. $calendar通常為Gregorian( null ),但也可以接受IntlCalendar的實例。
  6. $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM