#本地化 #语言 #应用 #

lingo_lib

快速简单地国际化 Rust 程序并翻译字符串。使任何软件都能支持多种语言

4 个版本

0.2.2 2023年8月9日
0.2.1 2022年12月20日
0.2.0 2022年12月20日
0.1.0 2022年12月20日

#116国际化 (i18n)

MIT 许可证

36KB
1K SLoC

lingo

快速简单地国际化 Rust 程序并翻译字符串。使任何软件都能支持多种语言

安装

在您的 "Cargo.toml" 文件中

[dependencies]
lingo_lib = "*"

crates.io 上检查当前版本。

不幸的是,crate "lingo" 已经存在于 crates.io。等待获取名称,注意不要导入 "lingo",而是 "lingo_lib"。

如何使用

let mut lingo = lingo![
    (
        "<identifier>", 
        strings![
            s!("<locale>", "<translation>"),
            s!("<locale>", "<translation>")
            // ...
        ]
    )
    // ...
];

// If not set, it's the operating system locale that will be used.
lingo.set_context_locale(/* app locale */);
// If not set, it's `locale!("en")`.
lingo.set_default_locale(/* locale */);

println!("{}", lingo.string("<identifier>").unwrap());
  • 地区

    locale!("en"); // English (no country code)
    locale!("en_US"); // English (United States)
    
    Locale::from_string("en_US", '_'); // English (United States)
    Locale::from_string("en-US", '-'); // English (United States)
    
    // English (no country code)
    Locale(Language::new(LanguageCode::en), CountryCode::None);
    // English (United States) 
    Locale(Language::new(LanguageCode::en), CountryCode::US);
    

示例

一个使用 lingo 的法语应用程序。

struct MyFrenchApp {
    lingo: Lingo,
}

impl MyFrenchApp {
    pub fn new() -> Self {
        Self { 
            lingo: Self::init_lingo()
        }
    }

    pub fn run(&self) {
        println!("{}", self.lingo.string("welcome").unwrap());
    } 
}

impl LingoApp for MyFrenchApp {
    fn init_lingo() -> Lingo {
        let mut lingo = lingo![
            (
                "welcome", 
                strings![
                    s!("fr", "bienvenue sur l'app !"),
                    s!("en", "welcome to the app!")
                    // ...
                ]
            )
            // ...
        ];

        lingo.set_context_locale(locale!("fr_FR"));
        lingo
    }

    fn lingo(&self) -> &Lingo {
        &self.lingo
    }
}

fn main() {
    let app = MyFrenchApp::new();
    
    println!("{}", app.lingo().string("welcome").unwrap());
    
    app.run();
}
bienvenue sur l'app !
bienvenue sur l'app !
示例的导入
use lingo_lib::{ lingo, locale, strings, s };
use lingo_lib::{ Lingo, LingoApp };
use lingo_lib::locales::Locale;

依赖项

~1–13MB
~116K SLoC