实现 WPF 多语言界面

Implement WPF multilanguage interface

我想制作我的 WPF window multilanguage。 我已经阅读 this post。我希望翻译由我的 class 实例执行,而不是使用 resx 文件,这是负责翻译的,因为我也在应用程序的其他点使用它。

我想用 converter 来实现 Binding,它接收必须翻译的键值。我不知道这是否是最好的方法,或者是否有更好的解决方案。

非常感谢任何帮助!谢谢。

这是个好方法。 您可以编写一个 MarkupExtension 来处理翻译。 像这样使用它:

<TextBlock Text="{MyNameSpace:Translate 'good night'}"/>

MarkupExtension会负责去你的class/service翻译 该字符串和 return 它。

这样你就不需要有不必要的绑定和转换器。

这是我找到的解决方案:

public class TranslateMarkupExtension : MarkupExtension
{
    [ConstructorArgument("value1")]
    public string Value1 { get; set; }

    public TranslateMarkupExtension() { }

    public TranslateMarkupExtension(string value1)
    {
        Value1 = value1;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
        var root = rootObjectProvider.RootObject;

        var translation = GetLangTranslator(root);

        return string.IsNullOrEmpty(translation) ? Value1 :translation;
    }

    private string GetLangTranslator(object root)
    {
        var properties = root.GetType().GetProperties();

        foreach (var property in properties)
        {
            if (typeof(MultiLanguage) == property.PropertyType)
            {                   
                var m = property.PropertyType.GetMethod("Translate");

                var propValue = property.GetValue(root);
                return m.Invoke(propValue, new object[] {Value1}) as string;
            }
        }

        return null;
    }
}

现在我只需要找到如何在语言更改运行时时更新 UI。