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)
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