是否明智地解析*.zcml文件?

iEl*_*ric 3 zope plone zcml

我已命名实用程序,并希望为以后的i18n用法标记名称.这是正确的方法吗?

<utility
  name="Home"
  i18n:attributes="name"
  provides=".interfaces..."
  factory=".shortcut...." />
Run Code Online (Sandbox Code Playgroud)

Han*_*ing 10

该实用程序的名称不是可翻译的消息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)
Run Code Online (Sandbox Code Playgroud)

如果你看一下例如http://wiki.zope.org/zope3/zcml.html,它会告诉你一个属性需要是在ZCML中可以翻译的MessageID类型.

如果你有一个带有MessageID类型属性的ZCML指令,你需要做的就是为ZCML文件定义一个i18n:domain.ZCML机器基于它们是正确的类型,知道哪些属性可以自行翻译.所以你不需要任何额外的标记来记录你在TAL中需要的任何属性.

总而言之,如果您在Plone内部工作并使用i18ndude提取消息,它将不会从ZCML文件中提取任何消息 - 仅仅因为ZCML中没有定义任何消息,实际上它也显示在Plone UI中的任何位置.

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

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

class MyShortCut(object):

    title = _('My shortcut')
Run Code Online (Sandbox Code Playgroud)

并在UI中使用title属性.


Mar*_*ers 6

你不想那样做.该name属性适用于应用程序,而不是最终用户,需要保持稳定.

如果你翻译它,那么你将不得不翻译你的代码中的所有命名的查找!

可以使用元素i18n_domain="domain"上的标记翻译标题和描述<configure>.