все Python 3gettextфункция
gettext.translation()
каталоги переводов
Находит и загружает каталог переводов для домена и языков. Основной способ получить объект с методами gettext и ngettext.
Синтаксис
t = gettext.translation(domain, localedir=None, languages=None, class_=None, fallback=False)
Без fallback=True отсутствие файла .mo — это FileNotFoundError, и программа падает у пользователя с непредусмотренной локалью. С fallback=True вернётся NullTranslations, отдающий исходные строки. Загруженные каталоги кэшируются по пути к файлу, так что правка .mo во время работы программы не подхватится. Старое имя Catalog — тот же объект, что translation; в новом коде пишите translation().
Примеры
import gettext
try:
gettext.translation('app', localedir='loc', languages=['ru'])
except FileNotFoundError as e:
print(type(e).__name__) # → FileNotFoundError
t = gettext.translation('app', 'loc', ['ru'], fallback=True)
print(t.gettext('Hello')) # → Hello
import io, struct
def mo(cat): # собрать каталог .mo в памяти
cat = {'': 'Content-Type: text/plain; charset=UTF-8\n', **cat}
ks = sorted(cat)
bs = [k.encode() for k in ks] + [cat[k].encode() for k in ks]
n, data, tab = len(ks), b'', b''
for b in bs:
tab += struct.pack('<2I', len(b), 28 + 16 * n + len(data))
data += b + b'\0'
return struct.pack('<7I', 0x950412de, 0, n, 28, 28 + 8 * n, 0, 0) + tab + data
import gettext
import os
os.makedirs('loc/ru/LC_MESSAGES', exist_ok=True)
open('loc/ru/LC_MESSAGES/app.mo', 'wb').write(mo({'Hello': 'Привет'}))
_ = gettext.translation('app', 'loc', ['ru']).gettext
print(_('Hello'), _('Bye')) # → Привет Bye
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности