Локализация Zenoss

Локализация и интернационализация - два термина, которые чаще всего используются, когда речь заходит о переводе интерфейса Zenoss на другие языки (для тех, кто будет искать что-то по этой теме: в английских терминах это выглядит как localization и internationalization, хотя чаще используются сокращенные варианты: l10n и i18n - числа означают количество опущенных букв).

Возможность локализации предоставляется сервером веб-приложений Zope, на котором работает Zenoss, ну а разработчикам последнего остается лишь воспользоваться предоставляемым инструментом. Стоит отметить, что в самом Zenoss работа по локализации началась совсем недавно - с выходом 3-й версии разработчики объявили о подвижках в этой области, однако на данный момент (текущая версия - 3.0.3) реализовано не слишком много. Основной проблемой является необходимость изменения способа вывода текста на странице, т.е. изменение в методах разработки, и если в самом продукте это сделать не так сложно, то в зенпаках, а особенно происходящих из community, такие изменения внести гораздо сложнее.

Давайте теперь посмотрим, что же сделано на данный момент. В Zenoss локализуются 2 типа текста: надписи в интерфейсе и всплывающие подсказки (tooltips):

  1. файлы, отвечающие за локализацию интерфейса, находятся в директории $ZENHOME/Products/ZenUI3/locales/ . Здесь необходимо создать директорию, соответствующую нужной локали (в нашем случае "ru"), в которой должна быть директория "LC_MESSAGES". Сами строки с переводом должны находиться в файле zenoss.po (people friendly), который затем конвертируется в zenoss.mo (machine friendly), который уже и используется в Zenoss. Файл zenoss.po имеет следующий вид:
  2. msgid "Events"
    msgstr "События"
     
    msgid "Infrastructure"
    msgstr "Инфраструктура"

    За основу можно взять файл zenoss.po из другой локализации. Однако, на данный момент содержание имеющихся локализаций не соответствует реально доступным для перевода строкам, поэтому могу посоветовать пробовать руками прописывать строки и перевод и смотреть, получилось ли :)

    Когда процесс перевода завершен, необходимо запустить следующую команду для формирования machine friendly файла:

    msgfmt -o zenoss.mo zenoss.po
  3. для локализации всплывающих подсказок в директории $ZENHOME/Products/ZenUI3/tooltips/ создаем директорию соответствующей локализации ("ru"), в которую помещаем xml файлы из английской (или любой другой) локализации и переводим.

Остается только добавить, что для того, чтобы изменения вступили в силу, неоходимо перезапустить процесс zopectl:

su - zenoss -c "zopectl restart"

 Теперь, чтобы посмотреть на русский Zenoss, перегрузите страницу и, если в Вашем браузере русский язык более предпочитаем для отображения веб-страниц (см. настройки Вашего браузера), чем английский, то вы увидите примерно такое:

Update: вот небольшой скрипт, который ищет локализуемые строки и формирует файл zenoss.po в директории русской локализации:

import re,os,subprocess
dict={}
if os.environ.has_key("ZENHOME"):
    zenhome=os.environ["ZENHOME"]
else:
    out=subprocess.Popen("su - zenoss -c 'set|grep ZENHOME'",shell=True,stdout=subprocess.PIPE).communicate()[0]
    for line in out.split('n'):
        if "ZENHOME=" in line: zenhome=line[8:]
po=open(zenhome+"/Products/ZenUI3/locales/ru/LC_MESSAGES/zenoss.po","w")
for path in ("Products","ZenPacks"):
    out=subprocess.Popen('egrep -ir "_t(" %s/%s/ 2>/dev/null'%(zenhome,path),shell=True,stdout=subprocess.PIPE).communicate()[0]
    for line in out.split('n'):
        regexp=re.search(".*_t(?'(.*?)').*",line)
        if regexp:
            str=regexp.group(1)
            if str and not dict.has_key(str):
                dict[str]=""
for i in sorted(dict.keys()):
    po.write('msgid "'+i+'"n'+'msgstr "'+dict[i]+'"nn')
po.close()

 

2916

Комментарии

Приветствую!

Cтолкнулся с мониторингом Zenoss Core. Я не админ. Штатный сотрудник. Мне интересно можно ли настроить какие-то звуковые оповещения по поводу Сritikal Events? Чтоб звенело или гудело? Как это сделать?

 

Добрый день.

Звенеть и гудеть непосредственно в браузере нет смысла (если событие произошло ночью, то вряд ли кто-то будет сидеть в это время в веб-интерфесе). Можно настроить Alerting Rules (Advanced->Users->Выбрать пользователя->Alerting Rules) на отсылку email при возникновении критичных событий. Ну а дальше либо почтовый клиент периодически проверяет почту и устраивает светомузыку при получении письма, либо можно использовать сервисы типа email-to-sms (многие операторы сотовой связи также предоставляют подобную услугу)

Дискуссия по поводу звукового оповещения на форуме Zenoss: http://sourceforge.net/projects/zapplet/