diff --git a/WandEnhancer/App.xaml b/WandEnhancer/App.xaml
index dafdfba..273e31e 100644
--- a/WandEnhancer/App.xaml
+++ b/WandEnhancer/App.xaml
@@ -15,7 +15,6 @@
pack://application:,,,/Style/#Inter 18pt 18pt
-
\ No newline at end of file
diff --git a/WandEnhancer/Converters/BaseBooleanConverter.cs b/WandEnhancer/Converters/BaseBooleanConverter.cs
index 501878b..6926580 100644
--- a/WandEnhancer/Converters/BaseBooleanConverter.cs
+++ b/WandEnhancer/Converters/BaseBooleanConverter.cs
@@ -18,29 +18,7 @@ namespace WandEnhancer.Converters
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- switch (value)
- {
- case null:
- return False;
- case bool booleanValue:
- return booleanValue ? True : False;
- }
-
- if (!(value is int intValue))
- {
- return True;
- }
-
- switch (parameter)
- {
- case null:
- return intValue == 0 ? False : True;
- case int param:
- return intValue > param ? True : False;
- default:
- //Because object not null
- return True;
- }
+ return value is bool booleanValue && booleanValue ? True : False;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
diff --git a/WandEnhancer/Converters/ToVisibilityConverter.cs b/WandEnhancer/Converters/ToVisibilityConverter.cs
index 66c7280..282762b 100644
--- a/WandEnhancer/Converters/ToVisibilityConverter.cs
+++ b/WandEnhancer/Converters/ToVisibilityConverter.cs
@@ -9,10 +9,4 @@ namespace WandEnhancer.Converters
{ }
}
- internal sealed class ToVisibilityInvertedConverter : BaseBooleanConverter
- {
- public ToVisibilityInvertedConverter() :
- base(Visibility.Collapsed, Visibility.Visible)
- { }
- }
}
\ No newline at end of file
diff --git a/WandEnhancer/Core/Services/LocalizationManager.cs b/WandEnhancer/Core/Services/LocalizationManager.cs
index 254f125..c4a9b25 100644
--- a/WandEnhancer/Core/Services/LocalizationManager.cs
+++ b/WandEnhancer/Core/Services/LocalizationManager.cs
@@ -28,6 +28,22 @@ namespace WandEnhancer.Core.Services
private static CultureInfo _currentLanguage;
private static ResourceDictionary _englishBaseDictionary;
+ private static ResourceDictionary _activeLocaleDictionary;
+
+ ///
+ /// Localized string for , falling back to the key itself so a
+ /// missing entry is visible rather than silently blank.
+ ///
+ public static string Get(string key)
+ {
+ return Application.Current?.TryFindResource(key) as string ?? key;
+ }
+
+ /// Localized format string filled with .
+ public static string Format(string key, params object[] args)
+ {
+ return string.Format(Get(key), args);
+ }
public static CultureInfo CurrentLanguage
{
@@ -104,20 +120,19 @@ namespace WandEnhancer.Core.Services
localeDict[entry.Key] = targetDict[entry.Key];
}
- // Find and replace the old locale dictionary
- var oldDict = Application.Current.Resources.MergedDictionaries
- .FirstOrDefault(d => d.Source != null && d.Source.OriginalString.StartsWith("Locale/lang."));
-
- if (oldDict != null)
+ // Track the dictionary we injected: it is built by merging entries, so its Source is
+ // null and a Source-based lookup never finds it - every switch used to append another.
+ var merged = Application.Current.Resources.MergedDictionaries;
+ if (_activeLocaleDictionary != null && merged.Contains(_activeLocaleDictionary))
{
- var index = Application.Current.Resources.MergedDictionaries.IndexOf(oldDict);
- Application.Current.Resources.MergedDictionaries.Remove(oldDict);
- Application.Current.Resources.MergedDictionaries.Insert(index, localeDict);
+ merged[merged.IndexOf(_activeLocaleDictionary)] = localeDict;
}
else
{
- Application.Current.Resources.MergedDictionaries.Add(localeDict);
+ merged.Add(localeDict);
}
+
+ _activeLocaleDictionary = localeDict;
if (saveSettings)
{
diff --git a/WandEnhancer/Core/Services/SettingsManager.cs b/WandEnhancer/Core/Services/SettingsManager.cs
index 33a9e73..03d7024 100644
--- a/WandEnhancer/Core/Services/SettingsManager.cs
+++ b/WandEnhancer/Core/Services/SettingsManager.cs
@@ -27,8 +27,7 @@ namespace WandEnhancer.Core.Services
}
catch (Exception)
{
- // Settings loading is non-critical - silently fall back to defaults
- // This can fail due to file permissions, corrupted JSON, etc.
+ // Unreadable or corrupt settings must not block startup; defaults apply.
}
return null;
}
@@ -42,8 +41,7 @@ namespace WandEnhancer.Core.Services
}
catch (Exception)
{
- // Settings saving is non-critical - silently ignore errors
- // This can fail due to file permissions or read-only directories
+ // A read-only install directory must not break the app; the choice is lost, not fatal.
}
}
}
diff --git a/WandEnhancer/Locale/lang.de-DE.xaml b/WandEnhancer/Locale/lang.de-DE.xaml
index 6c2a737..b975833 100644
--- a/WandEnhancer/Locale/lang.de-DE.xaml
+++ b/WandEnhancer/Locale/lang.de-DE.xaml
@@ -7,7 +7,6 @@
- WandEnhancerOrdnerpfadOrdner nicht gefundenAnwenden
@@ -35,7 +34,25 @@
Ausgewählte .js-Dateien werden in Wand gepackt und im Renderer geladen.Keine Skripte ausgewähltStarten
+ Nach Updates automatisch anwendenWas werden wir verbessern?
+
+ WeMod-Verzeichnis unter {0} ({1}) gefunden
+ WeMod ist bereits gepatcht. Wenn Sie erneut patchen möchten, stellen Sie bitte zuerst das Backup wieder her.
+ Bereit zum Patchen.
+ WeMod-Verzeichnis nicht gefunden.
+ Vorgang nicht möglich. Bitte geben Sie zuerst das Verzeichnis an.
+ Der ausgewählte Ordner {0} ist kein gültiges WeMod-Verzeichnis.
+ Fehler beim Wiederherstellen des Backups: {0}
+ Fehler beim Patchen: {0}
+ Protokolle in die Zwischenablage kopiert.
+ Fehler beim Kopieren der Protokolle: {0}
+ Protokolle nach {0} exportiert.
+ Fehler beim Exportieren der Protokolle: {0}
+ {0} konnte nicht in einem Browser geöffnet werden.
+ Wählen Sie das WeMod-Verzeichnis aus
+
+
diff --git a/WandEnhancer/Locale/lang.en-US.xaml b/WandEnhancer/Locale/lang.en-US.xaml
index 9db07b4..216e2b3 100644
--- a/WandEnhancer/Locale/lang.en-US.xaml
+++ b/WandEnhancer/Locale/lang.en-US.xaml
@@ -7,7 +7,6 @@
- WandEnhancerFolder pathFolder not foundEnhance
@@ -35,7 +34,25 @@
Selected .js files are packed into Wand and loaded in the renderer.No scripts selectedStart
+ Auto-apply after updatesWhat are we gonna enhance?
+
+ WeMod directory found at {0} ({1})
+ WeMod already patched. If you want to patch again, please restore the backup first.
+ Ready for patching.
+ WeMod directory not found.
+ Cant be done. Please specify the directory first.
+ The selected folder {0} is not a valid WeMod directory.
+ Failed to restore backup: {0}
+ Failed to patch: {0}
+ Logs copied to clipboard.
+ Failed to copy logs: {0}
+ Logs exported to {0}.
+ Failed to export logs: {0}
+ Could not open {0} in a browser.
+ Select the WeMod directory
+
+
diff --git a/WandEnhancer/Locale/lang.es-ES.xaml b/WandEnhancer/Locale/lang.es-ES.xaml
index 5390712..8a8893e 100644
--- a/WandEnhancer/Locale/lang.es-ES.xaml
+++ b/WandEnhancer/Locale/lang.es-ES.xaml
@@ -7,7 +7,6 @@
- WandEnhancerRuta de la carpetaCarpeta no encontradaAplicar
@@ -35,7 +34,25 @@
Los archivos .js seleccionados se empaquetan en Wand y se cargan en el renderer.No hay scripts seleccionadosIniciar
+ Aplicar automáticamente tras actualizar¿Qué vamos a mejorar?
+
+ Directorio de WeMod encontrado en {0} ({1})
+ WeMod ya está parcheado. Si quieres parchear de nuevo, restaura la copia de seguridad primero.
+ Listo para parchear.
+ Directorio de WeMod no encontrado.
+ No se puede realizar. Por favor, especifica el directorio primero.
+ La carpeta seleccionada {0} no es un directorio de WeMod válido.
+ Error al restaurar la copia de seguridad: {0}
+ Error al parchear: {0}
+ Registros copiados al portapapeles.
+ Error al copiar los registros: {0}
+ Registros exportados a {0}.
+ Error al exportar los registros: {0}
+ No se pudo abrir {0} en un navegador.
+ Selecciona el directorio de WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.fr-FR.xaml b/WandEnhancer/Locale/lang.fr-FR.xaml
index 9f6f00f..0246c11 100644
--- a/WandEnhancer/Locale/lang.fr-FR.xaml
+++ b/WandEnhancer/Locale/lang.fr-FR.xaml
@@ -7,7 +7,6 @@
- WandEnhancerChemin du dossierDossier non trouvéAppliquer
@@ -35,7 +34,25 @@
Les fichiers .js sélectionnés sont intégrés dans Wand et chargés dans le renderer.Aucun script sélectionnéDémarrer
+ Appliquer automatiquement après les mises à jourQu'allons-nous modifier ?
+
+ Répertoire WeMod trouvé à {0} ({1})
+ WeMod est déjà patché. Si vous souhaitez le patcher à nouveau, veuillez d'abord restaurer la sauvegarde.
+ Prêt pour le patch.
+ Répertoire WeMod introuvable.
+ Impossible. Veuillez d'abord spécifier le répertoire.
+ Le dossier sélectionné {0} n'est pas un répertoire WeMod valide.
+ Échec de la restauration de la sauvegarde : {0}
+ Échec du patch : {0}
+ Journaux copiés dans le presse-papiers.
+ Échec de la copie des journaux : {0}
+ Journaux exportés vers {0}.
+ Échec de l'exportation des journaux : {0}
+ Impossible d'ouvrir {0} dans un navigateur.
+ Sélectionnez le répertoire WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.it-IT.xaml b/WandEnhancer/Locale/lang.it-IT.xaml
index 2ca0fb4..1a4914d 100644
--- a/WandEnhancer/Locale/lang.it-IT.xaml
+++ b/WandEnhancer/Locale/lang.it-IT.xaml
@@ -7,7 +7,6 @@
- WandEnhancerPercorso cartellaCartella non trovataApplica
@@ -35,7 +34,25 @@
I file .js selezionati vengono inseriti in Wand e caricati nel renderer.Nessuno script selezionatoAvvia
+ Applica automaticamente dopo gli aggiornamentiCosa modificheremo?
+
+ Directory di WeMod trovata in {0} ({1})
+ WeMod è già stato patchato. Se vuoi patchare di nuovo, ripristina prima il backup.
+ Pronto per il patching.
+ Directory di WeMod non trovata.
+ Impossibile procedere. Specifica prima la directory.
+ La cartella selezionata {0} non è una directory valida di WeMod.
+ Impossibile ripristinare il backup: {0}
+ Impossibile eseguire il patch: {0}
+ Log copiati negli appunti.
+ Impossibile copiare i log: {0}
+ Log esportati in {0}.
+ Impossibile esportare i log: {0}
+ Impossibile aprire {0} in un browser.
+ Seleziona la directory di WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.ja-JP.xaml b/WandEnhancer/Locale/lang.ja-JP.xaml
index 44e9f49..9088498 100644
--- a/WandEnhancer/Locale/lang.ja-JP.xaml
+++ b/WandEnhancer/Locale/lang.ja-JP.xaml
@@ -7,7 +7,6 @@
- WandEnhancerフォルダパスフォルダが見つかりません適用
@@ -35,7 +34,25 @@
選択した .js ファイルは Wand に組み込まれ、レンダラーで読み込まれます。スクリプトが選択されていません開始
+ 更新後に自動適用何を改善しますか?
+
+ WeModディレクトリが {0} ({1}) に見つかりました
+ WeModは既にパッチが適用されています。もう一度パッチを適用する場合は、まずバックアップを復元してください。
+ パッチ適用の準備ができました。
+ WeModディレクトリが見つかりません。
+ 実行できません。先にディレクトリを指定してください。
+ 選択したフォルダ {0} は有効なWeModディレクトリではありません。
+ バックアップの復元に失敗しました: {0}
+ パッチの適用に失敗しました: {0}
+ ログをクリップボードにコピーしました。
+ ログのコピーに失敗しました: {0}
+ ログを {0} にエクスポートしました。
+ ログのエクスポートに失敗しました: {0}
+ {0} をブラウザで開くことができませんでした。
+ WeModディレクトリを選択してください
+
+
diff --git a/WandEnhancer/Locale/lang.pl-PL.xaml b/WandEnhancer/Locale/lang.pl-PL.xaml
index 37b1ade..bb77eda 100644
--- a/WandEnhancer/Locale/lang.pl-PL.xaml
+++ b/WandEnhancer/Locale/lang.pl-PL.xaml
@@ -7,7 +7,6 @@
- WandEnhancerŚcieżka folderuFolder nie znalezionyZastosuj
@@ -35,7 +34,25 @@
Wybrane pliki .js są pakowane do Wand i ładowane w rendererze.Nie wybrano skryptówRozpocznij
+ Zastosuj automatycznie po aktualizacjiCo będziemy ulepszać?
+
+ Katalog WeMod znaleziony w {0} ({1})
+ WeMod został już zaktualizowany. Jeśli chcesz zaktualizować ponownie, najpierw przywróć kopię zapasową.
+ Gotowy do aktualizacji (patchowania).
+ Nie znaleziono katalogu WeMod.
+ Nie można tego zrobić. Proszę najpierw określić katalog.
+ Wybrany folder {0} nie jest prawidłowym katalogiem WeMod.
+ Nie udało się przywrócić kopii zapasowej: {0}
+ Nie udało się zaktualizować: {0}
+ Logi skopiowane do schowka.
+ Nie udało się skopiować logów: {0}
+ Logi wyeksportowane do {0}.
+ Nie udało się wyeksportować logów: {0}
+ Nie można otworzyć {0} w przeglądarce.
+ Wybierz katalog WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.pt-BR.xaml b/WandEnhancer/Locale/lang.pt-BR.xaml
index 6f26576..985142a 100644
--- a/WandEnhancer/Locale/lang.pt-BR.xaml
+++ b/WandEnhancer/Locale/lang.pt-BR.xaml
@@ -7,7 +7,6 @@
- WandEnhancerCaminho da pastaPasta não encontradaAplicar
@@ -35,7 +34,25 @@
Os arquivos .js selecionados são empacotados no Wand e carregados no renderer.Nenhum script selecionadoIniciar
+ Aplicar automaticamente após atualizaçõesO que vamos melhorar?
+
+ Diretório do WeMod encontrado em {0} ({1})
+ O WeMod já foi modificado. Se quiser modificar novamente, restaure o backup primeiro.
+ Pronto para modificar.
+ Diretório do WeMod não encontrado.
+ Não é possível fazer isso. Por favor, especifique o diretório primeiro.
+ A pasta selecionada {0} não é um diretório válido do WeMod.
+ Falha ao restaurar o backup: {0}
+ Falha ao modificar: {0}
+ Logs copiados para a área de transferência.
+ Falha ao copiar logs: {0}
+ Logs exportados para {0}.
+ Falha ao exportar logs: {0}
+ Não foi possível abrir {0} no navegador.
+ Selecione o diretório do WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.ru-RU.xaml b/WandEnhancer/Locale/lang.ru-RU.xaml
index 1c24c50..fa470b5 100644
--- a/WandEnhancer/Locale/lang.ru-RU.xaml
+++ b/WandEnhancer/Locale/lang.ru-RU.xaml
@@ -7,7 +7,6 @@
- WandEnhancerПуть к папкеПапка не найденаПрименить
@@ -35,7 +34,25 @@
Выбранные .js попадут в Wand и загрузятся в renderer.Скрипты не выбраныНачать
+ Авто-патч после обновленийЧто будем улучшать?
+
+ Директория WeMod найдена в {0} ({1})
+ WeMod уже пропатчен. Если вы хотите пропатчить снова, сначала восстановите резервную копию.
+ Готово к патчингу.
+ Директория WeMod не найдена.
+ Невозможно выполнить. Пожалуйста, сначала укажите директорию.
+ Выбранная папка {0} не является допустимой директорией WeMod.
+ Не удалось восстановить резервную копию: {0}
+ Не удалось пропатчить: {0}
+ Логи скопированы в буфер обмена.
+ Не удалось скопировать логи: {0}
+ Логи экспортированы в {0}.
+ Не удалось экспортировать логи: {0}
+ Не удалось открыть {0} в браузере.
+ Выберите директорию WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.tr-TR.xaml b/WandEnhancer/Locale/lang.tr-TR.xaml
index 30a4af6..6ebc108 100644
--- a/WandEnhancer/Locale/lang.tr-TR.xaml
+++ b/WandEnhancer/Locale/lang.tr-TR.xaml
@@ -7,7 +7,6 @@
- WandEnhancerKlasör yoluKlasör bulunamadıUygula
@@ -35,7 +34,25 @@
Seçilen .js dosyaları Wand içine paketlenir ve renderer'da yüklenir.Betik seçilmediBaşlat
+ Güncellemelerden sonra otomatik uygulaNeyi geliştireceğiz?
+
+ WeMod dizini {0} konumunda bulundu ({1})
+ WeMod zaten yamanmış. Tekrar yamamak istiyorsanız, lütfen önce yedeği geri yükleyin.
+ Yama işlemi için hazır.
+ WeMod dizini bulunamadı.
+ İşlem yapılamıyor. Lütfen önce dizini belirtin.
+ Seçilen {0} klasörü geçerli bir WeMod dizini değil.
+ Yedek geri yüklenemedi: {0}
+ Yama yapılamadı: {0}
+ Günlükler panoya kopyalandı.
+ Günlükler kopyalanamadı: {0}
+ Günlükler {0} konumuna dışa aktarıldı.
+ Günlükler dışa aktarılamadı: {0}
+ {0} bir tarayıcıda açılamadı.
+ WeMod dizinini seçin
+
+
diff --git a/WandEnhancer/Locale/lang.uk-UA.xaml b/WandEnhancer/Locale/lang.uk-UA.xaml
index 47a77b1..6093129 100644
--- a/WandEnhancer/Locale/lang.uk-UA.xaml
+++ b/WandEnhancer/Locale/lang.uk-UA.xaml
@@ -7,7 +7,6 @@
- WandEnhancerШлях до папкиПапку не знайденоЗастосувати
@@ -35,7 +34,25 @@
Вибрані файли .js пакуються у Wand і завантажуються в рендерері.Скрипти не вибраноПочати
+ Автоматично застосовувати після оновленьЩо будемо покращувати?
+
+ Директорію WeMod знайдено в {0} ({1})
+ WeMod вже пропатчено. Якщо ви хочете пропатчити знову, спершу відновіть резервну копію.
+ Готово до патчингу.
+ Директорію WeMod не знайдено.
+ Не вдається виконати. Будь ласка, спочатку вкажіть директорію.
+ Вибрана папка {0} не є дійсною директорією WeMod.
+ Не вдалося відновити резервну копію: {0}
+ Не вдалося пропатчити: {0}
+ Логи скопійовано в буфер обміну.
+ Не вдалося скопіювати логи: {0}
+ Логи експортовано до {0}.
+ Не вдалося експортувати логи: {0}
+ Не вдалося відкрити {0} у браузері.
+ Виберіть директорію WeMod
+
+
diff --git a/WandEnhancer/Locale/lang.zh-CN.xaml b/WandEnhancer/Locale/lang.zh-CN.xaml
index f0624f3..c4130b1 100644
--- a/WandEnhancer/Locale/lang.zh-CN.xaml
+++ b/WandEnhancer/Locale/lang.zh-CN.xaml
@@ -7,7 +7,6 @@
- WandEnhancer文件夹路径未找到文件夹增强
@@ -35,7 +34,25 @@
选中的 .js 文件会打包到 Wand 并在渲染器中加载。未选择脚本开始
+ 更新后自动应用我们要增强什么?
+
+ 在 {0} ({1}) 找到 WeMod 目录
+ WeMod 已经修补过。如果想再次修补,请先恢复备份。
+ 准备修补。
+ 未找到 WeMod 目录。
+ 无法执行。请先指定目录。
+ 选择的文件夹 {0} 不是有效的 WeMod 目录。
+ 恢复备份失败: {0}
+ 修补失败: {0}
+ 日志已复制到剪贴板。
+ 复制日志失败: {0}
+ 日志已导出至 {0}。
+ 导出日志失败: {0}
+ 无法在浏览器中打开 {0}。
+ 选择 WeMod 目录
+
+
diff --git a/WandEnhancer/ReactiveUICore/AsyncRelayCommand.cs b/WandEnhancer/ReactiveUICore/AsyncRelayCommand.cs
deleted file mode 100644
index ebe4787..0000000
--- a/WandEnhancer/ReactiveUICore/AsyncRelayCommand.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Input;
-
-namespace WandEnhancer.ReactiveUICore
-{
- public sealed class AsyncRelayCommand : ICommand
- {
- private readonly Func