Skip to content

Commit

Permalink
i18n(zh-tw): update astro-pages.mdx translation (withastro#6980)
Browse files Browse the repository at this point in the history
* i18n(zh-tw): update `astro-pages.mdx` translation

* Fix Markdown formatting

---------

Co-authored-by: Yan Thomas <[email protected]>
  • Loading branch information
mingjunlu and yanthomasdev authored Feb 23, 2024
1 parent 60682ac commit efc8847
Showing 1 changed file with 108 additions and 19 deletions.
127 changes: 108 additions & 19 deletions src/content/docs/zh-tw/basics/astro-pages.mdx
Original file line number Diff line number Diff line change
@@ -1,35 +1,47 @@
---
title: 頁面
description: Astro 頁面的介紹
description: Astro 頁面簡介
i18nReady: true
---

**頁面** 是在你 Astro 專案的 `src/pages/` 子目錄下的檔案。他們用來處理路由、資料載入以及所有你網站內的頁面版面。
import ReadMore from '~/components/ReadMore.astro';
import Since from '~/components/Since.astro'

**頁面** 是 Astro 專案 `src/pages/` 子目錄下的檔案,用來處理路由、資料載入以及網站內所有頁面的版面。

## 支援的頁面檔案類型

Astro 支援下列在 `src/pages/` 目錄裡的檔案類型:
- [`.astro`](#astro-頁面)
- [`.md`](#markdownmdx-頁面)
- `.mdx` (在安裝 [MDX 整合](/zh-tw/guides/integrations-guide/mdx/#installation)的情況下)
- `.mdx`(在安裝 [MDX 整合](/zh-tw/guides/integrations-guide/mdx/#installation)的情況下)
- [`.html`](#html-頁面)
- `.js`/`.ts` (作為 [endpoints](/zh-tw/guides/endpoints/)
- `.js`/`.ts`(作為[端點](/zh-tw/guides/endpoints/)

## 基於檔案的路由

Astro 使用了一個路由策略叫 **基於檔案的路由(file-based routing)** 。每個在你 `src/pages/` 目錄下的檔案都會變成你網站的 endpoint,而其會根據檔案自己的路徑而定。
Astro 使用**基於檔案的路由**策略(file-based routing)。每個 `src/pages/` 目錄下的檔案,都會根據檔案的路徑,變成網站的端點。

如果你的內容位於[內容合集](/zh-tw/guides/content-collections/)[CMS](/zh-tw/guides/cms/),也能透過[動態路由](/zh-tw/guides/routing/#dynamic-routes)功能,讓單一路由檔案產生多個頁面。

<ReadMore>進一步了解 [Astro 的路由](/zh-tw/guides/routing/)。</ReadMore>

### 連結至頁面

你可以用一般的 HTML [`<a>` 元素](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)連結到你網站的其他頁面。記得使用**相對於根網域的網址**,而非檔案相對路徑。

你可以寫一個標準 HTML [`<a>` 元素](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)到你的 component 範本來連結頁面彼此。
舉例來說,如果要從 `example.com` 的其他頁面連到 `https://example.com/authors/sonali/`

📚 閱讀更多關於 [Astro 的路由](/zh-tw/guides/routing/)
```astro title="src/pages/index.astro"
Read more <a href="/authors/sonali/">about Sonali</a>.
```

## Astro 頁面

Astro 頁面使用了 `.astro` 的副檔名,且其和 [Astro components](/zh-tw/basics/astro-components/) 支援相同的功能
Astro 頁面使用 `.astro` 副檔名,支援的功能同 [Astro 元件](/zh-tw/basics/astro-components/)

```astro
```astro title="src/pages/index.astro"
---
// Example: src/pages/index.astro
---
<html lang="en">
<head>
Expand All @@ -41,25 +53,29 @@ Astro 頁面使用了 `.astro` 的副檔名,且其和 [Astro components](/zh-t
</html>
```

為了在每個頁面避免重複使用到相同的 HTML 元素,你可以將一般的 `<head>``<body>` 移到你自己的[版面 components](/zh-tw/basics/layouts/)。你可以隨自己喜歡或多或少使用這些版面 components。
Astro 頁面必須產生完整的 HTML 文件,因此 Astro 預設會替 `src/pages/` 的 Astro 元件加上必要的 `<!DOCTYPE html>``<head>` 標籤(除非檔案已包含這些標籤)。如果不想要這個行為,可以將 Astro 元件標記為[局部](#局部頁面)頁面。

為了避免在每個頁面避免寫相同的 HTML 元素,你可以將常用到的 `<head>``<body>` 移到你自己的[版面元件](/zh-tw/basics/layouts/),數量不限。

```astro {3} /</?MySiteLayout>/
---
// Example: src/pages/index.astro
// src/pages/index.astro
import MySiteLayout from '../layouts/MySiteLayout.astro';
---
<MySiteLayout>
<p>我的頁面內容包在一層版面裡!</p>
</MySiteLayout>
```

📚 閱讀更多關於 Astro 內的 [版面 components](/zh-tw/basics/layouts/)
<ReadMore>進一步了解[版面元件](/zh-tw/basics/layouts/)</ReadMore>

## Markdown/MDX 頁面

Astro 也會將任何 `src/pages/` 內的 Markdown(`.md`)檔作為你最後網站的頁面。如果你有[安裝 MDX 整合](/zh-tw/guides/integrations-guide/mdx/#installation)的話,它也會將 MDX(`.mdx`)檔做同樣的事。這普遍用來做成大量文字的頁面,像是部落格文章和文件。
Astro 也會將任何 `src/pages/` 內的 Markdown(`.md`)檔作為你最後網站的頁面。如果你有[安裝 MDX 整合](/zh-tw/guides/integrations-guide/mdx/#installation)的話,它也會對 MDX(`.mdx`)檔做同樣的事。這普遍用於以文字為主的頁面,像是部落格文章和文件。

此外,`src/content/`[Markdown 或 MDX 頁面內容合集](/zh-tw/guides/content-collections/)可以[動態產生頁面](/zh-tw/guides/routing/#dynamic-routes)

頁面版面在 [Markdown 檔](#markdownmdx-頁面)特別地有用。Markdown 檔可以使用特殊的 `layout` frontmatter 屬性去指定一個 [版面 component](/zh-tw/basics/layouts/)其會將他們的 Markdown 內容包進一個完整的 `<html>...</html>` 的頁面檔案裡
頁面版面在 [Markdown 檔](#markdownmdx-頁面)特別地有用。Markdown 檔可以使用特殊的 `layout` frontmatter 屬性指定 [版面元件](/zh-tw/basics/layouts/)進而將 Markdown 內容包進完整的 `<html>...</html>` 頁面檔案裡

```md {3}
---
Expand All @@ -72,15 +88,88 @@ title: '我的 Markdown 頁面'
這是我的網頁,用 **Markdown** 寫的喔!
```

📚 閱讀更多關於 Astro 內的 [Markdown](/zh-tw/guides/markdown-content/)
<ReadMore>進一步了解如何在 Astro 使用 [Markdown](/zh-tw/guides/markdown-content/)</ReadMore>

## HTML 頁面

擁有 `.html` 副檔名的檔案可以放置在 `src/pages/` 內,並直接作為你網站的頁面。但要注意的是,有些關鍵的 Astro 功能在 [HTML Components](/zh-tw/basics/astro-components/#html-components) 中是不被支援的
擁有 `.html` 副檔名的檔案可以放置在 `src/pages/` 內,直接作為網站的頁面,但要注意 [HTML 元件](/zh-tw/basics/astro-components/#html-components) 不支援部分 Astro 功能

## 自訂 404 錯誤頁面

你可以新增一個 `404.astro``404.md` 檔案到 `/src/pages` 裡來自定義一個 404 錯誤網站。
如要自訂 404 錯誤頁面,可以在 `/src/pages` 新增 `404.astro``404.md`

構建時會產生 `404.html` 頁面,大多數的[部署服務](/zh-tw/guides/deploy/)會找到並使用該檔案。

## 局部頁面

<p><Since v="3.4.0" /></p>

:::caution
局部頁面應該搭配 [htmx](https://htmx.org/)[Unpoly](https://unpoly.com/) 這種前端套件一起使用。如果不介意寫低階前端 JavaScript 的話,你也可以使用它。考量到這點,它算是進階功能。

除此之外,如果元件包含 scoped styles 或 scripts,則不應使用局部頁面,因為那些元素不會包含在最終輸出的 HTML。如果需要 scoped styles,最好使用一般非局部的頁面,再搭配知道如何把內容合併到 head 的前端套件。
:::

局部頁面是位於 `src/pages/` 的頁面元件,但不是用來渲染完整的頁面。

和位於該目錄之外的其他元件一樣,這些檔案不會自動包含 `<!DOCTYPE html>``<head>`、scoped styles 和 scripts。

由於它們位於 `src/pages/` 目錄,產生的 HTML 仍然可透過對應到檔案路徑的網址存取。因此渲染套件(例:htmx、Stimulus、jQuery)能夠在不重新整理或前往新頁面的前提下,於客戶端存取並動態載入 HTML 片段。

局部頁面搭配渲染套件同樣能夠開發動態內容,是不使用 [Astro 群島](/zh-tw/concepts/islands/)[`<script>` 標籤](/zh-tw/guides/client-side-scripts/) 時的替代方案。

能夠匯出值(例:`.astro``.mdx`)的頁面檔案即可標記為局部頁面。

`src/pages/` 目錄下的檔案內匯出以下指定值,便可將檔案設定為局部頁面:

這將會建立出一個 `404.html` 頁面。大多數的[部署服務](/zh-tw/guides/deploy/)會找到並使用它。
```astro title="src/pages/partial.astro" ins={2}
---
export const partial = true;
---
<li>I'm a partial!</li>
```

`export const partial` 要能夠靜態識別。合法的值為:

- 布林值 __`true`__
- 透過 import.meta.env 存取的環境變數,例如 `import.meta.env.USE_PARTIALS`

### 與套件搭配使用

搭配 [htmx](https://htmx.org/) 這種套件,局部頁面可用來動態更新頁面部分區域。

以下範例中,`hx-post` 屬性對應到局部頁面的網址,該頁面的內容將會用來更新這個頁面特定的 HTML 元素。

```astro title="src/pages/index.astro" 'hx-post="/partials/clicked/"'
<html>
<head>
<title>My page</title>
<script src="https://unpkg.com/[email protected]"
integrity="sha384-FhXw7b6AlE/jyjlZH5iHa/tTe9EpJ1Y55RjcgPbjeWMskSxZt1v9qkxLJWNJaGni"
crossorigin="anonymous"></script>
</head>
</html>
<section>
<div id="parent-div">Target here</div>
<button hx-post="/partials/clicked/"
hx-trigger="click"
hx-target="#parent-div"
hx-swap="innerHTML"
>
Click Me!
</button>
</section>
```

對應到檔案路徑的 `.astro` 局部頁面必須存在,且要明確匯出值,將頁面標記為局部頁面。

```astro title="src/pages/partials/clicked.astro" {2}
---
export const partial = true;
---
<div>I was clicked!</div>
```

細節請見 [htmx 文件](https://htmx.org/docs/)

0 comments on commit efc8847

Please sign in to comment.