feat(server+web+desktop): Phase 3.2-B Payple 결제 연동 + 대시보드 Premium 상태 표시

Payple PG 연동:
- _shared/payple.ts: Payple API 래퍼 (auth/billing/cancel/deleteBillingKey)
- payple-checkout Edge Function: 빌링키 결제 + 구독 활성화
- payple-webhook Edge Function: 결제완료/취소 이벤트
- payple-manage Edge Function: 구독 취소 (빌링키 해지)
- DB migration: payment_provider + payple_payer_id + payple_pay_oid
- 웹 billing 페이지: Payple JS SDK 결제창 + 관리 버튼 (Stripe 대체)
- Electron LicenseModal: shell.openExternal → 웹 결제 페이지

대시보드 Premium 상태:
- CrtDisplay services에 PREMIUM LLM LED 추가
- 백엔드 인디케이터 카드 (Local/Premium) + 티어 카드
- 사용량 섹션: 전 티어 표시 + 모델별 Premium 쿼터
- 12개 locale × 14개 i18n 키
This commit is contained in:
윤찬 2026-04-12 19:18:40 +09:00
parent b8cb665264
commit c9baf031c9
27 changed files with 1318 additions and 98 deletions

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} Einträge",
"dashboard.stat": "Statistiken",
"dashboard.sys": "System",
"dashboard.currentBackend": "Aktuelles Backend",
"dashboard.backendLocal": "Lokal (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Anmeldung erforderlich",
"dashboard.premiumQuota": "Premium-Kontingent",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Wöchentlich",
"dashboard.quotaDaily": "Täglich",
"history.title": "Transkriptionsverlauf",
"history.search": "Suchen...",
"history.entries": "{{count}} Einträge",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "AKTIV",
"service.standby": "BEREITSCHAFT",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Abbrechen",
"common.save": "Speichern",
"common.delete": "Löschen",

View file

