This commit is contained in:
Jeffrey Chen 2026-01-03 09:40:24 +08:00 committed by GitHub
parent bea194e89d
commit 7464a6f951
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 102 additions and 124 deletions

View file

@ -1373,6 +1373,7 @@
"undo": "تراجع",
"up": "أعلى",
"update": "تحديث",
"updateVersion": "⬆️ تحديث",
"insertAsset": "إدراج صورة أو ملف",
"uploadError": "خطأ في الرفع",
"uploading": "يتم الرفع...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] جارٍ التحقق من الفهرس...",
"59": "فشل في تعيين قائمة تجاهل المزامنة",
"60": "‫فشل في الحصول على حزمة التحديث: %s",
"61": "⬆️ حزمة تثبيت الإصدار الجديد جاهزة، هل تريد تثبيت الإصدار الجديد الآن؟",
"61": "حزمة تثبيت الإصدار الجديد جاهزة، هل تريد تثبيت الإصدار الجديد الآن؟<br><br><span class='ft__on-surface'>يرجى ملاحظة أنه يجب الانتظار حتى يتم إغلاق SiYuan بالكامل قبل التثبيت</span>",
"62": "⬆️ حزمة تثبيت الإصدار الجديد جاهزة. عند الخروج من التطبيق، سوف تُسأل ما إذا كنت تريد تثبيت الإصدار الجديد",
"63": "جارٍ الاسترجاع, الرجاء الانتظار...",
"64": "‫هناك [%d] ملفات في المجموع، سوف يستغرق الأمر بعض الوقت للفهرسة، الرجاء الانتظار...",
@ -1541,7 +1542,7 @@
"100": "جارٍ تنظيف البيانات...",
"101": "‫تم إعداد تذكير [%s]",
"102": "اكتملت المعالجة",
"103": "تم تنزيل حزمة التحديث تلقائياً في الخلفية. عند الخروج، سوف تُسأل ما إذا كنت تريد تثبيت الإصدار الجديد",
"103": "تم بدء تنزيل حزمة التحديث تلقائياً، سيتم عرض تقدم التنزيل في الشريط السفلي",
"104": "فشل تنزيل حزمة التحديث، الرجاء التحقق من اتصال الشبكة",
"105": "بدون عنوان",
"106": "الحد الأقصى للطول هو 512 حرفاً",

View file

@ -1373,6 +1373,7 @@
"undo": "Rückgängig",
"up": "Nach oben",
"update": "Aktualisieren",
"updateVersion": "⬆️ Aktualisieren",
"insertAsset": "Bild oder Datei einfügen",
"uploadError": "Upload-Fehler",
"uploading": "Hochladen...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Überprüfen des Index...",
"59": "Fehler beim Festlegen der Ignorierliste für die Synchronisation",
"60": "Fehler beim Abrufen des Update-Pakets: %s",
"61": "⬆️ Das neue Versionsinstallationspaket ist bereit, möchten Sie die neue Version jetzt installieren?",
"61": "Das neue Versionsinstallationspaket ist bereit, möchten Sie die neue Version jetzt installieren?<br><br><span class='ft__on-surface'>Bitte beachten Sie, dass Sie warten müssen, bis SiYuan vollständig beendet ist, bevor Sie die Installation durchführen</span>",
"62": "⬆️ Das neue Versionsinstallationspaket ist bereit. Beim Beenden werden Sie gefragt, ob Sie die neue Version installieren möchten",
"63": "Wiederherstellung, bitte warten...",
"64": "Insgesamt [%d] Dateien, es dauert etwas Zeit, um zu indizieren, bitte warten...",
@ -1541,7 +1542,7 @@
"100": "Daten bereinigen...",
"101": "Erinnerung [%s] eingestellt",
"102": "Bearbeitung abgeschlossen",
"103": "Das Update-Installationspaket wurde automatisch im Hintergrund heruntergeladen. Beim Beenden werden Sie gefragt, ob Sie die neue Version installieren möchten",
"103": "Der Download des Update-Installationspakets wurde automatisch gestartet, der Download-Fortschritt wird in der unteren Leiste angezeigt",
"104": "Das Update-Installationspaket konnte nicht heruntergeladen werden, bitte überprüfen Sie die Netzwerkverbindung",
"105": "Ohne Titel",
"106": "Maximale Länge ist auf 512 Zeichen begrenzt",

View file

