【问题标题】:Redirecting to preferred language at site root在站点根目录重定向到首选语言
【发布时间】:2020-06-01 20:50:33
【问题描述】:

我正在使用支持多语言的themehugo 开发一个多语言网站。我添加了两种语言的内容,并在配置文件中设置了以下两个设置:

defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true

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

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

当 hugo 生成网站时,会按预期创建两个目录,每个目录对应一种语言。当我部署网站时,导航到其中任何一个 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>

但我宁愿让 hugo 生成这个 html。如何指定一个独立的页面/javascript,它与语言无关?或者还有其他地方可以调用这个javascript吗?任何帮助表示赞赏

【问题讨论】:

    标签: javascript redirect multilingual hugo


    【解决方案1】:

    生成index.html

    但是,导航到基本网址 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 已经为您制作了重定向,并且使用&lt;meta&gt; refresh tag 重定向到您的默认语言。

    这应该可以解决您的index.html 问题,而无需创建额外的东西。

    主机依赖

    根据您托管网站的方式,您可以检查是否可以向他们提供您的自定义重定向规则,例如Netlify's _redirects file.

    语言独立输出

    如何指定一个独立的页面/javascript,与语言无关?

    如果您想在该根 index.html 上使用自定义代码,那么不幸的是,我不知道您是否可以拥有它。但是,如果你真的想,你可以

    1. 试试第一个建议,这样你还有index.html
    2. 只需将 js 放到您的布局中

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多