【问题标题】:Silverstripe 3.3: how to translate date month variable in a template?Silverstripe 3.3:如何在模板中翻译日期月份变量?
【发布时间】:2016-04-18 08:57:19
【问题描述】:

在我的页面上,我有一个日期变量。我希望按语言环境(在我的例子中是立陶宛语)翻译它的缩写月份名称。

我已经在 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') %>

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

“[User Error] Uncaught SSTemplateParseException: Parse error in template on line 16. Error was: Malformed opening block tag t. 也许你尝试过使用操作符?”

谁能给我解释一下我做错了什么?

【问题讨论】:

  • 您在_config 中设置了什么?这有帮助吗? i18n::set_locale('lt_LT'); 在模板中$Date.FormatI18N('%d b%')
  • 哦,我忘了说...该页面是可翻译的。我需要它的英语和立陶宛语版本以及它们各自的翻译。
  • 您使用什么模块进行翻译? @munomono 为您提供了获取日期国际格式的正确方法。
  • 我使用了 localdate 模块
  • @PavelŠliachtovič 如果按照我的建议不起作用,请检查您的服务器上的语言环境locale -a 并在需要时安装。

标签: php translation silverstripe


【解决方案1】:

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

请参阅this gist 以获取在您的控制器中获取当前语言环境的扩展。

【讨论】:

    【解决方案2】:

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

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

    然后你可以在你的模板中调用$MonthForVar($Date)。不要忘记你是否在循环中执行它以转到$Up.MonthForVar($Date)

    ** 应该补充一点,wmk 的答案更适合日期格式,但是当我尝试翻译与日期无关的内容时,我是从谷歌那里得到的,在这种情况下,这应该可以工作。

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多