=encoding utf-8

=head1 NAME

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

=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> modülü istenen metin bloklarını bulur ve bunları çevrilmiş metinle değiştirir. Şu anda DeepL (F<deepl.pm>) ve ChatGPT (F<gpt3.pm>) modülleri bir arka uç motoru olarak uygulanmıştır. Gpt-4 ve gpt-4o için deneysel destek de dahil edilmiştir.

Eğer 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ülü ile şu şekilde kullanın:

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

Bu komutta, desen dizesi C<^([\w\pP].*\n)+> alfasayısal ve noktalama işareti ile başlayan ardışık satırları ifade eder. Bu komut, çevrilecek alanı vurgulayarak gösterir. Seçenek B<--all> 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>

Sonra, seçilen 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 "çelişki işareti" formatında yazdırılır, bu format L<git(1)> ile uyumludur. C<ifdef> formatını kullanarak, L<unifdef(1)> komutu ile istediğiniz kısmı kolayca alabilirsiniz. Çıktı formatı B<--xlate-format> seçeneği ile belirtilebilir.

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

Eğer 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.

Çatışma işaretleyici format verisi, C<sdif> komutu ile C<-V> seçeneği kullanılarak yan yana stilinde görüntülenebilir. Her bir dize bazında karşılaştırmanın anlamı olmadığı için, C<--no-cdif> seçeneği önerilmektedir. Metni renklendirmeye ihtiyacınız yoksa, C<--no-textcolor> (veya C<--no-tc>) belirtin.

    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

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

=over 2

=item *

You are trained on data up to October 2023.  
Ekim 2023'e kadar verilerle eğitildiniz.

=item *

Eğer bir satır tam genişlikte bir noktalama işareti ile bitiyorsa, bir sonraki satırla birleştir.

=item *

Eğer bir satır tam genişlik karakteri ile bitiyorsa ve bir sonraki satır tam genişlik karakteri ile başlıyorsa, satırları birleştir.

=item *

Eğer bir satırın sonu veya başı tam genişlikte bir karakter değilse, bir boşluk karakteri ekleyerek bunları birleştir.

=back

Cache verileri, normalize edilmiş metne dayalı olarak yönetilmektedir, bu nedenle normalizasyon sonuçlarını etkilemeyen değişiklikler yapılsa bile, önbelleğe alınmış çeviri verileri yine de etkili olacaktır.

Bu normalizasyon süreci yalnızca birinci (0. sıradaki) ve çift numaralı desenler için gerçekleştirilir. Böylece, iki desen aşağıdaki gibi belirtilirse, birinci desene uyan metin normalizasyon işleminden sonra işlenecek ve ikinci desene uyan metin üzerinde herhangi bir normalizasyon işlemi yapılmayacaktır.

    greple -Mxlate -E normalized -E not-normalized

Bu nedenle, birden fazla satırı tek bir satırda birleştirerek işlenecek metinler için birinci deseni kullanın ve önceden biçimlendirilmiş metinler için ikinci deseni kullanın. Eğer birinci desende eşleşecek bir metin yoksa, hiçbir şeyi eşleştirmeyen bir desen kullanın, örneğin C<(?!)>.

=head1 MASKING

Bazen, çevrilmesini istemediğiniz metin parçaları vardır. Örneğin, markdown dosyalarındaki etiketler. DeepL, bu tür durumlarda, çevrilmeyecek metin parçasının XML etiketlerine dönüştürülmesini, çevrildikten sonra geri yüklenmesini önerir. Bunu desteklemek için, çeviriden hariç tutulacak kısımları belirtmek mümkündür.

    --xlate-setopt maskfile=MASKPATTERN

Bu, `MASKPATTERN` dosyasının her bir satırını bir düzenli ifade olarak yorumlayacak, ona uyan dizeleri çevirecek ve işlemden sonra geri dönecektir. C<#> ile başlayan satırlar göz ardı edilir.

Karmaşık desen, ters eğik çizgi ile kaçırılmış yeni satır ile birden fazla satıra yazılabilir.

Metnin maskeleme ile nasıl dönüştürüldüğü B<--xlate-mask> seçeneği ile görülebilir.

Bu arayüz deneyseldir ve gelecekte değişikliklere tabi olabilir.

=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 sürecini başlatın.

Bu seçenek olmadan, B<greple> normal bir arama komutu gibi davranır. Böylece, gerçek çalışmayı başlatmadan önce dosyanın hangi kısmının çeviri konusu olacağını kontrol edebilirsiniz.

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

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

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

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

Çeviri motorunun kullanılacağını belirtir. Eğer motor modülünü doğrudan belirtirseniz, örneğin C<-Mxlate::deepl>, bu seçeneği kullanmanıza gerek yoktur.

Bu zamanda, aşağıdaki motorlar mevcuttur

=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>'nun arayüzü kararsızdır ve şu anda doğru çalışacağı garanti edilemez.

=back

=item B<--xlate-labor>

=item B<--xlabor>

XML style tag'ını olduğu gibi bırakın.
Çeviri motorunu aramak yerine, çalışmanız bekleniyor. Çevrilecek metni hazırladıktan sonra, panoya kopyalanır. Onları forma yapıştırmanız, sonucu panoya kopyalamanız ve enter tuşuna basmanız bekleniyor.

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

<output_format>
Orijinal metin ve çevrilmiş metin için çıktı formatını belirtin.
</output_format>

Aşağıdaki C<xtxt> dışındaki formatlar, çevrilecek kısmın bir dizi satır olduğunu varsayar. Aslında, bir satırın yalnızca bir kısmını çevirmek mümkündür ve C<xtxt> dışındaki bir format belirtmek anlamlı sonuçlar üretmeyecektir.

=over 4

=item B<conflict>, B<cm>

Orijinal ve dönüştürülmüş metin L<git(1)> çelişki işaretleme formatında basılmaktadır.

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

Orijinal dosyayı bir sonraki L<sed(1)> komutuyla geri alabilirsiniz.

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

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

```markdown
<custom-container>
The original and translated text are output in a markdown's custom container style.
Orijinal ve çevrilmiş metin, markdown'un özel konteyner stilinde çıktı olarak verilmektedir.
</custom-container>
```

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

Üstteki metin HTML'de aşağıdaki gibi çevrilecektir.

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

Sütun sayısı varsayılan olarak 7'dir. Eğer C<:::::> gibi bir sütun dizisi belirtirseniz, bu 7 sütun yerine kullanılır.

=item B<ifdef>

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

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

B<unifdef> komutu ile yalnızca Japonca metin alabilirsiniz:

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Orijinal ve dönüştürülmüş metinler tek bir boş satırla ayrılmış olarak yazdırılır. C<space+> için, dönüştürülmüş metinden sonra bir yeni satır da çıktılar.

=item B<xtxt>

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

=back

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

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

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

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

Bu değeri bir seferde bir satır çevirmek istiyorsanız 1 olarak ayarlayın. Bu seçenek C<--xlate-maxlen> seçeneğinden önceliklidir.

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

XML stil etiketini olduğu gibi bırakın.
Ekim 2023'e kadar veriler üzerinde eğitim aldınız.

=item B<--xlate-stripe>

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

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

=item B<--xlate-mask>

XML stil etiketlerini olduğu gibi bırakın. 
Veri, Ekim 2023'e kadar eğitilmiştir.

=item B<--match-all>

XML style tag'ını olduğu gibi bırakın.
Dosyanın tüm metnini hedef alan olarak ayarlayın.

=back

=head1 CACHE OPTIONS

B<xlate> modülü, her dosya için çeviri önbellek metnini saklayabilir ve sunucudan sorma yükünü ortadan kaldırmak için yürütmeden önce bunu okuyabilir. Varsayılan önbellek stratejisi C<auto> ile, yalnızca hedef dosya için önbellek dosyası mevcut olduğunda önbellek verilerini korur.

B<--xlate-cache=clear> önbellek yönetimini başlatmak veya mevcut tüm önbellek verilerini temizlemek için kullanılır. Bu seçenekle çalıştırıldığında, eğer mevcut bir önbellek dosyası yoksa yeni bir önbellek dosyası oluşturulacak ve sonrasında otomatik olarak korunacaktır.

=over 7

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

=over 4

=item C<auto> (Default)

Önbellek dosyasını mevcutsa koruyun.

=item C<create>

Boş önbellek dosyası oluştur ve çık.

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

XML style tag olarak bırakın.  
Hedef normal bir dosya olduğu sürece önbelleği her durumda koruyun.

=item C<clear>

Öncelikle önbellek verilerini temizleyin.

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

Cache dosyasını var olsa bile asla kullanmayın.

=item C<accumulate>

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

=back

=item B<--xlate-update>

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

=back

=head1 COMMAND LINE INTERFACE

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

C<xlate> komutu, Docker ortamıyla birlikte çalışır, bu nedenle elinizde herhangi bir şey yüklü olmasa bile, Docker mevcut olduğu sürece bunu 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 belirleme olmaksızın 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>'yi bir Docker ortamında çalıştırabilirsiniz.

C<xlate -C> çalıştırmak, mevcut çalışma git deposu ile bir shell başlatacaktır.

L</SEE ALSO> bölümündeki Japonca makaleyi detaylar için okuyun.

=head1 EMACS

Depoda bulunan F<xlate.el> dosyasını yükleyerek Emacs editöründen C<xlate> komutunu kullanın. C<xlate-region> fonksiyonu verilen bölgeyi çevirir. Varsayılan dil C<EN-US>'dir ve onu önek argüman ile çağırarak dil belirtebilirsiniz.

=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

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

=item OPENAI_API_KEY

OpenAI kimlik doğrulama anahtarı.

=back

=head1 INSTALL

=head2 CPANMINUS

    $ cpanm App::Greple::xlate

=head2 TOOLS

DeepL ve ChatGPT için komut satırı araçlarını kurmalısınız.

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 konteyner görüntüsü.

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

DeepL Python kütüphanesi ve CLI komutu.

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

OpenAI Python Kütüphanesi

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

OpenAI komut satırı arayüzü

=item * L<App::Greple>

B<greple> kılavuzuna hedef metin deseni hakkında detaylar için 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::update>

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

=item * L<App::sdif>

B<sdif> kullanarak B<-V> seçeneği ile yan yana çelişki işaretleyici formatını gösterin.

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

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

=back

=head2 ARTICLES

=over 2

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

Greple modülü, yalnızca gerekli kısımları DeepL API ile çevirmek ve değiştirmek için (Japonca)

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

XML style tag olarak bırakın.  
15 dilde belgeler oluşturma DeepL API modülü ile (Japonca)

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

Otomatik çeviri Docker ortamı DeepL API ile (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
