hexo-theme-icarus icon indicating copy to clipboard operation
hexo-theme-icarus copied to clipboard

[建議] 優化 <html> 的 lang 屬性

Open forgetfulengineer opened this issue 2 months ago • 0 comments

功能問題描述

目前在 layout.jsx 裡,設定 <html> 的語言屬性:

const language = page.lang || page.language || config.language;
<html lang={language ? language.substr(0, 2) : ''}>

這段程式碼會將語言值截斷為前兩個字元,例如 zh-TW 被轉成 zh。 此行為導致以下問題:

  1. 語言設定不完整 使用 zh-TW、zh-CN 等完整語言標籤會被截斷成 zh,使瀏覽器、搜尋引擎無法準確判斷內容語系。

  2. 字型渲染錯誤 字體設定為 sans-serif 的情況下:

    • 正確情況:lang="zh-TW" → fallback 為 Microsoft JhengHei(微軟正黑體)
    • 實際情況情況:lang="zh" → fallback 為 Microsoft YaHei(微軟雅黑)
  3. SEO / 可及性(Accessibility)/ 翻譯行為受影響

    • 搜尋引擎會根據 lang 屬性決定語系與索引區域設定。
    • Screen reader 會依據語言切換發音方式。
    • 瀏覽器內建翻譯功能會依 lang 來判斷是否需要翻譯。

解決方法建議

改為保留完整語言設定,不進行 substr(0, 2) 截斷。

若沒有明確指定,預設語言為 en。

建議修改如下:

const language = page.lang || page.language || config.language || 'en';
<html lang={language}>

這樣能:

保留正確的語言標籤(如 zh-TW、zh-CN、en-US 等)。

維持向下相容(未設定的情況仍會預設為 en)。

改善字型 fallback、SEO、Accessibility 等多方面表現。

額外說明

如果這個修改方向可被接受的話,我可以協助調整程式並提交一個 PR。

forgetfulengineer avatar Oct 09 '25 07:10 forgetfulengineer