【发布时间】:2016-02-04 23:01:59
【问题描述】:
Sitecore 似乎对它的 Context 对象中的语言变量做了一些奇怪的事情。如果我使用 url ?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 blog post 的建议
我对 sitecore dll 进行了一些研究,发现Sitcore.Context.Language 基本上是HttpContext.Current.Items["sc_Language"] 的包装器。当我检查这个时,我看到了相同的结果(即在管道中它是 ru-RU 在控制器中它是 en)
所以某个地方正在将这个HttpContext Item 变成"en"。
作为实验,我将一个新变量放入Items 集合中。然后我可以在 Controller 中再次看到它(处于正确的状态),因此 Items 集合正确地传递到了控制器中。
我最初并未开发此站点,但我在代码库中看不到更改此语言变量的任何地方。
有其他人经历过吗?我错过了什么?我需要配置什么,检查一下?
sitecore 文档(和往常一样)在这个问题上非常糟糕。
跟进@jammykam 的评论:
我可以看到响应 Set-Cookie: redrow#lang=ru-RU; path=/ 的 lang cookie 并且设置了语言:
【问题讨论】:
-
为了确保没有发生奇怪的事情,您可以尝试清除 cookie(或检查它们并确保
website#lang=ru-RU)。您是否已将ru-RU添加到 Sitecore?你的本地系统支持吗? -
@jammykam,在上面添加了详细信息。我很想知道是否有人以前在 MVC 环境中看过这个?我猜它在某个地方对某人有用?
-
您可以将语言解析器移到项目解析器之前吗? Sitecore 中的默认顺序是:
其他处理器 ... 和之后 -
语言解析器目前实际上并没有做任何事情,我只是将它用作拦截器,以查看语言设置为进一步推进管道。 @sitecoreclimber 现在说在管道中移动它可能会很有趣......嗯
-
检查是否有效,如果有效,我会像回答一样移动我的评论
标签: c# asp.net-mvc sitecore sitecore8