DeepL vs Google Translate vs AI: Paras .po-tiedostoille?

Vie .pot-tiedosto WordPress-lisäosastasi, liitä muutama sata merkkijonoa DeepL:iin tai Google Translateen, saat siistin saksankielisen sarakkeen takaisin, pudota se .po-tiedostoosi, käännä ja lähetä. Sitten käyttäjä ilmoittaa, että ostoskorisivulla näkyy raaka %1$s siellä, missä tuotenimen pitäisi olla, tai mikä pahempaa, hintarivi lukee You have 1 items joka kielellä, koska monikkomuoto romahti. Käännöksen laatu oli hyvä. Käännöksen rakenne tuhoutui.
Se on DeepL vs Google Translate -väittelyn ydinkysymys, kun lähde on gettext .po-tiedosto eikä kappale proosaa. Molemmat ovat maailmanluokkaa luonnollisten lauseiden kääntämisessä. Kumpaakaan ei suunniteltu kunnioittamaan printf-paikkamerkkiä, Gettext-monikkomuotoa tai msgctxt-yksiselitteistystä. Ne käsittelevät %1$s:ää kirjoitusvirheenä, joka pitää siivota, ja kaksi-muotoista monikkoa yhtenä lauseena, joka pitää litistää. Markkinointitekstissä tämä on näkymätöntä. Ohjelmistojen lokalisoinnissa se rikkoo sivustoja.
Tässä postauksessa verrataan klassista konekääntämistä – DeepL:iä ja Google Translatea – gettextille erityisesti rakennettuun kontekstitietoiseen tekoälyputkeen. Tarkastelemme niitä akseleita, jotka todella ovat tärkeitä .po-tiedostoille: paikkamerkkien käsittely, monikkomuodot, konteksti, tiedostojen joukkotuki ja kustannukset. Jos haluat syvemmän LLM-versus-LLM-laatuvaikuttavuuskeskustelun, käsittelimme sitä artikkelissa AI-käännösten laatu: Gemini vs GPT-4 vs DeepSeek. Tässä kysymys on kapeampi ja käytännöllisempi: mikä on paras .po-tiedostoille?
DeepL vs Google Translate: Mihin ne on rakennettu
Molemmat ovat yleiskäyttöisiä konekäännöskoneistoja, jotka on optimoitu sujuvaan, luonnollisen kielen tulosteeseen. Kumpikaan ei jäsenä tiedostomuotoja.
DeepL – Sujuva, mutta formaattisokea
DeepL:ää kehutaan laajalti luonnollisimmalta kuuluvasta tulosteesta, erityisesti eurooppalaisten kielten välillä. Mutta se vastaanottaa tekstiä, ei rakennetta. Jos sille syöttää .po msgid-kentän, joka sisältää %1$s ordered %2$s, se kääntää paikkamerkkien ympärillä olevat sanat järjestellen, välilyöden tai jättäen pois tunnuksia – koska DeepL:lle ne ovat vain outoja merkkejä lauseessa.
Google Translate – Laaja kattavuus, sama sokea piste
Google Translate tukee paljon useampia kieliä ja on oletusarvoinen budjettiratkaisu GTranslate-kaltaisten lisäosien takana. Sen paikkamerkkien käsittely ei ole parempi. Molemmilla koneistoilla on sama perustavanlaatuinen rajoitus: ne optimoivat lauseen sujuvuuden, eikä niillä ole mallia gettext-säännöistä.
Todellinen kysymys ei ole laatu – se on rakenne
.po-tiedostojen kohdalla raaka kielellinen laatu on perustekijä. Tuotannon rikkoo rakenteellinen eheys: säilyvätkö muuttujat, pysyvätkö monikot monimuotoisina, kunnioitetaanko kontekstia. Siinä gettext-tietoinen tekoälyputki ohittaa sekä DeepL:n että Google Translaten.
Miksi paikkamerkit ja monikot rikkovat konekäännöstä
.po-tiedosto ei ole proosaa. Se on koodiin liittyvää tekstiä, jolla on tiukat säännöt, ja kolme näistä säännöistä kukistaa rutiininomaisesti klassisen konekäännöksen.
Paikkamerkkien ja muuttujien vääristyminen
WordPress-merkkijonot ovat täynnä printf-tyylisiä paikkamerkkejä: %s, %d ja positionaalisia muotoja kuten %1$s ja %2$s. Positionaaliset ovat tärkeitä, koska jotkin kielet järjestävät lauseen uudelleen, ja numerot kertovat sprintf:lle, mikä argumentti menee minne. Katso, mitä klassinen konekäännös tekee tälle:
// Source string in your .po file
$msg = sprintf( __( '%1$s left a comment on %2$s', 'mytheme' ), $user, $post );
// What DeepL / Google Translate often return (German):
// "%2$s hat einen Kommentar zu %1$s hinterlassen" <- reordered, OK
// "% 1$ s hat einen Kommentar..." <- spaces injected, BROKEN
// "hat einen Kommentar hinterlassen" <- placeholders dropped, BROKEN
Yksi injektoitu välilyönti (% 1$ s) tai pudotettu tunnus aiheuttaa PHP-varoituksen tai tulostaa raakaa koodia käyttäjillesi. Syvennymme tähän virhetilaan artikkelissa Kuinka kääntää PO-tiedostoja rikkomatta koodimuuttujia.
Monikkomuodot romahtavat
Gettext-monikot eivät ole yksi merkkijono – ne ovat taulukko, jonka avaimena on kielen monikkosääntö. Englannissa on kaksi muotoa; puolassa kolme; arabiassa kuusi. Klassinen konekäännös vastaanottaa msgid_plural-kentän kahtena erillisenä lauseena ja kääntää ne itsenäisesti ilman tietoisuutta siitä, että niiden on pysyttävä yhtenäisenä monimuotoisena joukkona. Tuloksena on usein yksi muoto duplikoituna, joten 1 item ja 5 items renderöityvät identtisesti.
msgid "%d item in your cart"
msgid_plural "%d items in your cart"
msgstr[0] ""
msgstr[1] ""
# A gettext-aware pipeline fills BOTH forms correctly with %d preserved.
# DeepL/Google translate each line in isolation and lose the plural relationship.
Konteksti (msgctxt) jätetään huomiotta
Gettext käyttää msgctxt-kenttää samojen merkkijonojen selventämiseen –