diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/intl-memoizer/README.md | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/intl-memoizer/README.md')
-rw-r--r-- | third_party/rust/intl-memoizer/README.md | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/third_party/rust/intl-memoizer/README.md b/third_party/rust/intl-memoizer/README.md new file mode 100644 index 0000000000..98e0092861 --- /dev/null +++ b/third_party/rust/intl-memoizer/README.md @@ -0,0 +1,65 @@ +# IntlMemoizer + +`intl-memoizer` is a crate designed to handle lazy-initialized references +to intl formatters. + +The assumption is that allocating a new formatter instance is costly, and such +instance is read-only during its life time, with constructor being expensive, and +`format`/`select` calls being cheap. + +In result it pays off to use a singleton to manage memoization of all instances of intl +APIs such as `PluralRules`, DateTimeFormat` etc. between all `FluentBundle` instances. + +Usage +----- + +```rust +use intl_memoizer::{IntlMemoizer, Memoizable}; +use unic_langid::langid; + +use intl_pluralrules::{PluralRules, PluralRuleType, PluralCategory}; + +impl Memoizable for PluralRules { + type Args = (PluralRulesType,); + fn construct(lang: LanguageIdentifier, args: Self::Args) -> Self { + Self::new(lang, args.0) + } +} + +fn main() { + let lang = langid!("en-US"); + + // A single memoizer for all languages + let mut memoizer = IntlMemoizer::new(); + + // A RefCell for a particular language to be used in all `FluentBundle` + // instances. + let mut en_us_memoizer = memoizer.get_for_lang(lang.clone()); + + // Per-call borrow + let mut en_us_memoizer_borrow = en_us_memoizer.borrow_mut(); + let cb = en_us_memoizer_borrow.get::<PluralRules>((PluralRulesType::Cardinal,)); + assert_eq!(cb.select(1), PluralCategory::One); +} + +``` + +Get Involved +------------ + +`fluent-rs` is open-source, licensed under the Apache License, Version 2.0. We +encourage everyone to take a look at our code and we'll listen to your +feedback. + + +Discuss +------- + +We'd love to hear your thoughts on Project Fluent! Whether you're a localizer +looking for a better way to express yourself in your language, or a developer +trying to make your app localizable and multilingual, or a hacker looking for +a project to contribute to, please do get in touch on the mailing list and the +IRC channel. + + - Discourse: https://discourse.mozilla.org/c/fluent + - IRC channel: [irc://irc.mozilla.org/l20n](irc://irc.mozilla.org/l20n) |