=encoding utf-8

=head1 NAME

App::Greple::xlate - tõlketoe moodul greple jaoks

=head1 SYNOPSIS

    greple -Mxlate -e ENGINE --xlate pattern target-file

    greple -Mxlate::deepl --xlate pattern target-file

=head1 VERSION

Version 0.9908

=head1 DESCRIPTION

B<Greple> B<xlate> moodul leiab soovitud tekstiplokid ja asendab need tõlgitud tekstiga. Praegu on tagumise mootorina kasutusel DeepL (F<deepl.pm>) ja ChatGPT (F<gpt3.pm>) moodul. Katseversioonid gpt-4 ja gpt-4o toetusest on samuti saadaval.

Kui soovite tõlkida tavalisi tekstiplokke Perl'i pod-stiilis kirjutatud dokumendis, kasutage B<greple> käsku koos C<xlate::deepl> ja C<perl> mooduliga järgmiselt:

    greple -Mxlate::deepl -Mperl --pod --re '^([\w\pP].*\n)+' --all foo.pm

Selles käsu C<^([\w\pP].*\n)+> muster tähendab järjestikuseid ridu, mis algavad alfa-numbrilise ja kirjavahemärgiga. See käsk näitab tõlgitavat ala esile tõstetult. Valikut B<--all> kasutatakse kogu teksti tootmiseks.

=for html <p>
<img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/select-area.png">
</p>

Seejärel lisage C<--xlate> valik, et tõlkida valitud ala. Seejärel otsib see soovitud jaotised üles ning asendab need B<deepl> käsu väljundiga.

Vaikimisi prinditakse algne ja tõlgitud tekst "konfliktimärgendi" formaadis, mis on ühilduv L<git(1)>-ga. Kasutades C<ifdef> formaati, saate soovitud osa hõlpsasti kätte L<unifdef(1)> käsu abil. Väljundi formaati saab määrata B<--xlate-format> valikuga.

=for html <p>
<img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/format-conflict.png">
</p>

Kui soovite tõlkida terve teksti, kasutage B<--match-all> valikut. See on otsetee, et määrata mustrit C<(?s).+>, mis sobib tervele tekstile.

Konfliktimärgistuse vormingu andmeid saab vaadata kõrvuti stiilis C<sdif> käsu abil C<-V> valikuga. Kuna mõttekas pole võrrelda iga stringi alusel, soovitatakse kasutada valikut C<--no-cdif>. Kui te ei vaja teksti värvimist, määrake C<--no-textcolor> (või C<--no-tc>).

    sdif -V --no-tc --no-cdif data_shishin.deepl-EN-US.cm

=for html <p>
<img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/sdif-cm-view.png">
</p>

=head1 NORMALIZATION

Töötlemine toimub määratletud üksustes, kuid mitme rea järjestikuse mitte-tühja teksti korral teisendatakse need koos üheks reaks. See toiming viiakse läbi järgmiselt:

=over 2

=item *

Eemaldatakse tühikud iga rea algusest ja lõpust.

=item *

Kui rida lõpeb täispikkusega kirjavahemärgiga, siis ühenda see järgmise reaga.

=item *

Kui rida lõpeb täislaia tähemärgiga ja järgmine rida algab täislaia tähemärgiga, ühendatakse read.

=item *

Kui rea lõpus või alguses pole täislaia tähemärki, ühendatakse nad, sisestades tühikumärgi.

=back

Vahemälu andmeid haldab normaliseeritud teksti põhjal, seega isegi kui tehakse muudatusi, mis normaliseerimistulemusi ei mõjuta, jäävad vahemälus olevad tõlkeandmed endiselt kehtima.

See normaliseerimisprotsess viiakse läbi ainult esimese (0.) ja paarisarvulise mustri jaoks. Seega, kui kaks mustrit on määratud järgmiselt, siis esimesele mustrile vastava teksti töödeldakse pärast normaliseerimist ning teisele mustrile vastava teksti puhul normaliseerimisprotsessi ei teostata.

    greple -Mxlate -E normalized -E not-normalized

