我有一个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以获取给定语言/位置/部门的实际取消文本。
答案 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}">
仍然可以在运行时更改语言。