Skip to main content

Free and Open Source Machine Translation API. Self-hosted, no limits, no ties to proprietary services.

Project description

LibreTranslate

Try it online! | API Docs | Community Forum

Python versions Run tests Publish to DockerHub Publish to GitHub Container Registry Awesome Humane Tech

Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.

image

Try it online! | API Docs

API Examples

Simple

Request:

const res = await fetch("https://libretranslate.com/translate", {
	method: "POST",
	body: JSON.stringify({
		q: "Hello!",
		source: "en",
		target: "es"
	}),
	headers: { "Content-Type": "application/json" }
});

console.log(await res.json());

Response:

{
    "translatedText": "¡Hola!"
}

Auto Detect Language

Request:

const res = await fetch("https://libretranslate.com/translate", {
	method: "POST",
	body: JSON.stringify({
		q: "Ciao!",
		source: "auto",
		target: "en"
	}),
	headers: { "Content-Type": "application/json" }
});

console.log(await res.json());

Response:

{
    "translatedText": "Bye!"
}

HTML (beta)

Request:

const res = await fetch("https://libretranslate.com/translate", {
	method: "POST",
	body: JSON.stringify({
		q: '<p class="green">Hello!</p>',
		source: "en",
		target: "es",
		format: "html"
	}),
	headers: { "Content-Type": "application/json" }
});

console.log(await res.json());

Response:

{
    "translatedText": "<p class=\"green\">¡Hola!</p>"
}

Install and Run

You can run your own API server in just a few lines of setup!

Make sure you have installed Python (3.8 or higher is recommended), then simply issue:

pip install libretranslate
libretranslate [args]

Then open a web browser to http://localhost:5000

If you're on Windows, we recommend you Run with Docker instead.

On Ubuntu 20.04 you can also use the install script available on https://github.com/argosopentech/LibreTranslate-init

Build and Run

If you want to make some changes to the code, you can build from source, and run the API:

git clone https://github.com/LibreTranslate/LibreTranslate
cd LibreTranslate
pip install -e .
libretranslate [args]

# Or
python main.py [args]

Then open a web browser to http://localhost:5000

Run with Docker

Simply run:

docker run -ti --rm -p 5000:5000 libretranslate/libretranslate

Then open a web browser to http://localhost:5000

Build with Docker

docker build [--build-arg with_models=true] -t libretranslate .

If you want to run the Docker image in a complete offline environment, you need to add the --build-arg with_models=true parameter. Then the language models get downloaded during the build process of the image. Otherwise these models get downloaded on the first run of the image/container.

Run the built image:

docker run -it -p 5000:5000 libretranslate [args]

Or build and run using docker-compose:

docker-compose up -d --build

Feel free to change the docker-compose.yml file to adapt it to your deployment needs, or use an extra docker-compose.prod.yml file for your deployment configuration.

Arguments

Argument Description Default Env. name
--host Set host to bind the server to 127.0.0.1 LT_HOST
--port Set port to bind the server to 5000 LT_PORT
--char-limit Set character limit No limit LT_CHAR_LIMIT
--req-limit Set maximum number of requests per minute per client No limit LT_REQ_LIMIT
--batch-limit Set maximum number of texts to translate in a batch request No limit LT_BATCH_LIMIT
--ga-id Enable Google Analytics on the API client page by providing an ID No tracking LT_GA_ID
--debug Enable debug environment False LT_DEBUG
--ssl Whether to enable SSL False LT_SSL
--frontend-language-source Set frontend default language - source en LT_FRONTEND_LANGUAGE_SOURCE
--frontend-language-target Set frontend default language - target es LT_FRONTEND_LANGUAGE_TARGET
--frontend-timeout Set frontend translation timeout 500 LT_FRONTEND_TIMEOUT
--api-keys Enable API keys database for per-user rate limits lookup Don't use API keys LT_API_KEYS
--require-api-key-origin Require use of an API key for programmatic access to the API, unless the request origin matches this domain No restrictions on domain origin LT_REQUIRE_API_KEY_ORIGIN
--load-only Set available languages all from argostranslate LT_LOAD_ONLY
--suggestions Allow user suggestions false LT_SUGGESTIONS
--disable-files-translation Disable files translation false LT_DISABLE_FILES_TRANSLATION
--disable-web-ui Disable web ui false LT_DISABLE_WEB_UI

Note that each argument has an equivalent env. variable that can be used instead. The env. variables overwrite the default values but have lower priority than the command aguments. They are particularly useful if used with Docker. Their name is the upper-snake case of the command arguments' ones, with a LT prefix.

Run with Gunicorn

pip install gunicorn
gunicorn --bind 0.0.0.0:5000 'wsgi:app'

You can pass application arguments directly to Gunicorn via:

gunicorn --bind 0.0.0.0:5000 'wsgi:app(api_keys=True)'

Manage API Keys

LibreTranslate supports per-user limit quotas, e.g. you can issue API keys to users so that they can enjoy higher requests limits per minute (if you also set --req-limit). By default all users are rate-limited based on --req-limit, but passing an optional api_key parameter to the REST endpoints allows a user to enjoy higher request limits.

