【问题标题】:Replacing "token" inside resource files c#替换资源文件中的“令牌”c#
【发布时间】:2023-04-11 01:53:01
【问题描述】:

我有一系列用于本地化目的的资源文件。在 Drupal 中,有一种叫做标记的东西,它是一些有图案的文本,当它被调用时它会被服务器替换。

例子:

英文资源文件:

我的资源文件中有这个英文的本地化文本,我想向 $[user] 展示它是如何工作的。

西班牙语资源文件:

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)

【问题讨论】:

  • 在 ParseResource 循环中,你应该有 text = text.Replace(token.Key, token.Value); 才能工作
  • 哈哈。谢谢你是对的!方法呢?
  • 我也不确定,为什么在那里使用动态。你能解释一下为什么不 吗?
  • 至于方法,我不确定我是否理解问题所在 - 你是否担心你有成千上万的这些令牌和成千上万的这些消息,但每条消息只包含一个或两个令牌因此遍历所有令牌是资源浪费?
  • @Wapac:动态的原因是因为它正在运行...... OMG 你是对的。我的坏:/顺便说一句,我在考虑未来。我不知道这是否会变大,所以我想以防万一。

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


【解决方案1】:

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

这是一个假设还是事实,您可以使用 dotTrace 之类的分析器确定瓶颈的数字来支持?此外,了解您期望拥有多少令牌也会很有用。

在任何情况下,替换都可以。您可以使用 Hashtable 并将 Exists 方法与正则表达式结合使用来首先获取标记,然后进行查找。

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

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

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

【讨论】:

  • 太棒了!会尽快更换。
  • 我继续查找哈希表。看来 Dictionary 是升级后的 Hashtable。”不要用这个,它是一个较旧的 .NET Framework 类型。它比泛型 Dictionary 类型慢。但是如果一个旧程序使用 Hashtable,知道如何使用是有帮助的这个类型。” dotnetperls.com/dictionary
  • 是的,但请阅读:stackoverflow.com/questions/301371/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
相关资源
最近更新 更多