Sitecore URL中的语言嵌入

问题描述 投票:4回答:5

我们在旧的经典asp网站(也是3种语言)中创建了FR,ES,EN的多语言网站。默认情况下,在旧网站中,英语“en”未嵌入URL中。但在我们新的sitecore网站上,我有语言嵌入=“总是”。

因此,当我们从旧网站重定向到新网站进行301重定向时,如果我用法语打开我的新网站并从旧网站重定向是英文(这意味着在网址中没有语言即“en”)链接将指向法语版)。

那我怎么能在网址上添加“en”。

  HttpContext.Current.Request.RawUrl

我可以使用上面的方法获取原始网址,但我没有得到如何在浏览器网址中显示“en”。

旧网站链接:

www.abc.com/xyz.asp,
www.abc.com/fr/xyz.asp,
www.abc.com/es/xyz.asp

新网站链接:

www.abc.com/en/xyz.aspx,
www.abc.com/fr/xyz.aspx,
www.abc.com/es/xyz.aspx

谢谢

sitecore sitecore7
5个回答
2
投票

你是如何处理旧网站的语言的?您是如何知道用户在EN / FR / ES中请求页面的?

由于您使用旧网站上的301重定向,因此您需要将语言嵌入到旧网站的URL中。从Sitecore方面处理它将最好只给你一个“更漂亮”的URL,在你检查重定向后是否必须添加另一个302重定向到同一页面的附加缺点是嵌入了或不是。 Ruud建议使用IIS Rewrite是一个很好的建议。

因此,当我们从旧网站重定向到新网站进行301重定向时,如果我用法语打开我的新网站并从旧网站重定向是英文(这意味着在网址中没有语言即“en”)链接将指向法语版)。

是的,这就是Sitecore的工作方式,它使用cookie来保留最后选择的语言,但是上下文语言按以下顺序设置。您的初次访问将设置语言cookie。

  1. sc_lang查询字符串参数。
  2. 请求的URL中路径中的语言前缀。
  3. 与上下文站点关联的语言cookie。
  4. 与上下文逻辑站点关联的默认语言。
  5. web.config中指定的DefaultLanguage设置。

Overriding Sitecore’s Logic to Determine the Context Language

如果你真的不希望语言在浏览器会话之间保持不变,那么用你自己的逻辑覆盖Sitecore.Pipelines.HttpRequest.LanguageResolver管道,或者不设置cookie(在这种情况下你完全依赖于请求URL)或设置一个cookie,它将在到期时到期浏览器已关闭。您可以在this blog post中找到一个示例,以及之前链接的John West博客文章中的示例。

如果您唯一关注的是Google索引,那么我可能不会做任何更改,除非在您的网页上添加canonical link tags并使用包含语言的完整网址(对于每种语言版本,这显然会有所不同)。

<link rel="canonical" href="http://www.abc.com/en/xyz.aspx"/>

1
投票

我不确切地知道你在这里问的是什么,但是如果你需要为特定Sitecore项目添加语言嵌入的URL,你只需要为链接提供者配置languageEmbedding="always",然后使用LinkManager请求项目的URL:

Sitecore.Links.LinkManager.GetItemUrl(item);

如果您需要特定语言的URL或在代码中明确设置languageEmbedding选项,则可以在UrlOptions中设置:

var options = Sitecore.Links.LinkManager.GetDefaultUrlOptions();
options.LanguageEmbedding = Sitecore.Links.LanguageEmbedding.Always;
options.EmbedLanguage(Sitecore.Globalization.Language.Parse("en"));

Sitecore.Links.LinkManager.GetItemUrl(item, options);

希望有所帮助!


0
投票

看一下Sitecore.Pipelines.PreprocessRequest.StripLanguage ...我会覆盖这个,如果没有找到使用现有函数的语言,我会默认回en。


0
投票

您可以使用URLOptions,请参阅下面的代码 -

protected UrlOptions URLOptions
        {
            get
            {
                if (urlOptions == null)
                {
                    urlOptions = new UrlOptions()
                    {
                        LanguageEmbedding = LanguageEmbedding.Always,
                        AddAspxExtension = false
                    };
                }
                return urlOptions;

            }
        }

请在geturl()函数中传递此URloption对象,它将起作用。

LinkManager.GetItemUrl(itm,URLOptions)


0
投票

您可以通过sitecore设置实现此功能。

enter image description here

请参考上面的截图。将languageEmbedding属性更改为始终来自asNeeded此设置在Sitecore.config文件中完成。如果这有助于您满足您的要求,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.