正在开发一个工具软件,UI是用的Slint,是支持多语言的,并且界面部分基本上搞定了,现在面临一个问题,就是各种提示信息、尤其是Error的信息的多语言。我目前用的this_error来定义Error,大概就是这样:
#[derive(Debug, Error)]
pub enum Error {
#[error("Onvif transport error: {0}")]
Transport(schema::transport::Error),
#[error("The camera not support: {0}")]
NotSupport(String),
#[error("Not expect response while {0}: {1}")]
NotExpect(String, String),
#[error("Uri format error: {0}")]
UriFormat(String),
}
原本用this_error定义的Error类型就可以直接print()或者to_string()了,但是在做多语言的时候,就不能直接输出。
我目前想到的一个方法,就是定义一个Trait里面包含一个translate方法,然后给我自定义的Error类型、程序中用到的Error类型都实现这个Trait,在需要输出Error的位置调用该Trait。不过总感觉还是有点丑,不知道有没有更好的方法。
1
共 1 条评论, 1 页
评论区
写评论我是这么干的,Error只是返回一个错误码,相当于一个key,拿着这个key根据对应的语言文件里面找消息,消息里面是可以带参数的。