#[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
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 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 4 bytes