重定向到站点根目录的首选语言

问题描述 投票:1回答:1

我正在使用hugo中使用多语言支持的theme在多语言网站上工作。我以两种语言添加了内容,并在配置文件中设置了以下两个设置:

defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true

我还指定了以下两种语言:

[languages]
  [languages.en]
    baseURL = "https://example.com/en"
    weight = 100
  [languages.nl]
    baseURL = "https://example.com/nl"

当hugo生成网站时,将按预期创建两个目录,每种语言一个。当我部署网站时,导航至这些URL之一会将我发送到相应语言的网站。但是,导航到基本URL example.com却无济于事,因为在该位置没有生成html。

我可以通过绕过hugo并在站点根目录手动添加index.html来实现此目的:

<!DOCTYPE html>
<html lang="en-us">
  <head>
   <script type="text/javascript">

      var languageCookie = getCookie("preferredLanguage")

      if (languageCookie) {
         var language = languageCookie
      } else {
         var language = navigator.language || navigator.userLanguage;
      }

      if (language == "nl") {
         window.location.href = "https://example.app/nl"
         document.cookie = "preferredLanguage=nl"
      }
      else {
         window.location.href = "https://example.app/en"
      }

      function getCookie(name) {
         const value = `; ${document.cookie}`;
         const parts = value.split(`; ${name}=`);
         if (parts.length === 2) return parts.pop().split(';').shift();
      }

   </script>
  </head>
</html>

但是我宁愿雨果生成此html。如何指定独立于语言的单独页面/ javascript?还是在另一个地方可以调用此javascript?任何帮助表示赞赏

javascript redirect multilingual hugo
1个回答
0
投票

正在生成index.html

但是,导航到基本URL example.com却无济于事,因为在该位置没有生成html。

[这可能与两种语言都具有相同的baseURL的事实有关; config docs提到它是主机名。确实,我在文档中找不到任何明显的地方,但似乎打算将其完全用于不同的域,而不是同一域中的不同路径。如果这是您的用例,那么对不起,我不知道!

很可能是个错误,但我也没有搜索。

开箱即用

但是,如果您只有一个域,应该起作用的是

DefaultContentLanguage = "en"
defaultContentLanguageInSubdir = true

output= ["html"]

[languages]
  [languages.en]
    languageName = "English"
    contentDir = "content/en"
    weight = 10
  [languages.nl]
    languageName = "Nederlands"
    contentDir = "content/nl"
    weight = 20

产生这样的结构:

public
├── index.html
├── en
│   ├── index.html
│   ├── posts
│   │   └── index.html
│   ├── sitemap.xml
│   └── tags
│       └── index.html
├── nl
│   ├── index.html
│   ├── posts
│   │   └── index.html
│   ├── sitemap.xml
│   └── tags
│       └── index.html
└── sitemap.xml

提及生成的index.html已经为您进行了重定向,并且正在使用<meta> refresh tag重定向到您的默认语言。

这可以解决您的<meta>问题,而无需创建其他内容。

取决于主机

根据您托管网站的方式,您可以检查是否可以向其提供您的自定义重定向规则,例如index.html

独立于语言的输出

如何指定独立于语言的单独页面/ javascript?

如果您想在该根Netlify's _redirects file上使用自定义代码,那么我不知道您是否可以拥有它。但是,如果您确实想要,可以

  1. 尝试第一个建议,所以您仍然有_redirects;
  2. 只需将index.html放到您的布局中
© www.soinside.com 2019 - 2024. All rights reserved.