C# 多语言内容缓存
我知道这是一个非常基本的问题,但我仍然对它的实现感到困惑。在我的一次采访中,他们问我有一个多语言(10种语言)的网站。我想把所有的内容都放到缓存里。我可以知道如何实现这个功能吗?我们需要在输出缓存中写入哪些特定内容C# 多语言内容缓存,c#,asp.net,multilingual,resource-files,C#,Asp.net,Multilingual,Resource Files,我知道这是一个非常基本的问题,但我仍然对它的实现感到困惑。在我的一次采访中,他们问我有一个多语言(10种语言)的网站。我想把所有的内容都放到缓存里。我可以知道如何实现这个功能吗?我们需要在输出缓存中写入哪些特定内容 我的所有内容都驻留在资源文件中。否,除非您显然应该为每种语言提供不同的URL,但这是必需的,否则搜索引擎中只会出现默认语言(不记得Cookies等)。否,很明显,每个语言都应该有不同的URL,但这是必须的,否则搜索引擎中只会出现默认的语言(不记得Cookies等)。我假设您是在输出缓
我的所有内容都驻留在资源文件中。否,除非您显然应该为每种语言提供不同的URL,但这是必需的,否则搜索引擎中只会出现默认语言(不记得Cookies等)。否,很明显,每个语言都应该有不同的URL,但这是必须的,否则搜索引擎中只会出现默认的语言(不记得Cookies等)。我假设您是在输出缓存的上下文中问这个问题的,所以一个简单的方法是使用
VaryByCustom
。比如说,
<%@ OutputCache VaryByCustom="Culture" ... %>
<%@ OutputCache ... varybyparam="Culture" %>
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
根据您跟踪当前用户文化的方式,实现将有所不同。例如,您可能正在使用会话变量(或概要文件数据),因此需要基于会话变量等返回当前用户的区域性
从SEO友好性(如果你的网站是面向内容的,这可能很重要),你可能想把文化信息作为你的url的一部分。比如说,
<%@ OutputCache VaryByCustom="Culture" ... %>
<%@ OutputCache ... varybyparam="Culture" %>
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
我假设您是在输出缓存的上下文中询问它的,因此一个简单的方法是使用VaryByCustom
。比如说,
<%@ OutputCache VaryByCustom="Culture" ... %>
<%@ OutputCache ... varybyparam="Culture" %>
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
根据您跟踪当前用户文化的方式,实现将有所不同。例如,您可能正在使用会话变量(或概要文件数据),因此需要基于会话变量等返回当前用户的区域性
从SEO友好性(如果你的网站是面向内容的,这可能很重要),你可能想把文化信息作为你的url的一部分。比如说,
<%@ OutputCache VaryByCustom="Culture" ... %>
<%@ OutputCache ... varybyparam="Culture" %>
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
http://www.yourdomain.com/somepage.aspx?Culture=en
http://www.yourdomain.com/somepage.aspx?Culture=fr
URL将是相同的。没什么不同。有可能实现吗?没有。基本上这是不可能的。缓存将仅通过URL工作,任何在同一URL下使用多语言的人都是“SEO挑战”,不应该设计网站。您需要将文化/语言作为URL的一部分,否则搜索引擎永远只能看到一种语言,因为它们使用URL来区分项目。有人需要“网站如何为初学者工作”来设计一个合适的URL空间。“如果SEO很重要,如何缓存”的答案是+1。此外,它不会回答面试问题-一个人可能会提出问题(即,如果搜索引擎优化很重要,如果内容直接或通过CDN交付…),并且知道另一个答案(+1到@VinayC)对面试很有用…URL将是相同的。没什么不同。有可能实现吗?没有。基本上这是不可能的。缓存将仅通过URL工作,任何在同一URL下使用多语言的人都是“SEO挑战”,不应该设计网站。您需要将文化/语言作为URL的一部分,否则搜索引擎永远只能看到一种语言,因为它们使用URL来区分项目。有人需要“网站如何为初学者工作”来设计一个合适的URL空间。“如果SEO很重要,如何缓存”的答案是+1。此外,它也不会回答面试问题-一个人可能会提出问题(即,如果搜索引擎优化很重要,如果内容直接或通过CDN交付…),并且知道另一个答案(+1到@VinayC)对面试很有用…它在会话变量中。如果我在URL中添加区域性,那么它将根据URL从缓存中获取信息,因此我不必在输出缓存中写入任何内容,但当它存储在会话变量中时会发生什么情况。@alok_dida,仔细阅读答案!url中的文化是一种方法。您可以始终使用VaryByCustom
-而不是Context.Request.UserLanguages[0]
您可能必须从会话返回它-类似于Context.session[“Culture”]
它位于会话变量中。如果我在URL中添加区域性,那么它将根据URL从缓存中获取信息,因此我不必在输出缓存中写入任何内容,但当它存储在会话变量中时会发生什么情况。@alok_dida,仔细阅读答案!url中的文化是一种方法。您可以始终使用VaryByCustom
-而不是Context.Request.UserLanguages[0]
您可能必须从会话返回它-类似于Context.session[“Culture”]