使用 Hugo 進行部落格國際化支援

📢 本文由 gemini-3-flash-preview 翻譯

引言

隨著對於資訊的瀏覽增多,往往會有書寫其他語言文章的需求(同時現代的作品幾乎都具備多語言支援),同時也因為自從畢業設計當時加入了多語言支援後,之後做的東西或設計的東西往往都會想要進行國際化支援。就連 最近寫的一個相當於練手的小專案 也弄了多語言支援呢(不過這並不是我想要的效果,太古老了,想做一個現代一點的,另外 正在製作中 ,希望可以堅持做完)。

回過頭來看看我的部落格,這個陪伴我最久的作品,它還沒有國際化。雖然一部分原因通常都是寫簡體中文文章啦,但 之前的部落格 介面部分中文部分英文,實際上弄得多少有些混亂,雖然我個人可以看懂,但對於非相關人士可能會感到疑惑。

但原本的 Jekyll 我折騰了半天硬是沒成功達成多語言,索性轉向原生支援國際化的 Hugo 啦。不過每個主題都有其特色,這個主題對於分類與標籤的處理和上個主題區別很大,之後得慢慢修改適應才行。

這篇文章寫得很潦草吧,主要是它的配置貌似很依賴主題,我也幾乎都是根據主題的範例修改的,所以我覺得也沒什麼好寫的(因為官方文件也很豐富)。

環境

使用 Docker 有 Hugo 的容器,所以環境問題沒怎麼折騰(使用的工具可以看 這裡 呢)。

建立部落格

建立新部落格

1
hugo new site blogName

進入目錄

1
cd blogName

初始化儲存庫

1
git init

安裝主題,這裡使用 hugo-theme-stack 主題,其他同理

1
git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack

配置 hugo.toml 選擇主題

1
theme = 'hugo-theme-stack'

預覽

1
hugo server

包含草稿 (draft) 的預覽

1
hugo server -D

部分修改可能需要清除快取才能生效(例如配置項、頁面的修改)

1
hugo --cleanDestinationDir

建置網站,預設建置檔案在 public 目錄下

1
hugo

多語言支援

在網站設定檔(我使用 yml 配置)中設定預設語言

1
2
defaultContentLanguage: 'zh-cn' # 預設語言代碼
defaultContentLanguageInSubdir: false # 預設語言路徑是否帶語言代碼

然後設定具體的語言項目

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
languages:
  zh-cn:
    contentDir: 'content/zh-cn' # 文章存放目錄
    disabled: false
    languageCode: 'zh-cn'
    languageDirection: 'ltr' # 文章從左到右 (ltr) 還是從右到左 (rtl)
    languageName: '简体中文'
    title: "yexca'Blog"
    weight: 1
  zh-tw:
    contentDir: 'content/zh-tw'
    disabled: false
    languageCode: 'zh-tw'
    languageDirection: 'ltr'
    languageName: '繁體中文'
    title: "yexca'Blog"
    weight: 2

字體國際化: https://blog.yexca.net/archives/240

文章撰寫

不同於 Jekyll,Hugo 的文章撰寫稍微有點複雜,加上國際化支援後,使得文章管理更加複雜(複雜的好處是自定義程度高),這點可能根據不同主題而有所不同。我說明一下我使用的做法,首先上方語言項目配置指定了文章的目錄,需要在 content 建立相應目錄,然後該語言的文章就在該目錄下寫作。

同時,指定文章是在哪個目錄下,stack 主題設定檔中可以指定:

1
2
3
params:
    mainSections:
        - posts

這就表示我簡體中文的文章應該放在 content/zh-cn/posts 裡,然後還有一些目錄是主題指定的,可以參考對應主題的範例。

現在要建立一篇簡體中文的新文章可以使用:

1
TZ="Asia/Tokyo" hugo new content/zh-cn/posts/test.md

不指定時區的話預設使用 UTC 時間(雖然可以自己改,但習慣了 Jekyll 自動建立的我,覺得自己寫時間很麻煩)。

文章預設建立模板在 blogName/archetypes 下,可以改為 yml 格式。

參考文章

Hugo - Quick start

https://stack.jimmycai.com/guide/

Hugo - Multilingual mode