*.zcml 文件是否会被国际化解析?
我已经命名了实用程序,并希望标记名称以供以后 i18n 使用。这是正确的方法吗?
<utility
name="Home"
i18n:attributes="name"
provides=".interfaces..."
factory=".shortcut...." />
I have named utilities and would like to mark names for later i18n usage. Is this the right way?
<utility
name="Home"
i18n:attributes="name"
provides=".interfaces..."
factory=".shortcut...." />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该实用程序的名称不是可翻译的消息 ID,而是内部技术 ID。您不能将其用于翻译目的。
如果您查看 zope.component.zcml,您可以看到该指令的接口包含:
如果您查看例如 http://wiki.zope.org/zope3/zcml.html 它会告诉您属性必须是 MessageID 类型才能在 ZCML 中进行翻译。
如果您有一个带有 MessageID 类型属性的 ZCML 指令,您所需要做的就是为 ZCML 文件定义一个 i18n:domain 。 ZCML 机器知道哪些属性本身是可翻译的,基于它们是正确的类型。因此,您不需要任何额外的标记来注释任何属性,就像您在 TAL 中需要的那样。
话虽如此,如果您在 Plone 中工作并使用 i18ndude 提取消息,它不会从 ZCML 文件中提取任何消息 - 只是因为 ZCML 中没有定义任何消息,该消息实际上也显示在 Plone UI 中的任何位置。
如果您有实用程序并希望为它们提供可翻译的名称,请为它们提供标题属性,例如:
并在 UI 中使用标题属性。
The utility's name is not a translatable message id, but an internal technical id. You cannot use it for translation purposes.
If you look at zope.component.zcml you can see the interface for the directive containing:
If you look at for example http://wiki.zope.org/zope3/zcml.html it will tell you that an attribute needs to be of type MessageID to be translatable in ZCML.
If you have a ZCML directive with an attribute of type MessageID, all you need to do is to define an i18n:domain for the ZCML file. The ZCML machinery knows what attributes are translatable itself based on them being of the right type. So you don't need any extra markup to note any attributes like you need in TAL.
All that said, if you work inside Plone and use i18ndude to extract messages, it won't extract any messages from ZCML files - simply because there's not a single message being defined in ZCML, that's also actually shown anywhere in the Plone UI.
If you have utilities and want to give them translatable names, give them a title attribute, like:
and use the title attribute in the UI.
你不想那样做。
name
属性供应用程序使用,而不是供最终用户使用,并且需要稳定。如果您翻译它,那么您也必须翻译代码中的所有命名查找!
可以使用
元素上的i18n_domain="domain"
标记来翻译标题和说明。You do not want to do that. The
name
attribute is meant for application use, not end-users, and needs to be stable.If you translate it, then you'll have to translate all named look-ups through-out your code too!
Titles and descriptions can be translated, using the
i18n_domain="domain"
marker on the<configure>
element.