=encoding utf-8

=head1 NAME

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

=head1 SYNOPSIS

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

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

=head1 VERSION

Version 2.01

=head1 DESCRIPTION

B<Greple> B<xlate> modülü istenen metin bloklarını bulur ve bunları çevrilmiş metinle değiştirir. Birincil motor, L<llm|https://llm.datasette.io/> komutunu çağıran GPT-5.5 (F<llm/gpt5.pm>)'tir; DeepL (F<deepl.pm>) ve eski B<gpty> tabanlı motorlar da dahildir.

Çeviriler dosya başına önbelleğe alınır, bu nedenle bir komutu yeniden çalıştırmak değişmemiş metin için hiçbir maliyet getirmez. Bir belge düzenlendiğinde, yalnızca değiştirilen paragraflar API'ye yeniden gönderilir; bağlamdan haberdar bir motor ayrıca çevredeki çevirileri, değişikliğin etrafındaki ham kaynak metni ve düzenlenen paragrafın önceki sürümünü de alır, böylece yeni çeviri yerleşik ifadeleri korur (bkz. B<--xlate-context-window>). Hassas dizgeler iletimden önce gizlenebilir (bkz. L</ANONYMIZATION AND TEMPLATES>).

Perl'in pod tarzında yazılmış bir belgede normal metin bloklarını çevirmek istiyorsanız, C<--xlate-engine gpt5> ve C<perl> modülüyle birlikte B<greple> komutunu şu şekilde kullanın:

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

Bu komutta, C<^([\w\pP].*\n)+> desen dizgesi, alfa-sayısal ve noktalama harfiyle başlayan ardışık satırlar anlamına gelir. 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>

Ardından seçili alanı çevirmek için C<--xlate> seçeneğini ekleyin. Böylece, istenen bölümleri bulur ve bunları çeviri motorunun çıktısıyla değiştirir.

Varsayılan olarak, özgün ve çevrilmiş metin L<git(1)> ile uyumlu "çatışma işaretleyicisi" biçiminde yazdırılır. C<ifdef> biçimini kullanarak, L<unifdef(1)> komutuyla istenen kısmı kolayca alabilirsiniz. Çıktı biçimi 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şleyen C<(?s).+> desenini belirtmek için bir kısayoldur.

Çatışma işaretleyicisi biçimindeki veriler, L<sdif|App::sdif> komutu ve C<-V> seçeneğiyle yan yana stilde görüntülenebilir. Dize bazında karşılaştırmanı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

İşleme belirtilen birimler halinde yapılır, ancak birden fazla satırdan oluşan boş olmayan metin dizisi söz konusu olduğunda, 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şluk karakterleri kaldırılır.

=item *

Bir satır tam genişlikte bir noktalama karakteriyle bitiyorsa, sonraki satırla birleştirin.

=item *

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

=item *

Satırın sonu veya başı tam genişlikli bir karakter değilse, araya bir boşluk karakteri ekleyerek birleştirin.

=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 yine de geçerli olacaktır.

Bu normalleştirme işlemi yalnızca birinci (0’ıncı) ve çift numaralı desen için gerçekleştirilir. Dolayısıyla aşağıdaki gibi iki desen belirtildiğinde, ilk desene uyan metin normalleştirmeden sonra işlenecek, ikinci desene uyan metin için ise normalleştirme işlemi yapılmayacaktır.

    greple -Mxlate -E normalized -E not-normalized

Bu nedenle, birden çok satırı tek bir satırda birleştirerek işlenecek metin için ilk deseni; önceden biçimlendirilmiş metin için 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, çevrilmesini istemediğiniz metin bölümleri vardır. Örneğin, markdown dosyalarındaki etiketler. DeepL, böyle durumlarda hariç tutulacak metin kısmının XML etiketlerine dönüştürülmesini, çevrilmesini ve çeviri tamamlandıktan sonra geri yüklenmesini önerir. Bunu desteklemek için, çeviriden masklanacak kısımları belirtmek mümkündür.

    --xlate-setopt maskfile=MASKPATTERN

Bu, dosyanın her bir satırını C<MASKPATTERN> olarak yorumlayacak, onunla eşleşen dizeleri çevirecek ve işleme bittikten sonra geri alacaktır. C<#> ile başlayan satırlar yok sayılır.

Karmaşık desen, ters eğik çizgi ile kaçışlı satır sonları kullanılarak birden çok satıra yazılabilir.

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

Maskeleme, işaretlemenin çevrilmesini önler. Hassas dizeleri çeviri hizmetinin kendisinden gizlemek için bkz. L</ANONYMIZATION AND TEMPLATES>; ikisi birlikte kullanılabilir.

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

