#[non_exhaustive]pub struct LocaleFallbackConfig {
pub priority: LocaleFallbackPriority,
pub extension_key: Option<Key>,
pub fallback_supplement: Option<LocaleFallbackSupplement>,
}Expand description
Configuration settings for a particular fallback operation.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.priority: LocaleFallbackPriorityStrategy for choosing which subtags to drop during locale fallback.
§Examples
Retain the language and script subtags until the final step:
use icu::locid::locale;
use icu::locid_transform::fallback::LocaleFallbackConfig;
use icu::locid_transform::fallback::LocaleFallbackPriority;
use icu::locid_transform::LocaleFallbacker;
// Set up the fallback iterator.
let fallbacker = LocaleFallbacker::new();
let mut config = LocaleFallbackConfig::default();
config.priority = LocaleFallbackPriority::Language;
let mut fallback_iterator = fallbacker
.for_config(config)
.fallback_for(locale!("ca-ES-valencia").into());
// Run the algorithm and check the results.
assert_eq!(fallback_iterator.get(), &locale!("ca-ES-valencia").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ca-ES").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ca-valencia").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ca").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und").into());Retain the region subtag until the final step:
use icu::locid::locale;
use icu::locid_transform::fallback::LocaleFallbackConfig;
use icu::locid_transform::fallback::LocaleFallbackPriority;
use icu::locid_transform::LocaleFallbacker;
// Set up the fallback iterator.
let fallbacker = LocaleFallbacker::new();
let mut config = LocaleFallbackConfig::default();
config.priority = LocaleFallbackPriority::Region;
let mut fallback_iterator = fallbacker
.for_config(config)
.fallback_for(locale!("ca-ES-valencia").into());
// Run the algorithm and check the results.
assert_eq!(fallback_iterator.get(), &locale!("ca-ES-valencia").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ca-ES").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und-ES-valencia").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und-ES").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und").into());extension_key: Option<Key>An extension keyword to retain during locale fallback.
§Examples
use icu::locid::locale;
use icu::locid_transform::fallback::LocaleFallbackConfig;
use icu::locid_transform::LocaleFallbacker;
// Set up the fallback iterator.
let fallbacker = LocaleFallbacker::new();
let mut config = LocaleFallbackConfig::default();
config.extension_key = Some(icu::locid::extensions::unicode::key!("nu"));
let mut fallback_iterator = fallbacker
.for_config(config)
.fallback_for(locale!("ar-EG-u-nu-latn").into());
// Run the algorithm and check the results.
assert_eq!(fallback_iterator.get(), &locale!("ar-EG-u-nu-latn").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ar-EG").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ar-u-nu-latn").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("ar").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und").into());fallback_supplement: Option<LocaleFallbackSupplement>Fallback supplement data key to customize fallback rules.
For example, most data keys for collation add additional parent locales, such as
“yue” to “zh-Hant”, and data used for the "-u-co" extension keyword fallback.
Currently the only supported fallback supplement is LocaleFallbackSupplement::Collation, but more may be
added in the future.
§Examples
use icu::locid::locale;
use icu::locid_transform::fallback::LocaleFallbackConfig;
use icu::locid_transform::fallback::LocaleFallbackPriority;
use icu::locid_transform::fallback::LocaleFallbackSupplement;
use icu::locid_transform::LocaleFallbacker;
// Set up the fallback iterator.
let fallbacker = LocaleFallbacker::new();
let mut config = LocaleFallbackConfig::default();
config.priority = LocaleFallbackPriority::Collation;
config.fallback_supplement = Some(LocaleFallbackSupplement::Collation);
let mut fallback_iterator = fallbacker
.for_config(config)
.fallback_for(locale!("yue-HK").into());
// Run the algorithm and check the results.
assert_eq!(fallback_iterator.get(), &locale!("yue-HK").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("yue").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("zh-Hant").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("zh").into());
fallback_iterator.step();
assert_eq!(fallback_iterator.get(), &locale!("und").into());Auto Trait Implementations§
impl Freeze for LocaleFallbackConfig
impl RefUnwindSafe for LocaleFallbackConfig
impl Send for LocaleFallbackConfig
impl Sync for LocaleFallbackConfig
impl Unpin for LocaleFallbackConfig
impl UnsafeUnpin for LocaleFallbackConfig
impl UnwindSafe for LocaleFallbackConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more