-
创建类
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)); } }该类会创建静态实例Instance。
-
创建资源文件
新建项目-Resource1.resx。 -
切换语言
1 2LocalizationResourceManager.Instance.SetCulture(new CultureInfo("zh")); LocalizationResourceManager.Instance.SetCulture(new CultureInfo("en")); -
前端引用
添加命名空间引用。1xmlns:resources="clr-namespace:RuiChao.Resource.Classes;assembly=RuiChao.Resource"直接静态绑定。
1<Label Text="{Binding Source={x:Static resources:LocalizationResourceManager.Instance}, Path=[Ventilation]}"/>新建资源字典绑定。
1 2 3 4<ResourceDictionary> <x:StaticExtension Member="resources:LocalizationResourceManager.Instance" x:Key="Localization"/> </ResourceDictionary> <Label Text="{Binding Source={StaticResource Localization}, Path=[MainTitle]}"/>如果不需要动态更新可以直接绑定文本资源。
1 2xmlns:resources="clr-namespace:RuiChao.Resource.Localization;assembly=RuiChao.Resource" <RadioButton Content="{x:Static resources:AppResources.Ventilation}" Value="{x:Byte 0}"/> -
后台引用
1string Name = $"{LocalizationResourceManager.Instance["Volume"]}";