Translate Shell
Translate Shell (formerly Google Translate CLI) is a command-line translator powered by Google Translate (default), Bing Translator, Yandex.Translate, and Apertium. It gives you easy access to one of these translation engines in your terminal:
$ trans 'Saluton, Mondo!'
Saluton, Mondo!
Hello, World!
Translations of Saluton, Mondo!
[ Esperanto -> English ]
Saluton ,
Hello,
Mondo !
World!
By default, translations with detailed explanations are shown. You can also translate the text briefly: (only the most relevant translation will be shown)
$ trans -brief 'Saluton, Mondo!'
Hello, World!
Translate Shell can also be used like an interactive shell; input the text to be translated line by line:
$ trans -shell -brief
> Rien ne réussit comme le succès.
Nothing succeeds like success.
> Was mich nicht umbringt, macht mich stärker.
What does not kill me makes me stronger.
> Юмор есть остроумие глубокого чувства.
Humor has a deep sense of wit.
> 學而不思則罔,思而不學則殆。
Learning without thought is labor lost, thought without learning is perilous.
> 幸福になるためには、人から愛されるのが一番の近道。
In order to be happy, the best way is to be loved by people.
Prerequisites
System Requirements
Translate Shell is known to work on many POSIX-compliant systems, including but not limited to:
- GNU/Linux
- macOS
- *BSD
- Android (through Termux)
- Windows (through WSL, Cygwin, or MSYS2)
Dependencies
- GNU Awk (gawk) 4.0 or later
- This program relies heavily on GNU extensions of the AWK language, which are non-portable for other AWK implementations (e.g. nawk).
- How to get gawk:
- gawk comes with all GNU/Linux distributions.
- On FreeBSD, gawk is available in the ports.
- On macOS, gawk is available in MacPorts and Homebrew.
- Please note that gawk 5.2.0 has a known bug -- update to gawk 5.2.1 instead.
- GNU Bash or Zsh
- You may use Translate Shell from any Unix shell of your choice (bash, zsh, ksh, tcsh, fish, etc.); however, the wrapper script requires either bash or zsh installed.
Recommended Dependencies
These dependencies are optional, but strongly recommended for full functionality:
- curl with OpenSSL support
- GNU FriBidi: an implementation of the Unicode Bidirectional Algorithm (bidi)
- required for displaying text in Right-to-Left scripts (e.g. Arabic, Hebrew)
- mplayer, mpv, mpg123, or eSpeak
- required for the Text-to-Speech functionality
- less, more or most
- required for terminal paging
- rlwrap: a GNU readline wrapper
- required for readline-style editing and history in the interactive shell
- aspell or hunspell
- required for spell checking
Environment and Fonts
It is a must to have corresponding fonts for the language(s) / script(s) you wish to display in your terminal. See wiki: Writing Systems and Fonts for more details on scripts and recommended Unicode fonts.
Try It Out!
Start an interactive shell and translate anything you input into your native language: (in bash or zsh)
$ gawk -f <(curl -Ls --compressed https://git.io/translate) -- -shell
(in fish)
$ gawk -f (curl -Ls --compressed https://git.io/translate | psub) -- -shell
Using Docker
To try out via Docker, run:
$ docker pull soimort/translate-shell
Then you may start an interactive shell from the Docker image for translating:
$ docker run -it soimort/translate-shell -shell
Installation
Option #1. Direct Download
Download the self-contained executable and place it into your path. It's everything you need.
$ wget git.io/trans
$ chmod +x ./trans
There is a GPG signature.
Option #2. From A Package Manager
Using your favorite package manager
See wiki: Distros on how to install from a specific package manager on your distro.
Antigen (for Zsh users)
UsingAdd the following line to your .zshrc
:
antigen bundle soimort/translate-shell@develop
Option #3. From Git
$ git clone https://github.com/soimort/translate-shell
$ cd translate-shell/
$ make
$ [sudo] make install
In case you have only zsh but not bash in your system, build with:
$ make TARGET=zsh
The default PREFIX
of installation is /usr/local
. To install the program to somewhere else (e.g. /usr
, ~/.local
), use:
$ [sudo] make PREFIX=/usr install
Getting Started by Examples
Translate a Word
From any language to your language
Google Translate can identify the language of the source text automatically, and Translate Shell by default translates the source text into the language of your locale
.
$ trans vorto
From any language to one or more specific languages
Translate a word into French:
$ trans :fr word
Translate a word into Chinese and Japanese: (use a plus sign "+
" as the delimiter)
$ trans :zh+ja word
Alternatively, equals sign ("=
") can be used in place of the colon (":
"). Note that in some shells (e.g. zsh), equals signs may be interpreted differently, therefore the argument specifying languages needs to be protected:
$ trans {=zh+ja} word
$ trans '=zh+ja' word
You can also use the -target
(-t
) option to specify the target language(s):
$ trans -t zh+ja word
With the -t
option, the name of the language may also be used instead of the language code:
$ trans -t japanese word
$ trans -t 日本語 word
From a specific language
Google Translate may wrongly identify the source text as some other language than you expected:
$ trans 手紙
In that case, you need to specify its language explicitly:
$ trans ja: 手紙
$ trans zh: 手紙
You can also use the -source
(-s
) option to specify the source language:
$ trans -s ja 手紙
Translate Multiple Words or a Phrase
Translate each word alone:
$ trans en:zh word processor
Put words into one argument, and translate them as a whole:
$ trans en:zh "word processor"
Translate a Sentence
Translating a sentence is much the same like translating a phrase; you can just quote the sentence into one argument:
$ trans :zh "To-morrow, and to-morrow, and to-morrow,"
$ trans :zh 'To-morrow, and to-morrow, and to-morrow,'
It is also possible to translate multi-line sentences:
$ trans :zh "Creeps in this petty pace from day to day,
> To the last syllable of recorded time;
> And all our yesterdays have lighted fools
> The way to dusty death."
To avoid punctuation marks (e.g. "!
") or other special characters being interpreted by the shell, use single quotes:
$ trans :zh 'Out, out, brief candle!'
There are some cases though, you may still want to use double quotes: (e.g. the sentence contains a single quotation mark "'
")
$ trans :zh "Life's but a walking shadow, a poor player"
Alternatively, use the -join-sentence
(-j
) option to treat all arguments as one sentence so that quotes can be omitted:
$ trans -j :zh Life\'s but a walking shadow, a poor player
Brief Mode
By default, Translate Shell displays translations in a verbose manner. If you prefer to see only the most relevant translation, there is a brief mode available using the -brief
(-b
) option:
$ trans -b :fr "Saluton, Mondo"
In brief mode, phonetic notation (if any) is not shown by default. To enable this, put an at sign "@
" in front of the language code:
$ trans -b :@ja "Saluton, Mondo"
Dictionary Mode
Google Translate can be used as a dictionary. When translating a word and the target language is the same as the source language, the dictionary entry of the word is shown:
$ trans :en word
To enable dictionary mode no matter whether the source language and the target language are identical, use the -dictionary
(-d
) option.
$ trans -d fr: mot
Note: Not every language supported by Google Translate has provided dictionary data. See wiki: Languages to find out which language(s) has dictionary support.
Language Identification
Use the -identify
(-id
) option to identify the language of the text:
$ trans -id 言葉
Text-to-Speech
Use the -play
(-p
) option to listen to the translation:
$ trans -b -p :ja "Saluton, Mondo"
Use the -speak
(-sp
) option to listen to the original text:
$ trans -sp "你好,世界"
Terminal Paging
Sometimes the content of translation can be too much for display in one screen. Use the -view
(-v
) option to view the translation in a terminal pager such as less
or more
:
$ trans -d -v word
Right-to-Left (RTL) Languages
Right-to-Left (RTL) languages are well supported via GNU FriBidi.
The program will automatically adjust the screen width for padding when displaying right-to-left languages. Alternatively, you may use the -width
(-w
) option to specify the screen width:
$ trans -b -w 40 :he "Saluton, Mondo"
See wiki: Languages to find out which language(s) uses a Right-to-Left writing system.
Pipeline, Input and Output
If no source text is given in command-line arguments, the program will read from standard input, or from the file specified by the -input
(-i
) option:
$ echo "Saluton, Mondo" | trans -b :fr
$ trans -b -i input.txt :fr
Translations are written to standard output, or to the file specified by the -output
(-o
) option:
$ echo "Saluton, Mondo" | trans -b -o output.txt :fr
Translate a File
Instead of using the -input
option, a file URI scheme (file://
followed by the file name) can be used as a command-line argument:
$ trans :fr file://input.txt
Note: Brief mode is used when translating from file URI schemes.
Translate a Web Page
To translate a web page, an http(s) URI scheme can be used as an argument:
$ trans :fr http://www.w3.org/
A browser session will open for viewing the translation (via Google Translate's web interface). To specify your web browser of choice, use the -browser
option:
$ trans -browser firefox :fr http://www.w3.org/
Language Details
Use the -linguist
(-L
) option to view details of one or more languages:
$ trans -L fr
$ trans -L de+en
Some basic information of the language will be displayed: its English name and endonym (language name in the language itself), language family, writing system, canonical Google Translate code and ISO 639-3 code.
Interactive Translate Shell (REPL)
Start an interactive shell using the -shell
(or -interactive
, -I
) option:
$ trans -shell
You may specify the source language and the target language(s) before starting an interactive shell:
$ trans -shell en:fr
You may also change these settings during an interactive session. See wiki: REPL for more advanced usage of the interactive Translate Shell.
Usage
For more details on command-line options, see the man page trans(1) or use trans -M
in a terminal.
Usage: trans [OPTIONS] [SOURCES]:[TARGETS] [TEXT]...
Information options:
-V, -version
Print version and exit.
-H, -help
Print help message and exit.
-M, -man
Show man page and exit.
-T, -reference
Print reference table of languages (in endonyms) and codes, and exit.
-R, -reference-english
Print reference table of languages (in English names) and codes, and exit.
-S, -list-engines
List available translation engines and exit.
-list-languages
List all languages (in endonyms) and exit.
-list-languages-english
List all languages (in English names) and exit.
-list-codes
List all codes and exit.
-list-all
List all languages (endonyms and English names) and codes, and exit.
-L CODES, -linguist CODES
Print details of languages and exit.
-U, -upgrade
Check for upgrade of this program.
Translator options:
-e ENGINE, -engine ENGINE
Specify the translation engine to use.
Display options:
-verbose
Verbose mode. (default)
-b, -brief
Brief mode.
-d, -dictionary
Dictionary mode.
-identify
Language identification.
-show-original Y/n
Show original text or not.
-show-original-phonetics Y/n
Show phonetic notation of original text or not.
-show-translation Y/n
Show translation or not.
-show-translation-phonetics Y/n
Show phonetic notation of translation or not.
-show-prompt-message Y/n
Show prompt message or not.
-show-languages Y/n
Show source and target languages or not.
-show-original-dictionary y/N
Show dictionary entry of original text or not.
-show-dictionary Y/n
Show dictionary entry of translation or not.
-show-alternatives Y/n
Show alternative translations or not.
-w NUM, -width NUM
Specify the screen width for padding.
-indent NUM
Specify the size of indent (number of spaces).
-theme FILENAME
Specify the theme to use.
-no-theme
Do not use any other theme than default.
-no-ansi
Do not use ANSI escape codes.
-no-autocorrect
Do not autocorrect. (if defaulted by the translation engine)
-no-bidi
Do not convert bidirectional texts.
-bidi
Always convert bidirectional texts.
-no-warn
Do not write warning messages to stderr.
-dump
Print raw API response instead.
Audio options:
-p, -play
Listen to the translation.
-speak
Listen to the original text.
-n VOICE, -narrator VOICE
Specify the narrator, and listen to the translation.
-player PROGRAM
Specify the audio player to use, and listen to the translation.
-no-play
Do not listen to the translation.
-no-translate
Do not translate anything when using -speak.
-download-audio
Download the audio to the current directory.
-download-audio-as FILENAME
Download the audio to the specified file.
Terminal paging and browsing options:
-v, -view
View the translation in a terminal pager.
-pager PROGRAM
Specify the terminal pager to use, and view the translation.
-no-view, -no-pager
Do not view the translation in a terminal pager.
-browser PROGRAM
Specify the web browser to use.
-no-browser
Do not open the web browser.
Networking options:
-x HOST:PORT, -proxy HOST:PORT
Use HTTP proxy on given port.
-u STRING, -user-agent STRING
Specify the User-Agent to identify as.
-4, -ipv4, -inet4-only
Connect only to IPv4 addresses.
-6, -ipv6, -inet6-only
Connect only to IPv6 addresses.
Interactive shell options:
-I, -interactive, -shell
Start an interactive shell.
-E, -emacs
Start the GNU Emacs front-end for an interactive shell.
-no-rlwrap
Do not invoke rlwrap when starting an interactive shell.
I/O options:
-i FILENAME, -input FILENAME
Specify the input file.
-o FILENAME, -output FILENAME
Specify the output file.
Language preference options:
-hl CODE, -host CODE
Specify the host (interface) language.
-s CODES, -sl CODES, -source CODES, -from CODES
Specify the source language(s), joined by '+'.
-t CODES, -tl CODES, -target CODES, -to CODES
Specify the target language(s), joined by '+'.
Text preprocessing options:
-j, -join-sentence
Treat all arguments as one single sentence.
Other options:
-no-init
Do not load any initialization script.
See the man page trans(1) for more information.
Code List
Use trans -R
or trans -T
to view the reference table in a terminal.
For more details on languages and corresponding codes, see wiki: Languages.
Language | Code | Language | Code | Language | Code |
---|---|---|---|---|---|
Afrikaans Afrikaans |
af |
Hebrew עִבְרִית |
he |
Portuguese (Brazilian) Português Brasileiro |
pt-BR |
Albanian Shqip |
sq |
Hill Mari Кырык мары |
mrj |
Portuguese (European) Português Europeu |
pt-PT |
Amharic አማርኛ |
am |
Hindi हिन्दी |
hi |
Punjabi ਪੰਜਾਬੀ |
pa |
Arabic العربية |
ar |
Hmong Hmoob |
hmn |
Quechua Runasimi |
qu |
Armenian Հայերեն |
hy |
Hungarian Magyar |
hu |
Querétaro Otomi Hñąñho |
otq |
Assamese অসমীয়া |
as |
Icelandic Íslenska |
is |
Romanian Română |
ro |
Aymara Aymar aru |
ay |
Igbo Igbo |
ig |
Romansh Rumantsch |
rm |
Azerbaijani Azərbaycanca |
az |
Ilocano Ilokano |
ilo |
Russian Русский |
ru |
Bambara Bamanankan |
bm |
Indonesian Bahasa Indonesia |
id |
Samoan Gagana Sāmoa |
sm |
Bashkir Башҡортса |
ba |
Interlingue Interlingue |
ie |
Sanskrit संस्कृतम् |
sa |
Basque Euskara |
eu |
Inuinnaqtun Inuinnaqtun |
ikt |
Scots Gaelic Gàidhlig |
gd |
Belarusian беларуская |
be |
Inuktitut ᐃᓄᒃᑎᑐᑦ |
iu |
Sepedi Sepedi |
nso |
Bengali বাংলা |
bn |
Inuktitut (Latin) Inuktitut |
iu-Latn |
Serbian (Cyrillic) Српски |
sr-Cyrl |
Bhojpuri भोजपुरी |
bho |
Irish Gaeilge |
ga |
Serbian (Latin) Srpski |
sr-Latn |
Bosnian Bosanski |
bs |
Italian Italiano |
it |
Sesotho Sesotho |
st |
Breton Brezhoneg |
br |
Japanese 日本語 |
ja |
Setswana Setswana |
tn |
Bulgarian български |
bg |
Javanese Basa Jawa |
jv |
Shona chiShona |
sn |
Cantonese 粵語 |
yue |
Kannada ಕನ್ನಡ |
kn |
Sindhi سنڌي |
sd |
Catalan Català |
ca |
Kazakh Қазақ тілі |
kk |
Sinhala සිංහල |
si |
Cebuano Cebuano |
ceb |
Khmer ភាសាខ្មែរ |
km |
Slovak Slovenčina |
sk |
Cherokee ᏣᎳᎩ |
chr |
Kinyarwanda Ikinyarwanda |
rw |
Slovenian Slovenščina |
sl |
Chichewa Nyanja |
ny |
Klingon tlhIngan Hol |
tlh-Latn |
Somali Soomaali |
so |
Chinese (Literary) 文言 |
lzh |
Konkani कोंकणी |
gom |
Spanish Español |
es |
Chinese (Simplified) 简体中文 |
zh-CN |
Korean 한국어 |
ko |
Sundanese Basa Sunda |
su |
Chinese (Traditional) 繁體中文 |
zh-TW |
Krio Krio |
kri |
Swahili Kiswahili |
sw |
Chuvash Чӑвашла |
cv |
Kurdish (Central) سۆرانی |
ckb |
Swedish Svenska |
sv |
Corsican Corsu |
co |
Kurdish (Northern) Kurmancî |
ku |
Tahitian Reo Tahiti |
ty |
Croatian Hrvatski |
hr |
Kyrgyz Кыргызча |
ky |
Tajik Тоҷикӣ |
tg |
Czech Čeština |
cs |
Lao ລາວ |
lo |
Tamil தமிழ் |
ta |
Danish Dansk |
da |
Latin Latina |
la |
Tatar татарча |
tt |
Dari دری |
prs |
Latvian Latviešu |
lv |
Telugu తెలుగు |
te |
Dhivehi ދިވެހި |
dv |
Lingala Lingála |
ln |
Thai ไทย |
th |
Dogri डोगरी |
doi |
Lithuanian Lietuvių |
lt |
Tibetan བོད་ཡིག |
bo |
Dutch Nederlands |
nl |
Luganda Luganda |
lg |
Tigrinya ትግርኛ |
ti |
Dzongkha རྫོང་ཁ |
dz |
Luxembourgish Lëtzebuergesch |
lb |
Tongan Lea faka-Tonga |
to |
Eastern Mari Олык марий |
mhr |
Macedonian Македонски |
mk |
Tsonga Xitsonga |
ts |
English English |
en |
Maithili मैथिली |
mai |
Turkish Türkçe |
tr |
Esperanto Esperanto |
eo |
Malagasy Malagasy |
mg |
Turkmen Türkmen |
tk |
Estonian Eesti |
et |
Malay Bahasa Melayu |
ms |
Twi Twi |
tw |
Ewe Eʋegbe |
ee |
Malayalam മലയാളം |
ml |
Udmurt Удмурт |
udm |
Faroese Føroyskt |
fo |
Maltese Malti |
mt |
Ukrainian Українська |
uk |
Fijian Vosa Vakaviti |
fj |
Maori Māori |
mi |
Upper Sorbian Hornjoserbšćina |
hsb |
Filipino Filipino |
tl |
Marathi मराठी |
mr |
Urdu اُردُو |
ur |
Finnish Suomi |
fi |
Meiteilon ꯃꯤꯇꯩꯂꯣꯟ |
mni-Mtei |
Uyghur ئۇيغۇر تىلى |
ug |
French Français |
fr |
Mizo Mizo ṭawng |
lus |
Uzbek Oʻzbek tili |
uz |
French (Canadian) Français canadien |
fr-CA |
Mongolian Монгол |
mn |
Vietnamese Tiếng Việt |
vi |
Frisian Frysk |
fy |
Mongolian (Traditional) ᠮᠣᠩᠭᠣᠯ |
mn-Mong |
Volapük Volapük |
vo |
Galician Galego |
gl |
Myanmar မြန်မာစာ |
my |
Welsh Cymraeg |
cy |
Georgian ქართული |
ka |
Nepali नेपाली |
ne |
Wolof Wollof |
wo |
German Deutsch |
de |
Norwegian Norsk |
no |
Xhosa isiXhosa |
xh |
Greek Ελληνικά |
el |
Occitan Occitan |
oc |
Yakut Sakha |
sah |
Greenlandic Kalaallisut |
kl |
Odia ଓଡ଼ିଆ |
or |
Yiddish ייִדיש |
yi |
Guarani Avañe'ẽ |
gn |
Oromo Afaan Oromoo |
om |
Yoruba Yorùbá |
yo |
Gujarati ગુજરાતી |
gu |
Papiamento Papiamentu |
pap |
Yucatec Maya Màaya T'àan |
yua |
Haitian Creole Kreyòl Ayisyen |
ht |
Pashto پښتو |
ps |
Zulu isiZulu |
zu |
Hausa Hausa |
ha |
Persian فارسی |
fa |
||
Hawaiian ʻŌlelo Hawaiʻi |
haw |
Polish Polski |
pl |
Wiki
Lists of all languages, writing systems and fonts for reference:
The following pages demonstrate the advanced usage of Translate Shell:
Find out whether your Linux distribution has included Translate Shell in its official repository. If not, contribute one:
Frequently Asked Questions, historical stuff, AWK coding style, etc.:
Reporting Bugs / Contributing
Please review the guidelines for contributing before reporting an issue or sending a pull request.
Licensing
This is free and unencumbered software released into the public domain. See LICENSE and WAIVER for details.