Silverstripe 3.3:如何在模板中翻译日期月份变量?

时间:2016-04-18 08:57:19

标签: php translation silverstripe

在我的页面上,我有一个日期变量。我想用locale(在我的例子中是立陶宛语)翻译缩短的月份名称。

我在langed / lang / lt_LT.yml中设置了翻译:

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

当我把

放在我的模板中
$Date.Format(M d)

它总是用英语表示月份和日期,无论当地情况如何(例如“4月18日”,在这种情况下我需要“Bal 18”)。

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

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

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

“[用户错误]未捕获SSTemplateParseException:第16行模板中的解析错误。错误是:格式错误的打开块标记t。也许您曾尝试使用运算符?”

有人可以向我解释我是怎么做错的吗?

2 个答案:

答案 0 :(得分:4)

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

请参阅https://sites.google.com/a/teamdev.com/jxbrowser-support/home了解扩展程序以获取控制器中的当前区域设置。

答案 1 :(得分:1)

我实现此功能的方法是在控制器上添加一个功能:

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

然后您可以在模板中调用$MonthForVar($Date)。不要忘了,如果你要循环去做$Up.MonthForVar($Date)

**应该补充一点,wmk的答案对于日期格式更好,但是当我尝试翻译与非日期相关的内容时,我是Google的主角。在这种情况下,这应该可行。