1

我有两个站点都由一个 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”cookie 集,而另一个没有。他们都共享相当多的代码,除了布局、新的子布局等之外,有问题的站点与原始站点并没有太大的偏差。胆量几乎相同。

任何想法都会受到欢迎。也许我错过了一些很明显的东西?

4

2 回答 2

0

我们最终解决此问题的方法是在 web.config 中向问题站点添加自定义“embedLanguageInUrl”属性,并将其设置为“从不”。然后,我们使用 SiteContextExtensions 类公开该值 (Sitecore.Context.Site.EmbedLanguageInUrl()),然后根据需要适当调整 urlOptions.LanguageEmbedding 值。似乎工作得很好。:)

于 2012-12-18T19:17:49.150 回答
0


首先让我澄清一下我是否正确理解了你的问题。
您有 2 个站点在相同的代码上运行。(多站点)
一个是多语言,它表现良好(设置 Lang cookie)另一个是单语言,它表现奇怪并且不设置 Lang cookie。
您是如何实施多站点的?

看起来您正在使用上述函数在某个类的 URL 中嵌入语言。所以建议我们已经实施的解决方法。

有时 IE8 会删除 cookie,这就是我们将多站点解决方案从 languageEmbedding= asNeeded 移动到 Never 的原因。

我们已经覆盖了 LinkManager 类,当我们为站点生成 URL 时,我们检查站点主页上的设置,如果站点是多语言的,那么我们总是设置 languageEmbedding=。否则它已经永远不会了。

这样我们就不会遇到语言 cookie 的问题。

是的,当它是单一语言站点并且 languageEmbedding 设置为从不时,它不会设置 cookie。

于 2012-12-18T06:05:44.363 回答