我有一个使用Yii的项目,它支持多种语言。使用setlocale,我可以执行以下操作:
setlocale(LC_TIME, 'en_US', 'English');
echo strftime('%x', mktime(0, 0, 0, 12, 25, 2014));
// outputs '12/25/2014'
setlocale(LC_TIME, 'fr_FR', 'French_France')
echo strftime('%x', mktime(0, 0, 0, 12, 25, 2014));
// outputs '25/12/2014'
这几乎是我所需要的,但是,我想以首选格式打印出月份的实际名称,而不仅仅是数字。例如,对于美国英语,我希望它输出:
二〇一四年十二月二十五日
对于法语,我想输出:
2014年12月25日
这必须适用于任何提供的区域设置(多个国家),并使用该区域设置的特定格式规则,法语和英语只是例子。有没有类似的“自动”方式在Yii或php中实现?或者我需要保存一个格式字符串沿着区域设置(不是我的首选选项)
2条答案
按热度按时间ndasle7k1#
Yii的应用程序对象有一个
dateFormatter
属性,它允许您访问CDateFormatter
对象;您可以使用该对象根据应用程序的当前语言设置日期格式。您可以在entry script中设置这种语言,或者您可以将其推迟到稍后的某个时间点(当然仍然是在您开始生成内容之前),例如您的基本控制器的
init
方法。举个例子:
在上面的代码片段中,
'long'
对应于指定区域设置的日期格式d MMMM y
(Yii使用CLDR规范的格式字符串;该预置在Yii方面等同于%x
规范),并且null
指示格式化器在结果中根本不包括时间信息。如果要执行以下操作,也可以手动指定格式:
kqlmhetl2#
在Yii 2中:
请参阅guide。