Takaisin blogiin
Terminal window showing a Composer install command for the PolyLingo PHP SDK alongside a short PHP translate call and its JSON output.

Käännä jäsennelty sisältö PHP:stä PolyLingo SDK:lla

By Robert M

Käännä jäsennelty sisältö PHP:stä PolyLingo SDK:lla

PolyLingo PHP SDK on nyt saatavilla Packagistissa. Asenna se Composerilla, anna sille tavallista tekstiä, Markdownia, JSONia tai HTML:ää sisältävä merkkijono, ja saat käännökset kaikilla tarvitsemillasi kielillä — ilman raakaa HTTP-koodin kirjoittamista tai huolta rakenteen rikkoutumisesta siirron aikana.

Tämä artikkeli kattaa asennuksen, todennuksen ja SDK:n koko käyttöliittymän: synkronisen käännöksen, eräpyynnöt, asynkroniset työt ja virheenkäsittelyn.


Asennus

Vaatii PHP 7.4 tai uudemman. Asenna Composerilla:

composer require usepolylingo/polylingo

SDK riippuu guzzlehttp/guzzle ^7.8 ja psr/http-client ^1.0 -kirjastoista. Molemmat asennetaan automaattisesti.


Asiakkaan määrittäminen

Luo yksi PolyLingo-instanssi ja käytä sitä sovelluksessasi uudelleen. Ainoa pakollinen asetus on API-avain:

<?php
use PolyLingo\PolyLingo;

$client = new PolyLingo([
    'apiKey' => getenv('POLYLINGO_API_KEY'),
]);

Tallenna API-avaimesi ympäristömuuttujaan. Älä koskaan kovakoodaa sitä tai tallenna versionhallintaan.

Kaksi valinnaista asetusta, jotka kannattaa tietää:

$client = new PolyLingo([
    'apiKey'  => getenv('POLYLINGO_API_KEY'),
    'baseURL' => 'https://api.usepolylingo.com/v1', // oletus, korvaa itse isännöidyissä instansseissa
    'timeout' => 120_000,                           // millisekunteina, oletus on 120000 (2 minuuttia)
]);

Sisällön kääntäminen

Tavallinen teksti, Markdown, JSON tai HTML

Anna sisältösi ja kohdekielikoodien taulukko translate()-metodille. format-kenttä kertoo SDK:lle, minkä tyyppistä sisältöä käsitellään:

$result = $client->translate([
    'content' => '# Hello',
    'targets' => ['es', 'fr', 'de'],
    'format'  => 'markdown',
]);

$es     = $result['translations']['es'];
$tokens = $result['usage']['total_tokens'];

format-vaihtoehto hyväksyy arvot plain, markdown, json tai html. Jos jätät sen pois, API tunnistaa muodon automaattisesti sisällöstä. Voit myös antaa source-kielivinkin ja model-arvon standard (oletus) tai advanced.

Muodon säilyttäminen on keskeinen ominaisuus. json-sisällössä vain merkkijonoarvot käännetään. Avaimet, sisäkkäisyys, taulukot ja ei-merkkijonotyypit palautuvat täsmälleen sellaisina kuin lähetit. Markdownissa otsikot pysyvät otsikoina, koodilohkot säilytetään sellaisenaan, eikä linkkien URL-osoitteita muuteta. HTML:ssä tagit ja attribuutit säilyvät, ja vain tekstisolmut käännetään.

JSON-lokalisointitiedoston kääntäminen

Yleinen käyttötapaus on lokalisointitiedoston kääntäminen. Lähetä koko objekti JSON-merkkijonona:

$source = json_decode(file_get_contents('messages/en.json'), true);

$result = $client->translate([
    'content' => json_encode($source),
    'format'  => 'json',
    'targets' => ['de', 'fr', 'ja'],
]);

