2016-10-08 23 views
0

我试图本地化一个字符串,其中显示“您好{0}”其中{0}是用户的名称。我知道如何部分地做到这一点;在XAML中用x:Uid“Welcome”创建一个TextBlock,然后创建一个.resw文件,其中包含名为Welcome.Text和值“Hello {0}”的资源。但是,我怎样才能将用户名放入{0}?同样,假设我想要一个字符串,例如“Created on 3/2/2016”或“You've $ 100.24”,我想控制指定值的格式?我的应用程序使用MVVM,理想情况下我会将参数化值从模型中拉出来,但不管怎样,我该如何使用类似string.Format的东西来构造这些字符串?如何在UWP中创建参数化的本地化字符串

回答

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); 
+0

所以在这种情况下,我不使用x: Uid机制将本地化的字符串放入控件中? – JustinM

+0

是的,在这种情况下,您不要使用x:Uid –

+0

这种丑陋,对于带参数和不带参数的字符串需要不同的方法。如果你可以使用字符串格式化程序和/或转换器进行数据绑定,那将会更好。所以在参数的情况下,我会使用数据绑定并将视图模型属性包含在绑定表达式中。但如果没有参数,我以某种方式绑定到RESW文件。 – JustinM