mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-15 21:25:28 +01:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
47b6a449ae
25 changed files with 153 additions and 158 deletions
|
|
@ -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 حرفاً",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
"insertSameLevelHeadingBefore": "Insertar título del mismo nivel antes",
|
||||
"insertSameLevelHeadingAfter": "Insertar título del mismo nivel después",
|
||||
"upgrade": "Actualizar",
|
||||
"downgrade": "Degradar",
|
||||
"downgrade": "Revertir",
|
||||
"clipboardPermissionDenied": "Permiso del portapapeles denegado. Por favor, permita el acceso al portapapeles en la barra de direcciones del navegador y vuelva a intentarlo. Atención: el protocolo http puede no permitir el acceso al portapapeles, utilice Ctrl+V / ⌘V para pegar",
|
||||
"jumpTo": "Ir a",
|
||||
"vacuumDataIndex": "Optimizar índice",
|
||||
|
|
@ -165,7 +165,7 @@
|
|||
"insertRowAfter": "Insertar ${x} fila(s) abajo",
|
||||
"setDueTime": "Establecer tiempo de vencimiento",
|
||||
"showCardDay": "¿Después de cuántos días deseas mostrar la tarjeta?",
|
||||
"forgetCount": "Olvídate de contar",
|
||||
"forgetCount": "Conteo de olvidos",
|
||||
"lastReviewTime": "Última hora de revisión",
|
||||
"cardStatus": "Estado de la tarjeta",
|
||||
"noSupportTip": "Esta función no admite el uso de paquetes de tarjetas",
|
||||
|
|
@ -320,7 +320,7 @@
|
|||
"numberFormatILS": "Nuevo shekel israelí",
|
||||
"email": "Correo electrónico",
|
||||
"phone": "Teléfono",
|
||||
"inboxTip": "Abra la guía del usuario para buscar en la <code class='fn__code'>bandeja de entrada</code> para ver las instrucciones",
|
||||
"inboxTip": "Abra la guía del usuario y busque <code class='fn__code'>bandeja de entrada</code> para ver las instrucciones",
|
||||
"builtIn": "Incorporado",
|
||||
"endDate": "Fecha de finalización",
|
||||
"needLogin": "Esta función requiere iniciar sesión en la cuenta antes de poder usarla",
|
||||
|
|
@ -416,14 +416,14 @@
|
|||
"enablePluginTip2": "Todos los complementos están actualmente deshabilitados, habilítelos en [Descargados - Complemento]",
|
||||
"enablePlugin": "Habilitar complemento",
|
||||
"color": "Color",
|
||||
"confirmPassword": "Ya he recordado la contraseña",
|
||||
"confirmPassword": "He guardado la contraseña",
|
||||
"passwordNoMatch": "Las contraseñas ingresadas dos veces no coinciden",
|
||||
"cloudConfigTip": "Configure en [Configuración - Nube]",
|
||||
"confirmUninstall": "¿Está seguro de que desea desinstalar ${name}?<br>La desinstalación puede eliminar todas las configuraciones y datos relacionados, por favor, decida con precaución!",
|
||||
"scrollGetMore": "Desplácese hacia arriba y hacia abajo para cargar más",
|
||||
"flashcardNewCard": "Nueva Tarjeta",
|
||||
"flashcardReviewCard": "Vieja Tarjeta",
|
||||
"flashcardDueCard": "Tarjeta debida",
|
||||
"flashcardReviewCard": "Vieja de repaso",
|
||||
"flashcardDueCard": "Tarjeta vencida",
|
||||
"flashcardCard": "Todos",
|
||||
"plugin": "Complemento",
|
||||
"attrBookmarkTip": "Asociar este bloque con un marcador para verlo posteriormente a través del panel de marcadores",
|
||||
|
|
@ -451,9 +451,9 @@
|
|||
"nextDue": "Revisa la próxima vez",
|
||||
"flashcardNewCardLimit": "Límite de tarjeta nueva",
|
||||
"flashcardNewCardLimitTip": "Si hay muchas tarjetas nuevas, puede establecer la cantidad de tarjetas nuevas para revisar a través de este elemento",
|
||||
"flashcardReviewCardLimit": "Límite de tarjeta antigua",
|
||||
"flashcardReviewCardLimitTip": "Si hay muchas tarjetas antiguas, puede configurar la cantidad de tarjetas antiguas para revisar a través de este elemento",
|
||||
"flashcardMark": "Marcar cardado",
|
||||
"flashcardReviewCardLimit": "Límite de tarjeta de repaso",
|
||||
"flashcardReviewCardLimitTip": "Si hay muchas tarjetas de repaso, puede establecer el límite de revisión aquí",
|
||||
"flashcardMark": "Tarjeta de marcado",
|
||||
"flashcardMarkTip": "Después de habilitar, la marca se reconoce como un espacio en blanco",
|
||||
"flashcardList": "Lista de tarjetas",
|
||||
"flashcardListTip": "Después de habilitar, el primer elemento de una lista se reconoce como una pregunta, y el resto de los elementos básicos se reconocen como respuestas",
|
||||
|
|
@ -540,7 +540,7 @@
|
|||
"removeDeck": "Eliminar del mazo",
|
||||
"riffCard": "Tarjeta Flash",
|
||||
"compare": "Comparar",
|
||||
"switchTab": "Conmutador",
|
||||
"switchTab": "Cambiar pestaña",
|
||||
"recentDocs": "Documentos recientes",
|
||||
"autoLaunch": "Inicio automático al arrancar",
|
||||
"autoLaunchTip": "Después de habilitar, la aplicación se iniciará automáticamente después de iniciar sesión en el sistema operativo",
|
||||
|
|
@ -612,13 +612,13 @@
|
|||
"downloaded": "Descargado",
|
||||
"allOp": "Todas las operaciones",
|
||||
"allNotebooks": "Todos los cuadernos",
|
||||
"historyClean": "limpiar (clean)",
|
||||
"historyUpdate": "actualizar (update)",
|
||||
"historyDelete": "eliminar (delete)",
|
||||
"historyFormat": "formatear (format)",
|
||||
"historySync": "sincronizar (sync)",
|
||||
"historyReplace": "reemplazar (replace)",
|
||||
"historyOutline": "esquema (outline)",
|
||||
"historyClean": "Limpiar",
|
||||
"historyUpdate": "Actualizar",
|
||||
"historyDelete": "Eliminar",
|
||||
"historyFormat": "Formatear",
|
||||
"historySync": "Sincronizar",
|
||||
"historyReplace": "Reemplazar",
|
||||
"historyOutline": "Esquema",
|
||||
"htmlBlockError": "La ejecución del siguiente script afectará la visualización de la interfaz y el script ha dejado de ejecutarse",
|
||||
"fileHistory": "Historial de archivos",
|
||||
"htmlBlockTip": "Se forman varios bloques HTML. Para evitar la pérdida de datos, utilice etiquetas <code class='fn__code'><div></code> para ajustar y eliminar líneas en blanco",
|
||||
|
|
@ -716,7 +716,7 @@
|
|||
"height": "Alto",
|
||||
"deactivateUser": "Desactivar cuenta",
|
||||
"deactivateUserTip": "<ul class='fn__list'><li>Una vez desactivada la cuenta, no se puede recuperar, por favor no lo intente a voluntad</li><li>El nombre de usuario se rellenará con <code>alguien101</code> (el siguiente número es el número de usuario), la contraseña se restablecerá con un número aleatorio</li><li>Borrar el apodo, la autoetiqueta, la URL, el perfil, el avatar, el enlace del sitio, la dirección de correo y otra información del usuario</li><li >Todos los interruptores de la configuración de privacidad se restablecerán al estado público por defecto</li>n<li>Las cuentas sociales de terceros, los teléfonos móviles</li><li><strong>nombre de usuario, número de teléfono móvil, tercero vinculado. La cuenta no podrá volver a utilizarse en el futuro</strong></li><li>El estado del usuario está desactivado, el inicio de sesión está prohibido</li></ul>",
|
||||
"mergeCell": "Merge Cell",
|
||||
"mergeCell": "Fusionar celdas",
|
||||
"cancelMerged": "Cancelar fusión de celda",
|
||||
"useDefaultWidth": "Usar el ancho de columna por defecto",
|
||||
"useDefaultAlign": "Usar alineación predeterminada",
|
||||
|
|
@ -742,7 +742,7 @@
|
|||
"exportPDF2": "Márgenes de la página",
|
||||
"exportPDF3": "Escala de la página",
|
||||
"exportPDF4": "Recursos incrustados",
|
||||
"exportPDF5": "Mantener doblado",
|
||||
"exportPDF5": "Mantener contraído",
|
||||
"paged": "Paginado",
|
||||
"mergeSubdocs": "Fusionar subdocumentos",
|
||||
"removeAssetsFolder": "Eliminar directorio de recursos",
|
||||
|
|
@ -943,7 +943,7 @@
|
|||
"collapse": "Colapsar",
|
||||
"blockEmbed": "Integrar Bloque",
|
||||
"rowTip": "Haga clic en <span class='ft__on-surface'>Abrir menú</span><br>Arrastre <span class='ft__on-surface'>Ordenar</span><br>⇧Haga clic en <span class='ft__on-surface'>Actualizar atributo</span>",
|
||||
"gutterTip": "Haga clic/⌘/ <span class='ft__on-surface'>Abrir menú</span><br>⌘Haga clic⌥→ <span class='ft__on-surface'>Enfoque</span><br>⌥Hacer clic⌘↑ <span class='ft__on-surface'>Contraer/Expandir</span><br>⇧Hacer clic⌥⌘A <span class='ft__on-surface'>Actualizar atributo</span><br>Arrastrar <span class='ft__on-surface'>Mover posición</span><br>⌃Arrastrar <span class='ft__on-surface'>Repetir</span><br>⌥Arrastra <span class='ft__on-surface'>Generar referencia a bloque</span><br>⇧Arrastrar <span class='ft__on-surface'>Generar bloque incrustado</span>",
|
||||
"gutterTip": "Clic/⌘/ <span class='ft__on-surface'>Menú</span><br>⌘Clic⌥→ <span class='ft__on-surface'>Enfocar</span><br>⌥Clic⌘↑ <span class='ft__on-surface'>Contraer/Expandir</span><br>⇧Clic⌥⌘A <span class='ft__on-surface'>Actualizar atributo</span><br>Arrastrar <span class='ft__on-surface'>Mover</span><br>⌃Arrastrar <span class='ft__on-surface'>Duplicar</span><br>⌥Arrastrar <span class='ft__on-surface'>Referenciar</span><br>⇧Arrastrar <span class='ft__on-surface'>Incrustar</span>",
|
||||
"gutterTip2": "Haga clic en <span class='ft__on-surface'>Abrir menú</span><br>⇧Haga clic en <span class='ft__on-surface'>Actualizar atributo</span>",
|
||||
"linkDistance": "Distancia de enlace",
|
||||
"collideStrength": "Fuerza de colisión",
|
||||
|
|
@ -974,7 +974,7 @@
|
|||
"pdfConfirm": "¿Desea seguir exportando con el tema Claro seleccionado?",
|
||||
"import": "Importar",
|
||||
"doc": "Documento",
|
||||
"openBy": "Abierto por",
|
||||
"openBy": "Abrir con",
|
||||
"replace": "Sustituir",
|
||||
"replaceAll": "Sustituir todo",
|
||||
"alias": "Alias",
|
||||
|
|
@ -997,7 +997,7 @@
|
|||
"zoom": "Zoom",
|
||||
"invalid": "Inválido",
|
||||
"conflict": "Conflicto",
|
||||
"checkToggle": "Compruebe la lista de tareas para cambiar",
|
||||
"checkToggle": "Alternar casilla de tarea",
|
||||
"heading1": "Encabezado 1",
|
||||
"heading2": "Encabezado 2",
|
||||
"heading3": "Encabezado 3",
|
||||
|
|
@ -1089,8 +1089,8 @@
|
|||
"refresh": "Actualizar",
|
||||
"logout": "Cierre de sesión",
|
||||
"refreshUser": "Información del usuario actualizada",
|
||||
"insertBottom": "Abrir debajo de la pestaña",
|
||||
"insertRight": "Abrir a la derecha la pestaña",
|
||||
"insertBottom": "Abrir debajo",
|
||||
"insertRight": "Abrir a la derecha",
|
||||
"account1": "Conviértete en miembro pago",
|
||||
"account4": "Actualizar a miembro suscrito",
|
||||
"account2": "Copia de seguridad y sincronización de datos cifrados de extremo a extremo",
|
||||
|
|
@ -1129,7 +1129,7 @@
|
|||
"appearance2": "Selecciona el tema de resaltado de sintaxis utilizado en el modo claro",
|
||||
"appearance1": "Tema del bloque de código",
|
||||
"appearance10": "Configuración del botón de cierre",
|
||||
"appearance11": "encoger a la bandeja después de hacer clic en el botón de cierre",
|
||||
"appearance11": "Minimizar a la bandeja del sistema después de hacer clic en el botón de cierre",
|
||||
"appearance16": "Barra de estado inferior",
|
||||
"appearance17": "Al habilitar, la barra de estado se ocultará",
|
||||
"appearance18": "Configurar el interruptor de mensajes de la barra de estado",
|
||||
|
|
@ -1226,13 +1226,13 @@
|
|||
"graphConfig2": "Filtro de recuento de referencias",
|
||||
"selectOpen": "Seleccionar siempre el documento abierto",
|
||||
"selectOpen1": "Seleccionar documento abierto",
|
||||
"closeAll": "Cierra todas las pestañas",
|
||||
"closeAll": "Cerrar todas las pestañas",
|
||||
"closeOthers": "Cerrar otras pestañas",
|
||||
"closeLeft": "Cerrar pestañas a la izquierda",
|
||||
"closeRight": "Cerrar pestañas a la derecha",
|
||||
"closeUnmodified": "Cerrar pestañas sin modificar",
|
||||
"newFileTip": "Por favor, abra primero un cuaderno de notas",
|
||||
"copyBlockRef": "Copiar bloque referencia",
|
||||
"copyBlockRef": "Copiar referencia de bloque",
|
||||
"copyBlockEmbed": "Copiar bloque incrustado",
|
||||
"copyMarkdown": "Copiar como Markdown",
|
||||
"linkLevel": "Profundidad",
|
||||
|
|
@ -1341,7 +1341,7 @@
|
|||
"nameEmpty": "El nombre está vacío",
|
||||
"ordered-list": "Lista ordenada",
|
||||
"outdent": "Reducir sangría",
|
||||
"outlineOutdent": "Lista de contorno sin sangría",
|
||||
"outlineOutdent": "Disminuir nivel de esquema",
|
||||
"outlineOutdentTip": "Después de habilitar, el outdent utilizará la lógica de esquema de la lista, es decir, moviendo los elementos de la lista debajo del padre",
|
||||
"spellcheck": "Corrección ortográfica",
|
||||
"spellcheckTip": "Al activarlo se usará el corrector ortográfico integrado del navegador. Por favor, seleccione los idiomas a comprobar en la configuración del navegador",
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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 תווים",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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 文字に制限されています",
|
||||
|
|
|
|||
|
|
@ -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자로 제한됩니다",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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 символами",
|
||||
|
|
|
|||
|
|
@ -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ı",
|
||||
|
|
|
|||
|
|
@ -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 字元",
|
||||
|
|
|
|||
|
|
@ -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 字符",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
2
app/stage/protyle/js/lute/lute.min.js
vendored
2
app/stage/protyle/js/lute/lute.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -79,7 +79,7 @@ func setConfSnippet(c *gin.Context) {
|
|||
model.Conf.Save()
|
||||
|
||||
ret.Data = snippet
|
||||
util.BroadcastByType("main", "setSnippet", 0, "", snippet)
|
||||
model.PushReloadSnippet(snippet)
|
||||
}
|
||||
|
||||
func addVirtualBlockRefExclude(c *gin.Context) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ require (
|
|||
github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48
|
||||
github.com/88250/go-humanize v0.0.0-20240424102817-4f78fac47ea7
|
||||
github.com/88250/gulu v1.2.3-0.20251208021445-f93f2666eaac
|
||||
github.com/88250/lute v1.7.7-0.20251230035220-bc8ebaa605a4
|
||||
github.com/88250/lute v1.7.7-0.20260103021733-9fd554ae3f44
|
||||
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1
|
||||
github.com/ClarkThan/ahocorasick v0.0.0-20231011042242-30d1ef1347f4
|
||||
github.com/ConradIrwin/font v0.2.1
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950 h1:Pa5hMiBceT
|
|||
github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/88250/gulu v1.2.3-0.20251208021445-f93f2666eaac h1:EC80pY8zyR0gbL8ZLIBB4IPG/ia3ZHScrR/xt8zU8qU=
|
||||
github.com/88250/gulu v1.2.3-0.20251208021445-f93f2666eaac/go.mod h1:IQ5dXW9CjVmx6B7OfK1Y4ZBKTPMe9q1AkVoLGGzRbS8=
|
||||
github.com/88250/lute v1.7.7-0.20251230035220-bc8ebaa605a4 h1:t9gV+5keET8FsUuXzoYigXVMgB429iG3TEzfNQDREPo=
|
||||
github.com/88250/lute v1.7.7-0.20251230035220-bc8ebaa605a4/go.mod h1:WYyUw//5yVw9BJnoVjx7rI/3szsISxNZCYGOqTIrV0o=
|
||||
github.com/88250/lute v1.7.7-0.20260103021733-9fd554ae3f44 h1:ax+JaNRNpyH3MnisUepYgw5Eid/YdB7oqAmbptHwIBk=
|
||||
github.com/88250/lute v1.7.7-0.20260103021733-9fd554ae3f44/go.mod h1:WYyUw//5yVw9BJnoVjx7rI/3szsISxNZCYGOqTIrV0o=
|
||||
github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46 h1:Bq1JsDfVbHKUxNL/B2JXd8cC/1h6aFjrlXpGycnh0Hk=
|
||||
github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46/go.mod h1:fVfOloBzs2+W2VJCCbq60XIxc3yJHAZ0Gahv1oO0gyI=
|
||||
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY=
|
||||
|
|
|
|||
|
|
@ -272,9 +272,6 @@ func refreshCheckDownloadInstallPkg() {
|
|||
|
||||
time.Sleep(3 * time.Minute)
|
||||
checkDownloadInstallPkg()
|
||||
if "" != getNewVerInstallPkgPath() {
|
||||
util.PushMsg(Conf.Language(62), 15*1000)
|
||||
}
|
||||
}
|
||||
|
||||
func refreshAnnouncement() {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
"github.com/emirpasic/gods/sets/hashset"
|
||||
"github.com/siyuan-note/logging"
|
||||
"github.com/siyuan-note/siyuan/kernel/av"
|
||||
"github.com/siyuan-note/siyuan/kernel/conf"
|
||||
"github.com/siyuan-note/siyuan/kernel/filesys"
|
||||
"github.com/siyuan-note/siyuan/kernel/sql"
|
||||
"github.com/siyuan-note/siyuan/kernel/task"
|
||||
|
|
@ -38,6 +39,10 @@ import (
|
|||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
)
|
||||
|
||||
func PushReloadSnippet(snippet *conf.Snpt) {
|
||||
util.BroadcastByType("main", "setSnippet", 0, "", snippet)
|
||||
}
|
||||
|
||||
func PushReloadPlugin(upsertCodePluginSet, upsertDataPluginSet, unloadPluginNameSet, uninstallPluginNameSet *hashset.Set, excludeApp string) {
|
||||
// 集合去重
|
||||
if nil != uninstallPluginNameSet {
|
||||
|
|
|
|||
|
|
@ -1595,7 +1595,7 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
|
|||
var upserts, removes []string
|
||||
var upsertTrees int
|
||||
// 可能需要重新加载部分功能
|
||||
var needReloadFlashcard, needReloadOcrTexts, needReloadPlugin bool
|
||||
var needReloadFlashcard, needReloadOcrTexts, needReloadPlugin, needReloadSnippet bool
|
||||
upsertCodePluginSet := hashset.New() // 插件代码变更 data/plugins/
|
||||
upsertDataPluginSet := hashset.New() // 插件存储数据变更 data/storage/petal/
|
||||
needUnindexBoxes, needIndexBoxes := map[string]bool{}, map[string]bool{}
|
||||
|
|
@ -1640,6 +1640,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
|
|||
absPath := filepath.Join(util.DataDir, file.Path)
|
||||
HandleAssetsChangeEvent(absPath)
|
||||
}
|
||||
|
||||
if file.Path == "/snippets/conf.json" {
|
||||
needReloadSnippet = true
|
||||
}
|
||||
}
|
||||
|
||||
removeWidgetDirSet, unloadPluginSet, uninstallPluginSet := hashset.New(), hashset.New(), hashset.New()
|
||||
|
|
@ -1686,6 +1690,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
|
|||
absPath := filepath.Join(util.DataDir, file.Path)
|
||||
HandleAssetsRemoveEvent(absPath)
|
||||
}
|
||||
|
||||
if file.Path == "/snippets/conf.json" {
|
||||
needReloadSnippet = true
|
||||
}
|
||||
}
|
||||
|
||||
for _, upsertPetal := range mergeResult.UpsertPetals {
|
||||
|
|
@ -1710,6 +1718,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
|
|||
PushReloadPlugin(upsertCodePluginSet, upsertDataPluginSet, unloadPluginSet, uninstallPluginSet, "")
|
||||
}
|
||||
|
||||
if needReloadSnippet {
|
||||
PushReloadSnippet(Conf.Snippet)
|
||||
}
|
||||
|
||||
for _, widgetDir := range removeWidgetDirSet.Values() {
|
||||
widgetDirPath := filepath.Join(util.DataDir, "widgets", widgetDir.(string))
|
||||
gulu.File.RemoveEmptyDirs(widgetDirPath)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue