Trait fluent_fallback::env::LocalesProvider[][src]

pub trait LocalesProvider {
    type Iter: Iterator<Item = LanguageIdentifier>;
    fn locales(&self) -> Self::Iter;
}
Expand description

A trait used to provide a selection of locales to be used by the Localization instance for runtime locale fallbacking.

Example

use fluent_fallback::{Localization, env::LocalesProvider};
use fluent_resmgr::ResourceManager;
use unic_langid::LanguageIdentifier;
use std::{
    rc::Rc,
    cell::RefCell
};

#[derive(Clone)]
struct Env {
    locales: Rc<RefCell<Vec<LanguageIdentifier>>>,
}

impl Env {
    pub fn new(locales: Vec<LanguageIdentifier>) -> Self {
        Self { locales: Rc::new(RefCell::new(locales)) }
    }

    pub fn set_locales(&mut self, new_locales: Vec<LanguageIdentifier>) {
        let mut locales = self.locales.borrow_mut();
        locales.clear();
        locales.extend(new_locales);
    }
}

impl LocalesProvider for Env {
    type Iter = <Vec<LanguageIdentifier> as IntoIterator>::IntoIter;
    fn locales(&self) -> Self::Iter {
        self.locales.borrow().clone().into_iter()
    }
}

let res_mgr = ResourceManager::new("./path/{locale}/".to_string());

let mut env = Env::new(vec![
    "en-GB".parse().unwrap()
]);

let mut loc = Localization::with_env(vec![], true, env.clone(), res_mgr);

env.set_locales(vec![
    "de".parse().unwrap(),
    "en-GB".parse().unwrap(),
]);

loc.on_change();

// The next format call will attempt to localize to `de` first and
// fallback on `en-GB`.

Associated Types

Required methods

Implementations on Foreign Types

Implementors