Topics

Astro SSG 網站使用 Google Translate API 實現多語言化

  • column

有一天,總裁給我下達了命令:“讓我們把網站做成多語言的。顯然,谷歌雲翻譯API可以在構建過程中自動翻譯!”

我們的網站是一個使用 Astro 建立的靜態網站 (SSG)。我在研究 Google Cloud Translation API 時,決定嘗試將其整合到我們的網站上。

準備工作:啟用 API 金鑰並建立服務帳戶

啟用雲端翻譯 API

Google Cloud Console從“API 和服務”中選擇“雲端翻譯 API”。使能夠

建立服務帳戶和金鑰

要使用 API,您需要建立服務帳戶並下載 JSON 金鑰。

此 JSON 金鑰包含您的私鑰,因此請務必小心,不要洩漏它。

授予服務帳戶存取權限。

前往 IAM,將服務帳戶的電子郵件地址新增為主體,並將角色新增為「雲端翻譯 API 使用者」。

如何產生多語言頁面

我首先嘗試複製 Astro 文件,立即呼叫翻譯 API,並自動產生多語言 Astro 文件。

雖然頁面已經生成,但我們遇到了幾個問題,例如程式碼圍欄損壞、與匯入的元件不相容以及在屬性中編寫標籤時出現問題,因此我們改變了方法。

最終,我選擇了一個簡單的建置後處理流程,該流程對建置後產生的靜態 HTML 執行翻譯。

語言設定與 Astro 的 i18n 設定檔相關聯。

為了管理網站的多語言結構,我使用了 Astro i18n 設定檔(LOCALES_SETTING我將此用作翻譯腳本的“配置文件”。

要添加語言,只需在此處添加即可。

export const LOCALES_SETTING: LocaleSetting = {
  ja: {
    label: '日本語',
    lang: 'ja',
    oglocale: 'ja_JP',
    path: 'ja',
  },
  en: {
    label: 'English',
    lang: 'en',
    oglocale: 'en_US',
    path: 'en',
  },
  de: {
    label: 'Deutsch',
    lang: 'de',
    oglocale: 'de_DE',
    path: 'de',
  },
  es: {
    label: 'Español',
    lang: 'es',
    oglocale: 'es_ES',
    path: 'es',
  },
  cn: {
    label: '简体中文',
    lang: 'zh-CN',
    oglocale: 'zh_CN',
    path: 'zh-cn',
  },
  tw: {
    label: '繁體中文',
    lang: 'zh-TW',
    oglocale: 'zh_TW',
    path: 'zh-tw',
  },
};

實作語言切換器

語言選擇下拉式選單也是根據 i18n 設定檔產生的。標籤將是所選項目的名稱,因此我們不希望翻譯它。所以,我們加入了一個流程,用標籤值覆寫它。 (translate="no" 與雲端翻譯 API 不相容。)

順便說一下,有人建議我“在下拉式選單中添加國旗”,我也嘗試這麼做了,但似乎用國旗來切換語言是一種反模式。例如,如果一個講德語的用戶同時也是奧地利用戶,他們可能會對德國國旗感到困惑,所以國家和語言並不一定匹配。你這麼一說,確實如此。在某些情況下,這可能是個敏感問題。

快取以最大限度地減少 API 使用

至此,多語言文本生成機制已基本完成。然而,問題在於成本。

透過反覆試驗和不斷構建,API 使用費很快就超過了 10,000 日元。

因此,在建構時,API 處理的日文和翻譯的組合會被緩存。translate-cache.json下次建置時,將套用此 JSON 資料。如果缺少此數據,則會呼叫 API 並將結果新增至 JSON 資料。

它將以這種方式保存。

{
  "en:UIデザイン": "UI Design",
  "en:私たちについて": "About Us",
  "en:サービス": "Service",
  ...
}

這大大降低了成本!根據更新頻率,營運成本每月只需幾百日元。

操作說明

在內容管理系統 (CMS) 中新增文章並使用部署鉤子進行建置時,伺服器只能引用 Git 上的舊快取檔案。因此,我們決定嚴格執行在新增內容時先在本地構建,然後將更新後的快取檔案推送到 Git 的操作規則。

控制錯誤翻譯

正如機器翻譯的常態,偶爾會出現一些奇怪的翻譯。
專有名詞的拼字有明顯的不一致之處,例如公司名稱“Liberogic”有時被寫成“Liberlogic”或“Liberogic”,公司狀態符號(有限公司、有限公司等)也沒有標準化。

雲端翻譯 API 雖然具備詞彙表功能,但它僅輔助機器翻譯,無法提供完整、精細的控制。此外,它不僅需要上傳 CSV 文件,每次還需要執行命令來重新建立資源,這對於不熟悉 Web 的維運人員來說非常困難。

電子表格整合以實現可靠控制

因此,我們將語言和正確/錯誤訊息彙編到一個電子表格中,在建置過程中以 CSV 格式檢索該電子表格,並執行文字替換以覆寫和更正符號。

這意味著管理員只需更新電子表格,即可在一定程度上控制翻譯,而無需修改任何程式碼。

概括

經過一番嘗試,我利用谷歌雲端翻譯API創建了一個比預期更實用的自動翻譯系統。對於經濟高效且簡單的多語言支援來說,我認為它完全足夠了!

(總統表示他想在RTL電視台增加阿拉伯語支持,但這將是一個大工程。)

撰稿人

他從桌面排版領域轉戰網頁設計,迅速成為一位技藝精湛的“大師”,精通標記語言、前端設計、方向指導和無障礙設計。自 Liberlogic 創立以來,他一直活躍於各個領域,如今已成為公司內部的活字典。最近,他沉迷於探索如何利用提示來提高效率,並思考著「我們能否更依賴人工智慧來實現無障礙設計?」他的技術和思維仍在不斷發展。

Futa

IAAP認證的Web無障礙專家(WAS)/標記工程師/前端工程師/網站總監

看看這位員工的文章

我們以可靠的團隊結構和快速的回​​應能力而自豪。

在 Liberogic,我們經驗豐富的員工積極推動專案進展,這也是我們受到客戶高度評價的原因。
我們確保專案經理和主管得到合理分配,以確保整個專案的順利進行。 我們避免因全額承諾而導致不必要的成本增加,並將資源分配給合適的人員和合適的職位,並以快速掌握工作內容、創建和提交預算而聞名。

請注意,我們不積極參與SES式的現場工作。

我們支援幾乎所有主流的專案管理和聊天工具,包括 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom 和 Webex。

在使用 SES 和離岸的大型專案中您是否遇到任何技術問題或擔心如何解決這些問題?

案例研究