Skip to main content

A flexible python tool to translate between different languages in a simple way.

Project description

deep-translator-icon

https://img.shields.io/pypi/v/deep-translator.svg https://img.shields.io/travis/nidhaloff/deep-translator.svg Documentation Status https://img.shields.io/pypi/l/deep-translator https://img.shields.io/pypi/status/deep-translator https://pepy.tech/badge/deep-translator https://img.shields.io/pypi/wheel/deep-translator Twitter URL

Translation for humans

A flexible FREE and UNLIMITED tool to translate between different languages in a simple way using multiple translators.

Motivation

I needed to translate a text using python. It was hard to find a simple way to do it. There are other libraries that can be used for this task, but most of them are buggy, not free, limited, not supported anymore or complex to use.

Therefore, I decided to build this simple tool. It is 100% free, unlimited, easy to use and provide support for all languages.

Basically, my goal was to integrate support for multiple famous translators in this tool.

When you should use it

  • If you want to translate text using python

  • If you want to translate from a file

  • If you want to get translations from many sources and not only one

  • If you want to automate translations

  • If you want to compare different translations

  • If you want to detect language automatically

Why you should use it

  • It’s the only python tool that integrates many translators

  • multi language support

  • supports batch translation

  • High level of abstraction

  • Automatic language detection

  • Easy to use and extend

  • Support for most famous universal translators

  • Stable and maintained regularly

Features

Installation

Install the stable release:

$ pip install -U deep_translator

take a look at the docs if you want to install from source.

Quick Start

from deep_translator import GoogleTranslator
translated = GoogleTranslator(source='auto', target='de').translate("keep it up, you are awesome")  # output -> Weiter so, du bist großartig

or from terminal

$ deep_translator -trans "google" -src "en" -tg "de" -txt "keep it up, you are awesome"

Usage

In this section, demos on how to use all different integrated translators in this tool are provided.

Imports

from deep_translator import (GoogleTranslator,
                             MicrosoftTranslator,
                             PonsTranslator,
                             LingueeTranslator,
                             MyMemoryTranslator,
                             YandexTranslator,
                             DeepL,
                             QCRI,
                             single_detection,
                             batch_detection)

Check Supported Languages

# default return type is a list
langs_list = GoogleTranslator.get_supported_languages()  # output: [arabic, french, english etc...]

# alternatively, you can the dictionary containing languages mapped to their abbreviation
langs_dict = GoogleTranslator.get_supported_languages(as_dict=True)  # output: {arabic: ar, french: fr, english:en etc...}

Language Detection

  • Single Text Detection

lang = single_detection('bonjour la vie', api_key='your_api_key')
print(lang) # output: fr
  • Batch Detection

lang = batch_detection(['bonjour la vie', 'hello world'], api_key='your_api_key')
print(lang) # output: [fr, en]

Google Translate

text = 'happy coding'
  • You can use automatic language detection to detect the source language:

translated = GoogleTranslator(source='auto', target='de').translate(text=text)
  • You can pass languages by name or by abbreviation:

translated = GoogleTranslator(source='auto', target='german').translate(text=text)

# Alternatively, you can pass languages by their abbreviation:
translated = GoogleTranslator(source='en', target='de').translate(text=text)
  • Translate batch of texts

texts = ["hallo welt", "guten morgen"]

# the translate_sentences function is deprecated, use the translate_batch function instead
translated = GoogleTranslator('de', 'en').translate_batch(texts)
  • Translate from a file:

translated = GoogleTranslator(source='auto', target='german').translate_file('path/to/file')

Mymemory Translator

  • Simple translation

text = 'Keep it up. You are awesome'

translated = MyMemoryTranslator(source='auto', target='french').translate(text)
  • Translate batch of texts

texts = ["hallo welt", "guten morgen"]

# the translate_sentences function is deprecated, use the translate_batch function instead
translated = MyMemoryTranslator('de', 'en').translate_batch(texts)
  • Translate from file

path = "your_file.txt"

translated = MyMemoryTranslator(source='en', target='fr').translate_file(path)

DeepL Translator

  • Simple translation

text = 'Keep it up. You are awesome'

translated = DeepL("your_api_key").translate(text)
  • Translate batch of texts

texts = ["hallo welt", "guten morgen"]

# the translate_sentences function is deprecated, use the translate_batch function instead
translated = DeepL("your_api_key").translate_batch(texts)

QCRI Translator

  • Check languages

# as a property
print("language pairs: ", QCRI("your_api_key").languages)
  • Check domains

# as a property
print("domains: ", QCRI("your_api_key").domains)
  • Text translation

text = 'Education is great'

translated = QCRI("your_api_key").translate(source='en', target='ar', domain="news", text=text)
# output -> التعليم هو عظيم

# see docs for batch translation and more.

Linguee Translator

word = 'good'
  • Simple Translation

translated_word = LingueeTranslator(source='english', target='french').translate(word)

# pass language by their abbreviation
translated_word = LingueeTranslator(source='en', target='fr').translate(word)
  • Return all synonyms or words that matches

# set the argument return_all to True if you want to get all synonyms of the word to translate
translated_word = LingueeTranslator(source='english', target='french').translate(word, return_all=True)
  • Translate a batch of words

translated_words = LingueeTranslator(source='english', target='french').translate_words(["good", "awesome"])

PONS Translator

word = 'awesome'
  • Simple Translation

translated_word = PonsTranslator(source='english', target='french').translate(word)

# pass language by their abbreviation
translated_word = PonsTranslator(source='en', target='fr').translate(word)
  • Return all synonyms or words that matches

# set the argument return_all to True if you want to get all synonyms of the word to translate
translated_word = PonsTranslator(source='english', target='french').translate(word, return_all=True)
  • Translate a batch of words

translated_words = LingueeTranslator(source='english', target='french').translate_words(["good", "awesome"])

Yandex Translator

  • Language detection

lang = YandexTranslator('your_api_key').detect('Hallo, Welt')
print(f"language detected: {lang}")  # output -> language detected: 'de'
  • Text translation

# with auto detection | meaning provide only the target language and let yandex detect the source
translated = YandexTranslator('your_api_key').translate(source="auto", target="en", text='Hallo, Welt')
print(f"translated text: {translated}")  # output -> translated text: Hello world

# provide source and target language explicitly
translated = YandexTranslator('your_api_key').translate(source="de", target="en", text='Hallo, Welt')
print(f"translated text: {translated}")  # output -> translated text: Hello world
  • File translation

translated = YandexTranslator('your_api_key').translate_file(source="auto", target="en", path="path_to_your_file")
  • Batch translation

translated = YandexTranslator('your_api_key').translate_batch(source="auto", target="de", batch=["hello world", "happy coding"])

Microsoft Translator

text = 'happy coding'
translated = MicrosoftTranslator(api_key='some-key', target='de').translate(text=text)
translated_two_targets = MicrosoftTranslator(api_key='some-key', target=['de', 'ru']).translate(text=text)
translated_with_optional_attr = MicrosoftTranslator(api_key='some-key', target='de', textType='html']).translate(text=text)
  • You can pass languages by name or by abbreviation:

translated = MicrosoftTranslator(api_key='some-key', target='german').translate(text=text)

# Alternatively, you can pass languages by their abbreviation:
translated = MicrosoftTranslator(api_key='some-key', target='de').translate(text=text)
  • Translate batch of texts

texts = ["hallo welt", "guten morgen"]
translated = MicrosoftTranslator(api_key='some-key', target='english').translate_batch(texts)
  • Translate from a file:

translated = MicrosoftTranslator(api_key='some-key', target='german').translate_file('path/to/file')

Usage from Terminal

For a quick access, you can use the deep_translator from terminal. For this to work, you need to provide the right arguments, which are the translator you want to use, source language, target language and the text you want to translate.

For example, provide “google” as an argument to use the google translator. Alternatively you can use the other supported translators. Just read the documentation to have an overview about the supported translators in this library.

$ deep_translator --translator "google" --source "english" --target "german" --text "happy coding"

Or you can go for the short version:

$ deep_translator -trans "google" -src "english" -tg "german" -txt "happy coding"

If you want, you can also pass the source and target language by their abbreviation

$ deep_translator -trans "google" -src "en" -tg "de" -txt "happy coding"

Tests

  • Install dev requirements

$ pip install -r requirements_dev.txt
  • Or just install pytest

$ pip install pytest
  • you can run tests individually for each translator by passing the prefix test_ followed by the translator name as an argument to pytest.

$ pytest test_google_trans
$ pytest test_linguee
$ pytest test_mymemory
$ pytest test_pons
  • Alternatively, you can run the test suite

$ pytest -ra

Next Steps

Take a look in the examples folder for more :) Contributions are always welcome. Read the Contribution guildlines Here

Credits

Many thanks to @KirillSklyarenko for his work on integrating the microsoft translator

License

MIT license

Copyright (c) 2020-present, Nidhal Baccouri

The Translator++ mobile app

Icon of the app

After developing the deep_translator, I realised how cool this would be if I can use it as an app on my mobile phone. Sure, there is google translate, pons and linguee apps etc.. but isn’t it cooler to make an app where all these translators are integrated?

Long story short, I started working on the app. I decided to use the kivy framework since I wanted to code in python and to develop a cross platform app. I open sourced the Translator++ app on my github too. Feel free to take a look at the code or make a pull request ;)

I published the first release on google play store on 02-08-2020

Here are some screenshots:

  • Phone

screenshot1 screenshot2 spinner
  • Tablet:

screenshot3

Important History

-1.3.4 bug fixes for the dutch language - 1.3.3 fixed bug in google translate

  • 1.2.5: added support for the DeepL translator

  • 1.2.4: added support for the QCRI translator

  • 1.2.1: added support for the yandex translator

  • 1.1.9: fixed bug in requests

  • 1.1.5: added language detection

  • 1.1.3: added support for mymemory

  • 1.0.4: added support for pons

  • 1.0.2: added support for linguee

  • 1.0.0: added support for google translate

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deep_translator-1.3.8.tar.gz (33.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deep_translator-1.3.8-py2.py3-none-any.whl (27.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file deep_translator-1.3.8.tar.gz.

File metadata

  • Download URL: deep_translator-1.3.8.tar.gz
  • Upload date:
  • Size: 33.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.8.5

File hashes

Hashes for deep_translator-1.3.8.tar.gz
Algorithm Hash digest
SHA256 5659529277f3f5c5c907f8e3db4b531656fec332db3fbe407917688ee2b8c1d3
MD5 9ac5e4d91e770cf3cbe9e6f1fb3ececc
BLAKE2b-256 b31766de304bf770ad2f78b3f86a302582aedb48f4c3117b6cacf536b9b2326c

See more details on using hashes here.

File details

Details for the file deep_translator-1.3.8-py2.py3-none-any.whl.

File metadata

  • Download URL: deep_translator-1.3.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 27.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.8.5

File hashes

Hashes for deep_translator-1.3.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 622db7d928981241dc9e5350ee6dae91c0d6cdb9314ca5a8159aa8012981c3c7
MD5 48a82a14b6393aa4a0ee65973cdd3283
BLAKE2b-256 88ae7909ab7296b0761372c04e19e3d0ee4e1ae0f315229bc3050d324c86d9af

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page