# 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) — как работает контекст локали