Я создал настраиваемый элемент управления Sitecore (расширение Control), который будет использоваться в редакторе содержимого. Он вызывает услугу, и для этого сервиса требуется язык.
Когда элемент управления отображается, он каждый раз возвращает "en" в качестве языка, как я могу получить выбор пользователя из "языкового выпадающего списка" в редакторе содержимого?
В моем методе я хочу сделать что-то вроде этого:
Language theLanguage = new Language.Parse("da-dk");
Item theLanguageSpecificItem = (Sitecore.Data.Database.GetDatabase("master")).GetItem(myId, theLanguage);
Тем не менее, я не хочу, чтобы часть da-dk была жестко закодирована, я хочу получить ее из раскрывающегося списка в редакторе содержимого. По какой-то причине я всегда получаю "en", если я использую Sitecore.Sites.SiteContext.Current.Language
, любую идею?
Хорошо, наконец, понял. При выборе другого языка вы можете запросить язык, просто сделав вот так.
string currentLanguage = HttpContext.Current.Request["scLanguage"];
Спасибо всем за помощь.
Sitecore.Shell.Applications.ContentManager.Galleries.Languages.GalleryLanguagesForm, Sitecore.Client
. Sitecore.Context.Language
будет оставаться согласованным, потому что он контролирует сам интерфейс (в противном случае ваше сохранение и другие действия будут переведены). также стоит отметить, что команды (например, item:*
) имеют параметр language
переданный через ClientPipelineArgs
который может оказаться полезным (хотя многие из них генерируются CommandContext.Items[0].Language
внутреннего использования).
Я еще не пробовал это, но похоже, что вы можете получить выбранный язык в редакторе содержимого, проанализировав языковой параметр ServerProperties.
Language.Parse(Context.ClientPage.ServerProperties["language"] as string)
Выбранный язык хранится в скрытом поле на странице:
<input type="hidden" id="scLanguage" name="scLanguage" value="en">
Это изменяется, когда вы меняете язык и публикуется с каждым запросом.
string language = Sitecore.WebUtil.GetFormValue("scLanguage");
Внутри это просто HttpContext.Current.Request.Form[fieldName]
. Если вы расширяете элемент управления, у вас может уже быть доступ к языку в качестве свойства или просмотреть один из существующих элементов управления Sitecore и следовать их шаблону реализации, например Sitecore.Shell.Applications.ContentEditor.LookupEx
:
public string ItemLanguage
{
get
{
return this.GetViewStateString("ItemLanguage");
}
set
{
Assert.ArgumentNotNull((object) value, "value");
this.SetViewStateString("ItemLanguage", value);
}
}
Вы пытались использовать Контекст Sitecore для его получения?
Sitecore.Context.Culture.Name