使用 Astro Build 創造通往國際化的動態路線 (i)

WBOY
發布: 2024-08-18 00:00:02
原創
963 人瀏覽過

Criando rotas dinâmicas para internacionalização (i) com Astro Build

如果您想閱讀這篇英文文章,請到這裡

我最近開始學習 Astro 創建一個儀表板風格的專案。

我真的很想在這個專案中實現國際化(i18n)——目標是讓任何人都能夠使用它,無論語言如何。

問題

Astro 對 i18n 的支援非常好。它的工作原理類似於 Next.js 或任何其他基於檔案/資料夾結構進行路由的框架。

所以,如果我們想要一個英文頁面和葡萄牙語頁面,我們可以這樣組織我們的文件:

雷雷

每個頁面都有自己的 i18n 字串——酷!

但這就是我的問題開始的地方:我不想複製我的所有頁面;我只想更改這些頁面上的字串。

我需要類似 /[any-language-flag]/all-my-routes 的東西。

你可能會問,「為什麼不使用像react-intl這樣的東西呢?」我的答案是,我想充分利用 Astro 引擎,尤其是 SSG/SSR,並避免使用任何客戶端元件。一般來說,這些框架使用React Context,它只在客戶端渲染。

嘗試與失敗

首先,我閱讀了Astro關於i18n的食譜並查看了一些社群庫來解決這個問題。

我嘗試的第一個庫是 astro-i18next,它聽起來正是我需要的!

基於設定檔中的數組,astro-i18next 在建置時會產生我的 i18n 頁面,因此我只需要編寫一次程式碼,不用擔心克隆頁面。

問題是 astro-i18next 似乎已存檔或不再維護。有很多問題,最後一次提交已經是一年多前了。

解決方案

嘗試其他庫(astro-i18n 獲得榮譽獎)後,我發現了 Paraglide,它改變了我的專案。

我選滑翔傘是因為:

  • 它是類型安全的,所以我可以將它與 TypeScript 一起使用並享受自動完成功能。
  • 它將 i18n 字串轉換為函數,因此如果字串鍵發生更改,我的建置將會失敗,從而儘早捕獲錯誤。
  • 使用 i18n 函數可以更好地進行樹搖動,刪除未使用的函數。
  • 有 VS Code 擴展,提升開發體驗。

注意:你也可以在 JS 專案中使用 Paraglide,而且它也支援 Next.js。

安裝和設定後,我使用了這樣的訊息:

雷雷

但是,這並沒有解決我的路由問題 - 我仍在為我想要添加的每種語言克隆我的頁面。

為了解決這個問題,我將專案更改為在根路由中使用動態路由,因此我的所有路由現在都以語言標誌開頭。

我的資料夾結構如下:

雷雷

此變更後,Paraglide 可以自動取得路線參數語言:

  • http://localhost:4321/en/login
  • http://localhost:4321/pt-br/login

現在我只需在 astro.config.ts 中配置它並翻譯我的字串檔案即可新增語言。

但是我還有兩個問題要解決:

  1. 當使用者第一次造訪 http://localhost:4321/ 時,沒有語言標誌。
  2. 如果使用者更改特定路線上的語言,我需要將它們保持在同一路線上(例如 /en/create-account 應重定向到 /pt-br/create-account 或 /pt-br/criar-conta)。

語言重定向中介軟體

為了解決第一語言重新導向問題,我使用了 Astro 中介軟體。

在 src/middleware/index.ts 中,我加入了這段程式碼:

雷雷

具有目前路線的語言選擇器

為了讓使用者在切換語言時保持相同的路線,我加入了這個元件:

雷雷

此外,我們也可以使用 Paraglide 訊息功能中的第二個參數來翻譯這些訊息:

雷雷

注意事項

我不認為我的解決方案是最好的,特別是因為我還在學習Astro,所以可能還有其他解決方案。如果您知道,請評論,我會嘗試:)

感謝您閱讀這篇文章!如果有任何疑問,請評論,我很樂意回答。

以上是使用 Astro Build 創造通往國際化的動態路線 (i)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!