=encoding utf-8 =head1 NAME App::Greple::xlate - модуль поддержки перевода Ð´Ð»Ñ greple =head1 SYNOPSIS greple -Mxlate -e ENGINE --xlate pattern target-file greple -Mxlate::deepl --xlate pattern target-file =head1 VERSION Version 0.9909 =head1 DESCRIPTION Модуль B<Greple> B<xlate> находит нужные текÑтовые блоки и заменÑет их переведенным текÑтом. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² качеÑтве внутреннего движка реализованы модули DeepL (F<deepl.pm>) и ChatGPT (F<gpt3.pm>). Также включена ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° gpt-4 и gpt-4o. ЕÑли вы хотите перевеÑти обычные текÑтовые блоки в документе, напиÑанном в Ñтиле Perl's pod, иÑпользуйте команду B<greple> Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¼ C<xlate::deepl> и C<perl> Ñледующим образом: greple -Mxlate::deepl -Mperl --pod --re '^([\w\pP].*\n)+' --all foo.pm Ð’ Ñтой команде ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð°Ñ Ñтрока C<^([\w\pP].*\n)+> означает поÑледовательные Ñтроки, начинающиеÑÑ Ñ Ð±ÑƒÐºÐ² алфавитно-цифрового Ñ€Ñда и знаков препинаниÑ. Ðта команда показывает облаÑть, которую нужно перевеÑти, выделенной. ÐžÐ¿Ñ†Ð¸Ñ B<--all> иÑпользуетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° вÑего текÑта. =for html <p> <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/select-area.png"> </p> Затем добавьте опцию C<--xlate> Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° выделенной облаÑти. ПоÑле Ñтого программа найдет нужные учаÑтки и заменит их выводом команды B<--deepl>. По умолчанию оригинальный и транÑлированный текÑÑ‚ печатаетÑÑ Ð² формате "маркер конфликта", ÑовмеÑтимом Ñ L<git(1)>. ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ C<ifdef>, можно легко получить нужную чаÑть командой L<unifdef(1)>. Выходной формат может быть задан опцией B<--xlate-format>. =for html <p> <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/format-conflict.png"> </p> ЕÑли требуетÑÑ Ð¿ÐµÑ€ÐµÐ²ÐµÑти веÑÑŒ текÑÑ‚, иÑпользуйте опцию B<--match-all>. Ðто Ñокращение Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° C<(?s).+>, который ÑоответÑтвует вÑему текÑту. Данные формата маркеров конфликтов можно проÑматривать в Ñтиле "бок о бок" Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды C<sdif> Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ C<-V>. ПоÑкольку Ñравнивать по каждой Ñтроке не имеет ÑмыÑла, рекомендуетÑÑ Ð¸Ñпользовать опцию C<--no-cdif>. ЕÑли вам не нужно раÑкрашивать текÑÑ‚, укажите C<--no-textcolor> (или C<--no-tc>). 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 Обработка выполнÑетÑÑ Ð² заданных единицах, но в Ñлучае поÑледовательноÑти из неÑкольких Ñтрок непуÑтого текÑта они преобразуютÑÑ Ð² одну Ñтроку. Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ñледующим образом: =over 2 =item * Удалите пробелы в начале и конце каждой Ñтроки. =item * ЕÑли Ñтрока заканчиваетÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñ€Ð°Ð·Ð¼ÐµÑ€Ð½Ñ‹Ð¼ Ñимволом препинаниÑ, объедините ее Ñо Ñледующей Ñтрокой. =item * ЕÑли Ñтрока заканчиваетÑÑ Ñимволом полной ширины и ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтрока начинаетÑÑ Ñимволом полной ширины, объедините Ñтроки. =item * ЕÑли конец или начало Ñтроки не ÑвлÑÑŽÑ‚ÑÑ Ñимволами полной ширины, объедините их, вÑтавив Ñимвол пробела. =back КÑш-данные управлÑÑŽÑ‚ÑÑ Ð½Ð° оÑнове нормализованного текÑта, поÑтому даже еÑли будут внеÑены изменениÑ, не влиÑющие на результаты нормализации, кÑшированные данные перевода будут по-прежнему Ñффективны. Ðтот процеÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ выполнÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ (0-го) и четного шаблона. Таким образом, еÑли два шаблона указаны Ñледующим образом, то текÑÑ‚, ÑоответÑтвующий первому шаблону, будет обработан поÑле нормализации, а Ð´Ð»Ñ Ñ‚ÐµÐºÑта, ÑоответÑтвующего второму шаблону, процеÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ не будет выполнÑтьÑÑ. greple -Mxlate -E normalized -E not-normalized ПоÑтому иÑпользуйте первый шаблон Ð´Ð»Ñ Ñ‚ÐµÐºÑта, который должен быть обработан путем Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких Ñтрок в одну, а второй - Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ отформатированного текÑта. ЕÑли в первом шаблоне нет текÑта Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸, иÑпользуйте шаблон, который ничему не ÑоответÑтвует, например C<(?!)>. =head1 MASKING Иногда вÑтречаютÑÑ Ñ‡Ð°Ñти текÑта, которые не нужно переводить. Ðапример, теги в файлах формата markdown. Ðа Ñайте DeepL предлагаетÑÑ Ð² таких ÑлучаÑÑ… преобразовывать иÑключаемые чаÑти текÑта в XML-теги, переводить их, а затем воÑÑтанавливать поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð°. Чтобы поддержать Ñту идею, можно указать чаÑти, которые нужно замаÑкировать от перевода. --xlate-setopt maskfile=MASKPATTERN При Ñтом ÐºÐ°Ð¶Ð´Ð°Ñ Ñтрока файла `MASKPATTERN` будет интерпретироватьÑÑ ÐºÐ°Ðº регулÑрное выражение, переводить Ñтроки, ÑоответÑтвующие ему, и возвращатьÑÑ Ð¿Ð¾Ñле обработки. Строки, начинающиеÑÑ Ñ C<#>, игнорируютÑÑ. Сложный шаблон может быть запиÑан в неÑкольких Ñтроках Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ñлешем, Ñопровождаемым новой Ñтрокой. Как текÑÑ‚ преобразуетÑÑ Ð¿Ñ€Ð¸ маÑкировании, можно увидеть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ опции B<--xlate-mask>. Ðтот Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑвлÑетÑÑ ÑкÑпериментальным и может быть изменен в будущем. =head1 OPTIONS =over 7 =item B<--xlate> =item B<--xlate-color> =item B<--xlate-fold> =item B<--xlate-fold-width>=I<n> (Default: 70) ЗапуÑтите процеÑÑ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñовпавшей облаÑти. Без Ñтой опции B<greple> ведет ÑÐµÐ±Ñ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° поиÑка. Таким образом, вы можете проверить, ÐºÐ°ÐºÐ°Ñ Ñ‡Ð°Ñть файла будет подвергнута переводу, прежде чем вызывать фактичеÑкую работу. Результат команды выводитÑÑ Ð² Ñтандартный аут, поÑтому при необходимоÑти перенаправьте его в файл или воÑпользуйтеÑÑŒ модулем L<App::Greple::update>. ÐžÐ¿Ñ†Ð¸Ñ B<--xlate> вызывает опцию B<--xlate-color> Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ B<--color=never>. С опцией B<--xlate-fold> преобразованный текÑÑ‚ ÑворачиваетÑÑ Ð½Ð° указанную ширину. Ширина по умолчанию равна 70 и может быть задана опцией B<--xlate-fold-width>. Ð”Ð»Ñ Ð¾Ð±ÐºÐ°Ñ‚ÐºÐ¸ зарезервировано четыре колонки, поÑтому в каждой Ñтроке может ÑодержатьÑÑ Ð½Ðµ более 74 Ñимволов. =item B<--xlate-engine>=I<engine> ОпределÑет иÑпользуемый движок перевода. ЕÑли вы указываете модуль движка напрÑмую, например C<-Mxlate::deepl>, то Ñтот параметр иÑпользовать не нужно. Ðа данный момент доÑтупны Ñледующие движки =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> неÑтабилен и в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ может быть гарантированно корректной работы. =back =item B<--xlate-labor> =item B<--xlabor> ВмеÑто того чтобы вызывать механизм перевода, вы должны работать на него. ПоÑле подготовки текÑта Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° он копируетÑÑ Ð² буфер обмена. Ð’Ñ‹ должны вÑтавить их в форму, Ñкопировать результат в буфер обмена и нажать кнопку return. =item B<--xlate-to> (Default: C<EN-US>) Укажите целевой Ñзык. Ð’Ñ‹ можете получить доÑтупные Ñзыки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды C<deepl languages> при иÑпользовании движка B<DeepL>. =item B<--xlate-format>=I<format> (Default: C<conflict>) Укажите формат вывода оригинального и переведенного текÑта. Следующие форматы, отличные от C<xtxt>, предполагают, что Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ñ‡Ð°Ñть предÑтавлÑет Ñобой набор Ñтрок. Ðа Ñамом деле можно перевеÑти только чаÑть Ñтроки, и указание формата, отличного от C<xtxt>, не даÑÑ‚ значимых результатов. =over 4 =item B<conflict>, B<cm> Оригинальный и преобразованный текÑÑ‚ печатаютÑÑ Ð² формате L<git(1)> маркеров конфликтов. <<<<<<< ORIGINAL original text ======= translated Japanese text >>>>>>> JA Ð’Ñ‹ можете воÑÑтановить иÑходный файл Ñледующей командой L<sed(1)>. sed -e '/^<<<<<<< /d' -e '/^=======$/,/^>>>>>>> /d' =item B<colon>, I<:::::::> Оригинальный и переведенный текÑÑ‚ выводÑÑ‚ÑÑ Ð² пользовательÑком Ñтиле контейнера markdown. ::::::: ORIGINAL original text ::::::: ::::::: JA translated Japanese text ::::::: Приведенный выше текÑÑ‚ будет переведен в HTML Ñледующим образом. <div class="ORIGINAL"> original text </div> <div class="JA"> translated Japanese text </div> КоличеÑтво двоеточий по умолчанию равно 7. ЕÑли вы укажете поÑледовательноÑть двоеточий, например C<:::::>, то она будет иÑпользоватьÑÑ Ð²Ð¼ÐµÑто 7 двоеточий. =item B<ifdef> Оригинальный и преобразованный текÑÑ‚ печатаютÑÑ Ð² формате L<cpp(1)> C<#ifdef>. #ifdef ORIGINAL original text #endif #ifdef JA translated Japanese text #endif Ð’Ñ‹ можете воÑÑтановить только ÑпонÑкий текÑÑ‚ командой B<unifdef>: unifdef -UORIGINAL -DJA foo.ja.pm =item B<space> =item B<space+> Оригинальный и преобразованный текÑÑ‚ выводÑÑ‚ÑÑ Ð½Ð° печать, разделенные одной пуÑтой Ñтрокой. Ð”Ð»Ñ C<пробел+> поÑле преобразованного текÑта также выводитÑÑ Ð½Ð¾Ð²Ð°Ñ Ñтрока. =item B<xtxt> ЕÑли формат C<xtxt> (переведенный текÑÑ‚) или неизвеÑтен, печатаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ переведенный текÑÑ‚. =back =item B<--xlate-maxlen>=I<chars> (Default: 0) Укажите макÑимальную длину текÑта, передаваемого в API за один раз. По умолчанию уÑтановлено значение, как Ð´Ð»Ñ Ð±ÐµÑплатного ÑервиÑа DeepL: 128К Ð´Ð»Ñ API (B<--xlate>) и 5000 Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа буфера обмена (B<--xlate-labor>). Ð’Ñ‹ можете изменить Ñти значениÑ, еÑли иÑпользуете уÑлугу Pro. =item B<--xlate-maxline>=I<n> (Default: 0) Укажите макÑимальное количеÑтво Ñтрок текÑта, которое будет отправлено в API за один раз. УÑтановите значение 1, еÑли вы хотите переводить по одной Ñтроке за раз. Ðтот параметр имеет приоритет перед параметром C<--xlate-maxlen>. =item B<-->[B<no->]B<xlate-progress> (Default: True) Результат перевода можно увидеть в реальном времени в выводе STDERR. =item B<--xlate-stripe> ИÑпользуйте модуль L<App::Greple::stripe>, чтобы показать Ñовпадающие чаÑти в виде полоÑок зебры. Ðто удобно, когда Ñовпадающие чаÑти Ñоединены вÑтык. Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¿Ð°Ð»Ð¸Ñ‚Ñ€Ð° переключаетÑÑ Ð² ÑоответÑтвии Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð¼ фона терминала. ЕÑли вы хотите указать его Ñвно, можно иÑпользовать B<--xlate-stripe-light> или B<--xlate-stripe-dark>. =item B<--xlate-mask> Выполните функцию маÑÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ отобразите преобразованный текÑÑ‚ как еÑть, без воÑÑтановлениÑ. =item B<--match-all> УÑтановите веÑÑŒ текÑÑ‚ файла в качеÑтве целевой облаÑти. =back =head1 CACHE OPTIONS Модуль B<xlate> может хранить кÑшированный текÑÑ‚ перевода Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ файла и Ñчитывать его перед выполнением, чтобы иÑключить накладные раÑходы на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº Ñерверу. При Ñтратегии кÑÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ умолчанию C<auto>, он ÑохранÑет данные кÑша только тогда, когда файл кÑша ÑущеÑтвует Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ файла. ИÑпользуйте B<--xlate-cache=clear>, чтобы запуÑтить управление кÑшем или очиÑтить вÑе ÑущеÑтвующие данные кÑша. ПоÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой опции будет Ñоздан новый файл кÑша, еÑли он не ÑущеÑтвует, а затем он будет автоматичеÑки поддерживатьÑÑ. =over 7 =item --xlate-cache=I<strategy> =over 4 =item C<auto> (Default) СохранÑть файл кÑша, еÑли он ÑущеÑтвует. =item C<create> Создать пуÑтой файл кÑша и выйти. =item C<always>, C<yes>, C<1> СохранÑть кÑш в любом Ñлучае, пока целевой файл ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ файлом. =item C<clear> Сначала очиÑтите данные кÑша. =item C<never>, C<no>, C<0> Ðикогда не иÑпользовать файл кÑша, даже еÑли он ÑущеÑтвует. =item C<accumulate> По умолчанию неиÑпользуемые данные удалÑÑŽÑ‚ÑÑ Ð¸Ð· файла кÑша. ЕÑли вы не хотите удалÑть их и ÑохранÑть в файле, иÑпользуйте C<accumulate>. =back =item B<--xlate-update> Ðта Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð°ÑтавлÑет обновлÑть файл кÑша, даже еÑли в Ñтом нет необходимоÑти. =back =head1 COMMAND LINE INTERFACE Ð’Ñ‹ можете легко иÑпользовать Ñтот модуль из командной Ñтроки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды C<xlate>, входÑщей в диÑтрибутив. Информацию об иÑпользовании Ñм. на Ñтранице руководÑтва C<xlate>. Команда C<xlate> работает ÑовмеÑтно Ñо Ñредой Docker, поÑтому даже еÑли у Ð²Ð°Ñ Ð½Ð¸Ñ‡ÐµÐ³Ð¾ не уÑтановлено, вы можете иÑпользовать ее, пока доÑтупен Docker. ИÑпользуйте опцию C<-D> или C<-C>. Кроме того, поÑкольку в комплекте поÑтавлÑÑŽÑ‚ÑÑ make-файлы Ð´Ð»Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… Ñтилей документов, перевод на другие Ñзыки возможен без Ñпециальных уточнений. ИÑпользуйте опцию C<-M>. Ð’Ñ‹ также можете комбинировать опции Docker и C<make>, чтобы запуÑтить C<make> в Ñреде Docker. Выполнение C<xlate -C> запуÑтит оболочку Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ‹Ð¼ текущим рабочим git-репозиторием. ПодробноÑти читайте в ÑпонÑкой Ñтатье в разделе L</SEE ALSO>. =head1 EMACS Загрузите файл F<xlate.el>, включенный в репозиторий, чтобы иÑпользовать команду C<xlate> из редактора Emacs. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ C<xlate-region> переводит заданный регион. Язык по умолчанию - C<EN-US>, и вы можете указать Ñзык, Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ ÐµÐµ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ аргумента prefix. =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. =item OPENAI_API_KEY Ключ аутентификации OpenAI. =back =head1 INSTALL =head2 CPANMINUS $ cpanm App::Greple::xlate =head2 TOOLS Ðеобходимо уÑтановить инÑтрументы командной Ñтроки Ð´Ð»Ñ DeepL и ChatGPT. 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. =item * L<https://github.com/DeepLcom/deepl-python> DeepL Библиотека Python и команда CLI. =item * L<https://github.com/openai/openai-python> Библиотека OpenAI Python =item * L<https://github.com/tecolicom/App-gpty> Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки OpenAI =item * L<App::Greple> Подробную информацию о шаблоне целевого текÑта Ñм. в руководÑтве B<greple>. ИÑпользуйте опции B<--inside>, B<--outside>, B<--include>, B<--exclude> Ð´Ð»Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñти ÑовпадениÑ. =item * L<App::Greple::update> Ð’Ñ‹ можете иÑпользовать модуль C<-Mupdate> Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ файлов по результатам команды B<greple>. =item * L<App::sdif> ИÑпользуйте B<sdif>, чтобы показать формат маркера конфликта бок о бок Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ B<-V>. =item * L<App::Greple::stripe> ИÑпользование Ð¼Ð¾Ð´ÑƒÐ»Ñ Greple B<stripe> Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ опции B<--xlate-stripe>. =back =head2 ARTICLES =over 2 =item * L<https://qiita.com/kaz-utashiro/items/1c1a51a4591922e18250> Модуль Greple Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° и замены только необходимых чаÑтей Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ DeepL API (на ÑпонÑком Ñзыке) =item * L<https://qiita.com/kaz-utashiro/items/a5e19736416ca183ecf6> Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² на 15 Ñзыках Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¼Ð¾Ð´ÑƒÐ»Ñ DeepL API (на ÑпонÑком Ñзыке) =item * L<https://qiita.com/kaz-utashiro/items/1b9e155d6ae0620ab4dd> ÐвтоматичеÑкий перевод Docker-Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ DeepL API (на ÑпонÑком Ñзыке) =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