替换资源文件中的“令牌”c#

时间:2016-02-13 14:14:55

标签: c# asp.net drupal localization resource-files

哟!我知道这是一种习惯,主要是在Drupal中。如果这是重复的话我很抱歉(无法用我自己的意思找到它)。

我有一系列用于本地化的资源文件。在Drupal中,有一些名为令牌的东西,它是一些带图案的文本,当它被调用时它被服务器取代。

示例:

英文资源文件:

“我的英文资源文件中有本地化文本,我想向$ [user]显示其工作原理。”

西班牙语资源文件:

“Yo tengo este texto localizado en el archivo de recursosenespañolyquisieraenseñarleal$ [user]cómoestofunciona。”

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

我目前的做法如下:

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#中执行此操作的正确方法是什么? (目前使用带有EF 6.1的ASP.NET MVC 5)

1 个答案:

答案 0 :(得分:2)

正如Knuth所说,“过早的优化是所有邪恶的根源”。您为什么如此确定会对性能产生影响?

这是一个假设或事实,您可以使用dotTrace等分析器确定瓶颈的数字备份吗?此外,了解您期望拥有多少令牌也很有用。

在任何情况下,替换都可以。您可以使用Hashtable并使用Exists方法结合正则表达式来获取令牌,然后执行查找。

请记住,字符串是不可变的,因此每次替换都意味着一个副本,如果在任何时候完成,可能会很慢。

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

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