Python SDK

AI-перевод с использованием Python и Lingo.dev

Введение

Python SDK Lingo.dev переводит текст, JSON-объекты и чаты через асинхронный API. Он обрабатывает большие объемы данных, автоматически разбивая содержимое на оптимальные размеры пакетов, отслеживает прогресс для длительных переводов и поддерживает глоссарии для обеспечения согласованной терминологии.

Установка

pip

pip install lingodotdev

uv

uv add lingodotdev

Быстрый перевод

Пропустите менеджер контекста для одноразовых переводов. Эти методы автоматически управляют жизненным циклом движка и по умолчанию используют быстрый режим, что делает их идеальными для CLI-инструментов и скриптов.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev.engine import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]

    # Перевод текста
    text_result = await LingoDotDevEngine.quick_translate(
        "Hello world",
        api_key=api_key,
        source_locale="en",
        target_locale="es"
    )
    print(f"Текст: {text_result}")

    # Перевод объекта
    object_result = await LingoDotDevEngine.quick_translate(
        {"greeting": "Hello", "farewell": "Goodbye"},
        api_key=api_key,
        source_locale="en",
        target_locale="fr"
    )
    print(f"Объект: {object_result}")

asyncio.run(main())

Основное использование

Для работы SDK требуется API-ключ от Lingo.dev и использование асинхронных менеджеров контекста.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_text(
            "Welcome! We missed you.",
            {"source_locale": "en", "target_locale": "es"}
        )
        print(result)

asyncio.run(main())

Перевод текста с отслеживанием прогресса

Отслеживайте прогресс перевода с помощью обратного вызова. Даже отдельные текстовые строки проходят через разбиение на части, что позволяет сообщать о прогрессе для длинных текстов и обеспечивает единообразное поведение для всех типов контента.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

def on_progress(percent: int):
    print(f"Прогресс: {percent}%")

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_text(
            "Мы отправили письмо с подтверждением.",
            {"source_locale": "en", "target_locale": "es"},
            progress_callback=on_progress
        )
        print(f"Результат: {result}")

asyncio.run(main())

Перевод объектов

Переводите вложенные словари с сохранением структуры. SDK рекурсивно обрабатывает все строковые значения независимо от уровня вложенности.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {
        "title": "Добро пожаловать",
        "cta": "Начните бесплатный пробный период",
        "footer": {
            "legal": "Все права защищены.",
            "help": "Нужна помощь?"
        }
    }

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_object(
            content,
            {"source_locale": "en", "target_locale": "es"}
        )
        print(result)

asyncio.run(main())

Пакетный перевод на несколько языков

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


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        # Перевод текста на несколько языков
        text_results = await engine.batch_localize_text(
            "Добро пожаловать в наше приложение",
            {
                "source_locale": "en",
                "target_locales": ["es", "fr", "de"],
                "fast": True
            }
        )
        print(f"Результаты перевода текста: {text_results}")

asyncio.run(main())

Пакетный перевод объектов

Быстрый пакетный метод обрабатывает как текст, так и объекты.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev.engine import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    results = await LingoDotDevEngine.quick_batch_translate(
        {"greeting": "Привет", "bye": "До свидания"},
        api_key=api_key,
        target_locales=["es", "fr", "de"],
        source_locale="en",
        fast=True,
    )
    for locale, result in zip(["es", "fr", "de"], results):
        print(f"{locale}: {result}")

asyncio.run(main())

Перевод чатов

Перевод сообщений чата с сохранением имен участников. Каждое сообщение должно содержать поля "name" и "text". Полезно для локализации разговоров службы поддержки, логов чатов или диалоговых систем без потери структуры беседы.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    chat = [
        {"name": "Alice", "text": "Всем привет!"},
        {"name": "Bob", "text": "Как дела?"},
        {"name": "Alice", "text": "Отлично, спасибо, что спросил!"},
    ]

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_chat(
            chat,
            {"source_locale": "en", "target_locale": "es"}
        )
        for message in result:
            print(f"{message['name']}: {message['text']}")

asyncio.run(main())

Последовательная обработка с прогрессом

