获取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",知道吗?
好的,终于得到了。当选择另一种语言时,只需这样做就可以请求该语言。
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)