C# 如何在UWP中创建参数化本地化字符串

C# 如何在UWP中创建参数化本地化字符串,c#,uwp,C#,Uwp,我正在尝试本地化一个表示“Hello{0}”的字符串,其中{0}是用户的名称。我知道如何部分做到这一点;使用x:Uid“Welcome”在XAML中创建一个TextBlock,然后创建一个.resw文件,其中包含一个名为Welcome.Text、值为“Hello{0}”的资源。但是如何将用户名硬塞进{0}中呢?类似地,假设我想要一个字符串,如“Created on 3/2/2016”或“You Earn$100.24”,我想要控制指定值的格式?我的应用程序使用的是MVVM,理想情况下,我会从模型

我正在尝试本地化一个表示“Hello{0}”的字符串,其中{0}是用户的名称。我知道如何部分做到这一点;使用x:Uid“Welcome”在XAML中创建一个TextBlock,然后创建一个.resw文件,其中包含一个名为Welcome.Text、值为“Hello{0}”的资源。但是如何将用户名硬塞进{0}中呢?类似地,假设我想要一个字符串,如“Created on 3/2/2016”或“You Earn$100.24”,我想要控制指定值的格式?我的应用程序使用的是MVVM,理想情况下,我会从模型中提取参数化值,但无论如何,我应该如何使用string.Format之类的东西构造这些字符串?

您可以通过以下代码检索字符串:

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;
        }
    }
将参数添加到资源文件中,并使用字符串。格式:

var myText = ResourceRetriever.GetString("MyText"); //Hello {0}
myText = String.Format(myText, username);

因此,在这种情况下,我不使用x:Uid机制将本地化字符串放入控件中?是的,在这种情况下,您不使用x:Uidkind,即对于带参数和不带参数的字符串需要不同的方法。如果您可以将数据绑定与字符串格式化程序和/或转换器一起使用,那就更好了。因此,对于参数,我将使用数据绑定,并在绑定表达式中包含视图模型属性。但是如果没有参数,我会以某种方式绑定到RESW文件。