< 返回版块

asuper 发表于 2025-07-15 09:45

Tags:多语言,本地化,Error

正在开发一个工具软件,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。不过总感觉还是有点丑,不知道有没有更好的方法。

评论区

写评论
pama 2025-07-15 20:21

我是这么干的,Error只是返回一个错误码,相当于一个key,拿着这个key根据对应的语言文件里面找消息,消息里面是可以带参数的。

1 共 1 条评论, 1 页