=head1 ANONYMIZATION AND TEMPLATES

Hassas dizgeler çeviri API'sine gönderilmeden önce gizlenebilir ve çıktıda geri yüklenebilir. Üç anonimleştirme kuralı kaynağı kullanılabilir: sözlük dosyası (B<--xlate-anonymize>), belgenin içindeki satır içi işaretler (B<--xlate-anonymize-mark>) ve YAML front matter değerleri (B<--xlate-frontmatter>). Her dizge iletim sırasında C<< <person id=1 /> >> gibi bir kategori etiketiyle değiştirilir. Gizleme hedefi yalnızca API iletimidir: yerel önbellek dosyaları geri yüklenmiş düz metni saklar. Tam olarak neyin iletileceğini incelemek için B<--xlate-dryrun> kullanın.

Form belgeleri (üç aylık raporlar ve benzerleri) için, aktörleri baştan tanımlayın ve gövdede onlara başvurun:

    ---
    報告者: 山田太郎
    発注会社: アクメ株式会社
    ---
    本件について {{ 報告者 }} が調査を行った。

Şablonu dil başına bir kez C<--xlate-template> ile (C<--xlate-frontmatter> değerler dosyada tutulduğunda) çevirin, ardından her durumu B<pandoc-embedz> bağımsız moduyla işleyin -- harici bir yapılandırmada C<global:> altındaki değerler çeviri API'sine hiçbir zaman ulaşmaz:

    greple -Mxlate --xlate --xlate-engine=gpt5 --xlate-to=EN-US \
           --xlate-template= --xlate-format=xtxt \
           --match-paragraph --all --need=0 \
           report-template.md > report-template.EN.md
    pandoc-embedz --standalone report-template.EN.md \
                  -c case-123.yaml -o report-123.EN.md < /dev/null

Satır içi işaretler için, bir makro tanım yapılandırması sağlamak aynı çevrilmiş şablonun gerçek adları veya sansürlenmiş bir sürümü işlemesini sağlar:

    # macros.yaml           # macros-redacted.yaml
    preamble: |             preamble: |
      {% macro person(name) %}{{ name }}{% endmacro %}
                              {% macro person(name) %}(関係者){% endmacro %}

Bir belge embedz blokları içerdiğinde bunları çeviriden hariç tutun:

    --exclude '^```embedz\n(?s:.*?)^```\n'

=head1 OPTIONS

=over 7

=item B<--xlate>

=item B<--xlate-color>

=item B<--xlate-fold>

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

Eşleşen her alan için çeviri işlemini çağırın.

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

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

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

B<--xlate-fold> seçeneğiyle, dönüştürülmüş metin belirtilen genişliğe göre katlanır. Varsayılan genişlik 70'tir ve B<--xlate-fold-width> seçeneğiyle ayarlanabilir. Gömülü işlem için dört sütun 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.

Şu anda aşağıdaki motorlar mevcuttur

=over 2

=item * B<gpt5>: gpt-5.5 (via the C<llm> command)

=item * B<deepl>: DeepL API (via the C<deepl> command)

=item * B<gpt3>: gpt-3.5-turbo (legacy, via the C<gpty> command)

=item * B<gpt4o>: gpt-4o-mini (legacy, via the C<gpty> command)

=back

Motor modülleri önce arka uç ad alanlarında aranır (C<llm>, ardından C<gpty>), sonra doğrudan C<App::Greple::xlate> altında aranır. Bu nedenle C<gpt5>, C<llm> komutunu çağıran C<App::Greple::xlate::llm::gpt5>'i yüklerken, C<gpt4o> C<App::Greple::xlate::gpty::gpt4o>'e geri döner. Belirli bir arka ucu zorlamak için C<--xlate-setopt backend=gpty> kullanın.

=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'a basmanız beklenir.

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

Hedef dili belirtin. LLM motorları, modelin anladığı herhangi bir dil adını veya kodunu kabul eder; çeviri istemine yerleştirilir. B<DeepL> motorunu kullanırken, kullanılabilir dilleri C<deepl languages> komutuyla alabilirsiniz.

=item B<--xlate-from> (Default: C<ORIGINAL>)

C<conflict>, C<colon> ve C<ifdef> çıktı biçimlerinde orijinal metin için kullanılan etiket. B<DeepL> motoruyla, varsayılan olmayan bir değer de kaynak dil olarak iletilir.

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

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

