获取Sitecore内容编辑器语言选择

本文关键字:语言 选择 编辑器 Sitecore 获取 | 更新日期: 2023-09-27 18:20:16

我创建了一个要在内容编辑器中使用的自定义Sitecore控件(扩展控件)。它调用一个服务,而这个服务需要一种语言。

当控件被呈现时,它每次都会返回"en"作为语言,我如何从内容编辑器的"语言下拉列表"中获得用户选择?

在我的方法中,我想做这样的事情:

Language theLanguage = new Language.Parse("da-dk"); 
Item theLanguageSpecificItem = (Sitecore.Data.Database.GetDatabase("master")).GetItem(myId, theLanguage);

然而,我不希望da-dk部分是硬编码的,我想从内容编辑器中的语言下拉列表中获得它。出于某种原因,如果我使用Sitecore.Sites.SiteContext.Current.Language,我总是得到"en",知道吗?

获取Sitecore内容编辑器语言选择

好的,终于得到了。当选择另一种语言时,只需这样做就可以请求该语言。

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

谢谢大家的帮助。

您是否尝试过使用Sitecore上下文来获取它?

Sitecore.Context.Culture.Name

所选语言存储在页面的隐藏字段中:

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

我还没有尝试过,但看起来您可以通过解析ServerProperties的语言参数在内容编辑器中获得所选语言。

Language.Parse(Context.ClientPage.ServerProperties["language"] as string)