pub struct TextDomain { /* private fields */ }Expand description
A builder to configure gettext.
It searches translations in the system data paths and optionally in the user-specified paths,
and binds them to the given domain. TextDomain takes care of calling setlocale,
bindtextdomain, bind_textdomain_codeset, and textdomain for you.
§Defaults
bind_textdomain_codesetis called by default to set UTF-8. You can usecodesetto override this, but please bear in mind that other functions in this crate require UTF-8.- Current user’s locale is selected by default. You can override this behaviour by calling
locale. LocaleCategory::LcMessagesis used when callingsetlocale. Uselocale_categoryto override.- System data paths are searched by default (see below for details). Use
skip_system_data_pathsto limit the search to user-provided paths.
§Text domain path binding
A translation file for the text domain is searched in the following paths (in order):
- Paths added using the
prependfunction. - Paths from the
XDG_DATA_DIRSenvironment variable, except if the functionskip_system_data_pathswas invoked. IfXDG_DATA_DIRSis not set, or is empty, the default of “/usr/local/share/:/usr/share/” is used. - Paths added using the
pushfunction.
For each path in the search paths, the following subdirectories are scanned:
path/locale/lang*/LC_MESSAGES (where lang is the language part of the selected locale).
The first path containing a file matching domainname.mo is used for the call to
bindtextdomain.
§Examples
Basic usage:
use gettextrs::TextDomain;
TextDomain::new("my_textdomain").init()?;Use the translation in current language under the target directory if available, otherwise
search system defined paths:
use gettextrs::TextDomain;
TextDomain::new("my_textdomain")
.prepend("target")
.init()?;Scan the target directory only, force locale to fr_FR and handle errors:
use gettextrs::{TextDomain, TextDomainError};
let init_msg = match TextDomain::new("my_textdomain")
.skip_system_data_paths()
.push("target")
.locale("fr_FR")
.init()
{
Ok(locale) => {
format!("translation found, `setlocale` returned {:?}", locale)
}
Err(error) => {
format!("an error occurred: {}", error)
}
};
println!("Textdomain init result: {}", init_msg);Implementations§
Source§impl TextDomain
impl TextDomain
Sourcepub fn new<S: Into<String>>(domainname: S) -> TextDomain
pub fn new<S: Into<String>>(domainname: S) -> TextDomain
Creates a new instance of TextDomain for the specified domainname.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain");Sourcepub fn locale(self, locale: &str) -> Self
pub fn locale(self, locale: &str) -> Self
Override the locale for the TextDomain. Default is to use current locale.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain")
.locale("fr_FR.UTF-8");Sourcepub fn locale_category(self, locale_category: LocaleCategory) -> Self
pub fn locale_category(self, locale_category: LocaleCategory) -> Self
Override the locale_category. Default is LocaleCategory::LcMessages.
§Examples
use gettextrs::{LocaleCategory, TextDomain};
let text_domain = TextDomain::new("my_textdomain")
.locale_category(LocaleCategory::LcAll);Sourcepub fn codeset<S: Into<String>>(self, codeset: S) -> Self
pub fn codeset<S: Into<String>>(self, codeset: S) -> Self
Define the codeset that will be used for calling bind_textdomain_codeset. The default
is “UTF-8”.
Warning: other functions in this crate require UTF-8.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain")
.codeset("KOI8-R");Sourcepub fn prepend<P: Into<PathBuf>>(self, path: P) -> Self
pub fn prepend<P: Into<PathBuf>>(self, path: P) -> Self
Prepend the given path to the search paths.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain")
.prepend("~/.local/share");Sourcepub fn push<P: Into<PathBuf>>(self, path: P) -> Self
pub fn push<P: Into<PathBuf>>(self, path: P) -> Self
Push the given path to the end of the search paths.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain")
.push("test");Sourcepub fn skip_system_data_paths(self) -> Self
pub fn skip_system_data_paths(self) -> Self
Don’t search for translations in the system data paths.
§Examples
use gettextrs::TextDomain;
let text_domain = TextDomain::new("my_textdomain")
.push("test")
.skip_system_data_paths();Sourcepub fn init(self) -> Result<Option<Vec<u8>>, TextDomainError>
pub fn init(self) -> Result<Option<Vec<u8>>, TextDomainError>
Search for translations in the search paths, initialize the locale, set up the text domain and ask gettext to convert messages to UTF-8.
Returns an Option with the opaque string that describes the locale set (i.e. the result
of setlocale) if:
- a translation of the text domain in the requested language was found; and
- the locale is valid.
§Examples
use gettextrs::TextDomain;
TextDomain::new("my_textdomain").init()?;