Skip to main content

runtime_compile/
runtime_compile.rs

1use ferrocat::{
2    CompileCatalogArtifactOptions, NormalizedParsedCatalog, ParseCatalogOptions,
3    compile_catalog_artifact, parse_catalog,
4};
5
6fn catalog(
7    content: &str,
8    locale: &str,
9) -> Result<NormalizedParsedCatalog, Box<dyn std::error::Error>> {
10    Ok(
11        parse_catalog(ParseCatalogOptions::new(content, "en").with_locale(locale))?
12            .into_normalized_view()?,
13    )
14}
15
16fn main() -> Result<(), Box<dyn std::error::Error>> {
17    let source = catalog(
18        "msgid \"Checkout\"\nmsgstr \"Checkout\"\n\nmsgid \"Cart\"\nmsgstr \"Cart\"\n",
19        "en",
20    )?;
21    let german = catalog("msgid \"Checkout\"\nmsgstr \"Zur Kasse\"\n", "de")?;
22
23    let options = CompileCatalogArtifactOptions::new("de", "en").with_source_fallback(true);
24    let artifact = compile_catalog_artifact(&[&source, &german], &options)?;
25
26    assert_eq!(artifact.messages.len(), 2);
27    assert_eq!(artifact.missing.len(), 1);
28    assert!(artifact.messages.values().any(|value| value == "Zur Kasse"));
29    assert!(artifact.messages.values().any(|value| value == "Cart"));
30
31    for (key, value) in &artifact.messages {
32        println!("{key} = {value}");
33    }
34
35    Ok(())
36}