Näin käännät .po-tiedostoja rikkomatta koodimuuttujia (%s, HTML)

Se alkaa yksinkertaisella tehtävällä: käännät WordPress-teemasi espanjaksi. Lataat .mo-tiedoston, päivität sivustosi ja...
Fatal error: Uncaught ArgumentCountError: Too few arguments to function sprintf()...
Tai ehkä sivustosi latautuu, mutta ulkoasu on särkynyt, koska sulkeva </div>-tagi on käännetty muotoon </ div>.
Tämä on jokaisen lokalisoinnin parissa työskentelevän kehittäjän suurin pelko. Kun käytät yleisiä käännöstyökaluja (kuten Google Translate tai yksinkertaisia tekoälykääreitä) teknisissä .po-tiedostoissa, ne eivät kohtele koodia eri tavalla kuin tekstiä. Ne yrittävät "kääntää" muuttujasi ja rikkovat siten verkkosivustosi.
Tässä oppaassa selitämme tarkalleen, miksi näin tapahtuu ja kuinka varmistaa 100 %:n kooditurvallisuus automatisoiduissa käännöksissäsi.
Katastrofin anatomia: Miksi %s rikkoo sivustoja
WordPress käyttää Gettext-järjestelmää ja PHP-funktioita, kuten sprintf(), dynaamisen tekstin käsittelyyn.
Sinulla voi olla esimerkiksi tällainen merkkijono:
msgid "Search results for %s"
%s on paikkamerkkimuuttuja, johon PHP lisää käyttäjän hakukyselyn.
Kuinka yleinen tekoäly tekee sen väärin
Kun syötät tämän merkkijonon tavalliseen suurikielimalliin (LLM) tai käännös-API:in, se näkee %s:n vain yhtenä outona sanana. Se saattaa yrittää korjata sen ympärillä olevan kieliopin tai välimerkit.
Tässä ovat yleisimmät syntaksivirheet, joita näemme:
-
Lisätty välilyönti:
- Alkuperäinen:
Hello %s - Huono käännös:
Hola % s - Tulos: PHP etsii
%s:ää, mutta se näkee% s:n. Muuttujaa ei ladata, mikä usein aiheuttaa vakavan virheen.
- Alkuperäinen:
-
HTML-hallusinaatio:
- Alkuperäinen:
Click <strong>here</strong> to login. - Huono käännös:
Haga clic <strong>aquí</ strong> para iniciar sesión. - Tulos: Tekoäly lisäsi välilyönnin sulkevan tagin
</ strong>sisään. CSS:si rikkoutuu ja loput sivusta muuttuu lihavoiduksi.
- Alkuperäinen:
-
Argumenttien vaihto:
- Alkuperäinen:
Page %1$s of %2$s - Huono käännös:
Página %2$s de %1$s - Tulos: Tekoäly päätti, että lause kuulosti paremmalta, jos numerot vaihdettiin. Nyt sivutuksesi sanoo "Sivu 10 / 1".
- Alkuperäinen:
"Manuaalisen korjauksen" ansa
Useimmat kehittäjät yrittävät ratkaista tämän tarkistamalla tiedoston manuaalisesti. Jos sinulla on pieni laajennus, jossa on 50 merkkijonoa, se on hienoa. Mutta jos olet kääntämässä WooCommerce-kauppaa, jossa on 5 000 merkkijonoa?
5 000 koodirivin skannaaminen yhden puuttuvan puolipisteen tai ylimääräisen välilyönnin varalta %s-muuttujan sisällä on mahdotonta. Se vie tunteja, ja ihmissilmät väistämättä jättävät jotain huomaamatta.
Regex (säännölliset lausekkeet) -skriptit voivat auttaa varmistamaan läsnäolon, mutta ne harvoin havaitsevat kontekstispesifisiä uudelleenjärjestelyongelmia tai hienovaraisia HTML-attribuuttien vioittumisia.
Ratkaisu: "Syntaksin lukitus"
Ainoa tapa kääntää .po-tiedosto turvallisesti on estää tekoälyä koskemasta koodiin ollenkaan. Tämä edellyttää prosessia, jota kutsutaan Syntaksin lukitukseksi.
Tämä on SimplePoTranslate:n takana oleva ydinteknologia.
Toisin kuin yleiset työkalut, me emme vain kaada tekstiä tekoälyyn. Jäsennämme ensin Gettext-rakenteen. Näin "Safe Mode" -tilamme toimii:
- Analyysi: Skannaamme
.po-tiedostosi ja tunnistamme jokaisen muuttujan (%s,%d), jokaisen positionaalisen argumentin (%1$s) ja jokaisen HTML-tagin (<br/>,<span>). - Poiminta ja lukitus: Poistamme nämä elementit väliaikaisesti merkkijonosta ja korvaamme ne muuttumattomilla tokeneilla.
- Syöte:
Hello <strong>%s</strong> - Mitä tekoäly näkee:
Hello [TOKEN_1][TOKEN_2]
- Syöte:
- Käännös: Tekoäly kääntää tekstin "Hello" muotoon "Hola", mutta se ei voi fyysisesti muuttaa arvoja
[TOKEN_1]tai[TOKEN_2], koska ne on lukittu. - Uudelleenrakentaminen: Lisäämme alkuperäisen koodin takaisin käännettyyn merkkijonoon tarkalleen sinne, minne se kuuluu.
Tulos: Ei yhtään rikkinäistä sivustoa
Koska tekoäly ei koskaan ole vuorovaikutuksessa varsinaisten %s- tai HTML-merkkien kanssa, käännösmoottorin on matemaattisesti mahdotonta lisätä välilyöntiä muuttujan sisään tai vioittaa tagia.
Käsittelemme jopa monimutkaisia monikkomuotoja (msgid_plural) kielille, kuten venäjä tai puola, varmistaen, että oikeaa muuttujaa käytetään oikealle määrälle.
Lopeta koodillasi uhkapelaaminen
Sinun ei pitäisi joutua pitämään sormia ristissä joka kerta, kun lataat kielitiedoston. Lokalisoinnin pitäisi olla uusien asiakkaiden tavoittamista, ei PHP-virheiden korjaamista.
SimplePoTranslate on turvallisin ja edistynein pilvipohjainen työkalu kehittäjille, jotka välittävät koodin eheydestä.
- Pilvipohjainen: Ei asennettavia lisäosia.
- Kontekstitietoinen: Käyttää Gemini/GPT-4-luokan tekoälyä luonnolliseen sanamuotoon.
- Syntaksi lukittu: Taattu suoja muuttujillesi.
Oletko valmis kääntämään ilman päänsärkyä? Aloita ilmaiseksi osoitteessa SimplePoTranslate.com