【问题标题】:Kentico Cultures not working after navigating导航后 Kentico Cultures 无法正常工作
【发布时间】:2016-05-23 19:19:17
【问题描述】:

我目前正致力于在 Kentico 8.2 中推出韩国版网站,并使用该网站的本地和开发版本。

我可以在导航时获得一个以韩语加载的页面,甚至一些后续页面以韩语加载。通常,我导航到的第三或第四页将恢复为英文。我可以重新添加查询字符串 ?lang=ko-kr 或将 /ko-kr/ 添加到 URL(取决于我当时尝试的设置)以使该页面以韩语加载(验证它是否存在) .我从哪个页面开始或导航到哪个页面似乎并不重要。

我尝试了以下设置的组合:

  • 在设置/URL 和 SEO 中强制域文化(仅)
  • 为 URL 使用语言前缀(有和没有允许 URL 语言前缀)在设置/URL 和 SEO 中
  • 将访客文化更改为自动(网站/常规)

使用这些不同的设置,我尝试附加 ?lang=ko-kr 或使用 domain/ko-kr/rest-of-url 来获取以韩语加载的页面(匹配适当的设置)。

我已经尝试过其他方法来查看它们是否会产生干扰,例如:

  • 我的浏览器中的语言设置更改为韩语,以查看这是否覆盖了任何内容。
  • 在隐身模式下运行并清除缓存/cookie 以查看这些是否可能存在问题。
  • 更改设置后重新启动服务器。
  • 验证自定义 URL 没有干扰(未设置)

我一直在搜索 Kentico 论坛,这里是 SO,并在谷歌上搜索了各种搜索词,但没有运气。根据我的发现,这几个设置就足够了。解决这些问题的方法不多,因为大多数结果都返回了关于如何在网站上实现多种语言的常规文档。

我已经坚持了几天,感觉我错过了一些非常明显的东西......它不应该这么困难,不是吗?

【问题讨论】:

    标签: c# .net multilingual culture kentico


    【解决方案1】:

    我们最近在我们的一个网站上遇到了一个问题,它可能与您的问题有关,也可能与您的问题无关,但可能值得一试。

    如果您的默认文化文档定义了与默认节点别名路径相同的自定义路径,则如果您在前端仅使用 nodealiaspath url,则其他文化的 url 将无法按预期工作。

    要正确使用多语言 URL,请使用此方法:

    你有 /page,在英文版(默认文化)上,必须检查使用自定义路径,但路径 texbox 应该是空的,或者有不同于 /page 的东西强>。

    在葡萄牙语版本(我的示例)上,还选中了使用自定义路径,但路径文本框有翻译版本 /pagina(您可以选中/取消选中使用自定义路径复选框,它将为您生成翻译后的路径)。

    这样,如果您第一次浏览网址 /page,它应该会转到 /en/page

    但是,如果您已经有葡萄牙语版本的 cookie,如果您转到 /page,它将重定向到 /pt/pagina

    您还应该能够导航到 /pagina,它会重定向 /pt/pagina

    这是我们发现使用并向客户解释如何使用多语言 URL 的最佳方式。

    【讨论】:

    • 感谢您的建议。鉴于我们将使用的页面数量和语言,为每个页面设置自定义路径是不可持续的。我们遇到的是,即使在 cookie 中设置了语言,它也不会重定向到正确的语言。我们必须每次都明确指出我们想要哪种语言(因此在我的解决方案中使用了前置的文化代码)。
    【解决方案2】:

    在我的情况下,我可以通过转到相关页面的 URLs 标签并取消选中 Use custom URL path 复选框来解决问题。

    同时从两个文化版本中删除所有页面别名

    【讨论】:

      【解决方案3】:

      我可以通过设置(设置 > URLs and SEO under SEO - Cultures)来解决这个问题:

      强制域文化(未选中) 使用 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 喜欢为使用链接选择器选择的链接插入波浪号 (~),因此我不得不从 URL 中删除它。因为英语是默认语言(并且要求它具有纯英文 URL),所以我有一个 if 语句跳过将 /en-us 添加到 URL 的前面。

      网址也不需要小写,所以功能可以进一步简化。

      【讨论】:

      • 如果你应用我在下面的回答中提到的方法,你就不需要这个,只使用 NodeAliasPath 作为 URL 将根据站点的设置和访问者 cookie 解析为适当的文化 URL。
      猜你喜欢
      • 2016-08-16
      • 2021-02-09
      • 2016-08-15
      • 2012-09-26
      • 2016-06-26
      • 2016-03-18
      • 2022-01-06
      • 2018-01-05
      • 2013-07-12
      相关资源
      最近更新 更多