tauri-plugin-sys-locale 0.1.2

Tauri plugin to read the operating system's current locale/language
use crate::{Error, Result};
use serde::Serialize;

#[derive(Debug, Clone, Serialize)]
pub struct LocaleInfo {
    /// e.g. "de-DE", "en-US" – as reported by the operating system
    pub locale: String,
    /// Just the language part, e.g. "de" from "de-DE"
    pub language: String,
}

/// Returns the primary system locale string, e.g. "de-DE" or "en-US".
///
/// Plain Rust function — no `Tauri` state or `AppHandle` required, so you
/// can call it from anywhere in your Rust code, not just from the frontend
/// via `invoke()`.
pub fn get_locale() -> Result<String> {
    sys_locale::get_locale().ok_or(Error::NotFound)
}

/// Returns the locale and the plain language code separately.
pub fn get_locale_info() -> Result<LocaleInfo> {
    let locale = get_locale()?;
    let language = locale
        .split(['-', '_'])
        .next()
        .unwrap_or(&locale)
        .to_lowercase();

    Ok(LocaleInfo { locale, language })
}