# python: Подходы к переводу строк URL: https://generaltranslation.com/ru/docs/python/guides/strings.mdx --- title: Подходы к переводу строк description: Перевод строк в Python с помощью t(), msg(), переменных и derive() --- Есть два способа перевода строк в Python-библиотеках GT: 1. **Инлайн с `t()`** — переводите строки прямо в обработчиках маршрутов 2. **Предварительно зарегистрированные с `msg()`** — определяйте строки на уровне модуля и разрешайте их во время выполнения ## Инлайн-перевод с `t()` Используйте [`t()`](/docs/python/api/t), чтобы перевести строку с учётом локали текущего запроса: ```python from gt_flask import t @app.route('/api/greeting') def greeting(): return { 'message': t('Hello, world!') } ``` ```python from gt_fastapi import t @app.get('/api/greeting') def greeting(): return { 'message': t('Hello, world!') } ``` ## Предварительно зарегистрированные строки с `msg()` Используйте [`msg()`](/docs/python/api/t), чтобы зарегистрировать строки на уровне модуля, а затем вызывать их в обработчиках: ```python title="messages.py" from gt_flask import msg # или gt_fastapi GREETING = msg('Hello, world!') WELCOME = msg('Welcome, {name}!') NOT_FOUND = msg('Resource not found.') ``` ```python title="routes.py" from messages import GREETING, WELCOME, NOT_FOUND @app.route('/api/greeting') def greeting(): return { 'greeting': GREETING(), 'welcome': WELCOME(name='Alice'), } @app.errorhandler(404) def not_found(e): return { 'error': NOT_FOUND() }, 404 ``` И `t()`, и `msg()` дают одинаковый результат перевода. Используйте `msg()`, если одна и та же строка встречается в нескольких местах или если вы хотите хранить все строки в одном файле. ## Интерполяция переменных ### С `t()` Используйте заполнители `{name}` и передавайте значения через аргументы с ключевыми словами: ```python t('Welcome, {name}!', name=user.display_name) t('You have {count} new messages.', count=unread_count) ``` ### С `declare_var()` и `decode_vars()` Для более гибкого управления переменными используйте [`declare_var()`](/docs/python/api/declare-var) и [`decode_vars()`](/docs/python/api/decode-vars): ```python from gt_flask import declare_var, decode_vars template = t('Hello, {name}! You have {count} items.') result = decode_vars(template, { 'name': declare_var('name', 'Guest'), 'count': declare_var('count', 0), }) ``` ## Использование `derive()` для грамматического согласования [`derive()`](/docs/python/api/derive) генерирует грамматически правильные варианты — это полезно для языков, где форма слов зависит от контекста (рода, числа, падежа): ```python from gt_flask import t, derive count = 3 item_word = derive('item', {'one': 'item', 'other': 'items'}) message = t('You have {count} {item}.', count=count, item=item_word) ``` См. [руководство по деривации](/docs/python/tutorials/derive), чтобы узнать о других подходах. ## Использование `$context` для снятия неоднозначности Неоднозначные строки могут приводить к неточным переводам. Добавьте `$context`, чтобы помочь переводчику выбрать верный вариант: ```python t('Apple', context='the technology company') t('Spring', context='the season, not a coil') t('Bank', context='a financial institution') # Также работает с msg() APPLE = msg('Apple', context='the fruit') ``` ## Следующие шаги * [`t()` справка по API](/docs/python/api/t) * [`declare_var()` справка по API](/docs/python/api/declare-var) * [`derive()` справка по API](/docs/python/api/derive) * [Определение локали и middleware](/docs/python/guides/middleware) — как работает контекст локали