替换资源文件中的 "token" c#

Replacing "token" inside resource files c#

我有一系列用于本地化的资源文件purposes.InDrupal,有一种叫做令牌的东西,它是一些有图案的文本,在调用时由服务器替换它。

示例:

英文资源文件:

I have this localization text in my resource file in English, and I would like to display to $[user] how this works.

西班牙语资源文件:

Yo tengo este texto localizado en el archivo de recursos en español y quisiera enseñarle al $[user] cómo esto funciona.

然后,经过一些解析后,我会用正确的详细信息替换令牌。

我目前的做法如下:

public class LocalizationParser
{
    private Dictionary<string, dynamic> Tokens { get; set; }

    public LocalizationParser()
    {
        Tokens = new Dictionary<string, dynamic>();
        Tokens.Add("$[user]", HttpContext.Current.User.Identity.Name);
    }


    public string ParseResource(string text)
    {
        foreach(var token in Tokens)
        {
            text.Replace(token.Key, token.Value);
        }
        
        return text;
    }
}

我知道我有一个很大的问题,就是要填充所有这些值,这会对性能产生不必要的影响。我知道如果我可以调用一个只有在找到字典键的情况下才能检索正确值的方法,那么它不会有很大的开销。

在 C# 中执行此操作的正确方法是什么? (目前正在使用 ASP.NET MVC 5 和 EF 6.1)

"Premature optimization is the root of all evil" 正如 Knuth 所说。为什么您如此肯定会对性能产生影响?

这是一个假设还是一个事实,您可以使用您通过 dotTrace 等分析器确定瓶颈的数字进行备份?了解您希望拥有多少个代币也很有用。

无论如何,替换就可以了。您可以使用 Hashtable 并结合使用 Exists 方法和正则表达式来首先获取标记,然后进行查找。

请记住,字符串是不可变的,因此每次替换都意味着需要一个副本,如果随时进行,可能会很慢。

要多次修改字符串,请改用 StringBuilder。

这个过程有完整的记录: https://msdn.microsoft.com/en-us/library/2839d5h5(v=vs.110).aspx