Skip to main content

Lingo.dev Python SDK

Project description

Lingo.dev Python SDK

A powerful async-first localization engine that supports various content types including plain text, objects, chat sequences, and HTML documents.

✨ Key Features

  • 🚀 Async-first design for high-performance concurrent translations
  • 🔀 Concurrent processing for dramatically faster bulk translations
  • 🎯 Multiple content types: text, objects, chat messages, and more
  • 🌐 Auto-detection of source languages
  • 🔧 Flexible configuration with progress callbacks
  • 📦 Context manager support for proper resource management

🚀 Performance Benefits

The async implementation provides significant performance improvements:

  • Concurrent chunk processing for large payloads
  • Batch operations for multiple translations
  • Parallel API requests instead of sequential ones
  • Better resource management with httpx

📦 Installation

pip install lingodotdev

🎯 Quick Start

Simple Translation

import asyncio
from lingodotdev import LingoDotDevEngine

async def main():
    # Quick one-off translation (handles context management automatically)
    result = await LingoDotDevEngine.quick_translate(
        "Hello, world!",
        api_key="your-api-key",
        engine_id="your-engine-id",
        target_locale="es"
    )
    print(result)  # "¡Hola, mundo!"

asyncio.run(main())

Context Manager (Recommended for Multiple Operations)

import asyncio
from lingodotdev import LingoDotDevEngine

async def main():
    config = {
        "api_key": "your-api-key",
        "engine_id": "your-engine-id",  # Optional
    }

    async with LingoDotDevEngine(config) as engine:
        # Translate text
        text_result = await engine.localize_text(
            "Hello, world!",
            {"target_locale": "es"}
        )
        
        # Translate object with concurrent processing
        obj_result = await engine.localize_object(
            {
                "greeting": "Hello",
                "farewell": "Goodbye",
                "question": "How are you?"
            },
            {"target_locale": "es"},
            concurrent=True  # Process chunks concurrently for speed
        )

asyncio.run(main())

🔥 Advanced Usage

Batch Processing (Multiple Target Languages)

async def batch_example():
    # Translate to multiple languages at once
    results = await LingoDotDevEngine.quick_batch_translate(
        "Welcome to our application",
        api_key="your-api-key",
        engine_id="your-engine-id",
        target_locales=["es", "fr", "de", "it"]
    )
    # Results: ["Bienvenido...", "Bienvenue...", "Willkommen...", "Benvenuto..."]

Large Object Processing with Progress

async def progress_example():
    def progress_callback(progress, source_chunk, processed_chunk):
        print(f"Progress: {progress}% - Processed {len(processed_chunk)} items")

    large_content = {f"item_{i}": f"Content {i}" for i in range(1000)}
    
    async with LingoDotDevEngine({"api_key": "your-api-key", "engine_id": "your-engine-id"}) as engine:
        result = await engine.localize_object(
            large_content,
            {"target_locale": "es"},
            progress_callback=progress_callback,
            concurrent=True  # Much faster for large objects
        )

Chat Translation

async def chat_example():
    chat_messages = [
        {"name": "Alice", "text": "Hello everyone!"},
        {"name": "Bob", "text": "How is everyone doing?"},
        {"name": "Charlie", "text": "Great to see you all!"}
    ]
    
    async with LingoDotDevEngine({"api_key": "your-api-key", "engine_id": "your-engine-id"}) as engine:
        translated_chat = await engine.localize_chat(
            chat_messages,
            {"source_locale": "en", "target_locale": "es"}
        )
        # Names preserved, text translated

Multiple Objects Concurrently

async def concurrent_objects_example():
    objects = [
        {"title": "Welcome", "description": "Please sign in"},
        {"error": "Invalid input", "help": "Check your email"},
        {"success": "Account created", "next": "Continue to dashboard"}
    ]
    
    async with LingoDotDevEngine({"api_key": "your-api-key", "engine_id": "your-engine-id"}) as engine:
        results = await engine.batch_localize_objects(
            objects,
            {"target_locale": "fr"}
        )
        # All objects translated concurrently

