-
----
-
-## 📸 Screenshots
-
-
-
## 🛠️ 開發
-0. 安裝 [Bun](https://bun.sh/) 和 Git
-1. Clone 這個 repository
-2. `bun install`
-3. `bun run dev`
+```bash
+# 安裝依賴
+bun install
-歡迎 Pull Request!請使用 [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/#summary) 格式。
+# 開發模式
+bun run dev
+
+# 建構
+bun run build
+```
+
+歡迎 Pull Request!請使用 [Conventional Commits](https://www.conventionalcommits.org/) 格式。
---
@@ -203,11 +160,18 @@ ConvertX-CN 支援以下語言:
本專案基於 [C4illin/ConvertX](https://github.com/C4illin/ConvertX) 開發。
-
+
---
## 📜 License
-MIT License
+[MIT License](LICENSE)
+
+---
+
+
+ Powered by ConvertX-CN
+ https://github.com/pi-docket/ConvertX-CN
+
diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md
new file mode 100644
index 0000000..f0aeaca
--- /dev/null
+++ b/docs/advanced-usage.md
@@ -0,0 +1,277 @@
+# 進階用法
+
+## 硬體加速
+
+### NVIDIA GPU (CUDA/NVENC)
+
+#### 1. 安裝 NVIDIA Container Toolkit
+
+```bash
+# Ubuntu/Debian
+curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
+curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
+ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
+sudo apt-get update
+sudo apt-get install -y nvidia-container-toolkit
+sudo nvidia-ctk runtime configure --runtime=docker
+sudo systemctl restart docker
+```
+
+#### 2. Docker Compose 配置
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ deploy:
+ resources:
+ reservations:
+ devices:
+ - driver: nvidia
+ count: all
+ capabilities: [gpu]
+ environment:
+ - FFMPEG_ARGS=-hwaccel cuda -hwaccel_output_format cuda
+ - FFMPEG_OUTPUT_ARGS=-c:v h264_nvenc -preset fast
+```
+
+---
+
+### Intel Quick Sync Video (QSV)
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ devices:
+ - /dev/dri:/dev/dri
+ environment:
+ - FFMPEG_ARGS=-hwaccel qsv
+ - FFMPEG_OUTPUT_ARGS=-c:v h264_qsv -preset faster
+```
+
+---
+
+### AMD VAAPI
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ devices:
+ - /dev/dri:/dev/dri
+ environment:
+ - FFMPEG_ARGS=-hwaccel vaapi -hwaccel_device /dev/dri/renderD128
+ - FFMPEG_OUTPUT_ARGS=-c:v h264_vaapi
+```
+
+---
+
+## 反向代理
+
+### Nginx
+
+```nginx
+server {
+ listen 80;
+ server_name convert.example.com;
+ return 301 https://$server_name$request_uri;
+}
+
+server {
+ listen 443 ssl http2;
+ server_name convert.example.com;
+
+ ssl_certificate /etc/nginx/ssl/cert.pem;
+ ssl_certificate_key /etc/nginx/ssl/key.pem;
+
+ client_max_body_size 0; # 無檔案大小限制
+
+ location / {
+ proxy_pass http://localhost:3000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection 'upgrade';
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ 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;
+ }
+}
+```
+
+### Caddy
+
+```
+convert.example.com {
+ reverse_proxy localhost:3000 {
+ header_up X-Real-IP {remote_host}
+ header_up X-Forwarded-Proto {scheme}
+ }
+
+ request_body {
+ max_size 0 # 無限制
+ }
+}
+```
+
+### Traefik
+
+參考 [docker.md](docker.md#使用-traefik-反向代理) 中的 Traefik 配置。
+
+---
+
+## 子路徑部署
+
+如果需要在子路徑部署(如 `https://example.com/convertx`):
+
+### 1. 設定環境變數
+
+```yaml
+environment:
+ - WEBROOT=/convertx
+```
+
+### 2. Nginx 配置
+
+```nginx
+location /convertx/ {
+ proxy_pass http://localhost:3000/;
+ # ... 其他 proxy 設定
+}
+```
+
+### 3. Caddy 配置
+
+```
+example.com {
+ handle_path /convertx/* {
+ reverse_proxy localhost:3000
+ }
+}
+```
+
+---
+
+## 限制同時轉換數
+
+防止伺服器過載:
+
+```yaml
+environment:
+ - MAX_CONVERT_PROCESS=4 # 最多同時 4 個轉換任務
+```
+
+---
+
+## 匿名模式
+
+允許不登入即可使用:
+
+```yaml
+environment:
+ - ALLOW_UNAUTHENTICATED=true
+ - HIDE_HISTORY=true # 建議同時隱藏歷史
+ - AUTO_DELETE_EVERY_N_HOURS=1 # 快速清理
+```
+
+---
+
+## 高可用部署
+
+### 多容器部署
+
+ConvertX-CN 支援多容器部署,但需注意:
+
+1. **共享儲存**:所有容器需存取相同的 `/app/data` 目錄
+2. **資料庫鎖定**:SQLite 在高併發下可能有問題
+3. **JWT Secret**:所有容器需使用相同的 `JWT_SECRET`
+
+```yaml
+services:
+ convertx-1:
+ image: convertx/convertx-cn:latest
+ volumes:
+ - shared-data:/app/data
+ environment:
+ - JWT_SECRET=${JWT_SECRET}
+
+ convertx-2:
+ image: convertx/convertx-cn:latest
+ volumes:
+ - shared-data:/app/data
+ environment:
+ - JWT_SECRET=${JWT_SECRET}
+
+ nginx:
+ image: nginx:alpine
+ ports:
+ - "80:80"
+ volumes:
+ - ./nginx.conf:/etc/nginx/nginx.conf
+
+volumes:
+ shared-data:
+ driver: local
+ driver_opts:
+ type: nfs
+ o: addr=nfs-server,rw
+ device: ":/path/to/shared/data"
+```
+
+---
+
+## 效能調優
+
+### 記憶體限制
+
+```yaml
+deploy:
+ resources:
+ limits:
+ memory: 8G
+ reservations:
+ memory: 2G
+```
+
+### CPU 限制
+
+```yaml
+deploy:
+ resources:
+ limits:
+ cpus: '4'
+ reservations:
+ cpus: '1'
+```
+
+---
+
+## 日誌管理
+
+### 查看日誌
+
+```bash
+docker logs convertx-cn
+docker logs -f convertx-cn # 即時追蹤
+docker logs --tail 100 convertx-cn # 最後 100 行
+```
+
+### 日誌輪轉
+
+```yaml
+services:
+ convertx:
+ # ...
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "10m"
+ max-file: "3"
+```
diff --git a/docs/configuration.md b/docs/configuration.md
deleted file mode 100644
index d499718..0000000
--- a/docs/configuration.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# 環境變數設定
-
-所有環境變數皆為選填,建議至少設定 `JWT_SECRET`。
-
-## 安全性設定
-
-| 變數名稱 | 預設值 | 說明 |
-| -------------------- | ------------ | ---------------------------------- |
-| JWT_SECRET | randomUUID() | 用於簽署 JWT 的密鑰字串(請務必更改) |
-| ACCOUNT_REGISTRATION | false | 是否允許註冊新帳號 |
-| HTTP_ALLOWED | false | 是否允許 HTTP 連線(僅本地使用) |
-| ALLOW_UNAUTHENTICATED| false | 是否允許未登入使用 |
-
-## 檔案管理
-
-| 變數名稱 | 預設值 | 說明 |
-| ------------------------- | ------ | ------------------------------------ |
-| AUTO_DELETE_EVERY_N_HOURS | 24 | 自動刪除超過 N 小時的檔案(0 = 停用) |
-
-## 進階設定
-
-| 變數名稱 | 預設值 | 說明 |
-| ------------------ | ------ | -------------------------------------- |
-| WEBROOT | | 子路徑部署,例如 `/convertx` |
-| FFMPEG_ARGS | | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
-| FFMPEG_OUTPUT_ARGS | | FFmpeg 輸出參數,例如 `-preset veryfast` |
-| HIDE_HISTORY | false | 隱藏歷史紀錄頁面 |
-| MAX_CONVERT_PROCESS| 0 | 最大同時轉換數(0 = 無限制) |
-
-## 本地化設定
-
-| 變數名稱 | 預設值 | 說明 |
-| -------- | ------ | ----------------------------- |
-| LANGUAGE | en | 日期格式語言(BCP 47 格式) |
-| TZ | UTC | 時區設定,例如 `Asia/Taipei` |
-
-## 範例配置
-
-### 開發環境
-
-```yaml
-environment:
- - HTTP_ALLOWED=true
- - ACCOUNT_REGISTRATION=true
-```
-
-### 生產環境
-
-```yaml
-environment:
- - JWT_SECRET=your-very-long-and-random-secret-key
- - ACCOUNT_REGISTRATION=false
- - HTTP_ALLOWED=false
- - TZ=Asia/Taipei
- - AUTO_DELETE_EVERY_N_HOURS=48
-```
-
-### 公開服務(允許匿名使用)
-
-```yaml
-environment:
- - ALLOW_UNAUTHENTICATED=true
- - HIDE_HISTORY=true
- - AUTO_DELETE_EVERY_N_HOURS=1
-```
diff --git a/docs/docker.md b/docs/docker.md
new file mode 100644
index 0000000..02ffadc
--- /dev/null
+++ b/docs/docker.md
@@ -0,0 +1,216 @@
+# Docker 配置指南
+
+## Docker Image
+
+ConvertX-CN 提供預建的 Docker Image,包含所有轉換依賴。
+
+### 可用 Tag
+
+| Tag | 說明 |
+|-----|------|
+| `convertx/convertx-cn:latest` | 最新穩定版 |
+| `convertx/convertx-cn:v0.1.3` | 指定版本號 |
+| `convertx/convertx-cn:v0.1.3-FULL` | 完整版(與 latest 相同) |
+
+### Image 大小
+
+由於內建完整依賴(LibreOffice、TexLive、FFmpeg 等),Image 約 **4-6 GB**。
+
+---
+
+## Docker Run
+
+基本啟動命令:
+
+```bash
+docker run -d \
+ --name convertx-cn \
+ -p 3000:3000 \
+ -v ./data:/app/data \
+ -e TZ=Asia/Taipei \
+ -e ACCOUNT_REGISTRATION=true \
+ convertx/convertx-cn:latest
+```
+
+### 參數說明
+
+| 參數 | 說明 |
+|------|------|
+| `-d` | 背景執行 |
+| `--name convertx-cn` | 容器名稱 |
+| `-p 3000:3000` | 連接埠映射 |
+| `-v ./data:/app/data` | 資料持久化 |
+| `-e TZ=Asia/Taipei` | 時區設定 |
+
+---
+
+## Docker Compose
+
+### 基本配置
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ container_name: convertx-cn
+ restart: unless-stopped
+ ports:
+ - "3000:3000"
+ volumes:
+ - ./data:/app/data
+ environment:
+ - TZ=Asia/Taipei
+ - JWT_SECRET=your-very-long-random-secret-key
+ - ACCOUNT_REGISTRATION=true
+```
+
+### 生產環境配置
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ container_name: convertx-cn
+ restart: unless-stopped
+ ports:
+ - "3000:3000"
+ volumes:
+ - ./data:/app/data
+ environment:
+ - TZ=Asia/Taipei
+ - JWT_SECRET=${JWT_SECRET}
+ - ACCOUNT_REGISTRATION=false
+ - HTTP_ALLOWED=false
+ - AUTO_DELETE_EVERY_N_HOURS=24
+ deploy:
+ resources:
+ limits:
+ memory: 4G
+ reservations:
+ memory: 2G
+```
+
+### 使用 Traefik 反向代理
+
+```yaml
+services:
+ convertx:
+ image: convertx/convertx-cn:latest
+ container_name: convertx-cn
+ restart: unless-stopped
+ volumes:
+ - ./data:/app/data
+ environment:
+ - TZ=Asia/Taipei
+ - JWT_SECRET=${JWT_SECRET}
+ - ACCOUNT_REGISTRATION=false
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.convertx.rule=Host(`convert.example.com`)"
+ - "traefik.http.routers.convertx.entrypoints=websecure"
+ - "traefik.http.routers.convertx.tls.certresolver=letsencrypt"
+ - "traefik.http.services.convertx.loadbalancer.server.port=3000"
+ networks:
+ - traefik
+
+networks:
+ traefik:
+ external: true
+```
+
+---
+
+## 資料持久化
+
+### Volume 結構
+
+```
+./data/
+├── uploads/ # 上傳的原始檔案
+├── output/ # 轉換後的檔案
+└── convertx.db # SQLite 資料庫
+```
+
+### 備份
+
+```bash
+# 備份資料
+docker cp convertx-cn:/app/data ./backup-$(date +%Y%m%d)
+
+# 還原資料
+docker cp ./backup-20240101/. convertx-cn:/app/data/
+```
+
+---
+
+## 更新
+
+### Docker Compose
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+### Docker Run
+
+```bash
+docker pull convertx/convertx-cn:latest
+docker stop convertx-cn
+docker rm convertx-cn
+docker run -d ... # 使用原本的參數
+```
+
+---
+
+## 健康檢查
+
+ConvertX-CN 提供健康檢查端點:
+
+```bash
+curl http://localhost:3000/healthcheck
+```
+
+可在 Docker Compose 中配置:
+
+```yaml
+services:
+ convertx:
+ # ...
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:3000/healthcheck"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+```
+
+---
+
+## 故障排除
+
+### 記憶體不足
+
+如果遇到 OOM(記憶體不足),請增加容器記憶體限制:
+
+```yaml
+deploy:
+ resources:
+ limits:
+ memory: 8G
+```
+
+### 連接埠衝突
+
+如果 3000 埠被占用,可更改映射:
+
+```bash
+-p 8080:3000 # 使用 8080 埠
+```
+
+### 權限問題
+
+確保 data 目錄有正確權限:
+
+```bash
+chmod -R 777 ./data
+```
diff --git a/docs/environment-variables.md b/docs/environment-variables.md
new file mode 100644
index 0000000..ff2fc97
--- /dev/null
+++ b/docs/environment-variables.md
@@ -0,0 +1,158 @@
+# 環境變數設定
+
+所有環境變數皆為選填,建議至少設定 `JWT_SECRET`。
+
+---
+
+## 安全性設定
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `JWT_SECRET` | `randomUUID()` | 用於簽署 JWT 的密鑰字串。**生產環境請務必設定** |
+| `ACCOUNT_REGISTRATION` | `false` | 是否允許註冊新帳號 |
+| `HTTP_ALLOWED` | `false` | 是否允許 HTTP 連線(僅本地使用建議開啟) |
+| `ALLOW_UNAUTHENTICATED` | `false` | 是否允許未登入使用 |
+
+### 安全建議
+
+```yaml
+# 生產環境
+environment:
+ - JWT_SECRET=a-very-long-random-string-at-least-32-characters
+ - ACCOUNT_REGISTRATION=false
+ - HTTP_ALLOWED=false
+ - ALLOW_UNAUTHENTICATED=false
+```
+
+---
+
+## 檔案管理
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `AUTO_DELETE_EVERY_N_HOURS` | `24` | 自動刪除超過 N 小時的檔案(0 = 停用) |
+
+### 範例
+
+```yaml
+# 每 48 小時清理一次
+- AUTO_DELETE_EVERY_N_HOURS=48
+
+# 停用自動清理
+- AUTO_DELETE_EVERY_N_HOURS=0
+```
+
+---
+
+## 轉換設定
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `MAX_CONVERT_PROCESS` | `0` | 最大同時轉換數(0 = 無限制) |
+| `FFMPEG_ARGS` | - | FFmpeg 輸入參數,例如 `-hwaccel vaapi` |
+| `FFMPEG_OUTPUT_ARGS` | - | FFmpeg 輸出參數,例如 `-preset veryfast` |
+
+### 硬體加速範例
+
+```yaml
+# NVIDIA GPU 加速
+- FFMPEG_ARGS=-hwaccel cuda
+
+# Intel QSV 加速
+- FFMPEG_ARGS=-hwaccel qsv
+
+# AMD VAAPI 加速
+- FFMPEG_ARGS=-hwaccel vaapi
+```
+
+---
+
+## 介面設定
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `WEBROOT` | - | 子路徑部署,例如 `/convertx` |
+| `HIDE_HISTORY` | `false` | 隱藏歷史紀錄頁面 |
+
+### 子路徑部署
+
+如果需要在子路徑部署(如 `https://example.com/convertx`):
+
+```yaml
+- WEBROOT=/convertx
+```
+
+---
+
+## 本地化設定
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `LANGUAGE` | `en` | 日期格式語言(BCP 47 格式) |
+| `TZ` | `UTC` | 時區設定 |
+
+### 常用時區
+
+```yaml
+# 台灣
+- TZ=Asia/Taipei
+
+# 中國
+- TZ=Asia/Shanghai
+
+# 日本
+- TZ=Asia/Tokyo
+
+# 美國東部
+- TZ=America/New_York
+```
+
+---
+
+## 進階設定
+
+| 變數名稱 | 預設值 | 說明 |
+|----------|--------|------|
+| `UNAUTHENTICATED_USER_SHARING` | `false` | 未登入使用者是否共享檔案空間 |
+
+---
+
+## 完整範例
+
+### 開發環境
+
+```yaml
+environment:
+ - HTTP_ALLOWED=true
+ - ACCOUNT_REGISTRATION=true
+ - TZ=Asia/Taipei
+```
+
+### 生產環境
+
+```yaml
+environment:
+ - JWT_SECRET=your-very-long-and-random-secret-key-change-me
+ - ACCOUNT_REGISTRATION=false
+ - HTTP_ALLOWED=false
+ - TZ=Asia/Taipei
+ - AUTO_DELETE_EVERY_N_HOURS=24
+```
+
+### 公開服務(允許匿名使用)
+
+```yaml
+environment:
+ - ALLOW_UNAUTHENTICATED=true
+ - HIDE_HISTORY=true
+ - AUTO_DELETE_EVERY_N_HOURS=1
+```
+
+### 帶硬體加速
+
+```yaml
+environment:
+ - JWT_SECRET=your-secret-key
+ - FFMPEG_ARGS=-hwaccel cuda
+ - FFMPEG_OUTPUT_ARGS=-c:v h264_nvenc -preset fast
+```
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 483f2e3..77dcbf6 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -2,25 +2,28 @@
## 系統需求
-- Docker 20.10+
-- Docker Compose v2+(推薦)
-- 至少 4GB RAM(建議 8GB)
-- 10GB 磁碟空間(用於 Docker image)
+| 需求 | 最低 | 建議 |
+|------|------|------|
+| Docker | 20.10+ | 24.0+ |
+| RAM | 4 GB | 8 GB |
+| 磁碟空間 | 10 GB | 20 GB |
+| CPU | 2 核心 | 4 核心 |
-## 安裝方式
+---
-### 方法一:Docker Run
+## 最快方式:一行指令
```bash
-docker run -d \
- --name convertx-cn \
- -p 3000:3000 \
- -v ./data:/app/data \
- -e TZ=Asia/Taipei \
- convertx/convertx-cn:latest
+docker run -d -p 3000:3000 -v ./data:/app/data -e ACCOUNT_REGISTRATION=true convertx/convertx-cn:latest
```
-### 方法二:Docker Compose(推薦)
+開啟瀏覽器訪問 `http://localhost:3000`,註冊帳號即可開始使用!
+
+---
+
+## 推薦方式:Docker Compose
+
+### 1. 建立配置檔
建立 `docker-compose.yml`:
@@ -37,32 +40,106 @@ services:
environment:
- TZ=Asia/Taipei
- JWT_SECRET=請更換為一個長且隨機的字串
- - ACCOUNT_REGISTRATION=false
+ - ACCOUNT_REGISTRATION=true
- HTTP_ALLOWED=false
- AUTO_DELETE_EVERY_N_HOURS=24
```
-啟動服務:
+### 2. 啟動服務
```bash
docker compose up -d
```
-## 首次設定
+### 3. 開始使用
1. 開啟瀏覽器訪問 `http://localhost:3000`
-2. 建立第一個帳號(此帳號即為管理員)
-3. 登入後即可開始使用
+2. 點擊「Register」建立帳號
+3. 登入後即可開始轉換檔案!
+
+---
+
+## 首次設定
+
+### 建立管理員帳號
+
+首次訪問時,ConvertX-CN 會顯示設定頁面,讓您建立第一個帳號。此帳號即為管理員。
+
+### 註冊功能
+
+- `ACCOUNT_REGISTRATION=true`:允許其他人註冊
+- `ACCOUNT_REGISTRATION=false`:停用註冊(單人使用)
+
+---
+
+## 驗證安裝
+
+### 檢查容器狀態
+
+```bash
+docker ps
+# 應該看到 convertx-cn 容器正在運行
+
+docker logs convertx-cn
+# 應該看到 "🦊 Elysia is running at http://localhost:3000"
+```
+
+### 健康檢查
+
+```bash
+curl http://localhost:3000/healthcheck
+# 應該返回 "OK"
+```
+
+---
## 更新版本
```bash
+# Docker Compose
docker compose pull
docker compose up -d
+
+# 或 Docker Run
+docker pull convertx/convertx-cn:latest
+docker stop convertx-cn
+docker rm convertx-cn
+# 然後重新執行 docker run 指令
```
+---
+
+## 常見問題
+
+### 無法訪問頁面
+
+1. 確認容器正在運行:`docker ps`
+2. 檢查連接埠是否被占用:`netstat -an | grep 3000`
+3. 查看錯誤日誌:`docker logs convertx-cn`
+
+### 權限錯誤
+
+```bash
+# 確保 data 目錄有正確權限
+chmod -R 777 ./data
+```
+
+### 記憶體不足
+
+ConvertX-CN 內建完整依賴,建議至少 4GB RAM。可透過 Docker 限制記憶體使用:
+
+```yaml
+deploy:
+ resources:
+ limits:
+ memory: 4G
+```
+
+---
+
## 下一步
-- 查看 [環境變數設定](./configuration.md)
-- 瞭解 [支援的轉換器](./converters.md)
-- 閱讀 [多語言設定](./i18n.md)
+- 📖 [Docker 配置](docker.md) - 進階 Docker 設定
+- ⚙️ [環境變數](environment-variables.md) - 所有可用設定
+- 🔧 [進階用法](advanced-usage.md) - 硬體加速、反向代理
+- 🌍 [多語言](i18n.md) - 語言設定與自訂
diff --git a/docs/i18n.md b/docs/i18n.md
index dd58938..ffc321d 100644
--- a/docs/i18n.md
+++ b/docs/i18n.md
@@ -1,33 +1,158 @@
# 多語言支援(i18n)
-ConvertX-CN 支援多種語言的使用者介面。
+ConvertX-CN 支援 **65 種語言**,是目前最完整的多語言檔案轉換服務。
-## 支援語言
+---
-| 語言代碼 | 語言名稱 |
-| -------- | ---------------- |
-| zh-TW | 繁體中文(預設) |
-| zh-CN | 简体中文 |
-| en | English |
-| ja | 日本語 |
-| ko | 한국어 |
+## 支援語言列表
+
+### 東亞語言(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. 在網站右上角的導航列可看到語言選擇器(圖示)
+### 方法一:介面切換
+
+1. 在網站右上角的導航列找到語言圖示(🌐)
2. 點擊後選擇偏好語言
3. 語言偏好會自動保存到 Cookie 中
-4. 下次訪問時會記住您的偏好
+
+### 方法二:URL 參數
+
+```
+http://localhost:3000/?lang=ja
+```
+
+### 方法三:瀏覽器設定
+
+ConvertX-CN 會自動偵測瀏覽器的語言設定。
+
+---
## 自動偵測
-首次訪問時,系統會根據瀏覽器的語言設定自動選擇最適合的語言。
-
-優先順序:
+首次訪問時,系統會根據以下優先順序選擇語言:
1. Cookie 中儲存的語言偏好
-2. 瀏覽器的 `Accept-Language` 標頭
-3. 預設語言(繁體中文)
+2. URL 參數中的 `lang` 值
+3. 瀏覽器的 `Accept-Language` 標頭
+4. 預設語言(繁體中文 `zh-TW`)
+
+---
## 新增語言
@@ -35,55 +160,83 @@ ConvertX-CN 支援多種語言的使用者介面。
### 1. 建立翻譯檔案
-在 `src/locales/` 目錄新增語言檔案,例如 `fr.json`(法文):
+在 `src/locales/` 目錄新增語言檔案,例如 `xx.json`:
```json
{
"common": {
"appName": "ConvertX-CN",
- "poweredBy": "Propulsé par",
+ "poweredBy": "Powered by",
+ "version": "v{version}",
+ "loading": "...",
...
},
"nav": {
- "history": "Historique",
+ "history": "...",
+ "account": "...",
...
- }
+ },
+ ...
}
```
-### 2. 註冊語言
+### 2. 在 index.ts 中註冊
-在 `src/i18n/index.ts` 中:
+編輯 `src/i18n/index.ts`:
```typescript
// 導入新語言檔案
-import fr from "../locales/fr.json";
+import xx from "../locales/xx.json";
+
+// 在 SupportedLocale 類型中添加
+export type SupportedLocale = "en" | "zh-TW" | ... | "xx";
// 在 supportedLocales 陣列中添加
export const supportedLocales: LocaleConfig[] = [
- // ... 現有語言
- { code: "fr", name: "French", nativeName: "Français" },
+ // ...
+ { code: "xx", name: "Language Name", nativeName: "原生名稱" },
];
// 在 translations 物件中註冊
const translations: Record = {
- // ... 現有翻譯
- fr: fr as TranslationData,
+ // ...
+ xx: xx as TranslationData,
};
```
-### 3. 更新類型定義
+### 3. 測試
-在 `SupportedLocale` 類型中添加新語言代碼:
-
-```typescript
-export type SupportedLocale = "zh-TW" | "zh-CN" | "en" | "ja" | "ko" | "fr";
+```bash
+bun run dev
+# 訪問 http://localhost:3000/?lang=xx
```
+---
+
+## 翻譯 Fallback
+
+如果某個翻譯鍵缺失,系統會:
+
+1. 嘗試使用英文(`en`)翻譯
+2. 如果英文也缺失,顯示鍵名(如 `nav.history`)
+
+---
+
## 貢獻翻譯
-歡迎提交 Pull Request 來新增或改進翻譯!請確保:
+歡迎提交 Pull Request 來新增或改進翻譯!
-- 翻譯完整(包含所有 key)
-- 語法正確
-- 遵循現有的翻譯風格
+### 翻譯指南
+
+1. **完整翻譯**:確保所有鍵都有翻譯
+2. **保留佔位符**:`{version}`、`{count}` 等佔位符不要翻譯
+3. **自然表達**:使用該語言的自然表達方式
+4. **一致性**:同一個詞在不同地方使用相同翻譯
+5. **測試**:在實際介面中測試翻譯效果
+
+### 提交流程
+
+1. Fork 此專案
+2. 建立新語言檔案或修改現有翻譯
+3. 測試確認無誤
+4. 提交 Pull Request
diff --git a/docs/url-id-and-storage.md b/docs/url-id-and-storage.md
new file mode 100644
index 0000000..52fe4c3
--- /dev/null
+++ b/docs/url-id-and-storage.md
@@ -0,0 +1,181 @@
+# URL ID 與儲存機制
+
+## 檔案儲存結構
+
+ConvertX-CN 使用以下目錄結構儲存檔案:
+
+```
+/app/data/
+├── convertx.db # SQLite 資料庫
+├── uploads/ # 上傳的原始檔案
+│ └── {user_id}/
+│ └── {job_id}/
+│ ├── file1.docx
+│ └── file2.pdf
+└── output/ # 轉換後的檔案
+ └── {user_id}/
+ └── {job_id}/
+ ├── file1.pdf
+ └── file2.txt
+```
+
+---
+
+## Job ID 說明
+
+每次轉換任務都會產生一個唯一的 Job ID,用於:
+
+- 追蹤轉換進度
+- 組織檔案儲存
+- 生成下載連結
+
+### Job ID 格式
+
+Job ID 是一個 UUID v4 格式的字串,例如:
+
+```
+550e8400-e29b-41d4-a716-446655440000
+```
+
+---
+
+## URL 結構
+
+### 結果頁面
+
+```
+/results/{job_id}
+```
+
+例如:
+```
+http://localhost:3000/results/550e8400-e29b-41d4-a716-446655440000
+```
+
+### 下載單一檔案
+
+```
+/download/{user_id}/{job_id}/{filename}
+```
+
+### 下載所有檔案(Tar)
+
+```
+/archive/{job_id}
+```
+
+---
+
+## 資料持久化
+
+### Docker Volume 映射
+
+為了確保資料不會在容器重啟後遺失,請務必映射 `/app/data` 目錄:
+
+```yaml
+volumes:
+ - ./data:/app/data
+```
+
+或使用 Named Volume:
+
+```yaml
+volumes:
+ - convertx-data:/app/data
+
+volumes:
+ convertx-data:
+```
+
+---
+
+## 自動清理
+
+ConvertX-CN 會根據 `AUTO_DELETE_EVERY_N_HOURS` 設定自動清理過期檔案。
+
+### 清理邏輯
+
+1. 系統每 N 小時執行一次清理
+2. 刪除建立時間超過 N 小時的 Job
+3. 同時刪除對應的上傳檔案和輸出檔案
+4. 資料庫記錄也會被清除
+
+### 設定範例
+
+```yaml
+# 每 24 小時清理一次
+- AUTO_DELETE_EVERY_N_HOURS=24
+
+# 每 1 小時清理一次(公開服務建議)
+- AUTO_DELETE_EVERY_N_HOURS=1
+
+# 停用自動清理
+- AUTO_DELETE_EVERY_N_HOURS=0
+```
+
+---
+
+## 資料庫
+
+ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
+
+### 資料表結構
+
+#### users
+
+| 欄位 | 類型 | 說明 |
+|------|------|------|
+| id | INTEGER | 使用者 ID |
+| email | TEXT | 電子郵件 |
+| password | TEXT | 密碼雜湊 |
+
+#### jobs
+
+| 欄位 | 類型 | 說明 |
+|------|------|------|
+| 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 | 轉換狀態 |
+
+---
+
+## 備份與還原
+
+### 備份
+
+```bash
+# 備份整個 data 目錄
+tar -czvf convertx-backup-$(date +%Y%m%d).tar.gz ./data
+
+# 僅備份資料庫
+cp ./data/convertx.db ./backup-convertx-$(date +%Y%m%d).db
+```
+
+### 還原
+
+```bash
+# 還原整個 data 目錄
+tar -xzvf convertx-backup-20240101.tar.gz
+
+# 還原資料庫
+cp ./backup-convertx-20240101.db ./data/convertx.db
+```
+
+---
+
+## 注意事項
+
+1. **權限問題**:確保 Docker 容器有權限寫入 data 目錄
+2. **磁碟空間**:大量轉換可能佔用大量磁碟空間,建議設定自動清理
+3. **資料安全**:敏感文件轉換後建議手動刪除或縮短保留時間
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index 3ecbc9e..02a6f4b 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -1,10 +1,90 @@
+// Core languages
import en from "../locales/en.json";
import zhTW from "../locales/zh-TW.json";
import zhCN from "../locales/zh-CN.json";
import ja from "../locales/ja.json";
import ko from "../locales/ko.json";
-export type SupportedLocale = "en" | "zh-TW" | "zh-CN" | "ja" | "ko";
+// European languages
+import de from "../locales/de.json";
+import fr from "../locales/fr.json";
+import es from "../locales/es.json";
+import it from "../locales/it.json";
+import pt from "../locales/pt.json";
+import ru from "../locales/ru.json";
+import nl from "../locales/nl.json";
+import pl from "../locales/pl.json";
+import uk from "../locales/uk.json";
+import cs from "../locales/cs.json";
+import sv from "../locales/sv.json";
+import da from "../locales/da.json";
+import fi from "../locales/fi.json";
+import no from "../locales/no.json";
+import el from "../locales/el.json";
+import hu from "../locales/hu.json";
+import ro from "../locales/ro.json";
+import bg from "../locales/bg.json";
+import hr from "../locales/hr.json";
+import sk from "../locales/sk.json";
+import sl from "../locales/sl.json";
+import lt from "../locales/lt.json";
+import lv from "../locales/lv.json";
+import et from "../locales/et.json";
+import sr from "../locales/sr.json";
+import ca from "../locales/ca.json";
+import eu from "../locales/eu.json";
+import gl from "../locales/gl.json";
+import is from "../locales/is.json";
+import ga from "../locales/ga.json";
+import cy from "../locales/cy.json";
+import mt from "../locales/mt.json";
+import mk from "../locales/mk.json";
+import sq from "../locales/sq.json";
+
+// Middle East & Central Asian languages
+import ar from "../locales/ar.json";
+import he from "../locales/he.json";
+import fa from "../locales/fa.json";
+import tr from "../locales/tr.json";
+
+// South Asian languages
+import hi from "../locales/hi.json";
+import bn from "../locales/bn.json";
+import ta from "../locales/ta.json";
+import te from "../locales/te.json";
+import mr from "../locales/mr.json";
+import gu from "../locales/gu.json";
+import kn from "../locales/kn.json";
+import ml from "../locales/ml.json";
+import ne from "../locales/ne.json";
+import si from "../locales/si.json";
+
+// Southeast Asian languages
+import th from "../locales/th.json";
+import vi from "../locales/vi.json";
+import id from "../locales/id.json";
+import ms from "../locales/ms.json";
+import fil from "../locales/fil.json";
+import my from "../locales/my.json";
+import km from "../locales/km.json";
+import lo from "../locales/lo.json";
+
+// African languages
+import af from "../locales/af.json";
+import sw from "../locales/sw.json";
+import am from "../locales/am.json";
+import zu from "../locales/zu.json";
+
+export type SupportedLocale =
+ | "en" | "zh-TW" | "zh-CN" | "ja" | "ko"
+ | "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";
export interface LocaleConfig {
code: SupportedLocale;
@@ -13,11 +93,82 @@ export interface LocaleConfig {
}
export const supportedLocales: LocaleConfig[] = [
+ // Primary languages
{ code: "zh-TW", name: "Chinese (Traditional)", nativeName: "繁體中文" },
{ code: "zh-CN", name: "Chinese (Simplified)", nativeName: "简体中文" },
{ code: "en", name: "English", nativeName: "English" },
{ code: "ja", name: "Japanese", nativeName: "日本語" },
{ code: "ko", name: "Korean", nativeName: "한국어" },
+
+ // European languages
+ { code: "de", name: "German", nativeName: "Deutsch" },
+ { code: "fr", name: "French", nativeName: "Français" },
+ { code: "es", name: "Spanish", nativeName: "Español" },
+ { code: "it", name: "Italian", nativeName: "Italiano" },
+ { code: "pt", name: "Portuguese", nativeName: "Português" },
+ { code: "ru", name: "Russian", nativeName: "Русский" },
+ { code: "nl", name: "Dutch", nativeName: "Nederlands" },
+ { code: "pl", name: "Polish", nativeName: "Polski" },
+ { code: "uk", name: "Ukrainian", nativeName: "Українська" },
+ { code: "cs", name: "Czech", nativeName: "Čeština" },
+ { code: "sv", name: "Swedish", nativeName: "Svenska" },
+ { code: "da", name: "Danish", nativeName: "Dansk" },
+ { code: "fi", name: "Finnish", nativeName: "Suomi" },
+ { code: "no", name: "Norwegian", nativeName: "Norsk" },
+ { code: "el", name: "Greek", nativeName: "Ελληνικά" },
+ { code: "hu", name: "Hungarian", nativeName: "Magyar" },
+ { code: "ro", name: "Romanian", nativeName: "Română" },
+ { code: "bg", name: "Bulgarian", nativeName: "Български" },
+ { code: "hr", name: "Croatian", nativeName: "Hrvatski" },
+ { code: "sk", name: "Slovak", nativeName: "Slovenčina" },
+ { code: "sl", name: "Slovenian", nativeName: "Slovenščina" },
+ { code: "lt", name: "Lithuanian", nativeName: "Lietuvių" },
+ { code: "lv", name: "Latvian", nativeName: "Latviešu" },
+ { code: "et", name: "Estonian", nativeName: "Eesti" },
+ { code: "sr", name: "Serbian", nativeName: "Српски" },
+ { code: "ca", name: "Catalan", nativeName: "Català" },
+ { code: "eu", name: "Basque", nativeName: "Euskara" },
+ { code: "gl", name: "Galician", nativeName: "Galego" },
+ { code: "is", name: "Icelandic", nativeName: "Íslenska" },
+ { code: "ga", name: "Irish", nativeName: "Gaeilge" },
+ { code: "cy", name: "Welsh", nativeName: "Cymraeg" },
+ { code: "mt", name: "Maltese", nativeName: "Malti" },
+ { code: "mk", name: "Macedonian", nativeName: "Македонски" },
+ { code: "sq", name: "Albanian", nativeName: "Shqip" },
+
+ // Middle East & Central Asian languages
+ { code: "ar", name: "Arabic", nativeName: "العربية" },
+ { code: "he", name: "Hebrew", nativeName: "עברית" },
+ { code: "fa", name: "Persian", nativeName: "فارسی" },
+ { code: "tr", name: "Turkish", nativeName: "Türkçe" },
+
+ // South Asian languages
+ { code: "hi", name: "Hindi", nativeName: "हिन्दी" },
+ { code: "bn", name: "Bengali", nativeName: "বাংলা" },
+ { code: "ta", name: "Tamil", nativeName: "தமிழ்" },
+ { code: "te", name: "Telugu", nativeName: "తెలుగు" },
+ { code: "mr", name: "Marathi", nativeName: "मराठी" },
+ { code: "gu", name: "Gujarati", nativeName: "ગુજરાતી" },
+ { code: "kn", name: "Kannada", nativeName: "ಕನ್ನಡ" },
+ { code: "ml", name: "Malayalam", nativeName: "മലയാളം" },
+ { code: "ne", name: "Nepali", nativeName: "नेपाली" },
+ { code: "si", name: "Sinhala", nativeName: "සිංහල" },
+
+ // Southeast Asian languages
+ { code: "th", name: "Thai", nativeName: "ไทย" },
+ { code: "vi", name: "Vietnamese", nativeName: "Tiếng Việt" },
+ { code: "id", name: "Indonesian", nativeName: "Bahasa Indonesia" },
+ { code: "ms", name: "Malay", nativeName: "Bahasa Melayu" },
+ { code: "fil", name: "Filipino", nativeName: "Filipino" },
+ { code: "my", name: "Burmese", nativeName: "မြန်မာ" },
+ { code: "km", name: "Khmer", nativeName: "ខ្មែរ" },
+ { code: "lo", name: "Lao", nativeName: "ລາວ" },
+
+ // African languages
+ { code: "af", name: "Afrikaans", nativeName: "Afrikaans" },
+ { code: "sw", name: "Swahili", nativeName: "Kiswahili" },
+ { code: "am", name: "Amharic", nativeName: "አማርኛ" },
+ { code: "zu", name: "Zulu", nativeName: "isiZulu" },
];
// Default to zh-TW, fallback to en
@@ -30,11 +181,82 @@ export type TranslationKey = keyof TranslationData;
export type NestedTranslationKey = keyof TranslationData[T];
const translations: Record = {
+ // Core languages
en,
"zh-TW": zhTW as TranslationData,
"zh-CN": zhCN as TranslationData,
ja: ja as TranslationData,
ko: ko as TranslationData,
+
+ // European languages
+ de: de as TranslationData,
+ fr: fr as TranslationData,
+ es: es as TranslationData,
+ it: it as TranslationData,
+ pt: pt as TranslationData,
+ ru: ru as TranslationData,
+ nl: nl as TranslationData,
+ pl: pl as TranslationData,
+ uk: uk as TranslationData,
+ cs: cs as TranslationData,
+ sv: sv as TranslationData,
+ da: da as TranslationData,
+ fi: fi as TranslationData,
+ no: no as TranslationData,
+ el: el as TranslationData,
+ hu: hu as TranslationData,
+ ro: ro as TranslationData,
+ bg: bg as TranslationData,
+ hr: hr as TranslationData,
+ sk: sk as TranslationData,
+ sl: sl as TranslationData,
+ lt: lt as TranslationData,
+ lv: lv as TranslationData,
+ et: et as TranslationData,
+ sr: sr as TranslationData,
+ ca: ca as TranslationData,
+ eu: eu as TranslationData,
+ gl: gl as TranslationData,
+ is: is as TranslationData,
+ ga: ga as TranslationData,
+ cy: cy as TranslationData,
+ mt: mt as TranslationData,
+ mk: mk as TranslationData,
+ sq: sq as TranslationData,
+
+ // Middle East & Central Asian languages
+ ar: ar as TranslationData,
+ he: he as TranslationData,
+ fa: fa as TranslationData,
+ tr: tr as TranslationData,
+
+ // South Asian languages
+ hi: hi as TranslationData,
+ bn: bn as TranslationData,
+ ta: ta as TranslationData,
+ te: te as TranslationData,
+ mr: mr as TranslationData,
+ gu: gu as TranslationData,
+ kn: kn as TranslationData,
+ ml: ml as TranslationData,
+ ne: ne as TranslationData,
+ si: si as TranslationData,
+
+ // Southeast Asian languages
+ th: th as TranslationData,
+ vi: vi as TranslationData,
+ id: id as TranslationData,
+ ms: ms as TranslationData,
+ fil: fil as TranslationData,
+ my: my as TranslationData,
+ km: km as TranslationData,
+ lo: lo as TranslationData,
+
+ // African languages
+ af: af as TranslationData,
+ sw: sw as TranslationData,
+ am: am as TranslationData,
+ zu: zu as TranslationData,
};
/**
@@ -51,16 +273,14 @@ export function t(
key: NestedTranslationKey,
params?: Record,
): string {
- const translation = translations[locale]?.[category]?.[key as keyof TranslationData[T]];
+ const localeData = translations[locale];
+ const translation = localeData?.[category]?.[key as keyof TranslationData[T]];
if (typeof translation !== "string") {
// Fallback to English
const fallback =
- translations[defaultLocale]?.[category]?.[key as keyof TranslationData[T]];
+ translations[fallbackLocale]?.[category]?.[key as keyof TranslationData[T]];
if (typeof fallback !== "string") {
- // Log missing translation in development
- // eslint-disable-next-line no-console
- console.warn(`Missing translation: ${category}.${String(key)}`);
return `${category}.${String(key)}`;
}
return interpolate(fallback, params);
@@ -105,9 +325,12 @@ export function detectLocale(acceptLanguage?: string): SupportedLocale {
// Try to find a match
for (const lang of languages) {
- // Direct match
- if (isValidLocale(lang.code)) {
- return lang.code as SupportedLocale;
+ // Direct match (case-insensitive)
+ const directMatch = supportedLocales.find(
+ (l) => l.code.toLowerCase() === lang.code
+ );
+ if (directMatch) {
+ return directMatch.code;
}
// Check for language variants (e.g., zh-tw, zh-hant)
@@ -120,11 +343,16 @@ export function detectLocale(acceptLanguage?: string): SupportedLocale {
}
}
- // Check base language
+ // Check base language (e.g., "en-US" -> "en")
const baseCode = lang.code.split("-")[0];
- if (baseCode === "ja") return "ja";
- if (baseCode === "ko") return "ko";
- if (baseCode === "en") return "en";
+ if (baseCode) {
+ const baseMatch = supportedLocales.find(
+ (l) => l.code.toLowerCase() === baseCode || l.code.toLowerCase().startsWith(baseCode + "-")
+ );
+ if (baseMatch) {
+ return baseMatch.code;
+ }
+ }
}
return defaultLocale;
@@ -173,7 +401,7 @@ export type Translator = ReturnType;
// Export all translations for client-side use
export function getTranslations(locale: SupportedLocale): TranslationData {
- return translations[locale] ?? translations[defaultLocale];
+ return translations[locale] ?? translations[fallbackLocale];
}
// Export locale codes as array
diff --git a/src/locales/af.json b/src/locales/af.json
new file mode 100644
index 0000000..6705f4b
--- /dev/null
+++ b/src/locales/af.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Aangedryf deur",
+ "version": "v{version}",
+ "loading": "Laai...",
+ "error": "Fout",
+ "success": "Sukses",
+ "confirm": "Bevestig",
+ "cancel": "Kanselleer",
+ "close": "Sluit",
+ "save": "Stoor",
+ "delete": "Vee uit",
+ "remove": "Verwyder",
+ "download": "Laai af",
+ "upload": "Laai op",
+ "submit": "Dien in",
+ "back": "Terug",
+ "next": "Volgende",
+ "yes": "Ja",
+ "no": "Nee"
+ },
+ "nav": {
+ "history": "Geskiedenis",
+ "account": "Rekening",
+ "logout": "Teken uit",
+ "login": "Teken in",
+ "register": "Registreer",
+ "language": "Taal"
+ },
+ "convert": {
+ "title": "Omskakel",
+ "titleWithType": "Omskakel .{fileType}",
+ "chooseFile": "Kies 'n lêer",
+ "orDragHere": "of sleep dit hierheen",
+ "searchConversions": "Soek vir omskakelings",
+ "convertTo": "Omskakel na",
+ "convertButton": "Omskakel",
+ "uploading": "Laai op...",
+ "processing": "Verwerk..."
+ },
+ "results": {
+ "title": "Resultate",
+ "convertedFileName": "Omgeskakelde lêernaam",
+ "status": "Status",
+ "actions": "Aksies",
+ "downloadAll": "Alles",
+ "downloadTar": "Tar",
+ "deleteJob": "Vee uit",
+ "noFiles": "Nog geen lêers omgeskakel nie.",
+ "statusPending": "Hangend",
+ "statusCompleted": "Voltooi",
+ "statusFailed": "Misluk"
+ },
+ "history": {
+ "title": "Resultate",
+ "time": "Tyd",
+ "files": "Lêers",
+ "filesDone": "Lêers klaar",
+ "status": "Status",
+ "actions": "Aksies",
+ "expandDetails": "Brei besonderhede uit",
+ "detailedFileInfo": "Gedetailleerde lêerinligting:",
+ "deleteSelected": "Vee gekose uit",
+ "selectAll": "Kies alles",
+ "confirmDelete": "Is jy seker jy wil {count} taak/take uitvee? Hierdie aksie kan nie ongedaan gemaak word nie.",
+ "deleteSuccess": "{deleted} taak/take suksesvol uitgevee.",
+ "deleteFailed": "Kon nie {failed} taak/take uitvee nie.",
+ "deleteError": "'n Fout het voorgekom tydens die uitvee van take. Probeer asseblief weer."
+ },
+ "auth": {
+ "email": "E-pos",
+ "password": "Wagwoord",
+ "currentPassword": "Huidige wagwoord",
+ "newPassword": "Wagwoord (laat leeg vir onveranderd)",
+ "loginButton": "Teken in",
+ "registerButton": "Registreer",
+ "updateButton": "Werk op",
+ "createAccount": "Skep rekening",
+ "invalidCredentials": "Ongeldige geloofsbriewe.",
+ "emailInUse": "E-pos word reeds gebruik.",
+ "unauthorized": "Ongemagtig",
+ "cookiesRequired": "Koekies moet geaktiveer wees om hierdie toepassing te gebruik.",
+ "noCookies": "Geen verifikasie-koekie nie, miskien blokkeer jou blaaier koekies."
+ },
+ "setup": {
+ "welcome": "Welkom by ConvertX-CN!",
+ "createYourAccount": "Skep jou rekening",
+ "reportIssues": "Rapporteer enige probleme op",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Taak nie gevind nie.",
+ "fileNotFound": "Lêer nie gevind nie.",
+ "uploadFailed": "Oplaai het misluk.",
+ "conversionFailed": "Omskakeling het misluk.",
+ "serverError": "Bediener fout."
+ },
+ "upload": {
+ "success": "Lêers suksesvol opgelaai.",
+ "dragDrop": "Laat lêers hier val"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/am.json b/src/locales/am.json
new file mode 100644
index 0000000..b2579fe
--- /dev/null
+++ b/src/locales/am.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "የሚሰራው በ",
+ "version": "v{version}",
+ "loading": "በመጫን ላይ...",
+ "error": "ስህተት",
+ "success": "ተሳክቷል",
+ "confirm": "አረጋግጥ",
+ "cancel": "ሰርዝ",
+ "close": "ዝጋ",
+ "save": "አስቀምጥ",
+ "delete": "ሰርዝ",
+ "remove": "አስወግድ",
+ "download": "አውርድ",
+ "upload": "ስቀል",
+ "submit": "አስገባ",
+ "back": "ተመለስ",
+ "next": "ቀጣይ",
+ "yes": "አዎ",
+ "no": "አይ"
+ },
+ "nav": {
+ "history": "ታሪክ",
+ "account": "መለያ",
+ "logout": "ውጣ",
+ "login": "ግባ",
+ "register": "ተመዝገብ",
+ "language": "ቋንቋ"
+ },
+ "convert": {
+ "title": "ቀይር",
+ "titleWithType": ".{fileType} ቀይር",
+ "chooseFile": "ፋይል ይምረጡ",
+ "orDragHere": "ወይም እዚህ ይጎትቱ",
+ "searchConversions": "ቅየራዎችን ይፈልጉ",
+ "convertTo": "ወደ ቀይር",
+ "convertButton": "ቀይር",
+ "uploading": "በመስቀል ላይ...",
+ "processing": "በማስኬድ ላይ..."
+ },
+ "results": {
+ "title": "ውጤቶች",
+ "convertedFileName": "የተቀየረ ፋይል ስም",
+ "status": "ሁኔታ",
+ "actions": "ድርጊቶች",
+ "downloadAll": "ሁሉም",
+ "downloadTar": "Tar",
+ "deleteJob": "ሰርዝ",
+ "noFiles": "እስካሁን የተቀየሩ ፋይሎች የሉም።",
+ "statusPending": "በመጠባበቅ ላይ",
+ "statusCompleted": "ተጠናቋል",
+ "statusFailed": "አልተሳካም"
+ },
+ "history": {
+ "title": "ውጤቶች",
+ "time": "ጊዜ",
+ "files": "ፋይሎች",
+ "filesDone": "የተጠናቀቁ ፋይሎች",
+ "status": "ሁኔታ",
+ "actions": "ድርጊቶች",
+ "expandDetails": "ዝርዝሮችን አስፋ",
+ "detailedFileInfo": "ዝርዝር የፋይል መረጃ:",
+ "deleteSelected": "የተመረጡትን ሰርዝ",
+ "selectAll": "ሁሉንም ምረጥ",
+ "confirmDelete": "{count} ስራ(ዎች)ን መሰረዝ እንደሚፈልጉ እርግጠኛ ነዎት? ይህ ድርጊት ሊቀለበስ አይችልም።",
+ "deleteSuccess": "{deleted} ስራ(ዎች) በተሳካ ሁኔታ ተሰርዘዋል።",
+ "deleteFailed": "{failed} ስራ(ዎች)ን መሰረዝ አልተሳካም።",
+ "deleteError": "ስራዎችን በመሰረዝ ጊዜ ስህተት ተከስቷል። እባክዎ እንደገና ይሞክሩ።"
+ },
+ "auth": {
+ "email": "ኢሜይል",
+ "password": "የይለፍ ቃል",
+ "currentPassword": "የአሁኑ የይለፍ ቃል",
+ "newPassword": "የይለፍ ቃል (ሳይቀየር ለመተው ባዶ ይተው)",
+ "loginButton": "ግባ",
+ "registerButton": "ተመዝገብ",
+ "updateButton": "አዘምን",
+ "createAccount": "መለያ ፍጠር",
+ "invalidCredentials": "ልክ ያልሆነ መረጃ።",
+ "emailInUse": "ኢሜይሉ አስቀድሞ ጥቅም ላይ ውሏል።",
+ "unauthorized": "ያልተፈቀደ",
+ "cookiesRequired": "ይህን መተግበሪያ ለመጠቀም ኩኪዎች መንቃት አለባቸው።",
+ "noCookies": "የማረጋገጫ ኩኪ የለም፣ ምናልባት ብራውዘርዎ ኩኪዎችን እያገደ ሊሆን ይችላል።"
+ },
+ "setup": {
+ "welcome": "ወደ ConvertX-CN እንኳን ደህና መጡ!",
+ "createYourAccount": "መለያዎን ይፍጠሩ",
+ "reportIssues": "ማንኛውንም ችግር ያሳውቁ በ",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "ስራ አልተገኘም።",
+ "fileNotFound": "ፋይል አልተገኘም።",
+ "uploadFailed": "መስቀል አልተሳካም።",
+ "conversionFailed": "መቀየር አልተሳካም።",
+ "serverError": "የሰርቨር ስህተት።"
+ },
+ "upload": {
+ "success": "ፋይሎች በተሳካ ሁኔታ ተሰቅለዋል።",
+ "dragDrop": "ፋይሎችን እዚህ ይጣሉ"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ar.json b/src/locales/ar.json
new file mode 100644
index 0000000..04e9313
--- /dev/null
+++ b/src/locales/ar.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "مدعوم من",
+ "version": "v{version}",
+ "loading": "جاري التحميل...",
+ "error": "خطأ",
+ "success": "نجاح",
+ "confirm": "تأكيد",
+ "cancel": "إلغاء",
+ "close": "إغلاق",
+ "save": "حفظ",
+ "delete": "حذف",
+ "remove": "إزالة",
+ "download": "تحميل",
+ "upload": "رفع",
+ "submit": "إرسال",
+ "back": "رجوع",
+ "next": "التالي",
+ "yes": "نعم",
+ "no": "لا"
+ },
+ "nav": {
+ "history": "السجل",
+ "account": "الحساب",
+ "logout": "تسجيل الخروج",
+ "login": "تسجيل الدخول",
+ "register": "التسجيل",
+ "language": "اللغة"
+ },
+ "convert": {
+ "title": "تحويل",
+ "titleWithType": "تحويل .{fileType}",
+ "chooseFile": "اختر ملفاً",
+ "orDragHere": "أو اسحبه هنا",
+ "searchConversions": "البحث عن التحويلات",
+ "convertTo": "تحويل إلى",
+ "convertButton": "تحويل",
+ "uploading": "جاري الرفع...",
+ "processing": "جاري المعالجة..."
+ },
+ "results": {
+ "title": "النتائج",
+ "convertedFileName": "اسم الملف المحوّل",
+ "status": "الحالة",
+ "actions": "الإجراءات",
+ "downloadAll": "الكل",
+ "downloadTar": "Tar",
+ "deleteJob": "حذف",
+ "noFiles": "لم يتم تحويل أي ملفات بعد.",
+ "statusPending": "قيد الانتظار",
+ "statusCompleted": "مكتمل",
+ "statusFailed": "فشل"
+ },
+ "history": {
+ "title": "النتائج",
+ "time": "الوقت",
+ "files": "الملفات",
+ "filesDone": "الملفات المنجزة",
+ "status": "الحالة",
+ "actions": "الإجراءات",
+ "expandDetails": "توسيع التفاصيل",
+ "detailedFileInfo": "معلومات تفصيلية عن الملف:",
+ "deleteSelected": "حذف المحدد",
+ "selectAll": "تحديد الكل",
+ "confirmDelete": "هل أنت متأكد من حذف {count} مهمة؟ لا يمكن التراجع عن هذا الإجراء.",
+ "deleteSuccess": "تم حذف {deleted} مهمة بنجاح.",
+ "deleteFailed": "فشل حذف {failed} مهمة.",
+ "deleteError": "حدث خطأ أثناء حذف المهام. يرجى المحاولة مرة أخرى."
+ },
+ "auth": {
+ "email": "البريد الإلكتروني",
+ "password": "كلمة المرور",
+ "currentPassword": "كلمة المرور الحالية",
+ "newPassword": "كلمة المرور (اتركها فارغة لعدم التغيير)",
+ "loginButton": "تسجيل الدخول",
+ "registerButton": "التسجيل",
+ "updateButton": "تحديث",
+ "createAccount": "إنشاء حساب",
+ "invalidCredentials": "بيانات الاعتماد غير صالحة.",
+ "emailInUse": "البريد الإلكتروني مستخدم بالفعل.",
+ "unauthorized": "غير مصرح",
+ "cookiesRequired": "يجب تفعيل ملفات تعريف الارتباط لاستخدام هذا التطبيق.",
+ "noCookies": "لا يوجد ملف تعريف ارتباط للمصادقة، ربما يقوم متصفحك بحظر ملفات تعريف الارتباط."
+ },
+ "setup": {
+ "welcome": "مرحباً بك في ConvertX-CN!",
+ "createYourAccount": "أنشئ حسابك",
+ "reportIssues": "الإبلاغ عن المشاكل على",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "المهمة غير موجودة.",
+ "fileNotFound": "الملف غير موجود.",
+ "uploadFailed": "فشل الرفع.",
+ "conversionFailed": "فشل التحويل.",
+ "serverError": "خطأ في الخادم."
+ },
+ "upload": {
+ "success": "تم رفع الملفات بنجاح.",
+ "dragDrop": "أفلت الملفات هنا"
+ },
+ "file": {
+ "size": "{size} كيلوبايت"
+ }
+}
diff --git a/src/locales/bg.json b/src/locales/bg.json
new file mode 100644
index 0000000..2f16037
--- /dev/null
+++ b/src/locales/bg.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Задвижвано от",
+ "version": "v{version}",
+ "loading": "Зареждане...",
+ "error": "Грешка",
+ "success": "Успех",
+ "confirm": "Потвърди",
+ "cancel": "Отказ",
+ "close": "Затвори",
+ "save": "Запази",
+ "delete": "Изтрий",
+ "remove": "Премахни",
+ "download": "Изтегли",
+ "upload": "Качи",
+ "submit": "Изпрати",
+ "back": "Назад",
+ "next": "Напред",
+ "yes": "Да",
+ "no": "Не"
+ },
+ "nav": {
+ "history": "История",
+ "account": "Акаунт",
+ "logout": "Изход",
+ "login": "Вход",
+ "register": "Регистрация",
+ "language": "Език"
+ },
+ "convert": {
+ "title": "Конвертиране",
+ "titleWithType": "Конвертиране на .{fileType}",
+ "chooseFile": "Изберете файл",
+ "orDragHere": "или го плъзнете тук",
+ "searchConversions": "Търсене на конверсии",
+ "convertTo": "Конвертирай в",
+ "convertButton": "Конвертирай",
+ "uploading": "Качване...",
+ "processing": "Обработка..."
+ },
+ "results": {
+ "title": "Резултати",
+ "convertedFileName": "Име на конвертирания файл",
+ "status": "Статус",
+ "actions": "Действия",
+ "downloadAll": "Всички",
+ "downloadTar": "Tar",
+ "deleteJob": "Изтрий",
+ "noFiles": "Все още няма конвертирани файлове.",
+ "statusPending": "Изчакване",
+ "statusCompleted": "Завършено",
+ "statusFailed": "Неуспешно"
+ },
+ "history": {
+ "title": "Резултати",
+ "time": "Време",
+ "files": "Файлове",
+ "filesDone": "Готови файлове",
+ "status": "Статус",
+ "actions": "Действия",
+ "expandDetails": "Разгъни детайлите",
+ "detailedFileInfo": "Подробна информация за файла:",
+ "deleteSelected": "Изтрий избраните",
+ "selectAll": "Избери всички",
+ "confirmDelete": "Сигурни ли сте, че искате да изтриете {count} задача(и)? Това действие не може да бъде отменено.",
+ "deleteSuccess": "Успешно изтрити {deleted} задача(и).",
+ "deleteFailed": "Неуспешно изтриване на {failed} задача(и).",
+ "deleteError": "Възникна грешка при изтриването на задачи. Моля, опитайте отново."
+ },
+ "auth": {
+ "email": "Имейл",
+ "password": "Парола",
+ "currentPassword": "Текуща парола",
+ "newPassword": "Парола (оставете празно за непроменена)",
+ "loginButton": "Вход",
+ "registerButton": "Регистрация",
+ "updateButton": "Актуализиране",
+ "createAccount": "Създай акаунт",
+ "invalidCredentials": "Невалидни идентификационни данни.",
+ "emailInUse": "Имейлът вече се използва.",
+ "unauthorized": "Неоторизиран",
+ "cookiesRequired": "Бисквитките трябва да са активирани, за да използвате това приложение.",
+ "noCookies": "Няма бисквитка за удостоверяване, може би браузърът ви блокира бисквитките."
+ },
+ "setup": {
+ "welcome": "Добре дошли в ConvertX-CN!",
+ "createYourAccount": "Създайте своя акаунт",
+ "reportIssues": "Докладвайте проблеми на",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Задачата не е намерена.",
+ "fileNotFound": "Файлът не е намерен.",
+ "uploadFailed": "Качването е неуспешно.",
+ "conversionFailed": "Конвертирането е неуспешно.",
+ "serverError": "Сървърна грешка."
+ },
+ "upload": {
+ "success": "Файловете са качени успешно.",
+ "dragDrop": "Пуснете файловете тук"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/bn.json b/src/locales/bn.json
new file mode 100644
index 0000000..418e8ea
--- /dev/null
+++ b/src/locales/bn.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "দ্বারা চালিত",
+ "version": "v{version}",
+ "loading": "লোড হচ্ছে...",
+ "error": "ত্রুটি",
+ "success": "সফল",
+ "confirm": "নিশ্চিত করুন",
+ "cancel": "বাতিল",
+ "close": "বন্ধ করুন",
+ "save": "সংরক্ষণ করুন",
+ "delete": "মুছুন",
+ "remove": "সরান",
+ "download": "ডাউনলোড",
+ "upload": "আপলোড",
+ "submit": "জমা দিন",
+ "back": "পেছনে",
+ "next": "পরবর্তী",
+ "yes": "হ্যাঁ",
+ "no": "না"
+ },
+ "nav": {
+ "history": "ইতিহাস",
+ "account": "অ্যাকাউন্ট",
+ "logout": "লগআউট",
+ "login": "লগইন",
+ "register": "নিবন্ধন",
+ "language": "ভাষা"
+ },
+ "convert": {
+ "title": "রূপান্তর করুন",
+ "titleWithType": ".{fileType} রূপান্তর করুন",
+ "chooseFile": "একটি ফাইল নির্বাচন করুন",
+ "orDragHere": "অথবা এখানে টেনে আনুন",
+ "searchConversions": "রূপান্তর খুঁজুন",
+ "convertTo": "এতে রূপান্তর করুন",
+ "convertButton": "রূপান্তর করুন",
+ "uploading": "আপলোড হচ্ছে...",
+ "processing": "প্রক্রিয়াকরণ হচ্ছে..."
+ },
+ "results": {
+ "title": "ফলাফল",
+ "convertedFileName": "রূপান্তরিত ফাইলের নাম",
+ "status": "স্থিতি",
+ "actions": "ক্রিয়াকলাপ",
+ "downloadAll": "সব",
+ "downloadTar": "Tar",
+ "deleteJob": "মুছুন",
+ "noFiles": "এখনও কোনো ফাইল রূপান্তরিত হয়নি।",
+ "statusPending": "অপেক্ষমাণ",
+ "statusCompleted": "সম্পন্ন",
+ "statusFailed": "ব্যর্থ"
+ },
+ "history": {
+ "title": "ফলাফল",
+ "time": "সময়",
+ "files": "ফাইল",
+ "filesDone": "সম্পন্ন ফাইল",
+ "status": "স্থিতি",
+ "actions": "ক্রিয়াকলাপ",
+ "expandDetails": "বিস্তারিত দেখুন",
+ "detailedFileInfo": "বিস্তারিত ফাইল তথ্য:",
+ "deleteSelected": "নির্বাচিত মুছুন",
+ "selectAll": "সব নির্বাচন করুন",
+ "confirmDelete": "আপনি কি নিশ্চিত যে আপনি {count}টি কাজ মুছতে চান? এই ক্রিয়া পূর্বাবস্থায় ফেরানো যাবে না।",
+ "deleteSuccess": "সফলভাবে {deleted}টি কাজ মুছে ফেলা হয়েছে।",
+ "deleteFailed": "{failed}টি কাজ মুছতে ব্যর্থ।",
+ "deleteError": "কাজ মুছতে গিয়ে একটি ত্রুটি ঘটেছে। অনুগ্রহ করে আবার চেষ্টা করুন।"
+ },
+ "auth": {
+ "email": "ইমেইল",
+ "password": "পাসওয়ার্ড",
+ "currentPassword": "বর্তমান পাসওয়ার্ড",
+ "newPassword": "পাসওয়ার্ড (অপরিবর্তিত রাখতে ফাঁকা রাখুন)",
+ "loginButton": "লগইন",
+ "registerButton": "নিবন্ধন",
+ "updateButton": "আপডেট",
+ "createAccount": "অ্যাকাউন্ট তৈরি করুন",
+ "invalidCredentials": "অবৈধ শংসাপত্র।",
+ "emailInUse": "ইমেইল ইতিমধ্যে ব্যবহৃত।",
+ "unauthorized": "অননুমোদিত",
+ "cookiesRequired": "এই অ্যাপ ব্যবহার করতে কুকি সক্ষম করা উচিত।",
+ "noCookies": "কোনো প্রমাণীকরণ কুকি নেই, সম্ভবত আপনার ব্রাউজার কুকি ব্লক করছে।"
+ },
+ "setup": {
+ "welcome": "ConvertX-CN-এ স্বাগতম!",
+ "createYourAccount": "আপনার অ্যাকাউন্ট তৈরি করুন",
+ "reportIssues": "সমস্যা রিপোর্ট করুন",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "কাজ পাওয়া যায়নি।",
+ "fileNotFound": "ফাইল পাওয়া যায়নি।",
+ "uploadFailed": "আপলোড ব্যর্থ।",
+ "conversionFailed": "রূপান্তর ব্যর্থ।",
+ "serverError": "সার্ভার ত্রুটি।"
+ },
+ "upload": {
+ "success": "ফাইল সফলভাবে আপলোড হয়েছে।",
+ "dragDrop": "এখানে ফাইল ছেড়ে দিন"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ca.json b/src/locales/ca.json
new file mode 100644
index 0000000..67333e3
--- /dev/null
+++ b/src/locales/ca.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Impulsat per",
+ "version": "v{version}",
+ "loading": "Carregant...",
+ "error": "Error",
+ "success": "Èxit",
+ "confirm": "Confirmar",
+ "cancel": "Cancel·lar",
+ "close": "Tancar",
+ "save": "Desar",
+ "delete": "Eliminar",
+ "remove": "Treure",
+ "download": "Descarregar",
+ "upload": "Pujar",
+ "submit": "Enviar",
+ "back": "Enrere",
+ "next": "Següent",
+ "yes": "Sí",
+ "no": "No"
+ },
+ "nav": {
+ "history": "Historial",
+ "account": "Compte",
+ "logout": "Tancar sessió",
+ "login": "Iniciar sessió",
+ "register": "Registrar-se",
+ "language": "Idioma"
+ },
+ "convert": {
+ "title": "Convertir",
+ "titleWithType": "Convertir .{fileType}",
+ "chooseFile": "Tria un fitxer",
+ "orDragHere": "o arrossega'l aquí",
+ "searchConversions": "Cercar conversions",
+ "convertTo": "Convertir a",
+ "convertButton": "Convertir",
+ "uploading": "Pujant...",
+ "processing": "Processant..."
+ },
+ "results": {
+ "title": "Resultats",
+ "convertedFileName": "Nom del fitxer convertit",
+ "status": "Estat",
+ "actions": "Accions",
+ "downloadAll": "Tot",
+ "downloadTar": "Tar",
+ "deleteJob": "Eliminar",
+ "noFiles": "Encara no s'han convertit fitxers.",
+ "statusPending": "Pendent",
+ "statusCompleted": "Completat",
+ "statusFailed": "Fallat"
+ },
+ "history": {
+ "title": "Resultats",
+ "time": "Hora",
+ "files": "Fitxers",
+ "filesDone": "Fitxers completats",
+ "status": "Estat",
+ "actions": "Accions",
+ "expandDetails": "Ampliar detalls",
+ "detailedFileInfo": "Informació detallada del fitxer:",
+ "deleteSelected": "Eliminar seleccionats",
+ "selectAll": "Seleccionar tot",
+ "confirmDelete": "Esteu segur que voleu eliminar {count} tasca/es? Aquesta acció no es pot desfer.",
+ "deleteSuccess": "S'han eliminat {deleted} tasca/es correctament.",
+ "deleteFailed": "No s'han pogut eliminar {failed} tasca/es.",
+ "deleteError": "S'ha produït un error en eliminar les tasques. Si us plau, torneu-ho a provar."
+ },
+ "auth": {
+ "email": "Correu electrònic",
+ "password": "Contrasenya",
+ "currentPassword": "Contrasenya actual",
+ "newPassword": "Contrasenya (deixa en blanc si no canvia)",
+ "loginButton": "Iniciar sessió",
+ "registerButton": "Registrar-se",
+ "updateButton": "Actualitzar",
+ "createAccount": "Crear compte",
+ "invalidCredentials": "Credencials no vàlides.",
+ "emailInUse": "El correu electrònic ja està en ús.",
+ "unauthorized": "No autoritzat",
+ "cookiesRequired": "Les galetes han d'estar habilitades per utilitzar aquesta aplicació.",
+ "noCookies": "No hi ha galeta d'autenticació, potser el vostre navegador bloqueja les galetes."
+ },
+ "setup": {
+ "welcome": "Benvingut a ConvertX-CN!",
+ "createYourAccount": "Creeu el vostre compte",
+ "reportIssues": "Informeu de qualsevol problema a",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Tasca no trobada.",
+ "fileNotFound": "Fitxer no trobat.",
+ "uploadFailed": "Error en pujar.",
+ "conversionFailed": "Error en la conversió.",
+ "serverError": "Error del servidor."
+ },
+ "upload": {
+ "success": "Fitxers pujats correctament.",
+ "dragDrop": "Deixa anar els fitxers aquí"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/cs.json b/src/locales/cs.json
new file mode 100644
index 0000000..4021053
--- /dev/null
+++ b/src/locales/cs.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Poháněno",
+ "version": "v{version}",
+ "loading": "Načítání...",
+ "error": "Chyba",
+ "success": "Úspěch",
+ "confirm": "Potvrdit",
+ "cancel": "Zrušit",
+ "close": "Zavřít",
+ "save": "Uložit",
+ "delete": "Smazat",
+ "remove": "Odstranit",
+ "download": "Stáhnout",
+ "upload": "Nahrát",
+ "submit": "Odeslat",
+ "back": "Zpět",
+ "next": "Další",
+ "yes": "Ano",
+ "no": "Ne"
+ },
+ "nav": {
+ "history": "Historie",
+ "account": "Účet",
+ "logout": "Odhlásit",
+ "login": "Přihlásit",
+ "register": "Registrovat",
+ "language": "Jazyk"
+ },
+ "convert": {
+ "title": "Převést",
+ "titleWithType": "Převést .{fileType}",
+ "chooseFile": "Vyberte soubor",
+ "orDragHere": "nebo ho sem přetáhněte",
+ "searchConversions": "Hledat převody",
+ "convertTo": "Převést na",
+ "convertButton": "Převést",
+ "uploading": "Nahrávání...",
+ "processing": "Zpracování..."
+ },
+ "results": {
+ "title": "Výsledky",
+ "convertedFileName": "Název převedeného souboru",
+ "status": "Stav",
+ "actions": "Akce",
+ "downloadAll": "Vše",
+ "downloadTar": "Tar",
+ "deleteJob": "Smazat",
+ "noFiles": "Zatím nebyly převedeny žádné soubory.",
+ "statusPending": "Čekající",
+ "statusCompleted": "Dokončeno",
+ "statusFailed": "Selhalo"
+ },
+ "history": {
+ "title": "Výsledky",
+ "time": "Čas",
+ "files": "Soubory",
+ "filesDone": "Dokončené soubory",
+ "status": "Stav",
+ "actions": "Akce",
+ "expandDetails": "Rozbalit podrobnosti",
+ "detailedFileInfo": "Podrobné informace o souboru:",
+ "deleteSelected": "Smazat vybrané",
+ "selectAll": "Vybrat vše",
+ "confirmDelete": "Opravdu chcete smazat {count} úlohu/úloh? Tuto akci nelze vrátit zpět.",
+ "deleteSuccess": "Úspěšně smazáno {deleted} úloha/úloh.",
+ "deleteFailed": "Nepodařilo se smazat {failed} úloha/úloh.",
+ "deleteError": "Při mazání úloh došlo k chybě. Zkuste to prosím znovu."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Heslo",
+ "currentPassword": "Aktuální heslo",
+ "newPassword": "Heslo (ponechte prázdné pro nezměnění)",
+ "loginButton": "Přihlásit",
+ "registerButton": "Registrovat",
+ "updateButton": "Aktualizovat",
+ "createAccount": "Vytvořit účet",
+ "invalidCredentials": "Neplatné přihlašovací údaje.",
+ "emailInUse": "E-mail je již používán.",
+ "unauthorized": "Neautorizováno",
+ "cookiesRequired": "Pro použití této aplikace musí být povoleny cookies.",
+ "noCookies": "Žádný autentizační cookie, možná váš prohlížeč blokuje cookies."
+ },
+ "setup": {
+ "welcome": "Vítejte v ConvertX-CN!",
+ "createYourAccount": "Vytvořte si účet",
+ "reportIssues": "Nahlaste problémy na",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Úloha nenalezena.",
+ "fileNotFound": "Soubor nenalezen.",
+ "uploadFailed": "Nahrávání selhalo.",
+ "conversionFailed": "Převod selhal.",
+ "serverError": "Chyba serveru."
+ },
+ "upload": {
+ "success": "Soubory byly úspěšně nahrány.",
+ "dragDrop": "Přetáhněte soubory sem"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/cy.json b/src/locales/cy.json
new file mode 100644
index 0000000..65fba61
--- /dev/null
+++ b/src/locales/cy.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Wedi'i bweru gan",
+ "version": "v{version}",
+ "loading": "Yn llwytho...",
+ "error": "Gwall",
+ "success": "Llwyddiant",
+ "confirm": "Cadarnhau",
+ "cancel": "Canslo",
+ "close": "Cau",
+ "save": "Cadw",
+ "delete": "Dileu",
+ "remove": "Tynnu",
+ "download": "Lawrlwytho",
+ "upload": "Uwchlwytho",
+ "submit": "Cyflwyno",
+ "back": "Yn ôl",
+ "next": "Nesaf",
+ "yes": "Ie",
+ "no": "Na"
+ },
+ "nav": {
+ "history": "Hanes",
+ "account": "Cyfrif",
+ "logout": "Allgofnodi",
+ "login": "Mewngofnodi",
+ "register": "Cofrestru",
+ "language": "Iaith"
+ },
+ "convert": {
+ "title": "Trosi",
+ "titleWithType": "Trosi .{fileType}",
+ "chooseFile": "Dewis ffeil",
+ "orDragHere": "neu llusgwch hi yma",
+ "searchConversions": "Chwilio am drosiadau",
+ "convertTo": "Trosi i",
+ "convertButton": "Trosi",
+ "uploading": "Yn uwchlwytho...",
+ "processing": "Yn prosesu..."
+ },
+ "results": {
+ "title": "Canlyniadau",
+ "convertedFileName": "Enw ffeil wedi'i drosi",
+ "status": "Statws",
+ "actions": "Gweithredoedd",
+ "downloadAll": "Popeth",
+ "downloadTar": "Tar",
+ "deleteJob": "Dileu",
+ "noFiles": "Dim ffeiliau wedi'u trosi eto.",
+ "statusPending": "Yn aros",
+ "statusCompleted": "Wedi cwblhau",
+ "statusFailed": "Wedi methu"
+ },
+ "history": {
+ "title": "Canlyniadau",
+ "time": "Amser",
+ "files": "Ffeiliau",
+ "filesDone": "Ffeiliau wedi'u cwblhau",
+ "status": "Statws",
+ "actions": "Gweithredoedd",
+ "expandDetails": "Ehangu manylion",
+ "detailedFileInfo": "Gwybodaeth fanwl am y ffeil:",
+ "deleteSelected": "Dileu'r dewisiad",
+ "selectAll": "Dewis popeth",
+ "confirmDelete": "Ydych chi'n siŵr eich bod am ddileu {count} swydd(i)? Ni ellir dadwneud y weithred hon.",
+ "deleteSuccess": "Dilëwyd {deleted} swydd(i) yn llwyddiannus.",
+ "deleteFailed": "Methwyd dileu {failed} swydd(i).",
+ "deleteError": "Digwyddodd gwall wrth ddileu swyddi. Rhowch gynnig arall arni."
+ },
+ "auth": {
+ "email": "E-bost",
+ "password": "Cyfrinair",
+ "currentPassword": "Cyfrinair presennol",
+ "newPassword": "Cyfrinair (gadael yn wag os nad yw'n newid)",
+ "loginButton": "Mewngofnodi",
+ "registerButton": "Cofrestru",
+ "updateButton": "Diweddaru",
+ "createAccount": "Creu cyfrif",
+ "invalidCredentials": "Manylion annilys.",
+ "emailInUse": "Mae'r e-bost eisoes yn cael ei ddefnyddio.",
+ "unauthorized": "Heb awdurdod",
+ "cookiesRequired": "Dylai cwcis fod wedi'u galluogi i ddefnyddio'r ap hwn.",
+ "noCookies": "Dim cwci dilysu, efallai bod eich porwr yn blocio cwcis."
+ },
+ "setup": {
+ "welcome": "Croeso i ConvertX-CN!",
+ "createYourAccount": "Crëwch eich cyfrif",
+ "reportIssues": "Adroddwch unrhyw broblemau ar",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Ni chanfuwyd y swydd.",
+ "fileNotFound": "Ni chanfuwyd y ffeil.",
+ "uploadFailed": "Methwyd uwchlwytho.",
+ "conversionFailed": "Methwyd trosi.",
+ "serverError": "Gwall gweinydd."
+ },
+ "upload": {
+ "success": "Uwchlwythwyd ffeiliau'n llwyddiannus.",
+ "dragDrop": "Gollyngwch ffeiliau yma"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/da.json b/src/locales/da.json
new file mode 100644
index 0000000..7d4a74a
--- /dev/null
+++ b/src/locales/da.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Drevet af",
+ "version": "v{version}",
+ "loading": "Indlæser...",
+ "error": "Fejl",
+ "success": "Succes",
+ "confirm": "Bekræft",
+ "cancel": "Annuller",
+ "close": "Luk",
+ "save": "Gem",
+ "delete": "Slet",
+ "remove": "Fjern",
+ "download": "Download",
+ "upload": "Upload",
+ "submit": "Send",
+ "back": "Tilbage",
+ "next": "Næste",
+ "yes": "Ja",
+ "no": "Nej"
+ },
+ "nav": {
+ "history": "Historik",
+ "account": "Konto",
+ "logout": "Log ud",
+ "login": "Log ind",
+ "register": "Registrer",
+ "language": "Sprog"
+ },
+ "convert": {
+ "title": "Konverter",
+ "titleWithType": "Konverter .{fileType}",
+ "chooseFile": "Vælg en fil",
+ "orDragHere": "eller træk den hertil",
+ "searchConversions": "Søg efter konverteringer",
+ "convertTo": "Konverter til",
+ "convertButton": "Konverter",
+ "uploading": "Uploader...",
+ "processing": "Behandler..."
+ },
+ "results": {
+ "title": "Resultater",
+ "convertedFileName": "Konverteret filnavn",
+ "status": "Status",
+ "actions": "Handlinger",
+ "downloadAll": "Alle",
+ "downloadTar": "Tar",
+ "deleteJob": "Slet",
+ "noFiles": "Ingen filer konverteret endnu.",
+ "statusPending": "Afventer",
+ "statusCompleted": "Afsluttet",
+ "statusFailed": "Mislykket"
+ },
+ "history": {
+ "title": "Resultater",
+ "time": "Tid",
+ "files": "Filer",
+ "filesDone": "Færdige filer",
+ "status": "Status",
+ "actions": "Handlinger",
+ "expandDetails": "Udvid detaljer",
+ "detailedFileInfo": "Detaljeret filinformation:",
+ "deleteSelected": "Slet valgte",
+ "selectAll": "Vælg alle",
+ "confirmDelete": "Er du sikker på, at du vil slette {count} job? Denne handling kan ikke fortrydes.",
+ "deleteSuccess": "Slettet {deleted} job med succes.",
+ "deleteFailed": "Kunne ikke slette {failed} job.",
+ "deleteError": "Der opstod en fejl under sletning af jobs. Prøv venligst igen."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Adgangskode",
+ "currentPassword": "Nuværende adgangskode",
+ "newPassword": "Adgangskode (lad være tom for uændret)",
+ "loginButton": "Log ind",
+ "registerButton": "Registrer",
+ "updateButton": "Opdater",
+ "createAccount": "Opret konto",
+ "invalidCredentials": "Ugyldige loginoplysninger.",
+ "emailInUse": "E-mail er allerede i brug.",
+ "unauthorized": "Ikke autoriseret",
+ "cookiesRequired": "Cookies skal være aktiveret for at bruge denne app.",
+ "noCookies": "Ingen godkendelsescookie, måske blokerer din browser cookies."
+ },
+ "setup": {
+ "welcome": "Velkommen til ConvertX-CN!",
+ "createYourAccount": "Opret din konto",
+ "reportIssues": "Rapporter problemer på",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Job ikke fundet.",
+ "fileNotFound": "Fil ikke fundet.",
+ "uploadFailed": "Upload mislykkedes.",
+ "conversionFailed": "Konvertering mislykkedes.",
+ "serverError": "Serverfejl."
+ },
+ "upload": {
+ "success": "Filer uploadet succesfuldt.",
+ "dragDrop": "Slip filer her"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/de.json b/src/locales/de.json
new file mode 100644
index 0000000..c861ade
--- /dev/null
+++ b/src/locales/de.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Unterstützt von",
+ "version": "v{version}",
+ "loading": "Laden...",
+ "error": "Fehler",
+ "success": "Erfolg",
+ "confirm": "Bestätigen",
+ "cancel": "Abbrechen",
+ "close": "Schließen",
+ "save": "Speichern",
+ "delete": "Löschen",
+ "remove": "Entfernen",
+ "download": "Herunterladen",
+ "upload": "Hochladen",
+ "submit": "Absenden",
+ "back": "Zurück",
+ "next": "Weiter",
+ "yes": "Ja",
+ "no": "Nein"
+ },
+ "nav": {
+ "history": "Verlauf",
+ "account": "Konto",
+ "logout": "Abmelden",
+ "login": "Anmelden",
+ "register": "Registrieren",
+ "language": "Sprache"
+ },
+ "convert": {
+ "title": "Konvertieren",
+ "titleWithType": ".{fileType} konvertieren",
+ "chooseFile": "Datei auswählen",
+ "orDragHere": "oder hierher ziehen",
+ "searchConversions": "Konvertierungen suchen",
+ "convertTo": "Konvertieren zu",
+ "convertButton": "Konvertieren",
+ "uploading": "Hochladen...",
+ "processing": "Verarbeiten..."
+ },
+ "results": {
+ "title": "Ergebnisse",
+ "convertedFileName": "Konvertierter Dateiname",
+ "status": "Status",
+ "actions": "Aktionen",
+ "downloadAll": "Alle",
+ "downloadTar": "Tar",
+ "deleteJob": "Löschen",
+ "noFiles": "Noch keine Dateien konvertiert.",
+ "statusPending": "Ausstehend",
+ "statusCompleted": "Abgeschlossen",
+ "statusFailed": "Fehlgeschlagen"
+ },
+ "history": {
+ "title": "Ergebnisse",
+ "time": "Zeit",
+ "files": "Dateien",
+ "filesDone": "Fertige Dateien",
+ "status": "Status",
+ "actions": "Aktionen",
+ "expandDetails": "Details erweitern",
+ "detailedFileInfo": "Detaillierte Dateiinformationen:",
+ "deleteSelected": "Ausgewählte löschen",
+ "selectAll": "Alle auswählen",
+ "confirmDelete": "Sind Sie sicher, dass Sie {count} Auftrag/Aufträge löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
+ "deleteSuccess": "{deleted} Auftrag/Aufträge erfolgreich gelöscht.",
+ "deleteFailed": "{failed} Auftrag/Aufträge konnten nicht gelöscht werden.",
+ "deleteError": "Beim Löschen der Aufträge ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
+ },
+ "auth": {
+ "email": "E-Mail",
+ "password": "Passwort",
+ "currentPassword": "Aktuelles Passwort",
+ "newPassword": "Passwort (leer lassen für unverändert)",
+ "loginButton": "Anmelden",
+ "registerButton": "Registrieren",
+ "updateButton": "Aktualisieren",
+ "createAccount": "Konto erstellen",
+ "invalidCredentials": "Ungültige Anmeldedaten.",
+ "emailInUse": "E-Mail wird bereits verwendet.",
+ "unauthorized": "Nicht autorisiert",
+ "cookiesRequired": "Cookies müssen aktiviert sein, um diese App zu nutzen.",
+ "noCookies": "Kein Auth-Cookie, möglicherweise blockiert Ihr Browser Cookies."
+ },
+ "setup": {
+ "welcome": "Willkommen bei ConvertX-CN!",
+ "createYourAccount": "Erstellen Sie Ihr Konto",
+ "reportIssues": "Probleme melden auf",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Auftrag nicht gefunden.",
+ "fileNotFound": "Datei nicht gefunden.",
+ "uploadFailed": "Hochladen fehlgeschlagen.",
+ "conversionFailed": "Konvertierung fehlgeschlagen.",
+ "serverError": "Serverfehler."
+ },
+ "upload": {
+ "success": "Dateien erfolgreich hochgeladen.",
+ "dragDrop": "Dateien hier ablegen"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/el.json b/src/locales/el.json
new file mode 100644
index 0000000..4200c3b
--- /dev/null
+++ b/src/locales/el.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Με την υποστήριξη",
+ "version": "v{version}",
+ "loading": "Φόρτωση...",
+ "error": "Σφάλμα",
+ "success": "Επιτυχία",
+ "confirm": "Επιβεβαίωση",
+ "cancel": "Ακύρωση",
+ "close": "Κλείσιμο",
+ "save": "Αποθήκευση",
+ "delete": "Διαγραφή",
+ "remove": "Αφαίρεση",
+ "download": "Λήψη",
+ "upload": "Μεταφόρτωση",
+ "submit": "Υποβολή",
+ "back": "Πίσω",
+ "next": "Επόμενο",
+ "yes": "Ναι",
+ "no": "Όχι"
+ },
+ "nav": {
+ "history": "Ιστορικό",
+ "account": "Λογαριασμός",
+ "logout": "Αποσύνδεση",
+ "login": "Σύνδεση",
+ "register": "Εγγραφή",
+ "language": "Γλώσσα"
+ },
+ "convert": {
+ "title": "Μετατροπή",
+ "titleWithType": "Μετατροπή .{fileType}",
+ "chooseFile": "Επιλέξτε ένα αρχείο",
+ "orDragHere": "ή σύρετέ το εδώ",
+ "searchConversions": "Αναζήτηση μετατροπών",
+ "convertTo": "Μετατροπή σε",
+ "convertButton": "Μετατροπή",
+ "uploading": "Μεταφόρτωση...",
+ "processing": "Επεξεργασία..."
+ },
+ "results": {
+ "title": "Αποτελέσματα",
+ "convertedFileName": "Όνομα μετατρεπόμενου αρχείου",
+ "status": "Κατάσταση",
+ "actions": "Ενέργειες",
+ "downloadAll": "Όλα",
+ "downloadTar": "Tar",
+ "deleteJob": "Διαγραφή",
+ "noFiles": "Δεν έχουν μετατραπεί αρχεία ακόμα.",
+ "statusPending": "Σε αναμονή",
+ "statusCompleted": "Ολοκληρώθηκε",
+ "statusFailed": "Απέτυχε"
+ },
+ "history": {
+ "title": "Αποτελέσματα",
+ "time": "Χρόνος",
+ "files": "Αρχεία",
+ "filesDone": "Αρχεία ολοκληρωμένα",
+ "status": "Κατάσταση",
+ "actions": "Ενέργειες",
+ "expandDetails": "Ανάπτυξη λεπτομερειών",
+ "detailedFileInfo": "Λεπτομερείς πληροφορίες αρχείου:",
+ "deleteSelected": "Διαγραφή επιλεγμένων",
+ "selectAll": "Επιλογή όλων",
+ "confirmDelete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε {count} εργασία(ες); Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
+ "deleteSuccess": "Διαγράφηκαν επιτυχώς {deleted} εργασία(ες).",
+ "deleteFailed": "Αποτυχία διαγραφής {failed} εργασία(ες).",
+ "deleteError": "Παρουσιάστηκε σφάλμα κατά τη διαγραφή εργασιών. Παρακαλώ δοκιμάστε ξανά."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Κωδικός πρόσβασης",
+ "currentPassword": "Τρέχων κωδικός πρόσβασης",
+ "newPassword": "Κωδικός πρόσβασης (αφήστε κενό για αμετάβλητο)",
+ "loginButton": "Σύνδεση",
+ "registerButton": "Εγγραφή",
+ "updateButton": "Ενημέρωση",
+ "createAccount": "Δημιουργία λογαριασμού",
+ "invalidCredentials": "Μη έγκυρα διαπιστευτήρια.",
+ "emailInUse": "Το email χρησιμοποιείται ήδη.",
+ "unauthorized": "Μη εξουσιοδοτημένο",
+ "cookiesRequired": "Τα cookies πρέπει να είναι ενεργοποιημένα για τη χρήση αυτής της εφαρμογής.",
+ "noCookies": "Δεν υπάρχει cookie ελέγχου ταυτότητας, ίσως ο περιηγητής σας μπλοκάρει τα cookies."
+ },
+ "setup": {
+ "welcome": "Καλώς ήρθατε στο ConvertX-CN!",
+ "createYourAccount": "Δημιουργήστε τον λογαριασμό σας",
+ "reportIssues": "Αναφέρετε τυχόν προβλήματα στο",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Η εργασία δεν βρέθηκε.",
+ "fileNotFound": "Το αρχείο δεν βρέθηκε.",
+ "uploadFailed": "Η μεταφόρτωση απέτυχε.",
+ "conversionFailed": "Η μετατροπή απέτυχε.",
+ "serverError": "Σφάλμα διακομιστή."
+ },
+ "upload": {
+ "success": "Τα αρχεία μεταφορτώθηκαν επιτυχώς.",
+ "dragDrop": "Αποθέστε αρχεία εδώ"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/es.json b/src/locales/es.json
new file mode 100644
index 0000000..71f12f0
--- /dev/null
+++ b/src/locales/es.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Desarrollado por",
+ "version": "v{version}",
+ "loading": "Cargando...",
+ "error": "Error",
+ "success": "Éxito",
+ "confirm": "Confirmar",
+ "cancel": "Cancelar",
+ "close": "Cerrar",
+ "save": "Guardar",
+ "delete": "Eliminar",
+ "remove": "Quitar",
+ "download": "Descargar",
+ "upload": "Subir",
+ "submit": "Enviar",
+ "back": "Atrás",
+ "next": "Siguiente",
+ "yes": "Sí",
+ "no": "No"
+ },
+ "nav": {
+ "history": "Historial",
+ "account": "Cuenta",
+ "logout": "Cerrar sesión",
+ "login": "Iniciar sesión",
+ "register": "Registrarse",
+ "language": "Idioma"
+ },
+ "convert": {
+ "title": "Convertir",
+ "titleWithType": "Convertir .{fileType}",
+ "chooseFile": "Elegir un archivo",
+ "orDragHere": "o arrástrelo aquí",
+ "searchConversions": "Buscar conversiones",
+ "convertTo": "Convertir a",
+ "convertButton": "Convertir",
+ "uploading": "Subiendo...",
+ "processing": "Procesando..."
+ },
+ "results": {
+ "title": "Resultados",
+ "convertedFileName": "Nombre del archivo convertido",
+ "status": "Estado",
+ "actions": "Acciones",
+ "downloadAll": "Todo",
+ "downloadTar": "Tar",
+ "deleteJob": "Eliminar",
+ "noFiles": "No hay archivos convertidos aún.",
+ "statusPending": "Pendiente",
+ "statusCompleted": "Completado",
+ "statusFailed": "Fallido"
+ },
+ "history": {
+ "title": "Resultados",
+ "time": "Hora",
+ "files": "Archivos",
+ "filesDone": "Archivos completados",
+ "status": "Estado",
+ "actions": "Acciones",
+ "expandDetails": "Expandir detalles",
+ "detailedFileInfo": "Información detallada del archivo:",
+ "deleteSelected": "Eliminar seleccionados",
+ "selectAll": "Seleccionar todo",
+ "confirmDelete": "¿Está seguro de que desea eliminar {count} trabajo(s)? Esta acción no se puede deshacer.",
+ "deleteSuccess": "Se eliminaron {deleted} trabajo(s) correctamente.",
+ "deleteFailed": "No se pudieron eliminar {failed} trabajo(s).",
+ "deleteError": "Ocurrió un error al eliminar los trabajos. Por favor, inténtelo de nuevo."
+ },
+ "auth": {
+ "email": "Correo electrónico",
+ "password": "Contraseña",
+ "currentPassword": "Contraseña actual",
+ "newPassword": "Contraseña (dejar en blanco para no cambiar)",
+ "loginButton": "Iniciar sesión",
+ "registerButton": "Registrarse",
+ "updateButton": "Actualizar",
+ "createAccount": "Crear cuenta",
+ "invalidCredentials": "Credenciales inválidas.",
+ "emailInUse": "El correo electrónico ya está en uso.",
+ "unauthorized": "No autorizado",
+ "cookiesRequired": "Las cookies deben estar habilitadas para usar esta aplicación.",
+ "noCookies": "No hay cookie de autenticación, quizás su navegador está bloqueando las cookies."
+ },
+ "setup": {
+ "welcome": "¡Bienvenido a ConvertX-CN!",
+ "createYourAccount": "Cree su cuenta",
+ "reportIssues": "Reportar problemas en",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Trabajo no encontrado.",
+ "fileNotFound": "Archivo no encontrado.",
+ "uploadFailed": "Error al subir.",
+ "conversionFailed": "Error en la conversión.",
+ "serverError": "Error del servidor."
+ },
+ "upload": {
+ "success": "Archivos subidos correctamente.",
+ "dragDrop": "Suelte los archivos aquí"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/et.json b/src/locales/et.json
new file mode 100644
index 0000000..f1296cd
--- /dev/null
+++ b/src/locales/et.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Toetab",
+ "version": "v{version}",
+ "loading": "Laadimine...",
+ "error": "Viga",
+ "success": "Õnnestus",
+ "confirm": "Kinnita",
+ "cancel": "Tühista",
+ "close": "Sulge",
+ "save": "Salvesta",
+ "delete": "Kustuta",
+ "remove": "Eemalda",
+ "download": "Laadi alla",
+ "upload": "Laadi üles",
+ "submit": "Esita",
+ "back": "Tagasi",
+ "next": "Järgmine",
+ "yes": "Jah",
+ "no": "Ei"
+ },
+ "nav": {
+ "history": "Ajalugu",
+ "account": "Konto",
+ "logout": "Logi välja",
+ "login": "Logi sisse",
+ "register": "Registreeru",
+ "language": "Keel"
+ },
+ "convert": {
+ "title": "Teisenda",
+ "titleWithType": "Teisenda .{fileType}",
+ "chooseFile": "Vali fail",
+ "orDragHere": "või lohista siia",
+ "searchConversions": "Otsi teisendusi",
+ "convertTo": "Teisenda vormingusse",
+ "convertButton": "Teisenda",
+ "uploading": "Üleslaadimine...",
+ "processing": "Töötlemine..."
+ },
+ "results": {
+ "title": "Tulemused",
+ "convertedFileName": "Teisendatud faili nimi",
+ "status": "Olek",
+ "actions": "Toimingud",
+ "downloadAll": "Kõik",
+ "downloadTar": "Tar",
+ "deleteJob": "Kustuta",
+ "noFiles": "Faile pole veel teisendatud.",
+ "statusPending": "Ootel",
+ "statusCompleted": "Lõpetatud",
+ "statusFailed": "Ebaõnnestunud"
+ },
+ "history": {
+ "title": "Tulemused",
+ "time": "Aeg",
+ "files": "Failid",
+ "filesDone": "Valmis failid",
+ "status": "Olek",
+ "actions": "Toimingud",
+ "expandDetails": "Laienda üksikasju",
+ "detailedFileInfo": "Üksikasjalik failiteave:",
+ "deleteSelected": "Kustuta valitud",
+ "selectAll": "Vali kõik",
+ "confirmDelete": "Kas olete kindel, et soovite kustutada {count} töö(d)? Seda toimingut ei saa tagasi võtta.",
+ "deleteSuccess": "Edukalt kustutatud {deleted} töö(d).",
+ "deleteFailed": "Ei õnnestunud kustutada {failed} töö(d).",
+ "deleteError": "Tööde kustutamisel ilmnes viga. Palun proovige uuesti."
+ },
+ "auth": {
+ "email": "E-post",
+ "password": "Parool",
+ "currentPassword": "Praegune parool",
+ "newPassword": "Parool (jätke tühjaks, kui ei muuda)",
+ "loginButton": "Logi sisse",
+ "registerButton": "Registreeru",
+ "updateButton": "Uuenda",
+ "createAccount": "Loo konto",
+ "invalidCredentials": "Vigased andmed.",
+ "emailInUse": "E-post on juba kasutusel.",
+ "unauthorized": "Volitamata",
+ "cookiesRequired": "Selle rakenduse kasutamiseks peavad küpsised olema lubatud.",
+ "noCookies": "Autentimisküpsist pole, võib-olla teie brauser blokeerib küpsised."
+ },
+ "setup": {
+ "welcome": "Tere tulemast ConvertX-CN-i!",
+ "createYourAccount": "Looge oma konto",
+ "reportIssues": "Teatage probleemidest",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Tööd ei leitud.",
+ "fileNotFound": "Faili ei leitud.",
+ "uploadFailed": "Üleslaadimine ebaõnnestus.",
+ "conversionFailed": "Teisendamine ebaõnnestus.",
+ "serverError": "Serveri viga."
+ },
+ "upload": {
+ "success": "Failid edukalt üles laaditud.",
+ "dragDrop": "Lohistage failid siia"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/eu.json b/src/locales/eu.json
new file mode 100644
index 0000000..d0155fe
--- /dev/null
+++ b/src/locales/eu.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Bultzatua",
+ "version": "v{version}",
+ "loading": "Kargatzen...",
+ "error": "Errorea",
+ "success": "Arrakasta",
+ "confirm": "Berretsi",
+ "cancel": "Utzi",
+ "close": "Itxi",
+ "save": "Gorde",
+ "delete": "Ezabatu",
+ "remove": "Kendu",
+ "download": "Deskargatu",
+ "upload": "Igo",
+ "submit": "Bidali",
+ "back": "Atzera",
+ "next": "Hurrengoa",
+ "yes": "Bai",
+ "no": "Ez"
+ },
+ "nav": {
+ "history": "Historia",
+ "account": "Kontua",
+ "logout": "Saioa itxi",
+ "login": "Saioa hasi",
+ "register": "Erregistratu",
+ "language": "Hizkuntza"
+ },
+ "convert": {
+ "title": "Bihurtu",
+ "titleWithType": "Bihurtu .{fileType}",
+ "chooseFile": "Aukeratu fitxategi bat",
+ "orDragHere": "edo arrastatu hona",
+ "searchConversions": "Bilatu bihurketa",
+ "convertTo": "Bihurtu hona",
+ "convertButton": "Bihurtu",
+ "uploading": "Igotzen...",
+ "processing": "Prozesatzen..."
+ },
+ "results": {
+ "title": "Emaitzak",
+ "convertedFileName": "Bihurtutako fitxategiaren izena",
+ "status": "Egoera",
+ "actions": "Ekintzak",
+ "downloadAll": "Guztiak",
+ "downloadTar": "Tar",
+ "deleteJob": "Ezabatu",
+ "noFiles": "Oraindik ez da fitxategirik bihurtu.",
+ "statusPending": "Zain",
+ "statusCompleted": "Osatuta",
+ "statusFailed": "Huts egin du"
+ },
+ "history": {
+ "title": "Emaitzak",
+ "time": "Ordua",
+ "files": "Fitxategiak",
+ "filesDone": "Amaitutako fitxategiak",
+ "status": "Egoera",
+ "actions": "Ekintzak",
+ "expandDetails": "Xehetasunak zabaldu",
+ "detailedFileInfo": "Fitxategiaren informazio zehatza:",
+ "deleteSelected": "Ezabatu hautatutakoak",
+ "selectAll": "Hautatu guztiak",
+ "confirmDelete": "Ziur zaude {count} lan ezabatu nahi duzula? Ekintza hau ezin da desegin.",
+ "deleteSuccess": "{deleted} lan ondo ezabatu dira.",
+ "deleteFailed": "Ezin izan dira {failed} lan ezabatu.",
+ "deleteError": "Errorea gertatu da lanak ezabatzean. Saiatu berriro."
+ },
+ "auth": {
+ "email": "Emaila",
+ "password": "Pasahitza",
+ "currentPassword": "Uneko pasahitza",
+ "newPassword": "Pasahitza (utzi hutsik aldatu nahi ez baduzu)",
+ "loginButton": "Saioa hasi",
+ "registerButton": "Erregistratu",
+ "updateButton": "Eguneratu",
+ "createAccount": "Kontua sortu",
+ "invalidCredentials": "Kredentzial baliogabeak.",
+ "emailInUse": "Emaila dagoeneko erabiltzen ari da.",
+ "unauthorized": "Baimenik gabe",
+ "cookiesRequired": "Cookieak gaituta egon behar dute aplikazio hau erabiltzeko.",
+ "noCookies": "Ez dago autentifikazio cookierik, agian zure nabigatzaileak cookieak blokeatzen ditu."
+ },
+ "setup": {
+ "welcome": "Ongi etorri ConvertX-CN-ra!",
+ "createYourAccount": "Sortu zure kontua",
+ "reportIssues": "Jakinarazi edozein arazo hemen",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Lana ez da aurkitu.",
+ "fileNotFound": "Fitxategia ez da aurkitu.",
+ "uploadFailed": "Igoerak huts egin du.",
+ "conversionFailed": "Bihurketak huts egin du.",
+ "serverError": "Zerbitzariaren errorea."
+ },
+ "upload": {
+ "success": "Fitxategiak ondo igo dira.",
+ "dragDrop": "Jaregin fitxategiak hona"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/fa.json b/src/locales/fa.json
new file mode 100644
index 0000000..354bc8d
--- /dev/null
+++ b/src/locales/fa.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "قدرت گرفته از",
+ "version": "v{version}",
+ "loading": "در حال بارگذاری...",
+ "error": "خطا",
+ "success": "موفقیت",
+ "confirm": "تأیید",
+ "cancel": "لغو",
+ "close": "بستن",
+ "save": "ذخیره",
+ "delete": "حذف",
+ "remove": "برداشتن",
+ "download": "دانلود",
+ "upload": "آپلود",
+ "submit": "ارسال",
+ "back": "بازگشت",
+ "next": "بعدی",
+ "yes": "بله",
+ "no": "خیر"
+ },
+ "nav": {
+ "history": "تاریخچه",
+ "account": "حساب کاربری",
+ "logout": "خروج",
+ "login": "ورود",
+ "register": "ثبت نام",
+ "language": "زبان"
+ },
+ "convert": {
+ "title": "تبدیل",
+ "titleWithType": "تبدیل .{fileType}",
+ "chooseFile": "انتخاب فایل",
+ "orDragHere": "یا اینجا بکشید",
+ "searchConversions": "جستجوی تبدیلها",
+ "convertTo": "تبدیل به",
+ "convertButton": "تبدیل",
+ "uploading": "در حال آپلود...",
+ "processing": "در حال پردازش..."
+ },
+ "results": {
+ "title": "نتایج",
+ "convertedFileName": "نام فایل تبدیل شده",
+ "status": "وضعیت",
+ "actions": "عملیات",
+ "downloadAll": "همه",
+ "downloadTar": "Tar",
+ "deleteJob": "حذف",
+ "noFiles": "هنوز فایلی تبدیل نشده است.",
+ "statusPending": "در انتظار",
+ "statusCompleted": "تکمیل شد",
+ "statusFailed": "ناموفق"
+ },
+ "history": {
+ "title": "نتایج",
+ "time": "زمان",
+ "files": "فایلها",
+ "filesDone": "فایلهای انجام شده",
+ "status": "وضعیت",
+ "actions": "عملیات",
+ "expandDetails": "نمایش جزئیات",
+ "detailedFileInfo": "اطلاعات دقیق فایل:",
+ "deleteSelected": "حذف انتخاب شدهها",
+ "selectAll": "انتخاب همه",
+ "confirmDelete": "آیا مطمئن هستید که میخواهید {count} کار را حذف کنید؟ این عمل قابل بازگشت نیست.",
+ "deleteSuccess": "{deleted} کار با موفقیت حذف شد.",
+ "deleteFailed": "حذف {failed} کار ناموفق بود.",
+ "deleteError": "هنگام حذف کارها خطایی رخ داد. لطفاً دوباره تلاش کنید."
+ },
+ "auth": {
+ "email": "ایمیل",
+ "password": "رمز عبور",
+ "currentPassword": "رمز عبور فعلی",
+ "newPassword": "رمز عبور (برای عدم تغییر خالی بگذارید)",
+ "loginButton": "ورود",
+ "registerButton": "ثبت نام",
+ "updateButton": "بهروزرسانی",
+ "createAccount": "ایجاد حساب",
+ "invalidCredentials": "اطلاعات ورود نامعتبر است.",
+ "emailInUse": "این ایمیل قبلاً استفاده شده است.",
+ "unauthorized": "غیرمجاز",
+ "cookiesRequired": "برای استفاده از این برنامه باید کوکیها فعال باشند.",
+ "noCookies": "کوکی احراز هویت وجود ندارد، شاید مرورگر شما کوکیها را مسدود کرده باشد."
+ },
+ "setup": {
+ "welcome": "به ConvertX-CN خوش آمدید!",
+ "createYourAccount": "حساب کاربری خود را بسازید",
+ "reportIssues": "گزارش مشکلات در",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "کار پیدا نشد.",
+ "fileNotFound": "فایل پیدا نشد.",
+ "uploadFailed": "آپلود ناموفق بود.",
+ "conversionFailed": "تبدیل ناموفق بود.",
+ "serverError": "خطای سرور."
+ },
+ "upload": {
+ "success": "فایلها با موفقیت آپلود شدند.",
+ "dragDrop": "فایلها را اینجا رها کنید"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/fi.json b/src/locales/fi.json
new file mode 100644
index 0000000..03eb072
--- /dev/null
+++ b/src/locales/fi.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Käyttää",
+ "version": "v{version}",
+ "loading": "Ladataan...",
+ "error": "Virhe",
+ "success": "Onnistui",
+ "confirm": "Vahvista",
+ "cancel": "Peruuta",
+ "close": "Sulje",
+ "save": "Tallenna",
+ "delete": "Poista",
+ "remove": "Poista",
+ "download": "Lataa",
+ "upload": "Lähetä",
+ "submit": "Lähetä",
+ "back": "Takaisin",
+ "next": "Seuraava",
+ "yes": "Kyllä",
+ "no": "Ei"
+ },
+ "nav": {
+ "history": "Historia",
+ "account": "Tili",
+ "logout": "Kirjaudu ulos",
+ "login": "Kirjaudu sisään",
+ "register": "Rekisteröidy",
+ "language": "Kieli"
+ },
+ "convert": {
+ "title": "Muunna",
+ "titleWithType": "Muunna .{fileType}",
+ "chooseFile": "Valitse tiedosto",
+ "orDragHere": "tai vedä tähän",
+ "searchConversions": "Etsi muunnoksia",
+ "convertTo": "Muunna muotoon",
+ "convertButton": "Muunna",
+ "uploading": "Lähetetään...",
+ "processing": "Käsitellään..."
+ },
+ "results": {
+ "title": "Tulokset",
+ "convertedFileName": "Muunnetun tiedoston nimi",
+ "status": "Tila",
+ "actions": "Toiminnot",
+ "downloadAll": "Kaikki",
+ "downloadTar": "Tar",
+ "deleteJob": "Poista",
+ "noFiles": "Ei vielä muunnettuja tiedostoja.",
+ "statusPending": "Odottaa",
+ "statusCompleted": "Valmis",
+ "statusFailed": "Epäonnistui"
+ },
+ "history": {
+ "title": "Tulokset",
+ "time": "Aika",
+ "files": "Tiedostot",
+ "filesDone": "Valmiit tiedostot",
+ "status": "Tila",
+ "actions": "Toiminnot",
+ "expandDetails": "Laajenna tiedot",
+ "detailedFileInfo": "Yksityiskohtaiset tiedostotiedot:",
+ "deleteSelected": "Poista valitut",
+ "selectAll": "Valitse kaikki",
+ "confirmDelete": "Haluatko varmasti poistaa {count} työtä? Tätä toimintoa ei voi kumota.",
+ "deleteSuccess": "Poistettiin onnistuneesti {deleted} työtä.",
+ "deleteFailed": "Epäonnistui {failed} työn poistaminen.",
+ "deleteError": "Virhe poistettaessa töitä. Yritä uudelleen."
+ },
+ "auth": {
+ "email": "Sähköposti",
+ "password": "Salasana",
+ "currentPassword": "Nykyinen salasana",
+ "newPassword": "Salasana (jätä tyhjäksi, jos ei muuteta)",
+ "loginButton": "Kirjaudu sisään",
+ "registerButton": "Rekisteröidy",
+ "updateButton": "Päivitä",
+ "createAccount": "Luo tili",
+ "invalidCredentials": "Virheelliset tunnistetiedot.",
+ "emailInUse": "Sähköposti on jo käytössä.",
+ "unauthorized": "Ei valtuuksia",
+ "cookiesRequired": "Evästeiden on oltava käytössä tämän sovelluksen käyttämiseksi.",
+ "noCookies": "Ei todennusevästettä, ehkä selaimesi estää evästeet."
+ },
+ "setup": {
+ "welcome": "Tervetuloa ConvertX-CN:ään!",
+ "createYourAccount": "Luo tilisi",
+ "reportIssues": "Ilmoita ongelmista",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Työtä ei löytynyt.",
+ "fileNotFound": "Tiedostoa ei löytynyt.",
+ "uploadFailed": "Lähetys epäonnistui.",
+ "conversionFailed": "Muunnos epäonnistui.",
+ "serverError": "Palvelinvirhe."
+ },
+ "upload": {
+ "success": "Tiedostot lähetetty onnistuneesti.",
+ "dragDrop": "Pudota tiedostot tähän"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/fil.json b/src/locales/fil.json
new file mode 100644
index 0000000..7243e7f
--- /dev/null
+++ b/src/locales/fil.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Pinapagana ng",
+ "version": "v{version}",
+ "loading": "Naglo-load...",
+ "error": "Error",
+ "success": "Tagumpay",
+ "confirm": "Kumpirmahin",
+ "cancel": "Kanselahin",
+ "close": "Isara",
+ "save": "I-save",
+ "delete": "Burahin",
+ "remove": "Alisin",
+ "download": "I-download",
+ "upload": "I-upload",
+ "submit": "Isumite",
+ "back": "Bumalik",
+ "next": "Susunod",
+ "yes": "Oo",
+ "no": "Hindi"
+ },
+ "nav": {
+ "history": "Kasaysayan",
+ "account": "Account",
+ "logout": "Mag-logout",
+ "login": "Mag-login",
+ "register": "Magrehistro",
+ "language": "Wika"
+ },
+ "convert": {
+ "title": "I-convert",
+ "titleWithType": "I-convert ang .{fileType}",
+ "chooseFile": "Pumili ng file",
+ "orDragHere": "o i-drag dito",
+ "searchConversions": "Maghanap ng conversions",
+ "convertTo": "I-convert sa",
+ "convertButton": "I-convert",
+ "uploading": "Nag-a-upload...",
+ "processing": "Pinoproseso..."
+ },
+ "results": {
+ "title": "Mga Resulta",
+ "convertedFileName": "Pangalan ng Na-convert na File",
+ "status": "Status",
+ "actions": "Mga Aksyon",
+ "downloadAll": "Lahat",
+ "downloadTar": "Tar",
+ "deleteJob": "Burahin",
+ "noFiles": "Walang mga file na na-convert pa.",
+ "statusPending": "Nakabinbin",
+ "statusCompleted": "Kumpleto",
+ "statusFailed": "Nabigo"
+ },
+ "history": {
+ "title": "Mga Resulta",
+ "time": "Oras",
+ "files": "Mga File",
+ "filesDone": "Mga Natapos na File",
+ "status": "Status",
+ "actions": "Mga Aksyon",
+ "expandDetails": "Palawakin ang mga detalye",
+ "detailedFileInfo": "Detalyadong Impormasyon ng File:",
+ "deleteSelected": "Burahin ang Napili",
+ "selectAll": "Piliin lahat",
+ "confirmDelete": "Sigurado ka bang gusto mong burahin ang {count} na trabaho? Ang aksyon na ito ay hindi na maibabalik.",
+ "deleteSuccess": "Matagumpay na nabura ang {deleted} na trabaho.",
+ "deleteFailed": "Hindi nabura ang {failed} na trabaho.",
+ "deleteError": "May error na naganap habang nagbubura ng mga trabaho. Pakisubukang muli."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Password",
+ "currentPassword": "Kasalukuyang Password",
+ "newPassword": "Password (iwanang blangko kung hindi babaguhin)",
+ "loginButton": "Mag-login",
+ "registerButton": "Magrehistro",
+ "updateButton": "I-update",
+ "createAccount": "Gumawa ng account",
+ "invalidCredentials": "Invalid na credentials.",
+ "emailInUse": "Ginagamit na ang email.",
+ "unauthorized": "Hindi awtorisado",
+ "cookiesRequired": "Dapat i-enable ang cookies para magamit ang app na ito.",
+ "noCookies": "Walang auth cookie, maaaring hinaharangan ng iyong browser ang cookies."
+ },
+ "setup": {
+ "welcome": "Maligayang pagdating sa ConvertX-CN!",
+ "createYourAccount": "Gumawa ng iyong account",
+ "reportIssues": "Mag-ulat ng mga isyu sa",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Hindi nahanap ang trabaho.",
+ "fileNotFound": "Hindi nahanap ang file.",
+ "uploadFailed": "Nabigo ang pag-upload.",
+ "conversionFailed": "Nabigo ang conversion.",
+ "serverError": "Error sa server."
+ },
+ "upload": {
+ "success": "Matagumpay na na-upload ang mga file.",
+ "dragDrop": "I-drop ang mga file dito"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/fr.json b/src/locales/fr.json
new file mode 100644
index 0000000..1107561
--- /dev/null
+++ b/src/locales/fr.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Propulsé par",
+ "version": "v{version}",
+ "loading": "Chargement...",
+ "error": "Erreur",
+ "success": "Succès",
+ "confirm": "Confirmer",
+ "cancel": "Annuler",
+ "close": "Fermer",
+ "save": "Enregistrer",
+ "delete": "Supprimer",
+ "remove": "Retirer",
+ "download": "Télécharger",
+ "upload": "Téléverser",
+ "submit": "Soumettre",
+ "back": "Retour",
+ "next": "Suivant",
+ "yes": "Oui",
+ "no": "Non"
+ },
+ "nav": {
+ "history": "Historique",
+ "account": "Compte",
+ "logout": "Déconnexion",
+ "login": "Connexion",
+ "register": "S'inscrire",
+ "language": "Langue"
+ },
+ "convert": {
+ "title": "Convertir",
+ "titleWithType": "Convertir .{fileType}",
+ "chooseFile": "Choisir un fichier",
+ "orDragHere": "ou glissez-le ici",
+ "searchConversions": "Rechercher des conversions",
+ "convertTo": "Convertir en",
+ "convertButton": "Convertir",
+ "uploading": "Téléversement...",
+ "processing": "Traitement..."
+ },
+ "results": {
+ "title": "Résultats",
+ "convertedFileName": "Nom du fichier converti",
+ "status": "Statut",
+ "actions": "Actions",
+ "downloadAll": "Tout",
+ "downloadTar": "Tar",
+ "deleteJob": "Supprimer",
+ "noFiles": "Aucun fichier converti pour le moment.",
+ "statusPending": "En attente",
+ "statusCompleted": "Terminé",
+ "statusFailed": "Échoué"
+ },
+ "history": {
+ "title": "Résultats",
+ "time": "Heure",
+ "files": "Fichiers",
+ "filesDone": "Fichiers terminés",
+ "status": "Statut",
+ "actions": "Actions",
+ "expandDetails": "Développer les détails",
+ "detailedFileInfo": "Informations détaillées sur le fichier :",
+ "deleteSelected": "Supprimer la sélection",
+ "selectAll": "Tout sélectionner",
+ "confirmDelete": "Êtes-vous sûr de vouloir supprimer {count} tâche(s) ? Cette action est irréversible.",
+ "deleteSuccess": "{deleted} tâche(s) supprimée(s) avec succès.",
+ "deleteFailed": "Échec de la suppression de {failed} tâche(s).",
+ "deleteError": "Une erreur s'est produite lors de la suppression des tâches. Veuillez réessayer."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Mot de passe",
+ "currentPassword": "Mot de passe actuel",
+ "newPassword": "Mot de passe (laisser vide pour ne pas changer)",
+ "loginButton": "Connexion",
+ "registerButton": "S'inscrire",
+ "updateButton": "Mettre à jour",
+ "createAccount": "Créer un compte",
+ "invalidCredentials": "Identifiants invalides.",
+ "emailInUse": "E-mail déjà utilisé.",
+ "unauthorized": "Non autorisé",
+ "cookiesRequired": "Les cookies doivent être activés pour utiliser cette application.",
+ "noCookies": "Pas de cookie d'authentification, peut-être que votre navigateur bloque les cookies."
+ },
+ "setup": {
+ "welcome": "Bienvenue sur ConvertX-CN !",
+ "createYourAccount": "Créez votre compte",
+ "reportIssues": "Signaler des problèmes sur",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Tâche non trouvée.",
+ "fileNotFound": "Fichier non trouvé.",
+ "uploadFailed": "Échec du téléversement.",
+ "conversionFailed": "Échec de la conversion.",
+ "serverError": "Erreur serveur."
+ },
+ "upload": {
+ "success": "Fichiers téléversés avec succès.",
+ "dragDrop": "Déposez les fichiers ici"
+ },
+ "file": {
+ "size": "{size} ko"
+ }
+}
diff --git a/src/locales/ga.json b/src/locales/ga.json
new file mode 100644
index 0000000..3f1f7f1
--- /dev/null
+++ b/src/locales/ga.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Cumhachtaithe ag",
+ "version": "v{version}",
+ "loading": "Ag lódáil...",
+ "error": "Earráid",
+ "success": "Éirithe",
+ "confirm": "Deimhnigh",
+ "cancel": "Cealaigh",
+ "close": "Dún",
+ "save": "Sábháil",
+ "delete": "Scrios",
+ "remove": "Bain",
+ "download": "Íoslódáil",
+ "upload": "Uaslódáil",
+ "submit": "Cuir isteach",
+ "back": "Siar",
+ "next": "Ar aghaidh",
+ "yes": "Tá",
+ "no": "Níl"
+ },
+ "nav": {
+ "history": "Stair",
+ "account": "Cuntas",
+ "logout": "Logáil amach",
+ "login": "Logáil isteach",
+ "register": "Cláraigh",
+ "language": "Teanga"
+ },
+ "convert": {
+ "title": "Tiontaigh",
+ "titleWithType": "Tiontaigh .{fileType}",
+ "chooseFile": "Roghnaigh comhad",
+ "orDragHere": "nó tarraing anseo é",
+ "searchConversions": "Cuardaigh tiontuithe",
+ "convertTo": "Tiontaigh go",
+ "convertButton": "Tiontaigh",
+ "uploading": "Ag uaslódáil...",
+ "processing": "Ag próiseáil..."
+ },
+ "results": {
+ "title": "Torthaí",
+ "convertedFileName": "Ainm an chomhaid tiontaithe",
+ "status": "Stádas",
+ "actions": "Gníomhartha",
+ "downloadAll": "Gach rud",
+ "downloadTar": "Tar",
+ "deleteJob": "Scrios",
+ "noFiles": "Níl aon chomhaid tiontaithe fós.",
+ "statusPending": "Ar feitheamh",
+ "statusCompleted": "Críochnaithe",
+ "statusFailed": "Theip"
+ },
+ "history": {
+ "title": "Torthaí",
+ "time": "Am",
+ "files": "Comhaid",
+ "filesDone": "Comhaid déanta",
+ "status": "Stádas",
+ "actions": "Gníomhartha",
+ "expandDetails": "Leathnaigh sonraí",
+ "detailedFileInfo": "Eolas mionsonraithe comhaid:",
+ "deleteSelected": "Scrios roghnaithe",
+ "selectAll": "Roghnaigh gach rud",
+ "confirmDelete": "An bhfuil tú cinnte gur mian leat {count} post(anna) a scriosadh? Ní féidir an gníomh seo a chur ar ceal.",
+ "deleteSuccess": "Scriosadh {deleted} post(anna) go rathúil.",
+ "deleteFailed": "Theip ar scriosadh {failed} post(anna).",
+ "deleteError": "Tharla earráid agus postanna á scriosadh. Bain triail eile as."
+ },
+ "auth": {
+ "email": "Ríomhphost",
+ "password": "Pasfhocal",
+ "currentPassword": "Pasfhocal reatha",
+ "newPassword": "Pasfhocal (fág folamh mura n-athraítear)",
+ "loginButton": "Logáil isteach",
+ "registerButton": "Cláraigh",
+ "updateButton": "Nuashonraigh",
+ "createAccount": "Cruthaigh cuntas",
+ "invalidCredentials": "Dintiúir neamhbhailí.",
+ "emailInUse": "Tá an ríomhphost in úsáid cheana.",
+ "unauthorized": "Neamhúdaraithe",
+ "cookiesRequired": "Ba chóir fianáin a chumasú chun an feidhmchlár seo a úsáid.",
+ "noCookies": "Níl aon fhianán fíordheimhnithe, b'fhéidir go bhfuil do bhrabhsálaí ag blocáil fianáin."
+ },
+ "setup": {
+ "welcome": "Fáilte go ConvertX-CN!",
+ "createYourAccount": "Cruthaigh do chuntas",
+ "reportIssues": "Tuairiscigh aon fhadhbanna ar",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Níor aimsíodh an post.",
+ "fileNotFound": "Níor aimsíodh an comhad.",
+ "uploadFailed": "Theip ar an uaslódáil.",
+ "conversionFailed": "Theip ar an tiontú.",
+ "serverError": "Earráid freastalaí."
+ },
+ "upload": {
+ "success": "Uaslódáladh comhaid go rathúil.",
+ "dragDrop": "Scaoil comhaid anseo"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/gl.json b/src/locales/gl.json
new file mode 100644
index 0000000..527b6c3
--- /dev/null
+++ b/src/locales/gl.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Impulsado por",
+ "version": "v{version}",
+ "loading": "Cargando...",
+ "error": "Erro",
+ "success": "Éxito",
+ "confirm": "Confirmar",
+ "cancel": "Cancelar",
+ "close": "Pechar",
+ "save": "Gardar",
+ "delete": "Eliminar",
+ "remove": "Quitar",
+ "download": "Descargar",
+ "upload": "Subir",
+ "submit": "Enviar",
+ "back": "Atrás",
+ "next": "Seguinte",
+ "yes": "Si",
+ "no": "Non"
+ },
+ "nav": {
+ "history": "Historial",
+ "account": "Conta",
+ "logout": "Pechar sesión",
+ "login": "Iniciar sesión",
+ "register": "Rexistrarse",
+ "language": "Idioma"
+ },
+ "convert": {
+ "title": "Converter",
+ "titleWithType": "Converter .{fileType}",
+ "chooseFile": "Escolle un ficheiro",
+ "orDragHere": "ou arrástreo aquí",
+ "searchConversions": "Buscar conversións",
+ "convertTo": "Converter a",
+ "convertButton": "Converter",
+ "uploading": "Subindo...",
+ "processing": "Procesando..."
+ },
+ "results": {
+ "title": "Resultados",
+ "convertedFileName": "Nome do ficheiro convertido",
+ "status": "Estado",
+ "actions": "Accións",
+ "downloadAll": "Todo",
+ "downloadTar": "Tar",
+ "deleteJob": "Eliminar",
+ "noFiles": "Aínda non se converteron ficheiros.",
+ "statusPending": "Pendente",
+ "statusCompleted": "Completado",
+ "statusFailed": "Fallou"
+ },
+ "history": {
+ "title": "Resultados",
+ "time": "Hora",
+ "files": "Ficheiros",
+ "filesDone": "Ficheiros completados",
+ "status": "Estado",
+ "actions": "Accións",
+ "expandDetails": "Ampliar detalles",
+ "detailedFileInfo": "Información detallada do ficheiro:",
+ "deleteSelected": "Eliminar seleccionados",
+ "selectAll": "Seleccionar todo",
+ "confirmDelete": "Estás seguro de que queres eliminar {count} traballo(s)? Esta acción non se pode desfacer.",
+ "deleteSuccess": "Elimináronse {deleted} traballo(s) correctamente.",
+ "deleteFailed": "Non se puideron eliminar {failed} traballo(s).",
+ "deleteError": "Produciuse un erro ao eliminar os traballos. Por favor, téntao de novo."
+ },
+ "auth": {
+ "email": "Correo electrónico",
+ "password": "Contrasinal",
+ "currentPassword": "Contrasinal actual",
+ "newPassword": "Contrasinal (deixa en branco se non cambia)",
+ "loginButton": "Iniciar sesión",
+ "registerButton": "Rexistrarse",
+ "updateButton": "Actualizar",
+ "createAccount": "Crear conta",
+ "invalidCredentials": "Credenciais non válidas.",
+ "emailInUse": "O correo electrónico xa está en uso.",
+ "unauthorized": "Non autorizado",
+ "cookiesRequired": "As cookies deben estar habilitadas para usar esta aplicación.",
+ "noCookies": "Non hai cookie de autenticación, quizais o teu navegador bloquea as cookies."
+ },
+ "setup": {
+ "welcome": "Benvido a ConvertX-CN!",
+ "createYourAccount": "Crea a túa conta",
+ "reportIssues": "Informa de calquera problema en",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Traballo non atopado.",
+ "fileNotFound": "Ficheiro non atopado.",
+ "uploadFailed": "Erro ao subir.",
+ "conversionFailed": "Erro na conversión.",
+ "serverError": "Erro do servidor."
+ },
+ "upload": {
+ "success": "Ficheiros subidos correctamente.",
+ "dragDrop": "Solta os ficheiros aquí"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/gu.json b/src/locales/gu.json
new file mode 100644
index 0000000..07e3245
--- /dev/null
+++ b/src/locales/gu.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "દ્વારા સંચાલિત",
+ "version": "v{version}",
+ "loading": "લોડ થઈ રહ્યું છે...",
+ "error": "ભૂલ",
+ "success": "સફળતા",
+ "confirm": "પુષ્ટિ કરો",
+ "cancel": "રદ કરો",
+ "close": "બંધ કરો",
+ "save": "સાચવો",
+ "delete": "કાઢી નાખો",
+ "remove": "દૂર કરો",
+ "download": "ડાઉનલોડ કરો",
+ "upload": "અપલોડ કરો",
+ "submit": "સબમિટ કરો",
+ "back": "પાછા",
+ "next": "આગળ",
+ "yes": "હા",
+ "no": "ના"
+ },
+ "nav": {
+ "history": "ઇતિહાસ",
+ "account": "એકાઉન્ટ",
+ "logout": "લૉગઆઉટ",
+ "login": "લૉગિન",
+ "register": "નોંધણી કરો",
+ "language": "ભાષા"
+ },
+ "convert": {
+ "title": "રૂપાંતર કરો",
+ "titleWithType": ".{fileType} રૂપાંતર કરો",
+ "chooseFile": "ફાઇલ પસંદ કરો",
+ "orDragHere": "અથવા અહીં ખેંચો",
+ "searchConversions": "રૂપાંતરણો શોધો",
+ "convertTo": "આમાં રૂપાંતર કરો",
+ "convertButton": "રૂપાંતર કરો",
+ "uploading": "અપલોડ થઈ રહ્યું છે...",
+ "processing": "પ્રક્રિયા થઈ રહી છે..."
+ },
+ "results": {
+ "title": "પરિણામો",
+ "convertedFileName": "રૂપાંતરિત ફાઇલ નામ",
+ "status": "સ્થિતિ",
+ "actions": "ક્રિયાઓ",
+ "downloadAll": "બધું",
+ "downloadTar": "Tar",
+ "deleteJob": "કાઢી નાખો",
+ "noFiles": "હજી કોઈ ફાઇલ રૂપાંતરિત થઈ નથી.",
+ "statusPending": "બાકી",
+ "statusCompleted": "પૂર્ણ",
+ "statusFailed": "નિષ્ફળ"
+ },
+ "history": {
+ "title": "પરિણામો",
+ "time": "સમય",
+ "files": "ફાઇલો",
+ "filesDone": "પૂર્ણ થયેલ ફાઇલો",
+ "status": "સ્થિતિ",
+ "actions": "ક્રિયાઓ",
+ "expandDetails": "વિગતો વિસ્તૃત કરો",
+ "detailedFileInfo": "વિગતવાર ફાઇલ માહિતી:",
+ "deleteSelected": "પસંદ કરેલ કાઢી નાખો",
+ "selectAll": "બધું પસંદ કરો",
+ "confirmDelete": "શું તમે ખાતરી છો કે તમે {count} જોબ કાઢી નાખવા માંગો છો? આ ક્રિયા પૂર્વવત થઈ શકતી નથી.",
+ "deleteSuccess": "{deleted} જોબ સફળતાપૂર્વક કાઢી નાખવામાં આવ્યા.",
+ "deleteFailed": "{failed} જોબ કાઢી નાખવામાં નિષ્ફળ.",
+ "deleteError": "જોબ કાઢી નાખતી વખતે ભૂલ થઈ. કૃપા કરીને ફરી પ્રયાસ કરો."
+ },
+ "auth": {
+ "email": "ઇમેઇલ",
+ "password": "પાસવર્ડ",
+ "currentPassword": "વર્તમાન પાસવર્ડ",
+ "newPassword": "પાસવર્ડ (બદલવું નથી તો ખાલી રાખો)",
+ "loginButton": "લૉગિન",
+ "registerButton": "નોંધણી કરો",
+ "updateButton": "અપડેટ કરો",
+ "createAccount": "એકાઉન્ટ બનાવો",
+ "invalidCredentials": "અમાન્ય ઓળખાણ.",
+ "emailInUse": "ઇમેઇલ પહેલેથી વપરાશમાં છે.",
+ "unauthorized": "અનધિકૃત",
+ "cookiesRequired": "આ એપ વાપરવા માટે કૂકીઝ સક્ષમ હોવી જોઈએ.",
+ "noCookies": "કોઈ પ્રમાણીકરણ કૂકી નથી, કદાચ તમારું બ્રાઉઝર કૂકીઝ અવરોધિત કરી રહ્યું છે."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN માં સ્વાગત છે!",
+ "createYourAccount": "તમારું એકાઉન્ટ બનાવો",
+ "reportIssues": "સમસ્યાઓ જણાવો",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "જોબ મળ્યો નથી.",
+ "fileNotFound": "ફાઇલ મળી નથી.",
+ "uploadFailed": "અપલોડ નિષ્ફળ.",
+ "conversionFailed": "રૂપાંતર નિષ્ફળ.",
+ "serverError": "સર્વર ભૂલ."
+ },
+ "upload": {
+ "success": "ફાઇલો સફળતાપૂર્વક અપલોડ થઈ.",
+ "dragDrop": "ફાઇલો અહીં છોડો"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/he.json b/src/locales/he.json
new file mode 100644
index 0000000..422376f
--- /dev/null
+++ b/src/locales/he.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "מופעל על ידי",
+ "version": "v{version}",
+ "loading": "טוען...",
+ "error": "שגיאה",
+ "success": "הצלחה",
+ "confirm": "אישור",
+ "cancel": "ביטול",
+ "close": "סגור",
+ "save": "שמור",
+ "delete": "מחק",
+ "remove": "הסר",
+ "download": "הורד",
+ "upload": "העלה",
+ "submit": "שלח",
+ "back": "חזור",
+ "next": "הבא",
+ "yes": "כן",
+ "no": "לא"
+ },
+ "nav": {
+ "history": "היסטוריה",
+ "account": "חשבון",
+ "logout": "התנתק",
+ "login": "התחבר",
+ "register": "הירשם",
+ "language": "שפה"
+ },
+ "convert": {
+ "title": "המר",
+ "titleWithType": "המר .{fileType}",
+ "chooseFile": "בחר קובץ",
+ "orDragHere": "או גרור לכאן",
+ "searchConversions": "חפש המרות",
+ "convertTo": "המר ל",
+ "convertButton": "המר",
+ "uploading": "מעלה...",
+ "processing": "מעבד..."
+ },
+ "results": {
+ "title": "תוצאות",
+ "convertedFileName": "שם הקובץ המומר",
+ "status": "סטטוס",
+ "actions": "פעולות",
+ "downloadAll": "הכל",
+ "downloadTar": "Tar",
+ "deleteJob": "מחק",
+ "noFiles": "עדיין לא הומרו קבצים.",
+ "statusPending": "ממתין",
+ "statusCompleted": "הושלם",
+ "statusFailed": "נכשל"
+ },
+ "history": {
+ "title": "תוצאות",
+ "time": "זמן",
+ "files": "קבצים",
+ "filesDone": "קבצים שהושלמו",
+ "status": "סטטוס",
+ "actions": "פעולות",
+ "expandDetails": "הרחב פרטים",
+ "detailedFileInfo": "מידע מפורט על הקובץ:",
+ "deleteSelected": "מחק נבחרים",
+ "selectAll": "בחר הכל",
+ "confirmDelete": "האם אתה בטוח שברצונך למחוק {count} משימה/ות? פעולה זו אינה ניתנת לביטול.",
+ "deleteSuccess": "נמחקו בהצלחה {deleted} משימה/ות.",
+ "deleteFailed": "נכשלה מחיקת {failed} משימה/ות.",
+ "deleteError": "אירעה שגיאה בעת מחיקת משימות. נסה שוב."
+ },
+ "auth": {
+ "email": "דוא\"ל",
+ "password": "סיסמה",
+ "currentPassword": "סיסמה נוכחית",
+ "newPassword": "סיסמה (השאר ריק אם לא משתנה)",
+ "loginButton": "התחבר",
+ "registerButton": "הירשם",
+ "updateButton": "עדכן",
+ "createAccount": "צור חשבון",
+ "invalidCredentials": "פרטי התחברות שגויים.",
+ "emailInUse": "הדוא\"ל כבר בשימוש.",
+ "unauthorized": "לא מורשה",
+ "cookiesRequired": "יש להפעיל עוגיות כדי להשתמש באפליקציה זו.",
+ "noCookies": "אין עוגיית אימות, ייתכן שהדפדפן שלך חוסם עוגיות."
+ },
+ "setup": {
+ "welcome": "ברוכים הבאים ל-ConvertX-CN!",
+ "createYourAccount": "צור את החשבון שלך",
+ "reportIssues": "דווח על בעיות ב",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "המשימה לא נמצאה.",
+ "fileNotFound": "הקובץ לא נמצא.",
+ "uploadFailed": "ההעלאה נכשלה.",
+ "conversionFailed": "ההמרה נכשלה.",
+ "serverError": "שגיאת שרת."
+ },
+ "upload": {
+ "success": "הקבצים הועלו בהצלחה.",
+ "dragDrop": "גרור קבצים לכאן"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/hi.json b/src/locales/hi.json
new file mode 100644
index 0000000..8ce7b99
--- /dev/null
+++ b/src/locales/hi.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "द्वारा संचालित",
+ "version": "v{version}",
+ "loading": "लोड हो रहा है...",
+ "error": "त्रुटि",
+ "success": "सफलता",
+ "confirm": "पुष्टि करें",
+ "cancel": "रद्द करें",
+ "close": "बंद करें",
+ "save": "सहेजें",
+ "delete": "हटाएं",
+ "remove": "निकालें",
+ "download": "डाउनलोड",
+ "upload": "अपलोड",
+ "submit": "जमा करें",
+ "back": "वापस",
+ "next": "अगला",
+ "yes": "हाँ",
+ "no": "नहीं"
+ },
+ "nav": {
+ "history": "इतिहास",
+ "account": "खाता",
+ "logout": "लॉग आउट",
+ "login": "लॉग इन",
+ "register": "पंजीकरण",
+ "language": "भाषा"
+ },
+ "convert": {
+ "title": "कन्वर्ट करें",
+ "titleWithType": ".{fileType} कन्वर्ट करें",
+ "chooseFile": "एक फ़ाइल चुनें",
+ "orDragHere": "या यहाँ खींचें",
+ "searchConversions": "रूपांतरण खोजें",
+ "convertTo": "में कन्वर्ट करें",
+ "convertButton": "कन्वर्ट करें",
+ "uploading": "अपलोड हो रहा है...",
+ "processing": "प्रोसेसिंग..."
+ },
+ "results": {
+ "title": "परिणाम",
+ "convertedFileName": "कन्वर्ट की गई फ़ाइल का नाम",
+ "status": "स्थिति",
+ "actions": "कार्रवाई",
+ "downloadAll": "सभी",
+ "downloadTar": "Tar",
+ "deleteJob": "हटाएं",
+ "noFiles": "अभी तक कोई फ़ाइल कन्वर्ट नहीं हुई।",
+ "statusPending": "लंबित",
+ "statusCompleted": "पूर्ण",
+ "statusFailed": "विफल"
+ },
+ "history": {
+ "title": "परिणाम",
+ "time": "समय",
+ "files": "फ़ाइलें",
+ "filesDone": "पूर्ण फ़ाइलें",
+ "status": "स्थिति",
+ "actions": "कार्रवाई",
+ "expandDetails": "विवरण विस्तार करें",
+ "detailedFileInfo": "विस्तृत फ़ाइल जानकारी:",
+ "deleteSelected": "चयनित हटाएं",
+ "selectAll": "सभी चुनें",
+ "confirmDelete": "क्या आप वाकई {count} कार्य हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।",
+ "deleteSuccess": "{deleted} कार्य सफलतापूर्वक हटाए गए।",
+ "deleteFailed": "{failed} कार्य हटाने में विफल।",
+ "deleteError": "कार्य हटाते समय त्रुटि हुई। कृपया पुनः प्रयास करें।"
+ },
+ "auth": {
+ "email": "ईमेल",
+ "password": "पासवर्ड",
+ "currentPassword": "वर्तमान पासवर्ड",
+ "newPassword": "पासवर्ड (अपरिवर्तित के लिए खाली छोड़ें)",
+ "loginButton": "लॉग इन",
+ "registerButton": "पंजीकरण",
+ "updateButton": "अपडेट करें",
+ "createAccount": "खाता बनाएं",
+ "invalidCredentials": "अमान्य क्रेडेंशियल।",
+ "emailInUse": "ईमेल पहले से उपयोग में है।",
+ "unauthorized": "अनधिकृत",
+ "cookiesRequired": "इस ऐप का उपयोग करने के लिए कुकीज़ सक्षम होनी चाहिए।",
+ "noCookies": "कोई प्रमाणीकरण कुकी नहीं, शायद आपका ब्राउज़र कुकीज़ को ब्लॉक कर रहा है।"
+ },
+ "setup": {
+ "welcome": "ConvertX-CN में आपका स्वागत है!",
+ "createYourAccount": "अपना खाता बनाएं",
+ "reportIssues": "समस्याओं की रिपोर्ट करें",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "कार्य नहीं मिला।",
+ "fileNotFound": "फ़ाइल नहीं मिली।",
+ "uploadFailed": "अपलोड विफल।",
+ "conversionFailed": "रूपांतरण विफल।",
+ "serverError": "सर्वर त्रुटि।"
+ },
+ "upload": {
+ "success": "फ़ाइलें सफलतापूर्वक अपलोड हुईं।",
+ "dragDrop": "फ़ाइलें यहाँ छोड़ें"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/hr.json b/src/locales/hr.json
new file mode 100644
index 0000000..69b6759
--- /dev/null
+++ b/src/locales/hr.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Pokreće",
+ "version": "v{version}",
+ "loading": "Učitavanje...",
+ "error": "Greška",
+ "success": "Uspjeh",
+ "confirm": "Potvrdi",
+ "cancel": "Odustani",
+ "close": "Zatvori",
+ "save": "Spremi",
+ "delete": "Obriši",
+ "remove": "Ukloni",
+ "download": "Preuzmi",
+ "upload": "Prenesi",
+ "submit": "Pošalji",
+ "back": "Natrag",
+ "next": "Sljedeće",
+ "yes": "Da",
+ "no": "Ne"
+ },
+ "nav": {
+ "history": "Povijest",
+ "account": "Račun",
+ "logout": "Odjava",
+ "login": "Prijava",
+ "register": "Registracija",
+ "language": "Jezik"
+ },
+ "convert": {
+ "title": "Pretvori",
+ "titleWithType": "Pretvori .{fileType}",
+ "chooseFile": "Odaberite datoteku",
+ "orDragHere": "ili je povucite ovdje",
+ "searchConversions": "Pretraži pretvorbe",
+ "convertTo": "Pretvori u",
+ "convertButton": "Pretvori",
+ "uploading": "Prijenos...",
+ "processing": "Obrada..."
+ },
+ "results": {
+ "title": "Rezultati",
+ "convertedFileName": "Naziv pretvorene datoteke",
+ "status": "Status",
+ "actions": "Radnje",
+ "downloadAll": "Sve",
+ "downloadTar": "Tar",
+ "deleteJob": "Obriši",
+ "noFiles": "Još nema pretvorenih datoteka.",
+ "statusPending": "Na čekanju",
+ "statusCompleted": "Završeno",
+ "statusFailed": "Neuspjelo"
+ },
+ "history": {
+ "title": "Rezultati",
+ "time": "Vrijeme",
+ "files": "Datoteke",
+ "filesDone": "Završene datoteke",
+ "status": "Status",
+ "actions": "Radnje",
+ "expandDetails": "Proširi detalje",
+ "detailedFileInfo": "Detaljne informacije o datoteci:",
+ "deleteSelected": "Obriši odabrano",
+ "selectAll": "Odaberi sve",
+ "confirmDelete": "Jeste li sigurni da želite obrisati {count} zadatak(e)? Ova radnja se ne može poništiti.",
+ "deleteSuccess": "Uspješno obrisano {deleted} zadatak(a).",
+ "deleteFailed": "Nije uspjelo brisanje {failed} zadatak(a).",
+ "deleteError": "Došlo je do greške prilikom brisanja zadataka. Molimo pokušajte ponovo."
+ },
+ "auth": {
+ "email": "E-pošta",
+ "password": "Lozinka",
+ "currentPassword": "Trenutna lozinka",
+ "newPassword": "Lozinka (ostavite prazno za nepromijenjeno)",
+ "loginButton": "Prijava",
+ "registerButton": "Registracija",
+ "updateButton": "Ažuriraj",
+ "createAccount": "Stvori račun",
+ "invalidCredentials": "Nevažeće vjerodajnice.",
+ "emailInUse": "E-pošta je već u upotrebi.",
+ "unauthorized": "Neovlašteno",
+ "cookiesRequired": "Kolačići moraju biti omogućeni za korištenje ove aplikacije.",
+ "noCookies": "Nema kolačića za autentifikaciju, možda vaš preglednik blokira kolačiće."
+ },
+ "setup": {
+ "welcome": "Dobrodošli u ConvertX-CN!",
+ "createYourAccount": "Stvorite svoj račun",
+ "reportIssues": "Prijavite probleme na",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Zadatak nije pronađen.",
+ "fileNotFound": "Datoteka nije pronađena.",
+ "uploadFailed": "Prijenos nije uspio.",
+ "conversionFailed": "Pretvorba nije uspjela.",
+ "serverError": "Greška poslužitelja."
+ },
+ "upload": {
+ "success": "Datoteke su uspješno prenesene.",
+ "dragDrop": "Ispustite datoteke ovdje"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/hu.json b/src/locales/hu.json
new file mode 100644
index 0000000..2644196
--- /dev/null
+++ b/src/locales/hu.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Működteti",
+ "version": "v{version}",
+ "loading": "Betöltés...",
+ "error": "Hiba",
+ "success": "Sikeres",
+ "confirm": "Megerősítés",
+ "cancel": "Mégse",
+ "close": "Bezárás",
+ "save": "Mentés",
+ "delete": "Törlés",
+ "remove": "Eltávolítás",
+ "download": "Letöltés",
+ "upload": "Feltöltés",
+ "submit": "Küldés",
+ "back": "Vissza",
+ "next": "Következő",
+ "yes": "Igen",
+ "no": "Nem"
+ },
+ "nav": {
+ "history": "Előzmények",
+ "account": "Fiók",
+ "logout": "Kijelentkezés",
+ "login": "Bejelentkezés",
+ "register": "Regisztráció",
+ "language": "Nyelv"
+ },
+ "convert": {
+ "title": "Konvertálás",
+ "titleWithType": ".{fileType} konvertálása",
+ "chooseFile": "Válasszon fájlt",
+ "orDragHere": "vagy húzza ide",
+ "searchConversions": "Konverziók keresése",
+ "convertTo": "Konvertálás erre",
+ "convertButton": "Konvertálás",
+ "uploading": "Feltöltés...",
+ "processing": "Feldolgozás..."
+ },
+ "results": {
+ "title": "Eredmények",
+ "convertedFileName": "Konvertált fájlnév",
+ "status": "Állapot",
+ "actions": "Műveletek",
+ "downloadAll": "Mind",
+ "downloadTar": "Tar",
+ "deleteJob": "Törlés",
+ "noFiles": "Még nincsenek konvertált fájlok.",
+ "statusPending": "Függőben",
+ "statusCompleted": "Befejezve",
+ "statusFailed": "Sikertelen"
+ },
+ "history": {
+ "title": "Eredmények",
+ "time": "Idő",
+ "files": "Fájlok",
+ "filesDone": "Kész fájlok",
+ "status": "Állapot",
+ "actions": "Műveletek",
+ "expandDetails": "Részletek kibontása",
+ "detailedFileInfo": "Részletes fájlinformáció:",
+ "deleteSelected": "Kiválasztottak törlése",
+ "selectAll": "Összes kijelölése",
+ "confirmDelete": "Biztosan törölni szeretné a(z) {count} feladatot? Ez a művelet nem vonható vissza.",
+ "deleteSuccess": "Sikeresen törölve {deleted} feladat.",
+ "deleteFailed": "Nem sikerült törölni {failed} feladatot.",
+ "deleteError": "Hiba történt a feladatok törlésekor. Kérjük, próbálja újra."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Jelszó",
+ "currentPassword": "Jelenlegi jelszó",
+ "newPassword": "Jelszó (hagyja üresen, ha változatlan)",
+ "loginButton": "Bejelentkezés",
+ "registerButton": "Regisztráció",
+ "updateButton": "Frissítés",
+ "createAccount": "Fiók létrehozása",
+ "invalidCredentials": "Érvénytelen hitelesítő adatok.",
+ "emailInUse": "Az e-mail már használatban van.",
+ "unauthorized": "Jogosulatlan",
+ "cookiesRequired": "A sütiknek engedélyezve kell lenniük az alkalmazás használatához.",
+ "noCookies": "Nincs hitelesítési süti, talán a böngészője blokkolja a sütiket."
+ },
+ "setup": {
+ "welcome": "Üdvözöljük a ConvertX-CN-ben!",
+ "createYourAccount": "Hozza létre fiókját",
+ "reportIssues": "Jelentse a problémákat a",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Feladat nem található.",
+ "fileNotFound": "Fájl nem található.",
+ "uploadFailed": "Feltöltés sikertelen.",
+ "conversionFailed": "Konvertálás sikertelen.",
+ "serverError": "Szerverhiba."
+ },
+ "upload": {
+ "success": "Fájlok sikeresen feltöltve.",
+ "dragDrop": "Húzza ide a fájlokat"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/id.json b/src/locales/id.json
new file mode 100644
index 0000000..b503e2f
--- /dev/null
+++ b/src/locales/id.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Didukung oleh",
+ "version": "v{version}",
+ "loading": "Memuat...",
+ "error": "Kesalahan",
+ "success": "Berhasil",
+ "confirm": "Konfirmasi",
+ "cancel": "Batal",
+ "close": "Tutup",
+ "save": "Simpan",
+ "delete": "Hapus",
+ "remove": "Hapus",
+ "download": "Unduh",
+ "upload": "Unggah",
+ "submit": "Kirim",
+ "back": "Kembali",
+ "next": "Berikutnya",
+ "yes": "Ya",
+ "no": "Tidak"
+ },
+ "nav": {
+ "history": "Riwayat",
+ "account": "Akun",
+ "logout": "Keluar",
+ "login": "Masuk",
+ "register": "Daftar",
+ "language": "Bahasa"
+ },
+ "convert": {
+ "title": "Konversi",
+ "titleWithType": "Konversi .{fileType}",
+ "chooseFile": "Pilih file",
+ "orDragHere": "atau seret ke sini",
+ "searchConversions": "Cari konversi",
+ "convertTo": "Konversi ke",
+ "convertButton": "Konversi",
+ "uploading": "Mengunggah...",
+ "processing": "Memproses..."
+ },
+ "results": {
+ "title": "Hasil",
+ "convertedFileName": "Nama File Terkonversi",
+ "status": "Status",
+ "actions": "Tindakan",
+ "downloadAll": "Semua",
+ "downloadTar": "Tar",
+ "deleteJob": "Hapus",
+ "noFiles": "Belum ada file yang dikonversi.",
+ "statusPending": "Menunggu",
+ "statusCompleted": "Selesai",
+ "statusFailed": "Gagal"
+ },
+ "history": {
+ "title": "Hasil",
+ "time": "Waktu",
+ "files": "File",
+ "filesDone": "File Selesai",
+ "status": "Status",
+ "actions": "Tindakan",
+ "expandDetails": "Perluas detail",
+ "detailedFileInfo": "Informasi File Detail:",
+ "deleteSelected": "Hapus Terpilih",
+ "selectAll": "Pilih semua",
+ "confirmDelete": "Apakah Anda yakin ingin menghapus {count} pekerjaan? Tindakan ini tidak dapat dibatalkan.",
+ "deleteSuccess": "Berhasil menghapus {deleted} pekerjaan.",
+ "deleteFailed": "Gagal menghapus {failed} pekerjaan.",
+ "deleteError": "Terjadi kesalahan saat menghapus pekerjaan. Silakan coba lagi."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Kata Sandi",
+ "currentPassword": "Kata Sandi Saat Ini",
+ "newPassword": "Kata Sandi (kosongkan jika tidak berubah)",
+ "loginButton": "Masuk",
+ "registerButton": "Daftar",
+ "updateButton": "Perbarui",
+ "createAccount": "Buat akun",
+ "invalidCredentials": "Kredensial tidak valid.",
+ "emailInUse": "Email sudah digunakan.",
+ "unauthorized": "Tidak diizinkan",
+ "cookiesRequired": "Cookie harus diaktifkan untuk menggunakan aplikasi ini.",
+ "noCookies": "Tidak ada cookie autentikasi, mungkin browser Anda memblokir cookie."
+ },
+ "setup": {
+ "welcome": "Selamat datang di ConvertX-CN!",
+ "createYourAccount": "Buat akun Anda",
+ "reportIssues": "Laporkan masalah di",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Pekerjaan tidak ditemukan.",
+ "fileNotFound": "File tidak ditemukan.",
+ "uploadFailed": "Unggahan gagal.",
+ "conversionFailed": "Konversi gagal.",
+ "serverError": "Kesalahan server."
+ },
+ "upload": {
+ "success": "File berhasil diunggah.",
+ "dragDrop": "Letakkan file di sini"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/is.json b/src/locales/is.json
new file mode 100644
index 0000000..b6bcce7
--- /dev/null
+++ b/src/locales/is.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Keyrt af",
+ "version": "v{version}",
+ "loading": "Hleður...",
+ "error": "Villa",
+ "success": "Tókst",
+ "confirm": "Staðfesta",
+ "cancel": "Hætta við",
+ "close": "Loka",
+ "save": "Vista",
+ "delete": "Eyða",
+ "remove": "Fjarlægja",
+ "download": "Hlaða niður",
+ "upload": "Hlaða upp",
+ "submit": "Senda",
+ "back": "Til baka",
+ "next": "Næsta",
+ "yes": "Já",
+ "no": "Nei"
+ },
+ "nav": {
+ "history": "Saga",
+ "account": "Reikningur",
+ "logout": "Útskrá",
+ "login": "Innskrá",
+ "register": "Nýskrá",
+ "language": "Tungumál"
+ },
+ "convert": {
+ "title": "Umbreyta",
+ "titleWithType": "Umbreyta .{fileType}",
+ "chooseFile": "Veldu skrá",
+ "orDragHere": "eða dragðu hana hingað",
+ "searchConversions": "Leita að umbreytingum",
+ "convertTo": "Umbreyta í",
+ "convertButton": "Umbreyta",
+ "uploading": "Hleður upp...",
+ "processing": "Vinnur úr..."
+ },
+ "results": {
+ "title": "Niðurstöður",
+ "convertedFileName": "Nafn umbreyttrar skráar",
+ "status": "Staða",
+ "actions": "Aðgerðir",
+ "downloadAll": "Allt",
+ "downloadTar": "Tar",
+ "deleteJob": "Eyða",
+ "noFiles": "Engar skrár hafa verið umbreyttar ennþá.",
+ "statusPending": "Í bið",
+ "statusCompleted": "Lokið",
+ "statusFailed": "Mistókst"
+ },
+ "history": {
+ "title": "Niðurstöður",
+ "time": "Tími",
+ "files": "Skrár",
+ "filesDone": "Loknar skrár",
+ "status": "Staða",
+ "actions": "Aðgerðir",
+ "expandDetails": "Sýna nánar",
+ "detailedFileInfo": "Ítarlegar skráarupplýsingar:",
+ "deleteSelected": "Eyða völdum",
+ "selectAll": "Velja allt",
+ "confirmDelete": "Ertu viss um að þú viljir eyða {count} verki(um)? Þessa aðgerð er ekki hægt að afturkalla.",
+ "deleteSuccess": "{deleted} verk(um) eytt.",
+ "deleteFailed": "Ekki tókst að eyða {failed} verki(um).",
+ "deleteError": "Villa kom upp við að eyða verkum. Vinsamlegast reyndu aftur."
+ },
+ "auth": {
+ "email": "Netfang",
+ "password": "Lykilorð",
+ "currentPassword": "Núverandi lykilorð",
+ "newPassword": "Lykilorð (skildu eftir autt ef óbreytt)",
+ "loginButton": "Innskrá",
+ "registerButton": "Nýskrá",
+ "updateButton": "Uppfæra",
+ "createAccount": "Stofna reikning",
+ "invalidCredentials": "Ógild skilríki.",
+ "emailInUse": "Netfang er þegar í notkun.",
+ "unauthorized": "Óheimilt",
+ "cookiesRequired": "Vefkökur þurfa að vera virkar til að nota þetta forrit.",
+ "noCookies": "Engin auðkenningarkaka, kannski vafrinn þinn lokar á vefkökur."
+ },
+ "setup": {
+ "welcome": "Velkomin í ConvertX-CN!",
+ "createYourAccount": "Stofnaðu reikninginn þinn",
+ "reportIssues": "Tilkynntu vandamál á",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Verk fannst ekki.",
+ "fileNotFound": "Skrá fannst ekki.",
+ "uploadFailed": "Upphleðsla mistókst.",
+ "conversionFailed": "Umbreyting mistókst.",
+ "serverError": "Villa á þjóni."
+ },
+ "upload": {
+ "success": "Skrár hlaðnar upp.",
+ "dragDrop": "Slepptu skrám hér"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/it.json b/src/locales/it.json
new file mode 100644
index 0000000..94621a3
--- /dev/null
+++ b/src/locales/it.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Offerto da",
+ "version": "v{version}",
+ "loading": "Caricamento...",
+ "error": "Errore",
+ "success": "Successo",
+ "confirm": "Conferma",
+ "cancel": "Annulla",
+ "close": "Chiudi",
+ "save": "Salva",
+ "delete": "Elimina",
+ "remove": "Rimuovi",
+ "download": "Scarica",
+ "upload": "Carica",
+ "submit": "Invia",
+ "back": "Indietro",
+ "next": "Avanti",
+ "yes": "Sì",
+ "no": "No"
+ },
+ "nav": {
+ "history": "Cronologia",
+ "account": "Account",
+ "logout": "Esci",
+ "login": "Accedi",
+ "register": "Registrati",
+ "language": "Lingua"
+ },
+ "convert": {
+ "title": "Converti",
+ "titleWithType": "Converti .{fileType}",
+ "chooseFile": "Scegli un file",
+ "orDragHere": "o trascinalo qui",
+ "searchConversions": "Cerca conversioni",
+ "convertTo": "Converti in",
+ "convertButton": "Converti",
+ "uploading": "Caricamento...",
+ "processing": "Elaborazione..."
+ },
+ "results": {
+ "title": "Risultati",
+ "convertedFileName": "Nome file convertito",
+ "status": "Stato",
+ "actions": "Azioni",
+ "downloadAll": "Tutto",
+ "downloadTar": "Tar",
+ "deleteJob": "Elimina",
+ "noFiles": "Nessun file convertito ancora.",
+ "statusPending": "In attesa",
+ "statusCompleted": "Completato",
+ "statusFailed": "Fallito"
+ },
+ "history": {
+ "title": "Risultati",
+ "time": "Ora",
+ "files": "File",
+ "filesDone": "File completati",
+ "status": "Stato",
+ "actions": "Azioni",
+ "expandDetails": "Espandi dettagli",
+ "detailedFileInfo": "Informazioni dettagliate sul file:",
+ "deleteSelected": "Elimina selezionati",
+ "selectAll": "Seleziona tutto",
+ "confirmDelete": "Sei sicuro di voler eliminare {count} lavoro/i? Questa azione non può essere annullata.",
+ "deleteSuccess": "{deleted} lavoro/i eliminato/i con successo.",
+ "deleteFailed": "Impossibile eliminare {failed} lavoro/i.",
+ "deleteError": "Si è verificato un errore durante l'eliminazione dei lavori. Riprova."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Password",
+ "currentPassword": "Password attuale",
+ "newPassword": "Password (lascia vuoto per non modificare)",
+ "loginButton": "Accedi",
+ "registerButton": "Registrati",
+ "updateButton": "Aggiorna",
+ "createAccount": "Crea account",
+ "invalidCredentials": "Credenziali non valide.",
+ "emailInUse": "Email già in uso.",
+ "unauthorized": "Non autorizzato",
+ "cookiesRequired": "I cookie devono essere abilitati per utilizzare questa app.",
+ "noCookies": "Nessun cookie di autenticazione, forse il tuo browser sta bloccando i cookie."
+ },
+ "setup": {
+ "welcome": "Benvenuto su ConvertX-CN!",
+ "createYourAccount": "Crea il tuo account",
+ "reportIssues": "Segnala problemi su",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Lavoro non trovato.",
+ "fileNotFound": "File non trovato.",
+ "uploadFailed": "Caricamento fallito.",
+ "conversionFailed": "Conversione fallita.",
+ "serverError": "Errore del server."
+ },
+ "upload": {
+ "success": "File caricati con successo.",
+ "dragDrop": "Trascina i file qui"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/km.json b/src/locales/km.json
new file mode 100644
index 0000000..a27c145
--- /dev/null
+++ b/src/locales/km.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ដំណើរការដោយ",
+ "version": "v{version}",
+ "loading": "កំពុងផ្ទុក...",
+ "error": "កំហុស",
+ "success": "ជោគជ័យ",
+ "confirm": "បញ្ជាក់",
+ "cancel": "បោះបង់",
+ "close": "បិទ",
+ "save": "រក្សាទុក",
+ "delete": "លុប",
+ "remove": "ដកចេញ",
+ "download": "ទាញយក",
+ "upload": "ផ្ទុកឡើង",
+ "submit": "ដាក់ស្នើ",
+ "back": "ថយក្រោយ",
+ "next": "បន្ទាប់",
+ "yes": "បាទ/ចាស",
+ "no": "ទេ"
+ },
+ "nav": {
+ "history": "ប្រវត្តិ",
+ "account": "គណនី",
+ "logout": "ចាកចេញ",
+ "login": "ចូល",
+ "register": "ចុះឈ្មោះ",
+ "language": "ភាសា"
+ },
+ "convert": {
+ "title": "បម្លែង",
+ "titleWithType": "បម្លែង .{fileType}",
+ "chooseFile": "ជ្រើសរើសឯកសារ",
+ "orDragHere": "ឬអូសមកទីនេះ",
+ "searchConversions": "ស្វែងរកការបម្លែង",
+ "convertTo": "បម្លែងទៅ",
+ "convertButton": "បម្លែង",
+ "uploading": "កំពុងផ្ទុកឡើង...",
+ "processing": "កំពុងដំណើរការ..."
+ },
+ "results": {
+ "title": "លទ្ធផល",
+ "convertedFileName": "ឈ្មោះឯកសារដែលបានបម្លែង",
+ "status": "ស្ថានភាព",
+ "actions": "សកម្មភាព",
+ "downloadAll": "ទាំងអស់",
+ "downloadTar": "Tar",
+ "deleteJob": "លុប",
+ "noFiles": "មិនទាន់មានឯកសារដែលបានបម្លែងទេ។",
+ "statusPending": "កំពុងរង់ចាំ",
+ "statusCompleted": "បានបញ្ចប់",
+ "statusFailed": "បរាជ័យ"
+ },
+ "history": {
+ "title": "លទ្ធផល",
+ "time": "ពេលវេលា",
+ "files": "ឯកសារ",
+ "filesDone": "ឯកសារបានបញ្ចប់",
+ "status": "ស្ថានភាព",
+ "actions": "សកម្មភាព",
+ "expandDetails": "ពង្រីកព័ត៌មានលម្អិត",
+ "detailedFileInfo": "ព័ត៌មានលម្អិតឯកសារ:",
+ "deleteSelected": "លុបដែលបានជ្រើសរើស",
+ "selectAll": "ជ្រើសរើសទាំងអស់",
+ "confirmDelete": "តើអ្នកប្រាកដថាចង់លុបការងារ {count}? សកម្មភាពនេះមិនអាចត្រឡប់វិញបានទេ។",
+ "deleteSuccess": "បានលុបការងារ {deleted} ដោយជោគជ័យ។",
+ "deleteFailed": "បរាជ័យក្នុងការលុបការងារ {failed}។",
+ "deleteError": "មានកំហុសកើតឡើងពេលលុបការងារ។ សូមព្យាយាមម្តងទៀត។"
+ },
+ "auth": {
+ "email": "អ៊ីមែល",
+ "password": "ពាក្យសម្ងាត់",
+ "currentPassword": "ពាក្យសម្ងាត់បច្ចុប្បន្ន",
+ "newPassword": "ពាក្យសម្ងាត់ (ទុកទទេបើមិនប្តូរ)",
+ "loginButton": "ចូល",
+ "registerButton": "ចុះឈ្មោះ",
+ "updateButton": "ធ្វើបច្ចុប្បន្នភាព",
+ "createAccount": "បង្កើតគណនី",
+ "invalidCredentials": "ព័ត៌មានសម្គាល់មិនត្រឹមត្រូវ។",
+ "emailInUse": "អ៊ីមែលមាននរណាប្រើរួចហើយ។",
+ "unauthorized": "គ្មានការអនុញ្ញាត",
+ "cookiesRequired": "គួរតែបើកខូគីដើម្បីប្រើកម្មវិធីនេះ។",
+ "noCookies": "គ្មានខូគីផ្ទៀងផ្ទាត់ទេ ប្រហែលជាកម្មវិធីរុករករបស់អ្នកកំពុងបិទខូគី។"
+ },
+ "setup": {
+ "welcome": "សូមស្វាគមន៍មកកាន់ ConvertX-CN!",
+ "createYourAccount": "បង្កើតគណនីរបស់អ្នក",
+ "reportIssues": "រាយការណ៍បញ្ហានៅ",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "រកមិនឃើញការងារ។",
+ "fileNotFound": "រកមិនឃើញឯកសារ។",
+ "uploadFailed": "ការផ្ទុកឡើងបរាជ័យ។",
+ "conversionFailed": "ការបម្លែងបរាជ័យ។",
+ "serverError": "កំហុសម៉ាស៊ីនមេ។"
+ },
+ "upload": {
+ "success": "ឯកសារបានផ្ទុកឡើងដោយជោគជ័យ។",
+ "dragDrop": "ទម្លាក់ឯកសារទីនេះ"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/kn.json b/src/locales/kn.json
new file mode 100644
index 0000000..374a828
--- /dev/null
+++ b/src/locales/kn.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ಮೂಲಕ ಚಾಲಿತ",
+ "version": "v{version}",
+ "loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
+ "error": "ದೋಷ",
+ "success": "ಯಶಸ್ಸು",
+ "confirm": "ದೃಢೀಕರಿಸಿ",
+ "cancel": "ರದ್ದುಮಾಡಿ",
+ "close": "ಮುಚ್ಚಿ",
+ "save": "ಉಳಿಸಿ",
+ "delete": "ಅಳಿಸಿ",
+ "remove": "ತೆಗೆದುಹಾಕಿ",
+ "download": "ಡೌನ್ಲೋಡ್",
+ "upload": "ಅಪ್ಲೋಡ್",
+ "submit": "ಸಲ್ಲಿಸಿ",
+ "back": "ಹಿಂದೆ",
+ "next": "ಮುಂದೆ",
+ "yes": "ಹೌದು",
+ "no": "ಇಲ್ಲ"
+ },
+ "nav": {
+ "history": "ಇತಿಹಾಸ",
+ "account": "ಖಾತೆ",
+ "logout": "ಲಾಗ್ ಔಟ್",
+ "login": "ಲಾಗಿನ್",
+ "register": "ನೋಂದಣಿ",
+ "language": "ಭಾಷೆ"
+ },
+ "convert": {
+ "title": "ಪರಿವರ್ತಿಸಿ",
+ "titleWithType": ".{fileType} ಪರಿವರ್ತಿಸಿ",
+ "chooseFile": "ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ",
+ "orDragHere": "ಅಥವಾ ಇಲ್ಲಿ ಎಳೆಯಿರಿ",
+ "searchConversions": "ಪರಿವರ್ತನೆಗಳನ್ನು ಹುಡುಕಿ",
+ "convertTo": "ಇದಕ್ಕೆ ಪರಿವರ್ತಿಸಿ",
+ "convertButton": "ಪರಿವರ್ತಿಸಿ",
+ "uploading": "ಅಪ್ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
+ "processing": "ಪ್ರಕ್ರಿಯೆ ಆಗುತ್ತಿದೆ..."
+ },
+ "results": {
+ "title": "ಫಲಿತಾಂಶಗಳು",
+ "convertedFileName": "ಪರಿವರ್ತಿತ ಫೈಲ್ ಹೆಸರು",
+ "status": "ಸ್ಥಿತಿ",
+ "actions": "ಕ್ರಿಯೆಗಳು",
+ "downloadAll": "ಎಲ್ಲಾ",
+ "downloadTar": "Tar",
+ "deleteJob": "ಅಳಿಸಿ",
+ "noFiles": "ಇನ್ನೂ ಯಾವುದೇ ಫೈಲ್ಗಳು ಪರಿವರ್ತನೆಯಾಗಿಲ್ಲ.",
+ "statusPending": "ಬಾಕಿ",
+ "statusCompleted": "ಪೂರ್ಣಗೊಂಡಿದೆ",
+ "statusFailed": "ವಿಫಲವಾಯಿತು"
+ },
+ "history": {
+ "title": "ಫಲಿತಾಂಶಗಳು",
+ "time": "ಸಮಯ",
+ "files": "ಫೈಲ್ಗಳು",
+ "filesDone": "ಮುಗಿದ ಫೈಲ್ಗಳು",
+ "status": "ಸ್ಥಿತಿ",
+ "actions": "ಕ್ರಿಯೆಗಳು",
+ "expandDetails": "ವಿವರಗಳನ್ನು ವಿಸ್ತರಿಸಿ",
+ "detailedFileInfo": "ವಿವರವಾದ ಫೈಲ್ ಮಾಹಿತಿ:",
+ "deleteSelected": "ಆಯ್ಕೆಮಾಡಿದವುಗಳನ್ನು ಅಳಿಸಿ",
+ "selectAll": "ಎಲ್ಲಾ ಆಯ್ಕೆಮಾಡಿ",
+ "confirmDelete": "ನೀವು {count} ಕೆಲಸ(ಗಳನ್ನು) ಅಳಿಸಲು ಖಚಿತವಾಗಿದ್ದೀರಾ? ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+ "deleteSuccess": "{deleted} ಕೆಲಸ(ಗಳು) ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ.",
+ "deleteFailed": "{failed} ಕೆಲಸ(ಗಳನ್ನು) ಅಳಿಸಲು ವಿಫಲವಾಯಿತು.",
+ "deleteError": "ಕೆಲಸಗಳನ್ನು ಅಳಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ },
+ "auth": {
+ "email": "ಇಮೇಲ್",
+ "password": "ಪಾಸ್ವರ್ಡ್",
+ "currentPassword": "ಪ್ರಸ್ತುತ ಪಾಸ್ವರ್ಡ್",
+ "newPassword": "ಪಾಸ್ವರ್ಡ್ (ಬದಲಾಯಿಸದಿದ್ದರೆ ಖಾಲಿ ಬಿಡಿ)",
+ "loginButton": "ಲಾಗಿನ್",
+ "registerButton": "ನೋಂದಣಿ",
+ "updateButton": "ಅಪ್ಡೇಟ್",
+ "createAccount": "ಖಾತೆ ರಚಿಸಿ",
+ "invalidCredentials": "ಅಮಾನ್ಯ ರುಜುವಾತುಗಳು.",
+ "emailInUse": "ಇಮೇಲ್ ಈಗಾಗಲೇ ಬಳಕೆಯಲ್ಲಿದೆ.",
+ "unauthorized": "ಅನಧಿಕೃತ",
+ "cookiesRequired": "ಈ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಲು ಕುಕೀಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು.",
+ "noCookies": "ದೃಢೀಕರಣ ಕುಕೀ ಇಲ್ಲ, ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕುಕೀಗಳನ್ನು ತಡೆಯುತ್ತಿರಬಹುದು."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN ಗೆ ಸುಸ್ವಾಗತ!",
+ "createYourAccount": "ನಿಮ್ಮ ಖಾತೆಯನ್ನು ರಚಿಸಿ",
+ "reportIssues": "ಸಮಸ್ಯೆಗಳನ್ನು ವರದಿ ಮಾಡಿ",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "ಕೆಲಸ ಕಂಡುಬಂದಿಲ್ಲ.",
+ "fileNotFound": "ಫೈಲ್ ಕಂಡುಬಂದಿಲ್ಲ.",
+ "uploadFailed": "ಅಪ್ಲೋಡ್ ವಿಫಲವಾಯಿತು.",
+ "conversionFailed": "ಪರಿವರ್ತನೆ ವಿಫಲವಾಯಿತು.",
+ "serverError": "ಸರ್ವರ್ ದೋಷ."
+ },
+ "upload": {
+ "success": "ಫೈಲ್ಗಳು ಯಶಸ್ವಿಯಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿವೆ.",
+ "dragDrop": "ಫೈಲ್ಗಳನ್ನು ಇಲ್ಲಿ ಬಿಡಿ"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/lo.json b/src/locales/lo.json
new file mode 100644
index 0000000..7cc986b
--- /dev/null
+++ b/src/locales/lo.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ຂັບເຄື່ອນໂດຍ",
+ "version": "v{version}",
+ "loading": "ກຳລັງໂຫລດ...",
+ "error": "ຜິດພາດ",
+ "success": "ສຳເລັດ",
+ "confirm": "ຢືນຢັນ",
+ "cancel": "ຍົກເລີກ",
+ "close": "ປິດ",
+ "save": "ບັນທຶກ",
+ "delete": "ລຶບ",
+ "remove": "ເອົາອອກ",
+ "download": "ດາວໂຫລດ",
+ "upload": "ອັບໂຫລດ",
+ "submit": "ສົ່ງ",
+ "back": "ກັບຄືນ",
+ "next": "ຕໍ່ໄປ",
+ "yes": "ແມ່ນ",
+ "no": "ບໍ່"
+ },
+ "nav": {
+ "history": "ປະຫວັດ",
+ "account": "ບັນຊີ",
+ "logout": "ອອກຈາກລະບົບ",
+ "login": "ເຂົ້າສູ່ລະບົບ",
+ "register": "ລົງທະບຽນ",
+ "language": "ພາສາ"
+ },
+ "convert": {
+ "title": "ແປງ",
+ "titleWithType": "ແປງ .{fileType}",
+ "chooseFile": "ເລືອກໄຟລ໌",
+ "orDragHere": "ຫຼືລາກມາທີ່ນີ້",
+ "searchConversions": "ຄົ້ນຫາການແປງ",
+ "convertTo": "ແປງເປັນ",
+ "convertButton": "ແປງ",
+ "uploading": "ກຳລັງອັບໂຫລດ...",
+ "processing": "ກຳລັງປະມວນຜົນ..."
+ },
+ "results": {
+ "title": "ຜົນລັບ",
+ "convertedFileName": "ຊື່ໄຟລ໌ທີ່ແປງແລ້ວ",
+ "status": "ສະຖານະ",
+ "actions": "ການກະທຳ",
+ "downloadAll": "ທັງໝົດ",
+ "downloadTar": "Tar",
+ "deleteJob": "ລຶບ",
+ "noFiles": "ຍັງບໍ່ມີໄຟລ໌ຖືກແປງ.",
+ "statusPending": "ລໍຖ້າ",
+ "statusCompleted": "ສຳເລັດ",
+ "statusFailed": "ລົ້ມເຫລວ"
+ },
+ "history": {
+ "title": "ຜົນລັບ",
+ "time": "ເວລາ",
+ "files": "ໄຟລ໌",
+ "filesDone": "ໄຟລ໌ສຳເລັດ",
+ "status": "ສະຖານະ",
+ "actions": "ການກະທຳ",
+ "expandDetails": "ຂະຫຍາຍລາຍລະອຽດ",
+ "detailedFileInfo": "ຂໍ້ມູນໄຟລ໌ລະອຽດ:",
+ "deleteSelected": "ລຶບທີ່ເລືອກ",
+ "selectAll": "ເລືອກທັງໝົດ",
+ "confirmDelete": "ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລຶບ {count} ວຽກ? ການກະທຳນີ້ບໍ່ສາມາດຍ້ອນກັບໄດ້.",
+ "deleteSuccess": "ລຶບ {deleted} ວຽກສຳເລັດແລ້ວ.",
+ "deleteFailed": "ລຶບ {failed} ວຽກບໍ່ສຳເລັດ.",
+ "deleteError": "ເກີດຄວາມຜິດພາດໃນການລຶບວຽກ. ກະລຸນາລອງໃໝ່."
+ },
+ "auth": {
+ "email": "ອີເມວ",
+ "password": "ລະຫັດຜ່ານ",
+ "currentPassword": "ລະຫັດຜ່ານປັດຈຸບັນ",
+ "newPassword": "ລະຫັດຜ່ານ (ປ່ອຍວ່າງຖ້າບໍ່ປ່ຽນ)",
+ "loginButton": "ເຂົ້າສູ່ລະບົບ",
+ "registerButton": "ລົງທະບຽນ",
+ "updateButton": "ອັບເດດ",
+ "createAccount": "ສ້າງບັນຊີ",
+ "invalidCredentials": "ຂໍ້ມູນບໍ່ຖືກຕ້ອງ.",
+ "emailInUse": "ອີເມວນີ້ຖືກໃຊ້ແລ້ວ.",
+ "unauthorized": "ບໍ່ໄດ້ຮັບອະນຸຍາດ",
+ "cookiesRequired": "ຕ້ອງເປີດໃຊ້ cookies ເພື່ອໃຊ້ແອັບນີ້.",
+ "noCookies": "ບໍ່ມີ cookie ຢືນຢັນ, ບາງທີບຣາວເຊີຂອງທ່ານອາດປິດ cookies."
+ },
+ "setup": {
+ "welcome": "ຍິນດີຕ້ອນຮັບສູ່ ConvertX-CN!",
+ "createYourAccount": "ສ້າງບັນຊີຂອງທ່ານ",
+ "reportIssues": "ລາຍງານບັນຫາໃນ",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "ບໍ່ພົບວຽກ.",
+ "fileNotFound": "ບໍ່ພົບໄຟລ໌.",
+ "uploadFailed": "ອັບໂຫລດລົ້ມເຫລວ.",
+ "conversionFailed": "ການແປງລົ້ມເຫລວ.",
+ "serverError": "ຜິດພາດເຊີເວີ."
+ },
+ "upload": {
+ "success": "ອັບໂຫລດໄຟລ໌ສຳເລັດແລ້ວ.",
+ "dragDrop": "ວາງໄຟລ໌ທີ່ນີ້"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/lt.json b/src/locales/lt.json
new file mode 100644
index 0000000..91265b6
--- /dev/null
+++ b/src/locales/lt.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Veikia su",
+ "version": "v{version}",
+ "loading": "Įkeliama...",
+ "error": "Klaida",
+ "success": "Sėkmė",
+ "confirm": "Patvirtinti",
+ "cancel": "Atšaukti",
+ "close": "Uždaryti",
+ "save": "Išsaugoti",
+ "delete": "Ištrinti",
+ "remove": "Pašalinti",
+ "download": "Atsisiųsti",
+ "upload": "Įkelti",
+ "submit": "Pateikti",
+ "back": "Atgal",
+ "next": "Kitas",
+ "yes": "Taip",
+ "no": "Ne"
+ },
+ "nav": {
+ "history": "Istorija",
+ "account": "Paskyra",
+ "logout": "Atsijungti",
+ "login": "Prisijungti",
+ "register": "Registruotis",
+ "language": "Kalba"
+ },
+ "convert": {
+ "title": "Konvertuoti",
+ "titleWithType": "Konvertuoti .{fileType}",
+ "chooseFile": "Pasirinkite failą",
+ "orDragHere": "arba vilkite čia",
+ "searchConversions": "Ieškoti konversijų",
+ "convertTo": "Konvertuoti į",
+ "convertButton": "Konvertuoti",
+ "uploading": "Įkeliama...",
+ "processing": "Apdorojama..."
+ },
+ "results": {
+ "title": "Rezultatai",
+ "convertedFileName": "Konvertuoto failo pavadinimas",
+ "status": "Būsena",
+ "actions": "Veiksmai",
+ "downloadAll": "Visi",
+ "downloadTar": "Tar",
+ "deleteJob": "Ištrinti",
+ "noFiles": "Dar nekonvertuota jokių failų.",
+ "statusPending": "Laukiama",
+ "statusCompleted": "Baigta",
+ "statusFailed": "Nepavyko"
+ },
+ "history": {
+ "title": "Rezultatai",
+ "time": "Laikas",
+ "files": "Failai",
+ "filesDone": "Baigti failai",
+ "status": "Būsena",
+ "actions": "Veiksmai",
+ "expandDetails": "Išskleisti detales",
+ "detailedFileInfo": "Išsami failo informacija:",
+ "deleteSelected": "Ištrinti pasirinktus",
+ "selectAll": "Pasirinkti visus",
+ "confirmDelete": "Ar tikrai norite ištrinti {count} užduotį(-is)? Šio veiksmo negalima atšaukti.",
+ "deleteSuccess": "Sėkmingai ištrinta {deleted} užduotis(-ių).",
+ "deleteFailed": "Nepavyko ištrinti {failed} užduoties(-ių).",
+ "deleteError": "Trinant užduotis įvyko klaida. Bandykite dar kartą."
+ },
+ "auth": {
+ "email": "El. paštas",
+ "password": "Slaptažodis",
+ "currentPassword": "Dabartinis slaptažodis",
+ "newPassword": "Slaptažodis (palikite tuščią, jei nepakeistas)",
+ "loginButton": "Prisijungti",
+ "registerButton": "Registruotis",
+ "updateButton": "Atnaujinti",
+ "createAccount": "Sukurti paskyrą",
+ "invalidCredentials": "Neteisingi prisijungimo duomenys.",
+ "emailInUse": "El. paštas jau naudojamas.",
+ "unauthorized": "Neautorizuota",
+ "cookiesRequired": "Norint naudoti šią programą, turi būti įjungti slapukai.",
+ "noCookies": "Nėra autentifikacijos slapuko, galbūt jūsų naršyklė blokuoja slapukus."
+ },
+ "setup": {
+ "welcome": "Sveiki atvykę į ConvertX-CN!",
+ "createYourAccount": "Sukurkite savo paskyrą",
+ "reportIssues": "Praneškite apie problemas",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Užduotis nerasta.",
+ "fileNotFound": "Failas nerastas.",
+ "uploadFailed": "Įkėlimas nepavyko.",
+ "conversionFailed": "Konvertavimas nepavyko.",
+ "serverError": "Serverio klaida."
+ },
+ "upload": {
+ "success": "Failai sėkmingai įkelti.",
+ "dragDrop": "Numeskite failus čia"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/lv.json b/src/locales/lv.json
new file mode 100644
index 0000000..73a2c6b
--- /dev/null
+++ b/src/locales/lv.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Darbina",
+ "version": "v{version}",
+ "loading": "Ielādē...",
+ "error": "Kļūda",
+ "success": "Veiksmīgi",
+ "confirm": "Apstiprināt",
+ "cancel": "Atcelt",
+ "close": "Aizvērt",
+ "save": "Saglabāt",
+ "delete": "Dzēst",
+ "remove": "Noņemt",
+ "download": "Lejupielādēt",
+ "upload": "Augšupielādēt",
+ "submit": "Iesniegt",
+ "back": "Atpakaļ",
+ "next": "Nākamais",
+ "yes": "Jā",
+ "no": "Nē"
+ },
+ "nav": {
+ "history": "Vēsture",
+ "account": "Konts",
+ "logout": "Izrakstīties",
+ "login": "Ierakstīties",
+ "register": "Reģistrēties",
+ "language": "Valoda"
+ },
+ "convert": {
+ "title": "Konvertēt",
+ "titleWithType": "Konvertēt .{fileType}",
+ "chooseFile": "Izvēlieties failu",
+ "orDragHere": "vai velciet to šeit",
+ "searchConversions": "Meklēt konversijas",
+ "convertTo": "Konvertēt uz",
+ "convertButton": "Konvertēt",
+ "uploading": "Augšupielādē...",
+ "processing": "Apstrādā..."
+ },
+ "results": {
+ "title": "Rezultāti",
+ "convertedFileName": "Konvertētā faila nosaukums",
+ "status": "Statuss",
+ "actions": "Darbības",
+ "downloadAll": "Visi",
+ "downloadTar": "Tar",
+ "deleteJob": "Dzēst",
+ "noFiles": "Vēl nav konvertētu failu.",
+ "statusPending": "Gaida",
+ "statusCompleted": "Pabeigts",
+ "statusFailed": "Neizdevās"
+ },
+ "history": {
+ "title": "Rezultāti",
+ "time": "Laiks",
+ "files": "Faili",
+ "filesDone": "Pabeigti faili",
+ "status": "Statuss",
+ "actions": "Darbības",
+ "expandDetails": "Izvērst detaļas",
+ "detailedFileInfo": "Detalizēta faila informācija:",
+ "deleteSelected": "Dzēst atlasītos",
+ "selectAll": "Atlasīt visus",
+ "confirmDelete": "Vai tiešām vēlaties dzēst {count} uzdevumu(-us)? Šo darbību nevar atsaukt.",
+ "deleteSuccess": "Veiksmīgi dzēsti {deleted} uzdevums(-i).",
+ "deleteFailed": "Neizdevās dzēst {failed} uzdevumu(-s).",
+ "deleteError": "Dzēšot uzdevumus, radās kļūda. Lūdzu, mēģiniet vēlreiz."
+ },
+ "auth": {
+ "email": "E-pasts",
+ "password": "Parole",
+ "currentPassword": "Pašreizējā parole",
+ "newPassword": "Parole (atstājiet tukšu, ja nemainās)",
+ "loginButton": "Ierakstīties",
+ "registerButton": "Reģistrēties",
+ "updateButton": "Atjaunināt",
+ "createAccount": "Izveidot kontu",
+ "invalidCredentials": "Nederīgi akreditācijas dati.",
+ "emailInUse": "E-pasts jau tiek lietots.",
+ "unauthorized": "Neautorizēts",
+ "cookiesRequired": "Lai lietotu šo lietotni, jābūt iespējotiem sīkfailiem.",
+ "noCookies": "Nav autentifikācijas sīkfaila, iespējams, jūsu pārlūkprogramma bloķē sīkfailus."
+ },
+ "setup": {
+ "welcome": "Laipni lūdzam ConvertX-CN!",
+ "createYourAccount": "Izveidojiet savu kontu",
+ "reportIssues": "Ziņojiet par jebkādām problēmām",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Uzdevums nav atrasts.",
+ "fileNotFound": "Fails nav atrasts.",
+ "uploadFailed": "Augšupielāde neizdevās.",
+ "conversionFailed": "Konvertēšana neizdevās.",
+ "serverError": "Servera kļūda."
+ },
+ "upload": {
+ "success": "Faili veiksmīgi augšupielādēti.",
+ "dragDrop": "Nometiet failus šeit"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/mk.json b/src/locales/mk.json
new file mode 100644
index 0000000..f200888
--- /dev/null
+++ b/src/locales/mk.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Овозможено од",
+ "version": "v{version}",
+ "loading": "Се вчитува...",
+ "error": "Грешка",
+ "success": "Успех",
+ "confirm": "Потврди",
+ "cancel": "Откажи",
+ "close": "Затвори",
+ "save": "Зачувај",
+ "delete": "Избриши",
+ "remove": "Отстрани",
+ "download": "Преземи",
+ "upload": "Прикачи",
+ "submit": "Испрати",
+ "back": "Назад",
+ "next": "Следно",
+ "yes": "Да",
+ "no": "Не"
+ },
+ "nav": {
+ "history": "Историја",
+ "account": "Сметка",
+ "logout": "Одјава",
+ "login": "Најава",
+ "register": "Регистрација",
+ "language": "Јазик"
+ },
+ "convert": {
+ "title": "Конвертирај",
+ "titleWithType": "Конвертирај .{fileType}",
+ "chooseFile": "Изберете датотека",
+ "orDragHere": "или повлечете ја тука",
+ "searchConversions": "Пребарајте конверзии",
+ "convertTo": "Конвертирај во",
+ "convertButton": "Конвертирај",
+ "uploading": "Се прикачува...",
+ "processing": "Се обработува..."
+ },
+ "results": {
+ "title": "Резултати",
+ "convertedFileName": "Име на конвертирана датотека",
+ "status": "Статус",
+ "actions": "Дејства",
+ "downloadAll": "Сите",
+ "downloadTar": "Tar",
+ "deleteJob": "Избриши",
+ "noFiles": "Сè уште нема конвертирани датотеки.",
+ "statusPending": "Во тек",
+ "statusCompleted": "Завршено",
+ "statusFailed": "Неуспешно"
+ },
+ "history": {
+ "title": "Резултати",
+ "time": "Време",
+ "files": "Датотеки",
+ "filesDone": "Завршени датотеки",
+ "status": "Статус",
+ "actions": "Дејства",
+ "expandDetails": "Прошири детали",
+ "detailedFileInfo": "Детални информации за датотеката:",
+ "deleteSelected": "Избриши избрани",
+ "selectAll": "Избери сите",
+ "confirmDelete": "Дали сте сигурни дека сакате да избришете {count} задача(и)? Оваа акција не може да се поништи.",
+ "deleteSuccess": "Успешно избришани {deleted} задача(и).",
+ "deleteFailed": "Не успеа бришењето на {failed} задача(и).",
+ "deleteError": "Настана грешка при бришење на задачите. Ве молиме обидете се повторно."
+ },
+ "auth": {
+ "email": "Е-пошта",
+ "password": "Лозинка",
+ "currentPassword": "Тековна лозинка",
+ "newPassword": "Лозинка (оставете празно за непроменета)",
+ "loginButton": "Најава",
+ "registerButton": "Регистрирај се",
+ "updateButton": "Ажурирај",
+ "createAccount": "Креирај сметка",
+ "invalidCredentials": "Невалидни акредитиви.",
+ "emailInUse": "Е-поштата е веќе во употреба.",
+ "unauthorized": "Неовластено",
+ "cookiesRequired": "Колачињата треба да бидат овозможени за да ја користите оваа апликација.",
+ "noCookies": "Нема колаче за автентикација, можеби вашиот прелистувач ги блокира колачињата."
+ },
+ "setup": {
+ "welcome": "Добредојдовте во ConvertX-CN!",
+ "createYourAccount": "Креирајте ја вашата сметка",
+ "reportIssues": "Пријавете проблеми на",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Задачата не е пронајдена.",
+ "fileNotFound": "Датотеката не е пронајдена.",
+ "uploadFailed": "Прикачувањето не успеа.",
+ "conversionFailed": "Конверзијата не успеа.",
+ "serverError": "Грешка на серверот."
+ },
+ "upload": {
+ "success": "Датотеките се успешно прикачени.",
+ "dragDrop": "Пуштете датотеки тука"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ml.json b/src/locales/ml.json
new file mode 100644
index 0000000..6188cd6
--- /dev/null
+++ b/src/locales/ml.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "പ്രവർത്തിപ്പിക്കുന്നത്",
+ "version": "v{version}",
+ "loading": "ലോഡ് ചെയ്യുന്നു...",
+ "error": "പിശക്",
+ "success": "വിജയം",
+ "confirm": "സ്ഥിരീകരിക്കുക",
+ "cancel": "റദ്ദാക്കുക",
+ "close": "അടയ്ക്കുക",
+ "save": "സേവ് ചെയ്യുക",
+ "delete": "ഇല്ലാതാക്കുക",
+ "remove": "നീക്കം ചെയ്യുക",
+ "download": "ഡൗൺലോഡ്",
+ "upload": "അപ്ലോഡ്",
+ "submit": "സമർപ്പിക്കുക",
+ "back": "പിന്നോട്ട്",
+ "next": "അടുത്തത്",
+ "yes": "അതെ",
+ "no": "ഇല്ല"
+ },
+ "nav": {
+ "history": "ചരിത്രം",
+ "account": "അക്കൗണ്ട്",
+ "logout": "ലോഗൗട്ട്",
+ "login": "ലോഗിൻ",
+ "register": "രജിസ്റ്റർ",
+ "language": "ഭാഷ"
+ },
+ "convert": {
+ "title": "പരിവർത്തനം ചെയ്യുക",
+ "titleWithType": ".{fileType} പരിവർത്തനം ചെയ്യുക",
+ "chooseFile": "ഒരു ഫയൽ തിരഞ്ഞെടുക്കുക",
+ "orDragHere": "അല്ലെങ്കിൽ ഇവിടെ വലിച്ചിടുക",
+ "searchConversions": "പരിവർത്തനങ്ങൾ തിരയുക",
+ "convertTo": "ഇതിലേക്ക് പരിവർത്തനം ചെയ്യുക",
+ "convertButton": "പരിവർത്തനം ചെയ്യുക",
+ "uploading": "അപ്ലോഡ് ചെയ്യുന്നു...",
+ "processing": "പ്രോസസ്സ് ചെയ്യുന്നു..."
+ },
+ "results": {
+ "title": "ഫലങ്ങൾ",
+ "convertedFileName": "പരിവർത്തനം ചെയ്ത ഫയൽ പേര്",
+ "status": "സ്റ്റാറ്റസ്",
+ "actions": "പ്രവർത്തനങ്ങൾ",
+ "downloadAll": "എല്ലാം",
+ "downloadTar": "Tar",
+ "deleteJob": "ഇല്ലാതാക്കുക",
+ "noFiles": "ഇതുവരെ ഫയലുകളൊന്നും പരിവർത്തനം ചെയ്തിട്ടില്ല.",
+ "statusPending": "തീർപ്പാക്കാത്ത",
+ "statusCompleted": "പൂർത്തിയായി",
+ "statusFailed": "പരാജയപ്പെട്ടു"
+ },
+ "history": {
+ "title": "ഫലങ്ങൾ",
+ "time": "സമയം",
+ "files": "ഫയലുകൾ",
+ "filesDone": "പൂർത്തിയായ ഫയലുകൾ",
+ "status": "സ്റ്റാറ്റസ്",
+ "actions": "പ്രവർത്തനങ്ങൾ",
+ "expandDetails": "വിശദാംശങ്ങൾ വിപുലീകരിക്കുക",
+ "detailedFileInfo": "വിശദമായ ഫയൽ വിവരങ്ങൾ:",
+ "deleteSelected": "തിരഞ്ഞെടുത്തവ ഇല്ലാതാക്കുക",
+ "selectAll": "എല്ലാം തിരഞ്ഞെടുക്കുക",
+ "confirmDelete": "{count} ജോബ്(കൾ) ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ? ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല.",
+ "deleteSuccess": "{deleted} ജോബ്(കൾ) വിജയകരമായി ഇല്ലാതാക്കി.",
+ "deleteFailed": "{failed} ജോബ്(കൾ) ഇല്ലാതാക്കുന്നതിൽ പരാജയപ്പെട്ടു.",
+ "deleteError": "ജോബുകൾ ഇല്ലാതാക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു. വീണ്ടും ശ്രമിക്കുക."
+ },
+ "auth": {
+ "email": "ഇമെയിൽ",
+ "password": "പാസ്വേഡ്",
+ "currentPassword": "നിലവിലെ പാസ്വേഡ്",
+ "newPassword": "പാസ്വേഡ് (മാറ്റമില്ലെങ്കിൽ ശൂന്യമായി വിടുക)",
+ "loginButton": "ലോഗിൻ",
+ "registerButton": "രജിസ്റ്റർ",
+ "updateButton": "അപ്ഡേറ്റ്",
+ "createAccount": "അക്കൗണ്ട് സൃഷ്ടിക്കുക",
+ "invalidCredentials": "അസാധുവായ ക്രെഡൻഷ്യലുകൾ.",
+ "emailInUse": "ഇമെയിൽ ഇതിനകം ഉപയോഗത്തിലാണ്.",
+ "unauthorized": "അനധികൃതം",
+ "cookiesRequired": "ഈ ആപ്പ് ഉപയോഗിക്കാൻ കുക്കികൾ പ്രവർത്തനക്ഷമമാക്കിയിരിക്കണം.",
+ "noCookies": "ഓതൻറിക്കേഷൻ കുക്കി ഇല്ല, നിങ്ങളുടെ ബ്രൗസർ കുക്കികൾ ബ്ലോക്ക് ചെയ്യുന്നുണ്ടാകാം."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN-ലേക്ക് സ്വാഗതം!",
+ "createYourAccount": "നിങ്ങളുടെ അക്കൗണ്ട് സൃഷ്ടിക്കുക",
+ "reportIssues": "പ്രശ്നങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "ജോബ് കണ്ടെത്തിയില്ല.",
+ "fileNotFound": "ഫയൽ കണ്ടെത്തിയില്ല.",
+ "uploadFailed": "അപ്ലോഡ് പരാജയപ്പെട്ടു.",
+ "conversionFailed": "പരിവർത്തനം പരാജയപ്പെട്ടു.",
+ "serverError": "സെർവർ പിശക്."
+ },
+ "upload": {
+ "success": "ഫയലുകൾ വിജയകരമായി അപ്ലോഡ് ചെയ്തു.",
+ "dragDrop": "ഫയലുകൾ ഇവിടെ ഇടുക"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/mr.json b/src/locales/mr.json
new file mode 100644
index 0000000..1d162cb
--- /dev/null
+++ b/src/locales/mr.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "द्वारे समर्थित",
+ "version": "v{version}",
+ "loading": "लोड होत आहे...",
+ "error": "त्रुटी",
+ "success": "यशस्वी",
+ "confirm": "पुष्टी करा",
+ "cancel": "रद्द करा",
+ "close": "बंद करा",
+ "save": "सेव्ह करा",
+ "delete": "हटवा",
+ "remove": "काढून टाका",
+ "download": "डाउनलोड करा",
+ "upload": "अपलोड करा",
+ "submit": "सबमिट करा",
+ "back": "मागे",
+ "next": "पुढे",
+ "yes": "होय",
+ "no": "नाही"
+ },
+ "nav": {
+ "history": "इतिहास",
+ "account": "खाते",
+ "logout": "लॉगआउट",
+ "login": "लॉगिन",
+ "register": "नोंदणी करा",
+ "language": "भाषा"
+ },
+ "convert": {
+ "title": "रूपांतर करा",
+ "titleWithType": ".{fileType} रूपांतर करा",
+ "chooseFile": "फाइल निवडा",
+ "orDragHere": "किंवा येथे ड्रॅग करा",
+ "searchConversions": "रूपांतरणे शोधा",
+ "convertTo": "यात रूपांतर करा",
+ "convertButton": "रूपांतर करा",
+ "uploading": "अपलोड होत आहे...",
+ "processing": "प्रक्रिया होत आहे..."
+ },
+ "results": {
+ "title": "परिणाम",
+ "convertedFileName": "रूपांतरित फाइल नाव",
+ "status": "स्थिती",
+ "actions": "क्रिया",
+ "downloadAll": "सर्व",
+ "downloadTar": "Tar",
+ "deleteJob": "हटवा",
+ "noFiles": "अद्याप कोणत्याही फाइल्स रूपांतरित झालेल्या नाहीत.",
+ "statusPending": "प्रलंबित",
+ "statusCompleted": "पूर्ण",
+ "statusFailed": "अयशस्वी"
+ },
+ "history": {
+ "title": "परिणाम",
+ "time": "वेळ",
+ "files": "फाइल्स",
+ "filesDone": "पूर्ण झालेल्या फाइल्स",
+ "status": "स्थिती",
+ "actions": "क्रिया",
+ "expandDetails": "तपशील विस्तारित करा",
+ "detailedFileInfo": "तपशीलवार फाइल माहिती:",
+ "deleteSelected": "निवडलेले हटवा",
+ "selectAll": "सर्व निवडा",
+ "confirmDelete": "तुम्हाला खात्री आहे की तुम्ही {count} जॉब हटवू इच्छिता? ही क्रिया पूर्ववत करता येणार नाही.",
+ "deleteSuccess": "{deleted} जॉब यशस्वीरित्या हटवले.",
+ "deleteFailed": "{failed} जॉब हटवण्यात अयशस्वी.",
+ "deleteError": "जॉब हटवताना त्रुटी आली. कृपया पुन्हा प्रयत्न करा."
+ },
+ "auth": {
+ "email": "ईमेल",
+ "password": "पासवर्ड",
+ "currentPassword": "सध्याचा पासवर्ड",
+ "newPassword": "पासवर्ड (बदलायचा नसेल तर रिक्त ठेवा)",
+ "loginButton": "लॉगिन",
+ "registerButton": "नोंदणी करा",
+ "updateButton": "अपडेट करा",
+ "createAccount": "खाते तयार करा",
+ "invalidCredentials": "अवैध क्रेडेन्शियल्स.",
+ "emailInUse": "ईमेल आधीच वापरात आहे.",
+ "unauthorized": "अनधिकृत",
+ "cookiesRequired": "हे अॅप वापरण्यासाठी कुकीज सक्षम असाव्यात.",
+ "noCookies": "प्रमाणीकरण कुकी नाही, कदाचित तुमचा ब्राउझर कुकीज ब्लॉक करत आहे."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN मध्ये स्वागत आहे!",
+ "createYourAccount": "तुमचे खाते तयार करा",
+ "reportIssues": "समस्या कळवा",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "जॉब सापडला नाही.",
+ "fileNotFound": "फाइल सापडली नाही.",
+ "uploadFailed": "अपलोड अयशस्वी.",
+ "conversionFailed": "रूपांतर अयशस्वी.",
+ "serverError": "सर्व्हर त्रुटी."
+ },
+ "upload": {
+ "success": "फाइल्स यशस्वीरित्या अपलोड झाल्या.",
+ "dragDrop": "फाइल्स येथे सोडा"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ms.json b/src/locales/ms.json
new file mode 100644
index 0000000..4b1afcf
--- /dev/null
+++ b/src/locales/ms.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Dikuasakan oleh",
+ "version": "v{version}",
+ "loading": "Memuatkan...",
+ "error": "Ralat",
+ "success": "Berjaya",
+ "confirm": "Sahkan",
+ "cancel": "Batal",
+ "close": "Tutup",
+ "save": "Simpan",
+ "delete": "Padam",
+ "remove": "Buang",
+ "download": "Muat turun",
+ "upload": "Muat naik",
+ "submit": "Hantar",
+ "back": "Kembali",
+ "next": "Seterusnya",
+ "yes": "Ya",
+ "no": "Tidak"
+ },
+ "nav": {
+ "history": "Sejarah",
+ "account": "Akaun",
+ "logout": "Log keluar",
+ "login": "Log masuk",
+ "register": "Daftar",
+ "language": "Bahasa"
+ },
+ "convert": {
+ "title": "Tukar",
+ "titleWithType": "Tukar .{fileType}",
+ "chooseFile": "Pilih fail",
+ "orDragHere": "atau seret ke sini",
+ "searchConversions": "Cari penukaran",
+ "convertTo": "Tukar ke",
+ "convertButton": "Tukar",
+ "uploading": "Memuat naik...",
+ "processing": "Memproses..."
+ },
+ "results": {
+ "title": "Keputusan",
+ "convertedFileName": "Nama Fail Ditukar",
+ "status": "Status",
+ "actions": "Tindakan",
+ "downloadAll": "Semua",
+ "downloadTar": "Tar",
+ "deleteJob": "Padam",
+ "noFiles": "Tiada fail ditukar lagi.",
+ "statusPending": "Menunggu",
+ "statusCompleted": "Selesai",
+ "statusFailed": "Gagal"
+ },
+ "history": {
+ "title": "Keputusan",
+ "time": "Masa",
+ "files": "Fail",
+ "filesDone": "Fail Selesai",
+ "status": "Status",
+ "actions": "Tindakan",
+ "expandDetails": "Kembangkan butiran",
+ "detailedFileInfo": "Maklumat Fail Terperinci:",
+ "deleteSelected": "Padam Terpilih",
+ "selectAll": "Pilih semua",
+ "confirmDelete": "Adakah anda pasti mahu memadam {count} kerja? Tindakan ini tidak boleh dibatalkan.",
+ "deleteSuccess": "Berjaya memadam {deleted} kerja.",
+ "deleteFailed": "Gagal memadam {failed} kerja.",
+ "deleteError": "Ralat berlaku semasa memadam kerja. Sila cuba lagi."
+ },
+ "auth": {
+ "email": "E-mel",
+ "password": "Kata Laluan",
+ "currentPassword": "Kata Laluan Semasa",
+ "newPassword": "Kata Laluan (kosongkan jika tidak berubah)",
+ "loginButton": "Log Masuk",
+ "registerButton": "Daftar",
+ "updateButton": "Kemaskini",
+ "createAccount": "Cipta akaun",
+ "invalidCredentials": "Kelayakan tidak sah.",
+ "emailInUse": "E-mel sudah digunakan.",
+ "unauthorized": "Tidak dibenarkan",
+ "cookiesRequired": "Kuki mesti diaktifkan untuk menggunakan aplikasi ini.",
+ "noCookies": "Tiada kuki pengesahan, mungkin pelayar anda menyekat kuki."
+ },
+ "setup": {
+ "welcome": "Selamat datang ke ConvertX-CN!",
+ "createYourAccount": "Cipta akaun anda",
+ "reportIssues": "Laporkan isu di",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Kerja tidak dijumpai.",
+ "fileNotFound": "Fail tidak dijumpai.",
+ "uploadFailed": "Muat naik gagal.",
+ "conversionFailed": "Penukaran gagal.",
+ "serverError": "Ralat pelayan."
+ },
+ "upload": {
+ "success": "Fail berjaya dimuat naik.",
+ "dragDrop": "Lepaskan fail di sini"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/mt.json b/src/locales/mt.json
new file mode 100644
index 0000000..8f679fc
--- /dev/null
+++ b/src/locales/mt.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Mgħammar minn",
+ "version": "v{version}",
+ "loading": "Qed jitgħabba...",
+ "error": "Żball",
+ "success": "Suċċess",
+ "confirm": "Ikkonferma",
+ "cancel": "Ikkanċella",
+ "close": "Agħlaq",
+ "save": "Issejvja",
+ "delete": "Ħassar",
+ "remove": "Neħħi",
+ "download": "Niżżel",
+ "upload": "Tella'",
+ "submit": "Issottometti",
+ "back": "Lura",
+ "next": "Li jmiss",
+ "yes": "Iva",
+ "no": "Le"
+ },
+ "nav": {
+ "history": "Storja",
+ "account": "Kont",
+ "logout": "Oħroġ",
+ "login": "Idħol",
+ "register": "Irreġistra",
+ "language": "Lingwa"
+ },
+ "convert": {
+ "title": "Ikkonverti",
+ "titleWithType": "Ikkonverti .{fileType}",
+ "chooseFile": "Agħżel fajl",
+ "orDragHere": "jew iġbdu hawn",
+ "searchConversions": "Fittex konverżjonijiet",
+ "convertTo": "Ikkonverti għal",
+ "convertButton": "Ikkonverti",
+ "uploading": "Qed jittella'...",
+ "processing": "Qed jiġi pproċessat..."
+ },
+ "results": {
+ "title": "Riżultati",
+ "convertedFileName": "Isem tal-fajl ikkonvertit",
+ "status": "Status",
+ "actions": "Azzjonijiet",
+ "downloadAll": "Kollox",
+ "downloadTar": "Tar",
+ "deleteJob": "Ħassar",
+ "noFiles": "Għad m'hemmx fajls ikkonvertiti.",
+ "statusPending": "Pendenti",
+ "statusCompleted": "Komplut",
+ "statusFailed": "Falla"
+ },
+ "history": {
+ "title": "Riżultati",
+ "time": "Ħin",
+ "files": "Fajls",
+ "filesDone": "Fajls lesti",
+ "status": "Status",
+ "actions": "Azzjonijiet",
+ "expandDetails": "Espandi d-dettalji",
+ "detailedFileInfo": "Informazzjoni dettaljata tal-fajl:",
+ "deleteSelected": "Ħassar l-magħżulin",
+ "selectAll": "Agħżel kollox",
+ "confirmDelete": "Int żgur li trid tħassar {count} xogħol/xogħlijiet? Din l-azzjoni ma tistax tiġi rriversa.",
+ "deleteSuccess": "Tħassru {deleted} xogħol/xogħlijiet b'suċċess.",
+ "deleteFailed": "Falla t-tħassir ta' {failed} xogħol/xogħlijiet.",
+ "deleteError": "Sar żball waqt li kienu qed jitħassru x-xogħlijiet. Jekk jogħġbok erġa' pprova."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Password",
+ "currentPassword": "Password attwali",
+ "newPassword": "Password (ħalli vojt jekk ma jinbidilx)",
+ "loginButton": "Idħol",
+ "registerButton": "Irreġistra",
+ "updateButton": "Aġġorna",
+ "createAccount": "Oħloq kont",
+ "invalidCredentials": "Kredenzjali invalidi.",
+ "emailInUse": "L-email diġà qed tintuża.",
+ "unauthorized": "Mhux awtorizzat",
+ "cookiesRequired": "Il-cookies għandhom ikunu attivati biex tuża din l-applikazzjoni.",
+ "noCookies": "M'hemmx cookie ta' awtentikazzjoni, forsi l-browser tiegħek qed jibblokka l-cookies."
+ },
+ "setup": {
+ "welcome": "Merħba għal ConvertX-CN!",
+ "createYourAccount": "Oħloq il-kont tiegħek",
+ "reportIssues": "Irrapporta kwalunkwe problema fuq",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Xogħol ma nstabx.",
+ "fileNotFound": "Fajl ma nstabx.",
+ "uploadFailed": "It-tella' falla.",
+ "conversionFailed": "Il-konverżjoni falliet.",
+ "serverError": "Żball tas-server."
+ },
+ "upload": {
+ "success": "Il-fajls ittellgħu b'suċċess.",
+ "dragDrop": "Itfa' l-fajls hawn"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/my.json b/src/locales/my.json
new file mode 100644
index 0000000..f8ae925
--- /dev/null
+++ b/src/locales/my.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ဖြင့် လည်ပတ်သည်",
+ "version": "v{version}",
+ "loading": "ဖွင့်နေသည်...",
+ "error": "အမှား",
+ "success": "အောင်မြင်",
+ "confirm": "အတည်ပြု",
+ "cancel": "ပယ်ဖျက်",
+ "close": "ပိတ်",
+ "save": "သိမ်း",
+ "delete": "ဖျက်",
+ "remove": "ဖယ်ရှား",
+ "download": "ဒေါင်းလုဒ်",
+ "upload": "အပ်လုဒ်",
+ "submit": "တင်သွင်း",
+ "back": "နောက်သို့",
+ "next": "ရှေ့သို့",
+ "yes": "ဟုတ်",
+ "no": "မဟုတ်"
+ },
+ "nav": {
+ "history": "မှတ်တမ်း",
+ "account": "အကောင့်",
+ "logout": "ထွက်",
+ "login": "ဝင်",
+ "register": "စာရင်းသွင်း",
+ "language": "ဘာသာစကား"
+ },
+ "convert": {
+ "title": "ပြောင်း",
+ "titleWithType": ".{fileType} ပြောင်း",
+ "chooseFile": "ဖိုင်ရွေး",
+ "orDragHere": "သို့မဟုတ် ဤနေရာသို့ ဆွဲထည့်",
+ "searchConversions": "ပြောင်းလဲမှုများ ရှာ",
+ "convertTo": "သို့ ပြောင်း",
+ "convertButton": "ပြောင်း",
+ "uploading": "အပ်လုဒ်တင်နေသည်...",
+ "processing": "လုပ်ဆောင်နေသည်..."
+ },
+ "results": {
+ "title": "ရလဒ်များ",
+ "convertedFileName": "ပြောင်းပြီး ဖိုင်အမည်",
+ "status": "အခြေအနေ",
+ "actions": "လုပ်ဆောင်ချက်များ",
+ "downloadAll": "အားလုံး",
+ "downloadTar": "Tar",
+ "deleteJob": "ဖျက်",
+ "noFiles": "ဖိုင်များ မပြောင်းရသေးပါ။",
+ "statusPending": "စောင့်ဆိုင်း",
+ "statusCompleted": "ပြီးဆုံး",
+ "statusFailed": "မအောင်မြင်"
+ },
+ "history": {
+ "title": "ရလဒ်များ",
+ "time": "အချိန်",
+ "files": "ဖိုင်များ",
+ "filesDone": "ပြီးဆုံးသော ဖိုင်များ",
+ "status": "အခြေအနေ",
+ "actions": "လုပ်ဆောင်ချက်များ",
+ "expandDetails": "အသေးစိတ် ကြည့်",
+ "detailedFileInfo": "အသေးစိတ် ဖိုင်အချက်အလက်:",
+ "deleteSelected": "ရွေးထားသည်များ ဖျက်",
+ "selectAll": "အားလုံးရွေး",
+ "confirmDelete": "{count} အလုပ်(များ) ဖျက်မည်မှာ သေချာပါသလား? ဤလုပ်ဆောင်ချက်ကို ပြန်ပြင်၍မရပါ။",
+ "deleteSuccess": "{deleted} အလုပ်(များ) အောင်မြင်စွာ ဖျက်ပြီး။",
+ "deleteFailed": "{failed} အလုပ်(များ) ဖျက်ရန် မအောင်မြင်။",
+ "deleteError": "အလုပ်များ ဖျက်ရာတွင် အမှားတစ်ခု ဖြစ်ပွားခဲ့သည်။ ထပ်ကြိုးစားပါ။"
+ },
+ "auth": {
+ "email": "အီးမေးလ်",
+ "password": "စကားဝှက်",
+ "currentPassword": "လက်ရှိ စကားဝှက်",
+ "newPassword": "စကားဝှက် (မပြောင်းလျှင် ကွက်လပ်ထား)",
+ "loginButton": "ဝင်",
+ "registerButton": "စာရင်းသွင်း",
+ "updateButton": "အပ်ဒိတ်",
+ "createAccount": "အကောင့်ဖန်တီး",
+ "invalidCredentials": "မမှန်ကန်သော အထောက်အထား။",
+ "emailInUse": "အီးမေးလ် အသုံးပြုပြီး။",
+ "unauthorized": "ခွင့်ပြုချက်မရှိ",
+ "cookiesRequired": "ဤအက်ပ်ကို သုံးရန် cookies ဖွင့်ထားရမည်။",
+ "noCookies": "auth cookie မရှိပါ၊ သင့်ဘရောက်ဆာက cookies ပိတ်ထားနိုင်သည်။"
+ },
+ "setup": {
+ "welcome": "ConvertX-CN မှ ကြိုဆိုပါသည်!",
+ "createYourAccount": "သင့်အကောင့် ဖန်တီးပါ",
+ "reportIssues": "ပြဿနာများ အကြောင်းကြားပါ",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "အလုပ် မတွေ့ပါ။",
+ "fileNotFound": "ဖိုင် မတွေ့ပါ။",
+ "uploadFailed": "အပ်လုဒ် မအောင်မြင်ပါ။",
+ "conversionFailed": "ပြောင်းလဲခြင်း မအောင်မြင်ပါ။",
+ "serverError": "ဆာဗာ အမှား။"
+ },
+ "upload": {
+ "success": "ဖိုင်များ အောင်မြင်စွာ အပ်လုဒ်တင်ပြီး။",
+ "dragDrop": "ဖိုင်များကို ဤနေရာတွင် ချပါ"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ne.json b/src/locales/ne.json
new file mode 100644
index 0000000..75fcd12
--- /dev/null
+++ b/src/locales/ne.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "द्वारा संचालित",
+ "version": "v{version}",
+ "loading": "लोड हुँदैछ...",
+ "error": "त्रुटि",
+ "success": "सफल",
+ "confirm": "पुष्टि गर्नुहोस्",
+ "cancel": "रद्द गर्नुहोस्",
+ "close": "बन्द गर्नुहोस्",
+ "save": "सेभ गर्नुहोस्",
+ "delete": "मेट्नुहोस्",
+ "remove": "हटाउनुहोस्",
+ "download": "डाउनलोड",
+ "upload": "अपलोड",
+ "submit": "पेश गर्नुहोस्",
+ "back": "पछाडि",
+ "next": "अर्को",
+ "yes": "हो",
+ "no": "होइन"
+ },
+ "nav": {
+ "history": "इतिहास",
+ "account": "खाता",
+ "logout": "लग आउट",
+ "login": "लग इन",
+ "register": "दर्ता गर्नुहोस्",
+ "language": "भाषा"
+ },
+ "convert": {
+ "title": "रूपान्तरण गर्नुहोस्",
+ "titleWithType": ".{fileType} रूपान्तरण गर्नुहोस्",
+ "chooseFile": "फाइल छान्नुहोस्",
+ "orDragHere": "वा यहाँ तान्नुहोस्",
+ "searchConversions": "रूपान्तरणहरू खोज्नुहोस्",
+ "convertTo": "मा रूपान्तरण गर्नुहोस्",
+ "convertButton": "रूपान्तरण गर्नुहोस्",
+ "uploading": "अपलोड हुँदैछ...",
+ "processing": "प्रशोधन हुँदैछ..."
+ },
+ "results": {
+ "title": "परिणामहरू",
+ "convertedFileName": "रूपान्तरित फाइल नाम",
+ "status": "स्थिति",
+ "actions": "कार्यहरू",
+ "downloadAll": "सबै",
+ "downloadTar": "Tar",
+ "deleteJob": "मेट्नुहोस्",
+ "noFiles": "अझै कुनै फाइल रूपान्तरित भएको छैन।",
+ "statusPending": "पर्खिरहेको",
+ "statusCompleted": "पूरा भयो",
+ "statusFailed": "असफल"
+ },
+ "history": {
+ "title": "परिणामहरू",
+ "time": "समय",
+ "files": "फाइलहरू",
+ "filesDone": "पूरा भएका फाइलहरू",
+ "status": "स्थिति",
+ "actions": "कार्यहरू",
+ "expandDetails": "विवरण विस्तार गर्नुहोस्",
+ "detailedFileInfo": "विस्तृत फाइल जानकारी:",
+ "deleteSelected": "चयन गरिएका मेट्नुहोस्",
+ "selectAll": "सबै चयन गर्नुहोस्",
+ "confirmDelete": "के तपाईं {count} कार्य(हरू) मेट्न निश्चित हुनुहुन्छ? यो कार्य पूर्ववत गर्न सकिँदैन।",
+ "deleteSuccess": "{deleted} कार्य(हरू) सफलतापूर्वक मेटियो।",
+ "deleteFailed": "{failed} कार्य(हरू) मेट्न असफल।",
+ "deleteError": "कार्यहरू मेट्दा त्रुटि भयो। कृपया पुन: प्रयास गर्नुहोस्।"
+ },
+ "auth": {
+ "email": "इमेल",
+ "password": "पासवर्ड",
+ "currentPassword": "हालको पासवर्ड",
+ "newPassword": "पासवर्ड (नबदल्ने भए खाली छोड्नुहोस्)",
+ "loginButton": "लग इन",
+ "registerButton": "दर्ता गर्नुहोस्",
+ "updateButton": "अद्यावधिक गर्नुहोस्",
+ "createAccount": "खाता बनाउनुहोस्",
+ "invalidCredentials": "अवैध प्रमाणहरू।",
+ "emailInUse": "इमेल पहिले नै प्रयोगमा छ।",
+ "unauthorized": "अनधिकृत",
+ "cookiesRequired": "यो एप प्रयोग गर्न कुकीहरू सक्षम हुनुपर्छ।",
+ "noCookies": "कुनै प्रमाणीकरण कुकी छैन, सायद तपाईंको ब्राउजरले कुकीहरू रोक्दैछ।"
+ },
+ "setup": {
+ "welcome": "ConvertX-CN मा स्वागत छ!",
+ "createYourAccount": "आफ्नो खाता बनाउनुहोस्",
+ "reportIssues": "समस्याहरू रिपोर्ट गर्नुहोस्",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "कार्य फेला परेन।",
+ "fileNotFound": "फाइल फेला परेन।",
+ "uploadFailed": "अपलोड असफल।",
+ "conversionFailed": "रूपान्तरण असफल।",
+ "serverError": "सर्भर त्रुटि।"
+ },
+ "upload": {
+ "success": "फाइलहरू सफलतापूर्वक अपलोड भए।",
+ "dragDrop": "फाइलहरू यहाँ छोड्नुहोस्"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/nl.json b/src/locales/nl.json
new file mode 100644
index 0000000..8b3af15
--- /dev/null
+++ b/src/locales/nl.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Aangedreven door",
+ "version": "v{version}",
+ "loading": "Laden...",
+ "error": "Fout",
+ "success": "Succes",
+ "confirm": "Bevestigen",
+ "cancel": "Annuleren",
+ "close": "Sluiten",
+ "save": "Opslaan",
+ "delete": "Verwijderen",
+ "remove": "Verwijderen",
+ "download": "Downloaden",
+ "upload": "Uploaden",
+ "submit": "Verzenden",
+ "back": "Terug",
+ "next": "Volgende",
+ "yes": "Ja",
+ "no": "Nee"
+ },
+ "nav": {
+ "history": "Geschiedenis",
+ "account": "Account",
+ "logout": "Uitloggen",
+ "login": "Inloggen",
+ "register": "Registreren",
+ "language": "Taal"
+ },
+ "convert": {
+ "title": "Converteren",
+ "titleWithType": "Converteer .{fileType}",
+ "chooseFile": "Kies een bestand",
+ "orDragHere": "of sleep het hierheen",
+ "searchConversions": "Zoek conversies",
+ "convertTo": "Converteren naar",
+ "convertButton": "Converteren",
+ "uploading": "Uploaden...",
+ "processing": "Verwerken..."
+ },
+ "results": {
+ "title": "Resultaten",
+ "convertedFileName": "Geconverteerde bestandsnaam",
+ "status": "Status",
+ "actions": "Acties",
+ "downloadAll": "Alles",
+ "downloadTar": "Tar",
+ "deleteJob": "Verwijderen",
+ "noFiles": "Nog geen bestanden geconverteerd.",
+ "statusPending": "Wachtend",
+ "statusCompleted": "Voltooid",
+ "statusFailed": "Mislukt"
+ },
+ "history": {
+ "title": "Resultaten",
+ "time": "Tijd",
+ "files": "Bestanden",
+ "filesDone": "Bestanden klaar",
+ "status": "Status",
+ "actions": "Acties",
+ "expandDetails": "Details uitvouwen",
+ "detailedFileInfo": "Gedetailleerde bestandsinformatie:",
+ "deleteSelected": "Geselecteerde verwijderen",
+ "selectAll": "Alles selecteren",
+ "confirmDelete": "Weet u zeker dat u {count} taak/taken wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
+ "deleteSuccess": "{deleted} taak/taken succesvol verwijderd.",
+ "deleteFailed": "Kon {failed} taak/taken niet verwijderen.",
+ "deleteError": "Er is een fout opgetreden bij het verwijderen van taken. Probeer het opnieuw."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Wachtwoord",
+ "currentPassword": "Huidig wachtwoord",
+ "newPassword": "Wachtwoord (leeg laten om niet te wijzigen)",
+ "loginButton": "Inloggen",
+ "registerButton": "Registreren",
+ "updateButton": "Bijwerken",
+ "createAccount": "Account aanmaken",
+ "invalidCredentials": "Ongeldige inloggegevens.",
+ "emailInUse": "E-mail is al in gebruik.",
+ "unauthorized": "Niet geautoriseerd",
+ "cookiesRequired": "Cookies moeten ingeschakeld zijn om deze app te gebruiken.",
+ "noCookies": "Geen authenticatiecookie, misschien blokkeert uw browser cookies."
+ },
+ "setup": {
+ "welcome": "Welkom bij ConvertX-CN!",
+ "createYourAccount": "Maak uw account aan",
+ "reportIssues": "Meld problemen op",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Taak niet gevonden.",
+ "fileNotFound": "Bestand niet gevonden.",
+ "uploadFailed": "Upload mislukt.",
+ "conversionFailed": "Conversie mislukt.",
+ "serverError": "Serverfout."
+ },
+ "upload": {
+ "success": "Bestanden succesvol geüpload.",
+ "dragDrop": "Bestanden hier neerzetten"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/no.json b/src/locales/no.json
new file mode 100644
index 0000000..26e3982
--- /dev/null
+++ b/src/locales/no.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Drevet av",
+ "version": "v{version}",
+ "loading": "Laster...",
+ "error": "Feil",
+ "success": "Suksess",
+ "confirm": "Bekreft",
+ "cancel": "Avbryt",
+ "close": "Lukk",
+ "save": "Lagre",
+ "delete": "Slett",
+ "remove": "Fjern",
+ "download": "Last ned",
+ "upload": "Last opp",
+ "submit": "Send",
+ "back": "Tilbake",
+ "next": "Neste",
+ "yes": "Ja",
+ "no": "Nei"
+ },
+ "nav": {
+ "history": "Historikk",
+ "account": "Konto",
+ "logout": "Logg ut",
+ "login": "Logg inn",
+ "register": "Registrer",
+ "language": "Språk"
+ },
+ "convert": {
+ "title": "Konverter",
+ "titleWithType": "Konverter .{fileType}",
+ "chooseFile": "Velg en fil",
+ "orDragHere": "eller dra den hit",
+ "searchConversions": "Søk etter konverteringer",
+ "convertTo": "Konverter til",
+ "convertButton": "Konverter",
+ "uploading": "Laster opp...",
+ "processing": "Behandler..."
+ },
+ "results": {
+ "title": "Resultater",
+ "convertedFileName": "Konvertert filnavn",
+ "status": "Status",
+ "actions": "Handlinger",
+ "downloadAll": "Alle",
+ "downloadTar": "Tar",
+ "deleteJob": "Slett",
+ "noFiles": "Ingen filer konvertert ennå.",
+ "statusPending": "Venter",
+ "statusCompleted": "Fullført",
+ "statusFailed": "Mislyktes"
+ },
+ "history": {
+ "title": "Resultater",
+ "time": "Tid",
+ "files": "Filer",
+ "filesDone": "Filer fullført",
+ "status": "Status",
+ "actions": "Handlinger",
+ "expandDetails": "Utvid detaljer",
+ "detailedFileInfo": "Detaljert filinformasjon:",
+ "deleteSelected": "Slett valgte",
+ "selectAll": "Velg alle",
+ "confirmDelete": "Er du sikker på at du vil slette {count} jobb(er)? Denne handlingen kan ikke angres.",
+ "deleteSuccess": "Slettet {deleted} jobb(er) vellykket.",
+ "deleteFailed": "Kunne ikke slette {failed} jobb(er).",
+ "deleteError": "Det oppstod en feil under sletting av jobber. Prøv igjen."
+ },
+ "auth": {
+ "email": "E-post",
+ "password": "Passord",
+ "currentPassword": "Nåværende passord",
+ "newPassword": "Passord (la stå tomt for uendret)",
+ "loginButton": "Logg inn",
+ "registerButton": "Registrer",
+ "updateButton": "Oppdater",
+ "createAccount": "Opprett konto",
+ "invalidCredentials": "Ugyldige legitimasjonsopplysninger.",
+ "emailInUse": "E-post er allerede i bruk.",
+ "unauthorized": "Uautorisert",
+ "cookiesRequired": "Informasjonskapsler må være aktivert for å bruke denne appen.",
+ "noCookies": "Ingen autentiseringsinformasjonskapsel, kanskje nettleseren din blokkerer informasjonskapsler."
+ },
+ "setup": {
+ "welcome": "Velkommen til ConvertX-CN!",
+ "createYourAccount": "Opprett kontoen din",
+ "reportIssues": "Rapporter eventuelle problemer på",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Jobb ikke funnet.",
+ "fileNotFound": "Fil ikke funnet.",
+ "uploadFailed": "Opplasting mislyktes.",
+ "conversionFailed": "Konvertering mislyktes.",
+ "serverError": "Serverfeil."
+ },
+ "upload": {
+ "success": "Filer lastet opp vellykket.",
+ "dragDrop": "Slipp filer her"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/pl.json b/src/locales/pl.json
new file mode 100644
index 0000000..51f191b
--- /dev/null
+++ b/src/locales/pl.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Obsługiwane przez",
+ "version": "v{version}",
+ "loading": "Ładowanie...",
+ "error": "Błąd",
+ "success": "Sukces",
+ "confirm": "Potwierdź",
+ "cancel": "Anuluj",
+ "close": "Zamknij",
+ "save": "Zapisz",
+ "delete": "Usuń",
+ "remove": "Usuń",
+ "download": "Pobierz",
+ "upload": "Prześlij",
+ "submit": "Wyślij",
+ "back": "Wstecz",
+ "next": "Dalej",
+ "yes": "Tak",
+ "no": "Nie"
+ },
+ "nav": {
+ "history": "Historia",
+ "account": "Konto",
+ "logout": "Wyloguj",
+ "login": "Zaloguj",
+ "register": "Zarejestruj",
+ "language": "Język"
+ },
+ "convert": {
+ "title": "Konwertuj",
+ "titleWithType": "Konwertuj .{fileType}",
+ "chooseFile": "Wybierz plik",
+ "orDragHere": "lub przeciągnij tutaj",
+ "searchConversions": "Szukaj konwersji",
+ "convertTo": "Konwertuj na",
+ "convertButton": "Konwertuj",
+ "uploading": "Przesyłanie...",
+ "processing": "Przetwarzanie..."
+ },
+ "results": {
+ "title": "Wyniki",
+ "convertedFileName": "Nazwa przekonwertowanego pliku",
+ "status": "Status",
+ "actions": "Akcje",
+ "downloadAll": "Wszystko",
+ "downloadTar": "Tar",
+ "deleteJob": "Usuń",
+ "noFiles": "Brak przekonwertowanych plików.",
+ "statusPending": "Oczekujące",
+ "statusCompleted": "Ukończone",
+ "statusFailed": "Niepowodzenie"
+ },
+ "history": {
+ "title": "Wyniki",
+ "time": "Czas",
+ "files": "Pliki",
+ "filesDone": "Ukończone pliki",
+ "status": "Status",
+ "actions": "Akcje",
+ "expandDetails": "Rozwiń szczegóły",
+ "detailedFileInfo": "Szczegółowe informacje o pliku:",
+ "deleteSelected": "Usuń wybrane",
+ "selectAll": "Zaznacz wszystko",
+ "confirmDelete": "Czy na pewno chcesz usunąć {count} zadanie(ń)? Ta czynność jest nieodwracalna.",
+ "deleteSuccess": "Pomyślnie usunięto {deleted} zadanie(ń).",
+ "deleteFailed": "Nie udało się usunąć {failed} zadania(ń).",
+ "deleteError": "Wystąpił błąd podczas usuwania zadań. Spróbuj ponownie."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Hasło",
+ "currentPassword": "Aktualne hasło",
+ "newPassword": "Hasło (pozostaw puste, aby nie zmieniać)",
+ "loginButton": "Zaloguj",
+ "registerButton": "Zarejestruj",
+ "updateButton": "Aktualizuj",
+ "createAccount": "Utwórz konto",
+ "invalidCredentials": "Nieprawidłowe dane uwierzytelniające.",
+ "emailInUse": "E-mail jest już używany.",
+ "unauthorized": "Brak autoryzacji",
+ "cookiesRequired": "Aby korzystać z tej aplikacji, należy włączyć obsługę plików cookie.",
+ "noCookies": "Brak pliku cookie uwierzytelniania, być może przeglądarka blokuje pliki cookie."
+ },
+ "setup": {
+ "welcome": "Witamy w ConvertX-CN!",
+ "createYourAccount": "Utwórz swoje konto",
+ "reportIssues": "Zgłaszaj problemy na",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Nie znaleziono zadania.",
+ "fileNotFound": "Nie znaleziono pliku.",
+ "uploadFailed": "Przesyłanie nie powiodło się.",
+ "conversionFailed": "Konwersja nie powiodła się.",
+ "serverError": "Błąd serwera."
+ },
+ "upload": {
+ "success": "Pliki zostały pomyślnie przesłane.",
+ "dragDrop": "Upuść pliki tutaj"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/pt.json b/src/locales/pt.json
new file mode 100644
index 0000000..289fc36
--- /dev/null
+++ b/src/locales/pt.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Desenvolvido por",
+ "version": "v{version}",
+ "loading": "Carregando...",
+ "error": "Erro",
+ "success": "Sucesso",
+ "confirm": "Confirmar",
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "save": "Salvar",
+ "delete": "Excluir",
+ "remove": "Remover",
+ "download": "Baixar",
+ "upload": "Enviar",
+ "submit": "Enviar",
+ "back": "Voltar",
+ "next": "Próximo",
+ "yes": "Sim",
+ "no": "Não"
+ },
+ "nav": {
+ "history": "Histórico",
+ "account": "Conta",
+ "logout": "Sair",
+ "login": "Entrar",
+ "register": "Registrar",
+ "language": "Idioma"
+ },
+ "convert": {
+ "title": "Converter",
+ "titleWithType": "Converter .{fileType}",
+ "chooseFile": "Escolha um arquivo",
+ "orDragHere": "ou arraste aqui",
+ "searchConversions": "Pesquisar conversões",
+ "convertTo": "Converter para",
+ "convertButton": "Converter",
+ "uploading": "Enviando...",
+ "processing": "Processando..."
+ },
+ "results": {
+ "title": "Resultados",
+ "convertedFileName": "Nome do arquivo convertido",
+ "status": "Status",
+ "actions": "Ações",
+ "downloadAll": "Tudo",
+ "downloadTar": "Tar",
+ "deleteJob": "Excluir",
+ "noFiles": "Nenhum arquivo convertido ainda.",
+ "statusPending": "Pendente",
+ "statusCompleted": "Concluído",
+ "statusFailed": "Falhou"
+ },
+ "history": {
+ "title": "Resultados",
+ "time": "Hora",
+ "files": "Arquivos",
+ "filesDone": "Arquivos concluídos",
+ "status": "Status",
+ "actions": "Ações",
+ "expandDetails": "Expandir detalhes",
+ "detailedFileInfo": "Informações detalhadas do arquivo:",
+ "deleteSelected": "Excluir selecionados",
+ "selectAll": "Selecionar tudo",
+ "confirmDelete": "Tem certeza de que deseja excluir {count} trabalho(s)? Esta ação não pode ser desfeita.",
+ "deleteSuccess": "{deleted} trabalho(s) excluído(s) com sucesso.",
+ "deleteFailed": "Falha ao excluir {failed} trabalho(s).",
+ "deleteError": "Ocorreu um erro ao excluir os trabalhos. Por favor, tente novamente."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Senha",
+ "currentPassword": "Senha atual",
+ "newPassword": "Senha (deixe em branco para manter)",
+ "loginButton": "Entrar",
+ "registerButton": "Registrar",
+ "updateButton": "Atualizar",
+ "createAccount": "Criar conta",
+ "invalidCredentials": "Credenciais inválidas.",
+ "emailInUse": "E-mail já está em uso.",
+ "unauthorized": "Não autorizado",
+ "cookiesRequired": "Os cookies devem estar habilitados para usar este aplicativo.",
+ "noCookies": "Sem cookie de autenticação, talvez seu navegador esteja bloqueando cookies."
+ },
+ "setup": {
+ "welcome": "Bem-vindo ao ConvertX-CN!",
+ "createYourAccount": "Crie sua conta",
+ "reportIssues": "Reportar problemas no",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Trabalho não encontrado.",
+ "fileNotFound": "Arquivo não encontrado.",
+ "uploadFailed": "Falha no envio.",
+ "conversionFailed": "Falha na conversão.",
+ "serverError": "Erro do servidor."
+ },
+ "upload": {
+ "success": "Arquivos enviados com sucesso.",
+ "dragDrop": "Solte os arquivos aqui"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ro.json b/src/locales/ro.json
new file mode 100644
index 0000000..8a782f6
--- /dev/null
+++ b/src/locales/ro.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Alimentat de",
+ "version": "v{version}",
+ "loading": "Se încarcă...",
+ "error": "Eroare",
+ "success": "Succes",
+ "confirm": "Confirmă",
+ "cancel": "Anulează",
+ "close": "Închide",
+ "save": "Salvează",
+ "delete": "Șterge",
+ "remove": "Elimină",
+ "download": "Descarcă",
+ "upload": "Încarcă",
+ "submit": "Trimite",
+ "back": "Înapoi",
+ "next": "Următorul",
+ "yes": "Da",
+ "no": "Nu"
+ },
+ "nav": {
+ "history": "Istoric",
+ "account": "Cont",
+ "logout": "Deconectare",
+ "login": "Autentificare",
+ "register": "Înregistrare",
+ "language": "Limbă"
+ },
+ "convert": {
+ "title": "Convertire",
+ "titleWithType": "Convertire .{fileType}",
+ "chooseFile": "Alegeți un fișier",
+ "orDragHere": "sau trageți-l aici",
+ "searchConversions": "Căutați conversii",
+ "convertTo": "Convertire în",
+ "convertButton": "Convertire",
+ "uploading": "Se încarcă...",
+ "processing": "Se procesează..."
+ },
+ "results": {
+ "title": "Rezultate",
+ "convertedFileName": "Nume fișier convertit",
+ "status": "Stare",
+ "actions": "Acțiuni",
+ "downloadAll": "Toate",
+ "downloadTar": "Tar",
+ "deleteJob": "Șterge",
+ "noFiles": "Nu au fost convertite fișiere încă.",
+ "statusPending": "În așteptare",
+ "statusCompleted": "Finalizat",
+ "statusFailed": "Eșuat"
+ },
+ "history": {
+ "title": "Rezultate",
+ "time": "Timp",
+ "files": "Fișiere",
+ "filesDone": "Fișiere finalizate",
+ "status": "Stare",
+ "actions": "Acțiuni",
+ "expandDetails": "Extinde detaliile",
+ "detailedFileInfo": "Informații detaliate despre fișier:",
+ "deleteSelected": "Șterge selectate",
+ "selectAll": "Selectează tot",
+ "confirmDelete": "Sunteți sigur că doriți să ștergeți {count} sarcină(i)? Această acțiune nu poate fi anulată.",
+ "deleteSuccess": "Au fost șterse cu succes {deleted} sarcină(i).",
+ "deleteFailed": "Nu s-au putut șterge {failed} sarcină(i).",
+ "deleteError": "A apărut o eroare la ștergerea sarcinilor. Vă rugăm să încercați din nou."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Parolă",
+ "currentPassword": "Parola curentă",
+ "newPassword": "Parolă (lăsați gol pentru neschimbat)",
+ "loginButton": "Autentificare",
+ "registerButton": "Înregistrare",
+ "updateButton": "Actualizare",
+ "createAccount": "Creează cont",
+ "invalidCredentials": "Credențiale invalide.",
+ "emailInUse": "Email-ul este deja utilizat.",
+ "unauthorized": "Neautorizat",
+ "cookiesRequired": "Cookie-urile trebuie să fie activate pentru a utiliza această aplicație.",
+ "noCookies": "Nu există cookie de autentificare, poate browserul dvs. blochează cookie-urile."
+ },
+ "setup": {
+ "welcome": "Bine ați venit la ConvertX-CN!",
+ "createYourAccount": "Creați-vă contul",
+ "reportIssues": "Raportați orice probleme pe",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Sarcina nu a fost găsită.",
+ "fileNotFound": "Fișierul nu a fost găsit.",
+ "uploadFailed": "Încărcarea a eșuat.",
+ "conversionFailed": "Conversia a eșuat.",
+ "serverError": "Eroare de server."
+ },
+ "upload": {
+ "success": "Fișierele au fost încărcate cu succes.",
+ "dragDrop": "Trageți fișierele aici"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ru.json b/src/locales/ru.json
new file mode 100644
index 0000000..c730f99
--- /dev/null
+++ b/src/locales/ru.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Работает на",
+ "version": "v{version}",
+ "loading": "Загрузка...",
+ "error": "Ошибка",
+ "success": "Успешно",
+ "confirm": "Подтвердить",
+ "cancel": "Отмена",
+ "close": "Закрыть",
+ "save": "Сохранить",
+ "delete": "Удалить",
+ "remove": "Убрать",
+ "download": "Скачать",
+ "upload": "Загрузить",
+ "submit": "Отправить",
+ "back": "Назад",
+ "next": "Далее",
+ "yes": "Да",
+ "no": "Нет"
+ },
+ "nav": {
+ "history": "История",
+ "account": "Аккаунт",
+ "logout": "Выйти",
+ "login": "Войти",
+ "register": "Регистрация",
+ "language": "Язык"
+ },
+ "convert": {
+ "title": "Конвертировать",
+ "titleWithType": "Конвертировать .{fileType}",
+ "chooseFile": "Выберите файл",
+ "orDragHere": "или перетащите сюда",
+ "searchConversions": "Поиск конвертаций",
+ "convertTo": "Конвертировать в",
+ "convertButton": "Конвертировать",
+ "uploading": "Загрузка...",
+ "processing": "Обработка..."
+ },
+ "results": {
+ "title": "Результаты",
+ "convertedFileName": "Имя конвертированного файла",
+ "status": "Статус",
+ "actions": "Действия",
+ "downloadAll": "Все",
+ "downloadTar": "Tar",
+ "deleteJob": "Удалить",
+ "noFiles": "Файлы ещё не конвертированы.",
+ "statusPending": "Ожидание",
+ "statusCompleted": "Завершено",
+ "statusFailed": "Ошибка"
+ },
+ "history": {
+ "title": "Результаты",
+ "time": "Время",
+ "files": "Файлы",
+ "filesDone": "Готовые файлы",
+ "status": "Статус",
+ "actions": "Действия",
+ "expandDetails": "Развернуть детали",
+ "detailedFileInfo": "Подробная информация о файле:",
+ "deleteSelected": "Удалить выбранные",
+ "selectAll": "Выбрать все",
+ "confirmDelete": "Вы уверены, что хотите удалить {count} задание(й)? Это действие нельзя отменить.",
+ "deleteSuccess": "Успешно удалено {deleted} задание(й).",
+ "deleteFailed": "Не удалось удалить {failed} задание(й).",
+ "deleteError": "Произошла ошибка при удалении заданий. Пожалуйста, попробуйте снова."
+ },
+ "auth": {
+ "email": "Электронная почта",
+ "password": "Пароль",
+ "currentPassword": "Текущий пароль",
+ "newPassword": "Пароль (оставьте пустым, чтобы не менять)",
+ "loginButton": "Войти",
+ "registerButton": "Зарегистрироваться",
+ "updateButton": "Обновить",
+ "createAccount": "Создать аккаунт",
+ "invalidCredentials": "Неверные учётные данные.",
+ "emailInUse": "Электронная почта уже используется.",
+ "unauthorized": "Не авторизован",
+ "cookiesRequired": "Для использования этого приложения необходимо включить cookies.",
+ "noCookies": "Нет cookie аутентификации, возможно, ваш браузер блокирует cookies."
+ },
+ "setup": {
+ "welcome": "Добро пожаловать в ConvertX-CN!",
+ "createYourAccount": "Создайте свой аккаунт",
+ "reportIssues": "Сообщить о проблемах на",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Задание не найдено.",
+ "fileNotFound": "Файл не найден.",
+ "uploadFailed": "Ошибка загрузки.",
+ "conversionFailed": "Ошибка конвертации.",
+ "serverError": "Ошибка сервера."
+ },
+ "upload": {
+ "success": "Файлы успешно загружены.",
+ "dragDrop": "Перетащите файлы сюда"
+ },
+ "file": {
+ "size": "{size} кБ"
+ }
+}
diff --git a/src/locales/si.json b/src/locales/si.json
new file mode 100644
index 0000000..78ea4ea
--- /dev/null
+++ b/src/locales/si.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "මගින් බලගැන්වේ",
+ "version": "v{version}",
+ "loading": "පූරණය වෙමින්...",
+ "error": "දෝෂය",
+ "success": "සාර්ථකයි",
+ "confirm": "තහවුරු කරන්න",
+ "cancel": "අවලංගු කරන්න",
+ "close": "වසන්න",
+ "save": "සුරකින්න",
+ "delete": "මකන්න",
+ "remove": "ඉවත් කරන්න",
+ "download": "බාගන්න",
+ "upload": "උඩුගත කරන්න",
+ "submit": "ඉදිරිපත් කරන්න",
+ "back": "ආපසු",
+ "next": "ඊළඟ",
+ "yes": "ඔව්",
+ "no": "නැත"
+ },
+ "nav": {
+ "history": "ඉතිහාසය",
+ "account": "ගිණුම",
+ "logout": "පිටවන්න",
+ "login": "පිවිසෙන්න",
+ "register": "ලියාපදිංචි වන්න",
+ "language": "භාෂාව"
+ },
+ "convert": {
+ "title": "පරිවර්තනය",
+ "titleWithType": ".{fileType} පරිවර්තනය",
+ "chooseFile": "ගොනුවක් තෝරන්න",
+ "orDragHere": "හෝ මෙහි ඇද දමන්න",
+ "searchConversions": "පරිවර්තන සොයන්න",
+ "convertTo": "වෙත පරිවර්තනය",
+ "convertButton": "පරිවර්තනය",
+ "uploading": "උඩුගත වෙමින්...",
+ "processing": "සැකසෙමින්..."
+ },
+ "results": {
+ "title": "ප්රතිඵල",
+ "convertedFileName": "පරිවර්තිත ගොනු නාමය",
+ "status": "තත්ත්වය",
+ "actions": "ක්රියා",
+ "downloadAll": "සියල්ල",
+ "downloadTar": "Tar",
+ "deleteJob": "මකන්න",
+ "noFiles": "තවම ගොනු පරිවර්තනය කර නැත.",
+ "statusPending": "අපේක්ෂාවෙන්",
+ "statusCompleted": "සම්පූර්ණයි",
+ "statusFailed": "අසාර්ථකයි"
+ },
+ "history": {
+ "title": "ප්රතිඵල",
+ "time": "වේලාව",
+ "files": "ගොනු",
+ "filesDone": "සම්පූර්ණ ගොනු",
+ "status": "තත්ත්වය",
+ "actions": "ක්රියා",
+ "expandDetails": "විස්තර විහිදන්න",
+ "detailedFileInfo": "සවිස්තර ගොනු තොරතුරු:",
+ "deleteSelected": "තෝරාගත්තවා මකන්න",
+ "selectAll": "සියල්ල තෝරන්න",
+ "confirmDelete": "ඔබට කාර්ය {count}ක් මැකීමට අවශ්ය බව විශ්වාසද? මෙම ක්රියාව අවලංගු කළ නොහැක.",
+ "deleteSuccess": "කාර්ය {deleted}ක් සාර්ථකව මකා දැමිණි.",
+ "deleteFailed": "කාර්ය {failed}ක් මැකීමට අසමත් විය.",
+ "deleteError": "කාර්යයන් මකන විට දෝෂයක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න."
+ },
+ "auth": {
+ "email": "ඊමේල්",
+ "password": "මුරපදය",
+ "currentPassword": "වත්මන් මුරපදය",
+ "newPassword": "මුරපදය (වෙනස් නොකරන්නේ නම් හිස්ව තබන්න)",
+ "loginButton": "පිවිසෙන්න",
+ "registerButton": "ලියාපදිංචි වන්න",
+ "updateButton": "යාවත්කාලීන කරන්න",
+ "createAccount": "ගිණුමක් සාදන්න",
+ "invalidCredentials": "අවලංගු අක්තපත්ර.",
+ "emailInUse": "ඊමේල් දැනටමත් භාවිතයේ පවතී.",
+ "unauthorized": "අනවසර",
+ "cookiesRequired": "මෙම යෙදුම භාවිතා කිරීමට කුකී සක්රීය කළ යුතුය.",
+ "noCookies": "සත්යාපන කුකී නැත, සමහර විට ඔබේ බ්රව්සරය කුකී අවහිර කරයි."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN වෙත සාදරයෙන් පිළිගනිමු!",
+ "createYourAccount": "ඔබේ ගිණුම සාදන්න",
+ "reportIssues": "ගැටලු වාර්තා කරන්න",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "කාර්යය හමු නොවීය.",
+ "fileNotFound": "ගොනුව හමු නොවීය.",
+ "uploadFailed": "උඩුගත කිරීම අසාර්ථක විය.",
+ "conversionFailed": "පරිවර්තනය අසාර්ථක විය.",
+ "serverError": "සේවාදායක දෝෂය."
+ },
+ "upload": {
+ "success": "ගොනු සාර්ථකව උඩුගත කරන ලදී.",
+ "dragDrop": "ගොනු මෙහි දමන්න"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sk.json b/src/locales/sk.json
new file mode 100644
index 0000000..5ee8494
--- /dev/null
+++ b/src/locales/sk.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Poháňané",
+ "version": "v{version}",
+ "loading": "Načítava sa...",
+ "error": "Chyba",
+ "success": "Úspech",
+ "confirm": "Potvrdiť",
+ "cancel": "Zrušiť",
+ "close": "Zavrieť",
+ "save": "Uložiť",
+ "delete": "Vymazať",
+ "remove": "Odstrániť",
+ "download": "Stiahnuť",
+ "upload": "Nahrať",
+ "submit": "Odoslať",
+ "back": "Späť",
+ "next": "Ďalej",
+ "yes": "Áno",
+ "no": "Nie"
+ },
+ "nav": {
+ "history": "História",
+ "account": "Účet",
+ "logout": "Odhlásiť sa",
+ "login": "Prihlásiť sa",
+ "register": "Registrovať",
+ "language": "Jazyk"
+ },
+ "convert": {
+ "title": "Konvertovať",
+ "titleWithType": "Konvertovať .{fileType}",
+ "chooseFile": "Vyberte súbor",
+ "orDragHere": "alebo ho sem potiahnite",
+ "searchConversions": "Hľadať konverzie",
+ "convertTo": "Konvertovať na",
+ "convertButton": "Konvertovať",
+ "uploading": "Nahráva sa...",
+ "processing": "Spracováva sa..."
+ },
+ "results": {
+ "title": "Výsledky",
+ "convertedFileName": "Názov konvertovaného súboru",
+ "status": "Stav",
+ "actions": "Akcie",
+ "downloadAll": "Všetky",
+ "downloadTar": "Tar",
+ "deleteJob": "Vymazať",
+ "noFiles": "Zatiaľ neboli konvertované žiadne súbory.",
+ "statusPending": "Čaká sa",
+ "statusCompleted": "Dokončené",
+ "statusFailed": "Zlyhalo"
+ },
+ "history": {
+ "title": "Výsledky",
+ "time": "Čas",
+ "files": "Súbory",
+ "filesDone": "Dokončené súbory",
+ "status": "Stav",
+ "actions": "Akcie",
+ "expandDetails": "Rozbaliť detaily",
+ "detailedFileInfo": "Podrobné informácie o súbore:",
+ "deleteSelected": "Vymazať vybrané",
+ "selectAll": "Vybrať všetko",
+ "confirmDelete": "Ste si istí, že chcete vymazať {count} úlohu(y)? Túto akciu nie je možné vrátiť späť.",
+ "deleteSuccess": "Úspešne vymazaných {deleted} úloh.",
+ "deleteFailed": "Nepodarilo sa vymazať {failed} úloh.",
+ "deleteError": "Pri mazaní úloh došlo k chybe. Skúste to prosím znova."
+ },
+ "auth": {
+ "email": "E-mail",
+ "password": "Heslo",
+ "currentPassword": "Aktuálne heslo",
+ "newPassword": "Heslo (nechajte prázdne pre nezmenené)",
+ "loginButton": "Prihlásiť sa",
+ "registerButton": "Registrovať",
+ "updateButton": "Aktualizovať",
+ "createAccount": "Vytvoriť účet",
+ "invalidCredentials": "Neplatné prihlasovacie údaje.",
+ "emailInUse": "E-mail sa už používa.",
+ "unauthorized": "Neautorizované",
+ "cookiesRequired": "Na používanie tejto aplikácie musia byť povolené súbory cookie.",
+ "noCookies": "Žiadny autentifikačný súbor cookie, možno váš prehliadač blokuje súbory cookie."
+ },
+ "setup": {
+ "welcome": "Vitajte v ConvertX-CN!",
+ "createYourAccount": "Vytvorte si svoj účet",
+ "reportIssues": "Nahláste akékoľvek problémy na",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Úloha sa nenašla.",
+ "fileNotFound": "Súbor sa nenašiel.",
+ "uploadFailed": "Nahrávanie zlyhalo.",
+ "conversionFailed": "Konverzia zlyhala.",
+ "serverError": "Chyba servera."
+ },
+ "upload": {
+ "success": "Súbory boli úspešne nahrané.",
+ "dragDrop": "Sem presuňte súbory"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sl.json b/src/locales/sl.json
new file mode 100644
index 0000000..cb817b7
--- /dev/null
+++ b/src/locales/sl.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Poganja",
+ "version": "v{version}",
+ "loading": "Nalaganje...",
+ "error": "Napaka",
+ "success": "Uspeh",
+ "confirm": "Potrdi",
+ "cancel": "Prekliči",
+ "close": "Zapri",
+ "save": "Shrani",
+ "delete": "Izbriši",
+ "remove": "Odstrani",
+ "download": "Prenesi",
+ "upload": "Naloži",
+ "submit": "Pošlji",
+ "back": "Nazaj",
+ "next": "Naprej",
+ "yes": "Da",
+ "no": "Ne"
+ },
+ "nav": {
+ "history": "Zgodovina",
+ "account": "Račun",
+ "logout": "Odjava",
+ "login": "Prijava",
+ "register": "Registracija",
+ "language": "Jezik"
+ },
+ "convert": {
+ "title": "Pretvori",
+ "titleWithType": "Pretvori .{fileType}",
+ "chooseFile": "Izberite datoteko",
+ "orDragHere": "ali jo povlecite sem",
+ "searchConversions": "Išči pretvorbe",
+ "convertTo": "Pretvori v",
+ "convertButton": "Pretvori",
+ "uploading": "Nalaganje...",
+ "processing": "Obdelava..."
+ },
+ "results": {
+ "title": "Rezultati",
+ "convertedFileName": "Ime pretvorjene datoteke",
+ "status": "Stanje",
+ "actions": "Dejanja",
+ "downloadAll": "Vse",
+ "downloadTar": "Tar",
+ "deleteJob": "Izbriši",
+ "noFiles": "Še ni pretvorjenih datotek.",
+ "statusPending": "V čakanju",
+ "statusCompleted": "Končano",
+ "statusFailed": "Neuspešno"
+ },
+ "history": {
+ "title": "Rezultati",
+ "time": "Čas",
+ "files": "Datoteke",
+ "filesDone": "Končane datoteke",
+ "status": "Stanje",
+ "actions": "Dejanja",
+ "expandDetails": "Razširi podrobnosti",
+ "detailedFileInfo": "Podrobne informacije o datoteki:",
+ "deleteSelected": "Izbriši izbrano",
+ "selectAll": "Izberi vse",
+ "confirmDelete": "Ali ste prepričani, da želite izbrisati {count} opravilo(a)? Tega dejanja ni mogoče razveljaviti.",
+ "deleteSuccess": "Uspešno izbrisanih {deleted} opravil.",
+ "deleteFailed": "Ni uspelo izbrisati {failed} opravil.",
+ "deleteError": "Pri brisanju opravil je prišlo do napake. Prosimo, poskusite znova."
+ },
+ "auth": {
+ "email": "E-pošta",
+ "password": "Geslo",
+ "currentPassword": "Trenutno geslo",
+ "newPassword": "Geslo (pustite prazno za nespremenjeno)",
+ "loginButton": "Prijava",
+ "registerButton": "Registracija",
+ "updateButton": "Posodobi",
+ "createAccount": "Ustvari račun",
+ "invalidCredentials": "Neveljavne poverilnice.",
+ "emailInUse": "E-pošta je že v uporabi.",
+ "unauthorized": "Nepooblaščeno",
+ "cookiesRequired": "Za uporabo te aplikacije morajo biti piškotki omogočeni.",
+ "noCookies": "Ni piškotka za preverjanje pristnosti, morda vaš brskalnik blokira piškotke."
+ },
+ "setup": {
+ "welcome": "Dobrodošli v ConvertX-CN!",
+ "createYourAccount": "Ustvarite svoj račun",
+ "reportIssues": "Prijavite kakršnekoli težave na",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Opravilo ni bilo najdeno.",
+ "fileNotFound": "Datoteka ni bila najdena.",
+ "uploadFailed": "Nalaganje ni uspelo.",
+ "conversionFailed": "Pretvorba ni uspela.",
+ "serverError": "Napaka strežnika."
+ },
+ "upload": {
+ "success": "Datoteke so bile uspešno naložene.",
+ "dragDrop": "Spustite datoteke tukaj"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sq.json b/src/locales/sq.json
new file mode 100644
index 0000000..226e7d2
--- /dev/null
+++ b/src/locales/sq.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Mundësuar nga",
+ "version": "v{version}",
+ "loading": "Duke ngarkuar...",
+ "error": "Gabim",
+ "success": "Sukses",
+ "confirm": "Konfirmo",
+ "cancel": "Anulo",
+ "close": "Mbyll",
+ "save": "Ruaj",
+ "delete": "Fshi",
+ "remove": "Hiq",
+ "download": "Shkarko",
+ "upload": "Ngarko",
+ "submit": "Dërgo",
+ "back": "Prapa",
+ "next": "Tjetër",
+ "yes": "Po",
+ "no": "Jo"
+ },
+ "nav": {
+ "history": "Historia",
+ "account": "Llogaria",
+ "logout": "Dilni",
+ "login": "Hyni",
+ "register": "Regjistrohu",
+ "language": "Gjuha"
+ },
+ "convert": {
+ "title": "Konverto",
+ "titleWithType": "Konverto .{fileType}",
+ "chooseFile": "Zgjidhni një skedar",
+ "orDragHere": "ose tërhiqeni këtu",
+ "searchConversions": "Kërkoni konvertime",
+ "convertTo": "Konverto në",
+ "convertButton": "Konverto",
+ "uploading": "Duke ngarkuar...",
+ "processing": "Duke përpunuar..."
+ },
+ "results": {
+ "title": "Rezultatet",
+ "convertedFileName": "Emri i skedarit të konvertuar",
+ "status": "Statusi",
+ "actions": "Veprimet",
+ "downloadAll": "Të gjitha",
+ "downloadTar": "Tar",
+ "deleteJob": "Fshi",
+ "noFiles": "Ende nuk ka skedarë të konvertuar.",
+ "statusPending": "Në pritje",
+ "statusCompleted": "Përfunduar",
+ "statusFailed": "Dështoi"
+ },
+ "history": {
+ "title": "Rezultatet",
+ "time": "Koha",
+ "files": "Skedarët",
+ "filesDone": "Skedarët e përfunduar",
+ "status": "Statusi",
+ "actions": "Veprimet",
+ "expandDetails": "Zgjero detajet",
+ "detailedFileInfo": "Informacion i detajuar i skedarit:",
+ "deleteSelected": "Fshi të zgjedhurit",
+ "selectAll": "Zgjidh të gjitha",
+ "confirmDelete": "Jeni i sigurt që dëshironi të fshini {count} punë? Ky veprim nuk mund të zhbëhet.",
+ "deleteSuccess": "U fshinë me sukses {deleted} punë.",
+ "deleteFailed": "Dështoi fshirja e {failed} punëve.",
+ "deleteError": "Ndodhi një gabim gjatë fshirjes së punëve. Ju lutemi provoni përsëri."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Fjalëkalimi",
+ "currentPassword": "Fjalëkalimi aktual",
+ "newPassword": "Fjalëkalimi (lëreni bosh nëse nuk ndryshon)",
+ "loginButton": "Hyni",
+ "registerButton": "Regjistrohu",
+ "updateButton": "Përditëso",
+ "createAccount": "Krijo llogari",
+ "invalidCredentials": "Kredencialet e pavlefshme.",
+ "emailInUse": "Emaili është tashmë në përdorim.",
+ "unauthorized": "I paautorizuar",
+ "cookiesRequired": "Cookies duhet të jenë të aktivizuara për të përdorur këtë aplikacion.",
+ "noCookies": "Nuk ka cookie autentifikimi, ndoshta shfletuesi juaj po bllokon cookies."
+ },
+ "setup": {
+ "welcome": "Mirë se vini në ConvertX-CN!",
+ "createYourAccount": "Krijoni llogarinë tuaj",
+ "reportIssues": "Raportoni çdo problem në",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Puna nuk u gjet.",
+ "fileNotFound": "Skedari nuk u gjet.",
+ "uploadFailed": "Ngarkimi dështoi.",
+ "conversionFailed": "Konvertimi dështoi.",
+ "serverError": "Gabim i serverit."
+ },
+ "upload": {
+ "success": "Skedarët u ngarkuan me sukses.",
+ "dragDrop": "Lëshoni skedarët këtu"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sr.json b/src/locales/sr.json
new file mode 100644
index 0000000..facb64c
--- /dev/null
+++ b/src/locales/sr.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Покреће",
+ "version": "v{version}",
+ "loading": "Учитавање...",
+ "error": "Грешка",
+ "success": "Успех",
+ "confirm": "Потврди",
+ "cancel": "Откажи",
+ "close": "Затвори",
+ "save": "Сачувај",
+ "delete": "Обриши",
+ "remove": "Уклони",
+ "download": "Преузми",
+ "upload": "Отпреми",
+ "submit": "Пошаљи",
+ "back": "Назад",
+ "next": "Следеће",
+ "yes": "Да",
+ "no": "Не"
+ },
+ "nav": {
+ "history": "Историја",
+ "account": "Налог",
+ "logout": "Одјава",
+ "login": "Пријава",
+ "register": "Регистрација",
+ "language": "Језик"
+ },
+ "convert": {
+ "title": "Конвертуј",
+ "titleWithType": "Конвертуј .{fileType}",
+ "chooseFile": "Изаберите датотеку",
+ "orDragHere": "или је превуците овде",
+ "searchConversions": "Претражи конверзије",
+ "convertTo": "Конвертуј у",
+ "convertButton": "Конвертуј",
+ "uploading": "Отпремање...",
+ "processing": "Обрада..."
+ },
+ "results": {
+ "title": "Резултати",
+ "convertedFileName": "Име конвертоване датотеке",
+ "status": "Статус",
+ "actions": "Радње",
+ "downloadAll": "Све",
+ "downloadTar": "Tar",
+ "deleteJob": "Обриши",
+ "noFiles": "Још нема конвертованих датотека.",
+ "statusPending": "На чекању",
+ "statusCompleted": "Завршено",
+ "statusFailed": "Неуспешно"
+ },
+ "history": {
+ "title": "Резултати",
+ "time": "Време",
+ "files": "Датотеке",
+ "filesDone": "Завршене датотеке",
+ "status": "Статус",
+ "actions": "Радње",
+ "expandDetails": "Прошири детаље",
+ "detailedFileInfo": "Детаљне информације о датотеци:",
+ "deleteSelected": "Обриши изабрано",
+ "selectAll": "Изабери све",
+ "confirmDelete": "Да ли сте сигурни да желите да обришете {count} посао(ва)? Ова радња се не може поништити.",
+ "deleteSuccess": "Успешно обрисано {deleted} посао(ва).",
+ "deleteFailed": "Неуспешно брисање {failed} посао(ва).",
+ "deleteError": "Дошло је до грешке при брисању послова. Покушајте поново."
+ },
+ "auth": {
+ "email": "Е-пошта",
+ "password": "Лозинка",
+ "currentPassword": "Тренутна лозинка",
+ "newPassword": "Лозинка (оставите празно за непромењено)",
+ "loginButton": "Пријави се",
+ "registerButton": "Региструј се",
+ "updateButton": "Ажурирај",
+ "createAccount": "Направи налог",
+ "invalidCredentials": "Неважећи акредитиви.",
+ "emailInUse": "Е-пошта је већ у употреби.",
+ "unauthorized": "Неовлашћено",
+ "cookiesRequired": "Колачићи треба да буду омогућени за коришћење ове апликације.",
+ "noCookies": "Нема колачића за аутентификацију, можда ваш прегледач блокира колачиће."
+ },
+ "setup": {
+ "welcome": "Добродошли у ConvertX-CN!",
+ "createYourAccount": "Направите свој налог",
+ "reportIssues": "Пријавите проблеме на",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Посао није пронађен.",
+ "fileNotFound": "Датотека није пронађена.",
+ "uploadFailed": "Отпремање није успело.",
+ "conversionFailed": "Конверзија није успела.",
+ "serverError": "Грешка сервера."
+ },
+ "upload": {
+ "success": "Датотеке су успешно отпремљене.",
+ "dragDrop": "Превуците датотеке овде"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sv.json b/src/locales/sv.json
new file mode 100644
index 0000000..370ef1d
--- /dev/null
+++ b/src/locales/sv.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Drivs av",
+ "version": "v{version}",
+ "loading": "Laddar...",
+ "error": "Fel",
+ "success": "Lyckades",
+ "confirm": "Bekräfta",
+ "cancel": "Avbryt",
+ "close": "Stäng",
+ "save": "Spara",
+ "delete": "Ta bort",
+ "remove": "Ta bort",
+ "download": "Ladda ner",
+ "upload": "Ladda upp",
+ "submit": "Skicka",
+ "back": "Tillbaka",
+ "next": "Nästa",
+ "yes": "Ja",
+ "no": "Nej"
+ },
+ "nav": {
+ "history": "Historik",
+ "account": "Konto",
+ "logout": "Logga ut",
+ "login": "Logga in",
+ "register": "Registrera",
+ "language": "Språk"
+ },
+ "convert": {
+ "title": "Konvertera",
+ "titleWithType": "Konvertera .{fileType}",
+ "chooseFile": "Välj en fil",
+ "orDragHere": "eller dra den hit",
+ "searchConversions": "Sök konverteringar",
+ "convertTo": "Konvertera till",
+ "convertButton": "Konvertera",
+ "uploading": "Laddar upp...",
+ "processing": "Bearbetar..."
+ },
+ "results": {
+ "title": "Resultat",
+ "convertedFileName": "Konverterat filnamn",
+ "status": "Status",
+ "actions": "Åtgärder",
+ "downloadAll": "Alla",
+ "downloadTar": "Tar",
+ "deleteJob": "Ta bort",
+ "noFiles": "Inga filer konverterade än.",
+ "statusPending": "Väntar",
+ "statusCompleted": "Slutförd",
+ "statusFailed": "Misslyckades"
+ },
+ "history": {
+ "title": "Resultat",
+ "time": "Tid",
+ "files": "Filer",
+ "filesDone": "Färdiga filer",
+ "status": "Status",
+ "actions": "Åtgärder",
+ "expandDetails": "Expandera detaljer",
+ "detailedFileInfo": "Detaljerad filinformation:",
+ "deleteSelected": "Ta bort valda",
+ "selectAll": "Välj alla",
+ "confirmDelete": "Är du säker på att du vill ta bort {count} jobb? Denna åtgärd kan inte ångras.",
+ "deleteSuccess": "Lyckades ta bort {deleted} jobb.",
+ "deleteFailed": "Kunde inte ta bort {failed} jobb.",
+ "deleteError": "Ett fel uppstod när jobb skulle tas bort. Försök igen."
+ },
+ "auth": {
+ "email": "E-post",
+ "password": "Lösenord",
+ "currentPassword": "Nuvarande lösenord",
+ "newPassword": "Lösenord (lämna tomt för att inte ändra)",
+ "loginButton": "Logga in",
+ "registerButton": "Registrera",
+ "updateButton": "Uppdatera",
+ "createAccount": "Skapa konto",
+ "invalidCredentials": "Ogiltiga inloggningsuppgifter.",
+ "emailInUse": "E-postadressen används redan.",
+ "unauthorized": "Ej auktoriserad",
+ "cookiesRequired": "Cookies måste vara aktiverade för att använda denna app.",
+ "noCookies": "Ingen autentiseringscookie, kanske din webbläsare blockerar cookies."
+ },
+ "setup": {
+ "welcome": "Välkommen till ConvertX-CN!",
+ "createYourAccount": "Skapa ditt konto",
+ "reportIssues": "Rapportera problem på",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Jobb hittades inte.",
+ "fileNotFound": "Fil hittades inte.",
+ "uploadFailed": "Uppladdning misslyckades.",
+ "conversionFailed": "Konvertering misslyckades.",
+ "serverError": "Serverfel."
+ },
+ "upload": {
+ "success": "Filerna laddades upp framgångsrikt.",
+ "dragDrop": "Släpp filer här"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/sw.json b/src/locales/sw.json
new file mode 100644
index 0000000..1d4d4eb
--- /dev/null
+++ b/src/locales/sw.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Inayoendeshwa na",
+ "version": "v{version}",
+ "loading": "Inapakia...",
+ "error": "Hitilafu",
+ "success": "Imefanikiwa",
+ "confirm": "Thibitisha",
+ "cancel": "Ghairi",
+ "close": "Funga",
+ "save": "Hifadhi",
+ "delete": "Futa",
+ "remove": "Ondoa",
+ "download": "Pakua",
+ "upload": "Pakia",
+ "submit": "Wasilisha",
+ "back": "Rudi",
+ "next": "Inayofuata",
+ "yes": "Ndiyo",
+ "no": "Hapana"
+ },
+ "nav": {
+ "history": "Historia",
+ "account": "Akaunti",
+ "logout": "Toka",
+ "login": "Ingia",
+ "register": "Jisajili",
+ "language": "Lugha"
+ },
+ "convert": {
+ "title": "Badilisha",
+ "titleWithType": "Badilisha .{fileType}",
+ "chooseFile": "Chagua faili",
+ "orDragHere": "au iburute hapa",
+ "searchConversions": "Tafuta ubadilishaji",
+ "convertTo": "Badilisha kuwa",
+ "convertButton": "Badilisha",
+ "uploading": "Inapakia...",
+ "processing": "Inachakata..."
+ },
+ "results": {
+ "title": "Matokeo",
+ "convertedFileName": "Jina la faili iliyobadilishwa",
+ "status": "Hali",
+ "actions": "Vitendo",
+ "downloadAll": "Zote",
+ "downloadTar": "Tar",
+ "deleteJob": "Futa",
+ "noFiles": "Hakuna faili zilizobadilishwa bado.",
+ "statusPending": "Inasubiri",
+ "statusCompleted": "Imekamilika",
+ "statusFailed": "Imeshindwa"
+ },
+ "history": {
+ "title": "Matokeo",
+ "time": "Wakati",
+ "files": "Faili",
+ "filesDone": "Faili zilizokamilika",
+ "status": "Hali",
+ "actions": "Vitendo",
+ "expandDetails": "Panua maelezo",
+ "detailedFileInfo": "Maelezo ya kina ya faili:",
+ "deleteSelected": "Futa zilizochaguliwa",
+ "selectAll": "Chagua zote",
+ "confirmDelete": "Una uhakika unataka kufuta kazi {count}? Kitendo hiki hakiwezi kutenduliwa.",
+ "deleteSuccess": "Kazi {deleted} zimefutwa kwa mafanikio.",
+ "deleteFailed": "Imeshindwa kufuta kazi {failed}.",
+ "deleteError": "Hitilafu imetokea wakati wa kufuta kazi. Tafadhali jaribu tena."
+ },
+ "auth": {
+ "email": "Barua pepe",
+ "password": "Nenosiri",
+ "currentPassword": "Nenosiri la sasa",
+ "newPassword": "Nenosiri (acha tupu ikiwa halijabadilishwa)",
+ "loginButton": "Ingia",
+ "registerButton": "Jisajili",
+ "updateButton": "Sasisha",
+ "createAccount": "Unda akaunti",
+ "invalidCredentials": "Vitambulisho batili.",
+ "emailInUse": "Barua pepe tayari inatumika.",
+ "unauthorized": "Haujaidhinishwa",
+ "cookiesRequired": "Kuki zinapaswa kuwezeshwa kutumia programu hii.",
+ "noCookies": "Hakuna kuki ya uthibitisho, labda kivinjari chako kinazuia kuki."
+ },
+ "setup": {
+ "welcome": "Karibu kwenye ConvertX-CN!",
+ "createYourAccount": "Unda akaunti yako",
+ "reportIssues": "Ripoti matatizo yoyote kwenye",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Kazi haijapatikana.",
+ "fileNotFound": "Faili haijapatikana.",
+ "uploadFailed": "Upakiaji umeshindwa.",
+ "conversionFailed": "Ubadilishaji umeshindwa.",
+ "serverError": "Hitilafu ya seva."
+ },
+ "upload": {
+ "success": "Faili zimepakiwa kwa mafanikio.",
+ "dragDrop": "Dondosha faili hapa"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/ta.json b/src/locales/ta.json
new file mode 100644
index 0000000..b383056
--- /dev/null
+++ b/src/locales/ta.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "மூலம் இயக்கப்படுகிறது",
+ "version": "v{version}",
+ "loading": "ஏற்றுகிறது...",
+ "error": "பிழை",
+ "success": "வெற்றி",
+ "confirm": "உறுதிப்படுத்து",
+ "cancel": "ரத்து செய்",
+ "close": "மூடு",
+ "save": "சேமி",
+ "delete": "நீக்கு",
+ "remove": "அகற்று",
+ "download": "பதிவிறக்கு",
+ "upload": "பதிவேற்று",
+ "submit": "சமர்ப்பி",
+ "back": "பின்",
+ "next": "அடுத்து",
+ "yes": "ஆம்",
+ "no": "இல்லை"
+ },
+ "nav": {
+ "history": "வரலாறு",
+ "account": "கணக்கு",
+ "logout": "வெளியேறு",
+ "login": "உள்நுழை",
+ "register": "பதிவு செய்",
+ "language": "மொழி"
+ },
+ "convert": {
+ "title": "மாற்று",
+ "titleWithType": ".{fileType} மாற்று",
+ "chooseFile": "ஒரு கோப்பைத் தேர்ந்தெடுக்கவும்",
+ "orDragHere": "அல்லது இங்கே இழுக்கவும்",
+ "searchConversions": "மாற்றங்களைத் தேடு",
+ "convertTo": "இதற்கு மாற்று",
+ "convertButton": "மாற்று",
+ "uploading": "பதிவேற்றுகிறது...",
+ "processing": "செயலாக்குகிறது..."
+ },
+ "results": {
+ "title": "முடிவுகள்",
+ "convertedFileName": "மாற்றப்பட்ட கோப்பு பெயர்",
+ "status": "நிலை",
+ "actions": "செயல்கள்",
+ "downloadAll": "அனைத்தும்",
+ "downloadTar": "Tar",
+ "deleteJob": "நீக்கு",
+ "noFiles": "இன்னும் கோப்புகள் மாற்றப்படவில்லை.",
+ "statusPending": "நிலுவையில்",
+ "statusCompleted": "முடிந்தது",
+ "statusFailed": "தோல்வி"
+ },
+ "history": {
+ "title": "முடிவுகள்",
+ "time": "நேரம்",
+ "files": "கோப்புகள்",
+ "filesDone": "முடிந்த கோப்புகள்",
+ "status": "நிலை",
+ "actions": "செயல்கள்",
+ "expandDetails": "விவரங்களை விரிவாக்கு",
+ "detailedFileInfo": "விரிவான கோப்பு தகவல்:",
+ "deleteSelected": "தேர்ந்தெடுத்ததை நீக்கு",
+ "selectAll": "அனைத்தையும் தேர்ந்தெடு",
+ "confirmDelete": "{count} பணி(களை) நீக்க விரும்புகிறீர்களா? இந்த செயலை மாற்ற முடியாது.",
+ "deleteSuccess": "{deleted} பணி(கள்) வெற்றிகரமாக நீக்கப்பட்டன.",
+ "deleteFailed": "{failed} பணி(களை) நீக்க முடியவில்லை.",
+ "deleteError": "பணிகளை நீக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்."
+ },
+ "auth": {
+ "email": "மின்னஞ்சல்",
+ "password": "கடவுச்சொல்",
+ "currentPassword": "தற்போதைய கடவுச்சொல்",
+ "newPassword": "கடவுச்சொல் (மாற்றவில்லை என்றால் காலியாக விடவும்)",
+ "loginButton": "உள்நுழை",
+ "registerButton": "பதிவு செய்",
+ "updateButton": "புதுப்பி",
+ "createAccount": "கணக்கை உருவாக்கு",
+ "invalidCredentials": "தவறான சான்றுகள்.",
+ "emailInUse": "மின்னஞ்சல் ஏற்கனவே பயன்பாட்டில் உள்ளது.",
+ "unauthorized": "அங்கீகரிக்கப்படவில்லை",
+ "cookiesRequired": "இந்த செயலியைப் பயன்படுத்த குக்கீகள் இயக்கப்பட வேண்டும்.",
+ "noCookies": "அங்கீகார குக்கீ இல்லை, உங்கள் உலாவி குக்கீகளைத் தடுக்கிறது."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN-க்கு வரவேற்கிறோம்!",
+ "createYourAccount": "உங்கள் கணக்கை உருவாக்கவும்",
+ "reportIssues": "சிக்கல்களைப் புகாரளிக்கவும்",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "பணி கண்டறியப்படவில்லை.",
+ "fileNotFound": "கோப்பு கண்டறியப்படவில்லை.",
+ "uploadFailed": "பதிவேற்றம் தோல்வியடைந்தது.",
+ "conversionFailed": "மாற்றம் தோல்வியடைந்தது.",
+ "serverError": "சேவையக பிழை."
+ },
+ "upload": {
+ "success": "கோப்புகள் வெற்றிகரமாக பதிவேற்றப்பட்டன.",
+ "dragDrop": "கோப்புகளை இங்கே விடவும்"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/te.json b/src/locales/te.json
new file mode 100644
index 0000000..1ab7f4b
--- /dev/null
+++ b/src/locales/te.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ద్వారా శక్తి పొందింది",
+ "version": "v{version}",
+ "loading": "లోడ్ అవుతోంది...",
+ "error": "లోపం",
+ "success": "విజయం",
+ "confirm": "నిర్ధారించు",
+ "cancel": "రద్దు చేయి",
+ "close": "మూసివేయి",
+ "save": "సేవ్ చేయి",
+ "delete": "తొలగించు",
+ "remove": "తీసివేయి",
+ "download": "డౌన్లోడ్",
+ "upload": "అప్లోడ్",
+ "submit": "సమర్పించు",
+ "back": "వెనుకకు",
+ "next": "తదుపరి",
+ "yes": "అవును",
+ "no": "కాదు"
+ },
+ "nav": {
+ "history": "చరిత్ర",
+ "account": "ఖాతా",
+ "logout": "లాగ్ అవుట్",
+ "login": "లాగిన్",
+ "register": "నమోదు",
+ "language": "భాష"
+ },
+ "convert": {
+ "title": "మార్చు",
+ "titleWithType": ".{fileType} మార్చు",
+ "chooseFile": "ఫైల్ ఎంచుకోండి",
+ "orDragHere": "లేదా ఇక్కడ డ్రాగ్ చేయండి",
+ "searchConversions": "మార్పిడులు శోధించు",
+ "convertTo": "దీనికి మార్చు",
+ "convertButton": "మార్చు",
+ "uploading": "అప్లోడ్ అవుతోంది...",
+ "processing": "ప్రాసెస్ అవుతోంది..."
+ },
+ "results": {
+ "title": "ఫలితాలు",
+ "convertedFileName": "మార్చబడిన ఫైల్ పేరు",
+ "status": "స్థితి",
+ "actions": "చర్యలు",
+ "downloadAll": "అన్నీ",
+ "downloadTar": "Tar",
+ "deleteJob": "తొలగించు",
+ "noFiles": "ఇంకా ఫైళ్లు మార్చబడలేదు.",
+ "statusPending": "పెండింగ్",
+ "statusCompleted": "పూర్తయింది",
+ "statusFailed": "విఫలమైంది"
+ },
+ "history": {
+ "title": "ఫలితాలు",
+ "time": "సమయం",
+ "files": "ఫైళ్లు",
+ "filesDone": "పూర్తయిన ఫైళ్లు",
+ "status": "స్థితి",
+ "actions": "చర్యలు",
+ "expandDetails": "వివరాలు విస్తరించు",
+ "detailedFileInfo": "వివరణాత్మక ఫైల్ సమాచారం:",
+ "deleteSelected": "ఎంచుకున్నవి తొలగించు",
+ "selectAll": "అన్నీ ఎంచుకో",
+ "confirmDelete": "మీరు {count} జాబ్(లు) తొలగించాలనుకుంటున్నారా? ఈ చర్యను రద్దు చేయలేరు.",
+ "deleteSuccess": "{deleted} జాబ్(లు) విజయవంతంగా తొలగించబడ్డాయి.",
+ "deleteFailed": "{failed} జాబ్(లు) తొలగించడంలో విఫలమైంది.",
+ "deleteError": "జాబ్లు తొలగించేటప్పుడు లోపం సంభవించింది. దయచేసి మళ్ళీ ప్రయత్నించండి."
+ },
+ "auth": {
+ "email": "ఇమెయిల్",
+ "password": "పాస్వర్డ్",
+ "currentPassword": "ప్రస్తుత పాస్వర్డ్",
+ "newPassword": "పాస్వర్డ్ (మార్చకపోతే ఖాళీగా ఉంచండి)",
+ "loginButton": "లాగిన్",
+ "registerButton": "నమోదు",
+ "updateButton": "అప్డేట్",
+ "createAccount": "ఖాతా సృష్టించు",
+ "invalidCredentials": "చెల్లని ఆధారాలు.",
+ "emailInUse": "ఇమెయిల్ ఇప్పటికే వాడుకలో ఉంది.",
+ "unauthorized": "అనధికారం",
+ "cookiesRequired": "ఈ యాప్ ఉపయోగించడానికి కుకీలు ఎనేబుల్ చేయాలి.",
+ "noCookies": "ప్రమాణీకరణ కుకీ లేదు, మీ బ్రౌజర్ కుకీలను బ్లాక్ చేస్తోంది."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN కు స్వాగతం!",
+ "createYourAccount": "మీ ఖాతాను సృష్టించండి",
+ "reportIssues": "సమస్యలను నివేదించండి",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "జాబ్ కనుగొనబడలేదు.",
+ "fileNotFound": "ఫైల్ కనుగొనబడలేదు.",
+ "uploadFailed": "అప్లోడ్ విఫలమైంది.",
+ "conversionFailed": "మార్పిడి విఫలమైంది.",
+ "serverError": "సర్వర్ లోపం."
+ },
+ "upload": {
+ "success": "ఫైళ్లు విజయవంతంగా అప్లోడ్ అయ్యాయి.",
+ "dragDrop": "ఫైళ్లను ఇక్కడ వదలండి"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/th.json b/src/locales/th.json
new file mode 100644
index 0000000..ff15f6a
--- /dev/null
+++ b/src/locales/th.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "ขับเคลื่อนโดย",
+ "version": "v{version}",
+ "loading": "กำลังโหลด...",
+ "error": "ข้อผิดพลาด",
+ "success": "สำเร็จ",
+ "confirm": "ยืนยัน",
+ "cancel": "ยกเลิก",
+ "close": "ปิด",
+ "save": "บันทึก",
+ "delete": "ลบ",
+ "remove": "นำออก",
+ "download": "ดาวน์โหลด",
+ "upload": "อัปโหลด",
+ "submit": "ส่ง",
+ "back": "กลับ",
+ "next": "ถัดไป",
+ "yes": "ใช่",
+ "no": "ไม่"
+ },
+ "nav": {
+ "history": "ประวัติ",
+ "account": "บัญชี",
+ "logout": "ออกจากระบบ",
+ "login": "เข้าสู่ระบบ",
+ "register": "ลงทะเบียน",
+ "language": "ภาษา"
+ },
+ "convert": {
+ "title": "แปลงไฟล์",
+ "titleWithType": "แปลงไฟล์ .{fileType}",
+ "chooseFile": "เลือกไฟล์",
+ "orDragHere": "หรือลากมาที่นี่",
+ "searchConversions": "ค้นหาการแปลง",
+ "convertTo": "แปลงเป็น",
+ "convertButton": "แปลง",
+ "uploading": "กำลังอัปโหลด...",
+ "processing": "กำลังประมวลผล..."
+ },
+ "results": {
+ "title": "ผลลัพธ์",
+ "convertedFileName": "ชื่อไฟล์ที่แปลงแล้ว",
+ "status": "สถานะ",
+ "actions": "การดำเนินการ",
+ "downloadAll": "ทั้งหมด",
+ "downloadTar": "Tar",
+ "deleteJob": "ลบ",
+ "noFiles": "ยังไม่มีไฟล์ที่แปลง",
+ "statusPending": "รอดำเนินการ",
+ "statusCompleted": "เสร็จสมบูรณ์",
+ "statusFailed": "ล้มเหลว"
+ },
+ "history": {
+ "title": "ผลลัพธ์",
+ "time": "เวลา",
+ "files": "ไฟล์",
+ "filesDone": "ไฟล์ที่เสร็จแล้ว",
+ "status": "สถานะ",
+ "actions": "การดำเนินการ",
+ "expandDetails": "ขยายรายละเอียด",
+ "detailedFileInfo": "ข้อมูลไฟล์โดยละเอียด:",
+ "deleteSelected": "ลบที่เลือก",
+ "selectAll": "เลือกทั้งหมด",
+ "confirmDelete": "คุณแน่ใจหรือไม่ว่าต้องการลบ {count} งาน? การดำเนินการนี้ไม่สามารถยกเลิกได้",
+ "deleteSuccess": "ลบ {deleted} งานสำเร็จ",
+ "deleteFailed": "ไม่สามารถลบ {failed} งาน",
+ "deleteError": "เกิดข้อผิดพลาดขณะลบงาน กรุณาลองอีกครั้ง"
+ },
+ "auth": {
+ "email": "อีเมล",
+ "password": "รหัสผ่าน",
+ "currentPassword": "รหัสผ่านปัจจุบัน",
+ "newPassword": "รหัสผ่าน (เว้นว่างเพื่อไม่เปลี่ยน)",
+ "loginButton": "เข้าสู่ระบบ",
+ "registerButton": "ลงทะเบียน",
+ "updateButton": "อัปเดต",
+ "createAccount": "สร้างบัญชี",
+ "invalidCredentials": "ข้อมูลรับรองไม่ถูกต้อง",
+ "emailInUse": "อีเมลถูกใช้งานแล้ว",
+ "unauthorized": "ไม่ได้รับอนุญาต",
+ "cookiesRequired": "ต้องเปิดใช้งานคุกกี้เพื่อใช้แอปนี้",
+ "noCookies": "ไม่มีคุกกี้การยืนยันตัวตน อาจเป็นเพราะเบราว์เซอร์ของคุณบล็อกคุกกี้"
+ },
+ "setup": {
+ "welcome": "ยินดีต้อนรับสู่ ConvertX-CN!",
+ "createYourAccount": "สร้างบัญชีของคุณ",
+ "reportIssues": "รายงานปัญหาที่",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "ไม่พบงาน",
+ "fileNotFound": "ไม่พบไฟล์",
+ "uploadFailed": "อัปโหลดล้มเหลว",
+ "conversionFailed": "การแปลงล้มเหลว",
+ "serverError": "ข้อผิดพลาดเซิร์ฟเวอร์"
+ },
+ "upload": {
+ "success": "อัปโหลดไฟล์สำเร็จ",
+ "dragDrop": "วางไฟล์ที่นี่"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/tr.json b/src/locales/tr.json
new file mode 100644
index 0000000..24e620a
--- /dev/null
+++ b/src/locales/tr.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Tarafından desteklenmektedir",
+ "version": "v{version}",
+ "loading": "Yükleniyor...",
+ "error": "Hata",
+ "success": "Başarılı",
+ "confirm": "Onayla",
+ "cancel": "İptal",
+ "close": "Kapat",
+ "save": "Kaydet",
+ "delete": "Sil",
+ "remove": "Kaldır",
+ "download": "İndir",
+ "upload": "Yükle",
+ "submit": "Gönder",
+ "back": "Geri",
+ "next": "İleri",
+ "yes": "Evet",
+ "no": "Hayır"
+ },
+ "nav": {
+ "history": "Geçmiş",
+ "account": "Hesap",
+ "logout": "Çıkış",
+ "login": "Giriş",
+ "register": "Kayıt Ol",
+ "language": "Dil"
+ },
+ "convert": {
+ "title": "Dönüştür",
+ "titleWithType": ".{fileType} Dönüştür",
+ "chooseFile": "Bir dosya seçin",
+ "orDragHere": "veya buraya sürükleyin",
+ "searchConversions": "Dönüşümleri ara",
+ "convertTo": "Dönüştür",
+ "convertButton": "Dönüştür",
+ "uploading": "Yükleniyor...",
+ "processing": "İşleniyor..."
+ },
+ "results": {
+ "title": "Sonuçlar",
+ "convertedFileName": "Dönüştürülen Dosya Adı",
+ "status": "Durum",
+ "actions": "İşlemler",
+ "downloadAll": "Tümü",
+ "downloadTar": "Tar",
+ "deleteJob": "Sil",
+ "noFiles": "Henüz dönüştürülmüş dosya yok.",
+ "statusPending": "Bekliyor",
+ "statusCompleted": "Tamamlandı",
+ "statusFailed": "Başarısız"
+ },
+ "history": {
+ "title": "Sonuçlar",
+ "time": "Zaman",
+ "files": "Dosyalar",
+ "filesDone": "Tamamlanan Dosyalar",
+ "status": "Durum",
+ "actions": "İşlemler",
+ "expandDetails": "Ayrıntıları genişlet",
+ "detailedFileInfo": "Ayrıntılı Dosya Bilgisi:",
+ "deleteSelected": "Seçilenleri Sil",
+ "selectAll": "Tümünü seç",
+ "confirmDelete": "{count} işi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
+ "deleteSuccess": "{deleted} iş başarıyla silindi.",
+ "deleteFailed": "{failed} iş silinemedi.",
+ "deleteError": "İşler silinirken bir hata oluştu. Lütfen tekrar deneyin."
+ },
+ "auth": {
+ "email": "E-posta",
+ "password": "Şifre",
+ "currentPassword": "Mevcut Şifre",
+ "newPassword": "Şifre (değiştirmemek için boş bırakın)",
+ "loginButton": "Giriş Yap",
+ "registerButton": "Kayıt Ol",
+ "updateButton": "Güncelle",
+ "createAccount": "Hesap oluştur",
+ "invalidCredentials": "Geçersiz kimlik bilgileri.",
+ "emailInUse": "E-posta zaten kullanımda.",
+ "unauthorized": "Yetkisiz",
+ "cookiesRequired": "Bu uygulamayı kullanmak için çerezler etkinleştirilmelidir.",
+ "noCookies": "Kimlik doğrulama çerezi yok, belki tarayıcınız çerezleri engelliyor."
+ },
+ "setup": {
+ "welcome": "ConvertX-CN'e Hoş Geldiniz!",
+ "createYourAccount": "Hesabınızı oluşturun",
+ "reportIssues": "Sorunları bildirin",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "İş bulunamadı.",
+ "fileNotFound": "Dosya bulunamadı.",
+ "uploadFailed": "Yükleme başarısız.",
+ "conversionFailed": "Dönüştürme başarısız.",
+ "serverError": "Sunucu hatası."
+ },
+ "upload": {
+ "success": "Dosyalar başarıyla yüklendi.",
+ "dragDrop": "Dosyaları buraya bırakın"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/uk.json b/src/locales/uk.json
new file mode 100644
index 0000000..a2f6e45
--- /dev/null
+++ b/src/locales/uk.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Працює на",
+ "version": "v{version}",
+ "loading": "Завантаження...",
+ "error": "Помилка",
+ "success": "Успіх",
+ "confirm": "Підтвердити",
+ "cancel": "Скасувати",
+ "close": "Закрити",
+ "save": "Зберегти",
+ "delete": "Видалити",
+ "remove": "Прибрати",
+ "download": "Завантажити",
+ "upload": "Завантажити",
+ "submit": "Надіслати",
+ "back": "Назад",
+ "next": "Далі",
+ "yes": "Так",
+ "no": "Ні"
+ },
+ "nav": {
+ "history": "Історія",
+ "account": "Обліковий запис",
+ "logout": "Вийти",
+ "login": "Увійти",
+ "register": "Реєстрація",
+ "language": "Мова"
+ },
+ "convert": {
+ "title": "Конвертувати",
+ "titleWithType": "Конвертувати .{fileType}",
+ "chooseFile": "Виберіть файл",
+ "orDragHere": "або перетягніть сюди",
+ "searchConversions": "Пошук конвертацій",
+ "convertTo": "Конвертувати в",
+ "convertButton": "Конвертувати",
+ "uploading": "Завантаження...",
+ "processing": "Обробка..."
+ },
+ "results": {
+ "title": "Результати",
+ "convertedFileName": "Ім'я конвертованого файлу",
+ "status": "Статус",
+ "actions": "Дії",
+ "downloadAll": "Усі",
+ "downloadTar": "Tar",
+ "deleteJob": "Видалити",
+ "noFiles": "Файли ще не конвертовані.",
+ "statusPending": "Очікування",
+ "statusCompleted": "Завершено",
+ "statusFailed": "Помилка"
+ },
+ "history": {
+ "title": "Результати",
+ "time": "Час",
+ "files": "Файли",
+ "filesDone": "Готові файли",
+ "status": "Статус",
+ "actions": "Дії",
+ "expandDetails": "Розгорнути деталі",
+ "detailedFileInfo": "Детальна інформація про файл:",
+ "deleteSelected": "Видалити вибрані",
+ "selectAll": "Вибрати все",
+ "confirmDelete": "Ви впевнені, що хочете видалити {count} завдання? Цю дію не можна скасувати.",
+ "deleteSuccess": "Успішно видалено {deleted} завдання.",
+ "deleteFailed": "Не вдалося видалити {failed} завдання.",
+ "deleteError": "Сталася помилка під час видалення завдань. Спробуйте ще раз."
+ },
+ "auth": {
+ "email": "Електронна пошта",
+ "password": "Пароль",
+ "currentPassword": "Поточний пароль",
+ "newPassword": "Пароль (залиште порожнім, щоб не змінювати)",
+ "loginButton": "Увійти",
+ "registerButton": "Зареєструватися",
+ "updateButton": "Оновити",
+ "createAccount": "Створити обліковий запис",
+ "invalidCredentials": "Невірні облікові дані.",
+ "emailInUse": "Електронна пошта вже використовується.",
+ "unauthorized": "Не авторизовано",
+ "cookiesRequired": "Для використання цього додатка потрібно увімкнути cookies.",
+ "noCookies": "Немає cookie автентифікації, можливо, ваш браузер блокує cookies."
+ },
+ "setup": {
+ "welcome": "Ласкаво просимо до ConvertX-CN!",
+ "createYourAccount": "Створіть свій обліковий запис",
+ "reportIssues": "Повідомляйте про проблеми на",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Завдання не знайдено.",
+ "fileNotFound": "Файл не знайдено.",
+ "uploadFailed": "Помилка завантаження.",
+ "conversionFailed": "Помилка конвертації.",
+ "serverError": "Помилка сервера."
+ },
+ "upload": {
+ "success": "Файли успішно завантажено.",
+ "dragDrop": "Перетягніть файли сюди"
+ },
+ "file": {
+ "size": "{size} кБ"
+ }
+}
diff --git a/src/locales/vi.json b/src/locales/vi.json
new file mode 100644
index 0000000..023bf35
--- /dev/null
+++ b/src/locales/vi.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Được hỗ trợ bởi",
+ "version": "v{version}",
+ "loading": "Đang tải...",
+ "error": "Lỗi",
+ "success": "Thành công",
+ "confirm": "Xác nhận",
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "save": "Lưu",
+ "delete": "Xóa",
+ "remove": "Gỡ bỏ",
+ "download": "Tải xuống",
+ "upload": "Tải lên",
+ "submit": "Gửi",
+ "back": "Quay lại",
+ "next": "Tiếp theo",
+ "yes": "Có",
+ "no": "Không"
+ },
+ "nav": {
+ "history": "Lịch sử",
+ "account": "Tài khoản",
+ "logout": "Đăng xuất",
+ "login": "Đăng nhập",
+ "register": "Đăng ký",
+ "language": "Ngôn ngữ"
+ },
+ "convert": {
+ "title": "Chuyển đổi",
+ "titleWithType": "Chuyển đổi .{fileType}",
+ "chooseFile": "Chọn tệp",
+ "orDragHere": "hoặc kéo vào đây",
+ "searchConversions": "Tìm kiếm chuyển đổi",
+ "convertTo": "Chuyển đổi sang",
+ "convertButton": "Chuyển đổi",
+ "uploading": "Đang tải lên...",
+ "processing": "Đang xử lý..."
+ },
+ "results": {
+ "title": "Kết quả",
+ "convertedFileName": "Tên tệp đã chuyển đổi",
+ "status": "Trạng thái",
+ "actions": "Hành động",
+ "downloadAll": "Tất cả",
+ "downloadTar": "Tar",
+ "deleteJob": "Xóa",
+ "noFiles": "Chưa có tệp nào được chuyển đổi.",
+ "statusPending": "Đang chờ",
+ "statusCompleted": "Hoàn thành",
+ "statusFailed": "Thất bại"
+ },
+ "history": {
+ "title": "Kết quả",
+ "time": "Thời gian",
+ "files": "Tệp",
+ "filesDone": "Tệp hoàn thành",
+ "status": "Trạng thái",
+ "actions": "Hành động",
+ "expandDetails": "Mở rộng chi tiết",
+ "detailedFileInfo": "Thông tin chi tiết tệp:",
+ "deleteSelected": "Xóa đã chọn",
+ "selectAll": "Chọn tất cả",
+ "confirmDelete": "Bạn có chắc muốn xóa {count} công việc? Hành động này không thể hoàn tác.",
+ "deleteSuccess": "Đã xóa thành công {deleted} công việc.",
+ "deleteFailed": "Không thể xóa {failed} công việc.",
+ "deleteError": "Đã xảy ra lỗi khi xóa công việc. Vui lòng thử lại."
+ },
+ "auth": {
+ "email": "Email",
+ "password": "Mật khẩu",
+ "currentPassword": "Mật khẩu hiện tại",
+ "newPassword": "Mật khẩu (để trống nếu không thay đổi)",
+ "loginButton": "Đăng nhập",
+ "registerButton": "Đăng ký",
+ "updateButton": "Cập nhật",
+ "createAccount": "Tạo tài khoản",
+ "invalidCredentials": "Thông tin đăng nhập không hợp lệ.",
+ "emailInUse": "Email đã được sử dụng.",
+ "unauthorized": "Không được phép",
+ "cookiesRequired": "Cần bật cookie để sử dụng ứng dụng này.",
+ "noCookies": "Không có cookie xác thực, có thể trình duyệt của bạn đang chặn cookie."
+ },
+ "setup": {
+ "welcome": "Chào mừng đến với ConvertX-CN!",
+ "createYourAccount": "Tạo tài khoản của bạn",
+ "reportIssues": "Báo cáo sự cố tại",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Không tìm thấy công việc.",
+ "fileNotFound": "Không tìm thấy tệp.",
+ "uploadFailed": "Tải lên thất bại.",
+ "conversionFailed": "Chuyển đổi thất bại.",
+ "serverError": "Lỗi máy chủ."
+ },
+ "upload": {
+ "success": "Tải tệp lên thành công.",
+ "dragDrop": "Thả tệp vào đây"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}
diff --git a/src/locales/zu.json b/src/locales/zu.json
new file mode 100644
index 0000000..a96181f
--- /dev/null
+++ b/src/locales/zu.json
@@ -0,0 +1,106 @@
+{
+ "common": {
+ "appName": "ConvertX-CN",
+ "poweredBy": "Iqhutshwa yi",
+ "version": "v{version}",
+ "loading": "Iyalayisha...",
+ "error": "Iphutha",
+ "success": "Impumelelo",
+ "confirm": "Qinisekisa",
+ "cancel": "Khansela",
+ "close": "Vala",
+ "save": "Londoloza",
+ "delete": "Susa",
+ "remove": "Susa",
+ "download": "Landa",
+ "upload": "Layisha",
+ "submit": "Thumela",
+ "back": "Emuva",
+ "next": "Okulandelayo",
+ "yes": "Yebo",
+ "no": "Cha"
+ },
+ "nav": {
+ "history": "Umlando",
+ "account": "I-akhawunti",
+ "logout": "Phuma",
+ "login": "Ngena",
+ "register": "Bhalisa",
+ "language": "Ulimi"
+ },
+ "convert": {
+ "title": "Guqula",
+ "titleWithType": "Guqula .{fileType}",
+ "chooseFile": "Khetha ifayela",
+ "orDragHere": "noma yihudulele lapha",
+ "searchConversions": "Sesha ukuguqulwa",
+ "convertTo": "Guqulela ku",
+ "convertButton": "Guqula",
+ "uploading": "Iyalayisha...",
+ "processing": "Iyacubungula..."
+ },
+ "results": {
+ "title": "Imiphumela",
+ "convertedFileName": "Igama lefayela eliguquliwe",
+ "status": "Isimo",
+ "actions": "Izenzo",
+ "downloadAll": "Konke",
+ "downloadTar": "Tar",
+ "deleteJob": "Susa",
+ "noFiles": "Awakho amafayela aguquliwe okwamanje.",
+ "statusPending": "Kulindwe",
+ "statusCompleted": "Kuqediwe",
+ "statusFailed": "Kwehlulekile"
+ },
+ "history": {
+ "title": "Imiphumela",
+ "time": "Isikhathi",
+ "files": "Amafayela",
+ "filesDone": "Amafayela aqediwe",
+ "status": "Isimo",
+ "actions": "Izenzo",
+ "expandDetails": "Nweba imininingwane",
+ "detailedFileInfo": "Imininingwane yefayela enemininingwane:",
+ "deleteSelected": "Susa okukhethiwe",
+ "selectAll": "Khetha konke",
+ "confirmDelete": "Uqinisekile ukuthi ufuna ukususa imisebenzi engu-{count}? Lesi senzo asinakubuyiselwa emuva.",
+ "deleteSuccess": "Kususiwe ngempumelelo imisebenzi engu-{deleted}.",
+ "deleteFailed": "Kwehlulekile ukususa imisebenzi engu-{failed}.",
+ "deleteError": "Kwenzeke iphutha ngenkathi kususa imisebenzi. Sicela uzame futhi."
+ },
+ "auth": {
+ "email": "I-imeyili",
+ "password": "Iphasiwedi",
+ "currentPassword": "Iphasiwedi yamanje",
+ "newPassword": "Iphasiwedi (shiya kungenalutho uma ingashintshiwe)",
+ "loginButton": "Ngena",
+ "registerButton": "Bhalisa",
+ "updateButton": "Buyekeza",
+ "createAccount": "Dala i-akhawunti",
+ "invalidCredentials": "Imininingwane engavumelekile.",
+ "emailInUse": "I-imeyili isivele isetshenziswa.",
+ "unauthorized": "Akuvunyelwe",
+ "cookiesRequired": "Amakhukhi kufanele avunyelwe ukuze usebenzise lolu hlelo lokusebenza.",
+ "noCookies": "Awekho amakhukhi okuqinisekisa, mhlawumbe isiphequluli sakho sivimbela amakhukhi."
+ },
+ "setup": {
+ "welcome": "Siyakwamukela ku-ConvertX-CN!",
+ "createYourAccount": "Dala i-akhawunti yakho",
+ "reportIssues": "Bika noma yiziphi izinkinga ku",
+ "github": "GitHub"
+ },
+ "errors": {
+ "jobNotFound": "Umsebenzi awutholakali.",
+ "fileNotFound": "Ifayela alitholakali.",
+ "uploadFailed": "Ukulayisha kwehlulekile.",
+ "conversionFailed": "Ukuguqula kwehlulekile.",
+ "serverError": "Iphutha leseva."
+ },
+ "upload": {
+ "success": "Amafayela alayishwe ngempumelelo.",
+ "dragDrop": "Lahla amafayela lapha"
+ },
+ "file": {
+ "size": "{size} kB"
+ }
+}