To use API keys simply start LibreTranslate with the --api-keys option.

Add New Keys

To issue a new API key with 120 requests per minute limits:

ltmanage keys add 120

Remove Keys

ltmanage keys remove <api-key>

View Keys

ltmanage keys

Language Bindings

You can use the LibreTranslate API using the following bindings:

More coming soon!

Discourse Plugin

You can use this discourse translator plugin to translate Discourse topics. To install it simply modify /var/discourse/containers/app.yml:

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/LibreTranslate/discourse-translator
	  ...

Then issue ./launcher rebuild app. From the Discourse's admin panel then select "LibreTranslate" as a translation provider and set the relevant endpoint configurations.

Mobile Apps

Web browser

Mirrors

This is a list of online resources that serve the LibreTranslate API. Some require an API key. If you want to add a new URL, please open a pull request.

URL API Key Required Payment Link Cost
libretranslate.com :heavy_check_mark: Buy $9 / month, 80 requests / minute limit
libretranslate.de - -
translate.mentality.rip - -
translate.argosopentech.com - -
translate.api.skitzen.com - -
trans.zillyhuhn.com - -
libretranslate.esmailelbob.xyz - -

Adding New Languages

To add new languages you first need to train an Argos Translate model. See this video for details.

Roadmap

Help us by opening a pull request!

FAQ

Can I use your API server at libretranslate.com for my application in production?

In short, no. You need to buy an API key. You can always run LibreTranslate for free on your own server of course.

Can I use this behind a reverse proxy, like Apache2?

Yes, here is an example Apache2 config that redirects a subdomain (with HTTPS certificate) to LibreTranslate running on a docker at localhost.

sudo docker run -ti --rm -p 127.0.0.1:5000:5000 libretranslate/libretranslate

You can remove 127.0.0.1 on the above command if you want to be able to access it from domain.tld:5000, in addition to subdomain.domain.tld (this can be helpful to determine if there is an issue with Apache2 or the docker container).

Add --restart unless-stopped if you want this docker to start on boot, unless manually stopped.

Apache config

Replace [YOUR_DOMAIN] with your full domain; for example, translate.domain.tld or libretranslate.domain.tld.

Remove # on the ErrorLog and CustomLog lines to log requests.

#Libretranslate

#Redirect http to https
<VirtualHost *:80>
    ServerName http://[YOUR_DOMAIN]
    Redirect / https://[YOUR_DOMAIN]
    # ErrorLog ${APACHE_LOG_DIR}/error.log
    # CustomLog ${APACHE_LOG_DIR}/tr-access.log combined
 </VirtualHost>

#https
<VirtualHost *:443>
    ServerName https://[YOUR_DOMAIN]

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/[YOUR_DOMAIN]/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/[YOUR_DOMAIN]/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/[YOUR_DOMAIN]/fullchain.pem

    # ErrorLog ${APACHE_LOG_DIR}/tr-error.log
    # CustomLog ${APACHE_LOG_DIR}/tr-access.log combined
</VirtualHost>

Add this to an existing site config, or a new file in /etc/apache2/sites-available/new-site.conf and run sudo a2ensite new-site.conf.

To get a HTTPS subdomain certificate, install certbot (snap), run sudo certbot certonly --manual --preferred-challenges dns and enter your information (with subdomain.domain.tld as the domain). Add a DNS TXT record with your domain registrar when asked. This will save your certificate and key to /etc/letsencrypt/live/{subdomain.domain.tld}/. Alternatively, comment the SSL lines out if you don't want to use HTTPS.

Credits

This work is largely possible thanks to Argos Translate, which powers the translation engine.

License

GNU Affero General Public License v3

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

libretranslate-1.2.7.tar.gz (36.4 kB view details)

Uploaded Source

Built Distribution

libretranslate-1.2.7-py3-none-any.whl (392.6 kB view details)

Uploaded Python 3

File details

Details for the file libretranslate-1.2.7.tar.gz.

File metadata

  • Download URL: libretranslate-1.2.7.tar.gz
  • Upload date:
  • Size: 36.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for libretranslate-1.2.7.tar.gz
Algorithm Hash digest
SHA256 111550c1fd7c9b676b4d79dae1139e825262336abd3b62b52ff08bf84161fc16
MD5 7902c46783d98e3f2dd1e4ceb1961b06
BLAKE2b-256 3294dc19c37448c74dd6ce2f0aab194bdb4e317cc0b82d6ccf048333a3872180

See more details on using hashes here.

File details

Details for the file libretranslate-1.2.7-py3-none-any.whl.

File metadata

  • Download URL: libretranslate-1.2.7-py3-none-any.whl
  • Upload date:
  • Size: 392.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for libretranslate-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 31db8ec7914e0391fa830da9ce787936774e9cc619dc82cbb538dad40f2adab9
MD5 a2d4dcf83c1e8854a7c4d7287ce192bc
BLAKE2b-256 0b987d9df851707a071b05887e99e44ba7c138ef62e9d1b6ae28ccf3d8d051fe

See more details on using hashes here.

Supported by

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