8 releases

0.4.4 Sep 22, 2019
0.4.3 Aug 16, 2019
0.4.2 Jul 26, 2019
0.4.1 Aug 17, 2018
0.1.0 Feb 2, 2016

#5 in Internationalization (i18n)

Download history 290/week @ 2019-12-02 379/week @ 2019-12-09 821/week @ 2019-12-16 1026/week @ 2019-12-23 488/week @ 2019-12-30 707/week @ 2020-01-06 745/week @ 2020-01-13 1131/week @ 2020-01-20 873/week @ 2020-01-27 1074/week @ 2020-02-03 1648/week @ 2020-02-10 1158/week @ 2020-02-17 400/week @ 2020-02-24 496/week @ 2020-03-02 937/week @ 2020-03-09 1602/week @ 2020-03-16

2,479 downloads per month
Used in 6 crates (3 directly)

MIT license

516 lines


GNU Gettext FFI binding for Rust


gettext-rs: https://crates.io/crates/gettext-rs Docs

gettext-sys: https://crates.io/crates/gettext-sys Docs


 use gettextrs::*;
 setlocale(LocaleCategory::LcAll, "en_US.UTF-8");
 bindtextdomain("hellorust", "/usr/local/share/locale");
 println!("Translated: {}", gettext("Hello, world!"));
 println!("Singular: {}", ngettext("One thing", "Multiple things", 1));
 println!("Plural: {}", ngettext("One thing", "Multiple things", 2));
 println!("With context: {}", pgettext("This is the context", "Hello, world!"));
 println!("Plural with context: {}", npgettext("This is the context", "One thing", "Multiple things", 2));

Alternatively, you can initialize the locale and text domain using the TextDomain builder. By default, a translation of the specified text domain in current language is searched in the system's data paths. See TextDomain's documentation for other options.

use gettextrs::TextDomain;


Manual configuration

gettext.rs's build script will by default build its own version of gettext and statically link against that. If that is not what you want the build script can be configured via environment variables:

GETTEXT_SYSTEM - If specified gettext-sys uses the gettext that is part of glibc. This only works on linux and Windows + GNU (e.g. MSYS2). On Windows, you will need to install gettext-devel. You can also activate the gettext-system feature from your Cargo.toml configuration:

gettext-rs = { git = "https://github.com/Koka/gettext-rs", features = ["gettext-system"] }

GETTEXT_DIR - If specified, a directory that will be used to find gettext installation. It's expected that under this directory the include folder has header files, the bin folder has gettext binary and a lib folder has the runtime libraries.

GETTEXT_LIB_DIR - If specified, a directory that will be used to find gettext libraries. Overrides the lib folder implied by GETTEXT_DIR (if specified).

GETTEXT_INCLUDE_DIR - If specified, a directory that will be used to find gettext header files. Overrides the include folder implied by GETTEXT_DIR (if specified).

GETTEXT_BIN_DIR - If specified, a directory that will be used to find gettext binaries. Overrides the bin folder implied by GETTEXT_DIR (if specified).

GETTEXT_STATIC - If specified, gettext libraries will be statically rather than dynamically linked.

For target-specific configuration, each of these environment variables can be prefixed by an upper-cased target, for example, X86_64_UNKNOWN_LINUX_GNU_GETTEXT_DIR. This can be useful in cross compilation contexts.

Note: on Windows + GNU, if you want to build gettext-rs with its own static version of getttext, install the following packages first:

pacman --noconfirm -S base-devel mingw-w64-x86_64-gcc libxml2-devel tar

The build is quite long. You can speed things up by setting (e.g. for 4 cores):

export NUM_JOBS=5

This doesn't work on AppVeyor ATM. Use SET GETTEXT_SYSTEM=true instead.


~45K SLoC