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