Silversstripe 3.3:如何在模板中转换日期-月份变量


Silverstripe 3.3: how to translate date month variable in a template?

在我的页面上,我有一个日期变量。我想按地区翻译它缩短的月份名称(在我的情况下是立陶宛语)。

我已经在langed/lang/lt_lt.yml:中设置了翻译

Month:
    Jan: 'Sau'
    Feb: 'Vas'
    Mar: 'Kov'
    Apr: 'Bal'
    ...

在我的模板中,当我放入时

$Date.Format(M d)

它总是用英语给出月份和日期,无论地点如何(例如"Apr 18",在这种情况下我需要"Bal 18")。

我试图将Month的变量放入.ss模板的翻译引号中:

<%t Month.$Date.Format('M') %>

但它不起作用。它抛出一个错误:

"[用户错误]未捕获的SSTemplateParseException:第16行模板中的分析错误。错误为:打开块标记t时格式不正确。也许您试图使用运算符?"

有人能向我解释一下我怎么做错了吗?

您可以使用$Date.FormatI18N('%b'),它利用strftime(),而strftime又需要在服务器上安装您的语言环境来翻译它。如果没有,您只需要获得英语(或默认)语言环境。

有关在控制器中获取当前区域设置的扩展,请参阅此要点。

我实现这一点的方式是在控制器上放置一个函数:

public function MonthForVar($var) {
    return _t("Month.$var");
}

然后可以在模板中调用CCD_ 1。不要忘记,如果你在循环中进行$Up.MonthForVar($Date)

**需要补充的是,wmk的答案更适合日期格式,然而,当我试图翻译与日期无关的内容时,我是谷歌的负责人,在这种情况下,这应该有效。