Последовательный режим позволяет использовать подробные обратные вызовы прогресса. Обратный вызов получает исходный фрагмент и переведенный фрагмент для каждой обработанной партии, что полезно для отладки проблем с переводом или отображения детального прогресса в пользовательских интерфейсах.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

def progress(percent: int, src_chunk: dict, out_chunk: dict):
    print(f"{percent}% завершено - обработано {len(src_chunk)} ключей")

async def main():
    content = {
        "welcome": "Привет",
        "goodbye": "Прощай",
        "help": "Нужна помощь?"
    }

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_object(
            content,
            {"source_locale": "en", "target_locale": "es"},
            progress_callback=progress
        )
        print(result)

asyncio.run(main())

Параллельная обработка

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


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {
        "header": {"title": "Добро пожаловать", "subtitle": "Начните"},
        "body": {"intro": "Узнать больше", "details": "Полное описание"},
        "footer": {"copyright": "2024", "contact": "Напишите нам"}
    }

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_object(
            content,
            {"source_locale": "en", "target_locale": "es"},
            concurrent=True
        )
        print(result)

asyncio.run(main())

Справочные данные

Предоставляйте глоссарии или предыдущие переводы для обеспечения согласованности. Справочные данные отправляются с каждым фрагментом в API, поэтому держите их в разумных пределах. Используйте их для брендовых терминов, технической лексики или поддержания согласованности переводов при обновлениях продукта.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {"cta": "Начните бесплатный пробный период", "title": "Добро пожаловать"}

    reference = {
        "es": {"cta": "Comienza tu prueba gratuita"},
        "fr": {"cta": "Commencez votre essai gratuit"},
    }

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        result = await engine.localize_object(
            content,
            {
                "source_locale": "en",
                "target_locale": "es",
                "reference": reference,
            },
            concurrent=True
        )
        print(result)

asyncio.run(main())

Конфигурация

Управляйте поведением пакетной обработки и конечными точками API. SDK разделяет большие объемы данных на основе ограничений по количеству ключей и слов, предотвращая тайм-ауты API и повышая надежность для крупных задач перевода.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    config = {
        "api_key": os.environ["LINGODOTDEV_API_KEY"],
        "api_url": "https://engine.lingo.dev",
        "batch_size": 25,              # Элементов в пакете (1-250)
        "ideal_batch_item_size": 250,  # Слов в пакете (1-2500)
    }

    async with LingoDotDevEngine(config) as engine:
        result = await engine.localize_text(
            "Reset your password",
            {"source_locale": "en", "target_locale": "es", "fast": True}
        )
        print(result)

asyncio.run(main())

Определение языка

Определите язык текстовой строки. Полезно для автоматической маршрутизации контента в правильный переводческий конвейер или проверки языка пользовательского ввода.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        locale = await engine.recognize_locale("Guten Morgen")
        print(f"Обнаруженный язык: {locale}")

asyncio.run(main())

Инспекция API-ключа

Проверьте, какому аккаунту принадлежит API-ключ. Возвращает None, если аутентификация не удалась. Полезно для отладки проблем с аутентификацией или отображения информации об аккаунте в административных инструментах.


# /// script

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        user = await engine.whoami()
        if user:
            print(f"Authenticated as: {user}")
        else:
            print("Authentication failed")

asyncio.run(main())

Обработка ошибок

SDK вызывает ValueError для проблем с параметрами и RuntimeError для ошибок сети/сервера. Различайте ошибки пользователя (ValueError) и проблемы инфраструктуры (RuntimeError) для соответствующей логики повторных попыток.


# /// скрипт

# requires-python = ">=3.11"

# dependencies = [

#     "lingodotdev==1.3.0",

# ]

# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    try:
        api_key = os.environ["LINGODOTDEV_API_KEY"]
        async with LingoDotDevEngine({"api_key": api_key}) as engine:
            result = await engine.localize_text(
                "Hello",
                {"target_locale": "es"}
            )
            print(result)
    except ValueError as e:
        print(f"Неверные параметры или некорректный запрос: {e}")
    except RuntimeError as e:
        print(f"Ошибка сервера или сети: {e}")

asyncio.run(main())