-
创建类
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)); } }
该类会创建静态实例Instance。
-
创建资源文件
新建项目-Resource1.resx。 -
切换语言
1 2
LocalizationResourceManager.Instance.SetCulture(new CultureInfo("zh")); LocalizationResourceManager.Instance.SetCulture(new CultureInfo("en"));
-
前端引用
添加命名空间引用。1
xmlns: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 2
xmlns:resources="clr-namespace:RuiChao.Resource.Localization;assembly=RuiChao.Resource" <RadioButton Content="{x:Static resources:AppResources.Ventilation}" Value="{x:Byte 0}"/>
-
后台引用
1
string Name = $"{LocalizationResourceManager.Instance["Volume"]}";