Files
IronCalc/base/src/language/mod.rs
2025-07-03 20:40:48 +02:00

47 lines
1.1 KiB
Rust

use std::{collections::HashMap, sync::OnceLock};
use bitcode::{Decode, Encode};
#[derive(Encode, Decode, Clone)]
pub struct Booleans {
pub r#true: String,
pub r#false: String,
}
#[derive(Encode, Decode, Clone)]
pub struct Errors {
pub r#ref: String,
pub name: String,
pub value: String,
pub div: String,
pub na: String,
pub num: String,
pub nimpl: String,
pub spill: String,
pub calc: String,
pub circ: String,
pub error: String,
pub null: String,
}
#[derive(Encode, Decode, Clone)]
pub struct Language {
pub booleans: Booleans,
pub errors: Errors,
}
static LANGUAGES: OnceLock<HashMap<String, Language>> = OnceLock::new();
#[allow(clippy::expect_used)]
fn get_languages() -> &'static HashMap<String, Language> {
LANGUAGES.get_or_init(|| {
bitcode::decode(include_bytes!("language.bin")).expect("Failed parsing language file")
})
}
pub fn get_language(id: &str) -> Result<&Language, String> {
get_languages()
.get(id)
.ok_or_else(|| format!("Language is not supported: '{id}'"))
}