多区域和多语言网站 Sitecore
Multi Regional and Language sites Sitecore
我正在使用 Sitecore,我想让我的网站支持多区域和多语言。
我希望 url 采用以下格式:
http://www.example.com/ca/fr(地区然后是语言)
我目前的配置中有这个:
<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
而不是所需的 /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 的语言版本控制——在这种方法中,您只是为每种语言创建新的站点节点。
我正在使用 Sitecore,我想让我的网站支持多区域和多语言。
我希望 url 采用以下格式:
http://www.example.com/ca/fr(地区然后是语言)
我目前的配置中有这个:
<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
而不是所需的 /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 的语言版本控制——在这种方法中,您只是为每种语言创建新的站点节点。