Globalisation Changes

This commit is contained in:
Brett Hewitson 2021-12-02 17:23:26 +10:00
parent 4a80b089b4
commit 034d7401d1
15 changed files with 410 additions and 51 deletions

View file

@ -1,5 +1,10 @@
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
{
@ -21,5 +26,111 @@ namespace ServerManagerTool.Plugin.Common
}
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);
}
}
}
}
}
}