NAME

App::Greple::xlate - grepleの翻訳サポートモジュール

SYNOPSIS

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

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

VERSION

Version 0.40

DESCRIPTION

Greple xlateモジュールは、望ましいテキストブロックを見つけて翻訳されたテキストに置き換える機能を提供します。現在、DeepL(deepl.pm)とChatGPT(gpt3.pm)モジュールがバックエンドエンジンとして実装されています。gpt-4とgpt-4oの実験的なサポートも含まれています。

Perlのpodスタイルで書かれたドキュメント内の通常のテキストブロックを翻訳したい場合は、次のようにxlate::deeplperlモジュールを使用したgrepleコマンドを使用してください。

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

このコマンドでは、パターン文字列^([\w\pP].*\n)+は、アルファベット、数字、句読点で始まる連続した行を意味します。このコマンドは、翻訳する領域をハイライト表示します。オプション--allは、全文を表示するために使用されます。

次に、選択したエリアを翻訳するために--xlateオプションを追加します。そうすると、必要なセクションを見つけて、それらをdeeplコマンドの出力で置き換えます。

デフォルトでは、元のテキストと翻訳されたテキストはgit(1)と互換性のある「競合マーカー」形式で出力されます。ifdef形式を使用すると、unifdef(1)コマンドで必要な部分を簡単に取得できます。出力形式は--xlate-formatオプションで指定できます。

テキスト全体を翻訳したい場合は、--match-allオプションを使用してください。これは、テキスト全体にマッチするパターン(?s).+を指定するためのショートカットです。

コンフリクトマーカーフォーマットデータは、sdifコマンドを-Vオプションとともに使用することで、サイドバイサイドスタイルで表示できます。文字列単位で比較する意味がないため、--no-cdifオプションが推奨されています。テキストに色を付ける必要がない場合は、--no-textcolor(または--no-tc)を指定してください。

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

NORMALIZATION

処理は指定された単位で行われますが、複数行の非空のテキストのシーケンスの場合、それらは一緒に1行に変換されます。この操作は次のように行われます:

  • 各行の先頭と末尾の空白を削除します。

  • もし行が全角の句読点で終わる場合は、次の行と結合してください。

  • 行が全角文字で終わり、次の行が全角文字で始まる場合、行を連結します。

  • 行の終わりまたは始まりが全角文字でない場合、スペース文字を挿入してそれらを連結します。

キャッシュデータは正規化されたテキストに基づいて管理されるため、正規化結果に影響を与えない変更が行われても、キャッシュされた翻訳データは引き続き有効です。

この正規化プロセスは、最初の(0番目)および偶数番目のパターンに対してのみ実行されます。したがって、2つのパターンが次のように指定された場合、最初のパターンに一致するテキストは正規化後に処理され、2番目のパターンに一致するテキストには正規化プロセスが実行されません。

greple -Mxlate -E normalized -E not-normalized

したがって、複数の行を1行に結合して処理するテキストには最初のパターンを使用し、整形済みのテキストには2番目のパターンを使用します。最初のパターンに一致するテキストがない場合は、(?!)のように何も一致しないパターンを使用してください。

MASKING

時々、翻訳したくないテキストの部分があります。たとえば、markdownファイル内のタグなどです。DeepLは、そのような場合、翻訳を除外するテキスト部分をXMLタグに変換し、翻訳が完了した後に元に戻すことを提案しています。これをサポートするために、翻訳からマスクする部分を指定することができます。

--xlate-setopt maskfile=MASKPATTERN

これにより、ファイル`MASKPATTERN`の各行を正規表現として解釈し、それに一致する文字列を翻訳し、処理後に元に戻します。行頭が#で始まる行は無視されます。

複雑なパターンは、バックスラッシュで改行をエスケープして複数行に書くことができます。

テキストがマスキングによって変換される方法は、--xlate-maskオプションで確認できます。

このインターフェースは実験的であり、将来変更される可能性があります。

OPTIONS

--xlate
--xlate-color
--xlate-fold
--xlate-fold-width=n (Default: 70)