@ -1373,6 +1373,7 @@
"undo": "Undo",
"up": "Up",
"update": "Update",
"updateVersion": "⬆️ Update",
"insertAsset": "Insert image or file",
"uploadError": "upload error",
"uploading": "Uploading...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Verifying index...",
"59": "Failed to set sync ignore list",
"60": "Failed to get the update package: %s",
"61": "⬆️ The new version installation package is ready, do you want to install the new version now?",
"61": "The new version installation package is ready, do you want to install the new version now?<br><br><span class='ft__on-surface'>Please note that you need to wait for SiYuan to fully exit before installing</span>",
"62": "⬆️ The new version installation package is ready. When exiting, you will be asked whether to install the new version",
"63": "Recovering, please wait...",
"64": "There are [%d] files in total, it will take some time to index, please wait...",
@ -1541,7 +1542,7 @@
"100": "Cleaning data...",
"101": "Done setting reminder [%s]",
"102": "Processing completed",
"103": "The update installation package has been automatically downloaded in the background. When exiting, you will be asked whether to install the new version",
"103": "The update installation package has been automatically started downloading, download progress will be displayed in the bottom bar",
"104": "The update installation package failed to download, please check the network connection",
"105": "Untitled",
"106": "Maximum length is limited to 512 characters",

View file

@ -1373,6 +1373,7 @@
"undo": "Deshacer",
"up": "Arriba",
"update": "Actualización",
"updateVersion": "⬆️ Actualizar",
"insertAsset": "Insertar imagen o archivo",
"uploadError": "error de subida",
"uploading": "Subiendo...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Verificando índice...",
"59": " Falló la configuración de sincronización de la lista de ignorados",
"60": "Fallo al obtener el paquete de actualización: %s",
"61": "⬆️ El paquete de instalación de la nueva versión está listo, ¿quieres instalar la nueva versión ahora?",
"61": "El paquete de instalación de la nueva versión está listo, ¿quieres instalar la nueva versión ahora?<br><br><span class='ft__on-surface'>Tenga en cuenta que debe esperar a que SiYuan se cierre completamente antes de instalar</span>",
"62": "⬆️ El paquete de instalación de la nueva versión está listo. Al salir, se le preguntará si desea instalar la nueva versión",
"63": "Recuperando, por favor espere...",
"64": "Hay [%d] archivos en total, tardará un tiempo en indexarse, por favor espere...",
@ -1541,7 +1542,7 @@
"100": "Limpieza de datos...",
"101": "El recordatorio de configuración [%s] se ha completado",
"102": "Procesamiento completado",
"103": "El paquete de instalación de la actualización se ha descargado automáticamente en segundo plano. Al salir, se le preguntará si desea instalar la nueva versión",
"103": "La descarga del paquete de instalación de la actualización se ha iniciado automáticamente, el progreso de la descarga se mostrará en la barra inferior",
"104": "El paquete de instalación de la actualización no se pudo descargar, verifique la conexión de red",
"105": "Sin título",
"106": "La longitud máxima está limitada a 512 caracteres",

View file

@ -1373,6 +1373,7 @@
"undo": "Retiré",
"up": "en haut",
"update": "Mises à jour",
"updateVersion": "⬆️ Mettre à jour",
"insertAsset": "Insérer une image ou un fichier",
"uploadError": "erreur de transfert",
"uploading": "Transfert en cours",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Vérification de l'index...",
"59": "Échec de la définition de la liste des ignores de synchronisation",
"60": "Échec de la récupération du paquet de mise à jour : %s",
"61": "⬆️ Le package d'installation de la nouvelle version est prêt, voulez-vous installer la nouvelle version maintenant ?",
"61": "Le package d'installation de la nouvelle version est prêt, voulez-vous installer la nouvelle version maintenant ?<br><br><span class='ft__on-surface'>Veuillez noter que vous devez attendre que SiYuan se ferme complètement avant d'installer</span>",
"62": "⬆️ Le package d'installation de la nouvelle version est prêt. En quittant, il vous sera demandé si vous souhaitez installer la nouvelle version",
"63": "Récupération, veuillez patienter...",
"64": "Il y a [%d] fichiers au total, l'indexation prendra un certain temps, veuillez patienter...",
@ -1541,7 +1542,7 @@
"100": "Nettoyage des données...",
"101": "Rappel de réglage terminé [%s]",
"102": "Traitement terminé",
"103": "Le package d'installation de la mise à jour a été automatiquement téléchargé en arrière-plan. En quittant, il vous sera demandé si vous souhaitez installer la nouvelle version",
"103": "Le téléchargement du package d'installation de la mise à jour a été automatiquement démarré, la progression du téléchargement sera affichée dans la barre inférieure",
"104": "Le package d'installation de la mise à jour n'a pas pu être téléchargé, veuillez vérifier la connexion réseau",
"105": "Sans titre",
"106": "La longueur maximale est limitée à 512 caractères",

