///|
/// Translation maintenance renames only a typed symbol and its references.
/// Identical words in human text, variable names and comments are not replaced.
fn main {
let input = "# old must remain a comment\nold = 你好 { $old }\nuse = { old } / old stays text\n"
let root = @ftl.parse(input)
let renamed = match root.rename_symbol(@ftl.MessageSymbol, "old", "welcome") {
Ok(n) => n
Err(_) => abort("rename rejected")
}
let output = @ftl.serialize_checked(renamed) catch {
_ => abort("unsafe output")
}
if !output.contains("# old must remain a comment") ||
!output.contains("{ $old }") ||
!output.contains("{ welcome }") ||
!output.contains("old stays text") {
abort("rename changed the wrong token")
}
let reparsed = @ftl.parse(output)
let catalog = match @ftl.Catalog::build(reparsed) {
Ok(c) => c
Err(_) => abort("catalog failed")
}
if catalog.find(@ftl.MessageSymbol, "welcome").length() != 1 ||
!catalog.missing_references().is_empty() {
abort("roundtrip integrity failed")
}
println(output)
println("translation: definition and reference renamed; text preserved")
}