# 多語言支援（i18n）

> ⚠️ **此文件已遷移**
>
> 本文件內容已整合至新的文件結構，請參閱：
>
> - 🌐 [多語言介面支援](功能說明/多語言.md)
>
> 此文件將在未來版本中移除。

---

ConvertX-CN 支援 **65 種語言**，是目前最完整的多語言檔案轉換服務。

---

## 支援語言列表

### 東亞語言（5 種）

| 代碼    | 語言             | 原生名稱 |
| ------- | ---------------- | -------- |
| `zh-TW` | 繁體中文（預設） | 繁體中文 |
| `zh-CN` | 簡體中文         | 简体中文 |
| `en`    | 英文             | English  |
| `ja`    | 日文             | 日本語   |
| `ko`    | 韓文             | 한국어   |

### 西歐語言（10 種）

| 代碼 | 語言         | 原生名稱   |
| ---- | ------------ | ---------- |
| `de` | 德文         | Deutsch    |
| `fr` | 法文         | Français   |
| `es` | 西班牙文     | Español    |
| `it` | 義大利文     | Italiano   |
| `pt` | 葡萄牙文     | Português  |
| `nl` | 荷蘭文       | Nederlands |
| `ca` | 加泰隆尼亞文 | Català     |
| `eu` | 巴斯克文     | Euskara    |
| `gl` | 加利西亞文   | Galego     |
| `mt` | 馬爾他文     | Malti      |

### 北歐語言（5 種）

| 代碼 | 語言   | 原生名稱 |
| ---- | ------ | -------- |
| `sv` | 瑞典文 | Svenska  |
| `da` | 丹麥文 | Dansk    |
| `fi` | 芬蘭文 | Suomi    |
| `no` | 挪威文 | Norsk    |
| `is` | 冰島文 | Íslenska |

### 東歐語言（12 種）

| 代碼 | 語言         | 原生名稱    |
| ---- | ------------ | ----------- |
| `ru` | 俄文         | Русский     |
| `pl` | 波蘭文       | Polski      |
| `uk` | 烏克蘭文     | Українська  |
| `cs` | 捷克文       | Čeština     |
| `hu` | 匈牙利文     | Magyar      |
| `ro` | 羅馬尼亞文   | Română      |
| `bg` | 保加利亞文   | Български   |
| `hr` | 克羅埃西亞文 | Hrvatski    |
| `sk` | 斯洛伐克文   | Slovenčina  |
| `sl` | 斯洛維尼亞文 | Slovenščina |
| `sr` | 塞爾維亞文   | Српски      |
| `mk` | 馬其頓文     | Македонски  |

### 波羅的海語言（3 種）

| 代碼 | 語言       | 原生名稱 |
| ---- | ---------- | -------- |
| `lt` | 立陶宛文   | Lietuvių |
| `lv` | 拉脫維亞文 | Latviešu |
| `et` | 愛沙尼亞文 | Eesti    |

### 其他歐洲語言（4 種）

| 代碼 | 語言         | 原生名稱 |
| ---- | ------------ | -------- |
| `el` | 希臘文       | Ελληνικά |
| `sq` | 阿爾巴尼亞文 | Shqip    |
| `ga` | 愛爾蘭文     | Gaeilge  |
| `cy` | 威爾斯文     | Cymraeg  |

### 中東語言（4 種）

| 代碼 | 語言     | 原生名稱 |
| ---- | -------- | -------- |
| `ar` | 阿拉伯文 | العربية  |
| `he` | 希伯來文 | עברית    |
| `fa` | 波斯文   | فارسی    |
| `tr` | 土耳其文 | Türkçe   |

### 南亞語言（10 種）

| 代碼 | 語言         | 原生名稱 |
| ---- | ------------ | -------- |
| `hi` | 印地文       | हिन्दी   |
| `bn` | 孟加拉文     | বাংলা    |
| `ta` | 泰米爾文     | தமிழ்    |
| `te` | 泰盧固文     | తెలుగు   |
| `mr` | 馬拉地文     | मराठी    |
| `gu` | 古吉拉特文   | ગુજરાતી  |
| `kn` | 卡納達文     | ಕನ್ನಡ    |
| `ml` | 馬拉雅拉姆文 | മലയാളം   |
| `ne` | 尼泊爾文     | नेपाली   |
| `si` | 僧伽羅文     | සිංහල    |

### 東南亞語言（8 種）

