繁体   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