@ -35,6 +35,16 @@
"dashboard.entries": "{{count}} entries",
"dashboard.stat": "Stats",
"dashboard.sys": "System",
"dashboard.currentBackend": "Current Backend",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Login Required",
"dashboard.premiumQuota": "Premium Quota",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Weekly",
"dashboard.quotaDaily": "Daily",
"history.title": "Transcription History",
"history.search": "Search...",
"history.entries": "{{count}} entries",
@ -204,6 +214,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Cancel",
"common.save": "Save",
"common.delete": "Delete",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} entradas",
"dashboard.stat": "estadísticas",
"dashboard.sys": "sistema",
"dashboard.currentBackend": "Backend actual",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Inicio de sesión requerido",
"dashboard.premiumQuota": "Cuota Premium",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Semanal",
"dashboard.quotaDaily": "Diario",
"history.title": "Historial de transcripciones",
"history.search": "Buscar...",
"history.entries": "{{count}} entradas",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVO",
"service.standby": "EN ESPERA",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Cancelar",
"common.save": "Guardar",
"common.delete": "Eliminar",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} entrées",
"dashboard.stat": "statistiques",
"dashboard.sys": "système",
"dashboard.currentBackend": "Backend actuel",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Connexion requise",
"dashboard.premiumQuota": "Quota Premium",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Hebdomadaire",
"dashboard.quotaDaily": "Journalier",
"history.title": "Historique des transcriptions",
"history.search": "Rechercher...",
"history.entries": "{{count}} entrées",
@ -185,6 +195,8 @@
"service.offline": "HORS LIGNE",
"service.active": "ACTIF",
"service.standby": "EN VEILLE",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Annuler",
"common.save": "Enregistrer",
"common.delete": "Supprimer",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}}件",
"dashboard.stat": "統計",
"dashboard.sys": "システム",
"dashboard.currentBackend": "現在のバックエンド",
"dashboard.backendLocal": "ローカル (Ollama)",
"dashboard.backendPremium": "プレミアム (Claude)",
"dashboard.loginRequired": "ログインが必要",
"dashboard.premiumQuota": "プレミアムクォータ",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "週間",
"dashboard.quotaDaily": "日間",
"history.title": "文字起こし履歴",
"history.search": "検索...",
"history.entries": "{{count}}件",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "キャンセル",
"common.save": "保存",
"common.delete": "削除",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}}건",
"dashboard.stat": "통계",
"dashboard.sys": "시스템",
"dashboard.currentBackend": "현재 백엔드",
"dashboard.backendLocal": "로컬 (Ollama)",
"dashboard.backendPremium": "프리미엄 (Claude)",
"dashboard.loginRequired": "로그인 필요",
"dashboard.premiumQuota": "프리미엄 쿼터",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "주간",
"dashboard.quotaDaily": "일간",
"history.title": "전사 기록",
"history.search": "검색...",
"history.entries": "{{count}}건",
@ -205,6 +215,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "취소",
"common.save": "저장",
"common.delete": "삭제",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} entradas",
"dashboard.stat": "estatísticas",
"dashboard.sys": "sistema",
"dashboard.currentBackend": "Backend atual",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Login necessário",
"dashboard.premiumQuota": "Cota Premium",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Semanal",
"dashboard.quotaDaily": "Diário",
"history.title": "Histórico de transcrições",
"history.search": "Pesquisar...",
"history.entries": "{{count}} entradas",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ATIVO",
"service.standby": "EM ESPERA",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Cancelar",
"common.save": "Salvar",
"common.delete": "Excluir",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} записей",
"dashboard.stat": "Статистика",
"dashboard.sys": "Система",
"dashboard.currentBackend": "Текущий бэкенд",
"dashboard.backendLocal": "Локальный (Ollama)",
"dashboard.backendPremium": "Премиум (Claude)",
"dashboard.loginRequired": "Требуется вход",
"dashboard.premiumQuota": "Премиум квота",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Недельная",
"dashboard.quotaDaily": "Дневная",
"history.title": "История транскрипций",
"history.search": "Поиск...",
"history.entries": "{{count}} записей",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Отмена",
"common.save": "Сохранить",
"common.delete": "Удалить",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} รายการ",
"dashboard.stat": "สถิติ",
"dashboard.sys": "ระบบ",
"dashboard.currentBackend": "แบ็กเอนด์ปัจจุบัน",
"dashboard.backendLocal": "ภายในเครื่อง (Ollama)",
"dashboard.backendPremium": "พรีเมียม (Claude)",
"dashboard.loginRequired": "ต้องเข้าสู่ระบบ",
"dashboard.premiumQuota": "โควต้าพรีเมียม",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "รายสัปดาห์",
"dashboard.quotaDaily": "รายวัน",
"history.title": "ประวัติการถอดความ",
"history.search": "ค้นหา...",
"history.entries": "{{count}} รายการ",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "ยกเลิก",
"common.save": "บันทึก",
"common.delete": "ลบ",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}} mục",
"dashboard.stat": "Thống kê",
"dashboard.sys": "Hệ thống",
"dashboard.currentBackend": "Backend hiện tại",
"dashboard.backendLocal": "Cục bộ (Ollama)",
"dashboard.backendPremium": "Cao cấp (Claude)",
"dashboard.loginRequired": "Cần đăng nhập",
"dashboard.premiumQuota": "Hạn mức Premium",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "Hàng tuần",
"dashboard.quotaDaily": "Hàng ngày",
"history.title": "Lịch sử phiên âm",
"history.search": "Tìm kiếm...",
"history.entries": "{{count}} mục",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Hủy",
"common.save": "Lưu",
"common.delete": "Xóa",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}}筆",
"dashboard.stat": "統計",
"dashboard.sys": "系統",
"dashboard.currentBackend": "目前後端",
"dashboard.backendLocal": "本機 (Ollama)",
"dashboard.backendPremium": "進階 (Claude)",
"dashboard.loginRequired": "需要登入",
"dashboard.premiumQuota": "進階配額",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "每週",
"dashboard.quotaDaily": "每日",
"history.title": "轉錄歷史",
"history.search": "搜尋...",
"history.entries": "{{count}}筆",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "取消",
"common.save": "儲存",
"common.delete": "刪除",

View file

@ -36,6 +36,16 @@
"dashboard.entries": "{{count}}条",
"dashboard.stat": "统计",
"dashboard.sys": "系统",
"dashboard.currentBackend": "当前后端",
"dashboard.backendLocal": "本地 (Ollama)",
"dashboard.backendPremium": "高级 (Claude)",
"dashboard.loginRequired": "需要登录",
"dashboard.premiumQuota": "高级配额",
"dashboard.modelHaiku": "Haiku",
"dashboard.modelSonnet": "Sonnet",
"dashboard.modelOpus": "Opus",
"dashboard.quotaWeekly": "每周",
"dashboard.quotaDaily": "每日",
"history.title": "转录历史",
"history.search": "搜索...",
"history.entries": "{{count}}条",
@ -185,6 +195,8 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "取消",
"common.save": "保存",
"common.delete": "删除",