diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1c3c1b2..6b28532 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -64,4 +64,6 @@ jobs:
run: |
$assets = Get-ChildItem artifacts -File | Where-Object { $_.Extension -in '.zip', '.sha256' } | Select-Object -ExpandProperty FullName
if ($assets.Count -ne 2) { throw "Expected two release assets, found $($assets.Count)." }
- gh release create $env:RELEASE_TAG @assets --verify-tag --generate-notes --title "Tiny11 GUI $env:RELEASE_TAG"
+ $prereleaseArgs = @()
+ if ($env:RELEASE_TAG -like '*-*') { $prereleaseArgs = @('--prerelease') }
+ gh release create $env:RELEASE_TAG @assets --verify-tag --generate-notes --title "Tiny11 GUI $env:RELEASE_TAG" @prereleaseArgs
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1df5cb6..6ea7acc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,25 @@ Notable changes to Tiny11 GUI are documented here. The project follows semantic
## Unreleased
+## 1.3.0-beta.1 — 2026-10-11
+
+### Added
+
+- Optional **Disable Windows Defender** checkbox for Standard builds. When selected, Defender antivirus services are disabled in the offline image and Defender package removal is attempted — the same Defender servicing CORE builds apply. CORE-only destructive operations (recovery image removal, Windows Update service disabling) are not applied to Standard builds.
+- Build pre-checks before any servicing starts: source ISO existence, output path must differ from the source ISO and stay outside the working directory, and output/working directories must be creatable.
+- Free disk space pre-check. The working drive needs roughly 2× the ISO size plus 10 GB and the output drive 1.2× the ISO size; the build refuses to start with a clear message instead of failing mid-way through DISM.
+- The UI language is now chosen from the operating system's UI language (with English fallback) instead of always starting in Turkish.
+
+### Changed
+
+- The main window is now resizable (`CanResizeWithGrip`, minimum 880×560) instead of fixed-size, so it fits smaller or high-DPI screens.
+- Versioned releases whose tag contains a pre-release suffix (for example `v1.3.0-beta.1`) are published as GitHub pre-releases.
+
+### Fixed
+
+- Removed hardcoded Turkish and English status messages ("Hazır", "Windows sürümleri yükleniyor...", "Exporting image...") that appeared regardless of the selected UI language; they are now localized in all eight languages.
+- Localization resource files are consistent again: 66 unused legacy keys were removed, and all eight languages now carry the identical 174-key set. Previously six translations were missing 49 keys that only existed in English and Turkish.
+
## 1.2.3 — 2026-09-18
### Fixed
diff --git a/README.md b/README.md
index 0614336..c721d25 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Tiny11 GUI is inspired by [tiny11builder](https://github.com/ntdevlabs/tiny11bui
- Build from WIM- or ESD-based Windows 11 media with edition selection
- Removable apps: Edge, OneDrive, Cortana, Chat, Teams, Xbox
-- Disable telemetry, Windows Update, Defender, sponsored apps, reserved storage, BitLocker
+- Disable telemetry, Windows Update, sponsored apps, reserved storage, BitLocker, and (optionally) Windows Defender
- Size reduction: DISM component store cleanup, recovery compression of `install.wim`, Hyper-V/Recall/Speech/OCR/Handwriting stripping, driver store cleanup
- Bypass TPM/CPU/RAM/Secure Boot checks and MS account/network/privacy setup steps
- Built-in presets: Minimal, Balanced, Gaming, Enterprise
diff --git a/Resources/Strings.de-DE.txt b/Resources/Strings.de-DE.txt
index 0ecd080..13a33d1 100644
--- a/Resources/Strings.de-DE.txt
+++ b/Resources/Strings.de-DE.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder GUI
IsoSelection=Quell-ISO:
WorkingDirectory=Arbeitsverzeichnis:
OutputPath=Pfad der Ausgabe-ISO:
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=Für Unternehmensumgebungen geeignet
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Windows-Chat
MicrosoftTeams=Microsoft Teams / Chat
XboxApps=Xbox-Apps
Telemetry=Telemetrie (Datenerfassung)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=Sprache / OCR / Handschrift
DriverCleanup=Nicht verwendete Treiber (Drucker/Scanner/Modem/Xbox)
Ready=Bereit
-Processing=Verarbeitung...
-Completed=Abgeschlossen!
Error=Ein Fehler ist aufgetreten
IsoSelected=ISO-Datei ausgewählt: {0}
WorkingDirSelected=Arbeitsverzeichnis ausgewählt: {0}
OutputPathSelected=Pfad der Ausgabe-ISO ausgewählt: {0}
AutounattendSelected=Eigene autounattend.xml ausgewählt: {0}
AutounattendCleared=Auswahl der autounattend.xml gelöscht.
-BuildStarted=Tiny11-Erstellung gestartet
BuildCompleted=Vorgang erfolgreich abgeschlossen!
BuildFailed=Vorgang fehlgeschlagen!
TPMTooltip=TPM-2.0-Anforderung umgehen
@@ -147,22 +142,12 @@ LogEditionParseLineError=Analysefehler: {0} - Zeile: {1}
LogEditionsRetrievalFailed=Windows-Editionen konnten nicht ermittelt werden: {0}
LogExpectedLocation=Erwarteter Speicherort: {0}
LogFileSize=Dateigröße: {0} GB ({1} Bytes)
-LogIsoCopyError=Fehler beim Kopieren der ISO: {0}
-LogIsoCopying=ISO-Datei wird kopiert: {0}
LogIsoPath=ISO: {0}
-LogIsoSaved=ISO-Datei erfolgreich gespeichert: {0}
-LogIsoUnmounted=ISO ausgehängt.
-LogIsoUnmountError=Fehler beim Aushängen der ISO: {0}
LogIsoUnmounting=ISO wird ausgehängt...
LogOutputLocation=Ausgabeort: {0}
LogOutputPath=Ausgabe: {0}
-LogProcessCompletedBanner=*** Vorgang erfolgreich abgeschlossen ***
-LogProcessFailed=Vorgang fehlgeschlagen (Exitcode: {0}), Bereinigung läuft...
-LogProcessFailedBanner=*** Vorgang mit Fehlercode beendet: {0} ***
LogProcessing=Verarbeitung...
-LogProcessSuccess=Vorgang erfolgreich abgeschlossen!
LogRegistryUnloading=Registrierungs-Hives werden entladen...
-LogRemoveChat=Chat entfernen: {0}
LogRemoveCortana=Cortana entfernen: {0}
LogRemoveEdge=Edge entfernen: {0}
LogRemoveOneDrive=OneDrive entfernen: {0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=Temporäre Dateien werden gelöscht...
LogTiny11Starting=Tiny11-Erstellung wird gestartet...
LogWimUnmounting=WIM wird ausgehängt (Änderungen werden verworfen)...
LogWorkingDir=Arbeitsverzeichnis: {0}
+
+DefenderTooltip=Wenn ausgewählt, werden die Windows-Defender-Antivirendienste im Image deaktiviert (wie bei CORE-Builds). Das installierte System hat keinen Antivirenschutz.
+StatusLoadingEditions=Windows-Editionen werden geladen...
+StatusReadyDefaultEditions=Bereit (Standardeditionen)
+StatusExportingImage=Image wird exportiert...
+ValidationFailed=Vorabprüfungen fehlgeschlagen. Der Build wurde nicht gestartet.
+ValidationIsoNotFound=Windows-ISO-Datei nicht gefunden: {0}
+ValidationInvalidPath=Ungültiger Pfad: {0}
+ValidationOutputEqualsIso=Die Ausgabe-ISO darf nicht mit der Quell-ISO identisch sein.
+ValidationOutputInsideScratch=Die Ausgabe-ISO darf nicht im Arbeitsverzeichnis liegen.
+ValidationOutputDirCreateFailed=Ausgabeverzeichnis konnte nicht erstellt werden: {0}
+ValidationScratchCreateFailed=Arbeitsverzeichnis konnte nicht erstellt werden: {0}
+ValidationDiskSpace=Nicht genug freier Speicherplatz auf {0}: {1:F1} GB erforderlich, {2:F1} GB verfügbar.
+ValidationDiskSpaceUnknown=Freier Speicherplatz konnte nicht geprüft werden ({0}). Es wird fortgefahren.
diff --git a/Resources/Strings.en-US.txt b/Resources/Strings.en-US.txt
index a4f2de5..6f8ecc0 100644
--- a/Resources/Strings.en-US.txt
+++ b/Resources/Strings.en-US.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder GUI
IsoSelection=Source ISO:
WorkingDirectory=Working Directory:
OutputPath=Output ISO Path:
@@ -43,7 +42,6 @@ PresetEnterpriseTooltip=Business environment suitable
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Windows Chat
MicrosoftTeams=Microsoft Teams / Chat
XboxApps=Xbox Apps
@@ -78,8 +76,6 @@ DriverCleanup=Unused Drivers (Printer/Scanner/Modem/Xbox)
# Status Messages
Ready=Ready
-Processing=Processing...
-Completed=Completed!
Error=Error Occurred
IsoSelected=ISO file selected: {0}
WorkingDirSelected=Working directory selected: {0}
@@ -88,17 +84,10 @@ AutounattendSelected=Custom autounattend.xml selected: {0}
AutounattendCleared=Custom autounattend.xml selection cleared.
# Build Process Messages
-BuildStarted=Tiny11 Build Process Started
-MountingIso=Mounting ISO file...
-RunningScript=Running PowerShell script...
BuildCompleted=Process completed successfully!
BuildFailed=Process failed!
# Error Messages
-IsoMountFailed=Could not mount ISO file!
-ScriptNotFound=Script file not found: {0}
-AdminRightsWarning=Running with administrator privileges is recommended
-MissingFields=Missing: {0}
# Tooltips
TPMTooltip=Bypass TPM 2.0 requirement
@@ -112,15 +101,9 @@ AutounattendTooltip=Use your own autounattend.xml instead of the built-in OOBE b
# Language Selection
Language=Application Language:
-LanguageTurkish=Türkçe
-LanguageEnglish=English
-LanguageChangedTR=Language changed to Turkish
-LanguageChangedEN=Language changed to English
LanguageChanged=Language changed to {0}
# Image Types Content
-StandardTypeContent=Standard (tiny11maker)
-CoreTypeContent=Core (tiny11Coremaker)
# Startup Messages
AppStarted=Tiny11 GUI started
@@ -145,7 +128,6 @@ LogSelectedOptions=Selected Options:
LogRemoveEdge=Remove Edge: {0}
LogRemoveOneDrive=Remove OneDrive: {0}
LogRemoveCortana=Remove Cortana: {0}
-LogRemoveChat=Remove Chat: {0}
LogRemoveTeams=Remove Teams: {0}
LogRemoveXbox=Remove Xbox: {0}
LogDisableTelemetry=Disable Telemetry: {0}
@@ -160,8 +142,6 @@ LogNo=No
# Log Messages - Process Status
LogScriptCreated=Custom script created: {0}
LogTiny11Starting=Tiny11 build process starting...
-LogIsoMounting=ISO file is being mounted...
-LogIsoMounted=ISO mounted: {0}
LogProcessing=Processing...
LogBuildSuccess=Tiny11 ISO created successfully!
LogOutputLocation=Output location: {0}
@@ -179,7 +159,6 @@ LogWimUnmounting=WIM unmounting (discarding changes)...
LogIsoUnmounting=ISO unmounting...
LogRegistryUnloading=Registry hives unloading...
LogTempFilesDeleting=Temporary files deleting...
-LogTempFilesError=Some temporary files could not be deleted: {0}
LogCancelComplete=Process cancelled and cleanup completed.
LogCancelError=Error during cancellation: {0}
LogCancelByUser=Process cancelled by user.
@@ -187,38 +166,6 @@ LogCancelReceived=Cancel request received...
LogAlreadyRunning=A process is already running!
# Log Messages - Script Process
-LogPreparingDirs=Directories are being prepared...
-LogCopyingIso=ISO content is being copied...
-LogConvertingEsd=ESD -> WIM converting...
-LogMountingWim=Windows image mounting...
-LogRemovingApps=Removing unnecessary applications...
-LogRemoving=Removing: {0}
-LogSkipped=Skipped: {0}
-LogRemovingEdge=Microsoft Edge is being removed...
-LogDeleted=Deleted: {0}
-LogRemovingOneDrive=OneDrive is being removed...
-LogApplyingRegistry=Registry settings are being applied...
-LogBypassingRequirements=System requirements are being bypassed...
-LogDisablingTelemetry=Telemetry is being disabled...
-LogDisablingSponsoredApps=Sponsored apps are being disabled...
-LogDisablingReservedStorage=Reserved Storage is being disabled...
-LogDisablingBitLocker=BitLocker auto-encryption is being disabled...
-LogBypassingMSAccount=Microsoft account requirement is being bypassed...
-LogDisablingWindowsUpdate=Windows Update is being disabled...
-LogDisablingDefender=Windows Defender is being disabled (Security risk!)...
-LogSavingRegistry=Registry is being saved...
-LogCreatingOobeScript=OOBE bypass script is being created...
-LogCreatingAutounattend=autounattend.xml is being created...
-LogSavingChanges=Changes are being saved...
-LogUnmountingSourceIso=Source ISO unmounting...
-LogCreatingIso=Tiny11 ISO is being created...
-LogOscdimgNotFound=oscdimg.exe not found! Windows ADK must be installed.
-LogOscdimgFound=oscdimg found: {0}
-LogCleaningUp=Cleanup in progress...
-LogIsoCreatedSuccess=Tiny11 ISO created successfully!
-LogLocation=Location: {0}
-LogSize=Size: {0} GB
-LogIsoCreationFailed=ISO could not be created!
# Status Messages
StatusStarting=Starting process...
@@ -251,23 +198,14 @@ EditionsLoadFailed=Could not load Windows editions
LoadingDefaultEditions=Loading default editions...
# Process Messages
-LogProcessFailed=Process failed (Exit Code: {0}), cleaning up...
-LogProcessSuccess=Process completed successfully!
-LogIsoCopying=Copying ISO file: {0}
-LogIsoSaved=ISO file saved successfully: {0}
-LogIsoCopyError=ISO copy error: {0}
-LogSystemCleanupComplete=System cleanup completed
LogCleanupError=Cleanup error: {0}
LogComprehensiveCleanup=Performing comprehensive system cleanup...
LogComprehensiveCleanupComplete=Comprehensive cleanup completed
LogCleanupContinue=Cleanup error (continuing): {0}
-LogSystemCleanupInProgress=System cleanup in progress...
# Log Messages - Additional
LogAdminRightsRecommended=Warning: Running the application with administrator privileges is recommended.
LogAdminRightsNeededForEditions=Administrator privileges may be required to read Windows editions.
-LogProcessCompletedBanner=*** Process Completed Successfully ***
-LogProcessFailedBanner=*** Process Ended With Error Code: {0} ***
LogPresetMinimalApplied=Minimal preset applied - Maximum optimization
LogPresetBalancedApplied=Balanced preset applied - Balanced optimization
LogPresetGamingApplied=Gaming preset applied - Performance optimization
@@ -275,5 +213,17 @@ LogPresetEnterpriseApplied=Enterprise preset applied - Business environment opti
LogEditionParseLineError=Parse error: {0} - Line: {1}
LogEditionParseFallback=Parsing failed, adding all default editions...
LogEditionsRetrievalFailed=Could not retrieve Windows editions: {0}
-LogIsoUnmounted=ISO unmounted.
-LogIsoUnmountError=ISO unmount error: {0}
+
+DefenderTooltip=When selected, Windows Defender antivirus services are disabled in the image (same as CORE builds). The installed system will have no antivirus protection.
+StatusLoadingEditions=Loading Windows editions...
+StatusReadyDefaultEditions=Ready (default editions)
+StatusExportingImage=Exporting image...
+ValidationFailed=Pre-checks failed. The build was not started.
+ValidationIsoNotFound=Windows ISO file not found: {0}
+ValidationInvalidPath=Invalid path: {0}
+ValidationOutputEqualsIso=The output ISO cannot be the same as the source ISO.
+ValidationOutputInsideScratch=The output ISO cannot be inside the working directory.
+ValidationOutputDirCreateFailed=The output directory could not be created: {0}
+ValidationScratchCreateFailed=The working directory could not be created: {0}
+ValidationDiskSpace=Not enough free disk space on {0}: {1:F1} GB required, {2:F1} GB available.
+ValidationDiskSpaceUnknown=Free disk space could not be checked ({0}). Continuing anyway.
diff --git a/Resources/Strings.es-ES.txt b/Resources/Strings.es-ES.txt
index 1353d1a..dcd0189 100644
--- a/Resources/Strings.es-ES.txt
+++ b/Resources/Strings.es-ES.txt
@@ -1,4 +1,3 @@
-AppTitle=Interfaz de Tiny11 Builder
IsoSelection=ISO de origen:
WorkingDirectory=Carpeta de trabajo:
OutputPath=Ruta de la ISO de salida:
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=Adecuado para entornos empresariales
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Chat de Windows
MicrosoftTeams=Microsoft Teams / Chat
XboxApps=Aplicaciones de Xbox
Telemetry=Telemetría (recopilación de datos)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=Voz / OCR / escritura a mano
DriverCleanup=Controladores sin usar (impresora/escáner/módem/Xbox)
Ready=Listo
-Processing=Procesando...
-Completed=¡Completado!
Error=Se produjo un error
IsoSelected=Archivo ISO seleccionado: {0}
WorkingDirSelected=Carpeta de trabajo seleccionada: {0}
OutputPathSelected=Ruta de la ISO de salida seleccionada: {0}
AutounattendSelected=autounattend.xml personalizado seleccionado: {0}
AutounattendCleared=Se borró la selección de autounattend.xml.
-BuildStarted=Se inició la creación de Tiny11
BuildCompleted=¡El proceso terminó correctamente!
BuildFailed=¡El proceso ha fallado!
TPMTooltip=Omitir el requisito de TPM 2.0
@@ -147,22 +142,12 @@ LogEditionParseLineError=Error de análisis: {0} - Línea: {1}
LogEditionsRetrievalFailed=No se pudieron obtener las ediciones de Windows: {0}
LogExpectedLocation=Ubicación esperada: {0}
LogFileSize=Tamaño del archivo: {0} GB ({1} bytes)
-LogIsoCopyError=Error al copiar la ISO: {0}
-LogIsoCopying=Copiando archivo ISO: {0}
LogIsoPath=ISO: {0}
-LogIsoSaved=Archivo ISO guardado correctamente: {0}
-LogIsoUnmounted=ISO desmontada.
-LogIsoUnmountError=Error al desmontar la ISO: {0}
LogIsoUnmounting=Desmontando la ISO...
LogOutputLocation=Ubicación de salida: {0}
LogOutputPath=Salida: {0}
-LogProcessCompletedBanner=*** Proceso completado correctamente ***
-LogProcessFailed=El proceso falló (código de salida: {0}); limpiando...
-LogProcessFailedBanner=*** El proceso terminó con el código de error: {0} ***
LogProcessing=Procesando...
-LogProcessSuccess=¡Proceso completado correctamente!
LogRegistryUnloading=Descargando subárboles del Registro...
-LogRemoveChat=Eliminar Chat: {0}
LogRemoveCortana=Eliminar Cortana: {0}
LogRemoveEdge=Eliminar Edge: {0}
LogRemoveOneDrive=Eliminar OneDrive: {0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=Eliminando archivos temporales...
LogTiny11Starting=Iniciando la creación de Tiny11...
LogWimUnmounting=Desmontando WIM (descartando cambios)...
LogWorkingDir=Carpeta de trabajo: {0}
+
+DefenderTooltip=Al seleccionarlo, los servicios antivirus de Windows Defender se desactivan en la imagen (igual que en las compilaciones CORE). El sistema instalado no tendrá protección antivirus.
+StatusLoadingEditions=Cargando ediciones de Windows...
+StatusReadyDefaultEditions=Listo (ediciones predeterminadas)
+StatusExportingImage=Exportando imagen...
+ValidationFailed=Las comprobaciones previas fallaron. La compilación no se inició.
+ValidationIsoNotFound=No se encontró el archivo ISO de Windows: {0}
+ValidationInvalidPath=Ruta no válida: {0}
+ValidationOutputEqualsIso=La ISO de salida no puede ser la misma que la ISO de origen.
+ValidationOutputInsideScratch=La ISO de salida no puede estar dentro del directorio de trabajo.
+ValidationOutputDirCreateFailed=No se pudo crear el directorio de salida: {0}
+ValidationScratchCreateFailed=No se pudo crear el directorio de trabajo: {0}
+ValidationDiskSpace=Espacio insuficiente en {0}: se requieren {1:F1} GB, hay {2:F1} GB disponibles.
+ValidationDiskSpaceUnknown=No se pudo comprobar el espacio libre en disco ({0}). Se continúa.
diff --git a/Resources/Strings.fr-FR.txt b/Resources/Strings.fr-FR.txt
index ffffe76..6d66373 100644
--- a/Resources/Strings.fr-FR.txt
+++ b/Resources/Strings.fr-FR.txt
@@ -1,4 +1,3 @@
-AppTitle=Interface Tiny11 Builder
IsoSelection=ISO source :
WorkingDirectory=Dossier de travail :
OutputPath=Chemin de l’ISO de sortie :
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=Adapté aux environnements professionnels
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Conversation Windows
MicrosoftTeams=Microsoft Teams / Conversation
XboxApps=Applications Xbox
Telemetry=Télémétrie (collecte de données)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=Voix / OCR / écriture manuscrite
DriverCleanup=Pilotes inutilisés (imprimante/scanner/modem/Xbox)
Ready=Prêt
-Processing=Traitement en cours...
-Completed=Terminé !
Error=Une erreur s’est produite
IsoSelected=Fichier ISO sélectionné : {0}
WorkingDirSelected=Dossier de travail sélectionné : {0}
OutputPathSelected=Chemin de l’ISO de sortie sélectionné : {0}
AutounattendSelected=autounattend.xml personnalisé sélectionné : {0}
AutounattendCleared=Sélection du fichier autounattend.xml effacée.
-BuildStarted=Création de Tiny11 démarrée
BuildCompleted=Opération terminée avec succès !
BuildFailed=Échec de l’opération !
TPMTooltip=Contourner l’exigence TPM 2.0
@@ -147,22 +142,12 @@ LogEditionParseLineError=Erreur d’analyse : {0} - Ligne : {1}
LogEditionsRetrievalFailed=Impossible d’obtenir les éditions de Windows : {0}
LogExpectedLocation=Emplacement attendu : {0}
LogFileSize=Taille du fichier : {0} Go ({1} octets)
-LogIsoCopyError=Erreur de copie de l’ISO : {0}
-LogIsoCopying=Copie du fichier ISO : {0}
LogIsoPath=ISO : {0}
-LogIsoSaved=Fichier ISO enregistré : {0}
-LogIsoUnmounted=ISO démontée.
-LogIsoUnmountError=Erreur lors du démontage de l’ISO : {0}
LogIsoUnmounting=Démontage de l’ISO...
LogOutputLocation=Emplacement de sortie : {0}
LogOutputPath=Sortie : {0}
-LogProcessCompletedBanner=*** Opération terminée avec succès ***
-LogProcessFailed=Échec de l’opération (code de sortie : {0}), nettoyage...
-LogProcessFailedBanner=*** Opération terminée avec le code d’erreur : {0} ***
LogProcessing=Traitement en cours...
-LogProcessSuccess=Opération terminée avec succès !
LogRegistryUnloading=Déchargement des ruches du Registre...
-LogRemoveChat=Supprimer Conversation : {0}
LogRemoveCortana=Supprimer Cortana : {0}
LogRemoveEdge=Supprimer Edge : {0}
LogRemoveOneDrive=Supprimer OneDrive : {0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=Suppression des fichiers temporaires...
LogTiny11Starting=Démarrage de la création de Tiny11...
LogWimUnmounting=Démontage du WIM (abandon des modifications)...
LogWorkingDir=Dossier de travail : {0}
+
+DefenderTooltip=Si coché, les services antivirus Windows Defender sont désactivés dans l'image (comme pour les builds CORE). Le système installé n'aura aucune protection antivirus.
+StatusLoadingEditions=Chargement des éditions Windows...
+StatusReadyDefaultEditions=Prêt (éditions par défaut)
+StatusExportingImage=Exportation de l'image...
+ValidationFailed=Les vérifications préalables ont échoué. La génération n'a pas démarré.
+ValidationIsoNotFound=Fichier ISO Windows introuvable : {0}
+ValidationInvalidPath=Chemin non valide : {0}
+ValidationOutputEqualsIso=L'ISO de sortie ne peut pas être identique à l'ISO source.
+ValidationOutputInsideScratch=L'ISO de sortie ne peut pas se trouver dans le répertoire de travail.
+ValidationOutputDirCreateFailed=Impossible de créer le répertoire de sortie : {0}
+ValidationScratchCreateFailed=Impossible de créer le répertoire de travail : {0}
+ValidationDiskSpace=Espace disque insuffisant sur {0} : {1:F1} Go requis, {2:F1} Go disponibles.
+ValidationDiskSpaceUnknown=Impossible de vérifier l'espace disque libre ({0}). Continuation.
diff --git a/Resources/Strings.ja-JP.txt b/Resources/Strings.ja-JP.txt
index ae57cc9..1305f3a 100644
--- a/Resources/Strings.ja-JP.txt
+++ b/Resources/Strings.ja-JP.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder GUI
IsoSelection=ソース ISO:
WorkingDirectory=作業フォルダー:
OutputPath=出力 ISO のパス:
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=業務環境向け
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Windows チャット
MicrosoftTeams=Microsoft Teams / チャット
XboxApps=Xbox アプリ
Telemetry=テレメトリ(データ収集)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=音声 / OCR / 手書き入力
DriverCleanup=未使用のドライバー(プリンター/スキャナー/モデム/Xbox)
Ready=準備完了
-Processing=処理中...
-Completed=完了しました!
Error=エラーが発生しました
IsoSelected=ISO ファイルを選択しました: {0}
WorkingDirSelected=作業フォルダーを選択しました: {0}
OutputPathSelected=出力 ISO のパスを選択しました: {0}
AutounattendSelected=カスタム autounattend.xml を選択しました: {0}
AutounattendCleared=autounattend.xml の選択を解除しました。
-BuildStarted=Tiny11 の作成を開始しました
BuildCompleted=処理が正常に完了しました!
BuildFailed=処理に失敗しました!
TPMTooltip=TPM 2.0 の要件を回避
@@ -147,22 +142,12 @@ LogEditionParseLineError=解析エラー: {0} - 行: {1}
LogEditionsRetrievalFailed=Windows エディションを取得できませんでした: {0}
LogExpectedLocation=想定される場所: {0}
LogFileSize=ファイル サイズ: {0} GB({1} バイト)
-LogIsoCopyError=ISO のコピー エラー: {0}
-LogIsoCopying=ISO ファイルをコピーしています: {0}
LogIsoPath=ISO: {0}
-LogIsoSaved=ISO ファイルを保存しました: {0}
-LogIsoUnmounted=ISO をマウント解除しました。
-LogIsoUnmountError=ISO のマウント解除エラー: {0}
LogIsoUnmounting=ISO をマウント解除しています...
LogOutputLocation=出力先: {0}
LogOutputPath=出力: {0}
-LogProcessCompletedBanner=*** 処理が正常に完了しました ***
-LogProcessFailed=処理に失敗しました(終了コード: {0})。クリーンアップしています...
-LogProcessFailedBanner=*** 処理はエラー コード {0} で終了しました ***
LogProcessing=処理中...
-LogProcessSuccess=処理が正常に完了しました!
LogRegistryUnloading=レジストリ ハイブをアンロードしています...
-LogRemoveChat=チャットを削除: {0}
LogRemoveCortana=Cortana を削除: {0}
LogRemoveEdge=Edge を削除: {0}
LogRemoveOneDrive=OneDrive を削除: {0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=一時ファイルを削除しています...
LogTiny11Starting=Tiny11 の作成を開始しています...
LogWimUnmounting=WIM をマウント解除しています(変更を破棄)...
LogWorkingDir=作業フォルダー: {0}
+
+DefenderTooltip=選択すると、CORE ビルドと同様に、イメージ内の Windows Defender ウイルス対策サービスが無効になります。インストール後のシステムにはウイルス対策保護がありません。
+StatusLoadingEditions=Windows エディションを読み込み中...
+StatusReadyDefaultEditions=準備完了 (既定のエディション)
+StatusExportingImage=イメージをエクスポート中...
+ValidationFailed=事前チェックに失敗しました。ビルドは開始されませんでした。
+ValidationIsoNotFound=Windows ISO ファイルが見つかりません: {0}
+ValidationInvalidPath=無効なパスです: {0}
+ValidationOutputEqualsIso=出力 ISO をソース ISO と同じにすることはできません。
+ValidationOutputInsideScratch=出力 ISO を作業ディレクトリ内に置くことはできません。
+ValidationOutputDirCreateFailed=出力ディレクトリを作成できませんでした: {0}
+ValidationScratchCreateFailed=作業ディレクトリを作成できませんでした: {0}
+ValidationDiskSpace={0} の空き容量が不足しています: {1:F1} GB 必要、{2:F1} GB 利用可能。
+ValidationDiskSpaceUnknown=空きディスク容量を確認できませんでした ({0})。続行します。
diff --git a/Resources/Strings.ru-RU.txt b/Resources/Strings.ru-RU.txt
index 736e6d4..2fa527b 100644
--- a/Resources/Strings.ru-RU.txt
+++ b/Resources/Strings.ru-RU.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder GUI
IsoSelection=Исходный ISO:
WorkingDirectory=Рабочая папка:
OutputPath=Путь к выходному ISO:
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=Подходит для рабочей среды
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Чат Windows
MicrosoftTeams=Microsoft Teams / Чат
XboxApps=Приложения Xbox
Telemetry=Телеметрия (сбор данных)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=Речь / OCR / рукописный ввод
DriverCleanup=Неиспользуемые драйверы (принтер/сканер/модем/Xbox)
Ready=Готово
-Processing=Обработка...
-Completed=Завершено!
Error=Произошла ошибка
IsoSelected=Выбран ISO-файл: {0}
WorkingDirSelected=Выбрана рабочая папка: {0}
OutputPathSelected=Выбран путь выходного ISO: {0}
AutounattendSelected=Выбран пользовательский autounattend.xml: {0}
AutounattendCleared=Выбор autounattend.xml сброшен.
-BuildStarted=Начато создание Tiny11
BuildCompleted=Процесс успешно завершён!
BuildFailed=Процесс завершился ошибкой!
TPMTooltip=Обойти требование TPM 2.0
@@ -147,22 +142,12 @@ LogEditionParseLineError=Ошибка разбора: {0} - Строка: {1}
LogEditionsRetrievalFailed=Не удалось получить редакции Windows: {0}
LogExpectedLocation=Ожидаемое расположение: {0}
LogFileSize=Размер файла: {0} ГБ ({1} байт)
-LogIsoCopyError=Ошибка копирования ISO: {0}
-LogIsoCopying=Копирование ISO-файла: {0}
LogIsoPath=ISO: {0}
-LogIsoSaved=ISO-файл успешно сохранён: {0}
-LogIsoUnmounted=ISO отключён.
-LogIsoUnmountError=Ошибка отключения ISO: {0}
LogIsoUnmounting=Отключение ISO...
LogOutputLocation=Расположение результата: {0}
LogOutputPath=Результат: {0}
-LogProcessCompletedBanner=*** Процесс успешно завершён ***
-LogProcessFailed=Процесс завершился ошибкой (код: {0}), выполняется очистка...
-LogProcessFailedBanner=*** Процесс завершён с кодом ошибки: {0} ***
LogProcessing=Обработка...
-LogProcessSuccess=Процесс успешно завершён!
LogRegistryUnloading=Выгрузка кустов реестра...
-LogRemoveChat=Удалить Chat: {0}
LogRemoveCortana=Удалить Cortana: {0}
LogRemoveEdge=Удалить Edge: {0}
LogRemoveOneDrive=Удалить OneDrive: {0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=Удаление временных файлов...
LogTiny11Starting=Запуск создания Tiny11...
LogWimUnmounting=Отключение WIM (изменения будут отброшены)...
LogWorkingDir=Рабочая папка: {0}
+
+DefenderTooltip=Если выбрано, антивирусные службы Windows Defender отключаются в образе (как в сборках CORE). В установленной системе не будет антивирусной защиты.
+StatusLoadingEditions=Загрузка выпусков Windows...
+StatusReadyDefaultEditions=Готово (выпуски по умолчанию)
+StatusExportingImage=Экспорт образа...
+ValidationFailed=Предварительные проверки не пройдены. Сборка не запущена.
+ValidationIsoNotFound=Файл ISO Windows не найден: {0}
+ValidationInvalidPath=Недопустимый путь: {0}
+ValidationOutputEqualsIso=Выходной ISO не может совпадать с исходным ISO.
+ValidationOutputInsideScratch=Выходной ISO не может находиться внутри рабочего каталога.
+ValidationOutputDirCreateFailed=Не удалось создать выходной каталог: {0}
+ValidationScratchCreateFailed=Не удалось создать рабочий каталог: {0}
+ValidationDiskSpace=Недостаточно свободного места на {0}: требуется {1:F1} ГБ, доступно {2:F1} ГБ.
+ValidationDiskSpaceUnknown=Не удалось проверить свободное место на диске ({0}). Продолжаем.
diff --git a/Resources/Strings.tr-TR.txt b/Resources/Strings.tr-TR.txt
index ad19575..c360acb 100644
--- a/Resources/Strings.tr-TR.txt
+++ b/Resources/Strings.tr-TR.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder GUI
IsoSelection=Kaynak ISO:
WorkingDirectory=Çalışma Dizini:
OutputPath=Çıktı ISO Yolu:
@@ -43,7 +42,6 @@ PresetEnterpriseTooltip=İş ortamına uygun
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Windows Chat
MicrosoftTeams=Microsoft Teams / Sohbet
XboxApps=Xbox Apps
@@ -78,8 +76,6 @@ DriverCleanup=Kullanılmayan Sürücüler (Yazıcı/Tarayıcı/Modem/Xbox)
# Status Messages
Ready=Hazır
-Processing=İşlem Sürüyor...
-Completed=Tamamlandı!
Error=Hata Oluştu
IsoSelected=ISO dosyası seçildi: {0}
WorkingDirSelected=Çalışma dizini seçildi: {0}
@@ -88,17 +84,10 @@ AutounattendSelected=Özel autounattend.xml seçildi: {0}
AutounattendCleared=Özel autounattend.xml seçimi temizlendi.
# Build Process Messages
-BuildStarted=Tiny11 Oluşturma İşlemi Başladı
-MountingIso=ISO dosyası mount ediliyor...
-RunningScript=PowerShell betiği çalıştırılıyor...
BuildCompleted=İşlem başarıyla tamamlandı!
BuildFailed=İşlem başarısız oldu!
# Error Messages
-IsoMountFailed=ISO dosyası mount edilemedi!
-ScriptNotFound=Script dosyası bulunamadı: {0}
-AdminRightsWarning=Yönetici yetkisi ile çalışması önerilir
-MissingFields=Eksik: {0}
# Tooltips
TPMTooltip=TPM 2.0 gereksinimini atlat
@@ -112,15 +101,9 @@ AutounattendTooltip=Dahili OOBE bypass ayarları yerine kendi autounattend.xml d
# Language Selection
Language=Uygulama Dili:
-LanguageTurkish=Türkçe
-LanguageEnglish=English
-LanguageChangedTR=Dil Türkçe olarak değiştirildi
-LanguageChangedEN=Dil İngilizce olarak değiştirildi
LanguageChanged=Dil {0} olarak değiştirildi
# Image Types Content
-StandardTypeContent=Standart (tiny11maker)
-CoreTypeContent=Core (tiny11Coremaker)
# Startup Messages
AppStarted=Tiny11 GUI başlatıldı
@@ -145,7 +128,6 @@ LogSelectedOptions=Seçilen Ayarlar:
LogRemoveEdge=Edge Kaldır: {0}
LogRemoveOneDrive=OneDrive Kaldır: {0}
LogRemoveCortana=Cortana Kaldır: {0}
-LogRemoveChat=Chat Kaldır: {0}
LogRemoveTeams=Teams Kaldır: {0}
LogRemoveXbox=Xbox Kaldır: {0}
LogDisableTelemetry=Telemetri Devre Dışı: {0}
@@ -160,8 +142,6 @@ LogNo=Hayır
# Log Messages - Process Status
LogScriptCreated=Özel script oluşturuldu: {0}
LogTiny11Starting=Tiny11 oluşturma işlemi başlatılıyor...
-LogIsoMounting=ISO dosyası mount ediliyor...
-LogIsoMounted=ISO mount edildi: {0}
LogProcessing=İşlem sürüyor...
LogBuildSuccess=Tiny11 ISO dosyası başarıyla oluşturuldu!
LogOutputLocation=Çıktı konumu: {0}
@@ -179,7 +159,6 @@ LogWimUnmounting=WIM unmount ediliyor (değişiklikler atılıyor)...
LogIsoUnmounting=ISO unmount ediliyor...
LogRegistryUnloading=Registry hive'ları kaldırılıyor...
LogTempFilesDeleting=Geçici dosyalar siliniyor...
-LogTempFilesError=Bazı geçici dosyalar silinemedi: {0}
LogCancelComplete=İşlem iptal edildi ve temizlik yapıldı.
LogCancelError=İptal sırasında hata: {0}
LogCancelByUser=İşlem kullanıcı tarafından iptal edildi.
@@ -187,38 +166,6 @@ LogCancelReceived=İptal isteği alındı...
LogAlreadyRunning=Zaten bir işlem çalışıyor!
# Log Messages - Script Process
-LogPreparingDirs=Dizinler hazırlanıyor...
-LogCopyingIso=ISO içeriği kopyalanıyor...
-LogConvertingEsd=ESD -> WIM dönüştürülüyor...
-LogMountingWim=Windows image mount ediliyor...
-LogRemovingApps=Gereksiz uygulamalar kaldırılıyor...
-LogRemoving=Kaldırılıyor: {0}
-LogSkipped=Atlandı: {0}
-LogRemovingEdge=Microsoft Edge kaldırılıyor...
-LogDeleted=Silindi: {0}
-LogRemovingOneDrive=OneDrive kaldırılıyor...
-LogApplyingRegistry=Registry ayarları uygulanıyor...
-LogBypassingRequirements=Sistem gereksinimleri bypass ediliyor...
-LogDisablingTelemetry=Telemetri devre dışı bırakılıyor...
-LogDisablingSponsoredApps=Önerilen uygulamalar devre dışı bırakılıyor...
-LogDisablingReservedStorage=Reserved Storage devre dışı bırakılıyor...
-LogDisablingBitLocker=BitLocker otomatik şifreleme devre dışı bırakılıyor...
-LogBypassingMSAccount=Microsoft hesabı gereksinimi bypass ediliyor...
-LogDisablingWindowsUpdate=Windows Update devre dışı bırakılıyor...
-LogDisablingDefender=Windows Defender devre dışı bırakılıyor (Güvenlik riski!)...
-LogSavingRegistry=Registry kaydediliyor...
-LogCreatingOobeScript=OOBE bypass scripti oluşturuluyor...
-LogCreatingAutounattend=autounattend.xml oluşturuluyor...
-LogSavingChanges=Değişiklikler kaydediliyor...
-LogUnmountingSourceIso=Kaynak ISO unmount ediliyor...
-LogCreatingIso=Tiny11 ISO oluşturuluyor...
-LogOscdimgNotFound=oscdimg.exe bulunamadı! Windows ADK yüklü olmalı.
-LogOscdimgFound=oscdimg bulundu: {0}
-LogCleaningUp=Temizlik yapılıyor...
-LogIsoCreatedSuccess=Tiny11 ISO başarıyla oluşturuldu!
-LogLocation=Konum: {0}
-LogSize=Boyut: {0} GB
-LogIsoCreationFailed=ISO oluşturulamadı!
# Status Messages
StatusStarting=İşlem başlatılıyor...
@@ -251,23 +198,14 @@ EditionsLoadFailed=Windows sürümleri yüklenemedi
LoadingDefaultEditions=Varsayılan sürümler yükleniyor...
# Process Messages
-LogProcessFailed=İşlem başarısız oldu (Exit Code: {0}), temizlik yapılıyor...
-LogProcessSuccess=İşlem başarıyla tamamlandı!
-LogIsoCopying=ISO dosyası kopyalanıyor: {0}
-LogIsoSaved=ISO dosyası başarıyla kaydedildi: {0}
-LogIsoCopyError=ISO kopyalama hatası: {0}
-LogSystemCleanupComplete=Sistem temizliği tamamlandı
LogCleanupError=Temizlik hatası: {0}
LogComprehensiveCleanup=Kapsamlı sistem temizliği yapılıyor...
LogComprehensiveCleanupComplete=Kapsamlı temizlik tamamlandı
LogCleanupContinue=Temizlik hatası (devam edilebilir): {0}
-LogSystemCleanupInProgress=Sistem temizliği yapılıyor...
# Log Messages - Additional
LogAdminRightsRecommended=Uyarı: Uygulamanın yönetici yetkisiyle çalıştırılması önerilir.
LogAdminRightsNeededForEditions=Windows sürümlerini okumak için yönetici yetkisi gerekebilir.
-LogProcessCompletedBanner=*** İşlem Başarıyla Tamamlandı ***
-LogProcessFailedBanner=*** İşlem Hata Koduyla Sonlandı: {0} ***
LogPresetMinimalApplied=Minimal preset uygulandı - Maksimum optimizasyon
LogPresetBalancedApplied=Balanced preset uygulandı - Dengeli optimizasyon
LogPresetGamingApplied=Gaming preset uygulandı - Performans optimizasyonu
@@ -275,5 +213,17 @@ LogPresetEnterpriseApplied=Enterprise preset uygulandı - İş ortamı optimizas
LogEditionParseLineError=Parse hatası: {0} - Satır: {1}
LogEditionParseFallback=Parse başarısız, tüm varsayılan sürümler ekleniyor...
LogEditionsRetrievalFailed=Windows sürümleri alınamadı: {0}
-LogIsoUnmounted=ISO unmount edildi.
-LogIsoUnmountError=ISO unmount hatası: {0}
+
+DefenderTooltip=Seçildiğinde Windows Defender antivirüs servisleri imajda devre dışı bırakılır (CORE derlemelerdekiyle aynı işlem). Kurulan sistemde antivirüs koruması olmayacak.
+StatusLoadingEditions=Windows sürümleri yükleniyor...
+StatusReadyDefaultEditions=Hazır (Varsayılan sürümler)
+StatusExportingImage=İmaj dışa aktarılıyor...
+ValidationFailed=Ön kontroller başarısız. İşlem başlatılmadı.
+ValidationIsoNotFound=Windows ISO dosyası bulunamadı: {0}
+ValidationInvalidPath=Geçersiz yol: {0}
+ValidationOutputEqualsIso=Çıktı ISO'su, kaynak ISO ile aynı olamaz.
+ValidationOutputInsideScratch=Çıktı ISO'su, çalışma dizininin içinde olamaz.
+ValidationOutputDirCreateFailed=Çıktı dizini oluşturulamadı: {0}
+ValidationScratchCreateFailed=Çalışma dizini oluşturulamadı: {0}
+ValidationDiskSpace={0} üzerinde yeterli boş disk alanı yok: {1:F1} GB gerekli, {2:F1} GB kullanılabilir.
+ValidationDiskSpaceUnknown=Boş disk alanı kontrol edilemedi ({0}). Devam ediliyor.
diff --git a/Resources/Strings.zh-CN.txt b/Resources/Strings.zh-CN.txt
index 125ca4c..d411f6b 100644
--- a/Resources/Strings.zh-CN.txt
+++ b/Resources/Strings.zh-CN.txt
@@ -1,4 +1,3 @@
-AppTitle=Tiny11 Builder 图形界面
IsoSelection=源 ISO:
WorkingDirectory=工作目录:
OutputPath=输出 ISO 路径:
@@ -31,7 +30,6 @@ PresetEnterpriseTooltip=适合企业环境
MicrosoftEdge=Microsoft Edge
OneDrive=OneDrive
Cortana=Cortana
-WindowsChat=Windows 聊天
MicrosoftTeams=Microsoft Teams / 聊天
XboxApps=Xbox 应用
Telemetry=遥测(数据收集)
@@ -56,15 +54,12 @@ Copilot=Copilot
SpeechOcrHandwriting=语音 / OCR / 手写
DriverCleanup=未使用的驱动程序(打印机/扫描仪/调制解调器/Xbox)
Ready=就绪
-Processing=正在处理...
-Completed=已完成!
Error=发生错误
IsoSelected=已选择 ISO 文件:{0}
WorkingDirSelected=已选择工作目录:{0}
OutputPathSelected=已选择输出 ISO 路径:{0}
AutounattendSelected=已选择自定义 autounattend.xml:{0}
AutounattendCleared=已清除 autounattend.xml 选择。
-BuildStarted=已开始创建 Tiny11
BuildCompleted=操作成功完成!
BuildFailed=操作失败!
TPMTooltip=绕过 TPM 2.0 要求
@@ -147,22 +142,12 @@ LogEditionParseLineError=解析错误:{0} - 行:{1}
LogEditionsRetrievalFailed=无法获取 Windows 版本:{0}
LogExpectedLocation=预期位置:{0}
LogFileSize=文件大小:{0} GB({1} 字节)
-LogIsoCopyError=ISO 复制错误:{0}
-LogIsoCopying=正在复制 ISO 文件:{0}
LogIsoPath=ISO:{0}
-LogIsoSaved=ISO 文件已成功保存:{0}
-LogIsoUnmounted=ISO 已卸载。
-LogIsoUnmountError=ISO 卸载错误:{0}
LogIsoUnmounting=正在卸载 ISO...
LogOutputLocation=输出位置:{0}
LogOutputPath=输出:{0}
-LogProcessCompletedBanner=*** 操作成功完成 ***
-LogProcessFailed=操作失败(退出代码:{0}),正在清理...
-LogProcessFailedBanner=*** 操作结束,错误代码:{0} ***
LogProcessing=正在处理...
-LogProcessSuccess=操作成功完成!
LogRegistryUnloading=正在卸载注册表配置单元...
-LogRemoveChat=删除聊天:{0}
LogRemoveCortana=删除 Cortana:{0}
LogRemoveEdge=删除 Edge:{0}
LogRemoveOneDrive=删除 OneDrive:{0}
@@ -174,3 +159,17 @@ LogTempFilesDeleting=正在删除临时文件...
LogTiny11Starting=正在开始创建 Tiny11...
LogWimUnmounting=正在卸载 WIM(放弃更改)...
LogWorkingDir=工作目录:{0}
+
+DefenderTooltip=选中后,映像中的 Windows Defender 防病毒服务将被禁用(与 CORE 构建相同)。安装后的系统将没有防病毒保护。
+StatusLoadingEditions=正在加载 Windows 版本...
+StatusReadyDefaultEditions=就绪(默认版本)
+StatusExportingImage=正在导出映像...
+ValidationFailed=预检查失败,构建未启动。
+ValidationIsoNotFound=找不到 Windows ISO 文件:{0}
+ValidationInvalidPath=无效的路径:{0}
+ValidationOutputEqualsIso=输出 ISO 不能与源 ISO 相同。
+ValidationOutputInsideScratch=输出 ISO 不能位于工作目录内。
+ValidationOutputDirCreateFailed=无法创建输出目录:{0}
+ValidationScratchCreateFailed=无法创建工作目录:{0}
+ValidationDiskSpace={0} 可用磁盘空间不足:需要 {1:F1} GB,可用 {2:F1} GB。
+ValidationDiskSpaceUnknown=无法检查可用磁盘空间({0})。继续执行。
diff --git a/src/Models/ComponentRemovalOptions.cs b/src/Models/ComponentRemovalOptions.cs
index 7930ff2..9fb56a1 100644
--- a/src/Models/ComponentRemovalOptions.cs
+++ b/src/Models/ComponentRemovalOptions.cs
@@ -19,6 +19,12 @@ public class ComponentRemovalOptions
public bool DisableReservedStorage { get; set; } = true;
public bool DisableBitLocker { get; set; } = true;
+ ///
+ /// Windows Defender antivirüs servislerini imajda devre dışı bırakır ve Defender paketini
+ /// kaldırmayı dener (CORE derlemesindeki Defender işlemleriyle aynı).
+ ///
+ public bool DisableDefender { get; set; } = false;
+
// Sistem Gereksinimleri Bypass
public bool BypassTPM { get; set; } = true;
public bool BypassCPU { get; set; } = true;
diff --git a/src/Services/LocalizationService.cs b/src/Services/LocalizationService.cs
index 63cafef..466d10a 100644
--- a/src/Services/LocalizationService.cs
+++ b/src/Services/LocalizationService.cs
@@ -10,16 +10,53 @@ public class LocalizationService
private static LocalizationService? _instance;
public static LocalizationService Instance => _instance ??= new LocalizationService();
+ private static readonly string[] SupportedLanguages =
+ {
+ "tr-TR", "en-US", "ru-RU", "ja-JP", "de-DE", "fr-FR", "es-ES", "zh-CN"
+ };
+
private readonly Dictionary _strings = new Dictionary();
- private string _currentLanguage = "tr-TR"; // Varsayılan dil
+ private string _currentLanguage = "en-US";
public event EventHandler? LanguageChanged;
- public string CurrentLanguage { get; private set; } = "tr-TR";
+ public string CurrentLanguage { get; private set; } = "en-US";
public LocalizationService()
{
- LoadLanguage(_currentLanguage);
+ LoadLanguage(DetectDefaultLanguage());
+ }
+
+ ///
+ /// İşletim sisteminin UI diline göre başlangıç dilini seçer.
+ /// Tam eşleşme yoksa dil kodu (ör. de-AT → de-DE), o da yoksa en-US kullanılır.
+ ///
+ private static string DetectDefaultLanguage()
+ {
+ try
+ {
+ var uiCulture = CultureInfo.CurrentUICulture;
+ if (!string.IsNullOrEmpty(uiCulture?.Name))
+ {
+ var exact = SupportedLanguages.FirstOrDefault(code =>
+ string.Equals(code, uiCulture.Name, StringComparison.OrdinalIgnoreCase));
+ if (exact != null) return exact;
+
+ var languageTag = uiCulture.TwoLetterISOLanguageName;
+ if (!string.IsNullOrEmpty(languageTag))
+ {
+ var neutral = SupportedLanguages.FirstOrDefault(code =>
+ code.StartsWith(languageTag + "-", StringComparison.OrdinalIgnoreCase));
+ if (neutral != null) return neutral;
+ }
+ }
+ }
+ catch
+ {
+ // Culture API'leri her ortanda çalışmayabilir; sessizce İngilizce'ye dön.
+ }
+
+ return "en-US";
}
public void LoadLanguage(string languageCode)
diff --git a/src/Services/PowerShellService.cs b/src/Services/PowerShellService.cs
index 9587dc3..151cdda 100644
--- a/src/Services/PowerShellService.cs
+++ b/src/Services/PowerShellService.cs
@@ -572,13 +572,34 @@ private string GenerateTiny11Script(string isoPath, string scratchPath, string o
sb.AppendLine();
}
- if (isCoreBuild)
+ // Defender paket kaldırma: standart build'de "Disable Defender" seçildiyse veya CORE build'de çalışır.
+ // CORE build'de Defender ile birlikte diğer sistem paketleri de kaldırılır.
+ var removeDefenderPackage = options.DisableDefender || isCoreBuild;
+ if (removeDefenderPackage)
{
- sb.AppendLine(@"# CORE: servis edilebilirliği azaltan ek sistem paketi temizliği");
- sb.AppendLine(@"Write-Host 'CORE build: removing recovery and selected system packages...' -ForegroundColor Red");
- sb.AppendLine(@"$corePackagePatterns = @('Windows-Defender-Client-Package*', 'Microsoft-Windows-InternetExplorer-Optional-Package*', 'Microsoft-Windows-MediaPlayer-Package*', 'Microsoft-Windows-WordPad-FoD-Package*', 'Microsoft-Windows-StepsRecorder-Package*')");
+ var corePackagePatterns = new List { "Windows-Defender-Client-Package*" };
+ if (isCoreBuild)
+ {
+ corePackagePatterns.Add("Microsoft-Windows-InternetExplorer-Optional-Package*");
+ corePackagePatterns.Add("Microsoft-Windows-MediaPlayer-Package*");
+ corePackagePatterns.Add("Microsoft-Windows-WordPad-FoD-Package*");
+ corePackagePatterns.Add("Microsoft-Windows-StepsRecorder-Package*");
+ }
+
+ sb.AppendLine(isCoreBuild
+ ? @"# CORE: servis edilebilirliği azaltan ek sistem paketi temizliği"
+ : @"# Windows Defender paketini kaldırmayı dene");
+ sb.AppendLine(isCoreBuild
+ ? @"Write-Host 'CORE build: removing recovery and selected system packages...' -ForegroundColor Red"
+ : @"Write-Host 'Attempting Windows Defender package removal...' -ForegroundColor Cyan");
+ sb.AppendLine(@"$corePackagePatterns = @(");
+ foreach (var pattern in corePackagePatterns)
+ {
+ sb.AppendLine($@" '{pattern}'");
+ }
+ sb.AppendLine(@")");
sb.AppendLine(@"$packageOutput = & $dismPath /English /Image:$mountDir /Get-Packages /Format:List");
- sb.AppendLine(@"Assert-NativeSuccess 'CORE package inventory'");
+ sb.AppendLine($@"Assert-NativeSuccess '{(isCoreBuild ? "CORE package inventory" : "Defender package inventory")}'");
sb.AppendLine(@"$packageNames = $packageOutput | Select-String '^Package Identity\s*:\s*(.+)$' | ForEach-Object { $_.Matches[0].Groups[1].Value.Trim() }");
sb.AppendLine(@"foreach ($pattern in $corePackagePatterns) {");
sb.AppendLine(@" foreach ($packageName in ($packageNames | Where-Object { $_ -like $pattern })) {");
@@ -591,6 +612,10 @@ private string GenerateTiny11Script(string isoPath, string scratchPath, string o
sb.AppendLine(@" }");
sb.AppendLine(@" }");
sb.AppendLine(@"}");
+ }
+
+ if (isCoreBuild)
+ {
sb.AppendLine(@"$winRePath = Join-Path $mountDir 'Windows\System32\Recovery\winre.wim'");
sb.AppendLine(@"if (Test-Path $winRePath) { Remove-Item $winRePath -Force -ErrorAction Stop; New-Item $winRePath -ItemType File -Force | Out-Null }");
sb.AppendLine();
@@ -779,10 +804,17 @@ private string GenerateTiny11Script(string isoPath, string scratchPath, string o
sb.AppendLine();
}
- if (isCoreBuild)
+ // Defender servislerini devre dışı bırak: standart build'de "Disable Defender"
+ // seçildiyse veya CORE build'de. Offline düzenleme olduğundan Tamper Protection
+ // devrede değildir.
+ if (options.DisableDefender || isCoreBuild)
{
- sb.AppendLine(@"# CORE: Defender servislerini devre dışı bırak");
- sb.AppendLine(@"Write-Host 'CORE build: disabling Defender services...' -ForegroundColor Red");
+ sb.AppendLine(isCoreBuild
+ ? @"# CORE: Defender servislerini devre dışı bırak"
+ : @"# Windows Defender servislerini devre dışı bırak");
+ sb.AppendLine(isCoreBuild
+ ? @"Write-Host 'CORE build: disabling Defender services...' -ForegroundColor Red"
+ : @"Write-Host 'Disabling Windows Defender services...' -ForegroundColor Cyan");
sb.AppendLine(@"foreach ($serviceName in @('WinDefend', 'WdNisSvc', 'WdNisDrv', 'WdFilter', 'Sense')) {");
sb.AppendLine(@" $serviceKey = 'HKLM\OFFLINE_SYSTEM\ControlSet001\Services\' + $serviceName");
sb.AppendLine(@" & reg.exe query $serviceKey 2>$null | Out-Null");
diff --git a/src/ViewModels/LocalizedStrings.cs b/src/ViewModels/LocalizedStrings.cs
index 432dbb3..1ec7dee 100644
--- a/src/ViewModels/LocalizedStrings.cs
+++ b/src/ViewModels/LocalizedStrings.cs
@@ -102,6 +102,7 @@ public LocalizedSystemFeatures(LocalizationService localization)
public string SponsoredApps => _localization.GetString("SponsoredApps");
public string ReservedStorage => _localization.GetString("ReservedStorage");
public string BitLocker => _localization.GetString("BitLockerEncryption");
+ public string WindowsDefender => _localization.GetString("WindowsDefender");
}
public class LocalizedSystemRequirements
@@ -174,5 +175,6 @@ public LocalizedTooltips(LocalizationService localization)
public string EnterprisePreset => _localization.GetString("PresetEnterpriseTooltip");
public string LanguageSelector => _localization.GetString("Language");
public string AutounattendTooltip => _localization.GetString("AutounattendTooltip");
+ public string DefenderTooltip => _localization.GetString("DefenderTooltip");
}
}
diff --git a/src/ViewModels/MainViewModel.cs b/src/ViewModels/MainViewModel.cs
index f26ddd1..e28399f 100644
--- a/src/ViewModels/MainViewModel.cs
+++ b/src/ViewModels/MainViewModel.cs
@@ -148,6 +148,9 @@ public bool IsEnterprisePreset
private bool _disableBitLocker = true;
public bool DisableBitLocker { get => _disableBitLocker; set { _disableBitLocker = value; OnPropertyChanged(); } }
+ private bool _disableDefender = false;
+ public bool DisableDefender { get => _disableDefender; set { _disableDefender = value; OnPropertyChanged(); } }
+
// System Requirements Bypass
private bool _bypassTPM = true;
public bool BypassTPM { get => _bypassTPM; set { _bypassTPM = value; OnPropertyChanged(); } }
@@ -527,7 +530,13 @@ private async void StartBuild()
{
StatusText = GetLocalizedString("StatusStarting");
IsIndeterminate = true;
-
+
+ // Yol doğrulamaları ve disk alanı ön kontrolü
+ if (!ValidateBuildPrerequisites())
+ {
+ return;
+ }
+
// Çalışma dizini oluştur
if (!Directory.Exists(ScratchPath))
{
@@ -550,6 +559,7 @@ private async void StartBuild()
DisableSponsoredApps = DisableSponsoredApps,
DisableReservedStorage = DisableReservedStorage,
DisableBitLocker = DisableBitLocker,
+ DisableDefender = DisableDefender,
// Sistem gereksinimleri bypass
BypassTPM = BypassTPM,
@@ -592,6 +602,7 @@ private async void StartBuild()
LogOutput += " " + string.Format(GetLocalizedString("LogRemoveXbox"), RemoveXbox ? yes : no) + "\n";
LogOutput += " " + string.Format(GetLocalizedString("LogDisableTelemetry"), DisableTelemetry ? yes : no) + "\n";
LogOutput += " " + string.Format(GetLocalizedString("LogDisableUpdate"), DisableWindowsUpdate ? yes : no) + "\n";
+ LogOutput += " " + string.Format(GetLocalizedString("LogDisableDefender"), DisableDefender ? yes : no) + "\n";
LogOutput += " " + string.Format(GetLocalizedString("LogBypassTPM"), BypassTPM ? yes : no) + "\n";
LogOutput += " " + string.Format(GetLocalizedString("LogBypassMSAccount"), BypassMSAccount ? yes : no) + "\n";
LogOutput += " " + string.Format(GetLocalizedString("LogCustomAutounattend"), string.IsNullOrWhiteSpace(CustomAutounattendPath) ? no : CustomAutounattendPath) + "\n";
@@ -659,6 +670,139 @@ private async void StartBuild()
}
}
+ ///
+ /// İşlem başlamadan önce yol doğrulamaları ve disk alanı kontrolü yapar.
+ /// Hata varsa log'a yazar ve false döner.
+ ///
+ private bool ValidateBuildPrerequisites()
+ {
+ string fullIsoPath, fullScratchPath, fullOutputPath;
+ try
+ {
+ fullIsoPath = Path.GetFullPath(IsoPath);
+ fullScratchPath = Path.GetFullPath(ScratchPath);
+ fullOutputPath = Path.GetFullPath(OutputPath);
+ }
+ catch (Exception ex)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationInvalidPath"), ex.Message) + "\n";
+ return FailPrerequisites();
+ }
+
+ if (!File.Exists(fullIsoPath))
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationIsoNotFound"), fullIsoPath) + "\n";
+ return FailPrerequisites();
+ }
+
+ if (string.Equals(fullOutputPath, fullIsoPath, StringComparison.OrdinalIgnoreCase))
+ {
+ LogOutput += GetLocalizedString("ValidationOutputEqualsIso") + "\n";
+ return FailPrerequisites();
+ }
+
+ if (IsPathInsideDirectory(fullOutputPath, fullScratchPath))
+ {
+ LogOutput += GetLocalizedString("ValidationOutputInsideScratch") + "\n";
+ return FailPrerequisites();
+ }
+
+ try
+ {
+ Directory.CreateDirectory(fullScratchPath);
+ }
+ catch (Exception ex)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationScratchCreateFailed"), $"{fullScratchPath} ({ex.Message})") + "\n";
+ return FailPrerequisites();
+ }
+
+ var outputDirectory = Path.GetDirectoryName(fullOutputPath);
+ try
+ {
+ if (!string.IsNullOrEmpty(outputDirectory))
+ {
+ Directory.CreateDirectory(outputDirectory);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationOutputDirCreateFailed"), $"{outputDirectory} ({ex.Message})") + "\n";
+ return FailPrerequisites();
+ }
+
+ return CheckFreeDiskSpace(fullIsoPath, fullScratchPath, fullOutputPath);
+ }
+
+ ///
+ /// Scratch ve çıktı sürücülerinde yeterli boş alan olup olmadığını kontrol eder.
+ /// Tahmin: scratch için ISO boyutunun 2 katı + 10 GB, çıktı için ISO boyutunun 1,2 katı.
+ ///
+ private bool CheckFreeDiskSpace(string fullIsoPath, string fullScratchPath, string fullOutputPath)
+ {
+ const double gigabyte = 1024.0 * 1024.0 * 1024.0;
+ double isoSizeGb;
+ try
+ {
+ isoSizeGb = new FileInfo(fullIsoPath).Length / gigabyte;
+ }
+ catch (Exception ex)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationDiskSpaceUnknown"), ex.Message) + "\n";
+ return true;
+ }
+
+ var scratchRequiredGb = isoSizeGb * 2.0 + 10.0;
+ var outputRequiredGb = isoSizeGb * 1.2;
+
+ try
+ {
+ var scratchRoot = Path.GetPathRoot(fullScratchPath) ?? fullScratchPath;
+ var outputRoot = Path.GetPathRoot(fullOutputPath) ?? fullOutputPath;
+ var scratchAvailableGb = new DriveInfo(scratchRoot).AvailableFreeSpace / gigabyte;
+ var sameDrive = string.Equals(scratchRoot, outputRoot, StringComparison.OrdinalIgnoreCase);
+ var outputAvailableGb = sameDrive
+ ? scratchAvailableGb
+ : new DriveInfo(outputRoot).AvailableFreeSpace / gigabyte;
+
+ var scratchOk = scratchAvailableGb >= scratchRequiredGb;
+ var outputOk = outputAvailableGb >= (sameDrive ? scratchRequiredGb + outputRequiredGb : outputRequiredGb);
+
+ if (!scratchOk)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationDiskSpace"), scratchRoot, scratchRequiredGb, scratchAvailableGb) + "\n";
+ return FailPrerequisites();
+ }
+
+ if (!outputOk)
+ {
+ LogOutput += string.Format(GetLocalizedString("ValidationDiskSpace"),
+ outputRoot, sameDrive ? scratchRequiredGb + outputRequiredGb : outputRequiredGb, outputAvailableGb) + "\n";
+ return FailPrerequisites();
+ }
+ }
+ catch (Exception ex)
+ {
+ // Örn. UNC yollarında DriveInfo çalışmayabilir; kontrolü atlayıp devam et.
+ LogOutput += string.Format(GetLocalizedString("ValidationDiskSpaceUnknown"), ex.Message) + "\n";
+ }
+
+ return true;
+ }
+
+ private static bool IsPathInsideDirectory(string path, string directory)
+ {
+ var normalizedDirectory = Path.GetFullPath(directory)
+ .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Path.DirectorySeparatorChar;
+ return path.StartsWith(normalizedDirectory, StringComparison.OrdinalIgnoreCase);
+ }
+
+ private bool FailPrerequisites()
+ {
+ LogOutput += GetLocalizedString("ValidationFailed") + "\n";
+ return false;
+ }
+
private bool CanStartBuild()
{
// İşlem çalışıyorsa başlatılamaz
@@ -715,11 +859,11 @@ private async Task LoadWindowsEditionsAsync()
SelectedEdition = WindowsEditions[3]; // Windows 11 Pro'yu varsayılan yap
IsEditionSelectionEnabled = true;
- StatusText = "Hazır (Varsayılan sürümler)";
+ StatusText = GetLocalizedString("StatusReadyDefaultEditions");
return;
}
- StatusText = "Windows sürümleri yükleniyor...";
+ StatusText = GetLocalizedString("StatusLoadingEditions");
IsIndeterminate = true;
var editions = await _powerShellService.GetWindowsEditionsAsync(IsoPath!);
@@ -741,7 +885,7 @@ private async Task LoadWindowsEditionsAsync()
LogOutput += GetLocalizedString("NoEditionsFound") + "\n";
}
- StatusText = "Hazır";
+ StatusText = GetLocalizedString("StatusReady");
}
catch (Exception ex)
{
@@ -759,7 +903,7 @@ private async Task LoadWindowsEditionsAsync()
SelectedEdition = WindowsEditions[3]; // Windows 11 Pro
IsEditionSelectionEnabled = true;
- StatusText = "Hazır (Varsayılan sürümler)";
+ StatusText = GetLocalizedString("StatusReadyDefaultEditions");
}
finally
{
@@ -776,7 +920,7 @@ private void OnOutputReceived(string output)
// Progress tracking based on output messages
if (output.Contains("Exporting image"))
- StatusText = "Exporting image...";
+ StatusText = GetLocalizedString("StatusExportingImage");
else if (output.Contains("Unmounting image"))
StatusText = GetLocalizedString("StatusUnmounting");
else if (output.Contains("Cleanup complete"))
@@ -815,6 +959,7 @@ private void ApplyMinimalPreset()
DisableSponsoredApps = true;
DisableReservedStorage = true;
DisableBitLocker = true;
+ DisableDefender = true;
BypassTPM = true;
BypassCPU = true;
@@ -851,6 +996,7 @@ private void ApplyBalancedPreset()
DisableSponsoredApps = true;
DisableReservedStorage = true;
DisableBitLocker = true;
+ DisableDefender = false;
BypassTPM = true;
BypassCPU = true;
@@ -887,6 +1033,7 @@ private void ApplyGamingPreset()
DisableSponsoredApps = true;
DisableReservedStorage = false; // Performans için
DisableBitLocker = true;
+ DisableDefender = false;
BypassTPM = true;
BypassCPU = true;
@@ -923,6 +1070,7 @@ private void ApplyEnterprisePreset()
DisableSponsoredApps = true;
DisableReservedStorage = false;
DisableBitLocker = false; // Enterprise güvenlik
+ DisableDefender = false; // Enterprise güvenlik
BypassTPM = false; // Enterprise güvenlik için TPM korunur
BypassCPU = true;
diff --git a/src/Views/MainWindow.xaml b/src/Views/MainWindow.xaml
index caf7602..940e732 100644
--- a/src/Views/MainWindow.xaml
+++ b/src/Views/MainWindow.xaml
@@ -7,9 +7,10 @@
xmlns:converters="clr-namespace:tiny11_ui.Converters"
mc:Ignorable="d"
Title="Tiny11 GUI"
- Height="920" Width="1040"
+ Height="880" Width="1000"
+ MinHeight="560" MinWidth="880"
WindowStartupLocation="CenterScreen"
- ResizeMode="NoResize">
+ ResizeMode="CanResizeWithGrip">
@@ -218,6 +219,7 @@
+
diff --git a/tests/Tiny11UI.Tests/PowerShellServiceScriptTests.cs b/tests/Tiny11UI.Tests/PowerShellServiceScriptTests.cs
index 060fcd5..e8b34d4 100644
--- a/tests/Tiny11UI.Tests/PowerShellServiceScriptTests.cs
+++ b/tests/Tiny11UI.Tests/PowerShellServiceScriptTests.cs
@@ -397,6 +397,7 @@ private static async Task RunPowerShellHarness(string harness)
DisableSponsoredApps = false,
DisableReservedStorage = false,
DisableBitLocker = false,
+ DisableDefender = false,
BypassTPM = false,
BypassCPU = false,
BypassRAM = false,
@@ -592,6 +593,25 @@ public void TeamsAndChat_IsOneFunctionalPackageFamilyChoice()
Assert.Contains("Microsoft.Windows.Teams", packages);
}
+ [Fact]
+ public void DefenderOption_AppliesDefenderServicingToStandardBuild()
+ {
+ var service = new PowerShellService(new LocalizationService());
+ var baseline = service.PreviewScript(@"C:\images\windows.iso", @"C:\scratch", @"C:\output\tiny11.iso", 3, BareOptions());
+ var options = BareOptions();
+ options.DisableDefender = true;
+ var standard = service.PreviewScript(@"C:\images\windows.iso", @"C:\scratch", @"C:\output\tiny11.iso", 3, options);
+
+ Assert.DoesNotContain("WinDefend", baseline);
+ Assert.DoesNotContain("Windows-Defender-Client-Package", baseline);
+ Assert.Contains("WinDefend", standard);
+ Assert.Contains("Windows-Defender-Client-Package*", standard);
+ Assert.Contains("Assert-NativeSuccess 'Defender package inventory'", standard);
+ // CORE'a özgü yıkıcı işlemler standart build'e sızmamalı.
+ Assert.DoesNotContain(@"Windows\System32\Recovery\winre.wim", standard);
+ Assert.DoesNotContain(@"Services\wuauserv", standard);
+ }
+
[Fact]
public void CoreBuild_ProducesAdditionalDestructiveOperations()
{
diff --git a/tiny11-ui.csproj b/tiny11-ui.csproj
index 1843fb2..edc9b1c 100644
--- a/tiny11-ui.csproj
+++ b/tiny11-ui.csproj
@@ -9,9 +9,9 @@
enable
tiny11_ui
app.manifest
- 1.2.3
- 1.2.3.0
- 1.2.3.0
+ 1.3.0-beta.1
+ 1.3.0.0
+ 1.3.0.0