C# 使用静态方法的WPF定位

C# 使用静态方法的WPF定位,c#,wpf,localization,C#,Wpf,Localization,我有一个C#.Net 4.5 WPF应用程序。 应用程序必须是可本地化的。这意味着我必须能够更改应用程序中所有可视内容的标签/标题/按钮/文本 我有一个现有的模型来获取id字符串并返回给定语言的文本。比如: String localizedCancelText = Localize.Text("@Cancel"); //Cancel String localizedMoneyLeftText = Localize.Text("@MoneyLeft",10); //$10 left 其中Loca

我有一个C#.Net 4.5 WPF应用程序。 应用程序必须是可本地化的。这意味着我必须能够更改应用程序中所有可视内容的标签/标题/按钮/文本

我有一个现有的模型来获取id字符串并返回给定语言的文本。比如:

String localizedCancelText = Localize.Text("@Cancel"); //Cancel
String localizedMoneyLeftText = Localize.Text("@MoneyLeft",10); //$10 left
其中Localize.Text(..)方法是静态的

这一切都很好

问题在于标签/标题,这些都是在WPF中设置的。 这样做的目的是让所有标签(都是可视的)都包含关键字,而不是英文文本。例如,WPF取消按钮类似于:

<Button Content="@Cancel"/>

然后我必须取“@Cancel”并查找Cancel在给定语言/位置/部门中的书写方式

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

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

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

我的解决方案基于此:

这让我可以使用

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

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