dotnetcore3.1 WPF 实现多语言
Intro
最近把 DbTool 从 WinForm 迁移到了 WPF,并更新到了 dotnet core 3.1,并实现了基于 实现了基本的多语言支持。下面来分享一下如何来实现
服务注册
如果不熟悉如何在 WPF 中使用依赖注入,可以参考上一篇文章 dotnetcore3.1 WPF 中使用依赖注入
在应用启动前注册 Localization 服务,我这里使用的是自己自定义的基于 JSON 的多语言服务
服务注册的最后使用了一个 ServiceLocator 模式的代码(DependencyResolver),保存了所有的注册服务,后面的 Localizer 扩展会用到
代码文件实现方式
xaml 实现方式
LocaliazerExtension
xaml 文件中使用需要自定义一个扩展,定义如下,【实现源码】:
这里使用到了上面提到的 模式的代码,从 获取注册的服务,感觉这里的实现需要优化,有更好想法的小伙伴还望一起交流一下,另外如果你的应用比较简单,我觉得上面代码里的通过反射获取 的代码可以直接使用某一个类型例如: ,这样会更高效
在 xaml 中使用
在 标签中添加扩展对应的命令空间,例如:
在需要实现多语言的地方引用,例如:
在对应的资源文件中配置要使用多语言资源,如上面的
语言切换
发生语言切换时或应用启动时设置默认语言时,要更新当前线程的 Culture 信息
实现效果
More
这种方式的实现,目前还需要重启之后界面的语言才会发生变化,可以进一步优化,实现动态多语言,修改语言之后界面就切换,目前不是太需要,暂时没做,有需要的可以先自己研究一下。
Reference
领取专属 10元无门槛券
私享最新 技术干货