Crow Translate

A simple and lightweight translator

Star Fork

Learn More ⇣
Overview

Crow Translate is a simple and lightweight translator written in C++ / Qt that allows you to translate and speak text using Google, Yandex, Bing, LibreTranslate and Lingva translate API.

Features

Installation

Windows

🌐 Installer from the Releases page.

📦 Scoop package

sudo scoop install crow-translate -g

Note: Windows requires Microsoft Visual C++ Redistributable 2019 to work.

Linux

Arch Linux, Manjaro, Chakra, etc

📦 Stable version in AUR

git clone https://aur.archlinux.org/crow-translate.git
cd crow-translate
makepkg -si

📦 Git version in AUR

git clone https://aur.archlinux.org/crow-translate-git.git
cd crow-translate-git
makepkg -si

📦 Chaotic-AUR repository

sudo pacman -S crow-translate

Ubuntu, Linux Mint, KDE Neon, etc

🌐 Package the Releases page.

📦 Launchpad PPA

sudo add-apt-repository ppa:jonmagon/crow-translate
sudo apt update
sudo apt install crow-translate

Fedora

🌐 Package the Releases page.

📦 Fedora Copr

sudo dnf copr enable carlis/crow-translate
sudo dnf install crow-translate

CentOS, RHEL

📦 Fedora Copr

sudo yum copr enable carlis/crow-translate
sudo yum install crow-translate

Mageia 7

📦 BlogDrake repository

# With urpmi
sudo urpmi urpmi.addmedia --wget --distrib http://ftp.blogdrake.net/mageia/mageia7/x86_64 # Or i586
sudo urpmi crow-translate

# Or with dnf
sudo dnf config-manager --add-repo http://ftp.blogdrake.net/mageia/BDK.repo
sudo dnf install crow-translate

openSUSE Tumbleweed

📦 Tumbleweed repository

sudo zypper install crow-translate

openSUSE Leap

📦 Open Build Service

Solus

📦 Solus repository

sudo eopkg it crow-translate

Flatpak

📦 Flathub

flatpak install flathub io.crow_translate.CrowTranslate

Note: To make the application look native on a non-KDE desktop environment, you need to configure Qt applications styling. This can be done by using qt5ct or adwaita-qt5 or qtstyleplugins. Please check the appropriate installation guide for your distribution.

Default keyboard shortcuts

You can change them in the settings. Some key sequences may not be available due to OS limitations.

Wayland does not support global shortcuts registration, but you can use D-Bus to bind actions in the system settings. For desktop environments that support additional applications actions (KDE, for example) you will see them predefined in the system shortcut settings. You can also use them for X11 sessions, but you need to disable global shortcuts registration in the application settings to avoid conflicts.

Global

KeyDescription
Ctrl + Alt + ETranslate selected text
Ctrl + Alt + SSpeak selected text
Ctrl + Alt + FSpeak translation of selected text
Ctrl + Alt + GStop speaking
Ctrl + Alt + CShow main window
Ctrl + Alt + IRecognize text in screen area
Ctrl + Alt + OTranslate text in screen area

In main window

KeyDescription
Ctrl + ReturnTranslate
Ctrl + RSwap languages
Ctrl + QClose window
Ctrl + SSpeak source / pause text speaking
Ctrl + Shift + SSpeak translation / pause text speaking
Ctrl + Shift + CCopy translation to clipboard

CLI commands

The program also has a console interface.

Usage: crow [options] text

OptionDescription
-h, --helpDisplay help
-v, --versionDisplay version information
-c, --codesDisplay language codes
-s, --source <code>Specify the source language (by default, engine will try to determine the language on its own)
-t, --translation <code>Specify the translation language(s), splitted by '+' (by default, the system language is used)
-l, --locale <code>Specify the translator language (by default, the system language is used)
-e, --engine <engine>Specify the translator engine ('google', 'yandex', 'bing', 'libretranslate' or 'lingva'), Google is used by default
-p, --speak-translationSpeak the translation
-u, --speak-sourceSpeak the source
-f, --fileRead source text from files. Arguments will be interpreted as file paths
-i, --stdinAdd stdin data to source text
-a, --audio-onlyPrint text only for speaking when using --speak-translation or --speak-source
-b, --briefPrint only translations
-j, --jsonPrint output formatted as JSON

Note: If you do not pass startup arguments to the program, the GUI starts.

D-Bus API

io.crow_translate.CrowTranslate
├── /io/crow_translate/CrowTranslate/Ocr
|   └── method void io.crow_translate.CrowTranslate.Ocr.setParameters(QVariantMap parameters);
└── /io/crow_translate/CrowTranslate/MainWindow
    |   # Global shortcuts
    ├── method void io.crow_translate.CrowTranslate.MainWindow.translateSelection();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.speakSelection();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.speakTranslatedSelection();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.playPauseSpeaking();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.stopSpeaking();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.open();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.copyTranslatedSelection();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.recognizeScreenArea();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.translateScreenArea();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.delayedRecognizeScreenArea();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.delayedTranslateScreenArea();
    |   # Main window shortcuts
    ├── method void io.crow_translate.CrowTranslate.MainWindow.clearText();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.cancelOperation();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.swapLanguages();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.openSettings();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.setAutoTranslateEnabled(bool enabled);
    ├── method void io.crow_translate.CrowTranslate.MainWindow.copySourceText();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.copyTranslation();
    ├── method void io.crow_translate.CrowTranslate.MainWindow.copyAllTranslationInfo();
    └── method void io.crow_translate.CrowTranslate.MainWindow.quit();

For example, you can show main window using dbus-send:

dbus-send --type=method_call --dest=io.crow_translate.CrowTranslate /io/crow_translate/CrowTranslate/MainWindow io.crow_translate.CrowTranslate.MainWindow.open

Or via qdbus:

qdbus io.crow_translate.CrowTranslate /io/crow_translate/CrowTranslate/MainWindow io.crow_translate.CrowTranslate.MainWindow.open
# or shorter
qdbus io.crow_translate.CrowTranslate /io/crow_translate/CrowTranslate/MainWindow open