Kentico Cultures 导航后无法正常工作
Kentico Cultures not working after navigating
我目前正在努力在 Kentico 8.2 中推出韩文版网站,并使用该网站的本地和开发版本。
我可以在导航时加载一个韩语页面,甚至可以加载一些后续页面。通常我导航到的第三或第四页将恢复为英语。我可以重新添加查询字符串 ?lang=ko-kr 或将 /ko-kr/ 添加到 URL (取决于我当时尝试的设置)以使该页面以韩语加载(验证它存在)。我从哪个页面开始或导航到哪个页面似乎并不重要。
我尝试了以下设置的组合:
- 在 Settings/URLs 和 SEO
中(仅)强制域文化
- 为 URL 使用语言前缀(有和没有允许 URL 没有
Settings/URLs 和 SEO
中的语言前缀)
- 将访客文化更改为自动 (Sites/General)
使用这些不同的设置,我尝试附加 ?lang=ko-kr 或使用 domain/ko-kr/rest-of-url 来加载韩文页面(匹配适当的设置)。
我已经尝试了其他方法来查看它们是否在干扰,例如:
- 我的浏览器中的语言设置更改为韩语,以查看这是否覆盖了任何内容。
- 运行 处于隐身模式并清除 cache/cookies 以查看这些是否是可能的问题。
- 更改设置后重新启动服务器。
- 验证自定义 URL 没有干扰(未设置)
我一直在 Kentico 论坛上搜索,在 SO 上搜索各种搜索词,但没有成功。根据我的发现,这几个设置就足够了。没有太多解决这些问题,因为大多数结果 return 关于如何在网站上实现多种语言的正常文档。
几天来我一直坚持这个问题,感觉我遗漏了一些很明显的东西......不应该这么难,不是吗?
我能够通过设置(设置 > URLs 和 SEO 在标题 SEO - 文化下)解决此问题:
强制域文化(未选中)
使用 URL 的语言前缀(选中)
允许 URL 没有语言前缀(未选中)
每当我们检索 NodeAliasPath 时,URL 都不包含文化代码。它会保留几个页面加载的当前语言,但最终会恢复为默认语言(英语)。围绕 NodeAliasPath 的使用添加以下函数解决了这个问题。
public static string GetCultureURL(string url)
{
url = url.TrimStart('~');
string output = url;
if (CMS.Localization.LocalizationContext.CurrentCulture.CultureCode.ToLower() != "en-us")
output = "/" + CMS.Localization.LocalizationContext.CurrentCulture.CultureCode + url;
return output.ToLower();
}
CMS 喜欢为使用 link 选择器选择的 link 插入波浪号 (~),所以我不得不从 URL 中选择 trim。因为英语是默认语言(并且要求英语 URLs 是普通的),所以我有一个 if 语句跳过在 URLs 前面添加 /en-us。
也没有必要将 URL 小写,因此功能可以进一步简化。
我们的一个网站最近遇到了一个问题,它可能与您的问题有关,也可能无关,但可能值得检查一下。
如果您的默认文化文档定义了与默认节点别名路径相同的自定义路径,如果您仅使用节点别名路径 url,则其他文化的 urls 将无法按预期工作=]在你的前端。
要正确使用多语言 urls,请使用此方法:
你有 /page,在英文版(默认文化)上必须检查使用自定义路径,但路径 texbox 应该是空的,或者有不同于 /页.
在葡萄牙语版本(我的示例)中,还检查了使用自定义路径,但路径文本框具有翻译版本 /pagina(您可以 check/uncheck使用自定义路径复选框,它将为您生成翻译后的路径。
这样,如果您第一次浏览 url /页面,它应该会转到 /en/page
但是,如果您已经有葡萄牙语版本的 cookie,如果您转到 /page,它将重定向到 /pt/pagina .
您还应该能够导航至 /pagina,它将重定向 /pt/pagina
这是我们发现使用和向客户解释如何使用 multilang urls 的最佳方式。
在我的情况下,我可以通过转到相关页面的 URLs 选项卡并取消选中 Use 来解决问题自定义 URL 路径 复选框。
同时从两个文化版本中删除所有页面别名。
我目前正在努力在 Kentico 8.2 中推出韩文版网站,并使用该网站的本地和开发版本。
我可以在导航时加载一个韩语页面,甚至可以加载一些后续页面。通常我导航到的第三或第四页将恢复为英语。我可以重新添加查询字符串 ?lang=ko-kr 或将 /ko-kr/ 添加到 URL (取决于我当时尝试的设置)以使该页面以韩语加载(验证它存在)。我从哪个页面开始或导航到哪个页面似乎并不重要。
我尝试了以下设置的组合:
- 在 Settings/URLs 和 SEO 中(仅)强制域文化
- 为 URL 使用语言前缀(有和没有允许 URL 没有 Settings/URLs 和 SEO 中的语言前缀)
- 将访客文化更改为自动 (Sites/General)
使用这些不同的设置,我尝试附加 ?lang=ko-kr 或使用 domain/ko-kr/rest-of-url 来加载韩文页面(匹配适当的设置)。
我已经尝试了其他方法来查看它们是否在干扰,例如:
- 我的浏览器中的语言设置更改为韩语,以查看这是否覆盖了任何内容。
- 运行 处于隐身模式并清除 cache/cookies 以查看这些是否是可能的问题。
- 更改设置后重新启动服务器。
- 验证自定义 URL 没有干扰(未设置)
我一直在 Kentico 论坛上搜索,在 SO 上搜索各种搜索词,但没有成功。根据我的发现,这几个设置就足够了。没有太多解决这些问题,因为大多数结果 return 关于如何在网站上实现多种语言的正常文档。
几天来我一直坚持这个问题,感觉我遗漏了一些很明显的东西......不应该这么难,不是吗?
我能够通过设置(设置 > URLs 和 SEO 在标题 SEO - 文化下)解决此问题:
强制域文化(未选中) 使用 URL 的语言前缀(选中) 允许 URL 没有语言前缀(未选中)
每当我们检索 NodeAliasPath 时,URL 都不包含文化代码。它会保留几个页面加载的当前语言,但最终会恢复为默认语言(英语)。围绕 NodeAliasPath 的使用添加以下函数解决了这个问题。
public static string GetCultureURL(string url)
{
url = url.TrimStart('~');
string output = url;
if (CMS.Localization.LocalizationContext.CurrentCulture.CultureCode.ToLower() != "en-us")
output = "/" + CMS.Localization.LocalizationContext.CurrentCulture.CultureCode + url;
return output.ToLower();
}
CMS 喜欢为使用 link 选择器选择的 link 插入波浪号 (~),所以我不得不从 URL 中选择 trim。因为英语是默认语言(并且要求英语 URLs 是普通的),所以我有一个 if 语句跳过在 URLs 前面添加 /en-us。
也没有必要将 URL 小写,因此功能可以进一步简化。
我们的一个网站最近遇到了一个问题,它可能与您的问题有关,也可能无关,但可能值得检查一下。
如果您的默认文化文档定义了与默认节点别名路径相同的自定义路径,如果您仅使用节点别名路径 url,则其他文化的 urls 将无法按预期工作=]在你的前端。
要正确使用多语言 urls,请使用此方法:
你有 /page,在英文版(默认文化)上必须检查使用自定义路径,但路径 texbox 应该是空的,或者有不同于 /页.
在葡萄牙语版本(我的示例)中,还检查了使用自定义路径,但路径文本框具有翻译版本 /pagina(您可以 check/uncheck使用自定义路径复选框,它将为您生成翻译后的路径。
这样,如果您第一次浏览 url /页面,它应该会转到 /en/page
但是,如果您已经有葡萄牙语版本的 cookie,如果您转到 /page,它将重定向到 /pt/pagina .
您还应该能够导航至 /pagina,它将重定向 /pt/pagina
这是我们发现使用和向客户解释如何使用 multilang urls 的最佳方式。
在我的情况下,我可以通过转到相关页面的 URLs 选项卡并取消选中 Use 来解决问题自定义 URL 路径 复选框。
同时从两个文化版本中删除所有页面别名。