View file

@ -1373,6 +1373,7 @@
"undo": "ביטול",
"up": "למעלה",
"update": "עדכן",
"updateVersion": "⬆️ עדכן",
"insertAsset": "הכנס תמונה או קובץ",
"uploadError": "שגיאת העלאה",
"uploading": "מעלה...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] בודק אינדקס...",
"59": "נכשל בהגדרת רשימת ההזנחה בסנכרון",
"60": "נכשל לקבל את חבילת העדכון: %s",
"61": "⬆️ חבילת העדכון החדשה מוכנה, האם אתה רוצה להתקין את הגרסה החדשה עכשיו?",
"61": "חבילת העדכון החדשה מוכנה, האם אתה רוצה להתקין את הגרסה החדשה עכשיו?<br><br><span class='ft__on-surface'>שימו לב: יש להמתין עד ש-SiYuan ייסגר לחלוטין לפני ההתקנה</span>",
"62": "⬆️ חבילת העדכון החדשה מוכנה. בעת היציאה, תישאל אם להתקין את הגרסה החדשה",
"63": "מוקם, אנא המתן...",
"64": "יש בסך הכל [%d] קבצים, יידרש זמן מה לאינדיקציה, אנא המתן...",
@ -1541,7 +1542,7 @@
"100": "מנקה נתונים...",
"101": "הושלמה הגדרת תזכורת [%s]",
"102": "העיבוד הושלם",
"103": "חבילת ההתקנה לעדכון הושלמה ברקע אוטומטית. בעת היציאה, תישאל אם להתקין את הגרסה החדשה",
"103": "הורדת חבילת ההתקנה לעדכון החלה אוטומטית, התקדמות ההורדה תוצג בשורת התחתית",
"104": "חבילת ההתקנה לעדכון נכשלת בהורדה, אנא בדוק את החיבור לרשת",
"105": "ללא כותרת",
"106": "אורך מרבי מוגבל ל-512 תווים",

View file

@ -1373,6 +1373,7 @@
"undo": "Annulla",
"up": "Su",
"update": "Aggiorna",
"updateVersion": "⬆️ Aggiorna",
"insertAsset": "Inserisci immagine o file",
"uploadError": "Errore di caricamento",
"uploading": "Caricamento in corso.",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Verifica dell'indice in corso...",
"59": "Impossibile impostare la lista di ignoranza della sincronizzazione",
"60": "Impossibile ottenere il pacchetto di aggiornamento: %s",
"61": "⬆️ Il pacchetto di installazione della nuova versione è pronto, vuoi installarlo ora?",
"61": "Il pacchetto di installazione della nuova versione è pronto, vuoi installarlo ora?<br><br><span class='ft__on-surface'>Si prega di notare che è necessario attendere che SiYuan si chiuda completamente prima di installare</span>",
"62": "⬆️ Il pacchetto di installazione della nuova versione è pronto. Quando esci, ti verrà chiesto se installare la nuova versione",
"63": "Recupero in corso, attendere prego...",
"64": "Ci sono [%d] file in totale, ci vorrà del tempo per indicizzare, attendere prego...",
@ -1541,7 +1542,7 @@
"100": "Pulizia dei dati in corso...",
"101": "Promemoria impostato [%s] completato",
"102": "Elaborazione completata",
"103": "Il pacchetto di installazione dell'aggiornamento è stato scaricato automaticamente in background. Uscendo, ti verrà chiesto se installare la nuova versione",
"103": "Il download del pacchetto di installazione dell'aggiornamento è stato avviato automaticamente, il progresso del download verrà visualizzato nella barra inferiore",
"104": "Il pacchetto di installazione dell'aggiornamento non è riuscito a scaricarsi, verifica la connessione di rete",
"105": "Senza titolo",
"106": "La lunghezza massima è limitata a 512 caratteri",

View file

