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

时间:2014-09-02 13:16:21

标签: c# controls sitecore

我创建了一个自定义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,任何想法?

4 个答案:

答案 0 :(得分:3)

好的,终于明白了。选择其他语言时,您可以通过这样做来请求语言。

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

谢谢大家的帮助。

答案 1 :(得分:0)

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

Sitecore.Context.Culture.Name

答案 2 :(得分: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);
  }
}

答案 3 :(得分:0)

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

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