【问题标题】:Language strings in .resx-files or Redis?.resx 文件或 Redis 中的语言字符串?
【发布时间】:2012-02-15 16:26:42
【问题描述】:

我正在尝试为一个新网站建模(目前仅在纸面上),我开始思考什么可能是最好的方法。该网站需要是多语言的(至少两种语言)。由于我最近开始测试 Redis,我想也许我可以在 Redis 中而不是在 .resx 文件中存储一个语言库。

我知道这是可行的,但值得吗?是否有可能提高性能,或者 .resx 文件中的字符串是否已经缓存并且性能“足够”?我缺乏如何处理 .resx 文件的经验,所以您的所有意见都是有帮助的!

【问题讨论】:

  • 我想知道同样的问题。你找到答案了吗?你选择了什么解决方案?
  • 我为我的项目采取了最简单的路线。我将所有语言和语言字符串存储在常规 sql 数据库中。当我从我的语言服务请求某个字符串时,该服务会向 redis(我的应用程序缓存)询问语言字符串,如果找不到,该服务会从 sql 获取字符串并将其推送到缓存(就像几乎任何其他 sql - 请求的数据库对象)。
  • 发布时如何更新翻译?您是否运行一些查询来添加新字符串?或者您是否使用单独的数据库进行翻译并将其用于开发和生产?还是您找到了更好的解决方案?
  • 翻译存在于普通数据库中,因此在必要时将通过 sql 添加/删除它们。我认为这对我的项目来说是最简单的。

标签: c# asp.net c#-4.0 redis webforms


【解决方案1】:

我最近在一个多语言网站上工作。 我使用了一个 Json 字符串。 我在数据库中存储每种语言一个字符串。

{ "HeaderWordWideShipping" : "Word Wide Shipping / 30 天全额退货", "HeaderCurrency" : "货币" , "ComboSelectAll" : "全选..." }

在 Page_Init 上,我从数据库中选择正确的字符串并将值分配给公共属性。这里有一些示例代码(我使用 Newtonsoft.Json.dll 来读取 Json):

public string PagetxtHeaderWordWideShipping { get; set; }
public string PagetxtHeaderCurrency { get; set; }
public string ComboSelectAll { get; set; }
string pageTextsMaster = my json string reteived from db

pageTextsMaster = pageTextsMaster ?? @"{"""":""""}"; //if pageTextsMaster isNull then I set an empty Json string.

    JObject o = JObject.Parse(pageTextsMaster);

    PagetxtHeaderWordWideShipping = (string)o.SelectToken("HeaderWordWideShipping", false); //Setting false will not throw an exception if the required value is not found
    PagetxtHeaderCurrency = (string)o.SelectToken("HeaderCurrency"); //false is default so I do not have to repeat it.
    ComboSelectAll = (string)o.SelectToken("ComboSelectAll");

然后您可以在您的页面中使用公共属性。 为了更加安全,我添加了一个合并运算符来用默认语言文本替换 null:

<h3><%: PagetxtHeaderWordWideShipping ?? "Word Wide Shipping / 30 days Full Return"%></h3>

【讨论】:

  • 你真的在 Redis 中使用过 json 吗?我更多的是考虑像 bookleeve 这样的库(也许还有用于序列化的 protobuf)。
猜你喜欢
  • 2012-06-06
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多