#yew #ui #gettext

gettr

Rust 和 yew 的国际化框架

1 个不稳定版本

0.0.2 2023 年 11 月 10 日
0.0.1 2023 年 11 月 10 日

#155国际化(i18n)

MIT 许可证

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 功能,您可以使用提供的 GettrContextuse_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