#gettext #internationalization #proc-macro

i18n-format

一个简单的过程宏,允许 gettext! 和 xgettext 一起工作

2个不稳定版本

0.2.0 2023年1月22日
0.1.0 2023年1月21日

#576 in 过程宏

Download history 90/week @ 2024-03-14 199/week @ 2024-03-21 133/week @ 2024-03-28 124/week @ 2024-04-04 320/week @ 2024-04-11 136/week @ 2024-04-18 66/week @ 2024-04-25 148/week @ 2024-05-02 256/week @ 2024-05-09 330/week @ 2024-05-16 360/week @ 2024-05-23 174/week @ 2024-05-30 344/week @ 2024-06-06 615/week @ 2024-06-13 471/week @ 2024-06-20 386/week @ 2024-06-27

1,850 每月下载量

MIT 许可证

6KB

国际化格式化

xgettext 用于从源文件中提取字符串。不幸的是,它不支持Rust。 补丁自2019年以来一直处于审核状态

幸运的是,它几乎可以与Rust一起工作。您可以指定关键字 gettext 或您使用的任何别名(我通常使用 i18n),但是要使用格式化版本 gettext!,它不起作用,因为 !

这个crate提供包装宏,以便可以使用 gettextrs::gettext!gettextrs::ngettext!,以便 xgettext 可以找到 .po 文件中的字符串,因为它不支持带 ! 的关键字。将 i18n_fmti18n_nfmt 作为 xgettext 调用的关键字,然后像这样编写您的格式化gettext调用:

use i18n_format::i18n_fmt;

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

相当于

use gettextrs::gettext;

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

但是字符串将被提取。

i18n_fmt 只是在块中作为 i18n_fmt! 的占位符,它将被替换为对 gettext! 的调用。要调用 ngettext!,只需在宏内部使用 i18n_nfmt 作为占位符。

Meson支持

此crate最初用于与meson构建的gtk-rs应用程序一起使用。如果您使用常规的 gtk-rust-template,国际化支持主要已设置。 po/meson.build 文件应包含如下部分

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

只需将以下内容添加到 i18n.gettext 函数的参数中

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

如果 args 已存在,只需将项目添加到列表中。

许可证

本软件包采用 MIT 许可证授权。

作者:Hubert Figuière [email protected]

依赖项

约10MB
约61K SLoC