dream-ini 0.2.0

Import Morrowind.ini settings into OpenMW configuration files
Documentation
// SPDX-License-Identifier: GPL-3.0-only

use dream_ini::{ImportError, ImportEvent, ImportWarning};

use super::UiText;

pub(super) const fn text(key: UiText) -> &'static str {
    match key {
        UiText::Language => "Langue",
        UiText::EnglishLanguage => "Anglais",
        UiText::FrenchLanguage => "Français",
        UiText::GermanLanguage => "Allemand",
        UiText::RussianLanguage => "Russe",
        UiText::SpanishLanguage => "Espagnol",
        UiText::SwedishLanguage => "Suédois",
        UiText::SourceSection => "Fichiers d’entrée",
        UiText::Existing => "Existant",
        UiText::Browse => "Parcourir…",
        UiText::ImportOptions => "Options d’importation",
        UiText::Encoding => "Encodage",
        UiText::EncodingAuto => "Auto",
        UiText::ImportFallbacks => "Importer les polices bitmap",
        UiText::ImportArchives => "Importer les archives",
        UiText::ImportContentFiles => "Importer les fichiers de contenu / ordre de chargement",
        UiText::Overrides => "Remplacements",
        UiText::ExplicitSearchPath => "Répertoire Data Files",
        UiText::Output => "Sortie",
        UiText::PreviewOnly => "Aperçu uniquement",
        UiText::SaveAs => "Enregistrer sous",
        UiText::OutputPath => "Chemin de sortie",
        UiText::UpdateExistingCfg => "Mettre à jour l’openmw.cfg existant",
        UiText::ImportPreview => "Importer / Aperçu",
        UiText::CannotImport => "Impossible d’importer :",
        UiText::Results => "Résultats",
        UiText::Errors => "Erreurs",
        UiText::Warnings => "Avertissements",
        UiText::Events => "Événements",
        UiText::GeneratedCfg => "Cfg généré",
        UiText::Copy => "Copier",
        UiText::Clear => "Effacer",
        UiText::EncodingTooltip => {
            "Encodage des caractères utilisé pour lire le texte du contenu et des plugins. Auto utilise l’encodage du cfg existant, ou win1252 s’il n’est pas défini."
        }
        UiText::ImportArchivesTooltip => {
            "Importe les entrées fallback-archive et résout les fichiers .bsa référencés."
        }
        UiText::ImportContentFilesTooltip => {
            "Importe les entrées GameFile comme ordre de chargement et résout les plugins référencés."
        }
        UiText::ExplicitSearchPathTooltip => {
            "Répertoire Data Files optionnel utilisé pour trouver le contenu et les archives importés."
        }
        UiText::DataLocalTooltip => {
            "Écrit le réglage runtime data-local d’OpenMW. dream-ini ne cherche pas dans ce chemin pendant l’importation ; utilisez le répertoire Data Files pour cela."
        }
        UiText::ResourcesTooltip => {
            "Remplace le chemin des ressources moteur. Il doit pointer vers les ressources fournies par OpenMW ; à choisir avec soin."
        }
        UiText::UserDataTooltip => {
            "Remplace l’emplacement où OpenMW stocke les données utilisateur : sauvegardes, captures d’écran et cache navmesh."
        }
        UiText::NoErrors => "Aucune erreur.",
        UiText::NoWarnings => "Aucun avertissement.",
        UiText::NoEvents => "Aucun événement.",
        UiText::NoGeneratedCfg => "Aucun cfg généré.",
        UiText::WroteCfgTo => "Cfg écrit dans :",
        UiText::SelectMorrowindIniBeforeImporting => {
            "Sélectionnez un fichier Morrowind.ini avant d’importer."
        }
        UiText::SelectOutputPathBeforeImporting => {
            "Sélectionnez un chemin de sortie avant d’importer."
        }
        UiText::SelectExistingCfgBeforeUpdating => {
            "Sélectionnez un openmw.cfg existant avant de le mettre à jour sur place."
        }
        UiText::CancelPicker => "Annuler",
        UiText::ChoosePath => "Choisir",
        UiText::SelectPath => "Sélectionner",
        UiText::CurrentDirectory => "Répertoire actuel :",
        UiText::ParentDirectory => "Parent",
        UiText::RefreshDirectory => "Actualiser",
        UiText::ShowHiddenDirectories => "Afficher les répertoires cachés",
        UiText::SelectedPath => "Sélection :",
        UiText::OutputFileName => "Nom du fichier",
        UiText::SelectMorrowindIni => "Sélectionner Morrowind.ini",
        UiText::SelectExistingOpenmwCfg => "Sélectionner l’openmw.cfg existant",
        UiText::SelectOutputCfg => "Sélectionner l’openmw.cfg de sortie",
        UiText::SelectGameDataDir => "Sélectionner le répertoire Data Files",
        UiText::SelectDataLocalDir => "Sélectionner le répertoire data-local",
        UiText::SelectResourcesDir => "Sélectionner le répertoire resources",
        UiText::SelectUserDataDir => "Sélectionner le répertoire user-data",
        UiText::ControllerHelp => {
            "Manette : croix/stick gauche pour naviguer • A active/choisit • X efface le chemin sélectionné • Start importe quand tout est prêt • Select quitte • gauche/droite ajuste les options • stick droit fait défiler le cfg généré • LB/RB page le cfg généré"
        }
        UiText::PickerControllerHelp => {
            "Manette : croix/stick gauche pour naviguer • A/Entrée ouvre ou choisit • B/Gauche va au parent • Droite entre • Start choisit le chemin actuel/attendu • Select annule • LB affiche/masque les répertoires cachés"
        }
        UiText::OskTitle => "Clavier de chemin",
        UiText::OskControllerHelp => {
            "Manette : croix/stick gauche déplace • A appuie • B majuscule • Y espace • X efface arrière • Select/Échap annule • Start/OK applique"
        }
        UiText::OskOk => "OK",
    }
}