Seetõttu kasutage esimest mustrit teksti jaoks, mis tuleb töödelda, kombineerides mitu rida üheks reaks, ning kasutage teist mustrit eelvormindatud teksti jaoks. Kui esimeses mustris pole teksti, mida sobitada, kasutage mustrit, mis ei sobita midagi, näiteks C<(?!)>.

=head1 MASKING

Aeg-ajalt on tekstiosi, mida te ei soovi tõlkida. Näiteks märgendeid märkmete failides. DeepL soovitab sellistel juhtudel tõlkimata jäetav osa teisendada XML-märgenditeks, tõlkida ja seejärel pärast tõlke lõpetamist taastada. Selle toetamiseks on võimalik määrata tõlkimisest varjatavad osad.

    --xlate-setopt maskfile=MASKPATTERN

See tõlgib iga `MASKPATTERN` faili rea tõlgendamiseks regulaaravaldistena ja taastab pärast töötlemist. Ridadega, mis algavad C<#>, ei tegeleta.

Kompleksne muster saab kirjutada mitmele reale tagurpidi kaldkriipsuga põimitud uuele reale.

Kuidas tekst muudetakse varjamise abil, saab näha valikuga B<--xlate-mask>.

See liides on eksperimentaalne ja võib tulevikus muutuda.

=head1 OPTIONS

=over 7

=item B<--xlate>

=item B<--xlate-color>

=item B<--xlate-fold>

=item B<--xlate-fold-width>=I<n> (Default: 70)

Käivitage tõlkimisprotsess iga sobiva ala jaoks.

Ilma selle valikuta käitub B<greple> nagu tavaline otsingukäsk. Seega saate enne tegeliku töö käivitamist kontrollida, milline osa failist saab tõlkeobjektiks.

Käsu tulemus läheb standardväljundisse, nii et suunake see vajadusel faili või kaaluge L<App::Greple::update> mooduli kasutamist.

Valik B<--xlate> kutsub välja valiku B<--xlate-color> koos valikuga B<--color=never>.

Valikuga B<--xlate-fold> volditakse teisendatud tekst määratud laiusega. Vaikimisi laius on 70 ja seda saab määrata valikuga B<--xlate-fold-width>. Neli veergu on reserveeritud run-in toimingu jaoks, nii et iga rida võib sisaldada kõige rohkem 74 tähemärki.

=item B<--xlate-engine>=I<engine>

Määrab kasutatava tõlke mootori. Kui määrate mootori mooduli otse, näiteks C<-Mxlate::deepl>, siis pole selle valiku kasutamine vajalik.

Sel hetkel on saadaval järgmised mootorid

=over 2

=item * B<deepl>: DeepL API

=item * B<gpt3>: gpt-3.5-turbo

=item * B<gpt4>: gpt-4-turbo

=item * B<gpt4o>: gpt-4o-mini

B<gpt-4o> liides on ebastabiilne ega pruugi hetkel korralikult töötada.

=back

=item B<--xlate-labor>

=item B<--xlabor>

Tõlke mootori kutsumise asemel oodatakse, et te töötaksite ise. Pärast teksti ettevalmistamist tõlkimiseks kopeeritakse need lõikelauale. Oodatakse, et kleepiksite need vormi, kopeeriksite tulemuse lõikelauale ja vajutaksite tagastusklahvi.

=item B<--xlate-to> (Default: C<EN-US>)

Määrake sihtkeel. Saate saada saadaolevad keeled käsu C<deepl languages> abil, kui kasutate B<DeepL> mootorit.

=item B<--xlate-format>=I<format> (Default: C<conflict>)

Määrake algse ja tõlgitud teksti väljundi vorming.

Järgmised vormingud peale C<xtxt> eeldavad, et tõlgitav osa koosneb ridadest. Tegelikult on võimalik tõlkida ainult osa reast ning muu vormingu määramine peale C<xtxt> ei anna mõistlikke tulemusi.

=over 4

=item B<conflict>, B<cm>

