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传递的对象必须支持对应格式的格式化方法(如Pythondatetime对象支持strftime)。
内容的提问来源于stack exchange,提问作者Georg Pfolz
相关产品推荐
相关产品推荐

