Translate text by google, bing, youdaozhiyun, haici, stardict, openai, large language model of local machine, etc at same time from CLI, GUI (GNU/Linux, Android, macOS and Windows), REPL, python, shell and vim.
Project description
translate-shell
Translate text by:
- online translators
- bing
- youdaozhiyun
- haici
- offline dictionaries
- stardict
- LLM
- OpenAI
- llama: use your local model
Supports:
- CLI
- GUI
- GNU/Linux
- Android
- macOS
- Windows
- REPL
- script:
- python
- shell
- vim: DEPRECATION: vim port will be replaced by language server
- language server
- CI/CD
- github action
Usage
UI
CLI
trans --translators=google,bing,haici,stardict crush
REPL
$ trans # enter REPL
> en:ja # change source language to english and target language to japanese
> : # swap source and target languages
> =stardict # use stardict to translate text
> !cat example/test.txt # execute a shell command
ハッカー
> <example/test.txt # translate a file
hacker
> 画家 # translate text
painter; artist
> ! # enter shell
$ echo $SHELL # execute a shell command
/usr/bin/zsh
$ exit # exit shell
>
TUI
Vim
Translate --translators=google,bing Free as in Freedom
GUI
GNU/Linux
Android
Script
Python
>>> from translate_shell.translate import translate
>>> translate("The Mythical Man-Month", "zh_TW")
... Translations(
... status=1,
... results=[
... Translation(
... translator="google",
... sl="auto",
... tl="zh_TW",
... text="The Mythical Man-Month",
... phonetic="",
... paraphrase="神話般的人月",
... explains={},
... details={},
... alternatives=["神話般的月"]
... )
... ],
... text="The Mythical Man-Month",
... to_lang="zh_TW",
... from_lang="auto",
... )
Shell Script
$ xsel -o | trans --format json | jq -r '"《\(.results[].paraphrase)》的英文是 \(.text)."'
《大教堂和集市》的英文是 the cathedral and the bazaar.
Vim Script
:let g:text = 'Just for Fun'
:let g:translation = json_decode(translate_shell#call('--format=json', g:text))
:echo g:text 'is' g:translation.results[0].paraphrase 'in Chinese.'
Just for Fun is 纯娱乐 in Chinese.
Language server
- document hover: display translated results
- completions: complete translated words
CI/CD
Github Action
This repo provides an action to translate *.po
of a repository. See
inputs.
For example, you have a repository which contains translations of another
project's documents (upstream), you can write a github workflow to detect if
upstream has update. If a new version exist, update the version and
generate new
.po
s,
then translate the changed .po
s and git commit
.
Examples:
on:
schedule:
# Run this CI/CD at 0:00 on Friday
- cron: 0 0 * * 5
workflow_dispatch:
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Generate new .po
id: version
run: |
# update version
# then use perl / sed / ... to replace the version string of your file
# then generate new .po
echo VERSION=XXX > $GITHUB_OUTPUT
- name: Translate your *.po
uses: Freed-Wu/translate-shell@main
- name: Git commit
run: |
git add **.po
git config --global user.name 'Github Actions'
git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'
git commit -m ":bookmark: Dump version to $VERSION"
git tag "$VERSION"
git remote set-url origin "https://x-access-token:$GH_TOKEN@github.com/$GITHUB_REPOSITORY"
git push
git push --tags
env:
VERSION: ${{steps.version.outputs.VERSION}}
GH_TOKEN: ${{secrets.GH_TOKEN}}
You can use the following commands to get the new version:
# get a github repo's version:
curl https://api.github.com/repos/user/repo/releases/latest | jq -r .tag_name
# get a gitlab repo's version
curl 'https://gitlab.com/api/v4/projects/41218592/repository/tags?per_page=1' |
jq -r '.[].name'
You can use the following tools to generate the new .po
s:
- sphinx-intl: Generate
.po
for any project using sphinx to generate document. - po4a: Generate
.po
for any project which use markdown,LaTeX
, man, ... to write document.
Similar Projects
See comparison.
Features
- Translate with different translators at same time, like translator
- Translate clipboard contents automatically, like ydcv
- Speak the pronunciation of words
- Support online translate engines
- Support offline dictionaries
- Many methods to use, from shell, python and vim
- Magic text, like
en:
to change source language,:zh_CN
to change target language,<file
to translate file, etc. - Allow customization by
config.py
- Good shell completions, especially for zsh, complete options and translation history
- Manpage:
man trans
- Beautiful UI
- Cross platforms
- Rich API, can be easily called from shell and python
- Good document
- Unit test, keep code quality
- CI/CD
- clean code
- Respect PEP484
- Respect PEP621
- Respect XDG
The last but not least: it is a libre software.
See document to know more.
PS: PR is welcome! Please make code clean and keep test pass!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file translate-shell-0.0.40.tar.gz
.
File metadata
- Download URL: translate-shell-0.0.40.tar.gz
- Upload date:
- Size: 114.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f260790d8aee7de58a1a3b89bfe04d703e33f2d3b6ca18e746261feed14ee7a2 |
|
MD5 | 46b2af56ed3da37ca884fc80e94c487a |
|
BLAKE2b-256 | b481652f0f1c84a9ebcdbfab8bdcc6fb63d4dd20464146338539786ef3337b45 |
File details
Details for the file translate_shell-0.0.40-py3-none-any.whl
.
File metadata
- Download URL: translate_shell-0.0.40-py3-none-any.whl
- Upload date:
- Size: 85.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a66c2c1dc69e5d756055a84571b087d8c9196ed377b2af46dfa54c6e589285e7 |
|
MD5 | 4a1bd6c9af455a7e116247f0e07d03ad |
|
BLAKE2b-256 | d38a72d49581d8d6d696d5d7bd8cc220e8b00046f04eff1d79d3b588298c8b0f |