是否有任何内置工具可以支持 WinRT 中的多语言应用程序?例如,我有几个按钮,其文本内容为“添加”、“删除”、“编辑”,在英语中应该是“Dodaj”、“Usun”、“Edytuj”等等。我可以自动将此文本设置为用户语言吗?(以及如何自动检测用户语言?)。我可以使用语言模型并将按钮内容绑定到 ViewModel 属性,但没有更好的方法吗?
问问题
540 次
1 回答
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);
}
}
}
于 2013-01-15T15:42:24.283 回答