27 releases

0.5.2 Aug 28, 2023
0.5.1 Jun 24, 2021
0.5.0 May 26, 2021
0.2.7 Mar 25, 2021

#50 in Internationalization (i18n)

Download history 1/week @ 2024-06-20 12/week @ 2024-07-25 8/week @ 2024-08-01 13/week @ 2024-08-08 8/week @ 2024-08-15 1/week @ 2024-08-22 1/week @ 2024-08-29 40/week @ 2024-09-19 23/week @ 2024-09-26

63 downloads per month
Used in libretrans

MIT license

25KB
374 lines

libretranslate-rs

Crates.io Crates.io API Gitpod ready-to-code GitHub Workflow Status

A LibreTranslate API client for Rust.

libretranslate = "0.5.1"

libretranslate allows you to use open source machine translation in your projects through an easy to use API that connects to the official webpage.

Update for Oct, 2021

As of now, libretranslate.com hasn't implemented rate limiting yet, so you must use an alternate instance or have an API key.

Here are some that work:

You'll need to use a Builder struct or a String method and specify the url to change to an instance that doesn't require an API key.

Basic Example

libretranslate is an async library, so you'll have to use an async runtime like tokio or async-std.

All translations are done through the translate function:

use libretranslate::{translate, Language};

#[tokio::main]
async fn main() {
    let source = Language::French;
    let target = Language::English;
    let input = "Le texte français.";

    let data = translate(source, target, input, None).await.unwrap();

    println!("Input {}: {}", data.source.as_pretty(), data.input);
    println!("Output {}: {}", data.target.as_pretty(), data.output);
}

Output:

Input French: le texte français.
Output English: the French text.

See In Examples Folder

Language Detection

Here's a simple example.

use libretranslate::{translate, Language};

#[tokio::main]
async fn main() {
    let target = Language::English;
    let text = "le texte français.";

    let data = translate(Language::Detect, target, text, None).await.unwrap();

    println!("Input {}: {}", data.source.as_pretty(), data.input);
    println!("Output {}: {}", data.target.as_pretty(), data.output);
}

Output:

Input French: le texte français.
Output English: the French text.

See In Examples Folder

Language Functionality

The Language enum has a lot of functionality so you can create a Language from all sorts of different user inputs.

You can return a &str with the language's name in English using as_pretty(), or the language's code using as_code().

Language also implements FromStr so you can create a Language using text like "en", or "English" (case doesn't matter). You can do this by either using Language::from() or .parse::<Language>().

Here's a simple example.

use libretranslate::Language;

fn main() {
    let lang = Language::English;
    let lang_parse = "english".parse::<Language>().unwrap();

    assert_eq!(lang, lang_parse);
    assert_eq!("en", lang.as_code());
    assert_eq!("English", lang.as_pretty());
}

See In Examples Folder

String Methods

The trait Translate implements AsRef<str>, meaning that any &str or String can be translated into any other language.

Here's a simple example.

use libretranslate::{Language, Translate};

#[tokio::main]
async fn main() {
    let text = "This is text, written on a computer, in English."
        .to_lang(Language::German)
        .from_lang(Language::English)
        .translate()
        .await
        .unwrap();

    println!("output: \"{}\"", text);
}

Output:

Output: "Dies ist Text, geschrieben auf einem Computer, in Englisch."

See In Examples Folder

Available Languages

  • English
  • Arabic
  • Chinese
  • French
  • German
  • Italian
  • Japanese
  • Portuguese
  • Russian
  • Spanish
  • Polish

Dependencies

~7–11MB
~199K SLoC