2

我有一个 3 种语言(en、es 和 fr)的 Sitecore 网站,用户可以通过网站上的切换开关更改语言。

web.config站点部分中defaultLanguage是“en”,但即使在此之后,当我转到 www.abc.com/es.aspx 之类的西班牙语版本时,如果我转到 www.abc.com(英语版),该网站仍然保留在西班牙语。

知道如何将默认语言设置为英语吗?

4

3 回答 3

6

假设您的sites配置包含

<site ... language="en" ... />

您可以定义自己的模块,为每个新会话将语言重置为默认语言。

首先你需要创建模块类:

using Sitecore.Globalization;
using System;
using System.Web;
using System.Web.SessionState;

namespace My.Assembly.Namespace
{
  public class ResetLanguageModule : IHttpModule, IRequiresSessionState
  {
    public void Init(HttpApplication app)
    {
      if (app.Modules["Session"] != null)
      {
        SessionStateModule session = (SessionStateModule) app.Modules["Session"];
        session.Start += Session_Start;
      }

      app.BeginRequest += Application_BeginRequest;
    }

    private static void Application_BeginRequest(object sender, EventArgs e)
    {
      // if there is no referrer or user comes from external site
      if (HttpContext.Current.Request.UrlReferrer == null
        || HttpContext.Current.Request.UrlReferrer.Host != HttpContext.Current.Request.Url.Host)
      {
        // if user is on the root
        if (HttpContext.Current.Request.RawUrl == "/")
        {
          ResetLanguage();
        }
      }
    }

    private static void Session_Start(object sender, EventArgs e)
    {
      ResetLanguage();
    }

    private static void ResetLanguage()
    {
      if (Sitecore.Context.Language.Name != Sitecore.Context.Site.Language)
      {
        Language currentSiteLanugage;
        if (Language.TryParse(Sitecore.Context.Site.Language, out currentSiteLanugage))
        {
          Sitecore.Context.SetLanguage(currentSiteLanugage, true);
        }
      }
    }

    public void Dispose()
    {
    }
  }
}

然后在以下位置注册模块web.config

<system.webServer>
  <modules>
    ... all existing modules
    <add name="ResetLanguageModule" type="My.Assembly.Namespace.ResetLanguageModule, My.Assembly" />
  </modules>
</system.webServer>

当您打开浏览器并关闭选项卡并重新打开时,这可能不起作用,因为浏览器可能仍使会话保持活动状态。

于 2013-12-22T09:04:24.753 回答
1

在您的<site>配置中,设置language您的默认属性。例如

<sites>
  <site name="mysite" language="es-ES" ... />
</sites>

然后进行切换,您可以使用显示的路径,例如/en/foo,或者/es/foo您甚至可以使用查询字符串来切换语言,如下所示:?sc_lang=en?sc_lang=es-ES

有关详细信息,请参阅此页面

于 2013-12-21T22:35:20.340 回答
0

默认情况下,语言解析器会自动从 url 中定义的语言切换到 cookie 中存储的语言。(在链接管理器的配置中称为 asNeeded)

设置 languageEmbedding="always" 应该可以解决您的问题。

另外:查看 John 的博客:http ://www.sitecore.net/nederland/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/Overriding-Sitecores-Logic-to-Determine-上下文语言.aspx

于 2013-12-22T10:51:47.483 回答