动态更新的语言库

动态更新的语言库

  1. 创建类

     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。

  2. 创建资源文件
    新建项目-Resource1.resx。

  3. 切换语言

    1
    2
    
    LocalizationResourceManager.Instance.SetCulture(new CultureInfo("zh"));
    LocalizationResourceManager.Instance.SetCulture(new CultureInfo("en"));
    
  4. 前端引用
    添加命名空间引用。

    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}"/>
    
  5. 后台引用

    1
    
    string Name = $"{LocalizationResourceManager.Instance["Volume"]}";
    
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy