2013-01-15 107 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); 
     } 

    } 
}