[英]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.