Разве файлы * .zcml анализируются? - PullRequest
3 голосов
/ 01 августа 2011

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

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

Ответы [ 2 ]

10 голосов
/ 01 августа 2011

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

Если вы посмотрите на 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: домен для файла ZCML.Механизм ZCML сам знает, какие атрибуты можно перевести, основываясь на их правильном типе.Таким образом, вам не нужна дополнительная разметка, чтобы отмечать какие-либо атрибуты, которые вам нужны в TAL.

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

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

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

class MyShortCut(object):

    title = _('My shortcut')

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

6 голосов
/ 01 августа 2011

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

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

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

...