我正在使用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?任何帮助表示赞赏
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上使用自定义代码,那么我不知道您是否可以拥有它。但是,如果您确实想要,可以
_redirects
;index.html
放到您的布局中