如何在不使用LocBAML的情况下本地化WPF应用程序?

21

似乎没有一个好的方法来本地化WPF应用程序。 MSDN似乎认为在我的XAML中添加"x:Uid",生成CSV文件,然后生成新的程序集(使用他们的示例代码!)就是答案。 更糟糕的是,这个过程并没有解决如何本地化图像、二进制块(比如PDF文件)或嵌入在代码中的字符串。

那么,如何本地化一个具有以下特点的应用程序:

  1. 包含多个程序集
  2. 包含需要本地化的图像和其他二进制块(例如:PDF文档)
  3. 具有不在XAML中的字符串数据(例如:MessageBox.Show("Hello World");

你接受的答案中有几个回答。你能指出你选择了哪一个吗? - Dmitriy
这么久了,我都忘了!唉! - Cory R. King
5个回答

11
你应该查看这里提供的文章和代码(链接)。它描述了本地化WPF应用程序的不同方法,使用LocBaml、自定义标记扩展或附加属性。在我看来,最好的解决方案是使用标记扩展和Resx资源。该代码包含一个本地化框架来实现这一点。

8
我不是专家,但在xaml中添加x:Uids并不比在Windows Forms代码中添加所有字符串表的废话更糟糕。据我所知,WPF应用程序仍支持“所有框架CLR资源,包括字符串表、图像等等”,这意味着您可以拥有本地化资源。当然,如果您创建了一个处理大部分这些废话的标记扩展,那么它会简单得多。您可以在此处找到某人执行此操作的示例。还有另一种类似的解决方案 http://blog.taggersoft.com/2008/07/wpf-application-localization-pattern_29.html,但该链接已不再有效。

6
各位,截至本评论,这个回答已经有将近八年的历史了。请查找更加最新的本地化WPF应用程序的信息。无需为此回答点赞,只需为这个评论点赞/留下您发现的详细信息即可! - user1228

0
我在自己的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项目的示例。


0

请尝试使用Gnu GetText工具及其支持应用程序。它可以基于ResourceManager和ResourceSets生成C#类,当然您也可以重复使用翻译以适用于应用程序的其他部分 - 如网页、本机代码或iPhone等。


0

您可以使用支持所有提到的场景的旧版“ResX”文件。如何在WPF应用程序中实现此目标,请参见以下说明:

WPF应用程序框架(WAF) => 查看本地化示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接