Lia*_*iam 7 c# asp.net-mvc sitecore sitecore8
Sitecore似乎在它的Context对象中使用语言变量做了一些奇怪的事情.如果我使用url加载CMS页面?sc_Lang=ru-RU(获取我的网站的俄语版本),当它到达我的MVC控制器时,它将重置为语言返回到en
public PartialViewResult Navigation()
{
//en
var language = Sitecore.Context.Language;
}
Run Code Online (Sandbox Code Playgroud)
我知道,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;
}
}
Run Code Online (Sandbox Code Playgroud)
注册:
<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"/>
<processor type="namespace.LanguageResolver,RR.Web.Sc.Extensions" patch:source="Languages.config"/>
Run Code Online (Sandbox Code Playgroud)
正如sitecore博客文章中所推荐的那样
我做了一些挖掘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=/并设置语言:
在Sitecore 10中,代码中有几个地方使用了 OOB 语言设置器:
即使被调用者来自Sitecore.MVC可疑列表顶部的命名空间,我还是建议通过恢复 PDB并将其加载到调试器来调试Sitecore.Context.Language setter以获取真正的罪魁祸首。您还将看到语言切换逻辑背后的机制/动机。
即使可能getter已优化,您仍然可以禁用优化以简化调试。
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |