如何用土耳其语显示日期名称(天、月)-Php5,Apache2,国际


How to display date names (day, month) in Turkish - Php5, Apache2, Intl

我已经在服务器上安装了Intl。

我把default_timezone改成了欧洲/伊斯坦布尔,把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筛选您选择的区域设置可以确保您得到了正确的区域设置
  2. $dateType-我将其设置为"none"(int -1(,并使用格式参数($pattern(以获得最大的灵活性。也接受"short"、"medium"、"long"answers"full"。你可以在ICU项目文档中阅读更多关于它们的信息
  3. $timeType-与$dateType相同,但处理时间
  4. $timezone-这不是DateTimeZone的实例,而是一个字符串时区。PHP的Date类与intl的类不兼容(某些内置适配器除外,如IntlDateFormatter::format方法(
  5. $calendar-通常为格里高利(null(,但也可以接受IntlCalendar的实例
  6. $pattern-要使用的解析/渲染格式,请将其视为等效于date的第一个参数。然而,它们并不相同:ICU(该类使用的下属库(采用了Zend Framework文档中详细记录的ISO格式。例如,您将使用'yyyy',而不是使用'Y'表示4位数的年份。ISO格式比PHP格式健壮得多

一旦有了IntlDateFormatter的实例和DateTime对象,就可以使用IntlDateFormatter::format将两者粘合在一起,以给定的格式(如前所述(在给定的区域设置中呈现出包含所需日期/时间的字符串。format方法只接受一个参数:DateTime的一个实例——小菜一碟!

$instanceOfIntlDateFormatter->format($instanceOfDateTime);

另外,format方法可以接受各种各样的对象(类型为mixed(,引用:

要格式化的值。这可能是DateTime对象、IntlCalendar对象,一种数字类型,表示从epoch开始的秒或CCD_ 36输出的格式的数组。

关于时区参数的注意事项: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
}