2013-01-15 104 views
0

WinRT中是否有任何支持多語言應用程序的內置工具?例如,我有幾個按鈕,文本內容爲「添加」,「刪除」,「編輯」英文,它應該是「Dodaj」,「Usun」,「Edytuj」等波蘭語。我可以自動將此文本設置爲用戶語言嗎? (以及如何自動檢測用戶語言?)。我可以使用語言模型並將按鈕內容綁定到ViewModel屬性,但不是存在更好的方法來做到這一點嗎?多語言WinRT應用程序

回答

2

這是很好的支持,並且MS這裏有一個很好的例子:http://code.msdn.microsoft.com/windowsapps/Application-resources-and-cd0c6eaa

使用x設置的「靜態」內容的文本:UID如果這些元素的數據綁定不起作用。例如你有一個觀察的集合在你的視圖模型包含的用戶名視圖模型,你嘗試做以下(僞代碼!): -

<List ItemSource={Binding Users}> 
    <List.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock x:uid="ByUser"/> 
       <TextBlock Text={Binding Username}/> 
      </StackPanel> 
     </DataTemplate> 
    </List.ItemTemplate>  
</List> 

應設置第一個文本框的文本(基於UID ByUser)將不會被設置。我通過在全球化服務中包裝ResourceLoader並將其傳遞給我的「UsersName」視圖模型來解決這個問題,然後我將公開一個名爲ByUserText的屬性,並對其進行綁定。不理想,希望這會得到解決。

,你將需要使用一個全球化的服務爲唯一的其他東西是一樣的東西消息框等

這是全球化的服務,我繞過: -

using Windows.ApplicationModel.Resources; 


public class GlobalisationService : IGlobalisationService 
{ 
    private readonly ResourceLoader resourceLoader; 
    public GlobalisationService() 
    { 
     resourceLoader = new ResourceLoader(); 
    } 
    public string GetString(string key) 
    { 
     try 
     { 
      return resourceLoader.GetString(key); 
     } 
     catch 
     { 
      return "NOT FOUND: " + key; 
     } 
    } 



    public string this[string key] 
    { 
     get 
     { 
      return GetString(key); 
     } 

    } 
}