PHP SDK

使用 PHP 和 Lingo.dev 进行 AI 翻译

简介

Lingo.dev PHP SDK 为 PHP 应用程序和 Laravel 项目添加了实时 AI 驱动的翻译功能。该 SDK 处理动态内容,例如聊天消息、用户评论和需要即时翻译的实时数据。

与使用 Lingo.dev CLI 的静态文件本地化不同,SDK 按需处理内容,非常适合内容不断变化的聊天应用程序、电子邮件客户端和社交媒体工具。

安装

composer require lingodotdev/sdk

基本设置

SDK 需要从 Lingo.dev 获取 API 密钥。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

文本翻译

将简单的文本字符串翻译为目标语言。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$result = $engine->localizeText('Hello, world!', [
    'sourceLocale' => 'en',
    'targetLocale' => 'es',
]);
echo $result;
// 输出: ¡Hola, mundo!

对象翻译

翻译嵌套数组,同时保留结构。SDK 会递归处理所有字符串值。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$content = [
    'greeting' => 'Hello',
    'farewell' => 'Goodbye',
    'messages' => [
        'welcome' => 'Welcome to our service',
        'thanks' => 'Thank you for your business'
    ]
];

$translated = $engine->localizeObject($content, [
    'sourceLocale' => 'en',
    'targetLocale' => 'fr',
]);
print_r($translated);
// 输出: 保持结构的法语翻译数组

批量翻译为多种语言

在一次调用中将内容翻译为多种目标语言。返回一个数组,每个目标语言对应一个结果。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$results = $engine->batchLocalizeText('Hello, world!', [
    'sourceLocale' => 'en',
    'targetLocales' => ['es', 'fr', 'de'],
]);
print_r($results);
// 输出: ["¡Hola, mundo!", "Bonjour le monde!", "Hallo, Welt!"]

聊天翻译

在保留发言者姓名的同时翻译聊天消息。每条消息必须包含 "name" 和 "text" 字段。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$conversation = [
    ['name' => 'Alice', 'text' => 'Hello, how are you?'],
    ['name' => 'Bob', 'text' => 'I am fine, thank you!'],
    ['name' => 'Alice', 'text' => 'What are you doing today?']
];

$translated = $engine->localizeChat($conversation, [
    'sourceLocale' => 'en',
    'targetLocale' => 'de',
]);

foreach ($translated as $message) {
    echo $message['name'] . ': ' . $message['text'] . "\n";
}
// 输出:
// Alice: Hallo, wie geht es dir?
// Bob: Mir geht es gut, danke!
// Alice: Was machst du heute?

进度跟踪

通过回调监控翻译进度。这对于在大型翻译操作期间更新用户界面非常有用。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$largeText = 'This is a very long text that needs translation...';

$result = $engine->localizeText($largeText, [
    'sourceLocale' => 'en',
    'targetLocale' => 'es',
], function ($progress, $chunk, $processedChunk) {
    echo "Translation progress: $progress%\n";
});
// 输出:
// Translation progress: 25%
// Translation progress: 50%
// Translation progress: 75%
// Translation progress: 100%

翻译参数

针对时间敏感的应用程序进行速度与质量的控制。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$result = $engine->localizeText('Hello world', [
    'sourceLocale' => 'en',
    'targetLocale' => 'es',
    'fast' => true, // 优先速度而非质量
]);
echo $result;
// 输出: Hola mundo

配置

控制批处理行为。SDK 根据项目数量和字数限制拆分大型负载。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
    'batchSize' => 100, // 每次 API 请求的最大项目数 (默认: 50, 最大: 250)
    'idealBatchItemSize' => 1000, // 每批目标字数 (默认: 500, 最大: 2500)
]);

$result = $engine->localizeText('Configuration test', [
    'sourceLocale' => 'en',
    'targetLocale' => 'es',
]);
echo $result;
// 输出: Prueba de configuración

语言检测

检测文本字符串的语言。仅在源语言未知时使用,因为检测会增加处理时间。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$locale = $engine->recognizeLocale('Bonjour le monde');
echo $locale;
// 输出: fr

使用自动检测:

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

$result = $engine->localizeText('Bonjour le monde', [
    'sourceLocale' => null, // 自动检测
    'targetLocale' => 'en',
]);
echo $result;
// 输出: Hello world

Laravel 集成

在 Laravel 应用中使用。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use LingoDotDev\Sdk\LingoDotDevEngine;

class TranslationController extends Controller
{
    private $engine;

    public function __construct()
    {
        $this->engine = new LingoDotDevEngine([
            'apiKey' => config('services.lingodotdev.api_key'),
        ]);
    }

    public function translateMessage(Request $request)
    {
        $translated = $this->engine->localizeText($request->message, [
            'sourceLocale' => $request->source_locale,
            'targetLocale' => $request->target_locale,
        ]);

        return response()->json(['translated' => $translated]);
    }
}

错误处理

SDK 包含针对网络问题的自动重试功能。对于其他失败情况,请实现应用级别的错误处理。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

try {
    $result = $engine->localizeText('Hello', [
        'sourceLocale' => 'en',
        'targetLocale' => 'es',
    ]);
    echo $result;
} catch (Exception $e) {
    error_log('翻译失败: ' . $e->getMessage());
    // 适当处理错误
}

SDK 包含针对网络问题的自动重试功能。对于其他故障,请实现应用程序级别的错误处理。

<?php

require 'vendor/autoload.php';

use LingoDotDev\Sdk\LingoDotDevEngine;

$engine = new LingoDotDevEngine([
    'apiKey' => $_ENV['LINGODOTDEV_API_KEY'],
]);

try {
    $result = $engine->localizeText('Hello', [
        'sourceLocale' => 'en',
        'targetLocale' => 'es',
    ]);
    echo $result;
} catch (Exception $e) {
    error_log('Translation failed: ' . $e->getMessage());
    // 适当处理错误
}