C<xtxt> dışındaki aşağıdaki biçimler, çevrilecek kısmın satırların bir koleksiyonu olduğunu varsayar. Aslında bir satırın yalnızca bir kısmı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)> çatışma belirteci biçiminde yazdırılır.

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

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

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

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

Orijinal ve çevrilmiş metin, markdown'un özel konteyner stilinde çıktı alınır.

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

Yukarıdaki metin HTML'de aşağıdaki gibi ç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 iki nokta 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

Yalnızca Japonca metni B<unifdef> komutuyla alabilirsiniz:

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Özgün ve dönüştürülmüş metin, araya tek bir boş satır konularak yazdırılır. C<space+> için, dönüştürülmüş metinden sonra ayrıca bir satır sonu da çıktılanır.

=item B<xtxt>

Biçim C<xtxt> (çevirilmiş metin) ya da bilinmeyense, yalnızca çevrilmiş metin yazdırılır.

=back

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

Bir seferde API’ye gönderilecek metnin azami uzunluğunu belirtin. Öntanımlı değer 0, motorun kendi sınırı anlamına gelir: ücretsiz DeepL hesap hizmeti için bu, API için 128K (B<--xlate>) ve pano arayüzü için 5000’dir (B<--xlate-labor>). Pro hizmeti kullanıyorsanız bu değerleri değiştirebilirsiniz.

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

Bir seferde API’ye gönderilecek metnin azami satır sayısını belirtin.

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

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

Çeviri motoruna gönderilecek özel bir istem belirtin. Bu seçenek LLM motorları (C<gpt3>, C<gpt4o>, C<gpt5>) için kullanılabilir, ancak DeepL için kullanılamaz. AI modeline belirli talimatlar sağlayarak çeviri davranışını özelleştirebilirsiniz. İstem C<%s> içeriyorsa, hedef dil adıyla değiştirilecektir.

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

Çeviri motoruna gönderilecek ek bağlam bilgisi belirtin. Birden çok bağlam dizesi sağlamak için bu seçenek birden çok kez kullanılabilir. Bağlam bilgisi, çeviri motorunun arka planı anlamasına ve daha doğru çeviriler üretmesine yardımcı olur.

=item B<--xlate-context-window>=I<n>

(Context-aware engines only, e.g. C<gpt5> on the llm backend)
Değişen bloklar yeniden çevrilirken referans bağlam olarak geçirilen çevredeki çevrilmiş blok sayısı (varsayılan 2). Bağlam ayrıca değişen bölgenin etrafındaki ham kaynak metni (başlıklar, liste yapısı, açıklamalar) ve kullanılabilir olduğunda, değişmemiş ifadelerin korunması için önbellekten kurtarılan değişen metnin önceki sürümünü içerir. Bağlama duyarlı çeviriyi tamamen devre dışı bırakmak için 0 olarak ayarlayın. Her değişen bölgenin kendi API çağrısında çevrildiğini ve bağlamın sistem istemine yaklaşık 8000 karaktere kadar ekleyebileceğini unutmayın; bu nedenle bağlama duyarlı çeviri, tutarlılık için bir miktar ek maliyeti göze alır.

=item B<--xlate-cache-seed>=I<file>

Yeni bir belgenin önbelleğini başka bir belgenin önbellek dosyasından başlatın. Periyodik raporlar için kullanışlıdır: yeni sayının önbelleğini önceki sayınınkiyle tohumlayın; böylece değişmemiş paragraflar yeniden çevrilmez ve düzenlenmiş paragraflar önceki sayının ifade biçimini korur. Tohum yalnızca hedef önbellek boş olduğunda kullanılır; aksi takdirde bir uyarıyla yok sayılır. Varsayılan C<--xlate-cache=auto> ile, bir tohum belirtmek yeni belgenin önbellek dosyasının oluşturulacağını da ima eder.

=item B<--xlate-anonymize>=I<file>

Hassas dizeleri çeviri API'sine gönderilmeden önce anonimleştirin ve çıktıda geri yükleyin. Sözlük dosyası öğe başına bir giriş verir: JSON biçiminde (kanonik, makine tarafından üretilebilir)

    [ { "category": "person",  "text": "山田太郎" },
      { "category": "company", "regex": "アクメ(株式会社)?" } ]

veya basit bir satır biçiminde (C<category pattern>, regex için C</.../>). Her öğe C<< <person id=1 /> >> gibi bir kategori etiketiyle değiştirilir; aynı dize her zaman aynı etiketi alır, böylece model kimin kim olduğunu takip edebilir. Bilinmeyen JSON alanları yok sayılır; bu nedenle üreteçler (örn. varlıkları çıkaran yerel bir LLM) kendi ek açıklamalarını ekleyebilir. C<lit> kategorisi ayrılmıştır. Yerel önbellek dosyaları hâlâ geri yüklenmiş düz metni saklar: gizleme hedefi yalnızca API iletimidir.

Bir sözlük harici bir araç tarafından üretilebilir -- örneğin hassas varlıkları çıkaran yerel bir model:

    llm -m <local-model> \
        -s 'Extract sensitive entities as a JSON array of objects
            with "category" and "text" fields.' \
        < report.md > report.anon.json
    greple -Mxlate --xlate-anonymize=report.anon.json ...

Dosyadaki UTF-8 BOM tolere edilir. Front matter satır biçimindeki değerler, yalnızca kendi satırlarında sonda bir yorum taşıyabilir; değerden sonra değil.

=item B<--xlate-anonymize-mark>[=I<regex>]

Anonimleştirme girişlerini belgenin içindeki satır içi işaretlerden toplayın. İlk oluşumu C<{{ person("山田太郎") }}> gibi işaretleyin; dizenin belge genelindeki her oluşumu anonimleştirilir. İşaretin kendisi kaynakta ve çeviride kalır; böylece bir belge Jinja2 tarzı bir makro işlemcisiyle de işlenebilir (C<person> makrosunu adı yazdıracak veya redakte edecek şekilde tanımlayın). Özel bir I<regex>, C<< (?<category>...) >> ve C<< (?<text>...) >> adlı yakalamalarını içermelidir.

Bunun gibi isteğe bağlı değer alan bir seçenekle, ardından gelen bir dosya argümanının değer olarak alınacağını unutmayın: varsayılan gösterimi kullanırken C<--xlate-anonymize-mark=> yazın (sonunda bir C<=> ile).

Alternatif gösterimler yapılandırılabilir; örneğin C<@@person:NAME@@> tarzı işaretler için C<< --xlate-anonymize-mark='@@(?<category>[a-z][a-z0-9_]*):(?<text>[^\n]+?)@@' >> veya işlenmiş Markdown'da görünmez kalan bir HTML yorumu biçimi. İşaret kuralları belge başına toplanır: bir girdi dosyasında işaretlenen bir dize, aynı çalıştırmadaki başka bir dosyada gizlenmez (dosyalar arasında biriken front matter değerlerinin aksine).

=item B<--xlate-template>[=I<regex>]

