Вы должны использовать разные домены для каждого плагина.Домен может быть именем пакета для предотвращения конфликтов.
Я не понимаю, почему вам нужно перевести что-то вне плагина с помощью домена плагина, но если вам действительно это нужно, то вам следует устранять неоднозначность домена каждый раз.
Каждый плагин может предоставить свое собственное «undescore», легко связанное с доменом плагина:
from my.plugin import MessageFactory as _my_plugin
Обратите внимание, что подчеркивание - это всего лишь соглашение, поэтому инструменты извлечения могут найти i18n-включенные сообщения в программе.Сообщения плагинов должны быть отмечены подчеркиванием в соответствующих пакетах (вы помещаете их в отдельные пакеты, верно?).Во всех других местах вы можете называть эти фабрики другими именами и подчеркивать основной домен перевода программ.
Я менее уверен насчет .mo-файлов, но вы наверняка можете скомпилировать все свои.PO файлы в один файл .mo.Однако, если плагины написаны независимыми авторами, не желающими сотрудничать, могут возникать конфликты.
ОБНОВЛЕНИЕ:
Если плагины находятся в одном пакете с основным приложением, то нет смысла использоватьотдельные переводы доменов для них (это не ваш случай).Если плагины находятся в отдельных пакетах, то извлечение должно быть выполнено независимо для этих пакетов.В обоих случаях у вас нет проблем с переменной _.Если по какой-то причине основное приложение хочет переводы плагинов в своем коде, используйте другое имя для _, как в ответе.Конечно, инструменты извлечения не будут идентифицировать ничего, кроме подчеркивания.
Другими словами, плагины должны заботиться о своих переводах самостоятельно.Основное приложение может использовать функцию перевода, специфичную для плагина, как часть плагина API.Извлечение или ручное добавление строк в po / mo-файлы также не является проблемой для основного приложения: автор плагина может предоставить переводы.