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スタイルで書かれたドキュメント内の通常のテキストブロックを翻訳したい場合は、次のようにgrepleコマンドをxlate::deeplおよびperlモジュールと共に使用します:

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

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

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

  • もし行が全角句読点で終わる場合は、次の行と連結します。

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

  • 行の末尾または先頭が全角文字でない場合、スペース文字を挿入して連結します。

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

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

greple -Mxlate -E normalized -E not-normalized

したがって、複数行を一つの行にまとめて処理するテキストには最初のパターンを使用し、事前にフォーマットされたテキストには2番目のパターンを使用します。最初のパターンに一致するテキストがない場合は、(?!)のような何にも一致しないパターンを使用します。

MASKING

時折、翻訳したくないテキストの部分があります。例えば、マークダウンファイルのタグなどです。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 は、--color=never オプションを使用して --xlate-color オプションを呼び出します。

--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 以外の以下の形式は、翻訳される部分が行のコレクションであることを前提としています。実際には、行の一部だけを翻訳することも可能であり、xtxt 以外の形式を指定すると意味のある結果は得られません。

conflict, cm

元のテキストと変換されたテキストは、git(1) の競合マーカー形式で印刷されます。

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

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

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

オリジナルと変換されたテキストは、マークダウンのdivブロックスタイル表記で印刷されます。

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

これは次のような意味です:

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

コロンの数はデフォルトで7つです。:::::のようにコロンの並びを指定した場合、それが7つのコロンの代わりに使用されます。

ifdef

元のテキストと変換されたテキストは、cpp(1) #ifdef 形式で印刷されます。

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

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

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

原文と変換されたテキストは、単一の空白行で区切られて印刷されます。space+の場合、変換されたテキストの後にも改行が出力されます。

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オプションを使用してください。

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

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

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

詳細については"SEE ALSO"セクションの日本語の記事をお読みください。

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

リポジトリに含まれるxlate.elファイルをロードして、Emacsエディタからxlateコマンドを使用します。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.