Language Detection

async def detection_example():
    async with LingoDotDevEngine({"api_key": "your-api-key", "engine_id": "your-engine-id"}) as engine:
        detected = await engine.recognize_locale("Bonjour le monde")
        print(detected)  # "fr"

⚙️ Configuration Options

config = {
    "api_key": "your-api-key",              # Required: Your API key
    "engine_id": "your-engine-id",          # Optional: Your engine ID
    "api_url": "https://api.lingo.dev",     # Optional: API endpoint
    "batch_size": 25,                       # Optional: Items per batch (1-250)
    "ideal_batch_item_size": 250            # Optional: Target words per batch (1-2500)
}

🎛️ Method Parameters

Translation Parameters

  • source_locale: Source language code (auto-detected if None)
  • target_locale: Target language code (required)
  • reference: Reference translations for context
  • concurrent: Process chunks concurrently (faster, but no progress callbacks)

Performance Options

  • concurrent=True: Enables parallel processing of chunks
  • progress_callback: Function to track progress (disabled with concurrent=True)

🔧 Error Handling

async def error_handling_example():
    try:
        async with LingoDotDevEngine({"api_key": "invalid-key", "engine_id": "your-engine-id"}) as engine:
            result = await engine.localize_text("Hello", {"target_locale": "es"})
    except ValueError as e:
        print(f"Invalid request: {e}")
    except RuntimeError as e:
        print(f"API error: {e}")

🚀 Performance Tips

  1. Use concurrent=True for large objects or multiple chunks
  2. Use batch_localize_objects() for multiple objects
  3. Use context managers for multiple operations
  4. Use quick_translate() for one-off translations
  5. Adjust batch_size based on your content structure

🤝 Migration from Sync Version

The async version is a drop-in replacement with these changes:

  • Add async/await to all method calls
  • Use async with for context managers
  • All methods now return awaitable coroutines

📚 API Reference

Core Methods

  • localize_text(text, params) - Translate text strings
  • localize_object(obj, params) - Translate dictionary objects
  • localize_chat(chat, params) - Translate chat messages
  • batch_localize_text(text, params) - Translate to multiple languages
  • batch_localize_objects(objects, params) - Translate multiple objects
  • recognize_locale(text) - Detect language
  • whoami() - Get API account info

Convenience Methods

  • quick_translate(content, api_key, target_locale, ...) - One-off translation
  • quick_batch_translate(content, api_key, target_locales, ...) - Batch translation

📄 License

Apache-2.0 License

🤖 Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lingodotdev-1.5.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lingodotdev-1.5.0-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file lingodotdev-1.5.0.tar.gz.

File metadata

  • Download URL: lingodotdev-1.5.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lingodotdev-1.5.0.tar.gz
Algorithm Hash digest
SHA256 74bd2bc4ad377f00a8e6b9985331ccea55f4a6d468b0cad2888b290bc588f0b6
MD5 40847ba989436c41c921924e80e0d4d2
BLAKE2b-256 1b32237ea03e11f499ac408621865f88b4ac0f674a52d5362cd9f7bef90ce4b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for lingodotdev-1.5.0.tar.gz:

Publisher: release.yml on lingodotdev/sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lingodotdev-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: lingodotdev-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lingodotdev-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eba68dfe2d57bc4582dfc1f5d5a67b2d4f90cf859a2c9d0fb1ad0a9230b65240
MD5 83476cb58323f81235fe97af5ae23893
BLAKE2b-256 2938133fc3a9768aeb0c8417bb1f2a3cecbfec9f194096b891b3a039e77f4a66

See more details on using hashes here.

Provenance

The following attestation bundles were made for lingodotdev-1.5.0-py3-none-any.whl:

Publisher: release.yml on lingodotdev/sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page