Why is my Sitecore.Context.Language resetting in C

2019-06-17 04:42发布

问题:

Sitecore appears to be doing something freaky with the language variable in it's Context object. If I load a CMS page using the url ?sc_Lang=ru-RU (get the Russian version of my site), by the time it get's to my MVC controller it's reset to the language back to en

public PartialViewResult Navigation()
{
    //en
    var language = Sitecore.Context.Language;
}

I know that sitecore does set this at some point because if I add a HTTP pipeline I can see Sitecore.Context.Language as ru-RU:

public class LanguageResolver
{
    public void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        //ru-RU
        var language = Sitecore.Context.Language;
    }
}

Registered:

<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"/>
<processor type="namespace.LanguageResolver,RR.Web.Sc.Extensions" patch:source="Languages.config"/>

as recommended on the sitecore blog post

I did some digging into the sitecore dlls and I noticed that Sitcore.Context.Language is basically a wrapper for HttpContext.Current.Items["sc_Language"]. When I inspect this I see the same results (i.e. in the pipeline it's ru-RU in the controller it's en)

So something somewhere is turning this HttpContext Item to "en".

As an experiment I dropped a new variable into the Items collection. I can then see this again (in it's correct state) in Controller, so the Items collection is getting passed into the controller correctly.

I didn't originally develop this site but I can't see anywhere in the code base that changes this language variable.

Has anyone else experienced this? Anything I've missed? Anything I need to configure, check?

The sitecore docs (as usual) are pretty woeful on this subject.


To follow up on the comment from @jammykam:

I can see the lang cookie the Response Set-Cookie: redrow#lang=ru-RU; path=/ and the languages are set up: