-
Create a class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20public class LocalizationResourceManager : INotifyPropertyChanged { private LocalizationResourceManager() { AppResources.Culture = CultureInfo.CurrentCulture; } public static LocalizationResourceManager Instance { get; } = new(); public object this[string resourceKey] => AppResources.ResourceManager.GetObject(resourceKey, AppResources.Culture) ?? Array.Empty<byte>(); public event PropertyChangedEventHandler? PropertyChanged; public void SetCulture(CultureInfo culture) { AppResources.Culture = culture; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null)); } }This class creates a static instance
Instance. -
Create resource files.
Create a new projectResource1.resx. -
Switch languages.
1 2LocalizationResourceManager.Instance.SetCulture(new CultureInfo("zh")); LocalizationResourceManager.Instance.SetCulture(new CultureInfo("en")); -
Frontend reference.
Add namespace reference.1xmlns:resources="clr-namespace:RuiChao.Resource.Classes;assembly=RuiChao.Resource"Direct static binding.
1<Label Text="{Binding Source={x:Static resources:LocalizationResourceManager.Instance}, Path=[Ventilation]}" />Create a resource dictionary binding.
1 2 3 4<ResourceDictionary> <x:StaticExtension Member="resources:LocalizationResourceManager.Instance" x:Key="Localization"/> </ResourceDictionary> <Label Text="{Binding Source={StaticResource Localization}, Path=[MainTitle]}" />If dynamic updates are not needed, bind directly to text resources.
1 2xmlns:resources="clr-namespace:RuiChao.Resource.Localization;assembly=RuiChao.Resource" <RadioButton Content="{x:Static resources:AppResources.Ventilation}" Value="{x:Byte 0}" /> -
Backend reference.
1string Name = $"{LocalizationResourceManager.Instance["Volume"]}";