我正在尝试本地化一个字符串,其中显示“Hello {0}”,其中{0}是用户的名称。我知道如何部分地这样做;使用x:Uid“Welcome”在XAML中创建一个TextBlock,然后创建一个包含名称为Welcome.Text且值为“Hello {0}”的资源的.resw文件。但是我怎样才能将用户名变为{0}?同样地,假设我想要一个像“在2016年3月2日创建”或“你赚到100.24美元”的字符串,我想控制指定值的格式?我的应用程序正在使用MVVM,理想情况下我会从模型中提取参数化值,但无论如何,我应该如何使用string.Format之类的东西来构造这些字符串?
答案 0 :(得分:1)
您可以通过代码检索字符串:
public static class ResourceRetriever
{
private static ResourceMap _resourceMap = null;
public static ResourceMap ResourceMap
{
get
{
if (_resourceMap == null)
{
_resourceMap= Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap;
}
return _resourceMap;
}
}
public static string GetString(string key)
{
return ResourceMap?.GetValue("Resources/" + key, new ResourceContext())?.ValueAsString;
}
public static string GetString(string key, ResourceContext context)
{
return ResourceMap?.GetValue("Resources/"+key, context)?.ValueAsString;
}
}
添加到资源文件参数中,并使用string.Format:
var myText = ResourceRetriever.GetString("MyText"); //Hello {0}
myText = String.Format(myText, username);