18 个版本

0.7.0 2023年10月11日
0.6.0 2023年2月1日
0.5.3 2022年8月16日
0.5.2 2022年6月20日
0.0.2 2017年2月17日

#72国际化(i18n)

Download history 16/week @ 2024-03-29 1/week @ 2024-04-05 140/week @ 2024-04-12 3/week @ 2024-04-19 1/week @ 2024-04-26

123 每月下载量

MIT/Apache

26KB
488

twine

Rust Latest Version Docs.rs LOC Dependency Status

使用 Twine 文件格式的国际化库。

用法

  1. 您需要在 [build-dependencies] 中的 Cargo.toml 添加 twine。

  2. 创建(或编辑)您的 build.rs 文件

fn main() {
    println!("cargo:rerun-if-changed=build.rs");
    twine::build_translations(&["translations.ini"], "i18n.rs");
}
  1. 您需要一个包含您翻译的 INI 文件。例如,使用 translations.ini
[app_ruin_the_band]
    en = Ruin a band name by translating it in French
    fr = Ruiner le nom d'un groupe en le traduisant en français
[band_tool]
    en = Tool
    fr = Outil
[band_the_doors]
    en = The Doors
    fr = Les portes
[band_rage_against_the_machine]
    en = Rage Against the Machine
    en-gb = Wrath Against the Machine
    fr = Colère contre la machine
[band_the_jackson_5]
    en = The Jackson 5
    fr = Les 5 fils de Jack
[format_string]
    en = %s, %@!
    fr = %s, %@ !
[format_percentage]
    en = %.0f%
    fr = %.0f %
[format_hexadecimal]
    en = %x
    fr = %#X
  1. 现在在您的项目中,您可以使用宏 t! 来翻译任何内容
// you need to include the generated file somewhere
include!(concat!(env!("OUT_DIR"), "/i18n.rs"));

fn main() {
    // use "" if there is no localization
    let lang = Lang::Fr("be");

    // will output "Ruiner le nom d'un groupe en le traduisant en français"
    t!(app_ruin_the_band => lang);

    // using formatted arguments, this will output "73 %"
    t!(format_percentage, 73.02f32 => lang);
}
  1. 禁用错误的编译器 lint macro_expanded_macro_exports_accessed_by_absolute_paths

这个 rustc lint 不会正常工作,通常会给出错误的正例。您可以通过在 lib.rsmain.rs 的开头添加以下内容来在 crate 级别禁用它

#![allow(macro_expanded_macro_exports_accessed_by_absolute_paths)]

实现说明

所有翻译键必须包含所有键的所有语言。例如,如果所有键都有 enfr 的翻译,如果一个键只有 en,则编译会失败。

可以提供本地化翻译,如果可用,则将使用它。否则,将回退到该语言的默认翻译。

键中的任何拼写错误都会使编译失败。缺少格式参数也会使编译失败。

特性

  • serde:当此特性被激活时,您需要将 serde 添加到您的依赖项中,并且生成的 Lang 枚举实现了 SerializeDeserialize

许可证

本作品采用 Apache 2.0 和 MIT 双许可。如果您使用此作品,可以选择其中之一。

许可证:MIT OR Apache-2.0

依赖项

~2.2–3.5MB
~55K SLoC