use std::str::FromStr;
use bevy::prelude::*;
use fluent_langneg::{LanguageIdentifier, LangugeIdentifierParserError};
#[derive(Resource, Clone, Debug, Default)]
pub struct Locale
{
pub requested: Vec<LanguageIdentifier>,
}
impl Locale
{
pub fn new(locale: impl AsRef<str>) -> Result<Self, LangugeIdentifierParserError>
{
Ok(Self::new_from_id(LanguageIdentifier::from_str(locale.as_ref())?))
}
pub fn new_from_id(locale: LanguageIdentifier) -> Self
{
Self { requested: vec![locale] }
}
pub fn get_system_locale() -> Option<LanguageIdentifier>
{
sys_locale::get_locale()
.map(|s| LanguageIdentifier::from_str(s.as_str()).ok())
.flatten()
}
}
pub(crate) struct LocalePlugin;
impl Plugin for LocalePlugin
{
fn build(&self, app: &mut App)
{
app.insert_resource(Locale { requested: Locale::get_system_locale().into_iter().collect() });
}
}