i18n-format

Crates.ioi18n-format
lib.rsi18n-format
version0.2.0
sourcesrc
created_at2023-01-21 17:18:34.508919
updated_at2023-01-22 16:10:32.958648
descriptionA simple proc-macro to allow gettext! and xgettext to work together
homepage
repositoryhttps://github.com/hfiguiere/i18n-format
max_upload_size
id764466
size8,472
Hubert Figuière (hfiguiere)

documentation

https://docs.rs/i18n-format/

README

i18n-format

xgettext is used to extract strings from source files. Unfortunately it doesn't support Rust. The patch has been stuck in review since 2019.

Fortunately it almost work with Rust. You can specify the keyword gettext or whatever alias you use (I usually use i18n), but to use the formatting version gettext! it doesn't work because of the !.

This crate provide wrapper macros to use [gettextrs::gettext!] and [gettextrs::ngettext!] in a way that allow xgettext to find strings for .po files as it doesn't support a keyword with a !. Specify i18n_fmt and i18n_nfmt as keywords for calls to xgettext, and then write your formatting gettext call like this:

use i18n_format::i18n_fmt;

let number = 1;
let s = i18n_fmt! {
    i18n_fmt("This is number {}, make it so !", number)
};

is equivalent to

use gettextrs::gettext;

let number = 1;
let s = gettext!("This is number {}, make it so !", number);

But the string will be extracted.

i18n_fmt is just a placeholder in the block for i18n_fmt!, and it will be replaced by a call to gettext!. To call ngettext! just use i18n_nfmt as a placeholder inside the macro.

Meson support

The original use of this crate is with gtk-rs apps built with meson. If you use the regular gtk-rust-template, internationalization support is mostly setup. The po/meson.build file should contain a section like this:

i18n.gettext(gettext_package, preset: 'glib')

Just add to the args the following to the i18n.gettext function:

  args [
    '--keyword=i18n_fmt',
    '--keyword=i18n_nfmt:1,2'
  ]

If args already exist, just add the items to the list.

License

This crate is licensed under the MIT license.

Author: Hubert Figuière hub@figuiere.net

Commit count: 14

cargo fmt