2

我正在尝试制作一个国际化的 Yii 应用程序。

我有一种行为,可以将日期与用户选择的语言环境日期格式相互转换,因此一切都处理得很好。

当我尝试从语言环境设置中为 CJuiDatepicker 设置语言和日期格式时,我最终会得到中文月份名称(无论我选择哪种语言环境格式)和美国格式的日期。

CJuiDatePicker 想要的日期和语言格式与 Yii 提供的不匹配 - 我如何使选择器工作?

4

1 回答 1

3

jQuery 和 Yii 的问题在于它们不使用相同的语言环境名称。例如,Yii 有诸如enand之类的语言环境名称,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]));
于 2012-07-03T09:58:56.193 回答