Python SDK

KI-Übersetzung mit Python und Lingo.dev

Einführung

Das Lingo.dev Python SDK übersetzt Text, JSON-Objekte und Chat-Konversationen über eine asynchrone API. Es verarbeitet große Datenmengen, indem es Inhalte automatisch in optimale Batch-Größen aufteilt, verfolgt den Fortschritt für langwierige Übersetzungen und unterstützt Glossare für konsistente Terminologie.

Installation

pip

pip install lingodotdev

uv

uv add lingodotdev

Schnellübersetzung

Überspringen Sie den Context Manager für einmalige Übersetzungen. Diese Methoden verwalten den Engine-Lebenszyklus automatisch und verwenden standardmäßig den Fast-Modus, was sie ideal für CLI-Tools und Skripte macht.

# /// 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"]

    # Translate text
    text_result = await LingoDotDevEngine.quick_translate(
        "Hello world",
        api_key=api_key,
        source_locale="en",
        target_locale="es"
    )
    print(f"Text: {text_result}")

    # Translate object
    object_result = await LingoDotDevEngine.quick_translate(
        {"greeting": "Hello", "farewell": "Goodbye"},
        api_key=api_key,
        source_locale="en",
        target_locale="fr"
    )
    print(f"Object: {object_result}")

asyncio.run(main())

Grundlegende Verwendung

Das SDK benötigt einen API-Schlüssel von Lingo.dev und verwendet asynchrone Context Manager.

# /// 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())

Textübersetzung mit Fortschrittsanzeige

Verfolgen Sie den Übersetzungsfortschritt mit einem Callback. Selbst einzelne Textstrings durchlaufen den Chunker, was Fortschrittsberichte für lange Texte ermöglicht und ein konsistentes Verhalten über alle Inhaltstypen hinweg bietet.

# /// 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"Progress: {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(
            "We sent a confirmation email.",
            {"source_locale": "en", "target_locale": "es"},
            progress_callback=on_progress
        )
        print(f"Result: {result}")

asyncio.run(main())

Objektübersetzung

Übersetzen Sie verschachtelte Dictionaries unter Beibehaltung der Struktur. Das SDK verarbeitet rekursiv alle String-Werte unabhängig von der Verschachtelungstiefe.

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "lingodotdev==1.3.0",
# ]
# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {
        "title": "Welcome",
        "cta": "Start your free trial",
        "footer": {
            "legal": "All rights reserved.",
            "help": "Need 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())

Batch-Übersetzung in mehrere Sprachen

Übersetzen Sie Inhalte in mehrere Zielsprachen mit einem einzigen Aufruf. Gibt eine Liste mit einem Ergebnis pro Ziel-Locale zurück, in der gleichen Reihenfolge wie angefordert.

# /// 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:
        # Translate text to multiple languages
        text_results = await engine.batch_localize_text(
            "Welcome to our application",
            {
                "source_locale": "en",
                "target_locales": ["es", "fr", "de"],
                "fast": True
            }
        )
        print(f"Text results: {text_results}")

asyncio.run(main())

Batch-Objektübersetzung

Übersetze mehrere Objekte gleichzeitig in einem einzigen Aufruf. Jedes Objekt wird unabhängig verarbeitet – ideal, um Listen von Datensätzen, Produktkataloge oder jede Sammlung strukturierter Inhalte zu lokalisieren.

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "lingodotdev==1.3.0",
# ]
# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    objects = [
        {"title": "Getting Started", "description": "Learn the basics"},
        {"title": "Advanced Usage", "description": "Deep dive into features"},
        {"title": "API Reference", "description": "Complete method listing"},
    ]

    api_key = os.environ["LINGODOTDEV_API_KEY"]
    async with LingoDotDevEngine({"api_key": api_key}) as engine:
        results = await engine.batch_localize_objects(
            objects,
            {"source_locale": "en", "target_locale": "es"}
        )
        for result in results:
            print(result)

asyncio.run(main())

Stapelobjekte schnell übersetzen

Die schnelle Stapelmethode verarbeitet sowohl Text als auch Objekte.

# /// 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": "Hello", "bye": "Goodbye"},
        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())

Chat-Übersetzung

Übersetze Chat-Nachrichten und behalte dabei die Namen der Gesprächsteilnehmer bei. Jede Nachricht muss sowohl ein "name"- als auch ein "text"-Feld enthalten. Praktisch, um Supportgespräche, Chatprotokolle oder Dialogsysteme zu lokalisieren, ohne die Gesprächsstruktur zu verlieren.

# /// 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": "Hello everyone!"},
        {"name": "Bob", "text": "How are you doing?"},
        {"name": "Alice", "text": "Great, thanks for asking!"},
    ]

    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())

Sequenzielle Verarbeitung mit Fortschritt

Im sequentiellen Modus können detaillierte Fortschritts-Callbacks genutzt werden. Der Callback erhält für jeden verarbeiteten Stapel das Quell- und das übersetzte Segment. Das ist hilfreich zum Debuggen von Übersetzungsproblemen oder zur Anzeige von Fortschrittsdetails in Benutzeroberflächen.

