使用静态方法的WPF本地化

时间:2014-06-03 12:49:39

标签: c# wpf localization

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

我有一个现有的模型来获取id-String并返回给定语言的文本。类似的东西:

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

Localize.Text(..)方法是静态的。

这很好用。

问题在于标签/标题,在WPF中设置了thoses。 我们的想法是让包含关键字的所有标签(所有视觉)都保留英文文本。例如,WPF取消按钮就像:

<Button Content="@Cancel"/>

然后我必须接受“@Cancel”并查找如何在给定的语言/位置/部门中写入取消。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我的解决方案基于:

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}">

仍然可以在运行时更改语言。