我正在尝试制作一个国际化的 Yii 应用程序。
我有一种行为,可以将日期与用户选择的语言环境日期格式相互转换,因此一切都处理得很好。
当我尝试从语言环境设置中为 CJuiDatepicker 设置语言和日期格式时,我最终会得到中文月份名称(无论我选择哪种语言环境格式)和美国格式的日期。
CJuiDatePicker 想要的日期和语言格式与 Yii 提供的不匹配 - 我如何使选择器工作?
我正在尝试制作一个国际化的 Yii 应用程序。
我有一种行为,可以将日期与用户选择的语言环境日期格式相互转换,因此一切都处理得很好。
当我尝试从语言环境设置中为 CJuiDatepicker 设置语言和日期格式时,我最终会得到中文月份名称(无论我选择哪种语言环境格式)和美国格式的日期。
CJuiDatePicker 想要的日期和语言格式与 Yii 提供的不匹配 - 我如何使选择器工作?
jQuery 和 Yii 的问题在于它们不使用相同的语言环境名称。例如,Yii 有诸如en
and之类的语言环境名称,en_gb
而 jQuery 根本没有en
语言环境并调用“英语(英国)”语言环境en-GB
(破折号而不是下划线)。
还有一个问题是 Yii 和 jQuery 的日期格式说明符不同。
为了连接这两个世界,您必须编写一些手动代码;这是我在过去项目中使用的我自己的代码的摘录:
class LocaleExtensions {
private static $yiiTojQueryFormatConversion = array(
'yyyy' => 'yy',
'yy' => 'y',
'MMMM' => 'MM',
'MMM' => 'M',
'MM' => 'mm',
'M' => 'm',
);
private static $yiiTojQueryLanguageConversion = array(
'en' => 'en-GB',
);
public static function getJQueryDateFormat($width='medium') {
return strtr(Yii::app()->getLocale()->getDateFormat($width),
self::$yiiTojQueryFormatConversion);
}
public static function getJQueryLanguageFromYii($language = null) {
if ($language == null) {
$language = Yii::app()->getLanguage();
}
if (isset(self::$yiiTojQueryLanguageConversion[$language])) {
return self::$yiiTojQueryLanguageConversion[$language];
}
return $language;
}
}
要解决语言环境问题,您可以将 Yii 的小部件子类化以在适当的时候执行此操作(或仅手动执行):
$this->language = LocaleExtensions::getJQueryLanguageFromYii($this->language);
您还可以从 Yii 设置中检索与 jQuery 兼容的日期格式,并在 Javascript 代码中使用它,如下所示:
var format = <?php echo json_encode(LocaleExtensions::getJQueryDateFormat('long'));?>
var locale = <?php echo json_encode(LocaleExtensions::getJQueryLanguageFromYii());?>
var now = new Date();
alert($.datepicker.formatDate(format, now, $.datepicker.regional[locale]));