translate-shell


Nametranslate-shell JSON
Version 0.0.52 PyPI version JSON
download
home_pageNone
SummaryTranslate 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.
upload_time2024-12-22 06:32:12
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseGPL v3
keywords translate
VCS
bugtrack_url
requirements aiohttp tomli
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # translate-shell

[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Freed-Wu/translate-shell/main.svg)](https://results.pre-commit.ci/latest/github/Freed-Wu/translate-shell/main)
[![github/workflow](https://github.com/Freed-Wu/translate-shell/actions/workflows/main.yml/badge.svg)](https://github.com/Freed-Wu/translate-shell/actions)
[![codecov](https://codecov.io/gh/Freed-Wu/translate-shell/branch/main/graph/badge.svg)](https://codecov.io/gh/Freed-Wu/translate-shell)
[![readthedocs](https://shields.io/readthedocs/translate-shell)](https://translate-shell.readthedocs.io)
[![DeepSource](https://deepsource.io/gh/Freed-Wu/translate-shell.svg/?show_trend=true)](https://deepsource.io/gh/Freed-Wu/translate-shell)

[![github/downloads](https://shields.io/github/downloads/Freed-Wu/translate-shell/total)](https://github.com/Freed-Wu/translate-shell/releases)
[![github/downloads/latest](https://shields.io/github/downloads/Freed-Wu/translate-shell/latest/total)](https://github.com/Freed-Wu/translate-shell/releases/latest)
[![github/issues](https://shields.io/github/issues/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/issues)
[![github/issues-closed](https://shields.io/github/issues-closed/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/issues?q=is%3Aissue+is%3Aclosed)
[![github/issues-pr](https://shields.io/github/issues-pr/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/pulls)
[![github/issues-pr-closed](https://shields.io/github/issues-pr-closed/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/pulls?q=is%3Apr+is%3Aclosed)
[![github/discussions](https://shields.io/github/discussions/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/discussions)
[![github/milestones](https://shields.io/github/milestones/all/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/milestones)
[![github/forks](https://shields.io/github/forks/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/network/members)
[![github/stars](https://shields.io/github/stars/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/stargazers)
[![github/watchers](https://shields.io/github/watchers/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/watchers)
[![github/contributors](https://shields.io/github/contributors/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/graphs/contributors)
[![github/commit-activity](https://shields.io/github/commit-activity/w/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/graphs/commit-activity)
[![github/last-commit](https://shields.io/github/last-commit/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/commits)
[![github/release-date](https://shields.io/github/release-date/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/releases/latest)

[![github/license](https://shields.io/github/license/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/blob/main/LICENSE)
[![github/languages](https://shields.io/github/languages/count/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)
[![github/languages/top](https://shields.io/github/languages/top/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)
[![github/directory-file-count](https://shields.io/github/directory-file-count/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)
[![github/code-size](https://shields.io/github/languages/code-size/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)
[![github/repo-size](https://shields.io/github/repo-size/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)
[![github/v](https://shields.io/github/v/release/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)

[![pypi/status](https://shields.io/pypi/status/translate-shell)](https://pypi.org/project/translate-shell/#description)
[![pypi/v](https://shields.io/pypi/v/translate-shell)](https://pypi.org/project/translate-shell/#history)
[![pypi/downloads](https://shields.io/pypi/dd/translate-shell)](https://pypi.org/project/translate-shell/#files)
[![pypi/format](https://shields.io/pypi/format/translate-shell)](https://pypi.org/project/translate-shell/#files)
[![pypi/implementation](https://shields.io/pypi/implementation/translate-shell)](https://pypi.org/project/translate-shell/#files)
[![pypi/pyversions](https://shields.io/pypi/pyversions/translate-shell)](https://pypi.org/project/translate-shell/#files)

Translate text by:

- online translators
  - google
  - 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

```sh
trans --translators=google,bing,haici,stardict crush
```

![CLI](https://user-images.githubusercontent.com/32936898/205699472-5349d422-54c9-47a3-afc0-53a17f0acaf8.jpg)

#### REPL

```console
$ 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
>
```

![REPL](https://user-images.githubusercontent.com/32936898/205617815-3a2ba6b4-2673-4233-907b-202ffd4a9e44.jpg)

#### TUI

##### Vim

```vim
Translate --translators=google,bing Free as in Freedom
```

![Vim](https://user-images.githubusercontent.com/32936898/205475332-61c0a90e-b145-4af0-8658-c0cf45b87150.jpg)

#### GUI

##### GNU/Linux

![GNU/Linux](https://user-images.githubusercontent.com/32936898/205699484-c6fdefd5-dca2-4263-aed4-e41d9d16fde6.jpg)

##### Android

![android-toast](https://user-images.githubusercontent.com/32936898/206078648-0db6480f-7e35-4252-9f33-9fb51e03e172.jpg)

### Script

#### Python

```pycon
>>> 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

```console
$ xsel -o | trans --format json | jq -r '"《\(.results[].paraphrase)》的英文是 \(.text)."'
《大教堂和集市》的英文是 the cathedral and the bazaar.
```

#### Vim Script

```vim
: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

- [x] document hover: display translated results
- [x] completions: complete translated words

### CI/CD

#### Github Action

This repo provides an action to translate `*.po` of a repository. See
[inputs](https://github.com/Freed-Wu/translate-shell/blob/main/action.yml).
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`](https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files)s,
then translate the changed `.po`s and `git commit`.

Examples:

- [tmux-zh](https://github.com/Freed-Wu/tmux-zh/blob/main/.github/workflows/version.yml)

```yaml
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:

```bash
# 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](https://sphinx-intl.readthedocs.io): Generate `.po` for any
  project using sphinx to generate document.
- [po4a](https://po4a.org): Generate `.po` for any project which use markdown,
  `LaTeX`, man, ... to write document.

## Similar Projects

See [comparison](https://translate-shell.readthedocs.io/en/latest/resources/translator.html).

## Features

- Translate with different translators at same time, like [translator](https://github.com/skywind3000/translator)
- Translate clipboard contents automatically, like [ydcv](https://github.com/felixonmars/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](https://github.com/zsh-users/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](https://peps.python.org/pep-0484/)
- Respect [PEP621](https://peps.python.org/pep-0621/)
- Respect [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)

The last but not least: **it is a libre software**.

See [document](https://translate-shell.readthedocs.io) to know more.

PS: PR is welcome! Please make code clean and keep test pass!

<!-- ex: nowrap
-->

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "translate-shell",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "translate",
    "author": null,
    "author_email": "Wu Zhenyu <wuzhenyu@ustc.edu>",
    "download_url": "https://files.pythonhosted.org/packages/d8/0c/2062b4975d99a2e4f4ee421ad434eaac1e8988251dbb57cfe5aa221c7942/translate_shell-0.0.52.tar.gz",
    "platform": null,
    "description": "# translate-shell\n\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Freed-Wu/translate-shell/main.svg)](https://results.pre-commit.ci/latest/github/Freed-Wu/translate-shell/main)\n[![github/workflow](https://github.com/Freed-Wu/translate-shell/actions/workflows/main.yml/badge.svg)](https://github.com/Freed-Wu/translate-shell/actions)\n[![codecov](https://codecov.io/gh/Freed-Wu/translate-shell/branch/main/graph/badge.svg)](https://codecov.io/gh/Freed-Wu/translate-shell)\n[![readthedocs](https://shields.io/readthedocs/translate-shell)](https://translate-shell.readthedocs.io)\n[![DeepSource](https://deepsource.io/gh/Freed-Wu/translate-shell.svg/?show_trend=true)](https://deepsource.io/gh/Freed-Wu/translate-shell)\n\n[![github/downloads](https://shields.io/github/downloads/Freed-Wu/translate-shell/total)](https://github.com/Freed-Wu/translate-shell/releases)\n[![github/downloads/latest](https://shields.io/github/downloads/Freed-Wu/translate-shell/latest/total)](https://github.com/Freed-Wu/translate-shell/releases/latest)\n[![github/issues](https://shields.io/github/issues/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/issues)\n[![github/issues-closed](https://shields.io/github/issues-closed/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/issues?q=is%3Aissue+is%3Aclosed)\n[![github/issues-pr](https://shields.io/github/issues-pr/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/pulls)\n[![github/issues-pr-closed](https://shields.io/github/issues-pr-closed/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/pulls?q=is%3Apr+is%3Aclosed)\n[![github/discussions](https://shields.io/github/discussions/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/discussions)\n[![github/milestones](https://shields.io/github/milestones/all/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/milestones)\n[![github/forks](https://shields.io/github/forks/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/network/members)\n[![github/stars](https://shields.io/github/stars/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/stargazers)\n[![github/watchers](https://shields.io/github/watchers/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/watchers)\n[![github/contributors](https://shields.io/github/contributors/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/graphs/contributors)\n[![github/commit-activity](https://shields.io/github/commit-activity/w/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/graphs/commit-activity)\n[![github/last-commit](https://shields.io/github/last-commit/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/commits)\n[![github/release-date](https://shields.io/github/release-date/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/releases/latest)\n\n[![github/license](https://shields.io/github/license/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell/blob/main/LICENSE)\n[![github/languages](https://shields.io/github/languages/count/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n[![github/languages/top](https://shields.io/github/languages/top/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n[![github/directory-file-count](https://shields.io/github/directory-file-count/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n[![github/code-size](https://shields.io/github/languages/code-size/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n[![github/repo-size](https://shields.io/github/repo-size/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n[![github/v](https://shields.io/github/v/release/Freed-Wu/translate-shell)](https://github.com/Freed-Wu/translate-shell)\n\n[![pypi/status](https://shields.io/pypi/status/translate-shell)](https://pypi.org/project/translate-shell/#description)\n[![pypi/v](https://shields.io/pypi/v/translate-shell)](https://pypi.org/project/translate-shell/#history)\n[![pypi/downloads](https://shields.io/pypi/dd/translate-shell)](https://pypi.org/project/translate-shell/#files)\n[![pypi/format](https://shields.io/pypi/format/translate-shell)](https://pypi.org/project/translate-shell/#files)\n[![pypi/implementation](https://shields.io/pypi/implementation/translate-shell)](https://pypi.org/project/translate-shell/#files)\n[![pypi/pyversions](https://shields.io/pypi/pyversions/translate-shell)](https://pypi.org/project/translate-shell/#files)\n\nTranslate text by:\n\n- online translators\n  - google\n  - bing\n  - youdaozhiyun\n  - haici\n- offline dictionaries\n  - stardict\n- LLM\n  - OpenAI\n  - llama: use your local model\n\nSupports:\n\n- CLI\n- GUI\n  - GNU/Linux\n  - Android\n  - macOS\n  - Windows\n- REPL\n- script:\n  - python\n  - shell\n  - vim: **DEPRECATION**: vim port will be replaced by language server\n- language server\n- CI/CD\n  - github action\n\n## Usage\n\n### UI\n\n#### CLI\n\n```sh\ntrans --translators=google,bing,haici,stardict crush\n```\n\n![CLI](https://user-images.githubusercontent.com/32936898/205699472-5349d422-54c9-47a3-afc0-53a17f0acaf8.jpg)\n\n#### REPL\n\n```console\n$ trans  # enter REPL\n> en:ja  # change source language to english and target language to japanese\n> :  # swap source and target languages\n> =stardict  # use stardict to translate text\n> !cat example/test.txt  # execute a shell command\n\u30cf\u30c3\u30ab\u30fc\n> <example/test.txt   # translate a file\nhacker\n> \u753b\u5bb6  # translate text\npainter; artist\n> !  # enter shell\n$ echo $SHELL  # execute a shell command\n/usr/bin/zsh\n$ exit  # exit shell\n>\n```\n\n![REPL](https://user-images.githubusercontent.com/32936898/205617815-3a2ba6b4-2673-4233-907b-202ffd4a9e44.jpg)\n\n#### TUI\n\n##### Vim\n\n```vim\nTranslate --translators=google,bing Free as in Freedom\n```\n\n![Vim](https://user-images.githubusercontent.com/32936898/205475332-61c0a90e-b145-4af0-8658-c0cf45b87150.jpg)\n\n#### GUI\n\n##### GNU/Linux\n\n![GNU/Linux](https://user-images.githubusercontent.com/32936898/205699484-c6fdefd5-dca2-4263-aed4-e41d9d16fde6.jpg)\n\n##### Android\n\n![android-toast](https://user-images.githubusercontent.com/32936898/206078648-0db6480f-7e35-4252-9f33-9fb51e03e172.jpg)\n\n### Script\n\n#### Python\n\n```pycon\n>>> from translate_shell.translate import translate\n>>> translate(\"The Mythical Man-Month\", \"zh_TW\")\n... Translations(\n...     status=1,\n...     results=[\n...         Translation(\n...             translator=\"google\",\n...             sl=\"auto\",\n...             tl=\"zh_TW\",\n...             text=\"The Mythical Man-Month\",\n...             phonetic=\"\",\n...             paraphrase=\"\u795e\u8a71\u822c\u7684\u4eba\u6708\",\n...             explains={},\n...             details={},\n...             alternatives=[\"\u795e\u8a71\u822c\u7684\u6708\"]\n...         )\n...     ],\n...     text=\"The Mythical Man-Month\",\n...     to_lang=\"zh_TW\",\n...     from_lang=\"auto\",\n... )\n```\n\n#### Shell Script\n\n```console\n$ xsel -o | trans --format json | jq -r '\"\u300a\\(.results[].paraphrase)\u300b\u7684\u82f1\u6587\u662f \\(.text).\"'\n\u300a\u5927\u6559\u5802\u548c\u96c6\u5e02\u300b\u7684\u82f1\u6587\u662f the cathedral and the bazaar.\n```\n\n#### Vim Script\n\n```vim\n:let g:text = 'Just for Fun'\n:let g:translation = json_decode(translate_shell#call('--format=json', g:text))\n:echo g:text 'is' g:translation.results[0].paraphrase 'in Chinese.'\nJust for Fun is \u7eaf\u5a31\u4e50 in Chinese.\n```\n\n### Language server\n\n- [x] document hover: display translated results\n- [x] completions: complete translated words\n\n### CI/CD\n\n#### Github Action\n\nThis repo provides an action to translate `*.po` of a repository. See\n[inputs](https://github.com/Freed-Wu/translate-shell/blob/main/action.yml).\nFor example, you have a repository which contains translations of another\nproject's documents (upstream), you can write a github workflow to detect if\nupstream has update. If a new version exist, update the version and\ngenerate new\n[`.po`](https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files)s,\nthen translate the changed `.po`s and `git commit`.\n\nExamples:\n\n- [tmux-zh](https://github.com/Freed-Wu/tmux-zh/blob/main/.github/workflows/version.yml)\n\n```yaml\non:\n  schedule:\n    # Run this CI/CD at 0:00 on Friday\n    - cron: 0 0 * * 5\n  workflow_dispatch:\n\njobs:\n  translate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - name: Generate new .po\n        id: version\n        run: |\n          # update version\n          # then use perl / sed / ... to replace the version string of your file\n          # then generate new .po\n          echo VERSION=XXX > $GITHUB_OUTPUT\n      - name: Translate your *.po\n        uses: Freed-Wu/translate-shell@main\n      - name: Git commit\n        run: |\n          git add **.po\n          git config --global user.name 'Github Actions'\n          git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'\n          git commit -m \":bookmark: Dump version to $VERSION\"\n          git tag \"$VERSION\"\n          git remote set-url origin \"https://x-access-token:$GH_TOKEN@github.com/$GITHUB_REPOSITORY\"\n          git push\n          git push --tags\n        env:\n          VERSION: ${{steps.version.outputs.VERSION}}\n          GH_TOKEN: ${{secrets.GH_TOKEN}}\n```\n\nYou can use the following commands to get the new version:\n\n```bash\n# get a github repo's version:\ncurl https://api.github.com/repos/user/repo/releases/latest | jq -r .tag_name\n# get a gitlab repo's version\ncurl 'https://gitlab.com/api/v4/projects/41218592/repository/tags?per_page=1' |\njq -r '.[].name'\n```\n\nYou can use the following tools to generate the new `.po`s:\n\n- [sphinx-intl](https://sphinx-intl.readthedocs.io): Generate `.po` for any\n  project using sphinx to generate document.\n- [po4a](https://po4a.org): Generate `.po` for any project which use markdown,\n  `LaTeX`, man, ... to write document.\n\n## Similar Projects\n\nSee [comparison](https://translate-shell.readthedocs.io/en/latest/resources/translator.html).\n\n## Features\n\n- Translate with different translators at same time, like [translator](https://github.com/skywind3000/translator)\n- Translate clipboard contents automatically, like [ydcv](https://github.com/felixonmars/ydcv)\n- Speak the pronunciation of words\n- Support online translate engines\n- Support offline dictionaries\n- Many methods to use, from shell, python and vim\n- Magic text, like `en:` to change source language, `:zh_CN` to change target\n  language, `<file` to translate file, etc.\n- Allow customization by `config.py`\n- Good shell completions, especially for [zsh](https://github.com/zsh-users/zsh),\n  complete options and translation history\n- Manpage: `man trans`\n- Beautiful UI\n- Cross platforms\n- Rich API, can be easily called from shell and python\n- Good document\n- Unit test, keep code quality\n- CI/CD\n- clean code\n- Respect [PEP484](https://peps.python.org/pep-0484/)\n- Respect [PEP621](https://peps.python.org/pep-0621/)\n- Respect [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)\n\nThe last but not least: **it is a libre software**.\n\nSee [document](https://translate-shell.readthedocs.io) to know more.\n\nPS: PR is welcome! Please make code clean and keep test pass!\n\n<!-- ex: nowrap\n-->\n",
    "bugtrack_url": null,
    "license": "GPL v3",
    "summary": "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.",
    "version": "0.0.52",
    "project_urls": {
        "Bug Report": "https://github.com/Freed-Wu/translate-shell/issues",
        "Download": "https://github.com/Freed-Wu/translate-shell/releases",
        "Homepage": "https://translate-shell.readthedocs.org",
        "Source": "https://github.com/Freed-Wu/translate-shell"
    },
    "split_keywords": [
        "translate"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "af133f82072c8ac6147f419b67540f7c14af760083dc69c83dbfc22f258e8926",
                "md5": "8b69b867c71fa6cc4c9761ee44988957",
                "sha256": "1a77b16741abcf97ed3a4238c8f2c2500cbd744554d16181baaff4722d5b6601"
            },
            "downloads": -1,
            "filename": "translate_shell-0.0.52-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8b69b867c71fa6cc4c9761ee44988957",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 85821,
            "upload_time": "2024-12-22T06:32:09",
            "upload_time_iso_8601": "2024-12-22T06:32:09.237191Z",
            "url": "https://files.pythonhosted.org/packages/af/13/3f82072c8ac6147f419b67540f7c14af760083dc69c83dbfc22f258e8926/translate_shell-0.0.52-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d80c2062b4975d99a2e4f4ee421ad434eaac1e8988251dbb57cfe5aa221c7942",
                "md5": "47969b8b02defabb8c34978dd65ef37d",
                "sha256": "6735f063326a37687bd36c316de40bfe2b979b82d9fd0f49fded017c695e63bd"
            },
            "downloads": -1,
            "filename": "translate_shell-0.0.52.tar.gz",
            "has_sig": false,
            "md5_digest": "47969b8b02defabb8c34978dd65ef37d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 116991,
            "upload_time": "2024-12-22T06:32:12",
            "upload_time_iso_8601": "2024-12-22T06:32:12.035854Z",
            "url": "https://files.pythonhosted.org/packages/d8/0c/2062b4975d99a2e4f4ee421ad434eaac1e8988251dbb57cfe5aa221c7942/translate_shell-0.0.52.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-22 06:32:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Freed-Wu",
    "github_project": "translate-shell",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiohttp",
            "specs": []
        },
        {
            "name": "tomli",
            "specs": []
        }
    ],
    "lcname": "translate-shell"
}
        
Elapsed time: 2.57212s