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
  • Fast mode for quick translations
  • 🔧 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",
        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",
        "api_url": "https://engine.lingo.dev"  # Optional, defaults to this
    }
    
    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",
        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"}) 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"}) 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"}) 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"}) 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
    "api_url": "https://engine.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)
  • fast: Enable fast mode for quicker translations
  • 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"}) 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.4.1.tar.gz (20.3 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.4.1-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lingodotdev-1.4.1.tar.gz
Algorithm Hash digest
SHA256 ebb2b852edbbd479db22acec2dd70e09df3904adc3a53b480d64935d2ac48a8c
MD5 f52bf05be197b162df8c928abaf3ddd8
BLAKE2b-256 9afe3a5fc96d1b1a5147557b50b7e0fa257f1a428a3195c51e0a56cf2716129d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lingodotdev-1.4.1.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.4.1-py3-none-any.whl.

File metadata

  • Download URL: lingodotdev-1.4.1-py3-none-any.whl
  • Upload date:
  • Size: 13.2 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.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 87d6dea9cbf3efe01736e39f2870fe7ba5b608d89a3107df6ad288dff46c9841
MD5 7fcdc2a8baa26619678984d2fbffcc1c
BLAKE2b-256 dc8a1eb339d1d3f1087c97158076e0da24bfbe331d288aff5a2d32ff3751666e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lingodotdev-1.4.1-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