请自行参考以下方案
转载:https://vladislavantonyuk.github.io/articles/Localize-.NET-MAUI-application/

本地化 .NET MAUI 应用程序

26 2022月 <>

.NET MAUI/Xamarin

Привіт!你好!你好!

.NET MAUI、 和已发布,因此是时候迁移旧的 Xamarin 应用程序了!CommunityToolkit.MAUICommunityToolkit.MAUI.Markup

许多应用程序支持不同的语言,以为用户提供使用其母语的最佳体验。根据您的需要,有几种方法可以本地化 .NET MAUI 程序。

.NET MAUI与其他 .NET 应用程序一样,使用这些文件来存储字符串、图像和其他文件。Resources

让我们添加 2 个新的资源文件和 .第一个文件包含默认的应用程序本地化资源。在我们的例子中,它是英语。第二个文件包含乌克兰语的资源。AppResources.resxAppResources.uk.resx

首先,我们需要导入资源的命名空间。

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-xml">xmlns:localization="clr-namespace:MauiLocalization.Resources.Localization"
</code></span></span>

然后我们可以设置主页标题:

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-xml">Title = {x:Static localization:AppResources.MainPageTitle}
</code></span></span>

另外,将此行添加到您的 csproj 文件中:

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-xml"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>GenerateSatelliteAssembliesForCore</span><span style="color:#999999">></span></span>true<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>GenerateSatelliteAssembliesForCore</span><span style="color:#999999">></span></span>
</code></span></span>

可在此处阅读有关附属程序集的详细信息:为 .NET 应用创建附属程序集。

现在,如果您启动应用程序,您将看到默认标题内容 - “主页”。切换到乌克兰语并重新启动应用程序。现在标题内容是“Головна сторінка”。

它工作得很好,但是如果我不想重新启动应用程序或只想更改此应用程序的语言怎么办?

在这种情况下,我们需要添加一些代码。我们需要通知我们的属性资源已更改。为此,我们创建:LocalizationResourceManager

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-csharp">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));}
}
</code></span></span>

现在,您的值可以更新为:Title

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-xml">Title = "{Binding MyCodeBehindLocalizationResourceManager[MainPageTitle], Mode=OneWay}"
</code></span></span>

其中是具有值的代码隐藏属性。MyCodeBehindLocalizationResourceManagerLocalizationResourceManager.Instance

因此,这里的值绑定到资源值。每次我们调用该方法时,我们的属性值都会更新。TitleLocalizationResourceManager.SetCulture

如果您不想为 创建额外的属性,我们可以将其隐藏在:LocalizationResourceManagerMarkupExtension

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-csharp">[ContentProperty(nameof(Name))]
public class TranslateExtension : IMarkupExtension<BindingBase>
{public string? Name { get; set; }public BindingBase ProvideValue(IServiceProvider serviceProvider){return new Binding{Mode = BindingMode.OneWay,Path = $"[{Name}]",Source = LocalizationResourceManager.Instance};}object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider){return ProvideValue(serviceProvider);}
}
</code></span></span>

现在,该值可以更新为:Title

<span style="background-color:#f5f2f0"><span style="color:black"><code class="language-xml">Title="{localization:Translate MainPageTitle}"
</code></span></span>

因此,您应该收到这样的应用程序:

这就是您无需重新启动应用程序即可切换语言所需的全部内容。

完整的代码可以在GitHub上找到。

祝您编码愉快!

MAUI 原生APPI18N多语言解决方案相关推荐

  1. .netcore多语言解决方案

    .netcore多语言解决方案 参考文章: (1).netcore多语言解决方案 (2)https://www.cnblogs.com/ives/p/language.html 备忘一下.

  2. DTCC 2020 | 阿里云张鑫:阿里云云原生异地多活解决方案

    简介:异地多活,顾名思义就是分布在异地多个站点同时对外提供服务,与传统灾备最主要的区别是"多活"里所有站点都是同时在对外提供服务的.在业务不断复杂化和容灾要求不断严格化的今天,如何 ...

  3. 阿里云推出业内首个云原生企业级数据湖解决方案:将在今年双11大规模应用

    简介: 数据湖高峰论坛在京召开,阿里云宣布推出业内首个云原生企业级数据湖解决方案,提供EB级数据存储.分析能力,可一站式实现湖存储.湖加速.湖管理.湖计算,帮助企业对数据深入挖掘与分析,洞察其中蕴含的 ...

  4. c语言xyz最小值,有关问题XYZ的10种语言解决方案(一)之C语言篇

    问题XYZ的10种语言解决方案(一)之C语言篇 写这篇,或者这个系列的无聊博客文章完全是由于昨晚没事瞎想想到的,本来是在思考<Learn you a Hashkell for Great Goo ...

  5. @程序员,让8年京东架构师为你解析云原生监控和日志解决方案!

    监控和日志是大型分布式系统的重要基础设施:监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 云原生应用具有分布与动态的特性,而所有此类应用通常都会用到容器和无服务器函数等临时技术 ...

  6. KCL:声明式的云原生配置策略语言

    楔子: 以蚂蚁集团典型的建站场景为例,在接入 Kusion 后,用户侧配置代码减少到 5.5%,用户面对的 4 个平台通过接入统一代码库而消减,在无其他异常的情况下交付时间从 2 天下降到 2 小时- ...

  7. 云原生应用Go语言:你还在考虑的时候,别人已经应用实践

    摘要:在近日于上海召开的第六届Gopher China大会上,华为云微服务首席架构师田晓亮分享了<华为云的Go语言云原生实战经验>,讲述如何构建韧性.高可靠.安全的云原生应用系统,并孵化云 ...

  8. Unity 游戏多语言解决方案和字体错误解决方法的想法

    今天先想一想怎么给增加多语言,我看着官方的那个localization的方案感觉很麻烦,到后面的时候,不可能每一个都在他的localization窗口里面增加语言或者脚本里面增加语言,而且那个太容易给 ...

  9. java gnu gettext_多国语言解决方案gnu.gettext + poedit

    1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是"国际化"的简称. i10n为资源本地化 ...

最新文章

  1. AI学习笔记之——如何理解机器学习(Machine Learning)
  2. php5.5 反序列化利用工具_记一次Spring Devtools反序列化利用
  3. defer和async属性详解
  4. linux下怎么退出telnet
  5. 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题
  6. 第一周 从C走进C++ 008 函数缺省参数
  7. 【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。
  8. 卸载mysql 安装mariadb_centos7卸载mariadb并安装mysql8
  9. echarts 仪表盘 文字位置_方法 | 用notion打造个人仪表盘
  10. Exchange 2013反垃圾邮件功能
  11. 全栈创建一个小程序(mpvue+nodejs+mysql)---(一)--本地开发
  12. 车牌识别算法_向滥用远光灯说不,易泊车牌识别算法了解一下?
  13. 推荐Go语言开源项目:Excelize ,获取阿里云ECS实例监控数据导出到自定义Excel表格(二)
  14. 敏捷开发vs 传统开发
  15. 计算机技术比武优秀获奖感言,技能比赛获奖感言范文
  16. 继续惨...555555555
  17. Android -Recovery
  18. NP完全问题的归约-碰撞集(HITTING SET)
  19. ipa包脱壳、解析、info.plist文件基本信息介绍
  20. C++ string大小写转换

热门文章

  1. Windows逆向学习提纲
  2. 一年前被恶意裁员,最近入职新公司背调到上家HR,HR竟主动说我坏话,我可以起诉他恶意诽谤吗?...
  3. catalog能否用于mysql_数据库-----catalog与schema简介
  4. 我国最东边的高速公路,鹤大高速已全线通车,通边达海都靠它了!
  5. 德国又开始查VAT了 销售额前3000的亚马逊卖家要注意了
  6. 【漆天编程】交易员为什么一定要学会EA编程
  7. 压缩照片大小的软件-免费压缩图片大小的软件
  8. 设计一个类代表二维空间的一个圆。_多媒体数字展厅设计如何有效搭建空间美感?...
  9. sublime 快捷键大全
  10. Python坦克大战完整版