一致したエリアごとに翻訳プロセスを呼び出します。

このオプションを指定しない場合、grepleは通常の検索コマンドとして動作します。したがって、実際の作業を呼び出す前に、ファイルのどの部分が翻訳の対象になるかを確認できます。

コマンドの結果は標準出力に表示されるため、必要に応じてファイルにリダイレクトするか、App::Greple::updateモジュールを使用することを検討してください。

オプション--xlateは、--xlate-colorオプションを--color=neverオプションとともに呼び出します。

--xlate-foldオプションを使用すると、変換されたテキストが指定された幅で折り返されます。デフォルトの幅は70で、--xlate-fold-widthオプションで設定できます。4つの列はランイン操作に予約されているため、各行には最大で74文字が含まれることができます。

--xlate-engine=engine

使用する翻訳エンジンを指定します。-Mxlate::deeplのようにエンジンモジュールを直接指定する場合は、このオプションを使用する必要はありません。

現時点では、以下のエンジンが利用可能です。

  • deepl: DeepL API

  • gpt3: gpt-3.5-turbo

  • gpt4: gpt-4-turbo

  • gpt4o: gpt-4o-mini

    gpt-4oのインターフェースは不安定であり、現時点では正常に動作することが保証されていません。

--xlate-labor
--xlabor

翻訳エンジンを呼び出す代わりに、あなたが作業することが期待されています。翻訳するためのテキストを準備した後、それらはクリップボードにコピーされます。フォームに貼り付けて結果をクリップボードにコピーし、リターンキーを押すことが期待されています。

--xlate-to (Default: EN-US)

対象言語を指定します。DeepLエンジンを使用する場合は、deepl languagesコマンドで使用可能な言語を取得できます。

--xlate-format=format (Default: conflict)

元のテキストと翻訳されたテキストの出力形式を指定します。

xtxt以外の以下のフォーマットは、翻訳する部分が複数行のコレクションであると想定しています。実際には、1行の一部のみを翻訳することも可能であり、xtxt以外のフォーマットを指定しても意味のある結果は得られません。

conflict, cm

オリジナルと変換されたテキストは、git(1)の競合マーカーフォーマットで印刷されます。

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

次のsed(1)コマンドで元のファイルを復元できます。

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

