Разве файлы *.zcml анализируются в i18n?

Я назвал утилиты и хотел бы отметить имена для последующего использования i18n. Это правильный путь?

<utility
  name="Home"
  i18n:attributes="name"
  provides=".interfaces..."
  factory=".shortcut...." />

2 ответа

Решение

Имя утилиты - это не переводимый идентификатор сообщения, а внутренний технический идентификатор. Вы не можете использовать его в целях перевода.

Если вы посмотрите на 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.

Если у вас есть директива ZCML с атрибутом типа MessageID, все, что вам нужно сделать, это определить i18n:domain для файла ZCML. Механизм ZCML сам знает, какие атрибуты можно перевести, основываясь на их правильном типе. Таким образом, вам не нужна дополнительная разметка, чтобы отмечать любые атрибуты, которые вам нужны в TAL.

Все это говорит о том, что если вы работаете внутри Plone и используете i18ndude для извлечения сообщений, он не извлечет никаких сообщений из файлов ZCML - просто потому, что в ZCML не определено ни одного сообщения, которое также фактически отображается в любом месте пользовательского интерфейса Plone.

Если у вас есть утилиты и вы хотите дать им переводимые имена, присвойте им атрибут title, например:

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

class MyShortCut(object):

    title = _('My shortcut')

и использовать атрибут заголовка в пользовательском интерфейсе.

Вы не хотите этого делать. name Атрибут предназначен для использования приложения, а не для конечных пользователей, и должен быть стабильным.

Если вы переведете его, то вам придется переводить все именованные поиски и в ваш код!

Названия и описания могут быть переведены с помощью i18n_domain="domain" маркер на <configure> элемент.

Другие вопросы по тегам