#本地化 #文本翻译 #gettext

翻译

Rust应用程序本地化(文本翻译)库

3个稳定版本

1.0.2 2020年9月18日

#199国际化 (i18n)

MIT/Apache

7KB
143

翻译

Crates.io Version Docs.rs Version License License

Rust应用程序本地化(文本翻译)库。

特性

  • 自动检测用户的区域设置(Windows,Unix)。

  • 体积小 - 不依赖于 regex(如 locale_config 所做的那样)。

  • 本地化文件嵌入在二进制文件中。

  • 它首先在文件系统中查找本地化文件,因此可以添加新的本地化文件而无需重新编译应用程序。

  • 它与 cargo-i18n 结合得很好。

最小示例

use translation::{tr_init, tr};

#[derive(rust_embed::RustEmbed)]
#[folder = "i18n/mo"]
struct Translations;

fn main() {
    tr_init!("locale", Translations);

    println!("{}", tr!("Hello, world!"));
}

来自 i18n/mo 源文件夹的文件嵌入到可执行文件中。宏 tr_init! 按以下顺序查找(

  • locale/{lang}/LC_MESSAGES/{module_name}.mo 在文件系统中
  • locale/{lang}/{module_name}.mo 在文件系统中
  • {lang}/LC_MESSAGES/{module_name}.mo 在嵌入的 Translations 结构中
  • {lang}/{module_name}.mo 在嵌入的 Translations 结构中

在应用程序可执行文件相对于的 locale 文件夹中查找。

依赖项

当前解决方案依赖于以下crates

  • tr - tr!
  • gettext - Rust中的gettext重实现
  • rust_embed - 将区域嵌入到可执行文件中

该软件包的诞生是因为在编写时,tr 软件包(版本 0.1.3)在使用 gettext 软件包时缺少了 tr_init! 宏。而不是为 tr 软件包创建拉取请求,我开始尝试创建一个新的软件包并嵌入翻译文件。未来我计划也支持直接读取 .po 文件(因此不需要编译 .po 文件)。

用法

注意。本说明使用 cargo-i18 工具。请参阅 https://github.com/kellpossible/cargo-i18n 获取更多信息。

配置步骤

安装所需工具

cargo install xtr
cargo install cargo-i18n

将以下内容添加到您的 Cargo.toml 依赖项中

translation = "1"

在您的软件包根目录中创建一个 i18n.toml 文件

fallback_language = "en"

[gettext]
target_languages = ["pl"]
output_dir = "i18n"

运行 cargo i18n 工具

cargo i18n

它会扫描代码并创建和更新本地化文件。您可以在需要更新本地化文件或编译 po 文件时运行它。

依赖项

~5–12MB
~111K SLoC