.resx-files或Redis中的语言字符串?

时间:2012-02-15 16:26:42

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

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

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

1 个答案:

答案 0 :(得分:0)

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

{ “HeaderWordWideShipping”:“Word Wide Shipping / 30天Full Return”, “HeaderCurrency”:“货币”, “ComboSelectAll”:“全选...” }

On 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");

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

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