foreach (['de', 'fr', 'ja'] as $locale) {
    $translated = json_decode($result['translations'][$locale], true);
    file_put_contents(
        "messages/{$locale}.json",
        json_encode($translated, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n"
    );
}

Yksi pyyntö käsittelee kaikki kolme lokalisointia. Avaimet pysyvät muuttumattomina kaikissa tulostetiedostoissa.


Eräpyynnöt

Käytä batch()-metodia, kun sinulla on useita erillisiä sisältökohteita käännettäväksi. Voit lähettää enintään 100 kohdetta yhdessä pyynnössä, jokaisella oma id ja valinnainen format:

$batch = $client->batch([
    'items' => [
        ['id' => 'hero_title',    'content' => 'Welcome back',              'format' => 'plain'],
        ['id' => 'hero_subtitle', 'content' => 'Here is what is new today', 'format' => 'plain'],
        ['id' => 'cta',           'content' => 'Get started',               'format' => 'plain'],
    ],
    'targets' => ['es', 'fr'],
]);

foreach ($batch['results'] as $row) {
    echo $row['id'] . ': ' . $row['translations']['es'] . "\n";
}

Kaikilla kohteilla on sama targets-taulukko. Vastaus säilyttää jokaisen kohteen lähettämäsi id:n, joten voit yhdistää tulokset alkuperäisiin tietoihisi ilman, että sinun tarvitsee luottaa järjestykseen.


Asynkroniset työt

Pitkään kestävissä käännöksissä (suuret dokumentit, monta kohdekieltä tai molemmat) jobs-API hyväksyy pyynnön, palauttaa heti job_id:n ja antaa sinun kysyä tulosta. SDK hoitaa tämän kahdella tavalla.

Laita jonoon ja kysy manuaalisesti

$accepted = $client->jobs->create([
    'content' => file_get_contents('long-article.md'),
    'targets' => ['es', 'fr', 'de', 'ja', 'zh'],
    'format'  => 'markdown',
]);

$jobId = $accepted['job_id'];

// Kysy tilaa, kunnes työ saavuttaa lopullisen tilan
do {
    sleep(5);
    $state = $client->jobs->get($jobId);
} while ($state['status'] === 'pending' || $state['status'] === 'processing');

if ($state['status'] === 'complete') {
    $translations = $state['translations'];
}

Yksi kutsu, joka kysyy kunnes valmis

Jos et tarvitse manuaalista hallintaa, jobs->translate() hoitaa kyselysilmukan puolestasi:

$done = $client->jobs->translate([
    'content' => file_get_contents('long-article.md'),
    'targets' => ['es', 'fr', 'de'],
    'format'  => 'markdown',

    // Valinnaiset ylikirjoitukset (oletukset näytetty):
    // 'pollInterval' => 5000,       // ms kyselyjen välillä, oletus 5000
    // 'timeout'      => 1_200_000,  // kokonaisaika odotukselle, oletus 20 minuuttia
    // 'onProgress'   => function (?int $queuePosition) {
    //     echo "Jonon paikka: {$queuePosition}\n";
    // },
]);

$translations = $done['translations'];
$usage        = $done['usage'];

onProgress-takaisinkutsu laukeaa jokaisella kyselyllä nykyisellä jonopaikalla, jos API palauttaa sen, tai null jos ei ole saatavilla. Käytä sitä edistymisen kirjaamiseen tai käyttöliittymän päivittämiseen.


Apupisteet

Kolme kevyttä päätepistettä eivät tarvitse parametreja todennuksen lisäksi:

$health = $client->health();
// ['status' => 'ok', 'timestamp' => '...']

$langs = $client->languages();
// ['languages' => [['code' => 'en', 'name' => 'English', 'rtl' => false], ...]]

$usage = $client->usage();
// ['usage' => ['tokens_used' => 12000, 'tokens_remaining' => 88000, ...]]

GET /health ja GET /languages eivät vaadi API-avainta. GET /usage palauttaa tokenien kulutuksen kuluvan kalenterikuukauden ajalta todennetulle tilille.


Virheenkäsittely

Kaikki SDK:n virheet periytyvät PolyLingo\Errors\PolyLingoException-luokasta. Kiinniota haluamasi erityiset alityypit eri käsittelyä varten:

use PolyLingo\Errors\AuthException;
use PolyLingo\Errors\JobFailedException;
use PolyLingo\Errors\PolyLingoException;
use PolyLingo\Errors\RateLimitException;

try {
    $result = $client->translate([
        'content' => '# Hello',
        'targets' => ['es'],
        'format'  => 'markdown',
    ]);
} catch (AuthException $e) {
    // HTTP 401 — virheellinen, puuttuva tai peruutettu API-avain
} catch (RateLimitException $e) {
    // HTTP 429 — minuuttikohtainen raja saavutettu
    $retryAfter = $e->getRetryAfter(); // int|null sekunteina
} catch (JobFailedException $e) {
    // Asynkroninen työ saavutti epäonnistuneen lopputilan
    $jobId = $e->getJobId();
} catch (PolyLingoException $e) {
    // Kaikki muut API-virheet
    $httpStatus = $e->getHttpStatus();
    $errorCode  = $e->getErrorCode(); // esim. "invalid_request", "translation_error"
}

RateLimitException::getRetryAfter() palauttaa sekuntimäärän, jonka jälkeen voi yrittää uudelleen, jos API sisältää kyseisen otsikon, tai null jos ei. JobFailedException::getJobId() antaa epäonnistuneen työn tunnuksen, jotta voit kirjata sen tai näyttää käyttäjälle.


Pikaviite

MetodiPäätepisteTarvitseeko todennuksen
$client->health()GET /healthEi
$client->languages()GET /languagesEi
$client->translate()POST /translateKyllä
$client->batch()POST /translate/batchKyllä
$client->usage()GET /usageKyllä
$client->jobs->create()POST /jobsKyllä
$client->jobs->get($id)GET /jobs/:idKyllä
$client->jobs->translate()POST /jobs + kyselyKyllä

Aloita

SDK on Packagistissa osoitteessa usepolylingo/polylingo. Täydellinen API-dokumentaatio löytyy osoitteesta usepolylingo.com/docs.

Ilmainen taso sisältää 50 000 tokenia kuukaudessa. Ei luottokorttia vaadita.

composer require usepolylingo/polylingo

Hanki API-avaimesi