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

时间:2016-10-08 17:36:28

标签: c# uwp

我正在尝试本地化一个字符串,其中显示“Hello {0}”,其中{0}是用户的名称。我知道如何部分地这样做;使用x:Uid“Welcome”在XAML中创建一个TextBlock,然后创建一个包含名称为Welcome.Text且值为“Hello {0}”的资源的.resw文件。但是我怎样才能将用户名变为{0}?同样地,假设我想要一个像“在2016年3月2日创建”或“你赚到100.24美元”的字符串,我想控制指定值的格式?我的应用程序正在使用MVVM,理想情况下我会从模型中提取参数化值,但无论如何,我应该如何使用string.Format之类的东西来构造这些字符串?

1 个答案:

答案 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);