*.zcml 文件是否会被国际化解析?

发布于 2024-11-27 19:56:15 字数 184 浏览 2 评论 0原文

我已经命名了实用程序,并希望标记名称以供以后 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放肆 2024-12-04 19:56:15

该实用程序的名称不是可翻译的消息 ID,而是内部技术 ID。您不能将其用于翻译目的。

如果您查看 zope.component.zcml,您可以看到该指令的接口包含:

class IUtilityDirective(IBasicComponentInformation):
    """Register a utility."""

    name = zope.schema.TextLine(
        title=_("Name"),
        description=_("Name of the registration.  This is used by"
                      " application code when locating a utility."),
        required=False)

如果您查看例如 http://wiki.zope.org/zope3/zcml.html 它会告诉您属性必须是 MessageID 类型才能在 ZCML 中进行翻译。

如果您有一个带有 MessageID 类型属性的 ZCML 指令,您所需要做的就是为 ZCML 文件定义一个 i18n:domain 。 ZCML 机器知道哪些属性本身是可翻译的,基于它们是正确的类型。因此,您不需要任何额外的标记来注释任何属性,就像您在 TAL 中需要的那样。

话虽如此,如果您在 Plone 中工作并使用 i18ndude 提取消息,它不会从 ZCML 文件中提取任何消息 - 只是因为 ZCML 中没有定义任何消息,该消息实际上也显示在 Plone UI 中的任何位置。

如果您有实用程序并希望为它们提供可翻译的名称,请为它们提供标题属性,例如:

from zope.i18nmessageid import MessageFactory
_ = MessageFactory('mydomain')

class MyShortCut(object):

    title = _('My shortcut')

并在 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:

class IUtilityDirective(IBasicComponentInformation):
    """Register a utility."""

    name = zope.schema.TextLine(
        title=_("Name"),
        description=_("Name of the registration.  This is used by"
                      " application code when locating a utility."),
        required=False)

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:

from zope.i18nmessageid import MessageFactory
_ = MessageFactory('mydomain')

class MyShortCut(object):

    title = _('My shortcut')

and use the title attribute in the UI.

独自←快乐 2024-12-04 19:56:15

你不想那样做。 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文