#[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> 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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)