C# 为什么在控制器中重置我的Sitecore.Context.Language?
Sitecore似乎对其上下文对象中的语言变量做了一些奇怪的事情。如果我使用urlC# 为什么在控制器中重置我的Sitecore.Context.Language?,c#,asp.net-mvc,sitecore,sitecore8,C#,Asp.net Mvc,Sitecore,Sitecore8,Sitecore似乎对其上下文对象中的语言变量做了一些奇怪的事情。如果我使用url?sc_Lang=ru ru(获取我网站的俄语版本)加载CMS页面,当它到达我的MVC控制器时,它将重置为语言返回到en public PartialViewResult Navigation() { //en var language = Sitecore.Context.Language; } 我知道sitecore确实在某个时候设置了这一点,因为如果我添加一个HTTP管道,我可以看到site
?sc_Lang=ru ru
(获取我网站的俄语版本)加载CMS页面,当它到达我的MVC控制器时,它将重置为语言返回到en
public PartialViewResult Navigation()
{
//en
var language = Sitecore.Context.Language;
}
我知道sitecore确实在某个时候设置了这一点,因为如果我添加一个HTTP管道,我可以看到sitecore.Context.Language
asru
:
public class LanguageResolver
{
public void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
//ru-RU
var language = Sitecore.Context.Language;
}
}
注册:
按照
我深入研究了sitecore DLL,发现Sitcore.Context.Language
基本上是HttpContext.Current.Items[“sc_Language”]
的包装器。当我检查这一点时,我看到了相同的结果(即在管道中它是ru
在控制器中它是en
)
因此,某个地方正在将此HttpContext
项
转换为“en”
作为一个实验,我在Items
集合中加入了一个新变量。然后我可以在控制器中再次看到这一点(处于正确的状态),因此Items集合被正确地传递到控制器中
我最初并没有开发这个网站,但我在代码库中看不到任何改变这个语言变量的地方
还有其他人经历过吗?我错过了什么?需要配置什么,请检查
sitecore文档(和往常一样)在这个问题上非常糟糕
要跟进@jammykam的评论: 我可以看到lang cookie的响应
Set cookie:redrow#lang=ru-ru;path=/
和语言设置:
在OOB中使用语言设置器的地方有:
即使调用方来自可疑列表顶部的Sitecore.MVC
名称空间,我还是建议调试Sitecore.Context.Languagesetter,以找到真正的罪魁祸首。您还将看到语言切换逻辑背后的机制/动机
尽管可以优化
getter
,但您仍然可以。为了确保没有发生令人讨厌的事情,您可以尝试清除cookie(或者检查cookie并确保网站#lang=ru
)。您是否已将ru
添加到Sitecore?您的本地系统支持吗?@jammykam,在上面添加了详细信息。我很好奇以前是否有人在MVC环境中看过这个?我猜它对某个人,某个地方起作用了?你能把你的语言解析器移到项目解析器之前吗?Sitecore中的默认顺序是:其他进程。。。在语言解析器目前实际上没有做任何事情之后,我只是把它作为一个截取点来使用,看看该语言是如何设置的@SiteCoreClimper现在说在管道中移动它可能会很有趣……嗯,我必须检查它是否有效,如果有效,我会像回答一样移动我的评论。我已经6年没有在sitecore上工作了,所以我不能真正投票或接受这个答案,因为我不知道它是否有用。所以我得看看别人怎么想