You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.8 KiB
57 lines
1.8 KiB
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Reflection;
|
|
|
|
namespace ex_Localization3.Resources.Localization;
|
|
|
|
public class Localization
|
|
{
|
|
public string Culture
|
|
{
|
|
get => culture;
|
|
set
|
|
{
|
|
if(string.IsNullOrWhiteSpace(value)) return;
|
|
culture = value;
|
|
LocalizedStringExtension.Culture = culture;
|
|
}
|
|
}
|
|
private string culture = "en";
|
|
}
|
|
|
|
public class LocalizedStringExtension : IMarkupExtension<string>
|
|
{
|
|
public string Key { get; set; }
|
|
public static string Culture
|
|
{
|
|
get => culture;
|
|
set
|
|
{
|
|
if(culture == value) return;
|
|
culture = value;
|
|
AppRes.Culture = new CultureInfo(Culture);
|
|
CultureChanged?.Invoke(null, EventArgs.Empty);
|
|
}
|
|
}
|
|
private static string culture = "en";
|
|
|
|
public static AppResourcesVM AppRes { get; set; } = new AppResourcesVM();
|
|
|
|
public static event EventHandler? CultureChanged;
|
|
|
|
public string ProvideValue(IServiceProvider serviceProvider)
|
|
{
|
|
IProvideValueTarget? provideValueTarget = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
|
|
CultureChanged += (src, args) =>
|
|
{
|
|
(provideValueTarget?.TargetObject as BindableObject)?.SetValue((provideValueTarget?.TargetProperty as BindableProperty), typeof(AppResources).GetProperty(Key, BindingFlags.NonPublic | BindingFlags.Static)?.GetValue(null) as string ?? "");
|
|
};
|
|
return typeof(AppResources).GetProperty(Key, BindingFlags.NonPublic | BindingFlags.Static)?.GetValue(null) as string ?? "";
|
|
}
|
|
|
|
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
|
|
{
|
|
return (this as IMarkupExtension<string>).ProvideValue(serviceProvider);
|
|
}
|
|
}
|