runtime_compile/
runtime_compile.rs1use 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}