XAML 在没有LocBAML的情况下,本地化WPF应用程序的最佳方法是什么?

puruo6ea  于 2023-10-14  发布在  其他
关注(0)|答案(5)|浏览(130)

似乎没有本地化WPF应用程序的好方法。MSDN似乎认为将我的XAML与x:Uid的垃圾,生成CSV文件,然后生成新的程序集(使用他们的示例代码!)就是答案。更糟糕的是,这个过程没有解决如何本地化图像、二进制blob(比如PDF文件)或嵌入代码中的字符串。
那么,如何本地化一个应用程序:
1.包含多个程序集
1.包含图像和其他二进制blob(例如:PDF文档)需要本地化
1.具有不在XAML中的字符串数据(例如:MessageBox.Show("Hello World");

92vpleto

92vpleto1#

你应该看一下here的文章和代码。它描述了使用LocBaml、自定义标记扩展或附加属性本地化WPF应用程序的不同方法。恕我直言,最好的解决方案是使用标记扩展和Resx资源。代码中包含了一个本地化框架。

hpcdzsge

hpcdzsge2#

我不是这里的Maven,但是用x:Uids“乱丢”xaml并不比用本地化它们所必须做的所有字符串表废话“乱丢”Windows窗体代码更糟糕。
据我所知,WPF应用程序仍然支持“所有的Framework资源,包括字符串表,图像等”,这意味着你可以拥有本地化的资源。
当然,如果您创建一个标记扩展来为您处理这些废话,那么事情就会简单得多。You can find an example of someone doing this here.http://blog.taggersoft.com/2008/07/wpf-application-localization-pattern_29.html上还有另一个类似的解决方案,但该链接不再起作用。

o3imoua4

o3imoua43#

您可以使用旧的“ResX”文件,它支持您提到的所有场景。如何在WPF应用程序中实现这一点在这里解释:
WPF Application Framework (WAF) =>参见本地化示例

icnyk63a

icnyk63a4#

尝试Gnu GetText实用程序和支持应用程序。它基于ResourceManager和ResourceSets提供generate C#类,当然,您可以在应用程序的其他部分(例如网页、本机代码或iPhone等)重用这些翻译。

xxe27gdn

xxe27gdn5#

我在自己的WPF应用程序中遇到了同样的问题,于是决定编写一个轻量级的本地化库。它允许翻译xaml资源字典文件,并在运行时在支持的语言之间切换。
您可以查看Armat.Localization GitHub存储库以获取更多详细信息,并参考WPF应用程序中的“armat.localization.wpf”NuGet包。使用适当的演示应用程序克隆/构建源代码将使您给予对 Armat.Localization 库如何工作的足够理解。
主要思想如下:

  • 将所有可本地化的内容从WPF控件提取到WPF资源字典文件中
  • 通过将根xaml元素更改为“Armat.Localization.Wpf.LocalizableResourceDictionary”,使资源字典可本地化
  • 使用本地化设计器(来自同一个存储库)为所有支持的语言创建翻译文件
  • 在WPF应用程序中提供一个语言选择器,用于在支持的语言之间切换

Localization.CoreLocalization.Wpf项目中的Markdown文件将指导您完成一般的使用模式,而Localization.Demo应用程序将作为可本地化的WPF项目的示例。

相关问题