2017-07-13 59 views
0

所以試圖使用wpf本地化擴展。WPFLocalizationExtension沒有翻譯第一個控件(代碼後面)

我們的按鈕/控件的ID都存儲在後面的代碼中,因此我最終創建了一個翻譯服務來翻譯代碼背後的代碼。所以它只是綁定完成的翻譯。

我們還將我們的翻譯作爲外部組存儲在單獨的項目中處理翻譯。因此,我的翻譯方法設置如下。

private string Translate(string id) 
{ 
    string uiString; 

    var locExtension = new LocTextExtension 
    { 
     Key = "XXX.UI.Resources", 
     ResourceIdentifierKey = id 
    }; 

    locExtension.ResolveLocalizedValue(out uiString); 
    return uiString ?? id; 
} 

當我的頁面被加載,但似乎它沒有翻譯頁面上的第一個按鈕。第一個按鈕返回爲Buttun_BtnTxt而不是翻譯後的值。我試過換掉哪個按鈕是列表中的第一個,而且它總是第一個失敗的按鈕。

如果我放入一些重試功能,它仍會失敗。 (把上面的代碼放在while循環中,檢查uistring == null,並重試50000次)

如果我從第一頁導航離開,所有其他頁面加載正常,如果我導航回到它,翻譯也很好。只是不能爲我的生活弄清楚爲什麼它不是第一次翻譯。

有沒有人不得不在過去做這樣的事情,並有同樣的問題?


有進一步的瞭解。添加代碼來檢查加載的程序集。在第一次運行中(它失敗的地方),這是唯一存在的資源實例。

XXX.UI.Resources, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 

第一次嘗試失敗後,我再次檢查了程序集,現在還出現了以下條目。

XXX.UI.Resources.resources, Version=0.0.0.0, Culture=de-DE, PublicKeyToken=null 
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=ja-JP, PublicKeyToken=null 
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=zh-Hans, PublicKeyToken=null 

不知道爲什麼這些延遲加載,或者這可能是什麼原因造成的問題。但這是我現在唯一能想到的。

回答

0

最終想通了。我仍然需要在我的xaml中擁有以下內容。

xmlns:lex="http://wpflocalizeextension.codeplex.com" 
lex:LocalizeDictionary.DesignCulture="en" 
lex:ResxLocalizationProvider.DefaultAssembly="XXX.UI.Resources" 
lex:ResxLocalizationProvider.DefaultDictionary="Resources" 

至少有一次,如果沒有它,本地化的東西根本不起作用,即使你在後面的代碼中進行本地化。

它沒有翻譯第一個控件的原因是因爲它首先經過VM,然後點擊調用該代碼的xaml。之後的代碼隱藏翻譯工作正常。

將xaml移到我的shellview中,一切都很好。