我有两个站点都由一个Sitecore解决方案提供服务,并且遇到以下代码强制语言嵌入两个站点之一的URL中的问题,因为下面的双星号封闭的代码片段来自基站LinkProvider返回true(“lang”cookie键返回null)。
private bool EmbedLanguage()
{
if (this._options.LanguageEmbedding == LanguageEmbedding.Always)
{
return true;
}
if (this._options.LanguageEmbedding == LanguageEmbedding.Never)
{
return false;
}
SiteContext site = Context.Site;
return ((site == null) || **((WebUtil.GetOriginalCookieValue(site.GetCookieKey("lang")) == null)** || this._options.EmbedLanguage(Context.Language)));
}
这只适用于两个网站之一,而不是另一个网站。 Web.config中linkManager中的languageEmbedding值为“asNeeded”。第一个(表现)网站是多语言,另一个(不表现)不是。
目前尚不清楚为什么表现得好的人会设置“lang”曲奇,而另一个则不然。他们都分享了相当多的代码,并且有问题的网站没有偏离原始版本,除了布局,新的子布局等以外的任何东西。胆量几乎相同。
任何想法都会受到欢迎。也许这是我很遗憾的事情?
答案 0 :(得分:0)
首先让我澄清一下我是否正确理解了你的问题。
您有2个站点在相同的代码上运行。 (多站点)
一个是多语言,它表现很好(设置Lang cookie)
另一个是单一语言,它表现奇怪,并没有设置Lang cookie。
你如何实现多站点?
看起来您正在使用上述函数在某些类中将URL嵌入到URL中。 所以建议我们实施的解决方法。
有时IE8删除cookie,这就是我们将我们的多站点解决方案从languageEmbedding = asNeeded转移到Never的原因。
我们已经覆盖了LinkManager类,当我们为站点生成URL时,如果站点是多语言,我们检查站点主页上的设置,然后我们设置languageEmbedding = always。否则它永远不会。
这样我们就不会遇到语言cookie的问题。
是的,当它是单一语言网站并且languageEmbedding设置为never时,它不会设置cookie。
答案 1 :(得分:0)
我们最终解决此问题的方法是在web.config中向问题网站添加自定义“embedLanguageInUrl”属性,并将其设置为“never”。然后,我们使用SiteContextExtensions类来公开该值(Sitecore.Context.Site.EmbedLanguageInUrl()),然后根据需要适当调整urlOptions.LanguageEmbedding值。似乎工作得很好。 :)