diff --git a/CompactGUI/CompactGUI.vbproj b/CompactGUI/CompactGUI.vbproj
index babeb9f..210c3e1 100644
--- a/CompactGUI/CompactGUI.vbproj
+++ b/CompactGUI/CompactGUI.vbproj
@@ -63,12 +63,7 @@
-
-
-
-
- ..\..\FunctionalConverters\FunctionalConverters\bin\Release\net6.0-windows\FunctionalConverters.dll
-
+
@@ -90,5 +85,10 @@
+
+
+ PreserveNewest
+
+
diff --git a/CompactGUI/LanguageConfig.vb b/CompactGUI/LanguageConfig.vb
new file mode 100644
index 0000000..27913aa
--- /dev/null
+++ b/CompactGUI/LanguageConfig.vb
@@ -0,0 +1,37 @@
+Imports System.IO
+Imports System.Text.Json
+
+Public Class LanguageConfig
+ Private Shared ConfigPath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "language_config.json")
+
+ Public Class ConfigData
+ Public Property LanguageCode As String = "en-US"
+ End Class
+
+ Public Shared Sub SaveLanguage(langCode As String)
+ Try
+ Dim data As New ConfigData With {.LanguageCode = langCode}
+ Dim jsonString = JsonSerializer.Serialize(data)
+ File.WriteAllText(ConfigPath, jsonString)
+ Catch ex As Exception
+ End Try
+ End Sub
+
+ Public Shared Function GetLanguage() As String
+ Try
+ If File.Exists(ConfigPath) Then
+ Dim jsonString = File.ReadAllText(ConfigPath)
+ Dim data = JsonSerializer.Deserialize(Of ConfigData)(jsonString)
+ Return If(data IsNot Nothing AndAlso Not String.IsNullOrEmpty(data.LanguageCode), data.LanguageCode, "en-US")
+ Else
+ Dim sysLang = System.Globalization.CultureInfo.CurrentUICulture.Name
+ Dim i18nPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "i18n", $"{sysLang}.json")
+ If File.Exists(i18nPath) Then
+ Return sysLang
+ End If
+ End If
+ Catch ex As Exception
+ End Try
+ Return "en-US"
+ End Function
+End Class
\ No newline at end of file
diff --git a/CompactGUI/MainWindow.xaml.vb b/CompactGUI/MainWindow.xaml.vb
index 185b3d0..2629477 100644
--- a/CompactGUI/MainWindow.xaml.vb
+++ b/CompactGUI/MainWindow.xaml.vb
@@ -15,6 +15,7 @@ Class MainWindow : Implements INavigationWindow, INotifyPropertyChanged
' This call is required by the designer.
InitializeComponent()
+ TranslationHelper.StartAutoTranslate()
' Add any initialization after the InitializeComponent() call.
snackbarService.SetSnackbarPresenter(RootSnackbar)
diff --git a/CompactGUI/TranslationHelper.vb b/CompactGUI/TranslationHelper.vb
new file mode 100644
index 0000000..85b72e1
--- /dev/null
+++ b/CompactGUI/TranslationHelper.vb
@@ -0,0 +1,160 @@
+Imports System.IO
+Imports System.Reflection
+Imports System.Text.Json
+Imports System.Text.RegularExpressions
+Imports System.Windows
+Imports System.Windows.Controls
+Imports System.Windows.Documents
+Imports System.Windows.Media
+Imports System.Windows.Threading
+
+Public Class TranslationHelper
+
+ Private Shared _isInitialized As Boolean = False
+ Public Shared Translations As New Dictionary(Of String, String)
+
+ Public Shared Sub StartAutoTranslate()
+ If _isInitialized Then Return
+ _isInitialized = True
+
+ Dim currentLang = LanguageConfig.GetLanguage()
+
+ If currentLang <> "en-US" Then
+ Dim langFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "i18n", $"{currentLang}.json")
+ If File.Exists(langFile) Then
+ LoadLanguageFile(langFile)
+
+ EventManager.RegisterClassHandler(GetType(FrameworkElement), FrameworkElement.LoadedEvent, New RoutedEventHandler(AddressOf OnElementLoaded))
+ EventManager.RegisterClassHandler(GetType(FrameworkContentElement), FrameworkContentElement.LoadedEvent, New RoutedEventHandler(AddressOf OnElementLoaded))
+ End If
+ End If
+ End Sub
+
+ Public Shared Sub LoadLanguageFile(filePath As String)
+ Try
+ Dim jsonContent = File.ReadAllText(filePath)
+ Dim newTranslations = JsonSerializer.Deserialize(Of Dictionary(Of String, String))(jsonContent)
+ If newTranslations IsNot Nothing Then
+ Translations = newTranslations
+ End If
+ Catch ex As Exception
+ System.Diagnostics.Debug.WriteLine($"Failed to load language file: {ex.Message}")
+ End Try
+ End Sub
+
+ Public Shared Sub TranslateWindow(obj As DependencyObject)
+ End Sub
+
+ Private Shared Sub OnElementLoaded(sender As Object, e As RoutedEventArgs)
+ Dim element As DependencyObject = TryCast(sender, DependencyObject)
+ If element Is Nothing Then Return
+
+ If TypeOf element Is DispatcherObject Then
+ DirectCast(element, DispatcherObject).Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, Sub()
+ Try
+ RecursiveTranslate(element)
+ Catch ex As Exception
+ End Try
+ End Sub)
+ End If
+ End Sub
+
+ Private Shared Function NormalizeText(input As String) As String
+ If String.IsNullOrEmpty(input) Then Return ""
+ Dim normalized As String = Regex.Replace(input, "\s+", " ")
+ Return normalized.Trim()
+ End Function
+
+ Public Shared Function GetString(key As String) As String
+ If Translations.ContainsKey(key) Then
+ Return Translations(key)
+ End If
+ Return key
+ End Function
+
+ Public Shared Function GetStringForLanguage(langCode As String, key As String) As String
+ Dim filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "i18n", $"{langCode}.json")
+ If File.Exists(filePath) Then
+ Try
+ Dim jsonContent = File.ReadAllText(filePath)
+ Dim tempDict = JsonSerializer.Deserialize(Of Dictionary(Of String, String))(jsonContent)
+ If tempDict IsNot Nothing AndAlso tempDict.ContainsKey(key) Then
+ Return tempDict(key)
+ End If
+ Catch
+ End Try
+ End If
+
+ If langCode = "en-US" Then Return key
+
+ Return GetString(key)
+ End Function
+
+ Private Shared Sub TryReplace(original As String, applyAction As Action(Of String))
+ If String.IsNullOrWhiteSpace(original) Then Return
+
+ Dim normalizedText As String = NormalizeText(original)
+ Dim found As Boolean = False
+
+ If Translations.ContainsKey(normalizedText) Then
+ applyAction(Translations(normalizedText))
+ found = True
+ Else
+ For Each kvp In Translations
+ If kvp.Key.Length > 3 AndAlso normalizedText.Contains(kvp.Key) Then
+ Dim translated As String = normalizedText.Replace(kvp.Key, kvp.Value)
+
+ If translated <> normalizedText Then
+ applyAction(translated)
+ found = True
+ Exit For
+ End If
+ End If
+ Next
+ End If
+ End Sub
+
+ Private Shared Sub RecursiveTranslate(element As Object)
+ If element Is Nothing Then Return
+
+ Dim targetProperties As String() = {"Text", "Content", "Header", "Title", "Description", "Label", "ToolTip", "PlaceholderText"}
+ Dim type As Type = element.GetType()
+
+ For Each propName In targetProperties
+ Dim prop = type.GetProperty(propName)
+ If prop IsNot Nothing AndAlso prop.CanRead AndAlso prop.CanWrite Then
+ Try
+ Dim val = prop.GetValue(element)
+ If TypeOf val Is String Then
+ TryReplace(CStr(val), Sub(newVal) prop.SetValue(element, newVal))
+ ElseIf val IsNot Nothing AndAlso Not TypeOf val Is ValueType Then
+ RecursiveTranslate(val)
+ End If
+ Catch ex As Exception
+ End Try
+ End If
+ Next
+
+ If TypeOf element Is TextBlock Then
+ Dim tb = DirectCast(element, TextBlock)
+ For Each inline In tb.Inlines
+ If TypeOf inline Is Run Then
+ RecursiveTranslate(inline)
+ End If
+ Next
+ End If
+
+ If TypeOf element Is DependencyObject Then
+ Dim depObj = DirectCast(element, DependencyObject)
+ If TypeOf depObj Is Visual OrElse TypeOf depObj Is System.Windows.Media.Media3D.Visual3D Then
+ Dim childCount = VisualTreeHelper.GetChildrenCount(depObj)
+ For i = 0 To childCount - 1
+ Dim child = VisualTreeHelper.GetChild(depObj, i)
+ RecursiveTranslate(child)
+ Next
+ End If
+ End If
+
+ End Sub
+
+End Class
\ No newline at end of file
diff --git a/CompactGUI/Views/SettingsPage.xaml b/CompactGUI/Views/SettingsPage.xaml
index cf52af3..4c46df5 100644
--- a/CompactGUI/Views/SettingsPage.xaml
+++ b/CompactGUI/Views/SettingsPage.xaml
@@ -1,4 +1,4 @@
-
-
-
@@ -365,11 +337,11 @@
-
-
@@ -423,6 +395,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/CompactGUI/Views/SettingsPage.xaml.vb b/CompactGUI/Views/SettingsPage.xaml.vb
index 6524a37..f58961f 100644
--- a/CompactGUI/Views/SettingsPage.xaml.vb
+++ b/CompactGUI/Views/SettingsPage.xaml.vb
@@ -1,4 +1,5 @@
-Public Class SettingsPage
+Public Class SettingsPage
+ Private _isInitialized As Boolean = False
Sub New(settingsviewmodel As SettingsViewModel)
@@ -10,9 +11,42 @@
ScrollViewer.SetCanContentScroll(Me, False)
- End Sub
-
+ Dim currentLang = LanguageConfig.GetLanguage()
+
+ For i As Integer = 0 To UiLanguageComboBox.Items.Count - 1
+ Dim item = CType(UiLanguageComboBox.Items(i), ComboBoxItem)
+ If item.Tag.ToString() = currentLang Then
+ UiLanguageComboBox.SelectedIndex = i
+ Exit For
+ End If
+ Next
+
+ If UiLanguageComboBox.SelectedIndex = -1 Then
+ UiLanguageComboBox.SelectedIndex = 0
+ End If
+
+ _isInitialized = True
+ End Sub
+ Private Sub UiLanguageComboBox_SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
+ If Not _isInitialized Then Return
+ If UiLanguageComboBox.SelectedItem Is Nothing Then Return
+
+ Dim selectedItem = CType(UiLanguageComboBox.SelectedItem, ComboBoxItem)
+ Dim langCode = selectedItem.Tag.ToString()
+
+ Dim currentSaved = LanguageConfig.GetLanguage()
+ If langCode <> currentSaved Then
+ LanguageConfig.SaveLanguage(langCode)
+
+ Dim msg = TranslationHelper.GetStringForLanguage(langCode, "RestartRequired")
+ If msg = "RestartRequired" Then
+ msg = "Language settings saved. Please restart CompactGUI to apply changes."
+ End If
+
+ MessageBox.Show(msg, "CompactGUI", MessageBoxButton.OK, MessageBoxImage.Information)
+ End If
+ End Sub
-End Class
+End Class
\ No newline at end of file
diff --git a/CompactGUI/i18n/de-DE.json b/CompactGUI/i18n/de-DE.json
new file mode 100644
index 0000000..8eb6733
--- /dev/null
+++ b/CompactGUI/i18n/de-DE.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "Startseite",
+ "Watcher": "Überwachung",
+ "Compression DB": "Komprimierungs-DB",
+ "Admin": "Admin",
+ "Open": "Öffnen",
+ "Exit": "Beenden",
+ "Settings": "Einstellungen",
+ "Filetype Management": "Dateityp-Verwaltung",
+ "Manage local skipped filetypes": "Lokale übersprungene Dateitypen verwalten",
+ "edit": "Bearbeiten",
+ "Agression of online skiplist": "Aggressivität der Online-Skiplist",
+ "(?)": "(?)",
+ "medium": "Mittel",
+ "high": "Hoch",
+ "System Integration": "Systemintegration",
+ "Add to right-click context menu": "Zum Kontextmenü hinzufügen",
+ "Add to start menu": "Zum Startmenü hinzufügen",
+ "Show notification on completion": "Benachrichtigung bei Abschluss anzeigen",
+ "Start CompactGUI in system tray": "CompactGUI im System-Tray starten",
+ "Compression Settings": "Komprimierungseinstellungen",
+ "Maximum Compression Threads": "Maximale Komprimierungs-Threads",
+ "HDDs only use 1 thread": "HDDs nutzen nur 1 Thread",
+ "Estimate Compression for non-Steam Folders (beta)": "Komprimierung für Nicht-Steam-Ordner schätzen (Beta)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "Analysiert Dateien schnell und schätzt deren Komprimierungsrate, ohne auf die Festplatte zu schreiben. Dies wird auf HDDs wahrscheinlich sehr langsam sein!",
+ "Background Watcher Settings": "Hintergrundüberwachung",
+ "Monitor compressed folders for changes": "Komprimierte Ordner auf Änderungen überwachen",
+ "Compress folders:": "Ordner komprimieren:",
+ "Never": "Nie",
+ "When System is Idle": "Wenn System im Leerlauf",
+ "On Schedule": "Nach Zeitplan",
+ "On Schedule if system is also idle": "Nach Zeitplan (nur im Leerlauf)",
+ "every": "Alle",
+ "day(s)": "Tag(e)",
+ "Last ran:": "Zuletzt ausgeführt:",
+ "Next scheduled:": "Nächste Ausführung:",
+ "Update Settings": "Update-Einstellungen",
+ "Check for pre-release updates": "Auf Vorab-Versionen prüfen",
+ "UI Settings": "UI-Einstellungen",
+ "Always show details on Compression Mode buttons": "Details auf Komprimierungsmodus-Buttons immer anzeigen",
+ "Database Results": "Datenbank-Ergebnisse",
+ "Last Fetched:": "Zuletzt abgerufen:",
+ "Games": "Spiele",
+ "Search by game name or SteamID...": "Nach Spielname oder SteamID suchen...",
+ "Sort By": "Sortieren nach",
+ "Game Name": "Spielname",
+ "Ascending": "Aufsteigend",
+ "Descending": "Absteigend",
+ "SteamID": "SteamID",
+ "Max Savings": "Max. Ersparnis",
+ "SteamID:": "SteamID:",
+ "MODE": "MODUS",
+ "BEFORE": "VORHER",
+ "AFTER": "NACHHER",
+ "SAVINGS": "ERSPARNIS",
+ "TOTAL RESULTS": "GESAMTERGEBNISSE",
+ "UNCOMPRESSABLE FILETYPES": "NICHT KOMPRIMIERBARE DATEITYPEN",
+ "uncompressed size": "Unkomprimierte Größe",
+ "contained files": "Enthaltene Dateien",
+ "Compress Selected": "Auswahl komprimieren",
+ "select a folder": "Ordner auswählen",
+ "Version": "Version",
+ "Add Folder to Queue": "Ordner zur Warteschlange hinzufügen",
+ "Compression Mode": "Komprimierungsmodus",
+ "Configuration": "Konfiguration",
+ "Skip file types specified in settings": "In Einstellungen definierte Dateitypen überspringen",
+ "files will be skipped": "Dateien werden übersprungen",
+ "Skip file types likely to compress poorly": "Dateitypen mit voraussichtlich schlechter Komprimierung überspringen",
+ "Watch folder for changes": "Ordner auf Änderungen überwachen",
+ "Apply to all": "Auf alle anwenden",
+ "For Steam Games:": "Für Steam-Spiele:",
+ "estimate is based on database results": "Schätzung basiert auf Datenbankergebnissen",
+ "For Non-Steam Folders:": "Für Nicht-Steam-Ordner:",
+ "estimate is calculated by block analysis.": "Schätzung wird durch Blockanalyse berechnet.",
+ "If estimation is disabled, this will always show 0%": "Wenn die Schätzung deaktiviert ist, wird hier immer 0% angezeigt",
+ "skips files based on database results": "Überspringt Dateien basierend auf Datenbankergebnissen",
+ "skips files based on compression estimate": "Überspringt Dateien basierend auf Komprimierungsschätzung",
+ "Compression Summary": "Komprimierungszusammenfassung",
+ "Before": "Vorher",
+ "After": "Nachher",
+ "Space Saved": "Platz gespart",
+ "Files Compressed": "Dateien komprimiert",
+ "Uncompress": "Dekomprimieren",
+ "Compress Again": "Erneut komprimieren",
+ "Submit Results": "Ergebnisse senden",
+ "Estimated size": "Geschätzte Größe",
+ "Savings": "Ersparnis",
+ "unknown": "Unbekannt",
+ "Watched Folders": "Überwachte Ordner",
+ "Add a custom folder to the watchlist": "Benutzerdefinierten Ordner zur Watchlist hinzufügen",
+ "saved": "gespart",
+ "Last analysed": "Zuletzt analysiert",
+ "Re-analyse all watched folders": "Alle überwachten Ordner neu analysieren",
+ "Cancel Background Compressor": "Hintergrundkomprimierung abbrechen",
+ "Compress All Now": "Jetzt alle komprimieren",
+ "last compressed:": "Zuletzt komprimiert:",
+ "last modified:": "Zuletzt geändert:",
+ "% decayed": "% verfallen",
+ "Remove from Watchlist": "Von Watchlist entfernen",
+ "Add to compression queue": "Zur Komprimierungswarteschlange hinzufügen",
+ "Re-analyse this folder": "Diesen Ordner neu analysieren",
+ "Not Compressed": "Nicht komprimiert",
+ "Compressed": "Komprimiert",
+ "Compress Folder": "Ordner komprimieren",
+ "Invalid Folder": "Ungültiger Ordner",
+ "OK": "OK",
+ "Unknown": "Unbekannt",
+ "days ago": "Tage her",
+ "hours ago": "Stunden her",
+ "minutes ago": "Minuten her",
+ "just now": "Gerade eben",
+ "Awaiting Compression": "Warte auf Komprimierung",
+ "Analysing": "Analysieren",
+ "Working": "Arbeiten",
+ "Scheduled Compression Running": "Geplante Komprimierung läuft",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI führt eine geplante Aufgabe aus und komprimiert überwachte Ordner im Hintergrund",
+ "Scheduled Compression Completed": "Geplante Komprimierung abgeschlossen",
+ "Next scheduled task is on": "Nächste geplante Aufgabe am:",
+ "Restart as Admin": "Als Admin neu starten",
+ "Insufficient permission to access this folder.": "Unzureichende Berechtigung für Zugriff auf diesen Ordner.",
+ "Click to download": "Zum Herunterladen klicken",
+ "Update Available": "Update verfügbar",
+ "Failed to submit to wiki": "Senden an Wiki fehlgeschlagen",
+ "Please check your internet connection and try again": "Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut",
+ "Submitted to wiki": "An Wiki gesendet",
+ "Applied to all folders": "Auf alle Ordner angewendet",
+ "Compression options have been applied to all folders": "Komprimierungsoptionen wurden auf alle Ordner angewendet",
+ "Cannot remove folder": "Ordner kann nicht entfernt werden",
+ "Please wait until the current operation is finished": "Bitte warten Sie, bis der aktuelle Vorgang abgeschlossen ist",
+ "Success": "Erfolg",
+ "Added to Queue": "Zur Warteschlange hinzugefügt",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "Dieses Spiel verwendet DirectStorage-Technologie. Wenn Sie diese Funktion nutzen, sollten Sie dieses Spiel nicht komprimieren.",
+ "You currently have": "Sie haben derzeit",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "Ordner, die überwacht werden. Das Schließen von CompactGUI beendet die Überwachung.",
+ "Are you sure you want to exit?": "Sind Sie sicher, dass Sie beenden möchten?",
+ "View on GitHub": "Auf GitHub ansehen",
+ "Buy me a coffee": "Spendieren Sie mir einen Kaffee",
+ "GB saved": "GB gespart",
+ "MB saved": "MB gespart",
+ "files being watched": "Dateien werden überwacht",
+ "Closing CompactGUI will stop them from being monitored.": "Das Schließen von CompactGUI beendet die Überwachung.",
+ "Language (Requires Restart)": " Sprache (Neustart erforderlich)",
+ "folders being watched": "Ordner werden überwacht",
+ "RestartRequired": "Spracheinstellungen gespeichert. Bitte starten Sie CompactGUI neu, um die Änderungen zu übernehmen。"
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/es-ES.json b/CompactGUI/i18n/es-ES.json
new file mode 100644
index 0000000..07f8150
--- /dev/null
+++ b/CompactGUI/i18n/es-ES.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "Inicio",
+ "Watcher": "Monitor",
+ "Compression DB": "BD Compresión",
+ "Admin": "Admin",
+ "Open": "Abrir",
+ "Exit": "Salir",
+ "Settings": "Ajustes",
+ "Filetype Management": "Gestión de tipos de archivo",
+ "Manage local skipped filetypes": "Gestionar tipos de archivo omitidos locales",
+ "edit": "editar",
+ "Agression of online skiplist": "Agresividad de la lista de omisión online",
+ "(?)": "(?)",
+ "medium": "media",
+ "high": "alta",
+ "System Integration": "Integración del sistema",
+ "Add to right-click context menu": "Añadir al menú contextual",
+ "Add to start menu": "Añadir al menú inicio",
+ "Show notification on completion": "Mostrar notificación al finalizar",
+ "Start CompactGUI in system tray": "Iniciar CompactGUI en la bandeja del sistema",
+ "Compression Settings": "Ajustes de compresión",
+ "Maximum Compression Threads": "Hilos máximos de compresión",
+ "HDDs only use 1 thread": "Los HDD usan solo 1 hilo",
+ "Estimate Compression for non-Steam Folders (beta)": "Estimar compresión para carpetas no-Steam (beta)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "Analiza rápidamente los archivos y estima su tasa de compresión sin escribir en el disco. ¡Esto probablemente será muy lento en HDDs!",
+ "Background Watcher Settings": "Ajustes del monitor en segundo plano",
+ "Monitor compressed folders for changes": "Monitorizar cambios en carpetas comprimidas",
+ "Compress folders:": "Comprimir carpetas:",
+ "Never": "Nunca",
+ "When System is Idle": "Cuando el sistema esté inactivo",
+ "On Schedule": "Programado",
+ "On Schedule if system is also idle": "Programado (si el sistema está inactivo)",
+ "every": "cada",
+ "day(s)": "día(s)",
+ "Last ran:": "Última ejecución:",
+ "Next scheduled:": "Próxima programada:",
+ "Update Settings": "Ajustes de actualización",
+ "Check for pre-release updates": "Buscar actualizaciones preliminares",
+ "UI Settings": "Ajustes de interfaz",
+ "Always show details on Compression Mode buttons": "Mostrar siempre detalles en botones de modo de compresión",
+ "Database Results": "Resultados de la base de datos",
+ "Last Fetched:": "Última obtención:",
+ "Games": "Juegos",
+ "Search by game name or SteamID...": "Buscar por nombre o SteamID...",
+ "Sort By": "Ordenar por",
+ "Game Name": "Nombre del juego",
+ "Ascending": "Ascendente",
+ "Descending": "Descendente",
+ "SteamID": "SteamID",
+ "Max Savings": "Ahorro máx.",
+ "SteamID:": "SteamID:",
+ "MODE": "MODO",
+ "BEFORE": "ANTES",
+ "AFTER": "DESPUÉS",
+ "SAVINGS": "AHORRO",
+ "TOTAL RESULTS": "RESULTADOS TOTALES",
+ "UNCOMPRESSABLE FILETYPES": "TIPOS DE ARCHIVO NO COMPRIMIBLES",
+ "uncompressed size": "tamaño sin comprimir",
+ "contained files": "archivos contenidos",
+ "Compress Selected": "Comprimir seleccionados",
+ "select a folder": "seleccionar carpeta",
+ "Version": "Versión",
+ "Add Folder to Queue": "Añadir carpeta a la cola",
+ "Compression Mode": "Modo de compresión",
+ "Configuration": "Configuración",
+ "Skip file types specified in settings": "Omitir tipos de archivo especificados en ajustes",
+ "files will be skipped": "archivos serán omitidos",
+ "Skip file types likely to compress poorly": "Omitir tipos de archivo difícilmente comprimibles",
+ "Watch folder for changes": "Monitorizar cambios en carpeta",
+ "Apply to all": "Aplicar a todo",
+ "For Steam Games:": "Para juegos de Steam:",
+ "estimate is based on database results": "la estimación se basa en resultados de la BD",
+ "For Non-Steam Folders:": "Para carpetas no-Steam:",
+ "estimate is calculated by block analysis.": "la estimación se calcula por análisis de bloques.",
+ "If estimation is disabled, this will always show 0%": "Si la estimación está desactivada, esto siempre mostrará 0%",
+ "skips files based on database results": "omite archivos basado en resultados de la BD",
+ "skips files based on compression estimate": "omite archivos basado en estimación de compresión",
+ "Compression Summary": "Resumen de compresión",
+ "Before": "Antes",
+ "After": "Después",
+ "Space Saved": "Espacio ahorrado",
+ "Files Compressed": "Archivos comprimidos",
+ "Uncompress": "Descomprimir",
+ "Compress Again": "Comprimir de nuevo",
+ "Submit Results": "Enviar resultados",
+ "Estimated size": "Tamaño estimado",
+ "Savings": "Ahorro",
+ "unknown": "desconocido",
+ "Watched Folders": "Carpetas monitorizadas",
+ "Add a custom folder to the watchlist": "Añadir carpeta personalizada a la lista",
+ "saved": "ahorrado",
+ "Last analysed": "Último análisis",
+ "Re-analyse all watched folders": "Reanalizar todas las carpetas monitorizadas",
+ "Cancel Background Compressor": "Cancelar compresor en segundo plano",
+ "Compress All Now": "Comprimir todo ahora",
+ "last compressed:": "última compresión:",
+ "last modified:": "última modificación:",
+ "% decayed": "% degradado",
+ "Remove from Watchlist": "Eliminar de la lista",
+ "Add to compression queue": "Añadir a la cola de compresión",
+ "Re-analyse this folder": "Reanalizar esta carpeta",
+ "Not Compressed": "No comprimido",
+ "Compressed": "Comprimido",
+ "Compress Folder": "Comprimir carpeta",
+ "Invalid Folder": "Carpeta inválida",
+ "OK": "Aceptar",
+ "Unknown": "Desconocido",
+ "days ago": "hace días",
+ "hours ago": "hace horas",
+ "minutes ago": "hace minutos",
+ "just now": "ahora mismo",
+ "Awaiting Compression": "Esperando compresión",
+ "Analysing": "Analizando",
+ "Working": "Trabajando",
+ "Scheduled Compression Running": "Compresión programada en ejecución",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI está ejecutando una tarea programada y comprimirá las carpetas monitorizadas en segundo plano",
+ "Scheduled Compression Completed": "Compresión programada completada",
+ "Next scheduled task is on": "Siguiente tarea programada el:",
+ "Restart as Admin": "Reiniciar como Admin",
+ "Insufficient permission to access this folder.": "Permiso insuficiente para acceder a esta carpeta.",
+ "Click to download": "Clic para descargar",
+ "Update Available": "Actualización disponible",
+ "Failed to submit to wiki": "Fallo al enviar a la wiki",
+ "Please check your internet connection and try again": "Por favor verifique su conexión a internet e intente de nuevo",
+ "Submitted to wiki": "Enviado a la wiki",
+ "Applied to all folders": "Aplicado a todas las carpetas",
+ "Compression options have been applied to all folders": "Las opciones de compresión se han aplicado a todas las carpetas",
+ "Cannot remove folder": "No se puede eliminar la carpeta",
+ "Please wait until the current operation is finished": "Por favor espere hasta que la operación actual termine",
+ "Success": "Éxito",
+ "Added to Queue": "Añadido a la cola",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "Este juego usa tecnología DirectStorage. Si usa esta función, no debería comprimir este juego.",
+ "You currently have": "Actualmente tiene",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "carpetas siendo monitorizadas. Cerrar CompactGUI detendrá su monitorización.",
+ "Are you sure you want to exit?": "¿Está seguro de que desea salir?",
+ "View on GitHub": "Ver en GitHub",
+ "Buy me a coffee": "Cómprame un café",
+ "GB saved": "GB ahorrados",
+ "MB saved": "MB ahorrados",
+ "files being watched": "archivos monitorizados",
+ "Closing CompactGUI will stop them from being monitored.": "Cerrar CompactGUI detendrá la monitorización.",
+ "Language (Requires Restart)": " Idioma (Requiere reinicio)",
+ "folders being watched": "carpetas siendo vigiladas",
+ "RestartRequired": "Configuración de idioma guardada. Por favor, reinicie CompactGUI para aplicar los cambios."
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/fr-FR.json b/CompactGUI/i18n/fr-FR.json
new file mode 100644
index 0000000..3fb6ccf
--- /dev/null
+++ b/CompactGUI/i18n/fr-FR.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "Accueil",
+ "Watcher": "Surveillance",
+ "Compression DB": "BDD Compression",
+ "Admin": "Admin",
+ "Open": "Ouvrir",
+ "Exit": "Quitter",
+ "Settings": "Paramètres",
+ "Filetype Management": "Gestion types de fichiers",
+ "Manage local skipped filetypes": "Gérer les types de fichiers ignorés localement",
+ "edit": "éditer",
+ "Agression of online skiplist": "Agressivité de la liste d'exclusion en ligne",
+ "(?)": "(?)",
+ "medium": "moyen",
+ "high": "élevé",
+ "System Integration": "Intégration système",
+ "Add to right-click context menu": "Ajouter au menu contextuel (clic droit)",
+ "Add to start menu": "Ajouter au menu Démarrer",
+ "Show notification on completion": "Afficher une notification à la fin",
+ "Start CompactGUI in system tray": "Démarrer CompactGUI dans la barre d'état",
+ "Compression Settings": "Paramètres de compression",
+ "Maximum Compression Threads": "Threads de compression maximum",
+ "HDDs only use 1 thread": "Les disques durs (HDD) n'utilisent qu'un thread",
+ "Estimate Compression for non-Steam Folders (beta)": "Estimer la compression pour les dossiers non-Steam (bêta)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "Analyse rapidement les fichiers et estime leur taux de compression sans écrire sur le disque. Cela sera probablement très lent sur les disques durs !",
+ "Background Watcher Settings": "Paramètres de surveillance en arrière-plan",
+ "Monitor compressed folders for changes": "Surveiller les modifications des dossiers compressés",
+ "Compress folders:": "Compresser les dossiers :",
+ "Never": "Jamais",
+ "When System is Idle": "Quand le système est inactif",
+ "On Schedule": "Planifié",
+ "On Schedule if system is also idle": "Planifié (si système inactif)",
+ "every": "tous les",
+ "day(s)": "jour(s)",
+ "Last ran:": "Dernière exécution :",
+ "Next scheduled:": "Prochaine planification :",
+ "Update Settings": "Paramètres de mise à jour",
+ "Check for pre-release updates": "Vérifier les mises à jour pré-release",
+ "UI Settings": "Paramètres de l'interface",
+ "Always show details on Compression Mode buttons": "Toujours afficher les détails sur les boutons de mode de compression",
+ "Database Results": "Résultats de la base de données",
+ "Last Fetched:": "Dernière récupération :",
+ "Games": "Jeux",
+ "Search by game name or SteamID...": "Rechercher par nom de jeu ou SteamID...",
+ "Sort By": "Trier par",
+ "Game Name": "Nom du jeu",
+ "Ascending": "Croissant",
+ "Descending": "Décroissant",
+ "SteamID": "SteamID",
+ "Max Savings": "Économies max",
+ "SteamID:": "SteamID :",
+ "MODE": "MODE",
+ "BEFORE": "AVANT",
+ "AFTER": "APRÈS",
+ "SAVINGS": "ÉCONOMIES",
+ "TOTAL RESULTS": "RÉSULTATS TOTAUX",
+ "UNCOMPRESSABLE FILETYPES": "TYPES DE FICHIERS NON COMPRESSIBLES",
+ "uncompressed size": "taille non compressée",
+ "contained files": "fichiers contenus",
+ "Compress Selected": "Compresser la sélection",
+ "select a folder": "sélectionner un dossier",
+ "Version": "Version",
+ "Add Folder to Queue": "Ajouter le dossier à la file d'attente",
+ "Compression Mode": "Mode de compression",
+ "Configuration": "Configuration",
+ "Skip file types specified in settings": "Ignorer les types de fichiers spécifiés dans les paramètres",
+ "files will be skipped": "fichiers seront ignorés",
+ "Skip file types likely to compress poorly": "Ignorer les types de fichiers peu compressibles",
+ "Watch folder for changes": "Surveiller les modifications du dossier",
+ "Apply to all": "Appliquer à tous",
+ "For Steam Games:": "Pour les jeux Steam :",
+ "estimate is based on database results": "l'estimation est basée sur les résultats de la BDD",
+ "For Non-Steam Folders:": "Pour les dossiers non-Steam :",
+ "estimate is calculated by block analysis.": "l'estimation est calculée par analyse de blocs.",
+ "If estimation is disabled, this will always show 0%": "Si l'estimation est désactivée, ceci affichera toujours 0%",
+ "skips files based on database results": "ignore les fichiers basés sur les résultats de la BDD",
+ "skips files based on compression estimate": "ignore les fichiers basés sur l'estimation de compression",
+ "Compression Summary": "Résumé de la compression",
+ "Before": "Avant",
+ "After": "Après",
+ "Space Saved": "Espace économisé",
+ "Files Compressed": "Fichiers compressés",
+ "Uncompress": "Décompresser",
+ "Compress Again": "Compresser à nouveau",
+ "Submit Results": "Soumettre les résultats",
+ "Estimated size": "Taille estimée",
+ "Savings": "Économies",
+ "unknown": "inconnu",
+ "Watched Folders": "Dossiers surveillés",
+ "Add a custom folder to the watchlist": "Ajouter un dossier personnalisé à la liste de surveillance",
+ "saved": "économisé",
+ "Last analysed": "Dernière analyse",
+ "Re-analyse all watched folders": "Réanalyser tous les dossiers surveillés",
+ "Cancel Background Compressor": "Annuler la compression en arrière-plan",
+ "Compress All Now": "Tout compresser maintenant",
+ "last compressed:": "dernière compression :",
+ "last modified:": "dernière modification :",
+ "% decayed": "% dégradé",
+ "Remove from Watchlist": "Retirer de la liste de surveillance",
+ "Add to compression queue": "Ajouter à la file de compression",
+ "Re-analyse this folder": "Réanalyser ce dossier",
+ "Not Compressed": "Non compressé",
+ "Compressed": "Compressé",
+ "Compress Folder": "Compresser le dossier",
+ "Invalid Folder": "Dossier invalide",
+ "OK": "OK",
+ "Unknown": "Inconnu",
+ "days ago": "il y a des jours",
+ "hours ago": "il y a des heures",
+ "minutes ago": "il y a des minutes",
+ "just now": "à l'instant",
+ "Awaiting Compression": "En attente de compression",
+ "Analysing": "Analyse en cours",
+ "Working": "Traitement en cours",
+ "Scheduled Compression Running": "Compression planifiée en cours",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI exécute une tâche planifiée et compressera les dossiers surveillés en arrière-plan",
+ "Scheduled Compression Completed": "Compression planifiée terminée",
+ "Next scheduled task is on": "Prochaine tâche planifiée le :",
+ "Restart as Admin": "Redémarrer en tant qu'admin",
+ "Insufficient permission to access this folder.": "Permission insuffisante pour accéder à ce dossier.",
+ "Click to download": "Cliquer pour télécharger",
+ "Update Available": "Mise à jour disponible",
+ "Failed to submit to wiki": "Échec de la soumission au wiki",
+ "Please check your internet connection and try again": "Veuillez vérifier votre connexion internet et réessayer",
+ "Submitted to wiki": "Soumis au wiki",
+ "Applied to all folders": "Appliqué à tous les dossiers",
+ "Compression options have been applied to all folders": "Les options de compression ont été appliquées à tous les dossiers",
+ "Cannot remove folder": "Impossible de retirer le dossier",
+ "Please wait until the current operation is finished": "Veuillez attendre que l'opération en cours soit terminée",
+ "Success": "Succès",
+ "Added to Queue": "Ajouté à la file d'attente",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "Ce jeu utilise la technologie DirectStorage. Si vous utilisez cette fonctionnalité, vous ne devriez pas compresser ce jeu.",
+ "You currently have": "Vous avez actuellement",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "dossiers surveillés. Fermer CompactGUI arrêtera leur surveillance.",
+ "Are you sure you want to exit?": "Êtes-vous sûr de vouloir quitter ?",
+ "View on GitHub": "Voir sur GitHub",
+ "Buy me a coffee": "M'offrir un café (Buy me a coffee)",
+ "GB saved": "Go économisés",
+ "MB saved": "Mo économisés",
+ "files being watched": "fichiers surveillés",
+ "Closing CompactGUI will stop them from being monitored.": "Fermer CompactGUI arrêtera leur surveillance.",
+ "Language (Requires Restart)": " Langue (Redémarrage requis)",
+ "folders being watched": "dossiers surveillés",
+ "RestartRequired": "Paramètres de langue enregistrés. Veuillez redémarrer CompactGUI pour appliquer les modifications."
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/ja-JP.json b/CompactGUI/i18n/ja-JP.json
new file mode 100644
index 0000000..5c2fac8
--- /dev/null
+++ b/CompactGUI/i18n/ja-JP.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "ホーム",
+ "Watcher": "監視",
+ "Compression DB": "圧縮データベース",
+ "Admin": "管理者",
+ "Open": "開く",
+ "Exit": "終了",
+ "Settings": "設定",
+ "Filetype Management": "ファイルタイプ管理",
+ "Manage local skipped filetypes": "ローカルのスキップするファイルタイプを管理",
+ "edit": "編集",
+ "Agression of online skiplist": "オンラインスキップリストの強度",
+ "(?)": "(?)",
+ "medium": "中",
+ "high": "高",
+ "System Integration": "システム統合",
+ "Add to right-click context menu": "右クリックメニューに追加",
+ "Add to start menu": "スタートメニューに追加",
+ "Show notification on completion": "完了時に通知を表示",
+ "Start CompactGUI in system tray": "システムトレイでCompactGUIを起動",
+ "Compression Settings": "圧縮設定",
+ "Maximum Compression Threads": "最大圧縮スレッド数",
+ "HDDs only use 1 thread": "HDDは1スレッドのみ使用",
+ "Estimate Compression for non-Steam Folders (beta)": "非Steamフォルダの圧縮率を推定 (ベータ)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "ファイルを高速に解析し、ディスクに書き込まずに圧縮率を推定します。HDDでは非常に遅くなる可能性があります!",
+ "Background Watcher Settings": "バックグラウンド監視設定",
+ "Monitor compressed folders for changes": "圧縮フォルダの変更を監視",
+ "Compress folders:": "フォルダを圧縮:",
+ "Never": "しない",
+ "When System is Idle": "システムアイドル時",
+ "On Schedule": "スケジュール",
+ "On Schedule if system is also idle": "スケジュール(システムアイドル時のみ)",
+ "every": "間隔",
+ "day(s)": "日",
+ "Last ran:": "前回の実行:",
+ "Next scheduled:": "次回の予定:",
+ "Update Settings": "更新設定",
+ "Check for pre-release updates": "プレリリース更新を確認",
+ "UI Settings": "UI設定",
+ "Always show details on Compression Mode buttons": "圧縮モードボタンに詳細を常に表示",
+ "Database Results": "データベース結果",
+ "Last Fetched:": "最終取得:",
+ "Games": "ゲーム",
+ "Search by game name or SteamID...": "ゲーム名またはSteamIDで検索...",
+ "Sort By": "並べ替え",
+ "Game Name": "ゲーム名",
+ "Ascending": "昇順",
+ "Descending": "降順",
+ "SteamID": "SteamID",
+ "Max Savings": "最大削減量",
+ "SteamID:": "SteamID:",
+ "MODE": "モード",
+ "BEFORE": "圧縮前",
+ "AFTER": "圧縮後",
+ "SAVINGS": "削減率",
+ "TOTAL RESULTS": "合計結果",
+ "UNCOMPRESSABLE FILETYPES": "圧縮不可のファイルタイプ",
+ "uncompressed size": "未圧縮サイズ",
+ "contained files": "含まれるファイル",
+ "Compress Selected": "選択項目を圧縮",
+ "select a folder": "フォルダを選択",
+ "Version": "バージョン",
+ "Add Folder to Queue": "フォルダをキューに追加",
+ "Compression Mode": "圧縮モード",
+ "Configuration": "構成",
+ "Skip file types specified in settings": "設定で指定されたファイルタイプをスキップ",
+ "files will be skipped": "ファイルがスキップされます",
+ "Skip file types likely to compress poorly": "圧縮率が低い可能性のあるファイルタイプをスキップ",
+ "Watch folder for changes": "フォルダの変更を監視",
+ "Apply to all": "すべてに適用",
+ "For Steam Games:": "Steamゲームの場合:",
+ "estimate is based on database results": "推定はデータベースの結果に基づきます",
+ "For Non-Steam Folders:": "非Steamフォルダの場合:",
+ "estimate is calculated by block analysis.": "推定はブロック分析によって計算されます。",
+ "If estimation is disabled, this will always show 0%": "推定が無効な場合、常に0%と表示されます",
+ "skips files based on database results": "データベースの結果に基づいてファイルをスキップ",
+ "skips files based on compression estimate": "圧縮推定に基づいてファイルをスキップ",
+ "Compression Summary": "圧縮概要",
+ "Before": "圧縮前",
+ "After": "圧縮後",
+ "Space Saved": "節約された容量",
+ "Files Compressed": "圧縮されたファイル",
+ "Uncompress": "解凍",
+ "Compress Again": "再圧縮",
+ "Submit Results": "結果を送信",
+ "Estimated size": "推定サイズ",
+ "Savings": "削減",
+ "unknown": "不明",
+ "Watched Folders": "監視中のフォルダ",
+ "Add a custom folder to the watchlist": "カスタムフォルダをウォッチリストに追加",
+ "saved": "節約",
+ "Last analysed": "最終分析",
+ "Re-analyse all watched folders": "すべての監視フォルダを再分析",
+ "Cancel Background Compressor": "バックグラウンド圧縮をキャンセル",
+ "Compress All Now": "今すぐすべて圧縮",
+ "last compressed:": "最終圧縮:",
+ "last modified:": "最終更新:",
+ "% decayed": "% 劣化",
+ "Remove from Watchlist": "ウォッチリストから削除",
+ "Add to compression queue": "圧縮キューに追加",
+ "Re-analyse this folder": "このフォルダを再分析",
+ "Not Compressed": "未圧縮",
+ "Compressed": "圧縮済み",
+ "Compress Folder": "フォルダを圧縮",
+ "Invalid Folder": "無効なフォルダ",
+ "OK": "OK",
+ "Unknown": "不明",
+ "days ago": "日前",
+ "hours ago": "時間前",
+ "minutes ago": "分前",
+ "just now": "たった今",
+ "Awaiting Compression": "圧縮待ち",
+ "Analysing": "分析中",
+ "Working": "処理中",
+ "Scheduled Compression Running": "スケジュール圧縮を実行中",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUIはスケジュールタスクを実行しており、バックグラウンドで監視フォルダを圧縮します",
+ "Scheduled Compression Completed": "スケジュール圧縮完了",
+ "Next scheduled task is on": "次回のスケジュールタスク:",
+ "Restart as Admin": "管理者として再起動",
+ "Insufficient permission to access this folder.": "このフォルダにアクセスする権限がありません。",
+ "Click to download": "クリックしてダウンロード",
+ "Update Available": "アップデート利用可能",
+ "Failed to submit to wiki": "Wikiへの送信に失敗しました",
+ "Please check your internet connection and try again": "インターネット接続を確認して再試行してください",
+ "Submitted to wiki": "Wikiに送信しました",
+ "Applied to all folders": "すべてのフォルダに適用しました",
+ "Compression options have been applied to all folders": "圧縮オプションがすべてのフォルダに適用されました",
+ "Cannot remove folder": "フォルダを削除できません",
+ "Please wait until the current operation is finished": "現在の操作が完了するまでお待ちください",
+ "Success": "成功",
+ "Added to Queue": "キューに追加しました",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "このゲームはDirectStorage技術を使用しています。この機能を使用している場合は、このゲームを圧縮しないでください。",
+ "You currently have": "現在",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "個のフォルダを監視中です。CompactGUIを閉じると、監視が停止します。",
+ "Are you sure you want to exit?": "終了してもよろしいですか?",
+ "View on GitHub": "GitHubで見る",
+ "Buy me a coffee": "寄付する (Buy me a coffee)",
+ "GB saved": "GB 節約",
+ "MB saved": "MB 節約",
+ "files being watched": "ファイル監視中",
+ "Closing CompactGUI will stop them from being monitored.": "CompactGUIを閉じると監視が停止します。",
+ "Language (Requires Restart)": " 言語 (再起動が必要)",
+ "folders being watched": "個のフォルダーが監視されています",
+ "RestartRequired": "言語設定が保存されました。変更を適用するには CompactGUI を再起動してください。"
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/ko-KR.json b/CompactGUI/i18n/ko-KR.json
new file mode 100644
index 0000000..f247a57
--- /dev/null
+++ b/CompactGUI/i18n/ko-KR.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "홈",
+ "Watcher": "감시",
+ "Compression DB": "압축 DB",
+ "Admin": "관리자",
+ "Open": "열기",
+ "Exit": "종료",
+ "Settings": "설정",
+ "Filetype Management": "파일 형식 관리",
+ "Manage local skipped filetypes": "로컬 건너뛰기 파일 형식 관리",
+ "edit": "편집",
+ "Agression of online skiplist": "온라인 건너뛰기 목록 강도",
+ "(?)": "(?)",
+ "medium": "중간",
+ "high": "높음",
+ "System Integration": "시스템 통합",
+ "Add to right-click context menu": "우클릭 메뉴에 추가",
+ "Add to start menu": "시작 메뉴에 추가",
+ "Show notification on completion": "완료 시 알림 표시",
+ "Start CompactGUI in system tray": "시스템 트레이에서 CompactGUI 시작",
+ "Compression Settings": "압축 설정",
+ "Maximum Compression Threads": "최대 압축 스레드",
+ "HDDs only use 1 thread": "HDD는 1개 스레드만 사용",
+ "Estimate Compression for non-Steam Folders (beta)": "비 Steam 폴더 압축률 예상 (베타)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "파일을 빠르게 분석하여 디스크에 쓰지 않고 압축률을 예상합니다. HDD에서는 매우 느릴 수 있습니다!",
+ "Background Watcher Settings": "백그라운드 감시 설정",
+ "Monitor compressed folders for changes": "압축된 폴더 변경 감시",
+ "Compress folders:": "폴더 압축:",
+ "Never": "안 함",
+ "When System is Idle": "시스템 유휴 시",
+ "On Schedule": "예약",
+ "On Schedule if system is also idle": "예약 (시스템 유휴 시)",
+ "every": "간격",
+ "day(s)": "일",
+ "Last ran:": "최근 실행:",
+ "Next scheduled:": "다음 예약:",
+ "Update Settings": "업데이트 설정",
+ "Check for pre-release updates": "사전 릴리스 업데이트 확인",
+ "UI Settings": "UI 설정",
+ "Always show details on Compression Mode buttons": "압축 모드 버튼에 항상 세부 정보 표시",
+ "Database Results": "데이터베이스 결과",
+ "Last Fetched:": "최근 가져옴:",
+ "Games": "게임",
+ "Search by game name or SteamID...": "게임 이름 또는 SteamID로 검색...",
+ "Sort By": "정렬",
+ "Game Name": "게임 이름",
+ "Ascending": "오름차순",
+ "Descending": "내림차순",
+ "SteamID": "SteamID",
+ "Max Savings": "최대 절약",
+ "SteamID:": "SteamID:",
+ "MODE": "모드",
+ "BEFORE": "압축 전",
+ "AFTER": "압축 후",
+ "SAVINGS": "절약",
+ "TOTAL RESULTS": "총 결과",
+ "UNCOMPRESSABLE FILETYPES": "압축 불가능한 파일 형식",
+ "uncompressed size": "압축되지 않은 크기",
+ "contained files": "포함된 파일",
+ "Compress Selected": "선택 항목 압축",
+ "select a folder": "폴더 선택",
+ "Version": "버전",
+ "Add Folder to Queue": "대기열에 폴더 추가",
+ "Compression Mode": "압축 모드",
+ "Configuration": "구성",
+ "Skip file types specified in settings": "설정된 파일 형식 건너뛰기",
+ "files will be skipped": "개 파일이 건너뛰어집니다",
+ "Skip file types likely to compress poorly": "압축 효율이 낮은 파일 형식 건너뛰기",
+ "Watch folder for changes": "폴더 변경 감시",
+ "Apply to all": "모두 적용",
+ "For Steam Games:": "Steam 게임:",
+ "estimate is based on database results": "예상치는 데이터베이스 결과를 기반으로 합니다",
+ "For Non-Steam Folders:": "비 Steam 폴더:",
+ "estimate is calculated by block analysis.": "예상치는 블록 분석으로 계산됩니다.",
+ "If estimation is disabled, this will always show 0%": "예상이 비활성화되면 항상 0%로 표시됩니다",
+ "skips files based on database results": "데이터베이스 결과에 따라 파일 건너뛰기",
+ "skips files based on compression estimate": "압축 예상치에 따라 파일 건너뛰기",
+ "Compression Summary": "압축 요약",
+ "Before": "압축 전",
+ "After": "압축 후",
+ "Space Saved": "절약된 공간",
+ "Files Compressed": "압축된 파일",
+ "Uncompress": "압축 해제",
+ "Compress Again": "다시 압축",
+ "Submit Results": "결과 제출",
+ "Estimated size": "예상 크기",
+ "Savings": "절약",
+ "unknown": "알 수 없음",
+ "Watched Folders": "감시 중인 폴더",
+ "Add a custom folder to the watchlist": "감시 목록에 사용자 지정 폴더 추가",
+ "saved": "절약됨",
+ "Last analysed": "최근 분석",
+ "Re-analyse all watched folders": "모든 감시 폴더 재분석",
+ "Cancel Background Compressor": "백그라운드 압축 취소",
+ "Compress All Now": "지금 모두 압축",
+ "last compressed:": "최근 압축:",
+ "last modified:": "최근 수정:",
+ "% decayed": "% 감소됨",
+ "Remove from Watchlist": "감시 목록에서 제거",
+ "Add to compression queue": "압축 대기열에 추가",
+ "Re-analyse this folder": "이 폴더 재분석",
+ "Not Compressed": "압축되지 않음",
+ "Compressed": "압축됨",
+ "Compress Folder": "폴더 압축",
+ "Invalid Folder": "유효하지 않은 폴더",
+ "OK": "확인",
+ "Unknown": "알 수 없음",
+ "days ago": "일 전",
+ "hours ago": "시간 전",
+ "minutes ago": "분 전",
+ "just now": "방금",
+ "Awaiting Compression": "압축 대기 중",
+ "Analysing": "분석 중",
+ "Working": "작업 중",
+ "Scheduled Compression Running": "예약된 압축 실행 중",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI가 예약된 작업을 실행 중이며 백그라운드에서 감시 폴더를 압축합니다",
+ "Scheduled Compression Completed": "예약된 압축 완료",
+ "Next scheduled task is on": "다음 예약 작업:",
+ "Restart as Admin": "관리자 권한으로 다시 시작",
+ "Insufficient permission to access this folder.": "이 폴더에 액세스할 권한이 부족합니다.",
+ "Click to download": "다운로드하려면 클릭",
+ "Update Available": "업데이트 가능",
+ "Failed to submit to wiki": "Wiki 제출 실패",
+ "Please check your internet connection and try again": "인터넷 연결을 확인하고 다시 시도해 주세요",
+ "Submitted to wiki": "Wiki에 제출됨",
+ "Applied to all folders": "모든 폴더에 적용됨",
+ "Compression options have been applied to all folders": "압축 옵션이 모든 폴더에 적용되었습니다",
+ "Cannot remove folder": "폴더를 제거할 수 없음",
+ "Please wait until the current operation is finished": "현재 작업이 완료될 때까지 기다려 주세요",
+ "Success": "성공",
+ "Added to Queue": "대기열에 추가됨",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "이 게임은 DirectStorage 기술을 사용합니다. 이 기능을 사용하는 경우 이 게임을 압축하지 마십시오.",
+ "You currently have": "현재",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "개의 폴더가 감시되고 있습니다. CompactGUI를 닫으면 감시가 중지됩니다.",
+ "Are you sure you want to exit?": "정말 종료하시겠습니까?",
+ "View on GitHub": "GitHub에서 보기",
+ "Buy me a coffee": "커피 한 잔 사주기 (후원)",
+ "GB saved": "GB 절약",
+ "MB saved": "MB 절약",
+ "files being watched": "개 파일 감시 중",
+ "Closing CompactGUI will stop them from being monitored.": "CompactGUI를 닫으면 감시가 중지됩니다.",
+ "Language (Requires Restart)": " 언어 (다시 시작 필요)",
+ "folders being watched": "개의 폴더가 감시되고 있습니다",
+ "RestartRequired": "언어 설정이 저장되었습니다. 변경 사항을 적용하려면 CompactGUI를 다시 시작하십시오."
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/ru-RU.json b/CompactGUI/i18n/ru-RU.json
new file mode 100644
index 0000000..aff73ff
--- /dev/null
+++ b/CompactGUI/i18n/ru-RU.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "Главная",
+ "Watcher": "Наблюдение",
+ "Compression DB": "БД сжатия",
+ "Admin": "Админ",
+ "Open": "Открыть",
+ "Exit": "Выход",
+ "Settings": "Настройки",
+ "Filetype Management": "Управление типами файлов",
+ "Manage local skipped filetypes": "Управление локальными пропускаемыми типами",
+ "edit": "изм.",
+ "Agression of online skiplist": "Агрессивность онлайн-списка пропуска",
+ "(?)": "(?)",
+ "medium": "средняя",
+ "high": "высокая",
+ "System Integration": "Интеграция в систему",
+ "Add to right-click context menu": "Добавить в контекстное меню",
+ "Add to start menu": "Добавить в меню Пуск",
+ "Show notification on completion": "Уведомлять по завершении",
+ "Start CompactGUI in system tray": "Запускать CompactGUI в трее",
+ "Compression Settings": "Настройки сжатия",
+ "Maximum Compression Threads": "Макс. потоков сжатия",
+ "HDDs only use 1 thread": "HDD используют только 1 поток",
+ "Estimate Compression for non-Steam Folders (beta)": "Оценка сжатия для не-Steam папок (бета)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "Быстро анализирует файлы и оценивает степень сжатия без записи на диск. На HDD это может сильно тормозить!",
+ "Background Watcher Settings": "Настройки фонового наблюдения",
+ "Monitor compressed folders for changes": "Следить за изменениями в сжатых папках",
+ "Compress folders:": "Сжимать папки:",
+ "Never": "Никогда",
+ "When System is Idle": "При простое системы",
+ "On Schedule": "По расписанию",
+ "On Schedule if system is also idle": "По расписанию (если простой)",
+ "every": "каждые",
+ "day(s)": "дн.",
+ "Last ran:": "Последний запуск:",
+ "Next scheduled:": "Следующий запуск:",
+ "Update Settings": "Настройки обновлений",
+ "Check for pre-release updates": "Проверять пре-релизные обновления",
+ "UI Settings": "Настройки интерфейса",
+ "Always show details on Compression Mode buttons": "Всегда показывать детали на кнопках режимов сжатия",
+ "Database Results": "Результаты из базы",
+ "Last Fetched:": "Последнее обновление:",
+ "Games": "Игры",
+ "Search by game name or SteamID...": "Поиск по названию или SteamID...",
+ "Sort By": "Сортировать по",
+ "Game Name": "Название игры",
+ "Ascending": "По возрастанию",
+ "Descending": "По убыванию",
+ "SteamID": "SteamID",
+ "Max Savings": "Макс. экономия",
+ "SteamID:": "SteamID:",
+ "MODE": "РЕЖИМ",
+ "BEFORE": "ДО",
+ "AFTER": "ПОСЛЕ",
+ "SAVINGS": "ЭКОНОМИЯ",
+ "TOTAL RESULTS": "ВСЕГО РЕЗУЛЬТАТОВ",
+ "UNCOMPRESSABLE FILETYPES": "НЕСЖИМАЕМЫЕ ТИПЫ ФАЙЛОВ",
+ "uncompressed size": "размер без сжатия",
+ "contained files": "файлов внутри",
+ "Compress Selected": "Сжать выбранное",
+ "select a folder": "выберите папку",
+ "Version": "Версия",
+ "Add Folder to Queue": "Добавить папку в очередь",
+ "Compression Mode": "Режим сжатия",
+ "Configuration": "Конфигурация",
+ "Skip file types specified in settings": "Пропускать типы файлов из настроек",
+ "files will be skipped": "файлов будет пропущено",
+ "Skip file types likely to compress poorly": "Пропускать плохо сжимаемые файлы",
+ "Watch folder for changes": "Следить за изменениями папки",
+ "Apply to all": "Применить ко всем",
+ "For Steam Games:": "Для игр Steam:",
+ "estimate is based on database results": "оценка основана на базе данных",
+ "For Non-Steam Folders:": "Для не-Steam папок:",
+ "estimate is calculated by block analysis.": "оценка вычисляется поблочным анализом.",
+ "If estimation is disabled, this will always show 0%": "Если оценка отключена, здесь всегда будет 0%",
+ "skips files based on database results": "пропускает файлы на основе базы данных",
+ "skips files based on compression estimate": "пропускает файлы на основе оценки сжатия",
+ "Compression Summary": "Сводка сжатия",
+ "Before": "До",
+ "After": "После",
+ "Space Saved": "Места сэкономлено",
+ "Files Compressed": "Файлов сжато",
+ "Uncompress": "Распаковать",
+ "Compress Again": "Сжать снова",
+ "Submit Results": "Отправить результаты",
+ "Estimated size": "Расчетный размер",
+ "Savings": "Экономия",
+ "unknown": "неизвестно",
+ "Watched Folders": "Наблюдаемые папки",
+ "Add a custom folder to the watchlist": "Добавить свою папку в список наблюдения",
+ "saved": "сэкономлено",
+ "Last analysed": "Последний анализ",
+ "Re-analyse all watched folders": "Переанализировать все папки",
+ "Cancel Background Compressor": "Отменить фоновое сжатие",
+ "Compress All Now": "Сжать всё сейчас",
+ "last compressed:": "последнее сжатие:",
+ "last modified:": "последнее изменение:",
+ "% decayed": "% устарело",
+ "Remove from Watchlist": "Удалить из списка",
+ "Add to compression queue": "Добавить в очередь сжатия",
+ "Re-analyse this folder": "Переанализировать эту папку",
+ "Not Compressed": "Не сжато",
+ "Compressed": "Сжато",
+ "Compress Folder": "Сжать папку",
+ "Invalid Folder": "Неверная папка",
+ "OK": "ОК",
+ "Unknown": "Неизвестно",
+ "days ago": "дн. назад",
+ "hours ago": "ч. назад",
+ "minutes ago": "мин. назад",
+ "just now": "только что",
+ "Awaiting Compression": "Ожидание сжатия",
+ "Analysing": "Анализ",
+ "Working": "Обработка",
+ "Scheduled Compression Running": "Запущено сжатие по расписанию",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI выполняет плановую задачу и сжимает наблюдаемые папки в фоне",
+ "Scheduled Compression Completed": "Плановое сжатие завершено",
+ "Next scheduled task is on": "Следующая задача:",
+ "Restart as Admin": "Перезапуск от Админа",
+ "Insufficient permission to access this folder.": "Недостаточно прав для доступа к папке.",
+ "Click to download": "Нажмите для скачивания",
+ "Update Available": "Доступно обновление",
+ "Failed to submit to wiki": "Не удалось отправить в вики",
+ "Please check your internet connection and try again": "Проверьте интернет и попробуйте снова",
+ "Submitted to wiki": "Отправлено в вики",
+ "Applied to all folders": "Применено ко всем папкам",
+ "Compression options have been applied to all folders": "Настройки сжатия применены ко всем папкам",
+ "Cannot remove folder": "Нельзя удалить папку",
+ "Please wait until the current operation is finished": "Пожалуйста, дождитесь завершения операции",
+ "Success": "Успех",
+ "Added to Queue": "Добавлено в очередь",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "Эта игра использует DirectStorage. Если вы используете эту функцию, не сжимайте эту игру.",
+ "You currently have": "Сейчас у вас",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "папок под наблюдением. Закрытие CompactGUI остановит наблюдение.",
+ "Are you sure you want to exit?": "Вы уверены, что хотите выйти?",
+ "View on GitHub": "Открыть на GitHub",
+ "Buy me a coffee": "Купить мне кофе",
+ "GB saved": "ГБ сэкономлено",
+ "MB saved": "МБ сэкономлено",
+ "files being watched": "файлов наблюдается",
+ "Closing CompactGUI will stop them from being monitored.": "Закрытие CompactGUI остановит наблюдение.",
+ "Language (Requires Restart)": " Язык (Требуется перезагрузка)",
+ "folders being watched": "папок отслеживается",
+ "RestartRequired": "Настройки языка сохранены. Пожалуйста, перезапустите CompactGUI для применения изменений."
+}
\ No newline at end of file
diff --git a/CompactGUI/i18n/zh-CN.json b/CompactGUI/i18n/zh-CN.json
new file mode 100644
index 0000000..b95bbc9
--- /dev/null
+++ b/CompactGUI/i18n/zh-CN.json
@@ -0,0 +1,146 @@
+{
+ "CompactGUI": "CompactGUI",
+ "Home": "主页",
+ "Watcher": "监控",
+ "Compression DB": "压缩数据库",
+ "Admin": "管理员",
+ "Open": "打开",
+ "Exit": "退出",
+ "Settings": "设置",
+ "Filetype Management": "文件类型管理",
+ "Manage local skipped filetypes": "管理本地跳过的文件类型",
+ "edit": "编辑",
+ "Agression of online skiplist": "在线跳过列表的激进程度",
+ "(?)": "(?)",
+ "medium": "中",
+ "high": "高",
+ "System Integration": "系统集成",
+ "Add to right-click context menu": "添加到右键菜单",
+ "Add to start menu": "添加到开始菜单",
+ "Show notification on completion": "完成后显示通知",
+ "Start CompactGUI in system tray": "在系统托盘启动 CompactGUI",
+ "Compression Settings": "压缩设置",
+ "Maximum Compression Threads": "最大压缩线程数",
+ "HDDs only use 1 thread": "HDD 仅使用 1 个线程",
+ "Estimate Compression for non-Steam Folders (beta)": "估算非 Steam 文件夹的压缩率 (测试版)",
+ "Quickly parses over files and estimates their compression ratio without writing to disk. This will likely be super laggy on HDDs! ": "快速解析文件并估算其压缩率,无需写入磁盘。这在 HDD 上可能会非常卡顿!",
+ "Background Watcher Settings": "后台监控设置",
+ "Monitor compressed folders for changes": "监控已压缩文件夹的更改",
+ "Compress folders:": "压缩文件夹:",
+ "Never": "从不",
+ "When System is Idle": "当系统空闲时",
+ "On Schedule": "按计划",
+ "On Schedule if system is also idle": "按计划且系统空闲时",
+ "every": "每",
+ "day(s)": "天",
+ "Last ran:": "上次运行:",
+ "Next scheduled:": "下次计划:",
+ "Update Settings": "更新设置",
+ "Check for pre-release updates": "检查预发布更新",
+ "UI Settings": "界面设置",
+ "Always show details on Compression Mode buttons": "始终显示压缩模式按钮的详细信息",
+ "Database Results": "数据库结果",
+ "Last Fetched:": "上次获取:",
+ "Games": "游戏",
+ "Search by game name or SteamID...": "按游戏名称或 SteamID 搜索...",
+ "Sort By": "排序方式",
+ "Game Name": "游戏名称",
+ "Ascending": "升序",
+ "Descending": "降序",
+ "SteamID": "SteamID",
+ "Max Savings": "最大节省",
+ "SteamID:": "SteamID:",
+ "MODE": "模式",
+ "BEFORE": "压缩前",
+ "AFTER": "压缩后",
+ "SAVINGS": "节省",
+ "TOTAL RESULTS": "总结果",
+ "UNCOMPRESSABLE FILETYPES": "不可压缩的文件类型",
+ "uncompressed size": "未压缩大小",
+ "contained files": "包含文件",
+ "Compress Selected": "压缩选中项",
+ "select a folder": "选择文件夹",
+ "Version": "版本",
+ "Add Folder to Queue": "添加文件夹到队列",
+ "Compression Mode": "压缩模式",
+ "Configuration": "配置",
+ "Skip file types specified in settings": "跳过设置中指定的文件类型",
+ "files will be skipped": "个文件将被跳过",
+ "Skip file types likely to compress poorly": "跳过可能压缩效果不佳的文件类型",
+ "Watch folder for changes": "监控文件夹更改",
+ "Apply to all": "应用到所有",
+ "For Steam Games:": "对于 Steam 游戏:",
+ "estimate is based on database results": "估算是基于数据库结果",
+ "For Non-Steam Folders:": "对于非 Steam 文件夹:",
+ "estimate is calculated by block analysis.": "估算是通过块分析计算的。",
+ "If estimation is disabled, this will always show 0%": "如果禁用估算,这里将始终显示 0%",
+ "skips files based on database results": "根据数据库结果跳过文件",
+ "skips files based on compression estimate": "根据压缩估算跳过文件",
+ "Compression Summary": "压缩摘要",
+ "Before": "压缩前",
+ "After": "压缩后",
+ "Space Saved": "节省空间",
+ "Files Compressed": "文件已压缩",
+ "Uncompress": "解压缩",
+ "Compress Again": "再次压缩",
+ "Submit Results": "提交结果",
+ "Estimated size": "预估大小",
+ "Savings": "节省",
+ "unknown": "未知",
+ "Watched Folders": "受监控文件夹",
+ "Add a custom folder to the watchlist": "添加自定义文件夹到监控列表",
+ "saved": "已节省",
+ "Last analysed": "上次分析",
+ "Re-analyse all watched folders": "重新分析所有受监控文件夹",
+ "Cancel Background Compressor": "取消后台压缩",
+ "Compress All Now": "立即全部压缩",
+ "last compressed:": "上次压缩:",
+ "last modified:": "上次修改:",
+ "% decayed": "% 已衰减",
+ "Remove from Watchlist": "从监控列表移除",
+ "Add to compression queue": "添加到压缩队列",
+ "Re-analyse this folder": "重新分析此文件夹",
+ "Not Compressed": "未压缩",
+ "Compressed": "已压缩",
+ "Compress Folder": "压缩文件夹",
+ "Invalid Folder": "无效文件夹",
+ "OK": "确定",
+ "Unknown": "未知",
+ "days ago": "天前",
+ "hours ago": "小时前",
+ "minutes ago": "分钟前",
+ "just now": "刚刚",
+ "Awaiting Compression": "等待压缩",
+ "Analysing": "正在分析",
+ "Working": "正在处理",
+ "Scheduled Compression Running": "计划任务正在运行",
+ "CompactGUI is running a scheduled task and will compress monitored folders in the background": "CompactGUI 正在运行计划任务,将在后台压缩受监控的文件夹",
+ "Scheduled Compression Completed": "计划压缩完成",
+ "Next scheduled task is on": "下次计划任务时间:",
+ "Restart as Admin": "以管理员身份重启",
+ "Insufficient permission to access this folder.": "没有权限访问此文件夹。",
+ "Click to download": "点击下载",
+ "Update Available": "有可用更新",
+ "Failed to submit to wiki": "提交到 Wiki 失败",
+ "Please check your internet connection and try again": "请检查您的网络连接并重试",
+ "Submitted to wiki": "已提交到 Wiki",
+ "Applied to all folders": "已应用到所有文件夹",
+ "Compression options have been applied to all folders": "压缩选项已应用到所有文件夹",
+ "Cannot remove folder": "无法移除文件夹",
+ "Please wait until the current operation is finished": "请等待当前操作完成",
+ "Success": "成功",
+ "Added to Queue": "已添加到队列",
+ "This game uses DirectStorage technology. If you are using this feature, you should not compress this game.": "此游戏使用 DirectStorage 技术。如果您正在使用此功能,则不应压缩此游戏。",
+ "You currently have": "您当前有",
+ "folders being watched. Closing CompactGUI will stop them from being monitored.": "个文件夹正在被监控。关闭 CompactGUI 将停止对它们的监控。",
+ "Are you sure you want to exit?": "确定要退出吗?",
+ "View on GitHub": "在 GitHub 查看",
+ "Buy me a coffee": "请我喝杯咖啡",
+ "GB saved": "GB 已节省",
+ "MB saved": "MB 已节省",
+ "files being watched": "个文件正在被监控",
+ "Closing CompactGUI will stop them from being monitored.": "关闭 CompactGUI 将停止监控这些文件。",
+ "Language (Requires Restart)": " 语言 (需要重启)",
+ "folders being watched": "个文件夹正在被监控",
+ "RestartRequired": "语言设置已保存,请重启软件以生效。"
+}
\ No newline at end of file