Originaal- ja tõlgitud tekst on trükitud L<git(1)> konfliktimärgendi formaadis.

    <<<<<<< ORIGINAL
    original text
    =======
    translated Japanese text
    >>>>>>> JA

Saate algse faili taastada järgmise L<sed(1)> käsu abil.

    sed -e '/^<<<<<<< /d' -e '/^=======$/,/^>>>>>>> /d'

=item B<colon>, I<:::::::>

```html

    ::::::: ORIGINAL
    original text
    :::::::
    ::::::: JA
    translated Japanese text
    :::::::

<div class="original">

    <div class="ORIGINAL">
    original text
    </div>
    <div class="JA">
    translated Japanese text
    </div>

Vaikimisi on koolonite arv 7. Kui määratlete koolonite jada nagu C<:::::>, kasutatakse seda 7 kooloni asemel.

=item B<ifdef>

Originaal- ja tõlgitud tekst on trükitud L<cpp(1)> C<#ifdef> formaadis.

    #ifdef ORIGINAL
    original text
    #endif
    #ifdef JA
    translated Japanese text
    #endif

Saate ainult jaapani keelse teksti kätte B<unifdef> käsu abil:

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Original text:

=item B<xtxt>

Kui vorming on C<xtxt> (tõlgitud tekst) või tundmatu, prinditakse ainult tõlgitud tekst.

=back

=item B<--xlate-maxlen>=I<chars> (Default: 0)

Tõlgi järgnev tekst eesti keelde, rida-realt.

=item B<--xlate-maxline>=I<n> (Default: 0)

Määrake korraga API-le saadetavate tekstiridade maksimaalne arv.

Seadke see väärtus 1, kui soovite tõlkida ühe rea korraga. See valik on prioriteetsem kui C<--xlate-maxlen> valik.

=item B<-->[B<no->]B<xlate-progress> (Default: True)

Vaadake tõlke tulemust reaalajas STDERR väljundis.

=item B<--xlate-stripe>

Kasuta L<App::Greple::stripe> moodulit, et näidata sobitatud osa sebralise triibulise moega. See on kasulik, kui sobitatud osad on omavahel ühendatud.

Värvipalett vahetub vastavalt terminali taustavärvile. Kui soovid seda selgelt määratleda, saad kasutada valikuid B<--xlate-stripe-light> või B<--xlate-stripe-dark>.

=item B<--xlate-mask>

Täida varjamisfunktsioon ja kuvage teisendatud tekst ilma taastamiseta.

=item B<--match-all>

Määrake faili kogu tekst sihtalaks.

=back

=head1 CACHE OPTIONS

B<xlate> moodul saab salvestada tõlke teksti vahemällu iga faili jaoks ja lugeda selle enne täitmist, et kõrvaldada päringu ülekoormus. Vaikimisi vahemälu strateegia C<auto> korral hoitakse vahemälu andmeid ainult siis, kui sihtfaili jaoks on olemas vahemälu fail.

Kasuta B<--xlate-cache=clear> vahemälu haldamise alustamiseks või olemasoleva vahemäluandmete puhastamiseks. Selle valikuga käivitamisel luuakse uus vahemälu fail, kui seda pole olemas, ja seejärel hoitakse seda automaatselt.

=over 7

=item --xlate-cache=I<strategy>

=over 4

=item C<auto> (Default)

Hoia vahemälu faili, kui see on olemas.

=item C<create>

Loo tühi vahemälu fail ja välju.

=item C<always>, C<yes>, C<1>

Hoia vahemälu igal juhul, kui sihtfail on tavaline fail.

=item C<clear>

Kustuta kõigepealt vahemälu andmed.

=item C<never>, C<no>, C<0>

Ära kasuta vahemälu faili isegi siis, kui see on olemas.

=item C<accumulate>

Vaikimisi käitumise korral eemaldatakse kasutamata andmed vahemälu failist. Kui te ei soovi neid eemaldada ja soovite neid failis hoida, kasutage C<accumulate>.

=back

=item B<--xlate-update>

See valik sunnib värskendama vahemälu faili isegi siis, kui see pole vajalik.

=back

=head1 COMMAND LINE INTERFACE

Saate seda moodulit hõlpsalt kasutada käsurealt, kasutades jaotises sisalduvat C<xlate> käsku. Vaadake kasutamiseks C<xlate> man lehte.

C<xlate> käsk töötab koos Dockeri keskkonnaga, seega saate seda kasutada ka siis, kui teil pole midagi installitud, kui Docker on saadaval. Kasutage C<-D> või C<-C> valikut.

Lisaks on saadaval erinevate dokumentide stiilide jaoks makefailid, mis võimaldavad tõlkida teistesse keeltesse ilma eriliste spetsifikatsioonideta. Kasutage C<-M> valikut.

Saate ka kombineerida Dockeri ja C<make> valikud nii, et saate käivitada C<make> Dockeri keskkonnas.

Käivitamine nagu C<xlate -C> avab käsurea koos praeguse töötava git'i repositooriumiga.

Lugege jaapani keelse artikli üksikasjade kohta L</VAATA KA> jaotises.

=head1 EMACS

Laadige C<xlate.el> fail, mis on kaasasolevas hoidlas, et kasutada C<xlate> käsku Emacs redaktorist. C<xlate-region> funktsioon tõlgib antud piirkonna. Vaikimisi keel on C<EN-US> ja saate keele määrata eesliiteargumendiga.

=for html <p>
<img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/emacs.png">
</p>

=head1 ENVIRONMENT

=over 7

=item DEEPL_AUTH_KEY

Seadistage oma autentimisvõti DeepL-teenuse jaoks.

=item OPENAI_API_KEY

OpenAI autentimisvõti.

=back

=head1 INSTALL

=head2 CPANMINUS

    $ cpanm App::Greple::xlate

=head2 TOOLS

Peate installima käsurea tööriistad DeepL ja ChatGPT jaoks.

L<https://github.com/DeepLcom/deepl-python>

L<https://github.com/tecolicom/App-gpty>

=head1 SEE ALSO

L<App::Greple::xlate>

L<App::Greple::xlate::deepl>

L<App::Greple::xlate::gpt3>

=over 2

=item * L<https://hub.docker.com/r/tecolicom/xlate>

Dockeri konteineri pilt.

=item * L<https://github.com/DeepLcom/deepl-python>

DeepL Pythoni teek ja käsurea käsk.

=item * L<https://github.com/openai/openai-python>

OpenAI Pythoni teek

=item * L<https://github.com/tecolicom/App-gpty>

OpenAI käsurealiides

=item * L<App::Greple>

Vaadake B<greple> käsiraamatut sihtteksti mustrite üksikasjade kohta. Piirake vastavust B<--inside>, B<--outside>, B<--include>, B<--exclude> valikutega.

=item * L<App::Greple::update>

Saate kasutada C<-Mupdate> moodulit failide muutmiseks B<greple> käsu tulemuse põhjal.

=item * L<App::sdif>

Kasutage B<sdif> konfliktimärgendi vormingu kuvamiseks kõrvuti B<-V> valikuga.

=item * L<App::Greple::stripe>

Greple B<stripe> moodulit kasutatakse valikuga B<--xlate-stripe>.

=back

=head2 ARTICLES

=over 2

=item * L<https://qiita.com/kaz-utashiro/items/1c1a51a4591922e18250>

Greple moodul tõlkimiseks ja asendamiseks ainult vajalike osadega DeepL API abil (jaapani keeles)

=item * L<https://qiita.com/kaz-utashiro/items/a5e19736416ca183ecf6>

Dokumentide genereerimine 15 keeles DeepL API mooduliga (jaapani keeles)

=item * L<https://qiita.com/kaz-utashiro/items/1b9e155d6ae0620ab4dd>

Automaatse tõlke Dockeri keskkond DeepL API abil (jaapani keeles)

=back

=head1 AUTHOR

Kazumasa Utashiro

=head1 LICENSE

Copyright © 2023-2025 Kazumasa Utashiro.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut
