#proc-macro #国际化 #实验性 #nightly

nightly 玛乌兹伊

实验性国际化库,使用 proc-macros

2 个版本

使用旧 Rust 2015

0.0.2 2017 年 9 月 2 日
0.0.1 2017 年 8 月 26 日

2123Rust 模式

每月 40 次下载

MIT/Apache

14KB
184

玛乌兹伊

帮助进行国际化的库。WIP。仅限 nightly:使用 proc_macros

状态

这个库非常新,并且远未完成。请注意,我对国际化一无所知,并且以前从未使用过 i18n 库。我开发这个库是因为我需要为我的一个网络项目做类似的事情。这个网络项目将推动这个库的开发:在实际项目中使用库的经验对塑造这个库的 API 非常有帮助。

预防问题,加倍努力(一长串的肮脏技巧)

目前这个库就像 Rust-1.0 时代用 flerovium 做的纸牌屋一样不稳定。部分原因是我对某些事情缺乏了解,部分原因是 proc_macro 功能不完整和不稳定。在这里,我想列出我现在使用的所有邪恶技巧。

模拟模块系统

我无法将 mauzi-modules 映射到 Rust 模块。问题在于,从子模块中,我需要使用在根模块中定义的 Dict。在理论上听起来很简单,但鉴于宏卫生(我认为?),这很复杂。几乎没有任何 use 语句按预期工作。也许一旦 这个 落地,也许不会。我在 这里 对类似的事情做了另一条评论。也许已经可以做到,但我找不到解决方案。

目前的解决方案是为子模块中的类型构建长名称。所以,而不是

dict::bar::baz::Dict

... 类型是

dict::bar___this_is_a_bad_solution___baz___this_is_a_bad_solution___Dict

加载子模块文件

proc宏无法确定它在哪个文件中被调用。这意味着我们不知道在哪里查找子模块文件!这一点在 这里 进行了讨论。

目前的解决方案使用 CARGO_MANIFEST_PATH 并添加 src/。这意味着

  • 必须在位于 src/ 文件夹中的文件中调用 mauzi! 宏。
  • 不在 src/ 中的任何项目都不会正常工作(例如,在 examples/ 中的示例)

许可

根据您的选择,许可为以下之一

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,没有任何额外条款或条件。

依赖项

~31KB