当前位置: 首页 > news >正文

上地网站建设上海定制网站建设

上地网站建设,上海定制网站建设,网站建设方案数,wordpress右下角悬浮概览随着我们的应用程序越来越受欢迎#xff0c;我们的下一步将要开发多语言功能。方便越来越多的国家使用我们中国的应用程序#xff0c;基于 WPF 本地化#xff0c;我们很多时候使用的是系统资源文件#xff0c;可是动态切换本地化#xff0c;就比较麻烦了。实现思路现在… 概览随着我们的应用程序越来越受欢迎我们的下一步将要开发多语言功能。方便越来越多的国家使用我们中国的应用程序基于 WPF 本地化我们很多时候使用的是系统资源文件可是动态切换本地化就比较麻烦了。实现思路现在我们将要实现的是基于 DotNetCore 3.0 以上版本 and WPF 桌面应用程序模块化的多语言功能。动态切换多语言思路把所有模块的资源文件添加到字典集合。将资源文件里的key绑定到前台。通过通知更改 CurrentCulture 多语言来使用改变的语言文件里的key。通过绑定 Binding 拼接Path 在输出。动态切换我们先来看实现结果第一行是我们的主程序的数据展示用于业务中的本地化第二行是我们业务模块A的数据展示第三行是我们业务模块B的数据展示来看一下xaml展示通过ComboBox选择来切换语言搭建模拟业务项目创建一个WPF App(.NET Core)应用程序创建完成后我们需要引入业务A模块及业务B模块和业务帮助模块使用ResX资源文件在各个模块里添加Strings 文件夹用来包含 各个国家和地区的语言文件。多语言可以参考https://github.com/UnRunDeaD/WPF---Localization/blob/master/ComboListLanguages.txt资源文件可以放在任意模块内比如业务模块A 主程序底层业务控件工具集等创建各个业务模块资源文件Strings文件夹可以任意命名帮助类封装到底层供各个模块调用 public class TranslationSource : INotifyPropertyChanged{public static TranslationSource Instance { get; } new TranslationSource();private readonly Dictionarylt;string, ResourceManagergt; resourceManagerDictionary new Dictionarylt;string, ResourceManagergt;();public string this[string key]{get{Tuplelt;string, stringgt; tuple SplitName(key);string translation null;if (resourceManagerDictionary.ContainsKey(tuple.Item1))translation resourceManagerDictionary[tuple.Item1].GetString(tuple.Item2, currentCulture);return translation ?? key;}}private CultureInfo currentCulture CultureInfo.InstalledUICulture;public CultureInfo CurrentCulture{get { return currentCulture; }set{if (currentCulture ! value){currentCulture value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(string.Empty));}}}public event PropertyChangedEventHandler PropertyChanged;public void AddResourceManager(ResourceManager resourceManager){if (!resourceManagerDictionary.ContainsKey(resourceManager.BaseName)){resourceManagerDictionary.Add(resourceManager.BaseName, resourceManager);}}public static Tuplelt;string, stringgt; SplitName(string local){int idx local.ToString().LastIndexOf(.);var tuple new Tuplelt;string, stringgt;(local.Substring(0, idx), local.Substring(idx 1));return tuple;}}public class Translation : DependencyObject{public static readonly DependencyProperty ResourceManagerProperty DependencyProperty.RegisterAttached(ResourceManager, typeof(ResourceManager), typeof(Translation));public static ResourceManager GetResourceManager(DependencyObject dependencyObject){return (ResourceManager)dependencyObject.GetValue(ResourceManagerProperty);}public static void SetResourceManager(DependencyObject dependencyObject, ResourceManager value){dependencyObject.SetValue(ResourceManagerProperty, value);}}public class LocExtension : MarkupExtension{public string StringName { get; }public LocExtension(string stringName){StringName stringName;}private ResourceManager GetResourceManager(object control){if (control is DependencyObject dependencyObject){object localValue dependencyObject.ReadLocalValue(Translation.ResourceManagerProperty);if (localValue ! DependencyProperty.UnsetValue){if (localValue is ResourceManager resourceManager){TranslationSource.Instance.AddResourceManager(resourceManager);return resourceManager;}}}return null;}public override object ProvideValue(IServiceProvider serviceProvider){object targetObject (serviceProvider as IProvideValueTarget)?.TargetObject;if (targetObject?.GetType().Name SharedDp)return targetObject;string baseName GetResourceManager(targetObject)?.BaseName ?? string.Empty;if (string.IsNullOrEmpty(baseName)){object rootObject (serviceProvider as IRootObjectProvider)?.RootObject;baseName GetResourceManager(rootObject)?.BaseName ?? string.Empty;}if (string.IsNullOrEmpty(baseName)){if (targetObject is FrameworkElement frameworkElement){baseName GetResourceManager(frameworkElement.TemplatedParent)?.BaseName ?? string.Empty;}}Binding binding new Binding{Mode BindingMode.OneWay,Path new PropertyPath($[{baseName}.{StringName}]),Source TranslationSource.Instance,FallbackValue StringName};return binding.ProvideValue(serviceProvider);}} 前台绑定 xmlns:extclr-namespace:WpfUtil.Extension;assemblyWpfUtilxmlns:resxclr-namespace:ModuleA.Stringsext:Translation.ResourceManager{x:Static resx:SR.ResourceManager}显示文字lt;Label Content{ext:Loc Test} FontSize21 /gt;后台实现根据业务的需要我们在界面上无法适用静态文字显示的一般通过后台代码来完成对于 code-behind 的变量使用同样可以应用于资源字典。PS: 欢迎各位大佬慷慨指点有不足之处请指出有疑问请指出喜欢它请支持下载地址https://github.com/androllen/WpfNetCoreLocalization相关链接https://github.com/Jinjinov/wpf-localization-multiple-resource-resx-one-language/blob/master/README.md
http://www.ihoyoo.com/news/869.html

相关文章:

  • 建网站做站长微信分销网站开发
  • 公司网站内容的更新信息管理网站开发实验报告
  • 学网站建设县网站建设
  • 网站建设代理平台怎么做网站建设+备案什么意思
  • 建设网站如何收费扬中如何优化网站
  • 西安建设网站的公司哪家好区块链开发与应用
  • 红光网站建设泰兴住房和城乡建设厅网站
  • 西安英文网站制作制作网页的流程步骤
  • 网站服务器ip地址怎么查外包做的网站
  • 网站手机版开发论坛源码推荐
  • 外贸soho建站公司营销型网站名词解释
  • 网站首页图片轮转代码 很好用做网站维护难吗
  • 自己有服务器怎么搭建网站唐山公司网站制作
  • 南宁seo多少钱费用安徽网站优化怎么做
  • 菜鸟如何建网站网站的内容有哪些内容
  • 模板王网站怎么下载不了模板网站的程序和数据库怎么做
  • 网站建设需求分析流程图wordpress 语言设定
  • php笔记网站网上花店网页制作代码
  • 北京网站设计有名 乐云践新安徽区块链虚拟币网站开发方案