pub(super) fn warning_title(warning: &ImportWarning) -> String {
    match warning {
        ImportWarning::IgnoredEmptyValue { key } => {
            format!("Valeur vide ignorée pour la clé `{key}`.")
        }
        ImportWarning::MalformedIniLine { line } => {
            format!("Ligne INI mal formée ignorée : {line}")
        }
        ImportWarning::MissingGameFile { file } => {
            format!(
                "Entrée GameFile introuvable : {file}. Les entrées GameFile suivantes n'ont pas été importées."
            )
        }
    }
}

pub(super) fn event_title(event: &ImportEvent) -> String {
    match event {
        ImportEvent::ContentFileResolved { path, .. } => {
            format!("Fichier de contenu résolu : {}", path.display())
        }
        ImportEvent::ArchiveResolved { path } => format!("Archive résolue : {}", path.display()),
        ImportEvent::DataDirAddedForContent { path } => {
            format!(
                "Répertoire de données ajouté pour les fichiers de contenu : {}",
                path.display()
            )
        }
        ImportEvent::DataDirAddedForArchive { path } => {
            format!(
                "Répertoire de données ajouté pour les archives fallback : {}",
                path.display()
            )
        }
    }
}

pub(super) fn error_title(error: &ImportError) -> String {
    match error {
        ImportError::Io { path, source } => {
            format!(
                "Impossible de lire ou d’écrire {} : {source}",
                path.display()
            )
        }
        ImportError::UnsupportedEncoding(value) => {
            format!("Encodage de texte non pris en charge : {value}")
        }
        ImportError::InvalidPluginHeader { path, message } => {
            format!(
                "En-tête de plugin invalide dans {} : {message}",
                path.display()
            )
        }
        ImportError::MissingContentFiles { files, .. } => {
            format!("Fichiers de contenu introuvables : {}", files.join(", "))
        }
        ImportError::MissingArchives { files, .. } => {
            format!("Archives fallback introuvables : {}", files.join(", "))
        }
        ImportError::InvalidContentFileName(file) => {
            format!("Nom de fichier de contenu invalide : {file}")
        }
        ImportError::InvalidArchiveName(file) => {
            format!("Nom d’archive fallback invalide : {file}")
        }
        _ => error.to_string(),
    }
}