我想讓我的WPF
窗口multilanguage
。我已閱讀this post。我不希望使用resx
文件,而是希望翻譯由我的類的實例執行,因爲我在應用程序的其他位置也使用它進行翻譯。執行WPF多國語言界面
我認爲實施Binding
與converter
接收鍵值必須翻譯。我不知道這是最好的方法,還是有更好的解決方案。
任何幫助真的很感激!謝謝。
我想讓我的WPF
窗口multilanguage
。我已閱讀this post。我不希望使用resx
文件,而是希望翻譯由我的類的實例執行,因爲我在應用程序的其他位置也使用它進行翻譯。執行WPF多國語言界面
我認爲實施Binding
與converter
接收鍵值必須翻譯。我不知道這是最好的方法,還是有更好的解決方案。
任何幫助真的很感激!謝謝。
這是我找到了解決辦法:
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;
}
}
現在我剛剛找到如何更新時,在界面語言更改運行時間。
這是一個很好的方法。 您可以編寫一個MarkupExtension來處理翻譯。 使用它像這樣:
<TextBlock Text="{MyNameSpace:Translate 'good night'}"/>
的的MarkupExtension負責去你的類/服務來翻譯 該字符串並將其返回。
這樣你不需要有不必要的綁定和轉換器。
謝謝!我遵循這個指南http://10rem.net/blog/2011/03/09/creating-a-custom-markup-extension-in-wpf-and-soon-silverlight,我已經實現了我的CustomMarkupExtension。我怎樣才能從標記擴展中「去我的課程/服務」?它必須是一個靜態類嗎?謝謝! –
也許我找到了解決方案:http://stackoverflow.com/questions/3047448/accessing-current-class-from-wpf-custom-markupextension –
是的,無論是或通過使用某種服務定位器,以獲得一個實現一個接口,你的班級會做什麼。 – Mishka
https://wpftutorial.net/LocalizeMarkupExtension.html這是爲了讓語言更改運行時的最後一部分 –