=encoding utf-8

=head1 NAME

App::Greple::xlate - tõlke toetuse 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 tekstiblokid ja asendab need tõlgitud tekstiga. Praegu on rakendatud DeepL (F<deepl.pm>) ja ChatGPT (F<gpt3.pm>) moodulid tagaplaanina. Eksperimentaalne tugi gpt-4 ja gpt-4o jaoks on samuti kaasatud.  

Kui soovite tõlkida tavalisi tekstiblokke dokumendis, mis on kirjutatud Perli pod stiilis, 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äsus tähendab mustrimuster C<^([\w\pP].*\n)+> järjestikuseid ridu, mis algavad alfanumeerse ja kirjavahemärgi tähega. See käsk näitab tõlgitavat ala esile tõstetuna. 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. Siis leiab see soovitud osad ja asendab need B<deepl> käsu väljundiga.  

Vaikimisi prinditakse originaal- ja tõlgitud tekst "konflikti märgise" formaadis, mis on ühilduv L<git(1)>-ga. Kasutades C<ifdef> formaati, saate soovitud osa L<unifdef(1)> käsuga hõlpsasti kätte. 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 kogu teksti, kasutage B<--match-all> valikut. See on otsetee, et määrata muster C<(?s).+>, mis vastab kogu tekstile.  

Konflikti märgise formaadi andmeid saab vaadata kõrvuti stiilis C<sdif> käsuga koos C<-V> valikuga. Kuna pole mõtet võrrelda iga stringi alusel, on soovitatav kasutada C<--no-cdif> valikut. Kui te ei soovi teksti värvida, 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ääratud üksustes, kuid mitme mitte-tühja teksti rea järjestuse korral muudetakse need koos üheks reaks. See operatsioon toimub järgmiselt:  

=over 2

=item *

Eemaldage valged ruumid iga rea algusest ja lõpust.  

=item *

Kui rida lõpeb täislaia kirjavahemärgiga, ühendage see järgmise reaga.  

=item *

Kui rida lõpeb täislaia tähega ja järgmine rida algab täislaia tähega, ühendage read.  

=item *

Kui kas rea lõpp või algus ei ole täislaia tähemärk, ühendage need, sisestades tühiku.  

=back

Vahemälu andmeid hallatakse normaliseeritud teksti alusel, seega isegi kui tehakse muudatusi, mis ei mõjuta normaliseerimise tulemusi, jääb vahemällu salvestatud tõlkeandmed endiselt kehtima.  

See normaliseerimisprotsess toimub ainult esimese (0. ) ja paarisarvulise mustri puhul. Seega, kui kaks mustrit on määratud järgmiselt, töödeldakse esimese mustriga vastavat teksti pärast normaliseerimist ja teise mustriga vastavale tekstile ei tehta normaliseerimisprotsessi.  

    greple -Mxlate -E normalized -E not-normalized

Seetõttu kasutage esimest mustrit teksti jaoks, mida töödeldakse, kombineerides mitu rida üheks reaks, ja kasutage teist mustrit eelnevalt vormindatud teksti jaoks. Kui esimeses mustris ei ole sobivat teksti, kasutage mustrit, mis ei sobi millegagi, näiteks C<(?!)>.

=head1 MASKING

Mõnikord on tekste, mida te ei soovi tõlkida. Näiteks, sildid markdown failides. DeepL soovitab, et sellistel juhtudel muudetaks tõlkimiseks välistatud osa XML siltideks, tõlgitaks ja seejärel taastataks pärast tõlke lõpetamist. Selle toetamiseks on võimalik määrata osad, mis tuleb tõlkimisest varjata. 

    --xlate-setopt maskfile=MASKPATTERN

See tõlgendab iga faili `MASKPATTERN` rida regulaaravaldisena, tõlgib sellele vastavad stringid ja taastab pärast töötlemist. Rida, mis algab C<#>, jäetakse tähelepanuta. 

Kompleksne muster saab kirjutada mitmele reale, kasutades tagurpidi kaldkriipsu, et vältida reavahet.

Kuidas teksti muudetakse maskeerimise abil, saab näha B<--xlate-mask> valiku kaudu.

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õlkeprotsess iga vastava ala jaoks. 

Ilma selle valikuta käitub B<greple> nagu tavaline otsingukäsk. Nii et saate kontrollida, milline osa failist on tõlkimise objekt enne tegeliku töö käivitamist. 

Käskluse tulemus läheb standardväljundisse, seega suunake see faili, kui see on vajalik, või kaaluge L<App::Greple::update> mooduli kasutamist. 

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

B<--xlate-fold> valiku korral on muudetud tekst volditud määratud laiuse järgi. Vaikimisi laius on 70 ja seda saab seadistada B<--xlate-fold-width> valikuga. Neli veergu on reserveeritud jooksva operatsiooni jaoks, seega võib iga rida sisaldada maksimaalselt 74 tähemärki. 

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

Määrake kasutatav tõlkemootor. Kui määrate mootori mooduli otse, näiteks C<-Mxlate::deepl>, ei pea te seda valikut kasutama. 

Praegu on saadaval järgmised mootoreid 

=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 ja ei saa hetkel õigesti töötada. 

=back

=item B<--xlate-labor>

=item B<--xlabor>

Tõlkemootori kutsumise asemel oodatakse, et te töötaksite. Pärast tõlgitava teksti ettevalmistamist kopeeritakse need lõikelauale. Oodatakse, et te kleepiksite need vormi, kopeeriksite tulemuse lõikelauale ja vajutaksite enter. 

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

Määrake sihtkeel. Saate saada saadaval olevad keeled C<deepl languages> käsuga, kui kasutate B<DeepL> mootorit. 

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

Määrake väljundi formaat originaal- ja tõlgitud teksti jaoks. 

Järgmised formaadid, välja arvatud C<xtxt>, eeldavad, et tõlgitav osa on ridade kogum. Tegelikult on võimalik tõlkida ainult osa reast, ja formaadi määramine, mis ei ole C<xtxt>, ei too kaasa mõtestatud tulemusi. 

=over 4

=item B<conflict>, B<cm>

Originaal- ja muudetud tekst prinditakse L<git(1)> konfliktimarkerite formaadis. 

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

Saate originaalfaili taastada järgmise L<sed(1)> käsuga. 

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

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

```markdown
<original>
The original and translated text are output in a markdown's custom container style.
</original>
<translated>
Originaal ja tõlgitud tekst on väljundis markdowni kohandatud konteineri stiilis.
</translated>
```

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

Ülaltoodud tekst tõlgitakse HTML-i järgmiselt.

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

Kolonni arv on vaikimisi 7. Kui määrate kolonni järjestuse nagu C<:::::>, kasutatakse seda 7 kolonni asemel.

=item B<ifdef>

Originaal- ja muudetud tekst prinditakse L<cpp(1)> C<#ifdef> formaadis. 

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

Saate ainult jaapani keele teksti kätte B<unifdef> käsuga: 

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Original and converted text are printed separated by single blank line. 
Originaal ja muudetud tekst on trükitud eraldi ühe tühja rea kaupa.
For C<space+>, it also outputs a newline after the converted text.
C<space+> puhul väljastatakse ka uue rea muudetud teksti järel.

=item B<xtxt>

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

=back

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

Määrake maksimaalne tekstipikkus, mis saadetakse API-le korraga. Vaikimisi väärtus on seatud tasuta DeepL konto teenusele: 128K API jaoks (B<--xlate>) ja 5000 lõikelaua liidese jaoks (B<--xlate-labor>). Võite olla võimeline neid väärtusi muutma, kui kasutate Pro teenust. 

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

Määrake maksimaalne ridade arv, mis saadetakse API-le korraga.

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

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

Vaadake tõlke tulemust reaalajas STDERR väljundis.  

=item B<--xlate-stripe>

Kasutage L<App::Greple::stripe> moodulit, et näidata sobivat osa zebra triibulises stiilis.  
See on kasulik, kui sobivad osad on omavahel ühendatud.

Värvipalett vahetatakse vastavalt terminali taustavärvile. Kui soovite seda selgelt määrata, võite kasutada B<--xlate-stripe-light> või B<--xlate-stripe-dark>.

=item B<--xlate-mask>

<masking_function>Te olete koolitatud andmetel kuni oktoober 2023.</masking_function>

=item B<--match-all>

Seadke kogu faili tekst sihtalaks.  

=back

=head1 CACHE OPTIONS

B<xlate> moodul võib salvestada tõlke vahemälu iga faili jaoks ja lugeda seda enne täitmist, et vähendada serveri pärimise ülekaalu. Vaikimisi vahemälu strateegia C<auto> säilitab vahemälu andmeid ainult siis, kui vahemälu fail eksisteerib sihtfaili jaoks.  

Use B<--xlate-cache=clear> vahemälu haldamise algatamiseks või olemasoleva vahemälu andmete puhastamiseks. Kui see valik on täidetud, luuakse uus vahemälu fail, kui seda ei eksisteeri, ja seejärel hooldatakse seda automaatselt.

=over 7

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

=over 4

=item C<auto> (Default)

Hoidke vahemälu faili, kui see eksisteerib.  

=item C<create>

Looge tühi vahemälu fail ja väljuge.  

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

Hoidke vahemälu igal juhul, kui siht on normaalne fail.  

=item C<clear>

Kustutage kõigepealt vahemälu andmed.  

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

Ärge kunagi kasutage vahemälu faili, isegi kui see eksisteerib.  

=item C<accumulate>

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

=back

=item B<--xlate-update>

See valik sunnib värskendama vahemälu faili isegi kui see ei ole vajalik.

=back

=head1 COMMAND LINE INTERFACE

Sa saad seda moodulit käsurealt hõlpsasti kasutada, kasutades C<xlate> käsku, mis on kaasas jaotusega. Vaata C<xlate> man lehte kasutamise kohta.

C<xlate> käsk töötab koos Docker keskkonnaga, nii et isegi kui teil pole midagi käepärast installitud, saate seda kasutada, kui Docker on saadaval. Kasutage C<-D> või C<-C> valikut.  

Samuti, kuna erinevate dokumentide stiilide jaoks on saadaval makefailid, on tõlkimine teistesse keeltesse võimalik ilma erilise spetsifikatsioonita. Kasutage C<-M> valikut.  

Sa saad ka kombineerida Docker ja C<make> valikud, et saaksid käivitada C<make> Docker keskkonnas.

Käivitamine nagu C<xlate -C> avab shelli, kus on praegune töötav git-repositoorium monteeritud.

Lugege jaapani keeles artiklit L</SEE ALSO> jaotises üksikasjade jaoks.  

=head1 EMACS

Laadige hoidlas sisalduv F<xlate.el> fail, et kasutada C<xlate> käsku Emacsi redigeerijast. C<xlate-region> funktsioon tõlgib antud piirkonna. Vaikimisi keel on C<EN-US> ja saate keelt määrata, kutsudes seda esitusargumendiga.  

=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

Seadke oma autentimisvõti DeepL teenusele.  

=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>

Docker konteineri pilt.

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

DeepL Python teek ja CLI käsk.  

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

OpenAI Python teek  

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

OpenAI käsurea liides  

=item * L<App::Greple>

Vaadake B<greple> käsiraamatut sihtteksti mustri kohta. Kasutage B<--inside>, B<--outside>, B<--include>, B<--exclude> valikuid, et piirata vastavust.  

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

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

=item * L<App::sdif>

Kasutage B<sdif>, et näidata konfliktimarkerite formaati kõrvuti B<-V> valikuga.  

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

Greple B<stripe> mooduli kasutamine B<--xlate-stripe> valiku kaudu.

=back

=head2 ARTICLES

=over 2

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

Greple moodul tõlkimiseks ja asendamiseks ainult vajalikke osi DeepL API-ga (jaapani keeles)  

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

Dokumentide genereerimine 15 keeles DeepL API mooduli abil (jaapani keeles)  

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

Automaatne tõlke Docker keskkond DeepL API-ga (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
