如何在土耳其语中显示日期名称(日,月) - Php5,Apache2,Intl

时间:2014-06-25 14:59:00

标签: php apache intl

我已经将Intl安装到我的服务器上。

我已将default_timezone更改为欧洲/伊斯坦布尔,intl.default_locale更改为tr_TR。

我仍然用英语获取日期名称。

我缺少什么?

我应该更改其他一些设置吗?

3 个答案:

答案 0 :(得分:4)

我建议使用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或{{不断重置PHP的运行时语言环境(这可能会导致混乱的IMO) 1}}。这使您可以以非常结构化的方式轻松地使用不同的区域设置输出/格式化。它还推动使用PHP5的新OOPness - 不再是Locale::setDefault废话,你现在应该使用date

IntlDateFormatter构造函数具有相当长的签名,如下所示:

  1. DateTime - 规范化的区域设置,您可以通过Locale::canonicalize过滤所选的区域设置,确保获得正确的区域设置。
  2. $locale - 我将此设置为“没有”' (int $dateType)并使用format参数(-1)以获得最大的灵活性。接受'短','中'' long'' full'同样。您可以在ICU project docs
  3. 中详细了解它们
  4. $pattern - 与$timeType相同,而是处理时间。
  5. $dateType - 这是 $timezone的实例,而是字符串时区。 PHP的DateTimeZone类与intl的类不兼容(例外情况是使用某些内置适配器,例如Date方法)。
  6. IntlDateFormatter::format - 通常是Gregorian($calendar),但也可以接受null的实例。
  7. IntlCalendar - 要使用的解析/渲染格式,请将此视为等同于$pattern的第一个参数。但是,它们不是相同的:ICU(此类使用的底层库)采用了Zend Framework docs中详细记录的ISO格式。例如,您可以使用date,而不是将'Y'用于4位数年份。 ISO格式比PHP更强大。
  8. 一旦你有'yyyy'的实例,以及一个IntlDateFormatter对象,你可以将两者粘合在一起,在给定的语言环境中渲染出一个包含你想要的日期/时间的字符串。使用DateTime给定格式(如前所述)。 IntlDateFormatter::format方法接受一个参数:format的一个实例 - 一块蛋糕!

    DateTime

    作为奖励,$instanceOfIntlDateFormatter->format($instanceOfDateTime); 方法可以采用各种对象(format类型),引用:

      

    要格式化的值。这可能是mixed个对象,DateTime   object,表示(可能是分数)数字的数字类型   自纪元以来的秒数或IntlCalendar输出格式的数组。

    有关时区参数的说明:localtime()在PHP 5.5.0版本中更改。我已经使用以下方法作为解决方法(无法记住细节,自己解决)...

    DateTime

答案 1 :(得分:1)

      <?php
        setlocale(LC_ALL, 'tr_TR.UTF-8');
        echo strftime("%e %B %Y %A", time());
      ?>

打印出来:30 Ekim 2015 Cuma

代码工作正常。

答案 2 :(得分:0)

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
}