From c89c12d7ca0141d1fad50757e5f87218f4276f8d Mon Sep 17 00:00:00 2001 From: PlexSheep Date: Sat, 9 Mar 2024 00:08:17 +0100 Subject: [PATCH] more fluent --- Cargo.lock | 139 ++++++++++++++++++ Cargo.toml | 4 +- members/fluent-demo/Cargo.toml | 10 ++ members/fluent-demo/src/main.rs | 46 ++++++ members/{fluent => fluent-webserv}/Cargo.toml | 2 +- .../{fluent => fluent-webserv}/src/main.rs | 0 6 files changed, 198 insertions(+), 3 deletions(-) create mode 100644 members/fluent-demo/Cargo.toml create mode 100644 members/fluent-demo/src/main.rs rename members/{fluent => fluent-webserv}/Cargo.toml (86%) rename members/{fluent => fluent-webserv}/src/main.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 1e656da..1018137 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -535,6 +535,17 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "drain_filter_polyfill" version = "0.1.3" @@ -582,6 +593,58 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fluent" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7" +dependencies = [ + "fluent-bundle", + "unic-langid", +] + +[[package]] +name = "fluent-bundle" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash", + "self_cell 0.10.3", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-demo" +version = "0.1.0" +dependencies = [ + "fluent", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78" +dependencies = [ + "thiserror", +] + [[package]] name = "fnv" version = "1.0.7" @@ -962,6 +1025,25 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" +[[package]] +name = "intl-memoizer" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + [[package]] name = "inventory" version = "0.3.15" @@ -1632,6 +1714,12 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustix" version = "0.38.31" @@ -1693,6 +1781,21 @@ dependencies = [ "syn 2.0.52", ] +[[package]] +name = "self_cell" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" +dependencies = [ + "self_cell 1.0.3", +] + +[[package]] +name = "self_cell" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" + [[package]] name = "serde" version = "1.0.197" @@ -2013,6 +2116,15 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece" +dependencies = [ + "displaydoc", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -2223,6 +2335,15 @@ dependencies = [ "utf-8", ] +[[package]] +name = "type-map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46" +dependencies = [ + "rustc-hash", +] + [[package]] name = "typed-builder" version = "0.15.2" @@ -2255,6 +2376,24 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +[[package]] +name = "unic-langid" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6" +dependencies = [ + "tinystr", +] + [[package]] name = "unicase" version = "2.7.0" diff --git a/Cargo.toml b/Cargo.toml index 5f2fb0f..d8dffce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,11 +20,11 @@ members = [ "members/claptest", "members/rest", "members/rest-queued", - "members/fluent", + "members/fluent-demo", "members/fluent-webserv", ] default-members = [ ".", - "members/fluent", + "members/fluent-demo", "members/echargs", "members/revsqrt", "members/claptest", diff --git a/members/fluent-demo/Cargo.toml b/members/fluent-demo/Cargo.toml new file mode 100644 index 0000000..16dbb2d --- /dev/null +++ b/members/fluent-demo/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "fluent-demo" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +fluent = "0.16.0" +unic-langid = "0.9.4" diff --git a/members/fluent-demo/src/main.rs b/members/fluent-demo/src/main.rs new file mode 100644 index 0000000..17bb825 --- /dev/null +++ b/members/fluent-demo/src/main.rs @@ -0,0 +1,46 @@ +// shamelessly stolen from https://docs.rs/fluent/latest/fluent/index.html + +use fluent::{FluentArgs, FluentBundle, FluentResource, FluentValue}; +// Used to provide a locale for the bundle. +use unic_langid::LanguageIdentifier; + +fn main() { + let ftl_string = String::from( + " +hello-world = Hello, world! +intro = Welcome, { $name }. +", + ); + let res = FluentResource::try_new(ftl_string).expect("Failed to parse an FTL string."); + + let langid_en: LanguageIdentifier = "en-US".parse().expect("Parsing failed"); + let mut bundle = FluentBundle::new(vec![langid_en]); + + bundle + .add_resource(res) + .expect("Failed to add FTL resources to the bundle."); + + let msg = bundle + .get_message("hello-world") + .expect("Message doesn't exist."); + let mut errors = vec![]; + let pattern = msg.value().expect("Message has no value."); + let value = bundle.format_pattern(&pattern, None, &mut errors); + + assert_eq!(&value, "Hello, world!"); + println!("{value}"); + + let mut args = FluentArgs::new(); + args.set("name", FluentValue::from("John")); + + let msg = bundle.get_message("intro").expect("Message doesn't exist."); + let mut errors = vec![]; + let pattern = msg.value().expect("Message has no value."); + let value = bundle.format_pattern(&pattern, Some(&args), &mut errors); + + // The FSI/PDI isolation marks ensure that the direction of + // the text from the variable is not affected by the translation. + assert_eq!(value, "Welcome, \u{2068}John\u{2069}."); + // which is very weird for printing to the terminal + println!("{value}"); +} diff --git a/members/fluent/Cargo.toml b/members/fluent-webserv/Cargo.toml similarity index 86% rename from members/fluent/Cargo.toml rename to members/fluent-webserv/Cargo.toml index 80cdf7f..1316c94 100644 --- a/members/fluent/Cargo.toml +++ b/members/fluent-webserv/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "fluent" +name = "fluent-webserv" version = "0.1.0" edition = "2021" diff --git a/members/fluent/src/main.rs b/members/fluent-webserv/src/main.rs similarity index 100% rename from members/fluent/src/main.rs rename to members/fluent-webserv/src/main.rs