| 代碼  | 語言     | 原生名稱         |
| ----- | -------- | ---------------- |
| `th`  | 泰文     | ไทย              |
| `vi`  | 越南文   | Tiếng Việt       |
| `id`  | 印尼文   | Bahasa Indonesia |
| `ms`  | 馬來文   | Bahasa Melayu    |
| `fil` | 菲律賓文 | Filipino         |
| `my`  | 緬甸文   | မြန်မာ           |
| `km`  | 高棉文   | ខ្មែរ            |
| `lo`  | 寮文     | ລາວ              |

### 非洲語言（4 種）

| 代碼 | 語言       | 原生名稱  |
| ---- | ---------- | --------- |
| `af` | 南非語     | Afrikaans |
| `sw` | 斯瓦希里文 | Kiswahili |
| `am` | 阿姆哈拉文 | አማርኛ      |
| `zu` | 祖魯文     | isiZulu   |

---

## 語言切換

### 方法一：介面切換

1. 在網站右上角的導航列找到語言圖示（🌐）
2. 點擊後選擇偏好語言
3. 語言偏好會自動保存到 Cookie 中

### 方法二：URL 參數

```
http://localhost:3000/?lang=ja
```

### 方法三：瀏覽器設定

ConvertX-CN 會自動偵測瀏覽器的語言設定。

---

## 自動偵測

首次訪問時，系統會根據以下優先順序選擇語言：

1. Cookie 中儲存的語言偏好
2. URL 參數中的 `lang` 值
3. 瀏覽器的 `Accept-Language` 標頭
4. 預設語言（繁體中文 `zh-TW`）

---

## 新增語言

如要添加新語言支援，請按以下步驟：

### 1. 建立翻譯檔案

在 `src/locales/` 目錄新增語言檔案，例如 `xx.json`：

```json
{
  "common": {
    "appName": "ConvertX-CN",
    "poweredBy": "Powered by",
    "version": "v{version}",
    "loading": "...",
    ...
  },
  "nav": {
    "history": "...",
    "account": "...",
    ...
  },
  ...
}
```

### 2. 在 index.ts 中註冊

編輯 `src/i18n/index.ts`：

```typescript
// 導入新語言檔案
import xx from "../locales/xx.json";

// 在 SupportedLocale 類型中添加
export type SupportedLocale = "en" | "zh-TW" | ... | "xx";

// 在 supportedLocales 陣列中添加
export const supportedLocales: LocaleConfig[] = [
  // ...
  { code: "xx", name: "Language Name", nativeName: "原生名稱" },
];

// 在 translations 物件中註冊
const translations: Record<SupportedLocale, TranslationData> = {
  // ...
  xx: xx as TranslationData,
};
```

### 3. 測試

```bash
bun run dev
# 訪問 http://localhost:3000/?lang=xx
```

---

## 語言選擇器 UI 規範

為確保語言切換體驗一致，ConvertX-CN 的語言選擇器遵循以下規範：

### 視覺設計

| 項目         | 規範                          |
| ------------ | ----------------------------- |
| 圖示大小     | 與旁邊文字高度一致（h-6 w-6） |
| 下拉選單背景 | 完全不透明（bg-neutral-800）  |
| 捲動條       | 明確可見的 scrollbar 樣式     |
| 最大高度     | 320px，超過則顯示捲動條       |

### 行為規範

- Setup / Login / 主頁使用同一套語言選擇器組件
- 語言切換後自動重新載入頁面
- 語言偏好儲存於 Cookie，跨頁面保持一致
- 預設根據瀏覽器語言自動偵測

### 已知問題修復（v0.1.9）

- 語言圖示尺寸過小 → 已修復
- 下拉選單半透明 → 已修復
- 捲動條不明顯 → 已新增 scrollbar 樣式

---

## 翻譯 Fallback

如果某個翻譯鍵缺失，系統會：

1. 嘗試使用英文（`en`）翻譯
2. 如果英文也缺失，顯示鍵名（如 `nav.history`）

---

## 貢獻翻譯

歡迎提交 Pull Request 來新增或改進翻譯！

### 翻譯指南

1. **完整翻譯**：確保所有鍵都有翻譯
2. **保留佔位符**：`{version}`、`{count}` 等佔位符不要翻譯
3. **自然表達**：使用該語言的自然表達方式
4. **一致性**：同一個詞在不同地方使用相同翻譯
5. **測試**：在實際介面中測試翻譯效果

### 提交流程

1. Fork 此專案
2. 建立新語言檔案或修改現有翻譯
3. 測試確認無誤
4. 提交 Pull Request
