mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
136 lines
5.2 KiB
C#
136 lines
5.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Markup;
|
|
|
|
namespace ServerManagerTool.Plugin.Common
|
|
{
|
|
public static class ResourceUtils
|
|
{
|
|
public static string GetResourceString(ResourceDictionary resources, string inKey)
|
|
{
|
|
if (resources == null)
|
|
throw new ArgumentNullException(nameof(resources), "parameter cannot be null.");
|
|
if (string.IsNullOrWhiteSpace(inKey))
|
|
throw new ArgumentNullException(nameof(inKey), "parameter cannot be null.");
|
|
|
|
if (resources.Contains(inKey) && resources[inKey] is string)
|
|
{
|
|
var resourceString = resources[inKey].ToString();
|
|
resourceString = resourceString.Replace("\\r", "\r");
|
|
resourceString = resourceString.Replace("\\n", "\n");
|
|
return resourceString;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static void RemoveExceptResourceDictionary(Window window, string dictionaryName)
|
|
{
|
|
if (window == null || string.IsNullOrWhiteSpace(dictionaryName))
|
|
return;
|
|
|
|
var dictionariesToRemove = window.Resources.MergedDictionaries.Where(d => !d.Source.OriginalString.Contains(dictionaryName)).ToList();
|
|
if (dictionariesToRemove != null)
|
|
{
|
|
foreach (var dictionaryToRemove in dictionariesToRemove)
|
|
{
|
|
window.Resources.MergedDictionaries.Remove(dictionaryToRemove);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void RemoveExceptResourceDictionary(UserControl control, string dictionaryName)
|
|
{
|
|
if (control == null || string.IsNullOrWhiteSpace(dictionaryName))
|
|
return;
|
|
|
|
var dictionariesToRemove = control.Resources.MergedDictionaries.Where(d => !d.Source.OriginalString.Contains(dictionaryName)).ToList();
|
|
if (dictionariesToRemove != null)
|
|
{
|
|
foreach (var dictionaryToRemove in dictionariesToRemove)
|
|
{
|
|
control.Resources.MergedDictionaries.Remove(dictionaryToRemove);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void RemoveResourceDictionary(Window window, string dictionaryName)
|
|
{
|
|
if (window == null || string.IsNullOrWhiteSpace(dictionaryName))
|
|
return;
|
|
|
|
var dictionaryToRemove = window.Resources.MergedDictionaries.FirstOrDefault(d => d.Source.OriginalString.Contains(dictionaryName));
|
|
if (dictionaryToRemove != null)
|
|
{
|
|
window.Resources.MergedDictionaries.Remove(dictionaryToRemove);
|
|
}
|
|
}
|
|
|
|
public static void RemoveResourceDictionary(UserControl control, string dictionaryName)
|
|
{
|
|
if (control == null || string.IsNullOrWhiteSpace(dictionaryName))
|
|
return;
|
|
|
|
var dictionaryToRemove = control.Resources.MergedDictionaries.FirstOrDefault(d => d.Source.OriginalString.Contains(dictionaryName));
|
|
if (dictionaryToRemove != null)
|
|
{
|
|
control.Resources.MergedDictionaries.Remove(dictionaryToRemove);
|
|
}
|
|
}
|
|
|
|
public static void UpdateResourceDictionary(Window window, string languageCode)
|
|
{
|
|
if (window == null)
|
|
return;
|
|
|
|
RemoveExceptResourceDictionary(window, PluginHelper.LANGUAGECODE_FALLBACK);
|
|
|
|
var assembly = Assembly.GetCallingAssembly();
|
|
|
|
var resourcePath = assembly.GetManifestResourceNames().FirstOrDefault(r => r.EndsWith($"{languageCode}.xaml"));
|
|
if (string.IsNullOrWhiteSpace(resourcePath))
|
|
return;
|
|
|
|
using (Stream stream = assembly.GetManifestResourceStream(resourcePath))
|
|
{
|
|
using (StreamReader reader = new StreamReader(stream))
|
|
{
|
|
var resourceDictionary = XamlReader.Load(reader.BaseStream) as ResourceDictionary;
|
|
if (resourceDictionary != null)
|
|
{
|
|
window.Resources.MergedDictionaries.Add(resourceDictionary);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void UpdateResourceDictionary(UserControl control, string languageCode)
|
|
{
|
|
if (control == null)
|
|
return;
|
|
|
|
RemoveExceptResourceDictionary(control, PluginHelper.LANGUAGECODE_FALLBACK);
|
|
|
|
var assembly = Assembly.GetCallingAssembly();
|
|
|
|
var resourcePath = assembly.GetManifestResourceNames().FirstOrDefault(r => r.EndsWith($"{languageCode}.xaml"));
|
|
if (string.IsNullOrWhiteSpace(resourcePath))
|
|
return;
|
|
|
|
using (Stream stream = assembly.GetManifestResourceStream(resourcePath))
|
|
{
|
|
using (StreamReader reader = new StreamReader(stream))
|
|
{
|
|
var resourceDictionary = XamlReader.Load(reader.BaseStream) as ResourceDictionary;
|
|
if (resourceDictionary != null)
|
|
{
|
|
control.Resources.MergedDictionaries.Add(resourceDictionary);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|