Şablon ifadelerini (varsayılan: Jinja2 C<{{ ... }}>, C<{% ... %}>, C<{# ... #}>) opak yer tutucular olarak ele alın: modele bunları değiştirmeden kopyalamasını söyleyin ve yanıtın her blok için tam olarak aynı ifadeleri, her birini aynı sayıda içerdiğini doğrulayın. Sıraları değişebilir, çünkü çeviri onları hedef dilin sözcük sırasını izlemek için meşru şekilde yeniden sıralar. Bozuk bir ifade çalıştırmayı iptal eder; önbellek denetim noktasına alınır ve dondurulur, böylece ödenmiş hiçbir şey kaybolmaz.

Bunun gibi isteğe bağlı değer alan bir seçenekle, izleyen bir dosya bağımsız değişkeninin değer olarak alınacağını unutmayın: varsayılan gösterimi kullanırken C<--xlate-template=> yazın (sonunda bir C<=> ile).

=item B<--xlate-frontmatter>

Baştaki C<---> ... C<---> bloğunu YAML front matter olarak ele alın: onu çeviriden ve phase-2 bağlam dilimlerinden hariç tutun ve düz C<key: value> değerlerini bir güvenlik ağı olarak anonimleştirme kurallarına (kategori C<var>) ekleyin. Birden çok girdi dosyasıyla toplanan değerler birikir (gizleme tarafında hata yaparak).

Kapanış C<---> sonrasında her zaman boş bir satır bırakın. Paragraf tarzı bir eşleşme kalıbıyla, doğrudan gövde metnine bağlanan front matter, dışlamanın bastıramayacağı, iki tarafa yayılan tek bir blok oluşturur (bu durumda bir uyarı yazdırılır); değerler yine de anonimleştirilir, ancak front matter'ın kendisi çeviri için gönderilir.

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

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

=item B<--xlate-dryrun>

Çeviri API'sini çağırmayın; bunun yerine, ilerleme göstergesi aracılığıyla her payload'u tam olarak iletileceği şekilde (anonimleştirme ve maskelemeden sonra) gösterin. Makineden neyin çıktığını kontrol etmek ve bir çalıştırmanın maliyetini tahmin etmek için kullanışlıdır.

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

Çeviri sonucunu gerçek zamanlı olarak STDERR çıktısında görün. C<From> payload'u, anonimleştirme ve maskelemeden sonra iletildiği gibi gösterilir.

=item B<--xlate-stripe>

Eşleşen kısmı zebra şeritleme tarzında göstermek için L<App::Greple::stripe> modülünü kullanın. Bu, eşleşen bölümler art arda bağlandığında kullanışlıdır.

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<--xlate-mask>

Maskeleme işlevini uygulayın ve dönüştürülmüş metni geri yükleme olmadan olduğu gibi görüntüleyin.

=item B<--match-all>

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

=item B<--lineify-cm>

=item B<--lineify-colon>

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

Mevcut uygulamada, bir satırın birden fazla bölümü çevrilirse bunlar bağımsız satırlar olarak çıktılanır.

=back

=head1 CACHE OPTIONS

B<xlate> modülü, her dosya için çevirinin önbelleğe alınmış metnini depolayabilir ve sunucuya sorma yükünü ortadan kaldırmak için yürütmeden önce bunu okuyabilir. Öntanımlı önbellek stratejisi C<auto> ile, hedef dosya için önbellek dosyası mevcut olduğunda yalnızca önbellek verileri tutulur.

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

=over 7

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

=over 4

=item C<auto> (Default)

Önbellek dosyası mevcutsa onu koruyun.

=item C<create>

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

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

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

=item C<clear>

Önce önbellek verilerini temizleyin.

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

Var olsa bile asla önbellek dosyasını kullanmayın.

=item C<accumulate>

Varsayılan davranışta, kullanılmayan veriler önbellek dosyasından kaldırılır. Bunları kaldırmak istemiyor 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

Dağıtıma dahil edilen C<xlate> komutunu kullanarak bu modülü komut satırından kolayca kullanabilirsiniz. Kullanım için C<xlate> man sayfasına bakı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.

C<xlate> komutu Docker ortamıyla 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.

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

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.

C<xlate -C> gibi çalıştırmak, geçerli çalışma git deposu bağlanmış bir kabuğu başlatacaktır.

Ayrıntılar için L</SEE ALSO> bölümündeki Japonca makaleyi okuyun.

=head1 EMACS

Emacs düzenleyicisinden C<xlate> komutunu kullanmak için depoda bulunan F<xlate.el> dosyasını yükleyin. C<xlate-region> işlevi belirtilen bölgeyi çevirir. Varsayılan dil C<EN-US>’dür ve önek argümanıyla çağırarak dili 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

Eski B<gpty> motorları tarafından kullanılan OpenAI kimlik doğrulama anahtarı. C<llm> tabanlı B<gpt5> motoru da bu değişkeni okur, ancak C<llm keys set openai> ile saklanan anahtarlar da çalışır.

=item GREPLE_XLATE_CACHE

Varsayılan önbellek stratejisini ayarlayın (bkz. L</CACHE OPTIONS>).

=back

=head1 INSTALL

=head2 CPANMINUS

    $ cpanm App::Greple::xlate

=head2 TOOLS

Kullandığınız motor için komut satırı aracını kurun: B<gpt5> motoru için C<llm>, DeepL için C<deepl>, eski GPT motorları için C<gpty>.

L<https://llm.datasette.io/>

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

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

=head1 SEE ALSO

=head2 MODULES

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

L<App::dozo> - xlate tarafından konteyner işlemleri için kullanılan genel amaçlı Docker çalıştırıcısı

=head2 RELATED MODULES

=over 2

=item * L<App::Greple>

Hedef metin deseni hakkında 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::update>

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

=item * L<App::sdif>

B<sdif> kullanarak, B<-V> seçeneğiyle yan yana çatışma işaretçisi biçimini gösterin.

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

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

=back

=head2 RESOURCES

=over 2

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

Docker konteyner imajı.

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

C<getoptlong.sh> kütüphanesi, C<xlate> betiğinde ve L<App::dozo> içinde seçenek ayrıştırma için kullanılır.

=item * L<https://llm.datasette.io/>

LLM modellerine erişmek için B<gpt5> motoru tarafından kullanılan C<llm> komutu.

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

=back

=head2 ARTICLES

=over 2

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

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

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

DeepL API modülüyle 15 dilde belgeler üretme (Japonca)

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

DeepL API ile otomatik çeviri Docker ortamı (Japonca)

=back

=head1 AUTHOR

Kazumasa Utashiro

=head1 LICENSE

Copyright © 2023-2026 Kazumasa Utashiro.

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

=cut