@ -1373,6 +1373,7 @@
"undo": "元に戻す",
"up": "上へ",
"update": "更新",
"updateVersion": "⬆️ 更新",
"insertAsset": "画像またはファイルを挿入",
"uploadError": "アップロードエラー",
"uploading": "アップロード中...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] インデックスを検証しています...",
"59": "同期除外リストの設定に失敗しました",
"60": "更新パッケージの取得に失敗しました: %s",
"61": "⬆️ 新しいバージョンをインストールする準備ができました。今すぐ新しいバージョンをインストールしますか?",
"61": "新しいバージョンをインストールする準備ができました。今すぐ新しいバージョンをインストールしますか?<br><br><span class='ft__on-surface'>ご注意:思源ノートが完全に終了してからインストールしてください</span>",
"62": "⬆️ 新しいバージョンをインストールする準備できました。終了するときに新しいバージョンをインストールするかどうかを確認します",
"63": "復元中です。お待ちください...",
"64": "合計 [%d] 個のファイルがあります。インデックスの作成には時間がかかりますので、しばらくお待ちください...",
@ -1541,7 +1542,7 @@
"100": "データをクリーニングしています...",
"101": "リマインダーの設定が完了しました [%s]",
"102": "処理が完了しました",
"103": "更新インストールパッケージがバックグラウンドで自動的にダウンロードされました。終了時に新バージョンをインストールするかどうかを確認するメッセージが表示されます",
"103": "更新インストールパッケージの自動ダウンロードが開始されました。ダウンロードの進捗は下部バーに表示されます",
"104": "更新インストールパッケージのダウンロードに失敗しました。ネットワーク接続を確認してください",
"105": "タイトルなし",
"106": "最大長は 512 文字に制限されています",

View file

@ -1373,6 +1373,7 @@
"undo": "실행 취소",
"up": "위",
"update": "업데이트",
"updateVersion": "⬆️ 업데이트",
"insertAsset": "이미지 또는 파일 삽입",
"uploadError": "업로드 오류",
"uploading": "업로드 중...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] 인덱스 확인 중...",
"59": "동기화 무시 목록 설정 실패",
"60": "업데이트 패키지 가져오기 실패: %s",
"61": "⬆️ 새 버전 설치 패키지가 준비되었습니다. 지금 새 버전을 설치하시겠습니까?",
"61": "새 버전 설치 패키지가 준비되었습니다. 지금 새 버전을 설치하시겠습니까?<br><br><span class='ft__on-surface'>주의: 시유안이 완전히 종료될 때까지 기다린 후 설치해야 합니다</span>",
"62": "⬆️ 새 버전 설치 패키지가 준비되었습니다. 종료할 때 새 버전 설치 여부를 묻습니다",
"63": "복구 중, 잠시만 기다려 주세요...",
"64": "총 [%d]개의 파일이 있으며 인덱싱하는 데 시간이 걸립니다. 잠시만 기다려 주세요...",
@ -1541,7 +1542,7 @@
"100": "데이터 정리 중...",
"101": "알림 설정 완료 [%s]",
"102": "처리 완료",
"103": "업데이트 설치 패키지가 백그라운드에서 자동으로 다운로드되었습니다. 종료할 때 새 버전 설치 여부를 묻습니다",
"103": "업데이트 설치 패키지 자동 다운로드가 시작되었습니다. 다운로드 진행률은 하단 바에 표시됩니다",
"104": "업데이트 설치 패키지 다운로드 실패, 네트워크 연결을 확인하세요",
"105": "제목 없음",
"106": "최대 길이는 512자로 제한됩니다",

View file

@ -1373,6 +1373,7 @@
"undo": "Cofnij",
"up": "W górę",
"update": "Aktualizuj",
"updateVersion": "⬆️ Aktualizuj",
"insertAsset": "Wstaw obraz lub plik",
"uploadError": "błąd przesyłania",
"uploading": "Przesyłanie...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Weryfikacja indeksu...",
"59": "Nie udało się ustawić listy pomijania synchronizacji",
"60": "Nie udało się uzyskać pakietu aktualizacji: %s",
"61": "⬆️ Instalacja nowego pakietu wersji jest gotowa, czy chcesz teraz zainstalować nową wersję?",
"61": "Instalacja nowego pakietu wersji jest gotowa, czy chcesz teraz zainstalować nową wersję?<br><br><span class='ft__on-surface'>Uwaga: należy poczekać, aż SiYuan całkowicie się zamknie przed instalacją</span>",
"62": "⬆️ Instalacja nowego pakietu wersji jest gotowa. Przy wyjściu zapytasz, czy zainstalować nową wersję",
"63": "Odzyskiwanie, proszę czekać...",
"64": "Całkowita liczba plików wynosi [%d], zajmie trochę czasu na indeksowanie, proszę czekać...",
@ -1541,7 +1542,7 @@
"100": "Czyszczenie danych...",
"101": "Zakończono ustawienie przypomnienia [%s]",
"102": "Przetwarzanie zakończone",
"103": "Pakiet instalacyjny aktualizacji został automatycznie pobrany w tle. Przy wyjściu zostanie zapytane, czy zainstalować nową wersję",
"103": "Pobieranie pakietu instalacyjnego aktualizacji zostało automatycznie uruchomione, postęp pobierania będzie wyświetlany na dolnym pasku",
"104": "Pobranie pakietu instalacyjnego nie powiodło się, proszę sprawdzić połączenie sieciowe",
"105": "Bez tytułu",
"106": "Maksymalna długość jest ograniczona do 512 znaków",

