Python Glossary English

все Python 3gettextфункция

gettext.gettext()

функции перевода

Переводит строку через текущий глобальный домен. Без каталога возвращает строку как есть.

Синтаксис

text = gettext.gettext(message, /)

Отсутствие перевода не ошибка: функция молча вернёт исходник, поэтому опечатку в ключе или забытую привязку домена видно только по экрану. Переводить нужно готовый шаблон, а не собранную строку: gettext(f'Hi, {name}') не найдёт ключа, правильно gettext('Hi, {name}').format(name=name).

Примеры

import gettext
print(gettext.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({'Hi, {name}': 'Привет, {name}'}))
os.environ['LANGUAGE'] = 'ru'
gettext.bindtextdomain('app', 'loc')
gettext.textdomain('app')
name = 'Аня'
print(gettext.gettext('Hi, {name}').format(name=name))  # → Привет, Аня
print(gettext.gettext(f'Hi, {name}'))  # → Hi, Аня

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности