我想制作WPF
窗口multilanguage
。
我已经阅读了this post。我希望翻译是由我的类的实例执行的,而不是使用resx
文件,因为我在应用程序的其他方面也使用它。
我想用Binding
实现converter
,它接收必须翻译的键值。我不知道这是最好的方法还是有更好的解决方案。
任何帮助都非常感谢!感谢。
答案 0 :(得分:0)
这是一个很好的方法。 您可以编写MarkupExtension来处理翻译。 像这样使用它:
<TextBlock Text="{MyNameSpace:Translate 'good night'}"/>
MarkupExtension将负责转到您的班级/服务进行翻译 该字符串并将其返回。
这样你就不需要有不必要的绑定和转换器。
答案 1 :(得分:0)
这是我找到的解决方案:
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的方法。