You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zope页面模板i18n:data使用方法及msgstr配置疑问

Zope Page Template中i18n:data的使用及msgstr配置

i18n:data的核心作用

i18n:data用于将模板中的对象(比如示例中的here/currentTime时间对象)传递给翻译系统,作为翻译字符串的格式化数据源,而非普通的文本替换参数。

错误写法的问题

你之前直接写msgstr "%H:%M"或msgstr "${%H:%M}"无效的原因是:

  • 前者会被当作普通字符串直接输出,没有关联到i18n:data传递的时间对象;
  • 后者是错误的占位符语法,没有指定要格式化的数据源参数。

正确的msgstr配置方式

根据模板中是否指定i18n:name,分两种情况处理:

1. 无i18n:name的独立元素(第一个示例)

对应模板代码:

<span i18n:data="here/currentTime"
      i18n:translate="timefmt">2:32 pm</span>

此时i18n:data传递的是位置参数,msgstr使用位置索引(从0开始)关联数据源,再指定格式:

msgid "timefmt"
msgstr "${0:%H:%M}"

这里0代表i18n:data传递的第一个对象,%H:%M是时间格式化规则(遵循Python strftime语法)。

2. 指定i18n:name的嵌套元素(第二个示例)

对应模板代码:

<div i18n:translate="">At the tone the time will be
<span i18n:data="here/currentTime"
      i18n:translate="timefmt"
      i18n:name="time">2:32 pm</span>... beep!</div>

因为指定了i18n:name="time",msgstr可以直接用命名参数关联数据源:

msgid "timefmt"
msgstr "${time:%H:%M}"

关键说明

  • 格式字符串需匹配传递对象的类型:比如时间对象用strftime格式,数字对象用数字格式化规则;
  • i18n:data传递的对象必须支持对应格式的格式化方法(如Python datetime对象支持strftime)。

内容的提问来源于stack exchange,提问作者Georg Pfolz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:55:09