我是Sitecore的新手,在尝试通过以下步骤按特定语言检索项目时出现问题:
通过以下任一方式获取语言(均失败):
SC.Globalization.Language lang = SC.Globalization.Language.Parse("ar-AE");
//尝试用(“ar”)替换文化SC.Globalization.Language lang = SC.Data.Managers.LanguageManager.GetLanguage("ar-AE");
//并尝试用(“ar”)替换文化SC.Context.SetLanguage(lang, true);
响应:我只能获得“en”项目,当我更改语言时(通过上述代码),项目被正确检索但字段为空。
注意:我查看过Sitecore DB Master - > VersionedFields [语言]和 发现同一项目的其他语言保存为“ar-AE”(仅限 使用单项版本)
更新:
我正在使用过滤器通过以下代码更改整个API语言:
public class LanguageChecker : System.Web.Mvc.ActionFilterAttribute
{
// Set Default Language
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
SC.Globalization.Language lang = SC.Data.Managers.LanguageManager.GetLanguage("en");
if (filterContext.HttpContext.Request.Headers["Accept-Language"] != null || filterContext.HttpContext.Request.Headers["Accept-Language"].ToLower() == "ar")
{
// lang = SC.Globalization.Language.Parse("ar");
lang = SC.Data.Managers.LanguageManager.GetLanguage("ar-AE");
}
SC.Context.SetLanguage(lang, true);
base.OnActionExecuting(filterContext);
}
}
并在API主控制器中注释此过滤器(就像任何过滤器一样)
所以,我正在通过以下方式调用该项目:
SC.Data.Items.Item item = context.GetItem(SC.Data.ID.Parse(id));
答案 0 :(得分:0)
通常,要使用任何语言获取项目,请使用LanguageSwitcher
var item = Sitecore.Context.Item;
using (new Sitecore.Globalization.LanguageSwitcher("ar"))
{
arItem = item.Database.GetItem(item.ID);
}
此用法将处理LanguageSwitcher并重置原始语言
答案 1 :(得分:-1)
尝试在Database类上使用静态方法。这样的事情可能有用:Sitecore.Context.Database.GetItem(item.ID, Language.Parse("ar"));