如何在源代码之外存储格式字符串模板?

Ged*_*web 8 format rust

翻译时,消息可以采用不同的语言并具有格式参数。我希望能够在模板可以存储在文件中的情况下执行此操作:

static PATTERN: &'static str = r"Hello {inner};";

/// in some implementation

fn any_method(&self) -> String {
    format!(PATTERN, inner = "world");
}
Run Code Online (Sandbox Code Playgroud)

Ten*_*ken 4

使用include_str自 1.0.0 版本以来标准库中提供的宏,这绝对是可能的,而且很简单。以下示例是使用rustc1.58.1 进行测试的:

这是有效的,因为在、、 和朋友有机会评估他们的参数include_str之前将模板文件的内容作为字符串文字注入。仅当您想要包含的格式模板在宏扩展期间可用时,此方法才有效 - 就像您的示例中一样。如果不是,那么您应该考虑其他选项,例如@DK建议的选项。printlnformat

作为额外的好处:您还可以通过将格式字符串定义为宏,在使用格式字符串的站点以外的源代码位置中定义格式字符串。