pub trait LocalesProvider {
type Iter: Iterator<Item = LanguageIdentifier>;
// Required method
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`.