使用静态方法的WPF本地化

本文关键字:WPF 本地化 静态方法 | 更新日期: 2023-09-27 18:06:41

我有一个c# . net 4.5 WPF应用程序。应用必须是可本地化的。这意味着我必须能够改变标签/标题/按钮/文本的一切视觉在我的应用程序。

我有一个现有的模型来接受id-String并返回给定语言的文本。比如:

String localizedCancelText = Localize.Text("@Cancel"); //Cancel
String localizedMoneyLeftText = Localize.Text("@MoneyLeft",10); //$10 left

其中locale . text(..)方法是静态的。

这一切都很好。

问题在于标签/标题,这些是在WPF中设置的。这个想法是让所有的标签(所有视觉)包含关键字,而不是英文文本。例如,WPF的取消按钮应该是这样的:

<Button Content="@Cancel"/>

然后我必须取"@Cancel"并查找在给定语言/位置/部门中cancel是如何写的。

我的问题是:我该怎么做呢?我可以设置每个标签/按钮/文本从代码隐藏,但这将是一个丑陋的解决方案。我更愿意在WPF中设置它,如上所示,然后"以某种方式"使用Localize.Text(..)方法翻译@Cancel,以获得给定语言/位置/部门的实际取消文本。

使用静态方法的WPF本地化

我们使用一个名为Sisulizer的软件,它可以解析WPF并提取可本地化的字符串。它可以对所有资源都这样做。我们只需将所有资源导入Sisulizer,然后从那里导出一个csv文件,其中包含我们为翻译人员提供的所需翻译。Sisulizer构建卫星资源dll,然后在我们的软件中使用。

最好使用资源文件.resx扩展名。你必须在resx文件中声明标签和值

我的解决方案是基于这个:

http://www.thomaslevesque.com/2009/07/28/wpf-a-markup-extension-that-can-update-its-target/http://www.thomaslevesque.com/2009/08/23/wpf-markup-extensions-and-templates/

允许我使用

<Button Content="{markUp:Localized Key=@BigButton}">

并且仍然能够在运行时更改语言。