Получить выбор языка редактора контента Sitecore

1

Я создал настраиваемый элемент управления 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, любую идею?

  • 1
    Ваш вопрос немного неясен, можете ли вы предоставить код, который у вас есть? Я не понял, отвечает ли один из ваших компонентов за возврат «en» каждый раз или английский является языком по умолчанию для всего вашего приложения.
  • 0
    Я могу попробовать :) Хорошо, в моем методе я хочу сделать что-то вроде этого: 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. Имеет смысл?
Показать ещё 8 комментариев
Теги:
controls
sitecore

4 ответа

3

Хорошо, наконец, понял. При выборе другого языка вы можете запросить язык, просто сделав вот так.

string currentLanguage = HttpContext.Current.Request["scLanguage"];

Спасибо всем за помощь.

  • 0
    Потрясающие. И, FWIW, этот элемент управления выбора языка является Sitecore.Shell.Applications.ContentManager.Galleries.Languages.GalleryLanguagesForm, Sitecore.Client . Sitecore.Context.Language будет оставаться согласованным, потому что он контролирует сам интерфейс (в противном случае ваше сохранение и другие действия будут переведены). также стоит отметить, что команды (например, item:* ) имеют параметр language переданный через ClientPipelineArgs который может оказаться полезным (хотя многие из них генерируются CommandContext.Items[0].Language внутреннего использования).
0

Я еще не пробовал это, но похоже, что вы можете получить выбранный язык в редакторе содержимого, проанализировав языковой параметр ServerProperties.

Language.Parse(Context.ClientPage.ServerProperties["language"] as string)
  • 0
    Не думаю, что это сработает ... или, вероятно, даст английский язык, как и все остальные вещи, которые я пробовал.
0

Выбранный язык хранится в скрытом поле на странице:

<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);
  }
}
0

Вы пытались использовать Контекст Sitecore для его получения?

Sitecore.Context.Culture.Name
  • 1
    Это не работает в контексте оболочки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню