feat(desktop): two-way cloud sync with mobile and web
Rewrites the desktop mirror as services/sync/SyncEngine: a persistent outbox, per-account server-clock keyset cursors with paging, pulls that never overwrite unsent local edits, deletions both ways through sync_tombstones and per-row failure isolation. It now covers history titles and favorites, dictionary, every meeting's memos and documents, memo tags, user commands and dictation/meeting templates, and registers the desktop as a device that the phone can disconnect. Fixes shipped defects: the first pull after sign-in fetched nothing, only the first meeting's children were pushed, team meetings leaked into the personal database and lost team_id on re-push, and Realtime never connected because Electron's Node 20 has no global WebSocket (ws is now the transport). Anonymous local-mode records are imported into the first account that signs in. The settings sync section is translated and shows pending/rejected changes; synced screens reload on app:dataChanged.
This commit is contained in:
parent
b5c9ff9f31
commit
0a4f5aee64
49 changed files with 3940 additions and 1033 deletions
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "Die lokale KI korrigiert Leerzeichen, Satzzeichen und falsch verstandene Wörter anhand der umgebenden Zeilen.",
|
||||
"settings.captionModel": "Modell für Live-Untertitel",
|
||||
"settings.captionModel.same": "Wie beim Diktieren",
|
||||
"settings.captionModel.desc": "Live-Untertitel werden mit einem eigenen Modell erkannt, das zusätzlich zum Diktiermodell geladen wird."
|
||||
"settings.captionModel.desc": "Live-Untertitel werden mit einem eigenen Modell erkannt, das zusätzlich zum Diktiermodell geladen wird.",
|
||||
"history.favorite": "Favorit",
|
||||
"history.unfavorite": "Favorit entfernen",
|
||||
"cloudSync.title": "Cloud-Synchronisierung",
|
||||
"cloudSync.description": "Hält Verlauf, Wörterbuch, Meetings, Memo-Tags, Befehle und Vorlagen mit Mobil und Web abgeglichen. Was du auf einem Gerät löschst, wird überall gelöscht.",
|
||||
"cloudSync.signIn": "Anmelden",
|
||||
"cloudSync.signedInAs": "Angemeldet als {{email}}",
|
||||
"cloudSync.noEmail": "keine E-Mail",
|
||||
"cloudSync.lastSync": "Zuletzt synchronisiert: {{time}}",
|
||||
"cloudSync.never": "noch nicht",
|
||||
"cloudSync.upToDate": "Alle Änderungen sind hochgeladen",
|
||||
"cloudSync.pending": "{{count}} Änderung(en) warten auf Upload",
|
||||
"cloudSync.failed": "{{count}} Änderung(en) vom Server abgelehnt – „Jetzt synchronisieren“ versucht es erneut",
|
||||
"cloudSync.syncNow": "Jetzt synchronisieren",
|
||||
"cloudSync.syncing": "Wird synchronisiert…",
|
||||
"cloudSync.signOut": "Abmelden",
|
||||
"cloudSync.browserPending": "Schließe die Anmeldung im Browser ab.",
|
||||
"cloudSync.signedOut": "Abgemeldet. Die Einträge auf diesem Computer bleiben erhalten.",
|
||||
"cloudSync.done": "Synchronisierung abgeschlossen ({{count}} übernommen)",
|
||||
"cloudSync.doneWithErrors": "Synchronisierung abgeschlossen ({{count}} übernommen, {{errors}} fehlgeschlagen – nächster Lauf versucht es erneut)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1903,5 +1903,29 @@
|
|||
"settings.captionRefine.desc": "The local AI fixes spacing, punctuation and misheard words in finished captions using the surrounding lines.",
|
||||
"settings.captionModel": "Live caption model",
|
||||
"settings.captionModel.same": "Same as dictation",
|
||||
"settings.captionModel.desc": "Recognises live captions with a separate model, loaded alongside the dictation model."
|
||||
"settings.captionModel.desc": "Recognises live captions with a separate model, loaded alongside the dictation model.",
|
||||
"history.favorite": "Favorite",
|
||||
"history.unfavorite": "Remove favorite",
|
||||
"cloudSync.title": "Cloud sync",
|
||||
"cloudSync.description": "Keeps history, dictionary, meetings, memo tags, commands and templates in step with mobile and web. Deleting on one device deletes everywhere.",
|
||||
"cloudSync.signIn": "Sign in",
|
||||
"cloudSync.signedInAs": "Signed in as {{email}}",
|
||||
"cloudSync.noEmail": "no email",
|
||||
"cloudSync.lastSync": "Last synced: {{time}}",
|
||||
"cloudSync.never": "not yet",
|
||||
"cloudSync.upToDate": "Every change is uploaded",
|
||||
"cloudSync.pending": "{{count}} change(s) waiting to upload",
|
||||
"cloudSync.failed": "{{count}} change(s) rejected by the server — Sync now tries them again",
|
||||
"cloudSync.syncNow": "Sync now",
|
||||
"cloudSync.syncing": "Syncing…",
|
||||
"cloudSync.signOut": "Sign out",
|
||||
"cloudSync.browserPending": "Finish signing in in your browser.",
|
||||
"cloudSync.signedOut": "Signed out. Records on this computer stay where they are.",
|
||||
"cloudSync.done": "Sync complete ({{count}} applied)",
|
||||
"cloudSync.doneWithErrors": "Sync complete ({{count}} applied, {{errors}} failed — retried on the next sync)",
|
||||
"mobile.devices.platform.android": "Android",
|
||||
"mobile.devices.platform.ios": "iPhone / iPad",
|
||||
"mobile.devices.platform.web": "Web browser",
|
||||
"mobile.devices.platform.windows": "Windows desktop app",
|
||||
"mobile.devices.platform.macos": "macOS desktop app"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "La IA local corrige espacios, puntuación y palabras mal oídas usando las líneas cercanas.",
|
||||
"settings.captionModel": "Modelo de subtítulos en vivo",
|
||||
"settings.captionModel.same": "Igual que el dictado",
|
||||
"settings.captionModel.desc": "Reconoce los subtítulos en vivo con un modelo aparte, cargado junto al de dictado."
|
||||
"settings.captionModel.desc": "Reconoce los subtítulos en vivo con un modelo aparte, cargado junto al de dictado.",
|
||||
"history.favorite": "Favorito",
|
||||
"history.unfavorite": "Quitar de favoritos",
|
||||
"cloudSync.title": "Sincronización en la nube",
|
||||
"cloudSync.description": "Mantiene el historial, el diccionario, las reuniones, las etiquetas, los comandos y las plantillas al día con el móvil y la web. Lo que borres en un dispositivo se borra en todos.",
|
||||
"cloudSync.signIn": "Iniciar sesión",
|
||||
"cloudSync.signedInAs": "Sesión iniciada como {{email}}",
|
||||
"cloudSync.noEmail": "sin correo",
|
||||
"cloudSync.lastSync": "Última sincronización: {{time}}",
|
||||
"cloudSync.never": "todavía no",
|
||||
"cloudSync.upToDate": "Todos los cambios están subidos",
|
||||
"cloudSync.pending": "{{count}} cambio(s) pendientes de subir",
|
||||
"cloudSync.failed": "El servidor rechazó {{count}} cambio(s): «Sincronizar ahora» los reintenta",
|
||||
"cloudSync.syncNow": "Sincronizar ahora",
|
||||
"cloudSync.syncing": "Sincronizando…",
|
||||
"cloudSync.signOut": "Cerrar sesión",
|
||||
"cloudSync.browserPending": "Termina de iniciar sesión en el navegador.",
|
||||
"cloudSync.signedOut": "Sesión cerrada. Los registros de este equipo se conservan.",
|
||||
"cloudSync.done": "Sincronización completa ({{count}} aplicados)",
|
||||
"cloudSync.doneWithErrors": "Sincronización completa ({{count}} aplicados, {{errors}} fallidos: se reintentan en la próxima)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "L’IA locale corrige les espaces, la ponctuation et les mots mal entendus d’après les lignes voisines.",
|
||||
"settings.captionModel": "Modèle des sous-titres en direct",
|
||||
"settings.captionModel.same": "Identique à la dictée",
|
||||
"settings.captionModel.desc": "Les sous-titres en direct utilisent un modèle distinct, chargé en plus de celui de la dictée."
|
||||
"settings.captionModel.desc": "Les sous-titres en direct utilisent un modèle distinct, chargé en plus de celui de la dictée.",
|
||||
"history.favorite": "Favori",
|
||||
"history.unfavorite": "Retirer des favoris",
|
||||
"cloudSync.title": "Synchronisation cloud",
|
||||
"cloudSync.description": "Synchronise l'historique, le dictionnaire, les réunions, les étiquettes, les commandes et les modèles avec le mobile et le web. Une suppression sur un appareil s'applique partout.",
|
||||
"cloudSync.signIn": "Se connecter",
|
||||
"cloudSync.signedInAs": "Connecté en tant que {{email}}",
|
||||
"cloudSync.noEmail": "sans e-mail",
|
||||
"cloudSync.lastSync": "Dernière synchronisation : {{time}}",
|
||||
"cloudSync.never": "pas encore",
|
||||
"cloudSync.upToDate": "Toutes les modifications sont envoyées",
|
||||
"cloudSync.pending": "{{count}} modification(s) en attente d’envoi",
|
||||
"cloudSync.failed": "Le serveur a refusé {{count}} modification(s) — « Synchroniser » les renvoie",
|
||||
"cloudSync.syncNow": "Synchroniser",
|
||||
"cloudSync.syncing": "Synchronisation…",
|
||||
"cloudSync.signOut": "Se déconnecter",
|
||||
"cloudSync.browserPending": "Terminez la connexion dans votre navigateur.",
|
||||
"cloudSync.signedOut": "Déconnecté. Les enregistrements de cet ordinateur sont conservés.",
|
||||
"cloudSync.done": "Synchronisation terminée ({{count}} appliqués)",
|
||||
"cloudSync.doneWithErrors": "Synchronisation terminée ({{count}} appliqués, {{errors}} en échec — réessayés à la prochaine)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "確定した字幕の区切り・句読点・聞き間違いを、ローカルAIが前後の文脈に合わせて直します。",
|
||||
"settings.captionModel": "リアルタイム字幕モデル",
|
||||
"settings.captionModel.same": "音声入力と同じ",
|
||||
"settings.captionModel.desc": "リアルタイム字幕だけを別のモデルで認識します。音声入力モデルと同時に読み込まれます。"
|
||||
"settings.captionModel.desc": "リアルタイム字幕だけを別のモデルで認識します。音声入力モデルと同時に読み込まれます。",
|
||||
"history.favorite": "お気に入り",
|
||||
"history.unfavorite": "お気に入りを解除",
|
||||
"cloudSync.title": "クラウド同期",
|
||||
"cloudSync.description": "履歴・辞書・会議・メモタグ・コマンド・テンプレートをモバイルとウェブに自動で同期します。どの端末で削除しても他の端末からも削除されます。",
|
||||
"cloudSync.signIn": "ログイン",
|
||||
"cloudSync.signedInAs": "{{email}} でログイン中",
|
||||
"cloudSync.noEmail": "メールなし",
|
||||
"cloudSync.lastSync": "最終同期: {{time}}",
|
||||
"cloudSync.never": "まだありません",
|
||||
"cloudSync.upToDate": "すべての変更をアップロード済み",
|
||||
"cloudSync.pending": "アップロード待ちの変更 {{count}} 件",
|
||||
"cloudSync.failed": "サーバーに拒否された変更 {{count}} 件 —「今すぐ同期」で再試行します",
|
||||
"cloudSync.syncNow": "今すぐ同期",
|
||||
"cloudSync.syncing": "同期中…",
|
||||
"cloudSync.signOut": "ログアウト",
|
||||
"cloudSync.browserPending": "ブラウザでログインを完了してください。",
|
||||
"cloudSync.signedOut": "ログアウトしました。このコンピューターの記録はそのまま残ります。",
|
||||
"cloudSync.done": "同期完了({{count}} 件反映)",
|
||||
"cloudSync.doneWithErrors": "同期完了({{count}} 件反映、{{errors}} 件失敗 — 次回の同期で再試行)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1910,5 +1910,29 @@
|
|||
"settings.captionRefine.desc": "확정된 자막을 로컬 AI가 앞뒤 문맥에 맞게 띄어쓰기·문장부호·잘못 들은 단어를 고칩니다.",
|
||||
"settings.captionModel": "실시간 자막 모델",
|
||||
"settings.captionModel.same": "받아쓰기와 같게",
|
||||
"settings.captionModel.desc": "실시간 자막만 다른 모델로 인식합니다. 받아쓰기 모델과 함께 GPU 메모리에 올라갑니다."
|
||||
"settings.captionModel.desc": "실시간 자막만 다른 모델로 인식합니다. 받아쓰기 모델과 함께 GPU 메모리에 올라갑니다.",
|
||||
"history.favorite": "즐겨찾기",
|
||||
"history.unfavorite": "즐겨찾기 해제",
|
||||
"cloudSync.title": "클라우드 동기화",
|
||||
"cloudSync.description": "기록·사전·회의·메모 태그·명령·템플릿을 모바일과 웹에 자동으로 맞춥니다. 어느 기기에서 지워도 다른 기기에서 함께 지워집니다.",
|
||||
"cloudSync.signIn": "로그인",
|
||||
"cloudSync.signedInAs": "{{email}} 계정으로 로그인됨",
|
||||
"cloudSync.noEmail": "이메일 없음",
|
||||
"cloudSync.lastSync": "마지막 동기화: {{time}}",
|
||||
"cloudSync.never": "아직 없음",
|
||||
"cloudSync.upToDate": "모든 변경이 올라갔습니다",
|
||||
"cloudSync.pending": "올릴 변경 {{count}}건 대기 중",
|
||||
"cloudSync.failed": "서버가 거부한 변경 {{count}}건 — \"지금 동기화\"로 다시 시도합니다",
|
||||
"cloudSync.syncNow": "지금 동기화",
|
||||
"cloudSync.syncing": "동기화 중…",
|
||||
"cloudSync.signOut": "로그아웃",
|
||||
"cloudSync.browserPending": "브라우저에서 로그인을 마쳐 주세요.",
|
||||
"cloudSync.signedOut": "로그아웃했습니다. 이 컴퓨터의 기록은 그대로 남아 있습니다.",
|
||||
"cloudSync.done": "동기화 완료 ({{count}}건 반영)",
|
||||
"cloudSync.doneWithErrors": "동기화 완료 ({{count}}건 반영, {{errors}}건 실패 — 다음 동기화 때 다시 시도)",
|
||||
"mobile.devices.platform.android": "Android",
|
||||
"mobile.devices.platform.ios": "iPhone·iPad",
|
||||
"mobile.devices.platform.web": "웹 브라우저",
|
||||
"mobile.devices.platform.windows": "Windows 데스크톱 앱",
|
||||
"mobile.devices.platform.macos": "macOS 데스크톱 앱"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "A IA local corrige espaços, pontuação e palavras mal ouvidas usando as linhas próximas.",
|
||||
"settings.captionModel": "Modelo de legendas ao vivo",
|
||||
"settings.captionModel.same": "Igual ao ditado",
|
||||
"settings.captionModel.desc": "Reconhece as legendas ao vivo com um modelo separado, carregado junto com o do ditado."
|
||||
"settings.captionModel.desc": "Reconhece as legendas ao vivo com um modelo separado, carregado junto com o do ditado.",
|
||||
"history.favorite": "Favorito",
|
||||
"history.unfavorite": "Remover dos favoritos",
|
||||
"cloudSync.title": "Sincronização na nuvem",
|
||||
"cloudSync.description": "Mantém histórico, dicionário, reuniões, etiquetas, comandos e modelos sincronizados com o celular e a web. O que você apaga em um dispositivo é apagado em todos.",
|
||||
"cloudSync.signIn": "Entrar",
|
||||
"cloudSync.signedInAs": "Conectado como {{email}}",
|
||||
"cloudSync.noEmail": "sem e-mail",
|
||||
"cloudSync.lastSync": "Última sincronização: {{time}}",
|
||||
"cloudSync.never": "ainda não",
|
||||
"cloudSync.upToDate": "Todas as alterações foram enviadas",
|
||||
"cloudSync.pending": "{{count}} alteração(ões) aguardando envio",
|
||||
"cloudSync.failed": "O servidor recusou {{count}} alteração(ões) — \"Sincronizar agora\" tenta de novo",
|
||||
"cloudSync.syncNow": "Sincronizar agora",
|
||||
"cloudSync.syncing": "Sincronizando…",
|
||||
"cloudSync.signOut": "Sair",
|
||||
"cloudSync.browserPending": "Conclua o login no navegador.",
|
||||
"cloudSync.signedOut": "Você saiu. Os registros deste computador continuam aqui.",
|
||||
"cloudSync.done": "Sincronização concluída ({{count}} aplicados)",
|
||||
"cloudSync.doneWithErrors": "Sincronização concluída ({{count}} aplicados, {{errors}} com falha — tentados de novo na próxima)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "Локальный ИИ исправляет пробелы, пунктуацию и ослышки в готовых субтитрах по соседним строкам.",
|
||||
"settings.captionModel": "Модель живых субтитров",
|
||||
"settings.captionModel.same": "Как для диктовки",
|
||||
"settings.captionModel.desc": "Живые субтитры распознаются отдельной моделью, которая загружается вместе с моделью диктовки."
|
||||
"settings.captionModel.desc": "Живые субтитры распознаются отдельной моделью, которая загружается вместе с моделью диктовки.",
|
||||
"history.favorite": "В избранное",
|
||||
"history.unfavorite": "Убрать из избранного",
|
||||
"cloudSync.title": "Облачная синхронизация",
|
||||
"cloudSync.description": "Синхронизирует историю, словарь, встречи, теги, команды и шаблоны с мобильным приложением и вебом. Удаление на одном устройстве удаляет везде.",
|
||||
"cloudSync.signIn": "Войти",
|
||||
"cloudSync.signedInAs": "Вы вошли как {{email}}",
|
||||
"cloudSync.noEmail": "нет почты",
|
||||
"cloudSync.lastSync": "Последняя синхронизация: {{time}}",
|
||||
"cloudSync.never": "ещё нет",
|
||||
"cloudSync.upToDate": "Все изменения отправлены",
|
||||
"cloudSync.pending": "Ожидают отправки: {{count}}",
|
||||
"cloudSync.failed": "Сервер отклонил изменений: {{count}} — «Синхронизировать» повторит попытку",
|
||||
"cloudSync.syncNow": "Синхронизировать",
|
||||
"cloudSync.syncing": "Синхронизация…",
|
||||
"cloudSync.signOut": "Выйти",
|
||||
"cloudSync.browserPending": "Завершите вход в браузере.",
|
||||
"cloudSync.signedOut": "Вы вышли. Записи на этом компьютере сохранены.",
|
||||
"cloudSync.done": "Синхронизация завершена (применено: {{count}})",
|
||||
"cloudSync.doneWithErrors": "Синхронизация завершена (применено: {{count}}, ошибок: {{errors}} — повтор при следующей синхронизации)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "AI ในเครื่องจะแก้เว้นวรรค เครื่องหมายวรรคตอน และคำที่ได้ยินผิด โดยดูจากบรรทัดรอบข้าง",
|
||||
"settings.captionModel": "โมเดลคำบรรยายสด",
|
||||
"settings.captionModel.same": "เหมือนการพิมพ์ด้วยเสียง",
|
||||
"settings.captionModel.desc": "ใช้โมเดลแยกสำหรับคำบรรยายสด โดยโหลดคู่กับโมเดลพิมพ์ด้วยเสียง"
|
||||
"settings.captionModel.desc": "ใช้โมเดลแยกสำหรับคำบรรยายสด โดยโหลดคู่กับโมเดลพิมพ์ด้วยเสียง",
|
||||
"history.favorite": "รายการโปรด",
|
||||
"history.unfavorite": "นำออกจากรายการโปรด",
|
||||
"cloudSync.title": "ซิงก์คลาวด์",
|
||||
"cloudSync.description": "ซิงก์ประวัติ พจนานุกรม การประชุม แท็กบันทึก คำสั่ง และเทมเพลตกับมือถือและเว็บโดยอัตโนมัติ ลบบนอุปกรณ์หนึ่งจะลบทุกที่",
|
||||
"cloudSync.signIn": "เข้าสู่ระบบ",
|
||||
"cloudSync.signedInAs": "เข้าสู่ระบบในชื่อ {{email}}",
|
||||
"cloudSync.noEmail": "ไม่มีอีเมล",
|
||||
"cloudSync.lastSync": "ซิงก์ล่าสุด: {{time}}",
|
||||
"cloudSync.never": "ยังไม่เคย",
|
||||
"cloudSync.upToDate": "อัปโหลดการเปลี่ยนแปลงครบแล้ว",
|
||||
"cloudSync.pending": "รออัปโหลด {{count}} รายการ",
|
||||
"cloudSync.failed": "เซิร์ฟเวอร์ปฏิเสธ {{count}} รายการ — \"ซิงก์ตอนนี้\" จะลองใหม่",
|
||||
"cloudSync.syncNow": "ซิงก์ตอนนี้",
|
||||
"cloudSync.syncing": "กำลังซิงก์…",
|
||||
"cloudSync.signOut": "ออกจากระบบ",
|
||||
"cloudSync.browserPending": "โปรดเข้าสู่ระบบให้เสร็จในเบราว์เซอร์",
|
||||
"cloudSync.signedOut": "ออกจากระบบแล้ว ข้อมูลบนคอมพิวเตอร์นี้ยังอยู่ครบ",
|
||||
"cloudSync.done": "ซิงก์เสร็จแล้ว ({{count}} รายการ)",
|
||||
"cloudSync.doneWithErrors": "ซิงก์เสร็จแล้ว ({{count}} รายการ, ล้มเหลว {{errors}} — จะลองใหม่รอบหน้า)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "AI cục bộ sửa khoảng trắng, dấu câu và từ nghe nhầm dựa trên các dòng xung quanh.",
|
||||
"settings.captionModel": "Mô hình phụ đề trực tiếp",
|
||||
"settings.captionModel.same": "Giống đọc chính tả",
|
||||
"settings.captionModel.desc": "Phụ đề trực tiếp dùng mô hình riêng, được tải cùng mô hình đọc chính tả."
|
||||
"settings.captionModel.desc": "Phụ đề trực tiếp dùng mô hình riêng, được tải cùng mô hình đọc chính tả.",
|
||||
"history.favorite": "Yêu thích",
|
||||
"history.unfavorite": "Bỏ yêu thích",
|
||||
"cloudSync.title": "Đồng bộ đám mây",
|
||||
"cloudSync.description": "Tự động đồng bộ lịch sử, từ điển, cuộc họp, thẻ ghi chú, lệnh và mẫu với di động và web. Xóa trên một thiết bị sẽ xóa ở mọi nơi.",
|
||||
"cloudSync.signIn": "Đăng nhập",
|
||||
"cloudSync.signedInAs": "Đã đăng nhập: {{email}}",
|
||||
"cloudSync.noEmail": "không có email",
|
||||
"cloudSync.lastSync": "Đồng bộ lần cuối: {{time}}",
|
||||
"cloudSync.never": "chưa có",
|
||||
"cloudSync.upToDate": "Mọi thay đổi đã được tải lên",
|
||||
"cloudSync.pending": "{{count}} thay đổi đang chờ tải lên",
|
||||
"cloudSync.failed": "Máy chủ từ chối {{count}} thay đổi — \"Đồng bộ ngay\" sẽ thử lại",
|
||||
"cloudSync.syncNow": "Đồng bộ ngay",
|
||||
"cloudSync.syncing": "Đang đồng bộ…",
|
||||
"cloudSync.signOut": "Đăng xuất",
|
||||
"cloudSync.browserPending": "Hãy hoàn tất đăng nhập trên trình duyệt.",
|
||||
"cloudSync.signedOut": "Đã đăng xuất. Dữ liệu trên máy này vẫn được giữ nguyên.",
|
||||
"cloudSync.done": "Đồng bộ xong (áp dụng {{count}})",
|
||||
"cloudSync.doneWithErrors": "Đồng bộ xong ({{count}} áp dụng, {{errors}} lỗi — sẽ thử lại lần sau)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "本機 AI 會依上下文修正已確定字幕的空格、標點與聽錯的詞。",
|
||||
"settings.captionModel": "即時字幕模型",
|
||||
"settings.captionModel.same": "與聽寫相同",
|
||||
"settings.captionModel.desc": "僅即時字幕使用獨立模型辨識,會與聽寫模型一同載入。"
|
||||
"settings.captionModel.desc": "僅即時字幕使用獨立模型辨識,會與聽寫模型一同載入。",
|
||||
"history.favorite": "收藏",
|
||||
"history.unfavorite": "取消收藏",
|
||||
"cloudSync.title": "雲端同步",
|
||||
"cloudSync.description": "自動與行動裝置和網頁同步歷史、字典、會議、備忘標籤、指令和範本。在任一裝置刪除,其他裝置也會一併刪除。",
|
||||
"cloudSync.signIn": "登入",
|
||||
"cloudSync.signedInAs": "已登入:{{email}}",
|
||||
"cloudSync.noEmail": "無電子郵件",
|
||||
"cloudSync.lastSync": "上次同步:{{time}}",
|
||||
"cloudSync.never": "尚未同步",
|
||||
"cloudSync.upToDate": "所有變更皆已上傳",
|
||||
"cloudSync.pending": "{{count}} 項變更等待上傳",
|
||||
"cloudSync.failed": "伺服器拒絕了 {{count}} 項變更 —「立即同步」會重試",
|
||||
"cloudSync.syncNow": "立即同步",
|
||||
"cloudSync.syncing": "同步中…",
|
||||
"cloudSync.signOut": "登出",
|
||||
"cloudSync.browserPending": "請在瀏覽器中完成登入。",
|
||||
"cloudSync.signedOut": "已登出。這台電腦上的紀錄會保留。",
|
||||
"cloudSync.done": "同步完成(已套用 {{count}} 項)",
|
||||
"cloudSync.doneWithErrors": "同步完成(已套用 {{count}} 項,{{errors}} 項失敗 — 下次同步時重試)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "本地 AI 会根据上下文修正已确定字幕的空格、标点和听错的词。",
|
||||
"settings.captionModel": "实时字幕模型",
|
||||
"settings.captionModel.same": "与听写相同",
|
||||
"settings.captionModel.desc": "仅实时字幕使用单独的模型识别,会与听写模型一同加载。"
|
||||
"settings.captionModel.desc": "仅实时字幕使用单独的模型识别,会与听写模型一同加载。",
|
||||
"history.favorite": "收藏",
|
||||
"history.unfavorite": "取消收藏",
|
||||
"cloudSync.title": "云同步",
|
||||
"cloudSync.description": "自动与移动端和网页同步历史、词典、会议、备忘标签、命令和模板。在任一设备上删除,其他设备也会一并删除。",
|
||||
"cloudSync.signIn": "登录",
|
||||
"cloudSync.signedInAs": "已登录:{{email}}",
|
||||
"cloudSync.noEmail": "无邮箱",
|
||||
"cloudSync.lastSync": "上次同步:{{time}}",
|
||||
"cloudSync.never": "尚未同步",
|
||||
"cloudSync.upToDate": "所有更改均已上传",
|
||||
"cloudSync.pending": "{{count}} 项更改等待上传",
|
||||
"cloudSync.failed": "服务器拒绝了 {{count}} 项更改 —「立即同步」会重试",
|
||||
"cloudSync.syncNow": "立即同步",
|
||||
"cloudSync.syncing": "正在同步…",
|
||||
"cloudSync.signOut": "退出登录",
|
||||
"cloudSync.browserPending": "请在浏览器中完成登录。",
|
||||
"cloudSync.signedOut": "已退出登录。本机上的记录会保留。",
|
||||
"cloudSync.done": "同步完成(已应用 {{count}} 项)",
|
||||
"cloudSync.doneWithErrors": "同步完成(已应用 {{count}} 项,{{errors}} 项失败 — 下次同步时重试)"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue