如何在WPF中的多语言应用程序中显示设计时文本?

时间:2016-11-10 13:32:47

标签: c# wpf xaml localization

我有一个WPF应用程序,我使用资源文件使其成为多语言。

像这样:

private void Application_Startup(object sender, StartupEventArgs e)
{
    try
    {
        var lang = new Uri("pack://siteoforigin:,,,/Languages/" + Settings.Default.Language + ".xaml", UriKind.RelativeOrAbsolute);
        this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = lang });
    }
    catch
    {
        this.Resources.MergedDictionaries.Clear();
        this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("..\\Languages\\English.xaml", UriKind.RelativeOrAbsolute) });
    }
}

因此,对于任何显示文本的标签,我将它们设置为:

<TextBlock Text="{DynamicResource DYouKnow}"/>

这在运行时效果很好但在设计时我没有在标签上看到我的默认文本,这使得设计/维护UI变得很困难。

还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

使用MarkupExtension,您可以创建一个可以在XAML中使用的扩展,它也将提供设计时文本。

您可以按如下方式使用它:

<TextBlock loc:TranslateExtension.Key="txtTextKey" Text="{loc:TranslateExtension Default='Default text'}" />

请参阅以下教程: http://www.wpftutorial.net/localizemarkupextension.html

答案 1 :(得分:0)

InitializeComponent()调用后,在您的View构造函数中尝试以下内容:

if (DesignerProperties.GetIsInDesignMode(this))
     this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("..\\Languages\\English.xaml", UriKind.RelativeOrAbsolute) })

..将XAML URI调整为当前View文件的特定文件夹位置。