View file

@ -1373,6 +1373,7 @@
"undo": "Desfazer",
"up": "Para cima",
"update": "Atualizar",
"updateVersion": "⬆️ Atualizar",
"insertAsset": "Inserir imagem ou arquivo",
"uploadError": "erro de upload",
"uploading": "Enviando...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Verificando índice...",
"59": "Falha ao definir lista de ignorados de sincronização",
"60": "Falha ao obter o pacote de atualização: %s",
"61": "⬆️ O pacote de instalação da nova versão está pronto, deseja instalar a nova versão agora?",
"61": "O pacote de instalação da nova versão está pronto, deseja instalar a nova versão agora?<br><br><span class='ft__on-surface'>Por favor, note que você precisa aguardar o SiYuan fechar completamente antes de instalar</span>",
"62": "⬆️ O pacote de instalação da nova versão está pronto. Ao sair, você será perguntado se deseja instalar a nova versão",
"63": "Recuperando, por favor aguarde...",
"64": "Há [%d] arquivos no total, levará algum tempo para indexar, por favor aguarde...",
@ -1541,7 +1542,7 @@
"100": "Limpando dados...",
"101": "Lembrete definido [%s]",
"102": "Processamento concluído",
"103": "O pacote de instalação da atualização foi baixado automaticamente em segundo plano. Ao sair, você será perguntado se deseja instalar a nova versão",
"103": "O download do pacote de instalação da atualização foi iniciado automaticamente, o progresso do download será exibido na barra inferior",
"104": "Falha ao baixar o pacote de instalação da atualização, por favor verifique a conexão de rede",
"105": "Sem título",
"106": "Comprimento máximo limitado a 512 caracteres",

View file

@ -1373,6 +1373,7 @@
"undo": "Отменить",
"up": "Вверх",
"update": "Обновить",
"updateVersion": "⬆️ Обновить",
"insertAsset": "Вставить изображение или файл",
"uploadError": "Ошибка закачивания",
"uploading": "Закачивание...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Проверка индекса...",
"59": "Не удалось установить список игнорирования синхронизации",
"60": "Не удалось получить пакет обновления: %s",
"61": "⬆️ Установочный пакет новой версии готов, вы хотите установить новую версию сейчас?",
"61": "Установочный пакет новой версии готов, вы хотите установить новую версию сейчас?<br><br><span class='ft__on-surface'>Обратите внимание, что необходимо дождаться полного завершения работы SiYuan перед установкой</span>",
"62": "⬆️ Установочный пакет новой версии готов. При выходе вас спросят, хотите ли вы установить новую версию",
"63": "Восстановление, пожалуйста, подождите...",
"64": "Всего [%d] файлов, потребуется некоторое время для индексации, пожалуйста, подождите...",
@ -1541,7 +1542,7 @@
"100": "Очистка данных...",
"101": "Задание напоминания завершено [%s]",
"102": "Обработка завершена",
"103": "Установочный пакет обновления был загружен автоматически в фоновом режиме. При выходе вас спросят, хотите ли вы установить новую версию",
"103": "Загрузка установочного пакета обновления была автоматически запущена, прогресс загрузки будет отображаться в нижней панели",
"104": "Не удалось скачать установочный пакет обновления, пожалуйста, проверьте сетевое подключение",
"105": "Без названия",
"106": "Максимальная длина ограничена 512 символами",

View file

