【问题标题】:Matching None and absent values with the Rust implementation of Project Fluent使用 Project Fluent 的 Rust 实现匹配 None 和缺失值
【发布时间】:2020-04-02 03:01:04
【问题描述】:

我正在使用 Fluent 的 Rust 版本进行相当复杂的(无论如何对我而言)字符串插值。

首先,涉及的技术:

https://projectfluent.org/

https://github.com/projectfluent/fluent-rs/(版本 0.11.0)

这个翻译有四个参数:活动、距离、持续时间和单位系统。我想根据这四个中的哪一个实际存在来输出格式略有不同的字符串。比如说……

⁨⁨25⁩ miles⁩ of ⁨biking⁩ in ⁨52⁩ minutes
52⁩ minutes of ⁨biking⁩
⁨⁨25⁩ miles⁩ of ⁨biking⁩

等等。所有这些实际上都像我在this Fluent playground snippet 中所期望的那样工作。您可以转到该 sn-p 并更改尤其是距离和持续时间变量,以查看我希望格式如何更改。

但是,当我转到 Rust 代码时(将消息 DSL 复制并粘贴到我的翻译文件中),我得到的结果却大不相同:

{"distance": String("10.00"), "duration": String("52:00"), "units": String("USA"), "activity": String("Cycling")}
biking

{"units": String("USA"), "distance": String("10.00"), "activity": String("Cycling")}
biking

{"distance": String("10.00"), "activity": String("Cycling"), "units": String("SI")}
biking

{"activity": String("Walking"), "duration": String("52:00")}
walking

{"activity": String("Cycling")}
biking

基本上,每个插值都默认为默认分支,实际上根本不是模式匹配。

我是否误解了项目流式模式匹配,或者我可能在 Rust 实现中遇到了错误?

【问题讨论】:

    标签: rust internationalization project-fluent


    【解决方案1】:

    我原以为这是一个错误,所以我 filed it 反对 fluent-rs 项目。事实证明这不是项目中的错误,而是我如何注入数据的错误。并且滥用了模式匹配。

    作者的回复有很多很好的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多