krik 0.1.4

A fast static site generator written in Rust with internationalization, theming, and modern web features
Documentation
use std::collections::HashMap;
use crate::parser::Document;

#[derive(Debug, Clone)]
pub struct I18nManager {
    default_language: String,
    documents: HashMap<String, Vec<Document>>,
}

impl I18nManager {
    pub fn new(default_language: String) -> Self {
        Self {
            default_language,
            documents: HashMap::new(),
        }
    }

    pub fn add_document(&mut self, document: Document) {
        self.documents
            .entry(document.language.clone())
            .or_default()
            .push(document);
    }

    pub fn get_documents_by_language(&self, language: &str) -> Option<&Vec<Document>> {
        self.documents.get(language)
    }

    pub fn get_default_documents(&self) -> Option<&Vec<Document>> {
        self.documents.get(&self.default_language)
    }

    pub fn get_available_languages(&self) -> Vec<&String> {
        self.documents.keys().collect()
    }

    pub fn find_translation(&self, base_name: &str, target_language: &str) -> Option<&Document> {
        if let Some(docs) = self.documents.get(target_language) {
            docs.iter().find(|doc| doc.base_name == base_name)
        } else {
            None
        }
    }

    pub fn get_available_translations(&self, base_name: &str) -> Vec<(&String, &Document)> {
        let mut translations = Vec::new();
        for (lang, docs) in &self.documents {
            if let Some(doc) = docs.iter().find(|d| d.base_name == base_name) {
                translations.push((lang, doc));
            }
        }
        translations.sort_by_key(|(lang, _)| *lang);
        translations
    }

    pub fn get_default_language(&self) -> &str {
        &self.default_language
    }

    pub fn get_language_name(&self, lang_code: &str) -> String {
        match lang_code {
            "en" => "English".to_string(),
            "it" => "Italiano".to_string(),
            "es" => "Español".to_string(),
            "fr" => "Français".to_string(),
            "de" => "Deutsch".to_string(),
            "pt" => "Português".to_string(),
            "ja" => "日本語".to_string(),
            "zh" => "中文".to_string(),
            "ru" => "Русский".to_string(),
            "ar" => "العربية".to_string(),
            _ => lang_code.to_uppercase(),
        }
    }
}