LocaleFallbackConfig

Struct LocaleFallbackConfig 

Source
#[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: LocaleFallbackPriority

Strategy 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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

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