Я работаю над довольно сложной (для меня, во всяком случае) интерполяцией строк с использованием версии 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
И так далее. Все это на самом деле работает, как я ожидаю в этом фрагменте Fluent для игровых площадок . Вы можете go к этому фрагменту и изменить переменные расстояния и длительности, чтобы увидеть, как я ожидаю, что формат изменится.
Тем не менее, когда я go на код 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?