# /// 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}% complete - processed {len(src_chunk)} keys")

async def main():
    content = {
        "welcome": "Hello",
        "goodbye": "Farewell",
        "help": "Need assistance?"
    }

    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())

Parallele Verarbeitung

Verarbeite Segmente parallel für schnellere Übersetzungen. Dieser Modus verzichtet auf die Fortschrittsverfolgung zugunsten höherer Geschwindigkeit – ideal für Produktionsumgebungen, in denen Durchsatz wichtiger ist als Rückmeldungen für Nutzer.

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "lingodotdev==1.3.0",
# ]
# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {
        "header": {"title": "Welcome", "subtitle": "Get started"},
        "body": {"intro": "Learn more", "details": "Full description"},
        "footer": {"copyright": "2024", "contact": "Email us"}
    }

    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())

Referenzdaten

Nutze Glossare oder frühere Übersetzungen, um Konsistenz sicherzustellen. Referenzdaten werden mit jedem Segment an die API geschickt – achte deshalb auf eine überschaubare Größe. Besonders nützlich für Markennamen, Fachbegriffe oder gleichbleibende Übersetzungen über Produktaktualisierungen hinweg.

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "lingodotdev==1.3.0",
# ]
# ///

import asyncio
import os
from lingodotdev import LingoDotDevEngine

async def main():
    content = {"cta": "Start your free trial", "title": "Welcome"}

    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())

Konfiguration

Steuere das Stapelverhalten und die API-Endpunkte. Das SDK teilt große Datenmengen je nach Schlüsselanzahl und Wortanzahl auf. So werden API-Timeouts vermieden und die Zuverlässigkeit bei großen Übersetzungsaufträgen erhöht.

# /// 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,              # Items per chunk (1-250)
        "ideal_batch_item_size": 250,  # Words per chunk (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())

Spracherkennung

Erkenne die Sprache eines Textes. Hilfreich, um Inhalte automatisch der richtigen Übersetzungspipeline zuzuweisen oder die Spracheingabe von Nutzern zu überprüfen.

# /// 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"Detected language: {locale}")

asyncio.run(main())

API-Schlüssel-Überprüfung

Prüfe, welchem Konto ein API-Schlüssel gehört. Gibt None zurück, wenn die Authentifizierung fehlschlägt. Nützlich zum Debuggen von Authentifizierungsproblemen oder zum Anzeigen von Kontoinformationen in Admin-Tools.

# /// 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())

Fehlerbehandlung

Das SDK löst ValueError bei Parameterproblemen und RuntimeError bei Netzwerk- oder Serverfehlern aus. Unterscheide zwischen Benutzerfehlern (ValueError) und Infrastrukturproblemen (RuntimeError), um die passende Wiederholungslogik anzuwenden.

# /// script
# 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"Invalid parameters or bad request: {e}")
    except RuntimeError as e:
        print(f"Server or network error: {e}")

asyncio.run(main())

API-Referenz

Konstruktor

ParameterTypStandardwertBeschreibung
api_keystrerforderlichLingo.dev API-Schlüssel
api_urlstr"https://engine.lingo.dev"API-Endpoint-URL
batch_sizeint25Elemente pro Abschnitt (1–250)
ideal_batch_item_sizeint250Wörter pro Abschnitt (1–2500)

Instanzmethoden

MethodeParameterRückgabewertBeschreibung
localize_text(text, params, progress_callback?)text: str, params: dictstrÜbersetzt einen einzelnen Textstring
localize_object(obj, params, progress_callback?, concurrent?)obj: dict, params: dictdictÜbersetzt ein Dictionary und bewahrt die Struktur
localize_chat(chat, params, progress_callback?)chat: list[dict], params: dictlist[dict]Übersetzt Chatnachrichten und bewahrt Sprechernamen
batch_localize_text(text, params)text: str, params: dict mit target_localeslist[str]Übersetzt Text gleichzeitig in mehrere Zielsprachen
batch_localize_objects(objects, params)objects: list[dict], params: dictlist[dict]Übersetzt mehrere Objekte gleichzeitig
recognize_locale(text)text: strstrErkennt die Sprache eines Textstrings
whoami()dict | NoneHolt Kontoinformationen für den aktuellen API-Schlüssel

Klassenmethoden

MethodeParameterRückgabeBeschreibung
quick_translate(content, api_key, target_locale, source_locale?, api_url?, fast?)content: str | dictstr | dictEinmalige Übersetzung ohne Kontext-Manager
quick_batch_translate(content, api_key, target_locales, source_locale?, api_url?, fast?)content: str | dictlistEinmalige Massenübersetzung in mehrere Sprachen

Lokalisierungsparameter

SchlüsselTypErforderlichBeschreibung
source_localestrneinQuellsprach-Code (wird automatisch erkannt, wenn weggelassen)
target_localestrjaZielsprachen-Code
target_localeslist[str]für BatchListe von Zielsprach-Codes
fastboolneinSchnellen Modus für zügigere Übersetzungen aktivieren
referencedictneinGlossar oder Referenzübersetzungen für Konsistenz