```markdown

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

This means:

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

Number of colon is 7 by default. If you specify colon sequence like `:::::::`, it is used instead of 7 colons.

ifdef

オリジナルと変換されたテキストは、cpp(1)#ifdefフォーマットで印刷されます。

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

unifdefコマンドで日本語のテキストのみを取得できます:

unifdef -UORIGINAL -DJA foo.ja.pm
space
space+

Hello, how can I help you today?

xtxt

形式がxtxt(翻訳されたテキスト)または不明な場合、翻訳されたテキストのみが表示されます。

--xlate-maxlen=chars (Default: 0)

以下のテキストを日本語に翻訳してください。一度にAPIに送信するテキストの最大長を指定してください。デフォルト値は、無料のDeepLアカウントサービスに設定されています:API(--xlate)には128K、クリップボードインターフェース(--xlate-labor)には5000です。Proサービスを使用している場合は、これらの値を変更できるかもしれません。

--xlate-maxline=n (Default: 0)

一度にAPIに送信するテキストの最大行数を指定します。

1行ずつ翻訳したい場合は、この値を1に設定してください。このオプションは--xlate-maxlenオプションよりも優先されます。

--[no-]xlate-progress (Default: True)

STDERR出力でリアルタイムに翻訳結果を確認します。

--xlate-stripe

マッチした部分をゼブラストライプのように表示するために、App::Greple::stripeモジュールを使用します。マッチした部分が連続している場合に便利です。

カラーパレットは、端末の背景色に応じて切り替わります。明示的に指定したい場合は、--xlate-stripe-lightまたは--xlate-stripe-darkを使用できます。

--xlate-mask

マスキング機能を実行し、変換されたテキストを復元せずに表示します。

--match-all

ファイルの全体のテキストを対象エリアとして設定します。

CACHE OPTIONS

xlateモジュールは、各ファイルの翻訳のキャッシュテキストを保存し、実行前にそれを読み込んでサーバーへの問い合わせのオーバーヘッドを排除することができます。デフォルトのキャッシュ戦略autoでは、対象ファイルのキャッシュファイルが存在する場合にのみキャッシュデータを保持します。

--xlate-cache=clearを使用してキャッシュ管理を開始するか、既存のすべてのキャッシュデータをクリアします。このオプションを使用して実行すると、新しいキャッシュファイルが存在しない場合は作成され、その後自動的に維持されます。

--xlate-cache=strategy
auto (Default)

キャッシュファイルが存在する場合はメンテナンスします。

create

空のキャッシュファイルを作成して終了します。

always, yes, 1

対象が通常のファイルである限り、常にキャッシュをメンテナンスします。

clear

まずキャッシュデータをクリアします。

never, no, 0

キャッシュファイルを使用しないでください。

accumulate

デフォルトの動作では、キャッシュファイルから未使用のデータが削除されます。それらを削除せずにファイルに保持したい場合は、accumulateを使用してください。

--xlate-update

このオプションは、必要ない場合でもキャッシュファイルを更新するように強制します。

COMMAND LINE INTERFACE

配布物に含まれるxlateコマンドを使用することで、このモジュールを簡単にコマンドラインから利用することができます。使用方法については、xlateのヘルプ情報を参照してください。

xlateコマンドはDocker環境と連携して動作するため、手元に何もインストールされていなくても、Dockerが利用可能であれば使用することができます。-Dまたは-Cオプションを使用してください。

また、さまざまなドキュメントスタイルのためのメイクファイルが提供されているため、特別な指定なしに他の言語への翻訳も可能です。-Mオプションを使用してください。

Dockerとメイクオプションを組み合わせることもでき、Docker環境でメイクを実行することができます。

xlate -GCのように実行すると、現在の作業ディレクトリがマウントされたシェルが起動します。

詳細については、"関連記事"セクションの日本語の記事を読んでください。

xlate [ options ] -t lang file [ greple options ]
    -h   help
    -v   show version
    -d   debug
    -n   dry-run
    -a   use API
    -c   just check translation area
    -r   refresh cache
    -s   silent mode
    -e # translation engine (default "deepl")
    -p # pattern to determine translation area
    -w # wrap line by # width
    -o # output format (default "xtxt", or "cm", "ifdef")
    -f # from lang (ignored)
    -t # to lang (required, no default)
    -m # max length per API call
    -l # show library files (XLATE.mk, xlate.el)
    --   terminate option parsing
Make options
    -M   run make
    -n   dry-run
Docker options
    -G   mount git top-level directory
    -B   run in non-interactive (batch) mode
    -R   mount read-only
    -E * specify environment variable to be inherited
    -I * specify altanative docker image (default: tecolicom/xlate:version)
    -D * run xlate on the container with the rest parameters
    -C * run following command on the container, or run shell

Control Files:
    *.LANG    translation languates
    *.FORMAT  translation foramt (xtxt, cm, ifdef)
    *.ENGINE  translation engine (deepl or gpt3)

EMACS

Emacsエディタからxlateコマンドを使用するには、リポジトリに含まれるxlate.elファイルをロードしてください。xlate-region関数は指定された領域を翻訳します。デフォルトの言語はEN-USであり、プレフィックス引数を使用して言語を指定することができます。

ENVIRONMENT

DEEPL_AUTH_KEY

DeepLサービスの認証キーを設定してください。

OPENAI_API_KEY

OpenAIの認証キーです。

INSTALL

CPANMINUS

$ cpanm App::Greple::xlate

TOOLS

DeepLとChatGPTのコマンドラインツールをインストールする必要があります。

https://github.com/DeepLcom/deepl-python

https://github.com/tecolicom/App-gpty

SEE ALSO

App::Greple::xlate

App::Greple::xlate::deepl

App::Greple::xlate::gpt3

ARTICLES

AUTHOR

Kazumasa Utashiro

LICENSE

Copyright © 2023-2024 Kazumasa Utashiro.

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