Sitecore似乎在其Context对象中使用语言变量做了一些奇怪的事情。如果我使用网址?sc_Lang=ru-RU
加载CMS页面(获取我的网站的俄语版本),那么当它到达我的MVC控制器时,它将重置为语言返回en
public PartialViewResult Navigation()
{
//en
var language = Sitecore.Context.Language;
}
我知道sitecore确实在某些时候设置了这个,因为如果我添加HTTP管道,我可以看到Sitecore.Context.Language
为ru-RU
:
public class LanguageResolver
{
public void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
//ru-RU
var language = Sitecore.Context.Language;
}
}
注册:
<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"/>
<processor type="namespace.LanguageResolver,RR.Web.Sc.Extensions" patch:source="Languages.config"/>
我做了一些挖掘sitecore dll,我注意到Sitcore.Context.Language
基本上是HttpContext.Current.Items["sc_Language"]
的包装器。当我检查这个时,我看到相同的结果(即在管道中它是ru-RU
在控制器中en
)
所以某个地方正在将此HttpContext
Item
转变为"en"
。
作为一项实验,我将一个新变量放入Items
集合中。然后我可以在Controller中再次看到它(在它的正确状态),因此Items集合正确地传递给控制器。
我最初没有开发这个网站,但我在代码库中看不到任何改变这个语言变量的地方。
还有其他人经历过这个吗?我错过了什么?我需要配置什么,检查?
sitecore文档(像往常一样)在这个问题上非常糟糕。
跟进@jammykam的评论:
我可以看到lang cookie响应Set-Cookie: redrow#lang=ru-RU; path=/
并设置了语言:
答案 0 :(得分:0)
在a few places in code中有 Sitecore 10 处使用了语言设置器 OOB:
即使来自 Sitecore.MVC
命名空间的被调用者位于可疑列表顶部,我还是建议通过 restoring PDBs and loading them to debugger 调试 Sitecore.Context.Language setter找出真正的罪魁祸首。您还将看到语言切换逻辑背后的机制/动机。
即使 getter
可能已优化,您仍然可以 disable optimizations to ease debugging。