Feliratfájlok, markdown és szövegtárak fordítása
A három fordítókliens – felirat, markdown, szövegtár –, a kulcs környezeti változóból, a --check és a --dry-run mód, és a kilépési kódok.
A három kliens
A LiveCaption élő fordítása mellett három önálló, parancssoros kliens is a fordító szolgáltatásra (translatorserver) kötődik – annak az előtétjére, sosem a mögötte futó motorra közvetlenül. Minden kérés viszi a hozzáférési kulcsot (lcp_…), tehát kulcs nélkül a szolgáltatás már az első lépésnél elutasít. Az indítók a TranslatorServer mappában vannak: megkeresik (szükség esetén publikálják) a futtatható klienst, és a parancssort változatlanul adják tovább.
| Indító | Kliens (futtatható) | Mit fordít |
|---|---|---|
translate-subtitle.ps1 |
translate-subtitle |
felirat: .srt, .vtt, .ass/.ssa |
translate-markdown.ps1 |
translate-markdown |
markdown: .md |
translate-resx.ps1 |
translate-resx |
szövegtár: .resx erőforrás, PowerShell messages.psd1 |
Mindhárom csak a fordítandó szöveget küldi el; ami nem az (időzítés, formázójelek, kód, táblázatszerkezet, kulcsnevek, fejléc, a felirat- és szövegtárfájlok megjegyzései), az bájtra azonosan íródik vissza. Kivétel a markdown kódblokkjainak kommentje: azt a translate-markdown alapból lefordítja (lásd lent). A kliens teljes kapcsolólistája a saját súgója (translate-subtitle --help a publikált futtathatón); az indító -Help kapcsolója az indító súgóját írja ki, nem a kliensét.
A kulcs környezeti változóból
A kulcsot a fiókszolgáltatás adja ki (a webes Kulcsok lap vagy a start-accountserver.ps1 -KeyAdd parancs, lásd a fiókok, kulcsok, jogosultságok útmutatót). A parancssorba írt kulcs bekerülne a héj előzményébe és a folyamatlistába, ezért az ajánlott út a -ApiKeyEnv <változónév>: egy környezeti változó neve, nem maga a kulcs. Az indítás előtt kiírt parancssor a kulcsot *** alakban takarja.
$env:LCP_TRANSLATE_KEY = "lcp_..."
TranslatorServer\translate-subtitle.cmd "C:\videok\01 - Bevezetes.eng.srt" -ApiKeyEnv LCP_TRANSLATE_KEY
TranslatorServer\translate-markdown.cmd "C:\Projects\docs\README.md" -ApiKeyEnv LCP_TRANSLATE_KEY
TranslatorServer\translate-resx.cmd "Strings.resx" -ApiKeyEnv LCP_TRANSLATE_KEY --to hu
A --from és a --to a nyelvpárt adja meg; a --server az előtét címét (alapból http://127.0.0.1:8080).
Feliratok: az időzítés nem csúszik el
A translate-subtitle alapszabálya: a kimenet feliratblokkjainak száma és időbélyege azonos a bemenetével, kizárólag a szövegtörzs változik, minden más – sorvégek, bájtsorrend-jel, kódolás, a WebVTT fejléce és NOTE/STYLE blokkjai, az ASS stílusdefiníciói – bájtra azonos marad. Mérve egy 12 994 fájlos feliratkönyvtárban a korábbi, más eszközzel készült fordítás 1054 fájlnál elcsúszott. A formázójelek (<i>, {\an8}, \N) védettek; ha a fordítás elrontja a sorrendjüket, a mondatcsoport eredeti szövege marad a helyén, és a záró jelentés kimondja. Kimeneti név nélkül a bemenet mellé ír, a nyelvkódot cserélve: 01 - Introduction.eng.srt → 01 - Introduction.hu.srt. Mappa bemenettel az egész fa lefordul; a már kész fájlokat kihagyja, a --force újrafordítja; a megszakadt futást ugyanaz a parancs folytatja.
Markdown: a szerkezet marad
A translate-markdown a bekezdések, címsorok, listaelemek, táblázatcellák, hivatkozásfeliratok és felhívások szövegét fordítja, és a kódblokkok kommentjeit is – a kód maga, minden szerkezeti jel, a táblázat elválasztósora, a hivatkozások címe, a front matter, a képletek és a HTML-blokkok bájtra változatlanok. A prózán belüli kódrészletet és URL-t pajzs védi: a modell [[n]] jelölőt lát helyettük. Ahol a szerkezet nem egyértelmű, a sor nyersen marad: a legrosszabb hibamód a fordítatlan szöveg, sosem a rontott szerkezet. README.md → README.hu.md; a --no-code-comments a kommentek fordítását kapcsolja ki.
Szövegtárak: a helykitöltők védve
A translate-resx három alapszabálya: alapból csak a hiányzó kulcsok fordulnak le (mindet az --all kéri); a sikertelen kulcs nem íródik ki, hanem hiányzó marad, hogy a következő futás újrapróbálja; a fájl formája megőrzött. Minden fordítás három ellenőrzésen megy át: a helykitöltők ({0}, {Name}) készlete és alakja, a védett szavak (a kóddal jelölt rész és a kapcsolónevek), valamint a sortörések. A --keep-placeholder-order a sorrendet is kikényszeríti.
| Forrás | Cél |
|---|---|
Strings.resx |
Strings.hu.resx |
Strings.en.resx |
Strings.hu.resx |
Resources\en\messages.psd1 |
Resources\hu\messages.psd1 |
Ellenőrzés fordítás nélkül: --check és --dry-run
A --check mindhárom kliensnél fordítás és szerver nélkül fut. A feliratnál és a markdownnál felbontja a fájlt, visszaírja, és a két bájtsorozatot hasonlítja össze; a szövegtárnál a forrást veti össze a céllal: hiányzó kulcs, fölösleges kulcs, eltérő helykitöltő. Eltérésnél a kilépési kód 4, szkriptből feltételként használható. A --dry-run megmutatja, mit fordítana és hogyan kötegel, fordítás nélkül.
translate-subtitle "C:\videok" --check
translate-subtitle "F:\videok\Blazor" --dry-run
translate-markdown "C:\Projects\docs" --check
translate-markdown bemenet.md --dry-run
.\translate-resx.exe .\LiveCaption --check
Kilépési kódok
A repó közös táblája, mert a kód szerződés a szkriptekkel; a 3 szándékosan hiányzik, az a feliratozó FFmpeg-hibájáé.
| Kód | Mit jelent |
|---|---|
0 |
kész |
1 |
hibás használat, vagy a kifejezetten kért súgó |
2 |
hiányzó bemenet |
4 |
egyéb hiba (a részlegesen sikerült mappás futás és a --check eltérése is) |
5 |
megszakítva (Ctrl+C) |
6 |
a szolgáltatás nem érhető el, vagy a motor nem áll készen |
A feliratfájlok elkészítése: videómappa kötegelt feliratozása; a szolgáltatások indítása: első indítás.