multranslate
Advanced tools
Comparing version 0.1.3 to 0.2.0
#!/usr/bin/env node | ||
const blessed = require('blessed') | ||
const axios = require('axios') | ||
import blessed from 'blessed' | ||
import axios from 'axios' | ||
import clipboardy from 'clipboardy' | ||
var screen = blessed.screen({ | ||
autoPadding: true, | ||
smartCSR: true, | ||
cursor: { | ||
@@ -15,4 +18,3 @@ artificial: true, | ||
}, | ||
blink: false, | ||
terminal: 'windows-ansi' | ||
blink: false | ||
} | ||
@@ -50,3 +52,3 @@ }) | ||
const outputBox1 = blessed.textarea({ | ||
label: `Output (Google)`, | ||
label: `Google (Ctrl+Q)`, | ||
top: '20%', | ||
@@ -78,3 +80,3 @@ left: 'left', | ||
const outputBox2 = blessed.textarea({ | ||
label: `Output (DeepLX)`, | ||
label: `DeepL (Ctrl+W)`, | ||
top: '20%', | ||
@@ -107,3 +109,3 @@ right: 'right', | ||
const outputBox3 = blessed.textarea({ | ||
label: `Output (MyMemory)`, | ||
label: `MyMemory (Ctrl+E)`, | ||
top: '60%', | ||
@@ -135,3 +137,3 @@ left: 'left', | ||
const outputBox4 = blessed.textarea({ | ||
label: `Output (Reverso)`, | ||
label: `Reverso (Ctrl+R)`, | ||
top: '60%', | ||
@@ -355,3 +357,3 @@ right: 'right', | ||
// Обработка нажатия Enter | ||
// Обработка нажатия Enter для перевода текста и переноса на новую строку | ||
inputBox.key(['enter'], async () => { | ||
@@ -361,3 +363,3 @@ await handleTranslation() | ||
// Обработчик событий клавиш для прокрутки экрана панелей вывода | ||
// Обработчик событий клавиш для пролистывания экрана панелей вывода | ||
inputBox.key(['up', 'down'], function(ch, key) { | ||
@@ -381,14 +383,59 @@ const value = inputBox.getValue() | ||
// Обработка нажатия клавиши для очистки экрана и выхода | ||
screen.key(['escape'], function () { | ||
if (inputBox.getValue().length > 0) { | ||
// Обработка очистки экрана | ||
inputBox.key(['C-c'], function () { | ||
inputBox.clearValue() | ||
screen.render() | ||
inputBox.focus() | ||
} else { | ||
// Выйти из приложения, если inputBox пустой | ||
return process.exit(0) | ||
} | ||
}) | ||
// Обработка выхода | ||
inputBox.key(['escape'], function () { | ||
return process.exit(0) | ||
}) | ||
// Обработка копирования вывода в буфер обмена | ||
inputBox.key(['C-q'], function() { | ||
const textToCopy = outputBox1.getContent() | ||
clipboardy.writeSync(textToCopy) | ||
outputBox1.style.border.fg = 'green' | ||
outputBox2.style.border.fg = 'blue' | ||
outputBox3.style.border.fg = 'blue' | ||
outputBox4.style.border.fg = 'blue' | ||
screen.render() | ||
inputBox.focus() | ||
}) | ||
inputBox.key(['C-w'], function() { | ||
const textToCopy = outputBox2.getContent() | ||
clipboardy.writeSync(textToCopy) | ||
outputBox1.style.border.fg = 'blue' | ||
outputBox2.style.border.fg = 'green' | ||
outputBox3.style.border.fg = 'blue' | ||
outputBox4.style.border.fg = 'blue' | ||
screen.render() | ||
inputBox.focus() | ||
}) | ||
inputBox.key(['C-e'], function() { | ||
const textToCopy = outputBox3.getContent() | ||
clipboardy.writeSync(textToCopy) | ||
outputBox1.style.border.fg = 'blue' | ||
outputBox2.style.border.fg = 'blue' | ||
outputBox3.style.border.fg = 'green' | ||
outputBox4.style.border.fg = 'blue' | ||
screen.render() | ||
inputBox.focus() | ||
}) | ||
inputBox.key(['C-r'], function() { | ||
const textToCopy = outputBox4.getContent() | ||
clipboardy.writeSync(textToCopy) | ||
outputBox1.style.border.fg = 'blue' | ||
outputBox2.style.border.fg = 'blue' | ||
outputBox3.style.border.fg = 'blue' | ||
outputBox4.style.border.fg = 'green' | ||
screen.render() | ||
inputBox.focus() | ||
}) | ||
// Отображение интерфейса | ||
@@ -395,0 +442,0 @@ screen.render() |
{ | ||
"name": "multranslate", | ||
"version": "0.1.3", | ||
"version": "0.2.0", | ||
"description": "Cross-platform TUI for translating text using multiple providers simultaneously and support automatic detection of the source and destination language", | ||
@@ -22,2 +22,3 @@ "keywords": [ | ||
"main": "multranslate.js", | ||
"type": "module", | ||
"scripts": { | ||
@@ -28,3 +29,4 @@ "start": "node multranslate.js" | ||
"axios": "^1.7.5", | ||
"blessed": "^0.1.81" | ||
"blessed": "^0.1.81", | ||
"clipboardy": "^4.0.0" | ||
}, | ||
@@ -36,4 +38,5 @@ "bin": { | ||
"assets": [ | ||
"node_modules/blessed/**/*", | ||
"node_modules/axios/**/*", | ||
"node_modules/blessed/**/*" | ||
"node_modules/clipboardy/**/*" | ||
], | ||
@@ -40,0 +43,0 @@ "targets": [ |
@@ -23,15 +23,22 @@ <h1 align="center"> | ||
- [DeepLX](https://github.com/OwO-Network/DeepLX) - бесплатный [DeepL](https://deepl.com) API с использованием [serverless](https://github.com/LegendLeo/deeplx-serverless), размещенный на [Vercel](https://github.com/olavoparno/translate-serverless-vercel). | ||
- [MyMemory](https://mymemory.translated.net/doc/spec.php) - бесплатный и открытый API (использование ограничено 5000 символами/день). | ||
- [Reverso](https://www.reverso.net) - бесплатный API (не содержит официальной документации, запрос был получен с официального сайта через DevTools). | ||
- [MyMemory](https://mymemory.translated.net/doc/spec.php) - бесплатный и открытый API (использование ограничено 5000 символами в день). | ||
- [Reverso](https://www.reverso.net) - бесплатный API (не содержит официальной документации, запрос был получен с официального сайта через *DevTools*). | ||
> **Reverso** не поддерживает работу через **Axios** (ошибка: `Invalid header value char`), вместо этого используется **Fetch**. | ||
## Установка | ||
Используйте менеджер пакетов [npm](https://www.npmjs.com/package/multranslate) (стабильная версия): | ||
Используйте менеджер пакетов [npm](https://www.npmjs.com/package/multranslate): | ||
```shell | ||
npm install -g multranslate | ||
``` | ||
Запустите приложение: | ||
```shell | ||
multranslate | ||
``` | ||
### Сборка: | ||
## Сборка | ||
@@ -45,3 +52,3 @@ Клонируйте репозиторий: | ||
Запуск приложения: | ||
Запустите приложения: | ||
@@ -52,31 +59,10 @@ ```shell | ||
Для сборки исполняемого файла вы можете использовать [pkg](https://github.com/vercel/pkg) от [Vercel](https://github.com/vercel). | ||
## Горячие клавиши | ||
Установите пакет [pkg](https://www.npmjs.com/package/pkg) и воспользуйтесь одной командой для сборки для всех платформ: | ||
Перевод текста производится каждый раз, после нажатия кнопки `Enter`. Сочетание клавиш `Ctrl+C` используется для очистки поля ввода текста. Кнопка `escape` используется для выхода из программы. | ||
```shell | ||
npm install -g pkg | ||
pkg . | ||
``` | ||
Для копирования текста в буфер обмена из выбранной формы вывода возможно использовать сочетание клавиш `Ctrl+<Q/W/E/R>` (для каждого переводчика указано в скобках), при этом выбранная форма изменит свой цвет на зеленый. Для вставки текста в поле ввода из буфера обмена используйте `Ctrl+V`. | ||
Поддерживается Windows, Linux и MacOS. Исполняемый файл уже включает в себя все зависимости для своей работы и не требуется установки платформы `node.js`. | ||
> Так как провайдер Reverso не поддерживает работу через Axios (ошибка: `Invalid header value char`), вместо этого используется Fetch. Инструмент pkg поддерживает версию node.js 18 и старше, где Fetch считается эксперементальным, по этому при первом запросе после запуска приложения в поле ввода вы получите ошибку: `The Fetch API is an experimental feature`. | ||
## Горячие клавиши | ||
Кнопками `вверх` и `вниз` можно пролистывать все панели вывода одновременно. | ||
Кнопка `escape` используется для очистки поля ввода текста, а также для выхода из программы, если поле ввода уже очищено. | ||
> Библиотека blessed имеет ряд ограничений, поэтому мне не удалось реализовать перемещение курсора с помощью стрелочек влево и вправо. | ||
Чтобы захватить весь текст в одной из панелей вывода для копирования, используйте сочетание клавиш `Shift+Alt` при выделении текста. | ||
Если вы используете [Windows Terminal](https://github.com/microsoft/terminal), добавьте в файл конфигурации `settings.json` параметр, который будет удалять конечные пробелы из текста в прямоугольном (блочном) выделении при копировании в буфер обмена: | ||
```json | ||
"trimBlockSelection": true | ||
``` | ||
Чтобы вставить текст из буфера обмена, используйте сочетание клавиш `Shift+Ctrl+V` или `Ctrl+V` в зависимости от используемого вами терминала. |
@@ -26,12 +26,19 @@ <h1 align="center"> | ||
> **Reverso** does not support working via **Axios** (error: `Invalid header value char`), **Fetch** is used instead. | ||
## Installation | ||
Use the [npm](https://www.npmjs.com/package/multranslate) package manager (stable version): | ||
Use the [npm](https://www.npmjs.com/package/multranslate) package manager: | ||
```shell | ||
npm install -g multranslate | ||
``` | ||
Run the application: | ||
```shell | ||
multranslate | ||
``` | ||
### Build: | ||
## Build | ||
@@ -45,3 +52,3 @@ Clone the repository: | ||
Running the application: | ||
Run the application: | ||
@@ -52,31 +59,10 @@ ```shell | ||
To build the executable, you can use [pkg](https://github.com/vercel/pkg) from [Vercel](https://github.com/vercel). | ||
## Hotkeys | ||
Install the [pkg](https://www.npmjs.com/package/pkg) package and use one command to build for all platforms: | ||
The text is translated every time after pressing the `Enter` button. The `Ctrl+C` keyboard shortcut is used to clear the text input field. The `escape` button is used to exit the program. | ||
```shell | ||
npm install -g pkg | ||
pkg . | ||
``` | ||
To copy text to the clipboard from the selected output form, you can use the key combination `Ctrl+<Q/W/E/R>` (for each translator it is indicated in brackets), and the selected form will change its color to green. To paste text into an input field from the clipboard, use `Ctrl+V`. | ||
Supports Windows, Linux and MacOS. The executable file already includes all dependencies for its operation and does not require installation of the `node.js` platform. | ||
Using the `up` and `down` buttons you can scroll through all output panels at the same time. | ||
> Since the Reverso provider does not support working via Axios (error: `Invalid header value char`), Fetch is used instead. The pkg tool supports node.js version 18 and higher, where Fetch is considered experimental, so on the first request after running the application in the input field you will get an error: `The Fetch API is an experimental feature`. | ||
## Hotkeys | ||
Using the `up` and `down` buttons you can scroll through all output panels at once. | ||
The `escape` button is used to clear the text input field, as well as to exit the program if the input field is already empty. | ||
> The blessed library has a number of limitations, so I was unable to implement cursor movement using the left and right arrows. | ||
To capture all text in one of the output panels for copying, use the key combination `Shift+Alt` when selecting text. | ||
If you are using [Windows Terminal](https://github.com/microsoft/terminal), add a parameter in the `settings.json` configuration file that will remove trailing spaces from text in a rectangular (block) selection when copying to the clipboard: | ||
```json | ||
"trimBlockSelection": true | ||
``` | ||
To paste text from the clipboard, use the keyboard shortcut `Shift+Ctrl+V` or `Ctrl+V` depending on the terminal you are using. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
410
Yes
244907
3
66
+ Addedclipboardy@^4.0.0
+ Addedclipboardy@4.0.0(transitive)
+ Addedcross-spawn@7.0.6(transitive)
+ Addedexeca@8.0.1(transitive)
+ Addedget-stream@8.0.1(transitive)
+ Addedhuman-signals@5.0.0(transitive)
+ Addedis-docker@3.0.0(transitive)
+ Addedis-inside-container@1.0.0(transitive)
+ Addedis-stream@3.0.0(transitive)
+ Addedis-wsl@3.1.0(transitive)
+ Addedis64bit@2.0.0(transitive)
+ Addedisexe@2.0.0(transitive)
+ Addedmerge-stream@2.0.0(transitive)
+ Addedmimic-fn@4.0.0(transitive)
+ Addednpm-run-path@5.3.0(transitive)
+ Addedonetime@6.0.0(transitive)
+ Addedpath-key@3.1.14.0.0(transitive)
+ Addedshebang-command@2.0.0(transitive)
+ Addedshebang-regex@3.0.0(transitive)
+ Addedsignal-exit@4.1.0(transitive)
+ Addedstrip-final-newline@3.0.0(transitive)
+ Addedsystem-architecture@0.1.0(transitive)
+ Addedwhich@2.0.2(transitive)