1 个不稳定版本
0.0.2 | 2023 年 11 月 10 日 |
---|---|
0.0.1 |
|
#155 在 国际化(i18n)
12KB
250 行
gettr
gettr 是一个 Rust 国际化框架。
它的初始目标是支持 yew 应用的国际化。
入门指南
将 gettr 添加为依赖项和构建依赖项。
[dependencies]
gettr = "0.0.1"
[build-dependencies]
gettr = "0.0.1"
在 build.rs
中添加构建步骤
use std::path::PathBuf;
pub fn main() -> std::io::Result<()> {
gettr::update_translations(
// list all languages you want to support here
// each language will create a file in the destination directory
vec!["de"],
// The directory to search for message to translate
PathBuf::from("src"),
// destination directory
PathBuf::from("src/i18n")
)?;
Ok(())
}
build.rs
use gettr
pub fn main() {
// init gettr once at start
gettr::init("en", vec![
("de", include_str!("i18n/de"))
]);
// print a message based on the language
// gettr! can handle {} placeholders ATM
println!("{}", gettr::gettr!("Hello World! {}", 18));
}
src/main.rs
gettr 将搜索 src
目录下的所有文件,并查找对 gettr!
宏的调用。默认语言用作翻译键和回退。对于每个调用,都会在 src/i18n
中生成一个翻译文件。在这种情况下,将生成以下文件
// This file is generated and automatically updated by gettr.
// Values set to keys will be kept on updates.
// src/main.rs#8
"Hello World! {}" = ""
src/i18n/de
您可以在该文件中维护 Hello World!
的翻译。每次构建时都会自动更新。将保留现有键。如果维护的键在代码中找不到,则将其删除。
yew 集成
使用 yew
功能,您可以使用提供的 GettrContext
和 use_gettr
将 gettr 集成到您的 yew 客户端中。
use routing::Routing;
use yew::{function_component, html, Html};
use gettr::GettrProvider;
fn main() {
gettr::init("en", vec![
("de", include_str!("i18n/de"))
]);
yew::Renderer::<App>::new().render();
}
#[function_component(App)]
pub fn app() -> Html {
html! {
<GettrProvider>
<Home></Home>
</GettrProvider>
}
}
use gettr::{use_gettr, gettr};
#[function_component(Home)]
pub fn home() -> Html {
use_gettr() // call the hook to ensure your component updates when the language is changed
html! {
<div>
{gettr!("Hello World!")}
</div>
}
}
限制
格式化
gettr 使用正则表达式在代码中查找 regex!
调用。这意味着它不能很好地处理在一行以上格式化这些调用。
好的
gettr!("This is an example {}", 124);
坏
gettr!(
"This is an example {}",
124
);
占位符
Rust 的 fmt 宏允许命名参数。gettr 目前无法处理它们。
复数
gettr 除了手动指定之外,不支持其他复数形式。
依赖项
~2.1–6MB
~108K SLoC