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(parse_catalog(ParseCatalogOptions {
11        content,
12        locale: Some(locale),
13        source_locale: "en",
14        ..ParseCatalogOptions::new("", "en")
15    })?
16    .into_normalized_view()?)
17}
18
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20    let source = catalog(
21        "msgid \"Checkout\"\nmsgstr \"Checkout\"\n\nmsgid \"Cart\"\nmsgstr \"Cart\"\n",
22        "en",
23    )?;
24    let german = catalog("msgid \"Checkout\"\nmsgstr \"Zur Kasse\"\n", "de")?;
25
26    let options = CompileCatalogArtifactOptions {
27        source_fallback: true,
28        ..CompileCatalogArtifactOptions::new("de", "en")
29    };
30    let artifact = compile_catalog_artifact(&[&source, &german], &options)?;
31
32    assert_eq!(artifact.messages.len(), 2);
33    assert_eq!(artifact.missing.len(), 1);
34    assert!(artifact.messages.values().any(|value| value == "Zur Kasse"));
35    assert!(artifact.messages.values().any(|value| value == "Cart"));
36
37    for (key, value) in &artifact.messages {
38        println!("{key} = {value}");
39    }
40
41    Ok(())
42}