Перейти к содержанию

Документация streamlit-gettext

streamlit-gettext помогает добавлять переводы в приложения на Streamlit. Библиотека учитывает языковые предпочтения браузера и показывает пользователю подходящий перевод.

Если при запуске приложения один раз сохранить язык браузера, это значение может использоваться для всех пользователей: каждый увидит язык первого, кто открыл приложение. streamlit-gettext решает эту проблему — при каждом переводе библиотека проверяет язык браузера текущего пользователя. Поэтому одно запущенное приложение может показывать разным пользователям разные языки.

Проект ещё развивается, поэтому документация и возможности библиотеки могут меняться.

Что умеет библиотека

  • Переводить текст: Помечайте строки для перевода с помощью gettext — обычно её импортируют под коротким именем _.
  • Учитывать число объектов: Функция ngettext выбирает нужную форму сообщения: например, «1 белка» или «5 белок».
  • Выбирать язык: Библиотека может учитывать языковые предпочтения браузера.

Простой пример

Вот как подключить функции перевода в приложении Streamlit:

import streamlit as st
from i18n import gettext as _
from i18n import ngettext

st.write(_("Squirrel application"))

squirrels = st.slider(_("How many squirrels to show?"), 1, 100, 1)

st.write(
    ngettext(
        "There's %(num)d squirrel:",
        "There're %(num)d squirrels:",
        squirrels,
    )
    % {"num": squirrels},
)

st.write("🐿️" * squirrels)

Вызов _() помечает текст, который нужно перевести. ngettext() подбирает форму сообщения в зависимости от числа белок, а ползунок позволяет менять это число.

Это только пример кода, а не пошаговая инструкция по настройке. Чтобы запустить локализованное приложение, понадобятся ещё файлы переводов и конфигурация проекта.

Переключение языка вручную

В этом варианте пользователь сам выбирает язык в меню. Выбор передаётся в set_preferred_languages(), и приложение показывает перевод на этом языке:

import streamlit as st
from i18n import get_available_languages, ngettext, set_preferred_languages
from i18n import gettext as _

language = st.segmented_control(
    "Language",
    options=get_available_languages(),
    label_visibility="collapsed",
    required=True,
)
if language:
    set_preferred_languages([language])

st.write(_("Squirrel application"))

squirrels = st.slider(_("How many squirrels to show?"), 1, 100, 1)

st.write(
    ngettext(
        "There's %(num)d squirrel:",
        "There're %(num)d squirrels:",
        squirrels,
    )
    % {"num": squirrels},
)

st.write("🐿️" * squirrels)

Попробовать приложение

Посмотрите, как это работает, в демонстрационном приложении на Streamlit.

Исходный код приложения доступен в каталоге с примером.

Справочник API

С описанием функций и других интерфейсов библиотеки можно ознакомиться в справочнике API.