Redirect 如何将默认语言设置为';en';如果未在sitecore中创建语言版本

Redirect 如何将默认语言设置为';en';如果未在sitecore中创建语言版本,redirect,sitecore,Redirect,Sitecore,在我的sitecore网站中,重定向有一个棘手的要求。 有一些外部重定向正在从sharepoint移动到sitecore项目,再移动到某些外部重定向。 例如:/abc.aspx(sharepoint\u URL)到/abc(sitecore项目)到(外部URL) Language currentLang = Sitecore.Context.Language; Language LangEn= Language.Parse("en");

在我的sitecore网站中,重定向有一个棘手的要求。 有一些外部重定向正在从sharepoint移动到sitecore项目,再移动到某些外部重定向。 例如:/abc.aspx(sharepoint\u URL)到/abc(sitecore项目)到(外部URL)

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`
在/abc(sitecore项目)中,我们只有项目的英文版本,但可以有多种语言版本。如果网站是用英语编写的,而不是正常工作,那么在其他语言中,它会显示404错误页面,这是真实的,因为那里的版本数是0

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`
如果项目没有其他语言版本,则要求指向“en”版本,即全局版本。 限制是sitecore中项目的版本控制对营销人员来说是不可接受的,我现在不想使用回退模块。我尝试的是:

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`

请尽快建议

我想你可能想研究一下语言退步。有一种方法可以帮助您做到这一点

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`
也就是说,如果该字段是共享的,那么只需登录Sitecore并用每种语言创建一个版本所需的时间就会少得多

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`

如果这种情况经常发生,您可以创建一个命令模板,该模板将运行代码以所有语言创建项。这可能会为您的作者节省一些时间。

我在这里得到了一个非常精确的解决方案[我只需要在config中添加一个处理器,并相应地创建一个类。它确实对我有用

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`
<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel" />
<processor type="YourAssemblyHere.Pipelines.HttpRequest.FallbackLanguageProcessor, YourAssemblyHere " />
<processor type="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel" />

感谢您的建议,欢迎您提出更多建议。

您为什么不简单地将重定向项上的字段设置为“共享”,然后它们将返回任何语言版本。相关重定向模板的所有字段都已签入“共享”。但对于我来说仍然失败。无论何时(versionItem.Versions.Count==0)计数是0,它发送到404响应页面。您发布了您的项目和模板吗?是的,检查了所有发布目标、索引和所有内容,它们工作正常,但他特别要求“en”该项的版本,这是回退模块无论如何都要做的。奇怪的是,该项为空/无版本,因为他说该项是用该语言创建的。
Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`