• 你听我说-HandyControl多语言包处理


    此处仅仅针对HandyControl<=3.2.0系列版本,其上版本将只包含中文语言包,其他语言包,通过Nuget单独下载使用

    blog-hbh-hc-header

    问题场景

    项目引入HandyControl进行客户端的开发,巴拉巴拉,看看官方文档-快速开始,引用Nuget包,引入全局样式,加个按钮,看看效果,运行调试

    Nuget引用:

    blog-hbh-hc-langs-nuget

    App.xaml内容:

     <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                    <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
      </Application.Resources>
    

    MainWindow.xaml内容:

    <Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <Button Content="测试"></Button>
        </Grid>
    </Window>
    

    调试效果如下:

    blog-hbh-hc-langs-view

    看到Debug文件目录下,突然发现多个语言包,这是咋回事儿?

    blog-hbh-hc-langs-dir

    这些多余的语言包如何去掉,并不希望有这些多余的语言包包含在程序里,

    原因分析

    HandyControl的项目源码中,为了兼容多语言实现国际化,实际加入了多个不同语言的语言版本包,默认支持的是中文,其他语言包都作为附属资源进行了内嵌,所以引入Nuget包,生成项目时,会自动生成对应的附属语言包

    解决方式

    以下是目前尝试过的几种方式

    删除多余语言包(一)

    每次发布或者生成之后,删除这些包就行,实际上本地默认为中文语言包,其他语言包主要是针对的多语言版本程序集,毕竟HandyControl也是跨国际的WPF UI库(笔者说的,切勿当真),删除语言包之后,实际程序集是能够正常运行

    blog-hbh-hc-langs-delete

    这个方式有关不好的地方就是,需要每次生成或者发布之后进行目录中删除多余语言包,操作比较重复,但是比较简单,初学者就能个处理,那如果是不想这样每一回都这样操作,还有其他方式否?有!自己写个脚本自动批量删除或者直接改HandyControl的项目源码

    修改源码(二)

    此处操作是建立在源码已经能够正常编译运行发布的情况下,如果源码还不知道如何编译的话,请查看笔者之前的文章你听我说-HandyControl源码编译,先确保源码能跑起来,再考虑修改

    选择版本

    找到项目中的需要的目标版本,40对应Fx_4.0版本,45对应Fx_4.5及其以上版本,包括Core.Net5,原始项目结构中语言包分布如下:

    blog-hbh-hc-langs-list

    删除语言包

    默认支持的语言包为Lang.resx,对应着中文语言包,此处以保留中文语言包为例,其他语言包删除,操作结果如下:

    blog-hbh-hc-langs-newlist

    生成发布包

    选择【解决方案配置】-中Release或者Release-Net40

    image-20210723210015033

    之后选择目标项目HandyControl_Net_GE45HandyControl_Net_40,单击右键重新生成,生成结果如下:

    image-20210723210640111

    依据需求,移除nuget包,选择对应目录下的dll,重新运行项目,debug目录如下:

    blog-hbh-hc-langs-nolangs

    至此,语言包的去除方式,就讲到这里,如果有其他方式,请一定得留言

    注意

    不少资源并未包含在HandyControl.dll程序集中,如果小伙伴瞧得起对应案例的资源样式,可以考虑自己从案例中刨出去使用即可

    后续将继续构建HandyControl的相关系列,可关注私信或直接评论回复【HandyControl

  • 相关阅读:
    java四种线程池的使用
    @Autowired@Resource@Qualifier的区别
    Unsupported major.minor version 52.0解决办法
    CentOS7配置防火墙
    redis 集群搭建
    excludepathpatterns 无效
    解决 SpringBoot 没有主清单属性
    Java Web应用中调优线程池的重要性
    spring boot application properties配置详解
    Class path contains multiple SLF4J bindings.
  • 原文地址:https://www.cnblogs.com/guanguanchangyu/p/15053884.html
Copyright © 2020-2023  润新知