Make SubFox production-ready with parallel translation and UI controls
This commit is contained in:
parent
c40b8bed2b
commit
2b1d05f02c
6046 changed files with 798327 additions and 0 deletions
|
|
@ -0,0 +1 @@
|
|||
pip
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright June 2020 Nidhal Baccouri.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
|
@ -0,0 +1,960 @@
|
|||
Metadata-Version: 2.1
|
||||
Name: deep-translator
|
||||
Version: 1.11.4
|
||||
Summary: A flexible free and unlimited python tool to translate between different languages in a simple way using multiple translators
|
||||
Home-page: https://github.com/nidhaloff/deep_translator
|
||||
License: MIT
|
||||
Keywords: deep_translator,deepL,DeeplTranslator,translator,translation,automation,web scraping,google translator,google translation,google trans,PONS,YANDEX,MyMemory translator,Linguee,QcriTranslator,Language,Language detection,detect language,free translation,unlimited translation,translate for free
|
||||
Author: Nidhal Baccouri
|
||||
Author-email: nidhalbacc@gmail.com
|
||||
Maintainer: Nidhal Baccouri
|
||||
Maintainer-email: nidhalbacc@gmail.com
|
||||
Requires-Python: >=3.7,<4.0
|
||||
Classifier: Development Status :: 5 - Production/Stable
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: Intended Audience :: Education
|
||||
Classifier: Intended Audience :: Information Technology
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Topic :: Communications
|
||||
Classifier: Topic :: Education
|
||||
Classifier: Topic :: Software Development
|
||||
Classifier: Topic :: Text Processing
|
||||
Classifier: Topic :: Text Processing :: Linguistic
|
||||
Provides-Extra: ai
|
||||
Provides-Extra: docx
|
||||
Provides-Extra: pdf
|
||||
Requires-Dist: beautifulsoup4 (>=4.9.1,<5.0.0)
|
||||
Requires-Dist: docx2txt (>=0.8,<0.9) ; extra == "docx"
|
||||
Requires-Dist: openai (>=0.27.6,<0.28.0) ; (python_full_version >= "3.7.1" and python_full_version < "4.0.0") and (extra == "ai")
|
||||
Requires-Dist: pypdf (>=3.3.0,<4.0.0) ; extra == "pdf"
|
||||
Requires-Dist: requests (>=2.23.0,<3.0.0)
|
||||
Project-URL: Documentation, https://deep-translator.readthedocs.io/en/latest/
|
||||
Project-URL: Repository, https://github.com/nidhaloff/deep_translator
|
||||
Description-Content-Type: text/x-rst
|
||||
|
||||
##################
|
||||
deep-translator
|
||||
##################
|
||||
|
||||
.. image:: ../assets/icon.jpg
|
||||
:width: 100
|
||||
:align: center
|
||||
:alt: deep-translator-icon
|
||||
|
||||
|
|
||||
|
||||
|
||||
.. image:: https://img.shields.io/pypi/v/deep-translator.svg
|
||||
:target: https://pypi.python.org/pypi/deep-translator
|
||||
.. image:: https://img.shields.io/travis/nidhaloff/deep-translator.svg
|
||||
:target: https://github.com/nidhaloff/deep-translator/actions/workflows/build.yml
|
||||
.. image:: https://readthedocs.org/projects/deep-translator/badge/?version=latest
|
||||
:target: https://deep-translator.readthedocs.io/en/latest/?badge=latest
|
||||
:alt: Documentation Status
|
||||
.. image:: https://img.shields.io/pypi/l/deep-translator
|
||||
:target: https://pypi.python.org/pypi/deep-translator
|
||||
|
||||
.. image:: https://img.shields.io/pypi/status/deep-translator
|
||||
:target: https://pypi.python.org/pypi/deep-translator
|
||||
|
||||
.. image:: https://pepy.tech/badge/deep-translator
|
||||
:target: https://pepy.tech/project/deep-translator
|
||||
|
||||
|
||||
.. image:: https://img.shields.io/pypi/wheel/deep-translator
|
||||
:target: https://pypi.python.org/pypi/deep-translator
|
||||
|
||||
.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit
|
||||
:target: https://github.com/pre-commit/pre-commit
|
||||
|
||||
.. image:: https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FNidhalBaccouri
|
||||
:alt: Twitter URL
|
||||
:target: https://twitter.com/NidhalBaccouri
|
||||
|
||||
|
||||
=======================
|
||||
Translation for humans
|
||||
=======================
|
||||
|
||||
A flexible **FREE** and **UNLIMITED** tool to translate between different languages in a simple way using multiple translators.
|
||||
|
||||
|
||||
* Free software: MIT license
|
||||
* Documentation: https://deep-translator.readthedocs.io.
|
||||
* Swagger API: https://deep-translator-api.azurewebsites.net/docs.
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
.. contents:: Table of Contents
|
||||
:depth: 3
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
|
||||
==========
|
||||
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 provides
|
||||
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 use ChatGpt for 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
|
||||
- Support for ChatGpt (version >= 1.11.0)
|
||||
- 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
|
||||
- The API is very easy to use
|
||||
- Proxy integration is supported
|
||||
|
||||
========
|
||||
Features
|
||||
========
|
||||
|
||||
* Support for `google translate <https://translate.google.com/>`_
|
||||
* Support for the `microsoft translator <https://www.microsoft.com/en-us/translator//>`_ (version >= 1.3.5)
|
||||
* Support for `Pons translator <https://de.pons.com/>`_
|
||||
* Support for the `Linguee translator <https://www.linguee.com/>`_
|
||||
* Support for the `Mymemory translator <https://mymemory.translated.net/>`_
|
||||
* Support for the `Yandex translator <https://yandex.com/>`_ (version >= 1.2.1)
|
||||
* Support for the `QcriTranslator translator <https://mt.qcri.org/api/>`_ (version >= 1.2.4)
|
||||
* Support for the `DeeplTranslator translator <https://www.deepl.com/en/translator/>`_ (version >= 1.2.5)
|
||||
* Support for the `Papago translator <https://papago.naver.com/>`_ (version >= 1.4.4)
|
||||
* Support for the `Libre translator <https://libretranslate.com/>`_
|
||||
* Support for ChatGpt
|
||||
* Support for proxy usage
|
||||
* Automatic single language detection
|
||||
* Batch language detection
|
||||
* Translate directly from a text file
|
||||
* Translate docx files (version >= 1.9.4)
|
||||
* Translate PDF files (version >= 1.9.4)
|
||||
* Get multiple translation for a word
|
||||
* Automate the translation of different paragraphs in different languages
|
||||
* Translate directly from terminal (version >= 1.1.0)
|
||||
|
||||
=============
|
||||
Installation
|
||||
=============
|
||||
|
||||
Install the stable release:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip install -U deep-translator
|
||||
|
||||
$ poetry add deep-translator # for poetry usage
|
||||
|
||||
take a look at the docs if you want to install from source.
|
||||
|
||||
Also, you can install extras if you want support for specific use case. For example, translating Docx and PDF files
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip install deep-translator[docx] # add support for docx translation
|
||||
|
||||
$ pip install deep-translator[pdf] # add support for pdf translation
|
||||
|
||||
$ pip install deep-translator[ai] # add support for ChatGpt
|
||||
|
||||
$ poetry add deep-translator --extras "docx pdf ai" # for poetry usage
|
||||
|
||||
============
|
||||
Quick Start
|
||||
============
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from deep_translator import GoogleTranslator
|
||||
|
||||
# Use any translator you like, in this example GoogleTranslator
|
||||
translated = GoogleTranslator(source='auto', target='de').translate("keep it up, you are awesome") # output -> Weiter so, du bist großartig
|
||||
|
||||
or using proxies:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from deep_translator import GoogleTranslator
|
||||
|
||||
proxies_example = {
|
||||
"https": "34.195.196.27:8080",
|
||||
"http": "34.195.196.27:8080"
|
||||
}
|
||||
translated = GoogleTranslator(source='auto', target='de', proxies=proxies_example).translate("keep it up, you are awesome") # output -> Weiter so, du bist großartig
|
||||
|
||||
|
||||
or even directly from terminal:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ deep-translator --source "en" --target "de" --text "hello world"
|
||||
|
||||
or shorter
|
||||
|
||||
$ dt -tg de -txt "hello world"
|
||||
|
||||
|
||||
=====
|
||||
Usage
|
||||
=====
|
||||
|
||||
In this section, demos on how to use all different integrated translators in this tool are provided.
|
||||
|
||||
.. note::
|
||||
|
||||
You can always pass the languages by the name or by abbreviation.
|
||||
|
||||
*Example*: If you want to use english as a source or target language, you can pass **english** or **en** as an argument
|
||||
|
||||
.. note::
|
||||
|
||||
For all translators that require an ApiKey, you can either specify it as an argument to the translator class
|
||||
or you can export it as an environment variable, this way you won't have to provide it to the class.
|
||||
|
||||
*Example*: export OPENAI_API_KEY="your_key"
|
||||
|
||||
Imports
|
||||
--------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from deep_translator import (GoogleTranslator,
|
||||
ChatGptTranslator,
|
||||
MicrosoftTranslator,
|
||||
PonsTranslator,
|
||||
LingueeTranslator,
|
||||
MyMemoryTranslator,
|
||||
YandexTranslator,
|
||||
PapagoTranslator,
|
||||
DeeplTranslator,
|
||||
QcriTranslator,
|
||||
single_detection,
|
||||
batch_detection)
|
||||
|
||||
|
||||
Check Supported Languages
|
||||
---------------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You can check the supported languages of each translator by calling the
|
||||
get_supported_languages function.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# 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
|
||||
------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You can also detect language automatically. Notice that this package is free and my goal is to keep it free.
|
||||
Therefore, you will need to get your own api_key if you want to use the language detection function.
|
||||
I figured out you can get one for free here: https://detectlanguage.com/documentation
|
||||
|
||||
- Single Text Detection
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
lang = single_detection('bonjour la vie', api_key='your_api_key')
|
||||
print(lang) # output: fr
|
||||
|
||||
- Batch Detection
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
lang = batch_detection(['bonjour la vie', 'hello world'], api_key='your_api_key')
|
||||
print(lang) # output: [fr, en]
|
||||
|
||||
|
||||
|
||||
Google Translate
|
||||
-----------------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'happy coding'
|
||||
|
||||
- You can use automatic language detection to detect the source language:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = GoogleTranslator(source='auto', target='de').translate(text=text)
|
||||
|
||||
- You can pass languages by name or by abbreviation:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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)
|
||||
|
||||
- You can also reuse the Translator class and change/update its properties.
|
||||
|
||||
(Notice that this is important for performance too, since instantiating new objects is expensive)
|
||||
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# let's say first you need to translate from auto to german
|
||||
my_translator = GoogleTranslator(source='auto', target='german')
|
||||
result = my_translator.translate(text=text)
|
||||
print(f"Translation using source = {my_translator.source} and target = {my_translator.target} -> {result}")
|
||||
|
||||
# let's say later you want to reuse the class but your target is french now
|
||||
# This is the best practice and how you should use deep-translator.
|
||||
# Please don't over-instantiate translator objects without a good reason, otherwise you will run into performance issues
|
||||
my_translator.target = 'fr' # this will override the target 'german' passed previously
|
||||
result = my_translator.translate(text=text)
|
||||
print(f"Translation using source = {my_translator.source} and target = {my_translator.target} -> {result}")
|
||||
|
||||
# you can also update the source language as well
|
||||
my_translator.source = 'en' # this will override the source 'auto' passed previously
|
||||
result = my_translator.translate(text=text)
|
||||
print(f"Translation using source = {my_translator.source} and target = {my_translator.target} -> {result}")
|
||||
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = GoogleTranslator(source='auto', target='german').translate_file('path/to/file')
|
||||
|
||||
Mymemory Translator
|
||||
--------------------
|
||||
|
||||
.. note::
|
||||
|
||||
As in google translate, you can use the automatic language detection with mymemory by using "auto" as an
|
||||
argument for the source language. However, this feature in the mymemory translator is not so powerful as
|
||||
in google translate.
|
||||
|
||||
- Simple translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'Keep it up. You are awesome'
|
||||
|
||||
translated = MyMemoryTranslator(source='auto', target='french').translate(text)
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
path = "your_file.txt"
|
||||
|
||||
translated = MyMemoryTranslator(source='en', target='fr').translate_file(path)
|
||||
|
||||
|
||||
DeeplTranslator
|
||||
-----------------
|
||||
|
||||
.. note::
|
||||
|
||||
In order to use the DeeplTranslator translator, you need to generate an api key. Deepl offers a Pro and a free API.
|
||||
deep-translator supports both Pro and free APIs. Just check the examples below.
|
||||
Visit https://www.deepl.com/en/docs-api/ for more information on how to generate your Deepl api key
|
||||
|
||||
- Simple translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'Keep it up. You are awesome'
|
||||
|
||||
translated = DeeplTranslator(api_key="your_api_key", source="en", target="en", use_free_api=True).translate(text)
|
||||
|
||||
.. note::
|
||||
deep-translator uses free deepl api by default. If you have the pro version then simply set the use_free_api to false.
|
||||
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["hallo welt", "guten morgen"]
|
||||
|
||||
# the translate_sentences function is deprecated, use the translate_batch function instead
|
||||
translated = DeeplTranslator("your_api_key").translate_batch(texts)
|
||||
|
||||
QcriTranslator
|
||||
--------------------
|
||||
|
||||
.. note::
|
||||
|
||||
In order to use the QcriTranslator translator, you need to generate a free api key. Visit https://mt.qcri.org/api/
|
||||
for more information
|
||||
|
||||
- Check languages
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# as a property
|
||||
print("language pairs: ", QcriTranslator("your_api_key").languages)
|
||||
|
||||
- Check domains
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# as a property
|
||||
print("domains: ", QcriTranslator("your_api_key").domains)
|
||||
|
||||
- Text translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'Education is great'
|
||||
|
||||
translated = QcriTranslator("your_api_key").translate(source='en', target='ar', domain="news", text=text)
|
||||
# output -> التعليم هو عظيم
|
||||
|
||||
# see docs for batch translation and more.
|
||||
|
||||
Linguee Translator
|
||||
-------------------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
word = 'good'
|
||||
|
||||
- Simple Translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated_word = LingueeTranslator(source='english', target='french').translate(word)
|
||||
|
||||
- Return all synonyms or words that match
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# 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
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated_words = LingueeTranslator(source='english', target='french').translate_words(["good", "awesome"])
|
||||
|
||||
PONS Translator
|
||||
----------------
|
||||
|
||||
.. note::
|
||||
|
||||
You can pass the languages by the name or by abbreviation just like
|
||||
previous examples using GoogleTranslate
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
word = 'awesome'
|
||||
|
||||
- Simple Translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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 match
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# 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
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated_words = PonsTranslator(source='english', target='french').translate_words(["good", "awesome"])
|
||||
|
||||
Yandex Translator
|
||||
------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You need to require a **private api key** if you want to use the yandex translator.
|
||||
Visit the official website for more information about how to get one
|
||||
|
||||
- Language detection
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
lang = YandexTranslator('your_api_key').detect('Hallo, Welt')
|
||||
print(f"language detected: {lang}") # output -> language detected: 'de'
|
||||
|
||||
- Text translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# 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
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = YandexTranslator('your_api_key').translate_file(source="auto", target="en", path="path_to_your_file")
|
||||
|
||||
- Batch translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = YandexTranslator('your_api_key').translate_batch(source="auto", target="de", batch=["hello world", "happy coding"])
|
||||
|
||||
|
||||
Microsoft Translator
|
||||
---------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You need to require an **api key** if you want to use the microsoft translator.
|
||||
Visit the official website for more information about how to get one.
|
||||
Microsoft offers a free tier 0 subscription (2 million characters per month).
|
||||
|
||||
- Required and optional attributes
|
||||
|
||||
There are two required attributes, namely "api_key" (string) and "target" (string or list).
|
||||
Attribute "source" is optional.
|
||||
Also, Microsoft API accepts a number of other optional attributes, you can find them here: https://docs.microsoft.com/azure/cognitive-services/translator/reference/v3-0-translate
|
||||
You can simply add them after the required attributes, see the example.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
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
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["hallo welt", "guten morgen"]
|
||||
translated = MicrosoftTranslator(api_key='some-key', target='english').translate_batch(texts)
|
||||
|
||||
- Translate from a file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = MicrosoftTranslator(api_key='some-key', target='german').translate_file('path/to/file')
|
||||
|
||||
ChatGpt Translator
|
||||
---------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You need to install the openai support extra. `pip install deep-translator[ai]`
|
||||
|
||||
.. note::
|
||||
|
||||
You need to require an **api key** if you want to use the ChatGpt translator.
|
||||
If you have an openai account, you can create an api key (https://platform.openai.com/account/api-keys).
|
||||
|
||||
|
||||
|
||||
- Required and optional attributes
|
||||
|
||||
There are two required attributes, namely "api_key" (string) and "target" (string or list).
|
||||
Attribute "source" is optional.
|
||||
|
||||
You can provide your api key as an argument or you can export it as an env var
|
||||
e.g. `export OPENAI_API_KEY="your_key"`
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'happy coding'
|
||||
translated = ChatGptTranslator(api_key='your_key', target='german').translate(text=text)
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["hallo welt", "guten morgen"]
|
||||
translated = ChatGptTranslator(api_key='some-key', target='english').translate_batch(texts)
|
||||
|
||||
- Translate from a file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = ChatGptTranslator(api_key='some-key', target='german').translate_file('path/to/file')
|
||||
|
||||
|
||||
Papago Translator
|
||||
---------------------
|
||||
|
||||
.. note::
|
||||
|
||||
You need to require a **client id** and **client secret key** if you want to use the papago translator.
|
||||
Visit the official website for more information about how to get one.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'happy coding'
|
||||
translated = PapagoTranslator(client_id='your_client_id', secret_key='your_secret_key', source='en', target='ko').translate(text=text) # output: 행복한 부호화
|
||||
|
||||
|
||||
Libre Translator
|
||||
---------------------
|
||||
|
||||
.. note::
|
||||
|
||||
Libre translate has multiple `mirrors <https://github.com/LibreTranslate/LibreTranslate#mirrors>`_ which can be used for the API endpoint.
|
||||
Some require an API key to be used. By default the base url is set to `libretranslate.de <https://libretranslate.de/>`_ .
|
||||
This can be set using the "base_url" input parameter.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'laufen'
|
||||
translated = LibreTranslator(source='auto', target='en', base_url = 'https://libretranslate.com/', api_key = 'your_api_key').translate(text=text) # output: run
|
||||
|
||||
|
||||
- You can pass languages by name or by abbreviation:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = LibreTranslator(source='german', target='english').translate(text=text)
|
||||
|
||||
# Alternatively, you can pass languages by their abbreviation:
|
||||
translated = LibreTranslator(source='de', target='en').translate(text=text)
|
||||
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["hallo welt", "guten morgen"]
|
||||
translated = LibreTranslator(source='auto', target='en').translate_batch(texts)
|
||||
|
||||
- Translate from a file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = LibreTranslator(source='auto', target='en').translate_file('path/to/file')
|
||||
|
||||
|
||||
BaiduTranslator
|
||||
-----------------
|
||||
|
||||
.. note::
|
||||
|
||||
In order to use the BaiduTranslator translator, you need to generate a secret_id and a secret_key.
|
||||
deep-translator supports both Pro and free APIs. Just check the examples below.
|
||||
Visit http://api.fanyi.baidu.com/product/113 for more information on how to generate your Baidu appid
|
||||
and appkey.
|
||||
|
||||
- Simple translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'Hello world'
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate(text)
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["Hello world", "How are you?"]
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate_batch(texts)
|
||||
|
||||
- Translate from a file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate_file('path/to/file')
|
||||
|
||||
BaiduTranslator
|
||||
-----------------
|
||||
|
||||
.. note::
|
||||
|
||||
In order to use the BaiduTranslator translator, you need to generate a secret_id and a secret_key.
|
||||
deep-translator supports both Pro and free APIs. Just check the examples below.
|
||||
Visit http://api.fanyi.baidu.com/product/113 for more information on how to generate your Baidu appid
|
||||
and appkey.
|
||||
|
||||
- Simple translation
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
text = 'Hello world'
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate(text)
|
||||
|
||||
- Translate batch of texts
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
texts = ["Hello world", "How are you?"]
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate_batch(texts)
|
||||
|
||||
- Translate from a file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
translated = BaiduTranslator(appid="your-appid", appkey="your-appkey" source="en", target="zh").translate_file('path/to/file')
|
||||
|
||||
|
||||
Proxy usage
|
||||
-------------
|
||||
|
||||
deep-translator provides out of the box usage of proxies. Just define your proxies config as a dictionary
|
||||
and pass it to the corresponding translator. Below is an example using the GoogleTranslator, but this feature
|
||||
can be used with all supported translators.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from deep_translator import GoogleTranslator
|
||||
|
||||
# define your proxy configs:
|
||||
proxies_example = {
|
||||
"https": "your https proxy", # example: 34.195.196.27:8080
|
||||
"http": "your http proxy if available"
|
||||
}
|
||||
translated = GoogleTranslator(source='auto', target='de', proxies=proxies_example).translate("this package is awesome")
|
||||
|
||||
|
||||
File Translation
|
||||
--------------------
|
||||
|
||||
Deep-translator (version >= 1.9.4) supports not only text file translation, but docx and PDF files too.
|
||||
However, you need to install deep-translator using the specific extras.
|
||||
|
||||
For docx translation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip install deep-translator[docx]
|
||||
|
||||
For PDF translation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip install deep-translator[pdf]
|
||||
|
||||
|
||||
Usage from Terminal
|
||||
--------------------
|
||||
|
||||
Deep-translator supports a series of command line arguments for quick and simple access to the translators directly in your console.
|
||||
|
||||
.. note::
|
||||
|
||||
The program accepts ``deep-translator`` or ``dt`` as a command, feel free to substitute whichever you prefer.
|
||||
|
||||
For a list of available translators:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ deep-translator list
|
||||
|
||||
To translate a string or line of text:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ deep_translator google --source "english" --target "german" --text "happy coding"
|
||||
|
||||
Alternate short option names, along with using language abbreviations:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ deep_translator google -src "en" -tgt "de" -txt "happy coding"
|
||||
|
||||
|
||||
Finally, to retrieve a list of available languages for a given translator:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ deep-translator languages google
|
||||
|
||||
======
|
||||
Tests
|
||||
======
|
||||
|
||||
Developers can install the development version of deep-translator and execute unit tests to verify functionality. For more information on doing this, see `the contribution guidelines <https://deep-translator.readthedocs.io/en/latest/contributing.html#get-started>`_
|
||||
|
||||
========
|
||||
Links
|
||||
========
|
||||
Check this article on medium to know why you should use the deep-translator package and how to translate text using python.
|
||||
https://medium.com/@nidhalbacc/how-to-translate-text-with-python-9d203139dcf5
|
||||
|
||||
======
|
||||
Help
|
||||
======
|
||||
|
||||
If you are facing any problems, please feel free to open an issue.
|
||||
Additionally, you can make contact with the author for further information/questions.
|
||||
|
||||
Do you like deep-translator?
|
||||
You can always help the development of this project by:
|
||||
|
||||
- Following on github and/or twitter
|
||||
- Promote the project (ex: by giving it a star on github)
|
||||
- Watch the github repo for new releases
|
||||
- Tweet about the package
|
||||
- Help others with issues on github
|
||||
- Create issues and pull requests
|
||||
- Sponsor the project
|
||||
|
||||
===========
|
||||
Next Steps
|
||||
===========
|
||||
|
||||
Take a look in the examples folder for more :)
|
||||
Contributions are always welcome.
|
||||
Read the Contribution guidelines `Here <https://deep-translator.readthedocs.io/en/latest/contributing.html#get-started>`_
|
||||
|
||||
==========
|
||||
Credits
|
||||
==========
|
||||
|
||||
Many thanks to @KirillSklyarenko for his work on integrating the microsoft translator
|
||||
|
||||
==========
|
||||
License
|
||||
==========
|
||||
|
||||
MIT license
|
||||
|
||||
Copyright (c) 2020-present, Nidhal Baccouri
|
||||
|
||||
===========
|
||||
Swagger UI
|
||||
===========
|
||||
|
||||
deep-translator offers an api server for easy integration with other applications. Non python applications
|
||||
can communicate with the api directly and leverage the features of deep-translator
|
||||
|
||||
Access the api here: https://deep-translator-api.azurewebsites.net/docs
|
||||
|
||||
|
||||
|
||||
===========================
|
||||
The Translator++ mobile app
|
||||
===========================
|
||||
|
||||
.. image:: ../assets/app-icon.png
|
||||
:width: 100
|
||||
:alt: Icon of the app
|
||||
|
||||
You can download and try the app on play store https://play.google.com/store/apps/details?id=org.translator.translator&hl=en_US&gl=US
|
||||
|
||||
After developing the deep-translator, I realized 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 <https://kivy.org/#home/>`_ since
|
||||
I wanted to code in python and to develop a cross platform app.
|
||||
I open sourced the `Translator++ app <https://github.com/nidhaloff/deep-translator-app/>`_ on my github too.
|
||||
Feel free to take a look at the code or make a pull request ;)
|
||||
|
||||
.. note::
|
||||
The Translator++ app is based on the deep-translator package. I just built the app to prove the capabilities
|
||||
of the deep-translator package ;)
|
||||
|
||||
I published the first release on google play store on 02-08-2020
|
||||
|
||||
Here are some screenshots:
|
||||
|
||||
- Phone
|
||||
|
||||
.. image:: ../assets/translator1.jpg
|
||||
:width: 30%
|
||||
:height: 200
|
||||
:alt: screenshot1
|
||||
.. image:: ../assets/translator2.jpg
|
||||
:width: 30%
|
||||
:height: 200
|
||||
:alt: screenshot2
|
||||
.. image:: ../assets/spinner.jpg
|
||||
:width: 30%
|
||||
:height: 200
|
||||
:alt: spinner
|
||||
|
||||
- Tablet:
|
||||
|
||||
.. image:: ../assets/hz_view.png
|
||||
:width: 100%
|
||||
:height: 300
|
||||
:alt: screenshot3
|
||||
|
||||
===========================
|
||||
Website & Desktop app
|
||||
===========================
|
||||
|
||||
Currently, there are propositions for a website and/or desktop app based on deep-translator.
|
||||
You can follow the issue here: https://github.com/nidhaloff/deep-translator/issues/144
|
||||
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
../../../bin/deep-translator,sha256=vJUMsKKM9Ds35uloUI1g2sxbyOCojIX-Gn9LIQMHCjM,196
|
||||
../../../bin/dt,sha256=vJUMsKKM9Ds35uloUI1g2sxbyOCojIX-Gn9LIQMHCjM,196
|
||||
deep_translator-1.11.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
deep_translator-1.11.4.dist-info/LICENSE,sha256=UGnCG4PtsPuWXv32Jc-C22mZqVMVb1MAkEVWFIUgTOA,11350
|
||||
deep_translator-1.11.4.dist-info/METADATA,sha256=lf6LjOmo2MKRZ6TAzWKXJ6zf9948y35umV4XMb-39sw,30420
|
||||
deep_translator-1.11.4.dist-info/RECORD,,
|
||||
deep_translator-1.11.4.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
deep_translator-1.11.4.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
||||
deep_translator-1.11.4.dist-info/entry_points.txt,sha256=qQAStn9mriwaW7GNz-W_55eFUrym6XwBHSyf3oXv_lQ,98
|
||||
deep_translator/__init__.py,sha256=3zy0Ux3TVne-Al8QdCr_mtDtGHQiQCwpvxk6qsnPmi0,1238
|
||||
deep_translator/__main__.py,sha256=MkNnzbdqvk5qx_rgErLMjhe1Gp3Rsvl8At66JnQ8CZk,161
|
||||
deep_translator/__pycache__/__init__.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/__main__.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/baidu.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/base.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/chatgpt.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/cli.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/constants.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/deepl.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/detection.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/engines.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/exceptions.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/google.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/libre.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/linguee.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/microsoft.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/mymemory.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/papago.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/pons.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/qcri.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/validate.cpython-310.pyc,,
|
||||
deep_translator/__pycache__/yandex.cpython-310.pyc,,
|
||||
deep_translator/baidu.py,sha256=Y6VydrH4kktGicVzOGlSdStzE6L0a10rz0-jBc2pIek,3687
|
||||
deep_translator/base.py,sha256=7FqsTrg8pIorkcHd_xF-RKNXPEMVi21ce6CNyWs0pEE,5625
|
||||
deep_translator/chatgpt.py,sha256=KxN7IVbVkIJwzbiOu_BGhwu47x9Qh9l1HNTg60IDXVM,1974
|
||||
deep_translator/cli.py,sha256=MVm35co58fcay3uBJjl0_h5cXMbu2oI2n25lRIijDUY,3253
|
||||
deep_translator/constants.py,sha256=D9BpqRa5to5eTOdsp775AuUv1CN7FQDf6uuplhn5NcE,16089
|
||||
deep_translator/deepl.py,sha256=43LtS6yz-VPATfFt3eVIE-rHs0GMGF5zf8fLh-Ehccs,3511
|
||||
deep_translator/detection.py,sha256=Ey4JJlkZ_MJWe-YOXfVIJ3MS26BDeaAyjftOchqbosA,2760
|
||||
deep_translator/engines.py,sha256=RbAyuYdRUGsNWbXZEjaOghp_ZywAncMdQP6MZ_aTvV0,245
|
||||
deep_translator/exceptions.py,sha256=gx4V94ugeY6tWB17UMX6jX9ngcauq1ODEdMP6HvFxAY,5342
|
||||
deep_translator/google.py,sha256=JmBL44tl91aNJwKse2wANJa7sIDgpiIKLwKi6zO75ag,3935
|
||||
deep_translator/libre.py,sha256=0V-uM9recucnuD5nctyC7T1qy0hCSed8Jm6WUtyaCxY,4002
|
||||
deep_translator/linguee.py,sha256=8pT7q6eRj_V6ixxomR-JB_FsQpGtCqahyWJHHxbdn4Q,3744
|
||||
deep_translator/microsoft.py,sha256=zne9ehL2EQ21NTQN6Tvg_vhxMD5BlA9KtwbDrq1G_Go,4768
|
||||
deep_translator/mymemory.py,sha256=CwCFE2J4oRoUlZf78If6UOI32BFWi2dpN083sYzyong,3627
|
||||
deep_translator/papago.py,sha256=FXjRfO0Wb5pgaIm5hTuFFNQ5HYwUZl7VwVCOsFMowFU,3285
|
||||
deep_translator/pons.py,sha256=wvwfDkGMyYi1UsDCM47JnAzf5TOHdtyVRwRzrID-p54,3657
|
||||
deep_translator/qcri.py,sha256=qSUu9w8iPayqwxpikuaLRo-l_XXe053Ry_iAyodoY54,3300
|
||||
deep_translator/validate.py,sha256=qq1KcaF5hGAfM3rtlQxUEdmCRd-JQ71b8y-5LNezU6w,1088
|
||||
deep_translator/yandex.py,sha256=eV4AlGPk8enAu8GJ2FVUcAjiJj_xb1XVl_MB4WAPU3w,4618
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
Wheel-Version: 1.0
|
||||
Generator: poetry-core 1.6.1
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[console_scripts]
|
||||
deep-translator=deep_translator.__main__:main
|
||||
dt=deep_translator.__main__:main
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue