我有一个包含3种语言(en,es和fr)的Sitecore网站,用户可以通过网站上的切换开关更改语言。
在web.config
网站部分,defaultLanguage
是“en”,但即使在此之后我去了像www.abc.com/es.aspx这样的西班牙语版本,之后我会去www .abc.com(英文版)该网站仍然保留西班牙语。
知道如何将默认语言设置为英语吗?
答案 0 :(得分: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>
当您打开浏览器并关闭选项卡并重新打开时,这可能不起作用,因为浏览器可能仍会使会话保持活动状态。
答案 1 :(得分:1)
在<site>
配置中,设置默认的language
属性。 E.g。
<sites>
<site name="mysite" language="es-ES" ... />
</sites>
然后切换你可以使用你所展示的路径,例如/en/foo
或/es/foo
,或者你甚至可以使用查询字符串来切换语言,如:?sc_lang=en
或{{ 1}}
有关详细信息,请参阅this page。
答案 2 :(得分:0)
默认情况下,语言解析器会自动从网址中定义的语言切换到存储在Cookie中的语言。 (在linkmanager的配置中调用asNeeded)
设置languageEmbedding =“always”可以解决您的问题。