多区域和多语言网站 Sitecore

Multi Regional and Language sites Sitecore

我正在使用 Sitecore,我想让我的网站支持多区域和多语言。

我希望 url 采用以下格式:

http://www.example.com/ca/fr(地区然后是语言)

http://www.example.com/ca/en

我目前的配置中有这个:

 <site patch:before="site[@name='website']" 
  name="Canada" enableTracking="true" 
  virtualFolder="/ca" physicalFolder="/ca" 
  language="en-gb" 
  rootPath="/sitecore/content/CanadaSite" 
  startItem="/home" database="master" 
  domain="extranet" allowDebug="true" 
  cacheHtml="true" htmlCacheSize="50MB" registryCacheSize="0" 
  viewStateCacheSize="0" xslCacheSize="25MB" filteredItemsCacheSize="10MB" 
  enablePreview="true" enableWebEdit="true" enableDebugger="true" 
  disableClientData="false" cacheRenderingParameters="true" 
  renderingParametersCacheSize="10MB" />

我现在的项目有点复杂,也安装了英文版的us,但我一直希望路径是/en。我不认为它被用于任何内容。

杰玛

您可能需要重新考虑使用此结构。我不知道您的要求,但您遇到的第一个问题是默认的 Sitecore 行为。

例如,我有一个包含不同域的站点:

  • mysite.com -> 默认语言:"en"
  • mysite.fr -> 默认语言:"fr-FR"
  • mysite.de -> 默认语言:"de-DE"

如果我调用 mysite.com,那么将提供英文项目。 如果我调用 mysite.com/fr 或 mysite.com/fr-fr 将提供法语内容(如果有并且取决于语言配置)。

所以你应该小心你的 url 路径

mysite.com/[language-culture]/page name
mysite.com/[language]/page name

这是 Sitecore 的默认行为。

无论如何,我不知道您的要求,最后,您可以定义一个额外的站点配置并将其映射到英语版本的 sitecore 中的同一节点。

<site patch:before="site[@name='website']" 
name="CanadaEnglish"
language="en" 
virtualFolder="/ca" 
physicalFolder="/ca"    
rootPath="/sitecore/content/CanadaSite" ...

<site patch:before="site[@name='website']" 
name="CanadaEnglishUS"
language="en-us" 
virtualFolder="/ca" 
physicalFolder="/ca"    
rootPath="/sitecore/content/CanadaSite" ...

诀窍是给新名称,如 name="CanadaEnglish"name="CanadaEnglishUS"

多语言网站 URL 的默认 sitecore 实现是 http:////

在你的例子中,如果你将 virtualFolder 设置为 /ca,那么你的 URL 将是 http://www.example.com/fr/ca

http://www.example.com/en/ca

而不是所需的 /ca/fr 和 /ca/en

此外,默认的 sitecore 行为是显示在 url 中。 例如:fr-ca。但是,编写自定义 link 解析器很容易,因此自定义 link 解析器将输出 /fr 而不是 /fr-ca。但是您在虚拟文件夹名称之前的原始语言问题将不会得到解决。

我不建议您更改自定义 link 解析器以在 virtualFolder 名称后输出语言。我没有尝试过这样的定制,不知道你会遇到什么陷阱,需要确保预览、体验编辑器等都适用于这样的定制。

您唯一可以研究的另一件事是在内容树中创建完全不同的站点节点,然后您将需要一个相应的站点定义来指向该站点节点。在这种方法中,站点定义中的虚拟文件夹将为“/ca/en”、“/ca/fr”等,如下所示

  site patch:before="site[@name='website']" 
  name="CanadaFrench"
  language="fr-ca" 
  virtualFolder="/ca/fr" 
  physicalFolder="/ca/fr"    
  rootPath="/sitecore/content/CanadaFrenchSite" 

  site patch:before="site[@name='website']" 
  name="CanadaEnglish"
  language="en-us" 
  virtualFolder="/ca/en" 
  physicalFolder="/ca/en"    
  rootPath="/sitecore/content/CanadaEnglishSite" 

这种方法可行,您只需将每个站点配置为 languageEmbedding="never"。但是,我也不推荐这种方法,因为我们完全绕过了 sitecore 的语言版本控制——在这种方法中,您只是为每种语言创建新的站点节点。