@ -1373,6 +1373,7 @@
"undo": "Geri al",
"up": "Yukarı",
"update": "Güncelle",
"updateVersion": "⬆️ Güncelle",
"insertAsset": "Görsel veya dosya ekle",
"uploadError": "Yükleme hatası",
"uploading": "Yükleniyor...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] Dizin doğrulanıyor...",
"59": "Senkronizasyon yok sayma listesi ayarlanamadı",
"60": "Güncelleme paketi alınamadı: %s",
"61": "⬆️ Yeni sürüm paketi hazır, şimdi yüklemek ister misin?",
"61": "Yeni sürüm paketi hazır, şimdi yüklemek ister misin?<br><br><span class='ft__on-surface'>Lütfen dikkat: Kurulumdan önce SiYuan'ın tamamen kapanmasını beklemeniz gerekir</span>",
"62": "⬆️ Yeni sürüm paketi hazır, çıkarken yükleme seçeneği sunulacak",
"63": "Kurtarılıyor, lütfen bekle...",
"64": "Toplam [%d] dosya var, indeksleme biraz sürebilir, lütfen bekle...",
@ -1541,7 +1542,7 @@
"100": "Veri temizleniyor...",
"101": "Hatırlatıcı ayarlandı [%s]",
"102": "İşlem tamamlandı",
"103": "Güncelleme paketi arka planda indirildi. Çıkarken yeni sürüm kurulumu sorulacak",
"103": "Güncelleme paketi indirmesi otomatik olarak başlatıldı, indirme ilerlemesi alt çubukta gösterilecek",
"104": "Güncelleme paketi indirilemedi, ağ bağlantısını kontrol et",
"105": "Başlıksız",
"106": "Maksimum uzunluk 512 karakter ile sınırlı",

View file

@ -1373,6 +1373,7 @@
"undo": "撤銷",
"up": "上",
"update": "更新",
"updateVersion": "⬆️ 更新",
"insertAsset": "插入圖片或檔",
"uploadError": "上傳錯誤",
"uploading": "上傳中...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] 正在校驗索引...",
"59": "設置同步忽略列表失敗",
"60": "獲取更新檔失敗:%s",
"61": "⬆️ 新版本安裝檔已經準備就緒,是否現在安裝新版本?",
"61": "新版本安裝檔已經準備就緒,是否現在安裝新版本?<br><br><span class='ft__on-surface'>請注意,需要先等待思源筆記完全退出再進行安裝</span>",
"62": "⬆️ 新版本安裝檔已經準備就緒,退出時將詢問是否安裝新版本",
"63": "正在恢復,請稍等...",
"64": "共有檔 [%d] 個,需要一些時間進行索引,請稍等...",
@ -1541,7 +1542,7 @@
"100": "正在清理資料...",
"101": "設置提醒完畢 [%s]",
"102": "處理完畢",
"103": "已經在後台開始自動下載更新安裝檔,退出時將詢問是否安裝新版本",
"103": "已經自動開始下載更新安裝檔,下載進度將在底欄顯示",
"104": "更新安裝檔下載失敗,請檢查網絡連接",
"105": "未命名",
"106": "最大長度限制為 512 字元",

View file

@ -1373,6 +1373,7 @@
"undo": "撤销",
"up": "上",
"update": "更新",
"updateVersion": "⬆️ 更新",
"insertAsset": "插入图片或文件",
"uploadError": "上传错误",
"uploading": "上传中...",
@ -1499,7 +1500,7 @@
"58": "[%d/%d] 正在校验索引...",
"59": "设置同步忽略列表失败",
"60": "获取更新包失败:%s",
"61": "⬆️ 新版本安装包已经准备就绪,是否现在安装新版本?",
"61": "新版本安装包已经准备就绪,是否现在安装新版本?<br><br><span class='ft__on-surface'>请注意,需要先等待思源笔记完全退出再进行安装</span>",
"62": "⬆️ 新版本安装包已经准备就绪,退出时将询问是否安装新版本",
"63": "正在恢复,请稍等...",
"64": "共有文件 [%d] 个,需要一些时间进行索引,请稍等...",
@ -1541,7 +1542,7 @@
"100": "正在清理数据...",
"101": "设置提醒完毕 [%s]",
"102": "处理完毕",
"103": "已经在后台开始自动下载更新安装包,退出时将询问是否安装新版本",
"103": "已经自动开始下载更新安装包,下载进度将在底栏显示",
"104": "更新安装包下载失败,请检查网络连接",
"105": "未命名",
"106": "最大长度限制为 512 字符",

View file

