| Crates.io | vacro-doc-i18n |
| lib.rs | vacro-doc-i18n |
| version | 0.1.1 |
| created_at | 2025-12-18 09:42:58.025971+00 |
| updated_at | 2026-01-06 14:20:05.313754+00 |
| description | Doc i18n filter for Rustdoc/IDE via #[doc_i18n]. |
| homepage | |
| repository | https://github.com/FeVeR-Store/vacro |
| max_upload_size | |
| id | 1992058 |
| size | 22,259 |
Multi-language Rustdoc (i18n) support via a lightweight attribute macro.
vacro-doc-i18n 是一个 过程宏 crate,用于在 Rust 文档注释(/// / #[doc])中支持多语言内容,并在编译期根据 Cargo feature 自动裁剪文档语言,从而同时兼顾:
基于 属性宏 #[doc_i18n]
文档语言选择 完全由 Cargo feature 决定
支持两种文档写法:
编译期处理,输出仍是标准 #[doc = "..."]
对 rustdoc / rust-analyzer / docs.rs 透明
[dependencies]
vacro-doc-i18n = "0.1"
选择文档语言(示例):
vacro-doc-i18n = { version = "0.1", features = ["doc-cn"] }
| Feature | 说明 |
|---|---|
doc-en |
英文文档(默认) |
doc-cn |
中文文档 |
doc-all |
保留所有语言文档(用于 docs.rs) |
Feature 是 构建级别选择,不是宏参数。
在需要处理多语言文档的 item 上添加 #[doc_i18n]:
use vacro_doc_i18n::doc_i18n;
#[doc_i18n]
/// ...
pub struct Capture;
#[doc_i18n]
/// <div class="doc-cn">
/// 即时解析宏:在现有解析逻辑中快速消费 `TokenStream`
/// </div>
/// <div class="doc-en">
/// On-the-fly parsing macro: quickly consume a `TokenStream`
/// </div>
pub struct Capture;
规则:
<div class="doc-xx"> 必须独占一行</div> 必须独占一行class 中包含 doc-<lang> 的 div#[doc_i18n]
/// <div class="doc-cn"> 即时解析宏:快速消费 TokenStream </div>
/// <div class="doc-en"> On-the-fly parsing macro </div>
pub struct Capture;
inner doc将被解析到外层模块(此处的parser)
#[cfg(feature = "parser")]
pub mod parser {
#[doc_i18n]
//! <div class="doc-en"> Declarative parsing tools. </div>
//! <div class="doc-cn"> 声明式解析工具。 </div>
pub use vacro_parser::*;
}
规则:
<div> 标签doc-all在 生成文档的 crate(如 vacro)中:
[features]
doc-en = ["vacro-doc-i18n/doc-en"]
doc-cn = ["vacro-doc-i18n/doc-cn"]
doc-all = ["vacro-doc-i18n/doc-all"]
[dependencies]
vacro-doc-i18n = { version = "0.1" }
[package.metadata.docs.rs]
features = ["doc-all"]
<div class="doc-xx"> ... </div> 结构doc-endoc-cnLicensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.