все Python 3gettextфункция
gettext.bindtextdomain()
глобальный домен
Связывает домен переводов с каталогом, где лежат файлы <язык>/LC_MESSAGES/<домен>.mo, для функций уровня модуля.
Синтаксис
path = gettext.bindtextdomain(domain, localedir=None)
Привязка глобальна для всего процесса и влияет на gettext(), dgettext() и родственников; библиотеке лучше держать свой объект translation(). Путь к каталогу задают от файла программы, а не относительно текущей папки, иначе запуск из другого места тихо вернёт непереведённые строки. Без аргумента localedir функция только сообщает текущую привязку.
Примеры
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': 'Привет'}))
os.environ['LANGUAGE'] = 'ru'
print(gettext.bindtextdomain('app', 'loc').endswith('loc')) # → True
print(gettext.dgettext('app', 'Hello')) # → Привет
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности