=encoding utf-8

=head1 NAME

App::Greple::xlate - greple için çeviri destek modülü

=head1 SYNOPSIS

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

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

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

    greple -Mxlate --xlate-engine gpt5 --xlate pattern target-file

=head1 VERSION

Version 0.9918

=head1 DESCRIPTION

B<Greple> B<xlate> modülü, istenen metin bloklarını bulur ve bunları çevrilmiş metinle değiştirir. Şu anda DeepL (F<deepl.pm>), ChatGPT 4.1 (F<gpt4.pm>) ve GPT-5 (F<gpt5.pm>) modülleri arka uç motoru olarak uygulanmıştır.

Perl'in pod stilinde yazılmış bir belgede normal metin bloklarını çevirmek istiyorsanız, B<greple> komutunu C<xlate::deepl> ve C<perl> modülleriyle şu şekilde kullanın:

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

Bu komutta, desen dizesi C<^([\w\pP].*\n)+> alfa-sayısal ve noktalama işaretiyle başlayan ardışık satırları ifade eder. Bu komut, çevrilecek alanı vurgulanmış olarak gösterir. B<--all> seçeneği, tüm metni üretmek için kullanılır.

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

Daha sonra seçili alanı çevirmek için C<--xlate> seçeneğini ekleyin. Ardından, istenen bölümleri bulacak ve bunları B<deepl> komutunun çıktısıyla değiştirecektir.

Varsayılan olarak, orijinal ve çevrilmiş metin, L<git(1)> ile uyumlu "çakışma işaretleyici" formatında yazdırılır. C<ifdef> formatını kullanarak, L<unifdef(1)> komutuyla kolayca istediğiniz bölümü alabilirsiniz. Çıktı formatı B<--xlate-format> seçeneğiyle belirtilebilir.

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

Tüm metni çevirmek istiyorsanız, B<--match-all> seçeneğini kullanın. Bu, tüm metni eşleştiren C<(?s).+> desenini belirtmek için bir kısayoldur.

Çakışma işaretleyici biçimindeki veriler, L<sdif|App::sdif> komutu ile C<-V> seçeneği kullanılarak yan yana biçimde görüntülenebilir. Karşılaştırmanın dize bazında yapılmasının anlamı olmadığından, C<--no-cdif> seçeneği önerilir. Metni renklendirmenize gerek yoksa, C<--no-textcolor> (veya C<--no-tc>) belirtin.

    sdif -V --no-filename --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

İşlem belirtilen birimlerde yapılır, ancak birden fazla satırdan oluşan boş olmayan metin dizileri durumunda, bunlar birlikte tek bir satıra dönüştürülür. Bu işlem şu şekilde gerçekleştirilir:

=over 2

=item *

Her satırın başındaki ve sonundaki boşluklar kaldırılır.

=item *

Bir satır tam genişlikte bir noktalama işaretiyle bitiyorsa, bir sonraki satırla birleştirilir.

=item *

Bir satır tam genişlikte bir karakterle bitiyor ve sonraki satır tam genişlikte bir karakterle başlıyorsa, satırlar birleştirilir.

=item *

Bir satırın sonu veya başı tam genişlikte bir karakter değilse, araya bir boşluk karakteri eklenerek birleştirilirler.

=back

Önbellek verileri normalleştirilmiş metne göre yönetilir, bu nedenle normalleştirme sonuçlarını etkilemeyen değişiklikler yapılsa bile, önbelleğe alınmış çeviri verileri geçerli olmaya devam eder.

Bu normalleştirme işlemi yalnızca ilk (0. indeksli) ve çift numaralı desenler için gerçekleştirilir. Bu nedenle, aşağıdaki gibi iki desen belirtildiğinde, ilk desene uyan metin normalleştirmeden sonra işlenir ve ikinci desene uyan metin üzerinde normalleştirme işlemi yapılmaz.

    greple -Mxlate -E normalized -E not-normalized

Bu nedenle, birden fazla satırı tek bir satırda birleştirerek işlenecek metinler için ilk deseni, önceden biçimlendirilmiş metinler için ise ikinci deseni kullanın. İlk desende eşleşecek metin yoksa, C<(?!)> gibi hiçbir şeyle eşleşmeyen bir desen kullanın.

=head1 MASKING

Bazen, çeviri yapılmasını istemediğiniz metin bölümleri olabilir. Örneğin, markdown dosyalarındaki etiketler gibi. DeepL, bu gibi durumlarda çevrilmeyecek metin bölümünün XML etiketlerine dönüştürülmesini, çevrilmesini ve ardından çeviri tamamlandıktan sonra eski haline getirilmesini önerir. Bunu desteklemek için, çeviriden maskelenecek bölümleri belirtmek mümkündür.

    --xlate-setopt maskfile=MASKPATTERN

Bu, `MASKPATTERN` dosyasının her satırını bir düzenli ifade olarak yorumlar, eşleşen dizeleri çevirir ve işleme sonrası geri alır. C<#> ile başlayan satırlar yok sayılır.

Karmaşık desenler, ters eğik çizgiyle kaçışlı yeni satır kullanılarak birden fazla satıra yazılabilir.

Maskelenerek metnin nasıl dönüştürüldüğü B<--xlate-mask> seçeneğiyle görülebilir.

Bu arayüz deneyseldir ve gelecekte değişikliğe tabidir.

=head1 OPTIONS

=over 7

=item B<--xlate>

=item B<--xlate-color>

=item B<--xlate-fold>

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

Her eşleşen alan için çeviri işlemini başlatın.

Bu seçenek olmadan, B<greple> normal bir arama komutu gibi davranır. Yani, gerçek işlemi başlatmadan önce dosyanın hangi bölümünün çeviriye tabi olacağını kontrol edebilirsiniz.

Komut sonucu standart çıktıya gider, bu nedenle gerekirse dosyaya yönlendirin veya L<App::Greple::update> modülünü kullanmayı düşünün.

B<--xlate> seçeneği, B<--xlate-color> seçeneğini B<--color=never> seçeneğiyle çağırır.

B<--xlate-fold> seçeneğiyle, dönüştürülen metin belirtilen genişlikte katlanır. Varsayılan genişlik 70'tir ve B<--xlate-fold-width> seçeneğiyle ayarlanabilir. Dört sütun çalıştırma işlemi için ayrılmıştır, bu nedenle her satır en fazla 74 karakter tutabilir.

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

Kullanılacak çeviri motorunu belirtir. C<-Mxlate::deepl> gibi motor modülünü doğrudan belirtirseniz, bu seçeneği kullanmanıza gerek yoktur.

Şu anda, aşağıdaki motorlar mevcuttur

=over 2

=item * B<deepl>: DeepL API

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

=item * B<gpt4>: gpt-4.1

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

B<gpt-4o>'ün arayüzü kararsızdır ve şu anda düzgün çalışacağı garanti edilemez.

=item * B<gpt5>: gpt-5

=back

=item B<--xlate-labor>

=item B<--xlabor>

Çeviri motorunu çağırmak yerine, sizin çalışmanız beklenir. Çevrilecek metni hazırladıktan sonra, bunlar panoya kopyalanır. Bunları forma yapıştırmanız, sonucu panoya kopyalamanız ve enter tuşuna basmanız beklenir.

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

Hedef dili belirtin. B<DeepL> motorunu kullanırken C<deepl languages> komutuyla mevcut dilleri alabilirsiniz.

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

Orijinal ve çevrilmiş metin için çıktı biçimini belirtin.

C<xtxt> dışında aşağıdaki biçimler, çevrilecek bölümün bir satır koleksiyonu olduğunu varsayar. Aslında, bir satırın yalnızca bir bölümünü çevirmek mümkündür, ancak C<xtxt> dışında bir biçim belirtmek anlamlı sonuçlar üretmez.

=over 4

=item B<conflict>, B<cm>

Orijinal ve dönüştürülmüş metin L<git(1)> çakışma işaretleyici biçiminde yazdırılır.

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

Bir sonraki L<sed(1)> komutuyla orijinal dosyayı geri yükleyebilirsiniz.

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

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

Orijinal ve çevrilmiş metin, markdown'un özel kapsayıcı stilinde çıktı olarak verilir.

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

Yukarıdaki metin HTML olarak aşağıdaki şekilde çevrilecektir.

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

Varsayılan olarak iki nokta sayısı 7'dir. C<:::::> gibi bir iki nokta dizisi belirtirseniz, 7 yerine bu kullanılır.

=item B<ifdef>

Orijinal ve dönüştürülmüş metin L<cpp(1)> C<#ifdef> biçiminde yazdırılır.

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

Sadece Japonca metni B<unifdef> komutuyla alabilirsiniz:

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Orijinal ve dönüştürülmüş metin tek bir boş satırla ayrılarak yazdırılır.

=item B<xtxt>

C<space+>

=back

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

Ayrıca dönüştürülmüş metinden sonra da bir satır sonu ekler.

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

Eğer format C<xtxt> (çevirilmiş metin) veya bilinmiyorsa, sadece çevrilmiş metin yazdırılır.

API'ye bir seferde gönderilecek metnin maksimum uzunluğunu belirtin. Varsayılan değer, ücretsiz DeepL hesap servisi için ayarlanmıştır: API için 128K (B<--xlate>) ve pano arayüzü için 5000 (B<--xlate-labor>). Pro servisi kullanıyorsanız bu değerleri değiştirebilirsiniz.

=item B<--xlate-prompt>=I<text>

Çeviri motoruna gönderilecek özel bir istem belirtin. Bu seçenek yalnızca ChatGPT motorları (gpt3, gpt4, gpt4o) kullanılırken mevcuttur. Yapay zeka modeline belirli talimatlar vererek çeviri davranışını özelleştirebilirsiniz. Eğer istemde C<%s> bulunuyorsa, bu kısım hedef dil adıyla değiştirilecektir.

=item B<--xlate-context>=I<text>

Çeviri motoruna gönderilecek ek bağlam bilgisi belirtin. Bu seçenek birden fazla kez kullanılarak birden fazla bağlam dizesi sağlanabilir. Bağlam bilgisi, çeviri motorunun arka planı anlamasına ve daha doğru çeviriler üretmesine yardımcı olur.

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

Çeviri için kullanılacak bir sözlük kimliği belirtin. Bu seçenek yalnızca DeepL motoru kullanılırken mevcuttur. Sözlük kimliği DeepL hesabınızdan alınmalı ve belirli terimlerin tutarlı şekilde çevrilmesini sağlar.

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

API'ye bir seferde gönderilecek maksimum metin satırı sayısını belirtin.

=item B<--xlate-stripe>

Her seferinde bir satır çevirmek istiyorsanız bu değeri 1 olarak ayarlayın. Bu seçenek C<--xlate-maxlen> seçeneğine öncelik verir.

Çeviri sonucunu gerçek zamanlı olarak STDERR çıktısında görün.

=item B<--xlate-mask>

Eşleşen kısmı zebra şeritli şekilde göstermek için L<App::Greple::stripe> modülünü kullanın. Bu, eşleşen kısımlar arka arkaya bağlandığında kullanışlıdır.

=item B<--match-all>

Renk paleti, terminalin arka plan rengine göre değiştirilir. Açıkça belirtmek isterseniz B<--xlate-stripe-light> veya B<--xlate-stripe-dark> kullanabilirsiniz.

=item B<--lineify-cm>

=item B<--lineify-colon>

C<cm> ve C<colon> formatları durumunda, çıktı satır satır bölünür ve biçimlendirilir. Bu nedenle, bir satırın yalnızca bir kısmı çevrilecekse, beklenen sonuç elde edilemez. Bu filtreler, bir satırın bir kısmının çevrilmesiyle bozulan çıktıyı, normal satır satır çıktıya dönüştürür.

Mevcut uygulamada, bir satırın birden fazla kısmı çevrilirse, bunlar bağımsız satırlar olarak çıktı verilir.

=back

=head1 CACHE OPTIONS

Maskeleme işlevini gerçekleştirir ve dönüştürülmüş metni olduğu gibi restorasyon yapmadan gösterir.

Dosyanın tüm metnini hedef alan olarak ayarlayın.

=over 7

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

=over 4

=item C<auto> (Default)

B<xlate> modülü, her dosya için çeviri önbellekli metni depolayabilir ve çalıştırmadan önce okuyarak sunucuya sorma yükünü ortadan kaldırır. Varsayılan önbellek stratejisi C<auto> ile, hedef dosya için önbellek dosyası mevcutsa yalnızca önbellek verilerini tutar.

=item C<create>

Önbellek yönetimini başlatmak veya mevcut tüm önbellek verilerini temizlemek için B<--xlate-cache=clear> kullanın. Bu seçenekle çalıştırıldığında, önbellek dosyası yoksa yeni bir tane oluşturulur ve ardından otomatik olarak yönetilir.

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

Önbellek dosyası mevcutsa onu koruyun.

=item C<clear>

Boş bir önbellek dosyası oluşturun ve çıkın.

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

Hedef normal dosya olduğu sürece her durumda önbelleği koruyun.

=item C<accumulate>

Önce önbellek verilerini temizleyin.

=back

=item B<--xlate-update>

Önbellek dosyası mevcut olsa bile asla kullanmayın.

=back

=head1 COMMAND LINE INTERFACE

Varsayılan davranış olarak, kullanılmayan veriler önbellek dosyasından kaldırılır. Bunları kaldırmak istemiyorsanız ve dosyada tutmak istiyorsanız C<accumulate> kullanın.

C<xlate> komutu, C<--to-lang>, C<--from-lang>, C<--engine> ve C<--file> gibi GNU tarzı uzun seçenekleri destekler. Tüm mevcut seçenekleri görmek için C<xlate -h> kullanın.

Bu seçenek, gerek olmasa bile önbellek dosyasını güncellemeye zorlar.

Docker işlemleri, bağımsız bir komut olarak da kullanılabilen C<xrun> betiği tarafından yönetilir. C<xrun> betiği, kalıcı konteyner ayarları için C<.xrunrc> yapılandırma dosyasını destekler.

Bu modülü komut satırından kolayca kullanmak için dağıtıma dahil edilen C<xlate> komutunu kullanabilirsiniz. Kullanımı için C<xlate> man sayfasına bakın.

C<xlate> komutu Docker ortamı ile birlikte çalışır, bu nedenle elinizde hiçbir şey kurulu olmasa bile Docker mevcut olduğu sürece kullanabilirsiniz. C<-D> veya C<-C> seçeneğini kullanın.

Ayrıca, çeşitli belge stilleri için makefile'lar sağlandığından, özel bir belirtim olmadan diğer dillere çeviri mümkündür. C<-M> seçeneğini kullanın.

Docker ve C<make> seçeneklerini birleştirerek C<make> komutunu Docker ortamında çalıştırabilirsiniz.

=head1 EMACS

Depodaki F<xlate.el> dosyasını yükleyerek Emacs editöründen C<xlate> komutunu kullanabilirsiniz.

=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

C<xlate-region> fonksiyonu verilen bölgeyi çevirir.

=item OPENAI_API_KEY

Varsayılan dil C<EN-US>'dir ve önek argümanla çağırarak dili belirtebilirsiniz.

=back

=head1 INSTALL

=head2 CPANMINUS

    $ cpanm App::Greple::xlate

=head2 TOOLS

DeepL servisi için kimlik doğrulama anahtarınızı ayarlayın.

OpenAI kimlik doğrulama anahtarı.

DeepL ve ChatGPT için komut satırı araçlarını yüklemeniz gerekir.

=head1 SEE ALSO

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

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

L<App::Greple::xlate::gpt4>

L<App::Greple::xlate::gpt5>

=over 2

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

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

=item * L<https://github.com/tecolicom/getoptlong>

C<getoptlong.sh> kütüphanesi, C<xlate> ve C<xrun> betiklerinde seçenek ayrıştırma için kullanılır.

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

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

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

Docker konteyner imajı.

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

DeepL Python kütüphanesi ve CLI komutu.

=item * L<App::Greple>

OpenAI Python Kütüphanesi

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

OpenAI komut satırı arayüzü

=item * L<App::sdif>

Hedef metin deseniyle ilgili ayrıntılar için B<greple> kılavuzuna bakın. Eşleşme alanını sınırlamak için B<--inside>, B<--outside>, B<--include>, B<--exclude> seçeneklerini kullanın.

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

C<-Mupdate> modülünü, B<greple> komutunun sonucu ile dosyaları değiştirmek için kullanabilirsiniz.

=back

=head2 ARTICLES

=over 2

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

Çakışma işaretleyici biçimini B<-V> seçeneğiyle yan yana göstermek için B<sdif> kullanın.

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

Greple B<stripe> modülü, B<--xlate-stripe> seçeneğiyle kullanılır.

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

DeepL API ile yalnızca gerekli kısımları çevirip değiştiren Greple modülü (Japonca)

=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
