Expand description

Tools for locale fallback, enabling arbitrary input locales to be mapped into the nearest locale with data.

The algorithm implemented in this module is called Flexible Vertical Fallback. Watch #2243 to track improvements to this algorithm and steps to enshrine the algorithm in CLDR.

Examples

use icu_locid::locale;
use icu_locid_transform::LocaleFallbacker;

// Set up a LocaleFallbacker with data.
let fallbacker = LocaleFallbacker::new();

// Create a LocaleFallbackerIterator with a default configuration.
// By default, uses language priority with no additional extension keywords.
let mut fallback_iterator = fallbacker
    .for_config(Default::default())
    .fallback_for(locale!("hi-Latn-IN").into());

// Run the algorithm and check the results.
assert_eq!(fallback_iterator.get(), &locale!("hi-Latn-IN").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("hi-Latn").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("en-IN").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("en-001").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("en").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und").into());

Structs

Enums