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
|
# 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)
|
## [0.1.3](https://github.com/C4illin/ConvertX/releases/tag/v0.1.3) (2026-01-20)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
|
||||||
12
README.md
12
README.md
|
|
@ -21,7 +21,7 @@ ConvertX-CN 是基於 [C4illin/ConvertX](https://github.com/C4illin/ConvertX)
|
||||||
### 主要特色
|
### 主要特色
|
||||||
|
|
||||||
| 特色 | 說明 |
|
| 特色 | 說明 |
|
||||||
|------|------|
|
| ------------------- | -------------------------------------------------- |
|
||||||
| 🌍 **65+ 語言支援** | 繁體中文、簡體中文、英文、日文、韓文等 65 種語言 |
|
| 🌍 **65+ 語言支援** | 繁體中文、簡體中文、英文、日文、韓文等 65 種語言 |
|
||||||
| 📦 **完整內建** | LibreOffice、FFmpeg、Pandoc、Calibre 等 20+ 轉換器 |
|
| 📦 **完整內建** | LibreOffice、FFmpeg、Pandoc、Calibre 等 20+ 轉換器 |
|
||||||
| 🎨 **CJK 字型** | Noto CJK、微軟核心字型、標楷體等中日韓字型 |
|
| 🎨 **CJK 字型** | Noto CJK、微軟核心字型、標楷體等中日韓字型 |
|
||||||
|
|
@ -79,7 +79,7 @@ docker compose up -d
|
||||||
ConvertX-CN 支援 **65 種語言**,包括:
|
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 |
|
| **歐洲** | 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, हिन्दी, বাংলা, தமிழ், తెలుగు, मराठी, ગુજરાતી, ಕನ್ನಡ, മലയാളം, नेपाली, සිංහල |
|
| **中東/南亞** | العربية, עברית, فارسی, Türkçe, हिन्दी, বাংলা, தமிழ், తెలుగు, मराठी, ગુજરાતી, ಕನ್ನಡ, മലയാളം, नेपाली, සිංහල |
|
||||||
|
|
@ -93,7 +93,7 @@ ConvertX-CN 支援 **65 種語言**,包括:
|
||||||
## 📦 內建轉換器
|
## 📦 內建轉換器
|
||||||
|
|
||||||
| 轉換器 | 用途 | 輸入格式 | 輸出格式 |
|
| 轉換器 | 用途 | 輸入格式 | 輸出格式 |
|
||||||
|--------|------|----------|----------|
|
| -------------- | ------- | -------- | -------- |
|
||||||
| FFmpeg | 影音 | ~472 | ~199 |
|
| FFmpeg | 影音 | ~472 | ~199 |
|
||||||
| ImageMagick | 圖片 | 245 | 183 |
|
| ImageMagick | 圖片 | 245 | 183 |
|
||||||
| GraphicsMagick | 圖片 | 167 | 130 |
|
| GraphicsMagick | 圖片 | 167 | 130 |
|
||||||
|
|
@ -110,7 +110,7 @@ ConvertX-CN 支援 **65 種語言**,包括:
|
||||||
## 📖 文件導覽
|
## 📖 文件導覽
|
||||||
|
|
||||||
| 文件 | 說明 |
|
| 文件 | 說明 |
|
||||||
|------|------|
|
| -------------------------------------------- | ---------------------- |
|
||||||
| [🚀 快速開始](docs/getting-started.md) | Docker 部署教學 |
|
| [🚀 快速開始](docs/getting-started.md) | Docker 部署教學 |
|
||||||
| [🐳 Docker 配置](docs/docker.md) | 完整 Docker 設定指南 |
|
| [🐳 Docker 配置](docs/docker.md) | 完整 Docker 設定指南 |
|
||||||
| [⚙️ 環境變數](docs/environment-variables.md) | 所有環境變數說明 |
|
| [⚙️ 環境變數](docs/environment-variables.md) | 所有環境變數說明 |
|
||||||
|
|
@ -124,9 +124,9 @@ ConvertX-CN 支援 **65 種語言**,包括:
|
||||||
## 🐳 Docker Image
|
## 🐳 Docker Image
|
||||||
|
|
||||||
| Tag | 說明 |
|
| Tag | 說明 |
|
||||||
|-----|------|
|
| ----------------------------- | ---------- |
|
||||||
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
||||||
| `convertx/convertx-cn:v0.1.3` | 指定版本 |
|
| `convertx/convertx-cn:v0.1.4` | 指定版本 |
|
||||||
|
|
||||||
> ⚠️ 由於內建完整依賴,Image 約 4-6 GB,首次下載需較長時間。
|
> ⚠️ 由於內建完整依賴,Image 約 4-6 GB,首次下載需較長時間。
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -246,9 +246,9 @@ deploy:
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: '4'
|
cpus: "4"
|
||||||
reservations:
|
reservations:
|
||||||
cpus: '1'
|
cpus: "1"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ ConvertX-CN 完整版已內建以下所有轉換器,開箱即用。
|
||||||
## 轉換器列表
|
## 轉換器列表
|
||||||
|
|
||||||
| 轉換器 | 用途 | 輸入格式數 | 輸出格式數 |
|
| 轉換器 | 用途 | 輸入格式數 | 輸出格式數 |
|
||||||
| ------ | ---- | ---------- | ---------- |
|
| --------------------------------------------------------------- | ---------- | ---------- | ---------- |
|
||||||
| [Inkscape](https://inkscape.org/) | 向量圖形 | 7 | 17 |
|
| [Inkscape](https://inkscape.org/) | 向量圖形 | 7 | 17 |
|
||||||
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
|
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
|
||||||
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
|
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
|
||||||
|
|
@ -34,7 +34,7 @@ ConvertX-CN 完整版已內建以下所有轉換器,開箱即用。
|
||||||
ConvertX-CN 完整版已預載:
|
ConvertX-CN 完整版已預載:
|
||||||
|
|
||||||
| 類別 | 內建內容 |
|
| 類別 | 內建內容 |
|
||||||
| ---- | -------- |
|
| ------------ | ---------------------------------------------------------------- |
|
||||||
| **文件轉換** | LibreOffice (headless)、Pandoc |
|
| **文件轉換** | LibreOffice (headless)、Pandoc |
|
||||||
| **LaTeX** | TexLive Full(完整版,支援所有 LaTeX 需求) |
|
| **LaTeX** | TexLive Full(完整版,支援所有 LaTeX 需求) |
|
||||||
| **OCR 識別** | Tesseract OCR + 繁體中文、簡體中文、日文、韓文、英文、德文語言包 |
|
| **OCR 識別** | Tesseract OCR + 繁體中文、簡體中文、日文、韓文、英文、德文語言包 |
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,10 @@ ConvertX-CN 提供預建的 Docker Image,包含所有轉換依賴。
|
||||||
### 可用 Tag
|
### 可用 Tag
|
||||||
|
|
||||||
| Tag | 說明 |
|
| Tag | 說明 |
|
||||||
|-----|------|
|
| ---------------------------------- | ------------------------ |
|
||||||
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
| `convertx/convertx-cn:latest` | 最新穩定版 |
|
||||||
| `convertx/convertx-cn:v0.1.3` | 指定版本號 |
|
| `convertx/convertx-cn:v0.1.4` | 指定版本號 |
|
||||||
| `convertx/convertx-cn:v0.1.3-FULL` | 完整版(與 latest 相同) |
|
| `convertx/convertx-cn:v0.1.4-FULL` | 完整版(與 latest 相同) |
|
||||||
|
|
||||||
### Image 大小
|
### Image 大小
|
||||||
|
|
||||||
|
|
@ -35,7 +35,7 @@ docker run -d \
|
||||||
### 參數說明
|
### 參數說明
|
||||||
|
|
||||||
| 參數 | 說明 |
|
| 參數 | 說明 |
|
||||||
|------|------|
|
| --------------------- | ---------- |
|
||||||
| `-d` | 背景執行 |
|
| `-d` | 背景執行 |
|
||||||
| `--name convertx-cn` | 容器名稱 |
|
| `--name convertx-cn` | 容器名稱 |
|
||||||
| `-p 3000:3000` | 連接埠映射 |
|
| `-p 3000:3000` | 連接埠映射 |
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,16 @@
|
||||||
## 安全性設定
|
## 安全性設定
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| ----------------------- | -------------- | ----------------------------------------------- |
|
||||||
| `JWT_SECRET` | `randomUUID()` | 用於簽署 JWT 的密鑰字串。**生產環境請務必設定** |
|
| `JWT_SECRET` | `randomUUID()` | 用於簽署 JWT 的密鑰字串。**生產環境請務必設定** |
|
||||||
| `ACCOUNT_REGISTRATION` | `false` | 是否允許註冊新帳號 |
|
| `ACCOUNT_REGISTRATION` | `true` | 是否允許註冊新帳號(預設開放) |
|
||||||
| `HTTP_ALLOWED` | `false` | 是否允許 HTTP 連線(僅本地使用建議開啟) |
|
| `HTTP_ALLOWED` | `false` | 是否允許 HTTP 連線(僅本地使用建議開啟) |
|
||||||
| `ALLOW_UNAUTHENTICATED` | `false` | 是否允許未登入使用 |
|
| `ALLOW_UNAUTHENTICATED` | `false` | 是否允許未登入使用 |
|
||||||
|
|
||||||
### 安全建議
|
### 安全建議
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# 生產環境
|
# 生產環境(關閉註冊)
|
||||||
environment:
|
environment:
|
||||||
- JWT_SECRET=a-very-long-random-string-at-least-32-characters
|
- JWT_SECRET=a-very-long-random-string-at-least-32-characters
|
||||||
- ACCOUNT_REGISTRATION=false
|
- ACCOUNT_REGISTRATION=false
|
||||||
|
|
@ -29,7 +29,7 @@ environment:
|
||||||
## 檔案管理
|
## 檔案管理
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| --------------------------- | ------ | ------------------------------------- |
|
||||||
| `AUTO_DELETE_EVERY_N_HOURS` | `24` | 自動刪除超過 N 小時的檔案(0 = 停用) |
|
| `AUTO_DELETE_EVERY_N_HOURS` | `24` | 自動刪除超過 N 小時的檔案(0 = 停用) |
|
||||||
|
|
||||||
### 範例
|
### 範例
|
||||||
|
|
@ -47,7 +47,7 @@ environment:
|
||||||
## 轉換設定
|
## 轉換設定
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| --------------------- | ------ | ---------------------------------------- |
|
||||||
| `MAX_CONVERT_PROCESS` | `0` | 最大同時轉換數(0 = 無限制) |
|
| `MAX_CONVERT_PROCESS` | `0` | 最大同時轉換數(0 = 無限制) |
|
||||||
| `FFMPEG_ARGS` | - | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
|
| `FFMPEG_ARGS` | - | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
|
||||||
| `FFMPEG_OUTPUT_ARGS` | - | FFmpeg 輸出參數,例如 `-preset veryfast` |
|
| `FFMPEG_OUTPUT_ARGS` | - | FFmpeg 輸出參數,例如 `-preset veryfast` |
|
||||||
|
|
@ -70,7 +70,7 @@ environment:
|
||||||
## 介面設定
|
## 介面設定
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| -------------- | ------- | ---------------------------- |
|
||||||
| `WEBROOT` | - | 子路徑部署,例如 `/convertx` |
|
| `WEBROOT` | - | 子路徑部署,例如 `/convertx` |
|
||||||
| `HIDE_HISTORY` | `false` | 隱藏歷史紀錄頁面 |
|
| `HIDE_HISTORY` | `false` | 隱藏歷史紀錄頁面 |
|
||||||
|
|
||||||
|
|
@ -87,7 +87,7 @@ environment:
|
||||||
## 本地化設定
|
## 本地化設定
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| ---------- | ------ | --------------------------- |
|
||||||
| `LANGUAGE` | `en` | 日期格式語言(BCP 47 格式) |
|
| `LANGUAGE` | `en` | 日期格式語言(BCP 47 格式) |
|
||||||
| `TZ` | `UTC` | 時區設定 |
|
| `TZ` | `UTC` | 時區設定 |
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ environment:
|
||||||
## 進階設定
|
## 進階設定
|
||||||
|
|
||||||
| 變數名稱 | 預設值 | 說明 |
|
| 變數名稱 | 預設值 | 說明 |
|
||||||
|----------|--------|------|
|
| ------------------------------ | ------- | ---------------------------- |
|
||||||
| `UNAUTHENTICATED_USER_SHARING` | `false` | 未登入使用者是否共享檔案空間 |
|
| `UNAUTHENTICATED_USER_SHARING` | `false` | 未登入使用者是否共享檔案空間 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
## 系統需求
|
## 系統需求
|
||||||
|
|
||||||
| 需求 | 最低 | 建議 |
|
| 需求 | 最低 | 建議 |
|
||||||
|------|------|------|
|
| -------- | ------ | ------ |
|
||||||
| Docker | 20.10+ | 24.0+ |
|
| Docker | 20.10+ | 24.0+ |
|
||||||
| RAM | 4 GB | 8 GB |
|
| RAM | 4 GB | 8 GB |
|
||||||
| 磁碟空間 | 10 GB | 20 GB |
|
| 磁碟空間 | 10 GB | 20 GB |
|
||||||
|
|
|
||||||
20
docs/i18n.md
20
docs/i18n.md
|
|
@ -9,7 +9,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 東亞語言(5 種)
|
### 東亞語言(5 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ------- | ---------------- | -------- |
|
||||||
| `zh-TW` | 繁體中文(預設) | 繁體中文 |
|
| `zh-TW` | 繁體中文(預設) | 繁體中文 |
|
||||||
| `zh-CN` | 簡體中文 | 简体中文 |
|
| `zh-CN` | 簡體中文 | 简体中文 |
|
||||||
| `en` | 英文 | English |
|
| `en` | 英文 | English |
|
||||||
|
|
@ -19,7 +19,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 西歐語言(10 種)
|
### 西歐語言(10 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ------------ | ---------- |
|
||||||
| `de` | 德文 | Deutsch |
|
| `de` | 德文 | Deutsch |
|
||||||
| `fr` | 法文 | Français |
|
| `fr` | 法文 | Français |
|
||||||
| `es` | 西班牙文 | Español |
|
| `es` | 西班牙文 | Español |
|
||||||
|
|
@ -34,7 +34,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 北歐語言(5 種)
|
### 北歐語言(5 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ------ | -------- |
|
||||||
| `sv` | 瑞典文 | Svenska |
|
| `sv` | 瑞典文 | Svenska |
|
||||||
| `da` | 丹麥文 | Dansk |
|
| `da` | 丹麥文 | Dansk |
|
||||||
| `fi` | 芬蘭文 | Suomi |
|
| `fi` | 芬蘭文 | Suomi |
|
||||||
|
|
@ -44,7 +44,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 東歐語言(12 種)
|
### 東歐語言(12 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ------------ | ----------- |
|
||||||
| `ru` | 俄文 | Русский |
|
| `ru` | 俄文 | Русский |
|
||||||
| `pl` | 波蘭文 | Polski |
|
| `pl` | 波蘭文 | Polski |
|
||||||
| `uk` | 烏克蘭文 | Українська |
|
| `uk` | 烏克蘭文 | Українська |
|
||||||
|
|
@ -61,7 +61,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 波羅的海語言(3 種)
|
### 波羅的海語言(3 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ---------- | -------- |
|
||||||
| `lt` | 立陶宛文 | Lietuvių |
|
| `lt` | 立陶宛文 | Lietuvių |
|
||||||
| `lv` | 拉脫維亞文 | Latviešu |
|
| `lv` | 拉脫維亞文 | Latviešu |
|
||||||
| `et` | 愛沙尼亞文 | Eesti |
|
| `et` | 愛沙尼亞文 | Eesti |
|
||||||
|
|
@ -69,7 +69,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 其他歐洲語言(4 種)
|
### 其他歐洲語言(4 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ------------ | -------- |
|
||||||
| `el` | 希臘文 | Ελληνικά |
|
| `el` | 希臘文 | Ελληνικά |
|
||||||
| `sq` | 阿爾巴尼亞文 | Shqip |
|
| `sq` | 阿爾巴尼亞文 | Shqip |
|
||||||
| `ga` | 愛爾蘭文 | Gaeilge |
|
| `ga` | 愛爾蘭文 | Gaeilge |
|
||||||
|
|
@ -78,7 +78,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 中東語言(4 種)
|
### 中東語言(4 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | -------- | -------- |
|
||||||
| `ar` | 阿拉伯文 | العربية |
|
| `ar` | 阿拉伯文 | العربية |
|
||||||
| `he` | 希伯來文 | עברית |
|
| `he` | 希伯來文 | עברית |
|
||||||
| `fa` | 波斯文 | فارسی |
|
| `fa` | 波斯文 | فارسی |
|
||||||
|
|
@ -87,7 +87,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 南亞語言(10 種)
|
### 南亞語言(10 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ------------ | -------- |
|
||||||
| `hi` | 印地文 | हिन्दी |
|
| `hi` | 印地文 | हिन्दी |
|
||||||
| `bn` | 孟加拉文 | বাংলা |
|
| `bn` | 孟加拉文 | বাংলা |
|
||||||
| `ta` | 泰米爾文 | தமிழ் |
|
| `ta` | 泰米爾文 | தமிழ் |
|
||||||
|
|
@ -102,7 +102,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 東南亞語言(8 種)
|
### 東南亞語言(8 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ----- | -------- | ---------------- |
|
||||||
| `th` | 泰文 | ไทย |
|
| `th` | 泰文 | ไทย |
|
||||||
| `vi` | 越南文 | Tiếng Việt |
|
| `vi` | 越南文 | Tiếng Việt |
|
||||||
| `id` | 印尼文 | Bahasa Indonesia |
|
| `id` | 印尼文 | Bahasa Indonesia |
|
||||||
|
|
@ -115,7 +115,7 @@ ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換
|
||||||
### 非洲語言(4 種)
|
### 非洲語言(4 種)
|
||||||
|
|
||||||
| 代碼 | 語言 | 原生名稱 |
|
| 代碼 | 語言 | 原生名稱 |
|
||||||
|------|------|----------|
|
| ---- | ---------- | --------- |
|
||||||
| `af` | 南非語 | Afrikaans |
|
| `af` | 南非語 | Afrikaans |
|
||||||
| `sw` | 斯瓦希里文 | Kiswahili |
|
| `sw` | 斯瓦希里文 | Kiswahili |
|
||||||
| `am` | 阿姆哈拉文 | አማርኛ |
|
| `am` | 阿姆哈拉文 | አማርኛ |
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ Job ID 是一個 UUID v4 格式的字串,例如:
|
||||||
```
|
```
|
||||||
|
|
||||||
例如:
|
例如:
|
||||||
|
|
||||||
```
|
```
|
||||||
http://localhost:3000/results/550e8400-e29b-41d4-a716-446655440000
|
http://localhost:3000/results/550e8400-e29b-41d4-a716-446655440000
|
||||||
```
|
```
|
||||||
|
|
@ -124,7 +125,7 @@ ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
|
||||||
#### users
|
#### users
|
||||||
|
|
||||||
| 欄位 | 類型 | 說明 |
|
| 欄位 | 類型 | 說明 |
|
||||||
|------|------|------|
|
| -------- | ------- | --------- |
|
||||||
| id | INTEGER | 使用者 ID |
|
| id | INTEGER | 使用者 ID |
|
||||||
| email | TEXT | 電子郵件 |
|
| email | TEXT | 電子郵件 |
|
||||||
| password | TEXT | 密碼雜湊 |
|
| password | TEXT | 密碼雜湊 |
|
||||||
|
|
@ -132,7 +133,7 @@ ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
|
||||||
#### jobs
|
#### jobs
|
||||||
|
|
||||||
| 欄位 | 類型 | 說明 |
|
| 欄位 | 類型 | 說明 |
|
||||||
|------|------|------|
|
| ------------ | ------- | --------- |
|
||||||
| id | TEXT | Job UUID |
|
| id | TEXT | Job UUID |
|
||||||
| user_id | INTEGER | 使用者 ID |
|
| user_id | INTEGER | 使用者 ID |
|
||||||
| num_files | INTEGER | 檔案數量 |
|
| num_files | INTEGER | 檔案數量 |
|
||||||
|
|
@ -141,7 +142,7 @@ ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
|
||||||
#### file_names
|
#### file_names
|
||||||
|
|
||||||
| 欄位 | 類型 | 說明 |
|
| 欄位 | 類型 | 說明 |
|
||||||
|------|------|------|
|
| ---------------- | ------- | -------- |
|
||||||
| id | INTEGER | 檔案 ID |
|
| id | INTEGER | 檔案 ID |
|
||||||
| job_id | TEXT | Job UUID |
|
| job_id | TEXT | Job UUID |
|
||||||
| input_file_name | TEXT | 原始檔名 |
|
| input_file_name | TEXT | 原始檔名 |
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "convertx-frontend",
|
"name": "convertx-frontend",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "bun run --watch src/index.tsx",
|
"dev": "bun run --watch src/index.tsx",
|
||||||
"hot": "bun run --hot src/index.tsx",
|
"hot": "bun run --hot src/index.tsx",
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,16 @@ let formatSelected = false;
|
||||||
|
|
||||||
// Get translation helper
|
// Get translation helper
|
||||||
const getTranslation = (category, key, params) => {
|
const getTranslation = (category, key, params) => {
|
||||||
if (typeof window.t === 'function') {
|
if (typeof window.t === "function") {
|
||||||
return window.t(category, key, params);
|
return window.t(category, key, params);
|
||||||
}
|
}
|
||||||
// Fallback to English if t is not available
|
// Fallback to English if t is not available
|
||||||
const fallbacks = {
|
const fallbacks = {
|
||||||
'common.remove': 'Remove',
|
"common.remove": "Remove",
|
||||||
'convert.title': 'Convert',
|
"convert.title": "Convert",
|
||||||
'convert.titleWithType': 'Convert .{fileType}',
|
"convert.titleWithType": "Convert .{fileType}",
|
||||||
'convert.convertButton': 'Convert',
|
"convert.convertButton": "Convert",
|
||||||
'convert.uploading': 'Uploading...'
|
"convert.uploading": "Uploading...",
|
||||||
};
|
};
|
||||||
let text = fallbacks[`${category}.${key}`] || key;
|
let text = fallbacks[`${category}.${key}`] || key;
|
||||||
if (params) {
|
if (params) {
|
||||||
|
|
@ -58,7 +58,7 @@ dropZone.addEventListener("drop", (e) => {
|
||||||
// Extracted handleFile function for reusability in drag-and-drop and file input
|
// Extracted handleFile function for reusability in drag-and-drop and file input
|
||||||
function handleFile(file) {
|
function handleFile(file) {
|
||||||
const fileList = document.querySelector("#file-list");
|
const fileList = document.querySelector("#file-list");
|
||||||
const removeText = getTranslation('common', 'remove');
|
const removeText = getTranslation("common", "remove");
|
||||||
|
|
||||||
const row = document.createElement("tr");
|
const row = document.createElement("tr");
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
|
|
@ -186,9 +186,9 @@ fileInput.addEventListener("change", (e) => {
|
||||||
const setTitle = () => {
|
const setTitle = () => {
|
||||||
const title = document.querySelector("h1");
|
const title = document.querySelector("h1");
|
||||||
if (fileType) {
|
if (fileType) {
|
||||||
title.textContent = getTranslation('convert', 'titleWithType', { fileType });
|
title.textContent = getTranslation("convert", "titleWithType", { fileType });
|
||||||
} else {
|
} else {
|
||||||
title.textContent = getTranslation('convert', 'title');
|
title.textContent = getTranslation("convert", "title");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -225,7 +225,7 @@ const deleteRow = (target) => {
|
||||||
|
|
||||||
const uploadFile = (file) => {
|
const uploadFile = (file) => {
|
||||||
convertButton.disabled = true;
|
convertButton.disabled = true;
|
||||||
convertButton.value = getTranslation('convert', 'uploading');
|
convertButton.value = getTranslation("convert", "uploading");
|
||||||
pendingFiles += 1;
|
pendingFiles += 1;
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
|
@ -243,7 +243,7 @@ const uploadFile = (file) => {
|
||||||
if (formatSelected) {
|
if (formatSelected) {
|
||||||
convertButton.disabled = false;
|
convertButton.disabled = false;
|
||||||
}
|
}
|
||||||
convertButton.value = getTranslation('convert', 'convertButton');
|
convertButton.value = getTranslation("convert", "convertButton");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Remove the progress bar when upload is done
|
//Remove the progress bar when upload is done
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { version } from "../../package.json";
|
import { version } from "../../package.json";
|
||||||
import { type SupportedLocale, defaultLocale, getTranslations } from "../i18n";
|
import { type SupportedLocale, defaultLocale, getTranslations } from "../i18n/index";
|
||||||
|
|
||||||
export const BaseHtml = ({
|
export const BaseHtml = ({
|
||||||
children,
|
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";
|
import { LanguageSelector } from "./languageSelector";
|
||||||
|
|
||||||
export const Header = ({
|
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 = ({
|
export const LanguageSelector = ({
|
||||||
currentLocale,
|
currentLocale,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
|
// 預設開放註冊(開箱即用),管理者可設為 false 來關閉
|
||||||
export const ACCOUNT_REGISTRATION =
|
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;
|
export const HTTP_ALLOWED = process.env.HTTP_ALLOWED?.toLowerCase() === "true" || false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import {
|
||||||
createTranslator,
|
createTranslator,
|
||||||
detectLocale,
|
detectLocale,
|
||||||
getLocale,
|
getLocale,
|
||||||
} from "../i18n";
|
} from "./index";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Elysia plugin for i18n/locale handling
|
* Elysia plugin for i18n/locale handling
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { ALLOW_UNAUTHENTICATED, WEBROOT } from "../helpers/env";
|
||||||
import { DownloadIcon } from "../icons/download";
|
import { DownloadIcon } from "../icons/download";
|
||||||
import { DeleteIcon } from "../icons/delete";
|
import { DeleteIcon } from "../icons/delete";
|
||||||
import { EyeIcon } from "../icons/eye";
|
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 { localeService } from "../i18n/service";
|
||||||
import { userService } from "./user";
|
import { userService } from "./user";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue