多语言WinRT应用程序

时间:2013-01-15 12:52:43

标签: windows-runtime multilingual

是否有任何内置工具支持WinRT中的多语言应用程序?例如,我有几个按钮,文本内容为“添加”,“删除”,“编辑”英文,它应该是“Dodaj”,“Usun”,“Edytuj”等等。我可以自动将此文本设置为用户语言吗? (以及如何自动检测用户语言?)。我可以使用语言模型并将按钮内容绑定到ViewModel属性,但是不存在更好的方法吗?

1 个答案:

答案 0 :(得分: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);
        }

    }
}