feat(v0.1.4): Fix i18n imports + Default open registration
## Changes ### i18n Module Fixes - Fix import paths in service.ts, languageSelector.tsx, header.tsx, base.tsx, results.tsx - Change from '../i18n' to '../i18n/index' or './index' for proper module resolution ### Registration (Breaking Change) - Change ACCOUNT_REGISTRATION default from false to true (out-of-box ready) - Login and Register pages now both visible by default ### Version Bump - Update package.json to v0.1.4 - Update CHANGELOG.md with v0.1.4 release notes - Update README.md and docs with new version numbers ### Build Verification - bun run build: PASSED - Docker build: PASSED - TypeScript compilation: PASSED (no errors)
This commit is contained in:
parent
5c68308c36
commit
558d638df8
17 changed files with 266 additions and 234 deletions
30
CHANGELOG.md
30
CHANGELOG.md
|
|
@ -1,5 +1,35 @@
|
|||
# Changelog
|
||||
|
||||
## [0.1.4](https://github.com/pi-docket/ConvertX-CN/releases/tag/v0.1.4) (2026-01-20)
|
||||
|
||||
### Features
|
||||
|
||||
- **i18n**: 擴展支援 65 種語言(從 5 種大幅擴展)
|
||||
- 歐洲語系:de, fr, es, it, pt, ru, nl, pl, uk, cs, sv, da, fi, no, el, hu, ro, bg, hr, sk, sl, lt, lv, et, sr, ca, eu, gl, is, ga, cy, mt, mk, sq
|
||||
- 中東語系:ar, he, fa, tr
|
||||
- 南亞語系:hi, bn, ta, te, mr, gu, kn, ml, ne, si
|
||||
- 東南亞語系:th, vi, id, ms, fil, my, km, lo
|
||||
- 非洲語系:af, sw, am, zu
|
||||
- **註冊功能**: 預設開放使用者註冊(開箱即用)
|
||||
- **文件**: 完整的文件系統
|
||||
- 新增 getting-started.md 快速入門指南
|
||||
- 新增 docker.md Docker 部署指南
|
||||
- 新增 environment-variables.md 環境變數說明
|
||||
- 新增 url-id-and-storage.md 儲存結構說明
|
||||
- 新增 advanced-usage.md 進階使用指南
|
||||
- 更新 i18n.md 65 種語言清單
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- 修復 i18n 模組導入路徑問題
|
||||
- 修復 TypeScript 編譯錯誤
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- `ACCOUNT_REGISTRATION` 預設值從 `false` 改為 `true`(開箱即用)
|
||||
|
||||
---
|
||||
|
||||
## [0.1.3](https://github.com/C4illin/ConvertX/releases/tag/v0.1.3) (2026-01-20)
|
||||
|
||||
### Features
|
||||
|
|
|
|||
74
README.md
74
README.md
|
|
@ -20,14 +20,14 @@ ConvertX-CN 是基於 [C4illin/ConvertX](https://github.com/C4illin/ConvertX)
|
|||
|
||||
### 主要特色
|
||||
|
||||
| 特色 | 說明 |
|
||||
|------|------|
|
||||
| 🌍 **65+ 語言支援** | 繁體中文、簡體中文、英文、日文、韓文等 65 種語言 |
|
||||
| 📦 **完整內建** | LibreOffice、FFmpeg、Pandoc、Calibre 等 20+ 轉換器 |
|
||||
| 🎨 **CJK 字型** | Noto CJK、微軟核心字型、標楷體等中日韓字型 |
|
||||
| 🔤 **OCR 支援** | Tesseract + 多語言語言包 |
|
||||
| ⚡ **LaTeX 完整版** | TexLive Full,支援所有 LaTeX 需求 |
|
||||
| 🐳 **開箱即用** | 一個 Docker 命令即可啟動 |
|
||||
| 特色 | 說明 |
|
||||
| ------------------- | -------------------------------------------------- |
|
||||
| 🌍 **65+ 語言支援** | 繁體中文、簡體中文、英文、日文、韓文等 65 種語言 |
|
||||
| 📦 **完整內建** | LibreOffice、FFmpeg、Pandoc、Calibre 等 20+ 轉換器 |
|
||||
| 🎨 **CJK 字型** | Noto CJK、微軟核心字型、標楷體等中日韓字型 |
|
||||
| 🔤 **OCR 支援** | Tesseract + 多語言語言包 |
|
||||
| ⚡ **LaTeX 完整版** | TexLive Full,支援所有 LaTeX 需求 |
|
||||
| 🐳 **開箱即用** | 一個 Docker 命令即可啟動 |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -78,13 +78,13 @@ docker compose up -d
|
|||
|
||||
ConvertX-CN 支援 **65 種語言**,包括:
|
||||
|
||||
| 區域 | 語言 |
|
||||
|------|------|
|
||||
| **東亞** | 繁體中文(預設)、简体中文、日本語、한국어 |
|
||||
| **歐洲** | English, Deutsch, Français, Español, Italiano, Português, Русский, Polski, Nederlands, Українська, Čeština, Svenska, Dansk, Suomi, Norsk, Ελληνικά, Magyar, Română, Български, Hrvatski, Slovenčina, Slovenščina, Lietuvių, Latviešu, Eesti, Српски, Català, Euskara, Galego, Íslenska, Gaeilge, Cymraeg, Malti, Македонски, Shqip |
|
||||
| **中東/南亞** | العربية, עברית, فارسی, Türkçe, हिन्दी, বাংলা, தமிழ், తెలుగు, मराठी, ગુજરાતી, ಕನ್ನಡ, മലയാളം, नेपाली, සිංහල |
|
||||
| **東南亞** | ไทย, Tiếng Việt, Bahasa Indonesia, Bahasa Melayu, Filipino, မြန်မာ, ខ្មែរ, ລາວ |
|
||||
| **非洲** | Afrikaans, Kiswahili, አማርኛ, isiZulu |
|
||||
| 區域 | 語言 |
|
||||
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **東亞** | 繁體中文(預設)、简体中文、日本語、한국어 |
|
||||
| **歐洲** | English, Deutsch, Français, Español, Italiano, Português, Русский, Polski, Nederlands, Українська, Čeština, Svenska, Dansk, Suomi, Norsk, Ελληνικά, Magyar, Română, Български, Hrvatski, Slovenčina, Slovenščina, Lietuvių, Latviešu, Eesti, Српски, Català, Euskara, Galego, Íslenska, Gaeilge, Cymraeg, Malti, Македонски, Shqip |
|
||||
| **中東/南亞** | العربية, עברית, فارسی, Türkçe, हिन्दी, বাংলা, தமிழ், తెలుగు, मराठी, ગુજરાતી, ಕನ್ನಡ, മലയാളം, नेपाली, සිංහල |
|
||||
| **東南亞** | ไทย, Tiếng Việt, Bahasa Indonesia, Bahasa Melayu, Filipino, မြန်မာ, ខ្មែរ, ລາວ |
|
||||
| **非洲** | Afrikaans, Kiswahili, አማርኛ, isiZulu |
|
||||
|
||||
語言會根據瀏覽器設定自動偵測,也可透過右上角選單手動切換。
|
||||
|
||||
|
|
@ -92,16 +92,16 @@ ConvertX-CN 支援 **65 種語言**,包括:
|
|||
|
||||
## 📦 內建轉換器
|
||||
|
||||
| 轉換器 | 用途 | 輸入格式 | 輸出格式 |
|
||||
|--------|------|----------|----------|
|
||||
| FFmpeg | 影音 | ~472 | ~199 |
|
||||
| ImageMagick | 圖片 | 245 | 183 |
|
||||
| GraphicsMagick | 圖片 | 167 | 130 |
|
||||
| LibreOffice | 文件 | 41 | 22 |
|
||||
| Pandoc | 文件 | 43 | 65 |
|
||||
| Calibre | 電子書 | 26 | 19 |
|
||||
| Inkscape | 向量圖 | 7 | 17 |
|
||||
| Assimp | 3D 模型 | 77 | 23 |
|
||||
| 轉換器 | 用途 | 輸入格式 | 輸出格式 |
|
||||
| -------------- | ------- | -------- | -------- |
|
||||
| FFmpeg | 影音 | ~472 | ~199 |
|
||||
| ImageMagick | 圖片 | 245 | 183 |
|
||||
| GraphicsMagick | 圖片 | 167 | 130 |
|
||||
| LibreOffice | 文件 | 41 | 22 |
|
||||
| Pandoc | 文件 | 43 | 65 |
|
||||
| Calibre | 電子書 | 26 | 19 |
|
||||
| Inkscape | 向量圖 | 7 | 17 |
|
||||
| Assimp | 3D 模型 | 77 | 23 |
|
||||
|
||||
完整列表 → [docs/converters.md](docs/converters.md)
|
||||
|
||||
|
|
@ -109,24 +109,24 @@ ConvertX-CN 支援 **65 種語言**,包括:
|
|||
|
||||
## 📖 文件導覽
|
||||
|
||||
| 文件 | 說明 |
|
||||
|------|------|
|
||||
| [🚀 快速開始](docs/getting-started.md) | Docker 部署教學 |
|
||||
| [🐳 Docker 配置](docs/docker.md) | 完整 Docker 設定指南 |
|
||||
| [⚙️ 環境變數](docs/environment-variables.md) | 所有環境變數說明 |
|
||||
| [💾 儲存與 URL](docs/url-id-and-storage.md) | 檔案儲存機制說明 |
|
||||
| [🔧 進階用法](docs/advanced-usage.md) | 硬體加速、反向代理等 |
|
||||
| [🌍 多語言](docs/i18n.md) | i18n 語言設定與新增 |
|
||||
| [📦 轉換器列表](docs/converters.md) | 支援的轉換格式完整列表 |
|
||||
| 文件 | 說明 |
|
||||
| -------------------------------------------- | ---------------------- |
|
||||
| [🚀 快速開始](docs/getting-started.md) | Docker 部署教學 |
|
||||
| [🐳 Docker 配置](docs/docker.md) | 完整 Docker 設定指南 |
|
||||
| [⚙️ 環境變數](docs/environment-variables.md) | 所有環境變數說明 |
|
||||
| [💾 儲存與 URL](docs/url-id-and-storage.md) | 檔案儲存機制說明 |
|
||||
| [🔧 進階用法](docs/advanced-usage.md) | 硬體加速、反向代理等 |
|
||||
| [🌍 多語言](docs/i18n.md) | i18n 語言設定與新增 |
|
||||
| [📦 轉換器列表](docs/converters.md) | 支援的轉換格式完整列表 |
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker Image
|
||||
|
||||
| Tag | 說明 |
|
||||
|-----|------|
|
||||
| Tag | 說明 |
|
||||
| ----------------------------- | ---------- |
|
||||
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
||||
| `convertx/convertx-cn:v0.1.3` | 指定版本 |
|
||||
| `convertx/convertx-cn:v0.1.4` | 指定版本 |
|
||||
|
||||
> ⚠️ 由於內建完整依賴,Image 約 4-6 GB,首次下載需較長時間。
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ server {
|
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
|
||||
# 長時間連線支援(大檔案轉換)
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
|
|
@ -114,7 +114,7 @@ convert.example.com {
|
|||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
}
|
||||
|
||||
|
||||
request_body {
|
||||
max_size 0 # 無限制
|
||||
}
|
||||
|
|
@ -165,7 +165,7 @@ example.com {
|
|||
|
||||
```yaml
|
||||
environment:
|
||||
- MAX_CONVERT_PROCESS=4 # 最多同時 4 個轉換任務
|
||||
- MAX_CONVERT_PROCESS=4 # 最多同時 4 個轉換任務
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -177,8 +177,8 @@ environment:
|
|||
```yaml
|
||||
environment:
|
||||
- ALLOW_UNAUTHENTICATED=true
|
||||
- HIDE_HISTORY=true # 建議同時隱藏歷史
|
||||
- AUTO_DELETE_EVERY_N_HOURS=1 # 快速清理
|
||||
- HIDE_HISTORY=true # 建議同時隱藏歷史
|
||||
- AUTO_DELETE_EVERY_N_HOURS=1 # 快速清理
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -201,7 +201,7 @@ services:
|
|||
- shared-data:/app/data
|
||||
environment:
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
|
||||
|
||||
convertx-2:
|
||||
image: convertx/convertx-cn:latest
|
||||
volumes:
|
||||
|
|
@ -246,9 +246,9 @@ deploy:
|
|||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '4'
|
||||
cpus: "4"
|
||||
reservations:
|
||||
cpus: '1'
|
||||
cpus: "1"
|
||||
```
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -4,28 +4,28 @@ ConvertX-CN 完整版已內建以下所有轉換器,開箱即用。
|
|||
|
||||
## 轉換器列表
|
||||
|
||||
| 轉換器 | 用途 | 輸入格式數 | 輸出格式數 |
|
||||
| ------ | ---- | ---------- | ---------- |
|
||||
| [Inkscape](https://inkscape.org/) | 向量圖形 | 7 | 17 |
|
||||
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
|
||||
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
|
||||
| [Vips](https://github.com/libvips/libvips) | 圖片 | 45 | 23 |
|
||||
| [libheif](https://github.com/strukturag/libheif) | HEIF | 2 | 4 |
|
||||
| [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 |
|
||||
| [Calibre](https://calibre-ebook.com/) | 電子書 | 26 | 19 |
|
||||
| [LibreOffice](https://www.libreoffice.org/) | 文件 | 41 | 22 |
|
||||
| [Dasel](https://github.com/TomWright/dasel) | 資料檔案 | 5 | 4 |
|
||||
| [Pandoc](https://pandoc.org/) | 文件 | 43 | 65 |
|
||||
| [msgconvert](https://github.com/mvz/email-outlook-message-perl) | Outlook | 1 | 1 |
|
||||
| VCF to CSV | 聯絡人 | 1 | 1 |
|
||||
| [dvisvgm](https://dvisvgm.de/) | 向量圖形 | 4 | 2 |
|
||||
| [ImageMagick](https://imagemagick.org/) | 圖片 | 245 | 183 |
|
||||
| [GraphicsMagick](http://www.graphicsmagick.org/) | 圖片 | 167 | 130 |
|
||||
| [Assimp](https://github.com/assimp/assimp) | 3D 模型 | 77 | 23 |
|
||||
| [FFmpeg](https://ffmpeg.org/) | 影音 | ~472 | ~199 |
|
||||
| [Potrace](https://potrace.sourceforge.net/) | 點陣轉向量 | 4 | 11 |
|
||||
| [VTracer](https://github.com/visioncortex/vtracer) | 點陣轉向量 | 8 | 1 |
|
||||
| [Markitdown](https://github.com/microsoft/markitdown) | 文件 | 6 | 1 |
|
||||
| 轉換器 | 用途 | 輸入格式數 | 輸出格式數 |
|
||||
| --------------------------------------------------------------- | ---------- | ---------- | ---------- |
|
||||
| [Inkscape](https://inkscape.org/) | 向量圖形 | 7 | 17 |
|
||||
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
|
||||
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
|
||||
| [Vips](https://github.com/libvips/libvips) | 圖片 | 45 | 23 |
|
||||
| [libheif](https://github.com/strukturag/libheif) | HEIF | 2 | 4 |
|
||||
| [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 |
|
||||
| [Calibre](https://calibre-ebook.com/) | 電子書 | 26 | 19 |
|
||||
| [LibreOffice](https://www.libreoffice.org/) | 文件 | 41 | 22 |
|
||||
| [Dasel](https://github.com/TomWright/dasel) | 資料檔案 | 5 | 4 |
|
||||
| [Pandoc](https://pandoc.org/) | 文件 | 43 | 65 |
|
||||
| [msgconvert](https://github.com/mvz/email-outlook-message-perl) | Outlook | 1 | 1 |
|
||||
| VCF to CSV | 聯絡人 | 1 | 1 |
|
||||
| [dvisvgm](https://dvisvgm.de/) | 向量圖形 | 4 | 2 |
|
||||
| [ImageMagick](https://imagemagick.org/) | 圖片 | 245 | 183 |
|
||||
| [GraphicsMagick](http://www.graphicsmagick.org/) | 圖片 | 167 | 130 |
|
||||
| [Assimp](https://github.com/assimp/assimp) | 3D 模型 | 77 | 23 |
|
||||
| [FFmpeg](https://ffmpeg.org/) | 影音 | ~472 | ~199 |
|
||||
| [Potrace](https://potrace.sourceforge.net/) | 點陣轉向量 | 4 | 11 |
|
||||
| [VTracer](https://github.com/visioncortex/vtracer) | 點陣轉向量 | 8 | 1 |
|
||||
| [Markitdown](https://github.com/microsoft/markitdown) | 文件 | 6 | 1 |
|
||||
|
||||
> 註:FFmpeg 的格式數量包含部分重複格式。
|
||||
|
||||
|
|
@ -33,16 +33,16 @@ ConvertX-CN 完整版已內建以下所有轉換器,開箱即用。
|
|||
|
||||
ConvertX-CN 完整版已預載:
|
||||
|
||||
| 類別 | 內建內容 |
|
||||
| ---- | -------- |
|
||||
| **文件轉換** | LibreOffice (headless)、Pandoc |
|
||||
| **LaTeX** | TexLive Full(完整版,支援所有 LaTeX 需求) |
|
||||
| 類別 | 內建內容 |
|
||||
| ------------ | ---------------------------------------------------------------- |
|
||||
| **文件轉換** | LibreOffice (headless)、Pandoc |
|
||||
| **LaTeX** | TexLive Full(完整版,支援所有 LaTeX 需求) |
|
||||
| **OCR 識別** | Tesseract OCR + 繁體中文、簡體中文、日文、韓文、英文、德文語言包 |
|
||||
| **CJK 字型** | Noto CJK(中日韓)、Noto Emoji、微軟核心字型、標楷體 |
|
||||
| **影音轉換** | FFmpeg、ImageMagick、GraphicsMagick |
|
||||
| **向量圖形** | Inkscape、Potrace、VTracer、resvg |
|
||||
| **電子書** | Calibre |
|
||||
| **其他** | Ghostscript、MuPDF、Poppler、libheif、libjxl 等 |
|
||||
| **CJK 字型** | Noto CJK(中日韓)、Noto Emoji、微軟核心字型、標楷體 |
|
||||
| **影音轉換** | FFmpeg、ImageMagick、GraphicsMagick |
|
||||
| **向量圖形** | Inkscape、Potrace、VTracer、resvg |
|
||||
| **電子書** | Calibre |
|
||||
| **其他** | Ghostscript、MuPDF、Poppler、libheif、libjxl 等 |
|
||||
|
||||
## 新增轉換器
|
||||
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@ ConvertX-CN 提供預建的 Docker Image,包含所有轉換依賴。
|
|||
|
||||
### 可用 Tag
|
||||
|
||||
| Tag | 說明 |
|
||||
|-----|------|
|
||||
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
||||
| `convertx/convertx-cn:v0.1.3` | 指定版本號 |
|
||||
| `convertx/convertx-cn:v0.1.3-FULL` | 完整版(與 latest 相同) |
|
||||
| Tag | 說明 |
|
||||
| ---------------------------------- | ------------------------ |
|
||||
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
||||
| `convertx/convertx-cn:v0.1.4` | 指定版本號 |
|
||||
| `convertx/convertx-cn:v0.1.4-FULL` | 完整版(與 latest 相同) |
|
||||
|
||||
### Image 大小
|
||||
|
||||
|
|
@ -34,13 +34,13 @@ docker run -d \
|
|||
|
||||
### 參數說明
|
||||
|
||||
| 參數 | 說明 |
|
||||
|------|------|
|
||||
| `-d` | 背景執行 |
|
||||
| `--name convertx-cn` | 容器名稱 |
|
||||
| `-p 3000:3000` | 連接埠映射 |
|
||||
| 參數 | 說明 |
|
||||
| --------------------- | ---------- |
|
||||
| `-d` | 背景執行 |
|
||||
| `--name convertx-cn` | 容器名稱 |
|
||||
| `-p 3000:3000` | 連接埠映射 |
|
||||
| `-v ./data:/app/data` | 資料持久化 |
|
||||
| `-e TZ=Asia/Taipei` | 時區設定 |
|
||||
| `-e TZ=Asia/Taipei` | 時區設定 |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
## 安全性設定
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| `JWT_SECRET` | `randomUUID()` | 用於簽署 JWT 的密鑰字串。**生產環境請務必設定** |
|
||||
| `ACCOUNT_REGISTRATION` | `false` | 是否允許註冊新帳號 |
|
||||
| `HTTP_ALLOWED` | `false` | 是否允許 HTTP 連線(僅本地使用建議開啟) |
|
||||
| `ALLOW_UNAUTHENTICATED` | `false` | 是否允許未登入使用 |
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| ----------------------- | -------------- | ----------------------------------------------- |
|
||||
| `JWT_SECRET` | `randomUUID()` | 用於簽署 JWT 的密鑰字串。**生產環境請務必設定** |
|
||||
| `ACCOUNT_REGISTRATION` | `true` | 是否允許註冊新帳號(預設開放) |
|
||||
| `HTTP_ALLOWED` | `false` | 是否允許 HTTP 連線(僅本地使用建議開啟) |
|
||||
| `ALLOW_UNAUTHENTICATED` | `false` | 是否允許未登入使用 |
|
||||
|
||||
### 安全建議
|
||||
|
||||
```yaml
|
||||
# 生產環境
|
||||
# 生產環境(關閉註冊)
|
||||
environment:
|
||||
- JWT_SECRET=a-very-long-random-string-at-least-32-characters
|
||||
- ACCOUNT_REGISTRATION=false
|
||||
|
|
@ -28,9 +28,9 @@ environment:
|
|||
|
||||
## 檔案管理
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| `AUTO_DELETE_EVERY_N_HOURS` | `24` | 自動刪除超過 N 小時的檔案(0 = 停用) |
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| --------------------------- | ------ | ------------------------------------- |
|
||||
| `AUTO_DELETE_EVERY_N_HOURS` | `24` | 自動刪除超過 N 小時的檔案(0 = 停用) |
|
||||
|
||||
### 範例
|
||||
|
||||
|
|
@ -46,11 +46,11 @@ environment:
|
|||
|
||||
## 轉換設定
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| `MAX_CONVERT_PROCESS` | `0` | 最大同時轉換數(0 = 無限制) |
|
||||
| `FFMPEG_ARGS` | - | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
|
||||
| `FFMPEG_OUTPUT_ARGS` | - | FFmpeg 輸出參數,例如 `-preset veryfast` |
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| --------------------- | ------ | ---------------------------------------- |
|
||||
| `MAX_CONVERT_PROCESS` | `0` | 最大同時轉換數(0 = 無限制) |
|
||||
| `FFMPEG_ARGS` | - | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
|
||||
| `FFMPEG_OUTPUT_ARGS` | - | FFmpeg 輸出參數,例如 `-preset veryfast` |
|
||||
|
||||
### 硬體加速範例
|
||||
|
||||
|
|
@ -69,10 +69,10 @@ environment:
|
|||
|
||||
## 介面設定
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| `WEBROOT` | - | 子路徑部署,例如 `/convertx` |
|
||||
| `HIDE_HISTORY` | `false` | 隱藏歷史紀錄頁面 |
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| -------------- | ------- | ---------------------------- |
|
||||
| `WEBROOT` | - | 子路徑部署,例如 `/convertx` |
|
||||
| `HIDE_HISTORY` | `false` | 隱藏歷史紀錄頁面 |
|
||||
|
||||
### 子路徑部署
|
||||
|
||||
|
|
@ -86,10 +86,10 @@ environment:
|
|||
|
||||
## 本地化設定
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| `LANGUAGE` | `en` | 日期格式語言(BCP 47 格式) |
|
||||
| `TZ` | `UTC` | 時區設定 |
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| ---------- | ------ | --------------------------- |
|
||||
| `LANGUAGE` | `en` | 日期格式語言(BCP 47 格式) |
|
||||
| `TZ` | `UTC` | 時區設定 |
|
||||
|
||||
### 常用時區
|
||||
|
||||
|
|
@ -111,8 +111,8 @@ environment:
|
|||
|
||||
## 進階設定
|
||||
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
|----------|--------|------|
|
||||
| 變數名稱 | 預設值 | 說明 |
|
||||
| ------------------------------ | ------- | ---------------------------- |
|
||||
| `UNAUTHENTICATED_USER_SHARING` | `false` | 未登入使用者是否共享檔案空間 |
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
## 系統需求
|
||||
|
||||
| 需求 | 最低 | 建議 |
|
||||
|------|------|------|
|
||||
| Docker | 20.10+ | 24.0+ |
|
||||
| RAM | 4 GB | 8 GB |
|
||||
| 磁碟空間 | 10 GB | 20 GB |
|
||||
| CPU | 2 核心 | 4 核心 |
|
||||
| 需求 | 最低 | 建議 |
|
||||
| -------- | ------ | ------ |
|
||||
| Docker | 20.10+ | 24.0+ |
|
||||
| RAM | 4 GB | 8 GB |
|
||||
| 磁碟空間 | 10 GB | 20 GB |
|
||||
| CPU | 2 核心 | 4 核心 |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
160
docs/i18n.md
160
docs/i18n.md
|
|
@ -8,118 +8,118 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
|||
|
||||
### 東亞語言(5 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ------- | ---------------- | -------- |
|
||||
| `zh-TW` | 繁體中文(預設) | 繁體中文 |
|
||||
| `zh-CN` | 簡體中文 | 简体中文 |
|
||||
| `en` | 英文 | English |
|
||||
| `ja` | 日文 | 日本語 |
|
||||
| `ko` | 韓文 | 한국어 |
|
||||
| `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 |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ------------ | ---------- |
|
||||
| `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 |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ------ | -------- |
|
||||
| `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 |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ------------ | ----------- |
|
||||
| `ru` | 俄文 | Русский |
|
||||
| `pl` | 波蘭文 | Polski |
|
||||
| `uk` | 烏克蘭文 | Українська |
|
||||
| `cs` | 捷克文 | Čeština |
|
||||
| `hu` | 匈牙利文 | Magyar |
|
||||
| `ro` | 羅馬尼亞文 | Română |
|
||||
| `bg` | 保加利亞文 | Български |
|
||||
| `hr` | 克羅埃西亞文 | Hrvatski |
|
||||
| `sk` | 斯洛伐克文 | Slovenčina |
|
||||
| `sl` | 斯洛維尼亞文 | Slovenščina |
|
||||
| `sr` | 塞爾維亞文 | Српски |
|
||||
| `mk` | 馬其頓文 | Македонски |
|
||||
| `sr` | 塞爾維亞文 | Српски |
|
||||
| `mk` | 馬其頓文 | Македонски |
|
||||
|
||||
### 波羅的海語言(3 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| `lt` | 立陶宛文 | Lietuvių |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ---------- | -------- |
|
||||
| `lt` | 立陶宛文 | Lietuvių |
|
||||
| `lv` | 拉脫維亞文 | Latviešu |
|
||||
| `et` | 愛沙尼亞文 | Eesti |
|
||||
| `et` | 愛沙尼亞文 | Eesti |
|
||||
|
||||
### 其他歐洲語言(4 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| `el` | 希臘文 | Ελληνικά |
|
||||
| `sq` | 阿爾巴尼亞文 | Shqip |
|
||||
| `ga` | 愛爾蘭文 | Gaeilge |
|
||||
| `cy` | 威爾斯文 | Cymraeg |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ------------ | -------- |
|
||||
| `el` | 希臘文 | Ελληνικά |
|
||||
| `sq` | 阿爾巴尼亞文 | Shqip |
|
||||
| `ga` | 愛爾蘭文 | Gaeilge |
|
||||
| `cy` | 威爾斯文 | Cymraeg |
|
||||
|
||||
### 中東語言(4 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| `ar` | 阿拉伯文 | العربية |
|
||||
| `he` | 希伯來文 | עברית |
|
||||
| `fa` | 波斯文 | فارسی |
|
||||
| `tr` | 土耳其文 | Türkçe |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | -------- | -------- |
|
||||
| `ar` | 阿拉伯文 | العربية |
|
||||
| `he` | 希伯來文 | עברית |
|
||||
| `fa` | 波斯文 | فارسی |
|
||||
| `tr` | 土耳其文 | Türkçe |
|
||||
|
||||
### 南亞語言(10 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| `hi` | 印地文 | हिन्दी |
|
||||
| `bn` | 孟加拉文 | বাংলা |
|
||||
| `ta` | 泰米爾文 | தமிழ் |
|
||||
| `te` | 泰盧固文 | తెలుగు |
|
||||
| `mr` | 馬拉地文 | मराठी |
|
||||
| `gu` | 古吉拉特文 | ગુજરાતી |
|
||||
| `kn` | 卡納達文 | ಕನ್ನಡ |
|
||||
| `ml` | 馬拉雅拉姆文 | മലയാളം |
|
||||
| `ne` | 尼泊爾文 | नेपाली |
|
||||
| `si` | 僧伽羅文 | සිංහල |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ------------ | -------- |
|
||||
| `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` | 寮文 | ລາວ |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ----- | -------- | ---------------- |
|
||||
| `th` | 泰文 | ไทย |
|
||||
| `vi` | 越南文 | Tiếng Việt |
|
||||
| `id` | 印尼文 | Bahasa Indonesia |
|
||||
| `ms` | 馬來文 | Bahasa Melayu |
|
||||
| `fil` | 菲律賓文 | Filipino |
|
||||
| `my` | 緬甸文 | မြန်မာ |
|
||||
| `km` | 高棉文 | ខ្មែរ |
|
||||
| `lo` | 寮文 | ລາວ |
|
||||
|
||||
### 非洲語言(4 種)
|
||||
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
|------|------|----------|
|
||||
| `af` | 南非語 | Afrikaans |
|
||||
| 代碼 | 語言 | 原生名稱 |
|
||||
| ---- | ---------- | --------- |
|
||||
| `af` | 南非語 | Afrikaans |
|
||||
| `sw` | 斯瓦希里文 | Kiswahili |
|
||||
| `am` | 阿姆哈拉文 | አማርኛ |
|
||||
| `zu` | 祖魯文 | isiZulu |
|
||||
| `am` | 阿姆哈拉文 | አማርኛ |
|
||||
| `zu` | 祖魯文 | isiZulu |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ Job ID 是一個 UUID v4 格式的字串,例如:
|
|||
```
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
http://localhost:3000/results/550e8400-e29b-41d4-a716-446655440000
|
||||
```
|
||||
|
|
@ -123,30 +124,30 @@ ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
|
|||
|
||||
#### users
|
||||
|
||||
| 欄位 | 類型 | 說明 |
|
||||
|------|------|------|
|
||||
| id | INTEGER | 使用者 ID |
|
||||
| email | TEXT | 電子郵件 |
|
||||
| password | TEXT | 密碼雜湊 |
|
||||
| 欄位 | 類型 | 說明 |
|
||||
| -------- | ------- | --------- |
|
||||
| id | INTEGER | 使用者 ID |
|
||||
| email | TEXT | 電子郵件 |
|
||||
| password | TEXT | 密碼雜湊 |
|
||||
|
||||
#### jobs
|
||||
|
||||
| 欄位 | 類型 | 說明 |
|
||||
|------|------|------|
|
||||
| id | TEXT | Job UUID |
|
||||
| user_id | INTEGER | 使用者 ID |
|
||||
| num_files | INTEGER | 檔案數量 |
|
||||
| date_created | TEXT | 建立時間 |
|
||||
| 欄位 | 類型 | 說明 |
|
||||
| ------------ | ------- | --------- |
|
||||
| id | TEXT | Job UUID |
|
||||
| user_id | INTEGER | 使用者 ID |
|
||||
| num_files | INTEGER | 檔案數量 |
|
||||
| date_created | TEXT | 建立時間 |
|
||||
|
||||
#### file_names
|
||||
|
||||
| 欄位 | 類型 | 說明 |
|
||||
|------|------|------|
|
||||
| id | INTEGER | 檔案 ID |
|
||||
| job_id | TEXT | Job UUID |
|
||||
| input_file_name | TEXT | 原始檔名 |
|
||||
| output_file_name | TEXT | 輸出檔名 |
|
||||
| status | TEXT | 轉換狀態 |
|
||||
| 欄位 | 類型 | 說明 |
|
||||
| ---------------- | ------- | -------- |
|
||||
| id | INTEGER | 檔案 ID |
|
||||
| job_id | TEXT | Job UUID |
|
||||
| input_file_name | TEXT | 原始檔名 |
|
||||
| output_file_name | TEXT | 輸出檔名 |
|
||||
| status | TEXT | 轉換狀態 |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "convertx-frontend",
|
||||
"version": "0.1.3",
|
||||
"version": "0.1.4",
|
||||
"scripts": {
|
||||
"dev": "bun run --watch src/index.tsx",
|
||||
"hot": "bun run --hot src/index.tsx",
|
||||
|
|
|
|||
|
|
@ -9,16 +9,16 @@ let formatSelected = false;
|
|||
|
||||
// Get translation helper
|
||||
const getTranslation = (category, key, params) => {
|
||||
if (typeof window.t === 'function') {
|
||||
if (typeof window.t === "function") {
|
||||
return window.t(category, key, params);
|
||||
}
|
||||
// Fallback to English if t is not available
|
||||
const fallbacks = {
|
||||
'common.remove': 'Remove',
|
||||
'convert.title': 'Convert',
|
||||
'convert.titleWithType': 'Convert .{fileType}',
|
||||
'convert.convertButton': 'Convert',
|
||||
'convert.uploading': 'Uploading...'
|
||||
"common.remove": "Remove",
|
||||
"convert.title": "Convert",
|
||||
"convert.titleWithType": "Convert .{fileType}",
|
||||
"convert.convertButton": "Convert",
|
||||
"convert.uploading": "Uploading...",
|
||||
};
|
||||
let text = fallbacks[`${category}.${key}`] || key;
|
||||
if (params) {
|
||||
|
|
@ -58,7 +58,7 @@ dropZone.addEventListener("drop", (e) => {
|
|||
// Extracted handleFile function for reusability in drag-and-drop and file input
|
||||
function handleFile(file) {
|
||||
const fileList = document.querySelector("#file-list");
|
||||
const removeText = getTranslation('common', 'remove');
|
||||
const removeText = getTranslation("common", "remove");
|
||||
|
||||
const row = document.createElement("tr");
|
||||
row.innerHTML = `
|
||||
|
|
@ -186,9 +186,9 @@ fileInput.addEventListener("change", (e) => {
|
|||
const setTitle = () => {
|
||||
const title = document.querySelector("h1");
|
||||
if (fileType) {
|
||||
title.textContent = getTranslation('convert', 'titleWithType', { fileType });
|
||||
title.textContent = getTranslation("convert", "titleWithType", { fileType });
|
||||
} else {
|
||||
title.textContent = getTranslation('convert', 'title');
|
||||
title.textContent = getTranslation("convert", "title");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -225,7 +225,7 @@ const deleteRow = (target) => {
|
|||
|
||||
const uploadFile = (file) => {
|
||||
convertButton.disabled = true;
|
||||
convertButton.value = getTranslation('convert', 'uploading');
|
||||
convertButton.value = getTranslation("convert", "uploading");
|
||||
pendingFiles += 1;
|
||||
|
||||
const formData = new FormData();
|
||||
|
|
@ -243,7 +243,7 @@ const uploadFile = (file) => {
|
|||
if (formatSelected) {
|
||||
convertButton.disabled = false;
|
||||
}
|
||||
convertButton.value = getTranslation('convert', 'convertButton');
|
||||
convertButton.value = getTranslation("convert", "convertButton");
|
||||
}
|
||||
|
||||
//Remove the progress bar when upload is done
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { version } from "../../package.json";
|
||||
import { type SupportedLocale, defaultLocale, getTranslations } from "../i18n";
|
||||
import { type SupportedLocale, defaultLocale, getTranslations } from "../i18n/index";
|
||||
|
||||
export const BaseHtml = ({
|
||||
children,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { type SupportedLocale, type Translator, createTranslator, defaultLocale } from "../i18n";
|
||||
import { type SupportedLocale, type Translator, createTranslator, defaultLocale } from "../i18n/index";
|
||||
import { LanguageSelector } from "./languageSelector";
|
||||
|
||||
export const Header = ({
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { supportedLocales, type SupportedLocale, type Translator } from "../i18n";
|
||||
import { supportedLocales, type SupportedLocale, type Translator } from "../i18n/index";
|
||||
|
||||
export const LanguageSelector = ({
|
||||
currentLocale,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
// 預設開放註冊(開箱即用),管理者可設為 false 來關閉
|
||||
export const ACCOUNT_REGISTRATION =
|
||||
process.env.ACCOUNT_REGISTRATION?.toLowerCase() === "true" || false;
|
||||
process.env.ACCOUNT_REGISTRATION?.toLowerCase() !== "false";
|
||||
|
||||
export const HTTP_ALLOWED = process.env.HTTP_ALLOWED?.toLowerCase() === "true" || false;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import {
|
|||
createTranslator,
|
||||
detectLocale,
|
||||
getLocale,
|
||||
} from "../i18n";
|
||||
} from "./index";
|
||||
|
||||
/**
|
||||
* Elysia plugin for i18n/locale handling
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { ALLOW_UNAUTHENTICATED, WEBROOT } from "../helpers/env";
|
|||
import { DownloadIcon } from "../icons/download";
|
||||
import { DeleteIcon } from "../icons/delete";
|
||||
import { EyeIcon } from "../icons/eye";
|
||||
import { type SupportedLocale, type Translator, createTranslator, defaultLocale } from "../i18n";
|
||||
import { type SupportedLocale, type Translator, createTranslator, defaultLocale } from "../i18n/index";
|
||||
import { localeService } from "../i18n/service";
|
||||
import { userService } from "./user";
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue