-
Create a class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public 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 2
LocalizationResourceManager.Instance.SetCulture(new CultureInfo("zh")); LocalizationResourceManager.Instance.SetCulture(new CultureInfo("en"));
-
Frontend reference.
Add namespace reference.1
xmlns: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 2
xmlns:resources="clr-namespace:RuiChao.Resource.Localization;assembly=RuiChao.Resource" <RadioButton Content="{x:Static resources:AppResources.Ventilation}" Value="{x:Byte 0}" />
-
Backend reference.
1
string Name = $"{LocalizationResourceManager.Instance["Volume"]}";