Skip to main content

release_audit/
release_audit.rs

1use ferrocat::{CatalogAuditOptions, NormalizedParsedCatalog, ParseCatalogOptions, audit_catalogs};
2
3fn catalog(
4    content: &str,
5    locale: &str,
6) -> Result<NormalizedParsedCatalog, Box<dyn std::error::Error>> {
7    Ok(ferrocat::parse_catalog(ParseCatalogOptions {
8        content,
9        locale: Some(locale),
10        source_locale: "en",
11        ..ParseCatalogOptions::new("", "en")
12    })?
13    .into_normalized_view()?)
14}
15
16fn main() -> Result<(), Box<dyn std::error::Error>> {
17    let source = catalog("msgid \"Checkout\"\nmsgstr \"Checkout\"\n", "en")?;
18    let target = catalog("msgid \"Checkout\"\nmsgstr \"\"\n", "de")?;
19
20    let report = audit_catalogs(&[&source, &target], &CatalogAuditOptions::new("en"))?;
21
22    assert!(report.has_errors());
23    assert!(
24        report
25            .diagnostics
26            .iter()
27            .any(|diagnostic| diagnostic.code == "catalog.empty_translation")
28    );
29
30    for diagnostic in &report.diagnostics {
31        println!("{}: {}", diagnostic.code, diagnostic.message);
32    }
33
34    Ok(())
35}