如何在Sitecore多语言解决方案中设置默认语言?

如何在Sitecore多语言解决方案中设置默认语言?,sitecore,multilingual,sitecore7,Sitecore,Multilingual,Sitecore7,我有一个3种语言(英语,英语和法语)的Sitecore网站,用户可以通过网站上的切换开关更改语言 在web.configsites部分中,defaultLanguage是“en”,但即使在这之后,当我访问西班牙语版本(如www.abc.com/es.aspx)时,如果我访问www.abc.com(英语版本),网站仍然保持西班牙语 知道如何将默认语言设置为英语吗?在配置中,设置默认语言的语言属性。例如 <sites> <site name="mysite" language=

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

web.config
sites部分中,
defaultLanguage
是“en”,但即使在这之后,当我访问西班牙语版本(如www.abc.com/es.aspx)时,如果我访问www.abc.com(英语版本),网站仍然保持西班牙语

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

配置中,设置默认语言的
语言属性。例如

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

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


有关更多详细信息,请参阅。

假设您的
站点
配置包含


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

首先,您需要创建模块类:

使用Sitecore.Globalization;
使用制度;
使用System.Web;
使用System.Web.SessionState;
命名空间My.Assembly.namespace
{
公共类ResetLanguageModule:IHttpModule,iRequiresessionState
{
公共void Init(HttpApplication应用程序)
{
if(应用程序模块[“会话”]!=null)
{
SessionStateModule会话=(SessionStateModule)app.Modules[“会话”];
session.Start+=session\u Start;
}
app.BeginRequest+=应用程序_BeginRequest;
}
私有静态void应用程序_BeginRequest(对象发送方,事件参数e)
{
//若并没有推荐人或用户来自外部网站
if(HttpContext.Current.Request.urlReferer==null
||HttpContext.Current.Request.UrlReferer.Host!=HttpContext.Current.Request.Url.Host)
{
//如果用户在根目录上
if(HttpContext.Current.Request.RawUrl==“/”)
{
重置语言();
}
}
}
私有静态无效会话\u启动(对象发送方,事件参数e)
{
重置语言();
}
私有静态语言()
{
if(Sitecore.Context.Language.Name!=Sitecore.Context.Site.Language)
{
语言文字;
if(Language.TryParse(Sitecore.Context.Site.Language,out-currentSiteLanugage))
{
Sitecore.Context.SetLanguage(currentSiteLanugage,true);
}
}
}
公共空间处置()
{
}
}
}
然后在
web.config
中注册模块:


... 所有现有模块

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

默认情况下,LanguageSolver会自动从url中定义的语言切换到cookie中存储的语言。(根据需要在linkmanager的配置中调用)

设置languageEmbedding=“always”应该可以解决您的问题


另外:查看约翰的博客:

我也在做同样的事情。但是,假设我关闭了我的网站,我在网站的西班牙语版本上。如果我下次打开网站时不清除cookies和缓存,它将使用西班牙语版本,而不是默认语言英语。这是出于设计。你自己说的。用户切换到西班牙语,因此cookie设置为“现在使用西班牙语”。默认值并不意味着总是,默认值意味着你第一次来,它设置为英语。一旦用户设置了西班牙语,他们就会被烹调,这就是它保持的方式。感谢Maras,是否有一种方法可以在新的选项卡中进行检查。例如,当url为www.abc.com而没有任何语言时,它将显示该网站的英文版本。我更新了我的答案。现在,当用户来自外部站点或只是在新选项卡中键入url时,语言将被重置。如果您想在用户每次访问站点根目录时重置语言(包括单击导航到
www.abc.com
,只需删除选中
urlreferer
。无需使用
会话。使用更新的解决方案启动