@ -305,7 +305,6 @@ export const exitSiYuan = async (setCurrentWorkspace = true) => {
window.webkit.messageHandlers.exit.postMessage("");
return;
}
if (isInHarmony()) {
window.JSHarmony.exit();
return;
@ -321,7 +320,7 @@ export const exitSiYuan = async (setCurrentWorkspace = true) => {
ipcRenderer.send(Constants.SIYUAN_SHOW_WINDOW);
}
confirmDialog(window.siyuan.languages.tip, response.msg, () => {
confirmDialog(window.siyuan.languages.updateVersion, response.msg, () => {
fetchPost("/api/system/exit", {
force: true,
setCurrentWorkspace,

View file

@ -272,9 +272,6 @@ func refreshCheckDownloadInstallPkg() {
time.Sleep(3 * time.Minute)
checkDownloadInstallPkg()
if "" != getNewVerInstallPkgPath() {
util.PushMsg(Conf.Language(62), 15*1000)
}
}
func refreshAnnouncement() {

View file

@ -711,6 +711,7 @@ func Close(force, setCurrentWorkspace bool, execInstallPkg int) (exitCode int) {
util.IsExiting.Store(true)
waitSecondForExecInstallPkg := false
newVerInstallPkgPath := getNewVerInstallPkgPath()
if !skipNewVerInstallPkg() && "" != newVerInstallPkgPath {
if 2 == execInstallPkg || (force && 0 == execInstallPkg) { // 执行新版本安装
waitSecondForExecInstallPkg = true

View file

@ -26,7 +26,6 @@ import (
"path"
"path/filepath"
"runtime"
"strconv"
"strings"
"sync"
"time"
@ -35,6 +34,7 @@ import (
"github.com/imroc/req/v3"
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/util"
"golang.org/x/mod/semver"
)
func execNewVerInstallPkg(newVerInstallPkgPath string) {
@ -45,6 +45,9 @@ func execNewVerInstallPkg(newVerInstallPkgPath string) {
} else if gulu.OS.IsDarwin() {
exec.Command("chmod", "+x", newVerInstallPkgPath).CombinedOutput()
cmd = exec.Command("open", newVerInstallPkgPath)
} else {
logging.LogErrorf("unsupported platform for auto-installing package")
return
}
gulu.CmdAttr(cmd)
cmdErr := cmd.Run()
@ -54,28 +57,23 @@ func execNewVerInstallPkg(newVerInstallPkgPath string) {
}
}
var newVerInstallPkgPath string
func getNewVerInstallPkgPath() string {
if skipNewVerInstallPkg() {
newVerInstallPkgPath = ""
return ""
}
downloadPkgURLs, checksum, err := getUpdatePkg()
if err != nil || 1 > len(downloadPkgURLs) || "" == checksum {
newVerInstallPkgPath = ""
if err != nil {
return ""
}
pkg := path.Base(downloadPkgURLs[0])
newVerInstallPkgPath = filepath.Join(util.TempDir, "install", pkg)
localChecksum, _ := sha256Hash(newVerInstallPkgPath)
pkgPath := filepath.Join(util.TempDir, "install", pkg)
localChecksum, _ := sha256Hash(pkgPath)
if checksum != localChecksum {
newVerInstallPkgPath = ""
return ""
}
return newVerInstallPkgPath
return pkgPath
}
var checkDownloadInstallPkgLock = sync.Mutex{}
@ -93,22 +91,30 @@ func checkDownloadInstallPkg() {
defer checkDownloadInstallPkgLock.Unlock()
downloadPkgURLs, checksum, err := getUpdatePkg()
if err != nil || 1 > len(downloadPkgURLs) || "" == checksum {
if err != nil {
return
}
msgId := util.PushMsg(Conf.Language(103), 1000*7)
succ := false
existingPkgPath := getNewVerInstallPkgPath()
if "" != existingPkgPath {
// 存在经过 sha256Hash 检查的安装包
util.PushUpdateMsg("update-pkg-ready", Conf.Language(62), 15*1000)
return
}
util.PushUpdateMsg("update-pkg-downloading", Conf.Language(103), 1000*7)
success := false
for _, downloadPkgURL := range downloadPkgURLs {
err = downloadInstallPkg(downloadPkgURL, checksum)
if err == nil {
succ = true
success = true
break
}
}
if !succ {
util.PushUpdateMsg(msgId, Conf.Language(104), 7000)
if success {
util.PushUpdateMsg("update-pkg-ready", Conf.Language(62), 15*1000)
} else {
util.PushUpdateMsg("update-pkg-downloading", Conf.Language(104), 7000)
}
}
@ -121,6 +127,7 @@ func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
ver := result["ver"].(string)
if isVersionUpToDate(ver) {
err = fmt.Errorf("version is up to date")
return
}
@ -158,6 +165,11 @@ func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
checksums := result["checksums"].(map[string]interface{})
checksum = checksums[pkg].(string)
if "" == checksum {
err = fmt.Errorf("checksum is empty")
return
}
return
}
@ -277,88 +289,42 @@ func CheckUpdate(showMsg bool) {
releaseLang = releaseLangArg.(string)
}
var msg string
var timeout int
if isVersionUpToDate(ver) {
msg = Conf.Language(10)
timeout = 3000
util.PushUpdateMsg("update-notify", Conf.Language(10), 3000)
} else {
msg = fmt.Sprintf(Conf.Language(9), "<a href=\""+releaseLang+"\">"+releaseLang+"</a>")
showMsg = true
timeout = 15000
}
if showMsg {
util.PushMsg(msg, timeout)
go func() {
defer logging.Recover()
checkDownloadInstallPkg()
if "" != getNewVerInstallPkgPath() {
util.PushMsg(Conf.Language(62), 15*1000)
}
}()
util.PushUpdateMsg("update-notify", fmt.Sprintf(Conf.Language(9), "<a href=\""+releaseLang+"\">"+releaseLang+"</a>"), 15000)
}
go func() {
defer logging.Recover()
checkDownloadInstallPkg()
}()
}
func isVersionUpToDate(releaseVer string) bool {
return ver2num(releaseVer) <= ver2num(util.Ver)
return semver.Compare("v"+releaseVer, "v"+util.Ver) <= 0
}
// skipInstallPkgPlatformCached 缓存平台相关判断,-1 未初始化0 表示不跳过1 表示跳过
var skipInstallPkgPlatformCached = -1
func skipNewVerInstallPkg() bool {
if !gulu.OS.IsWindows() && !gulu.OS.IsDarwin() {
return true
}
if util.ISMicrosoftStore || util.ContainerStd != util.Container {
return true
}
if !Conf.System.DownloadInstallPkg {
return true
}
if gulu.OS.IsWindows() {
plat := strings.ToLower(Conf.System.OSPlatform)
// Windows 7, 8 and Server 2012 are no longer supported https://github.com/siyuan-note/siyuan/issues/7347
if strings.Contains(plat, " 7 ") || strings.Contains(plat, " 8 ") || strings.Contains(plat, "2012") {
return true
if skipInstallPkgPlatformCached == -1 {
skipInstallPkgPlatformCached = 0
if !gulu.OS.IsWindows() && !gulu.OS.IsDarwin() {
skipInstallPkgPlatformCached = 1
} else if util.ISMicrosoftStore || util.ContainerStd != util.Container {
skipInstallPkgPlatformCached = 1
} else if gulu.OS.IsWindows() {
plat := strings.ToLower(Conf.System.OSPlatform)
// Windows 7, 8 and Server 2012 are no longer supported https://github.com/siyuan-note/siyuan/issues/7347
if strings.Contains(plat, " 7 ") || strings.Contains(plat, " 8 ") || strings.Contains(plat, "2012") {
skipInstallPkgPlatformCached = 1
}
}
}
if skipInstallPkgPlatformCached == 1 || !Conf.System.DownloadInstallPkg {
return true
}
return false
}
func ver2num(a string) int {
var version string
var suffixpos int
var suffixStr string
var suffix string
a = strings.Trim(a, " ")
if strings.Contains(a, "alpha") {
suffixpos = strings.Index(a, "-alpha")
version = a[0:suffixpos]
suffixStr = a[suffixpos+6 : len(a)]
suffix = "0" + fmt.Sprintf("%03s", suffixStr)
} else if strings.Contains(a, "beta") {
suffixpos = strings.Index(a, "-beta")
version = a[0:suffixpos]
suffixStr = a[suffixpos+5 : len(a)]
suffix = "1" + fmt.Sprintf("%03s", suffixStr)
} else {
version = a
suffix = "5000"
}
split := strings.Split(version, ".")
var verArr []string
verArr = append(verArr, "1")
var tmp string
for i := 0; i < 3; i++ {
if i < len(split) {
tmp = split[i]
} else {
tmp = "0"
}
verArr = append(verArr, fmt.Sprintf("%04s", tmp))
}
verArr = append(verArr, suffix)
ver := strings.Join(verArr, "")
verNum, _ := strconv.Atoi(ver)
return verNum
}