Я сделал анонс своей статьи в LJ: http://community.livejournal.com/ru_python/120316.html
LJ-юзер balu (в миру Михаил Казарян) ответил в комментах, что он писал похожее, и оно тоже опубликована на этом же сайте: http://python.com.ua/doc/inter.html
Хочу продолжить дискуссию здесь.
Во-превых, хочу сделать краткий анализ примера из статьи Михаила:
#!/usr/bin/python
# -*- coding: koi8-u -*-
import gettext, traceback
#Support internationalisation
try:
fp = open('./locale/uk/LC_MESSAGES/messages.mo', “rb”)
messages = gettext.GNUTranslations(fp)
fp.close()
except:
traceback.print_exc()
messages = gettext.NullTranslations()
messages.install(unicode=True)
domain = ‘test’ # Назва поточного домену (їх може
# бути декілька).
gettext.bindtextdomain(domain)# Прив'язуємо домен до каталогу з
# перекладом
gettext.textdomain(domain) #Встановлюємо поточний домен
_ = messages.ugettext #Перекладаємо текст
print _('Hello, world')+' string without translate'
Здесь имеется путаница class-based API и GNU gettext API, которые я упоминал в сворей статье. Однако – это лишь информационный шум, потому что реально работает только class-based API, потому что везде в коде используется экземпляр класса
messages = gettext.GNUTranslations(fp) либо messages = gettext.NullTranslations().
Что здесь делают вызовы GNU gettext API – решительно непонятно, поскольку к тому моменту они уже ни на что не влияют. Предположу, что это артефакты из другого старого кода.
Также видно, что Михаил загружает файл перевода вручную, при помощи намертво прошитого пути к MO-файлу. Это немного отличается от изложенного в моей статье. Михаил обещать найти и показать, как оно на самом деле у него работает в винде, жду с нетерпением.
Здесь в примере: ./locale/ua/LC_MESSAGES/messages.po
должно быть uk вместо ua.
И еще: если статья будет подвергаться коррекциям: слово “выддаю” по-украински пишется как “виддаю”. Плюс ще низка маленьких помилок, якщо є бажання – пройдіться якойсь програмою для перевірки орфографії.