add multilingual support

This commit is contained in:
geekifan
2025-04-27 16:17:45 +08:00
parent 1e0bb29742
commit 9c9f002965
18 changed files with 738 additions and 18 deletions

View File

@ -48,11 +48,8 @@
{{ if .Params.image }}
{{ $src := .Params.image.path | default .Params.image }}
{{ if not (findRE "//" $src) }}
{{ $media_subpath := .Params.media_subpath | default "" }}
{{ $src = path.Join $media_subpath $src }}
{{ $page_path := path.Dir .RelPermalink }}
{{ $src = path.Join $page_path $src }}
{{ $src = .Resources.GetMatch ( .Params.image.path | default .Params.image ) }}
{{ $src = $src.RelPermalink }}
{{ end }}
{{ $alt := .Params.image.alt | default "Preview Image" | htmlEscape }}

View File

@ -0,0 +1,10 @@
<div class="language-selector">
<select class="language-dropdown" onchange="location = this.value;">
{{ $currentLang := .Site.Language.Lang }}
{{ range .Site.Languages }}
<option value="/{{ .Lang }}/" {{ if eq .Lang $currentLang }}selected{{ end }}>
{{ .LanguageName }} ({{ .Lang }})
</option>
{{ end }}
</select>
</div>

View File

@ -1,7 +1,7 @@
<!-- The Side Bar -->
<aside aria-label="Sidebar" id="sidebar" class="d-flex flex-column align-items-end">
<header class="profile-wrapper">
<a href="{{ "/" | relURL }}" id="avatar" class="rounded-circle">
<a href="{{ .Site.Home.RelPermalink }}" id="avatar" class="rounded-circle">
{{- if .Site.Params.avatar -}}
{{- $avatar := resources.Get .Site.Params.avatar -}}
{{- if $avatar -}}
@ -12,7 +12,7 @@
{{- end -}}
</a>
<a class="site-title d-block" href="{{ "/" | relURL }}">{{ .Site.Title }}</a>
<a class="site-title d-block" href="{{ .Site.Home.RelPermalink }}">{{ .Site.Title }}</a>
{{ if .Site.Params.tagline }}
<p class="site-subtitle fst-italic mb-0">{{ .Site.Params.tagline }}</p>
{{ end }}
@ -22,14 +22,24 @@
<nav class="flex-column flex-grow-1 w-100 ps-0">
<ul class="nav">
{{ range .Site.Menus.main }}
<li class="nav-item{{ if eq .URL $.RelPermalink }} active{{ end }}">
<a href="{{ .URL | relURL }}" class="nav-link">
{{ $active := false }}
{{ if eq ($.Site.GetPage .URL).RelPermalink $.RelPermalink }}
{{ $active = true }}
{{ end }}
<li class="nav-item{{ if $active }} active{{ end }}">
<a href="{{ .URL | relLangURL }}" class="nav-link">
<i class="fa-fw fas {{ .Pre }}"></i>
<span>{{ (i18n (printf "tabs.%s" .Identifier) | default .Name) | upper }}</span>
<span>{{ .Name | upper }}</span>
</a>
</li>
<!-- .nav-item -->
{{ end }}
<li class="nav-item">
<a class="nav-link">
<i class="fa-fw fas fa-language"></i>
{{ partial "language-selector.html" . }}
</a>
</li>
</ul>
</nav>
@ -56,7 +66,7 @@
{{ $emailParts := split .id "@" }}
{{ $url = printf "javascript:location.href = 'mailto:' + ['%s','%s'].join('@')" (index $emailParts 0) (index $emailParts 1) }}
{{ else if eq .type "rss" }}
{{ $url = "index.xml" | relURL }}
{{ $url = "index.xml" | relLangURL }}
{{ else }}
{{ $url = .url }}
{{ end }}

View File

@ -1,6 +1,7 @@
{{ define "main" }}
{{ $enable_toc := and (.Params.toc | default site.Params.toc) (gt (len .TableOfContents) 100) }}
{{ $lang := .Site.Language.Lang }}
{{ $page := . }}
<article class="px-1" data-toc="{{ $enable_toc }}">
<header>
@ -25,7 +26,8 @@
{{ end }}
{{ with .Params.image }}
{{ $src := printf "src=\"%s\"" ( .path | default . ) }}
{{ $src := $page.Resources.GetMatch ( .path | default . ) }}
{{ $src = printf "src=\"%s\"" $src.RelPermalink }}
{{ $class := "class=\"preview-img" }}
{{ if .no_bg }}{{ $class = printf "%s no-bg\"" $class }}{{ else }}{{ $class = printf "%s\"" $class }}{{ end }}
{{ $alt := printf "alt=\"%s\"" ( .alt | default "Preview Image" ) }}