Compare commits

...

8 Commits

Author SHA1 Message Date
zsviczian
6689d9497c 2.14.1
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
2025-08-05 19:17:20 +02:00
zsviczian
3e86419421 Merge pull request #2431 from dmscode/zh-2025-08-02
Update zh-cn.ts to e574d84
2025-08-05 18:16:52 +02:00
dmscode
d2d4f16ebd Update zh-cn.ts to e574d84 2025-08-02 06:48:05 +08:00
zsviczian
e574d84b84 2.14.1-beta-2, 0.18.0-27 2025-08-01 20:49:47 +02:00
zsviczian
8f3ace89ea Merge pull request #2427 from dmscode/zh-2025-07-29
Update zh-cn.ts to 41065ce
2025-07-29 18:42:56 +02:00
zsviczian
e4e4a07aa8 Merge pull request #2426 from Joakim31/master
Update es.ts to 01b0b64a
2025-07-29 07:49:43 +02:00
dmscode
7a90bf753f Update zh-cn.ts to 41065ce 2025-07-29 13:30:36 +08:00
Joakim31
6221d985ac Update es.ts to 01b0b64a 2025-07-28 20:10:04 -05:00
13 changed files with 246 additions and 38 deletions

View File

@@ -1,7 +1,7 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.14.1-beta-1",
"version": "2.14.1",
"minAppVersion": "1.5.7",
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
"author": "Zsolt Viczian",

View File

@@ -1,7 +1,7 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.14.0",
"version": "2.14.1",
"minAppVersion": "1.5.7",
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
"author": "Zsolt Viczian",

8
package-lock.json generated
View File

@@ -11,7 +11,7 @@
"dependencies": {
"@popperjs/core": "^2.11.8",
"@zsviczian/colormaster": "^1.2.2",
"@zsviczian/excalidraw": "0.18.0-25",
"@zsviczian/excalidraw": "0.18.0-27",
"chroma-js": "^3.1.2",
"clsx": "^2.0.0",
"es6-promise-pool": "2.5.0",
@@ -3494,9 +3494,9 @@
"license": "MIT"
},
"node_modules/@zsviczian/excalidraw": {
"version": "0.18.0-25",
"resolved": "https://registry.npmjs.org/@zsviczian/excalidraw/-/excalidraw-0.18.0-25.tgz",
"integrity": "sha512-aZKkzm1ENNUpwf9ANR+RA34fk2FYZNheHWNFj9CkNig/28bsS/MSVntWJNbk1qcqEQOdxhJkRhVN6NYlUtAZjA==",
"version": "0.18.0-27",
"resolved": "https://registry.npmjs.org/@zsviczian/excalidraw/-/excalidraw-0.18.0-27.tgz",
"integrity": "sha512-cigzCO65+EB+Y4G9LYEK/kVf2R3nNqNjEhGWqi5tZ0AcHEKPsMHAn6CtU36V6crRdojZLtyg5RASIdkxy4zZCA==",
"dependencies": {
"@braintree/sanitize-url": "6.0.2",
"@excalidraw/random-username": "1.1.0",

View File

@@ -23,7 +23,7 @@
"license": "MIT",
"dependencies": {
"@popperjs/core": "^2.11.8",
"@zsviczian/excalidraw": "0.18.0-26",
"@zsviczian/excalidraw": "0.18.0-28",
"chroma-js": "^3.1.2",
"clsx": "^2.0.0",
"@zsviczian/colormaster": "^1.2.2",

View File

@@ -262,6 +262,7 @@ export const FRONTMATTER_KEYS:{[key:string]: {name: string, type: string, depric
"iframe-theme": {name: "excalidraw-iframe-theme", type: "text", depricated: true},
"embeddable-theme": {name: "excalidraw-embeddable-theme", type: "text"},
"open-as-markdown": {name: "excalidraw-open-md", type: "checkbox"},
"embed-as-markdown": {name: "excalidraw-embed-md", type: "checkbox"},
};
export const CaptureUpdateAction = {

View File

@@ -710,7 +710,7 @@ const isTextOnlyEmbed = (internalEmbedEl: Element):boolean => {
if(!src) return true; //technically this does not mean this is a text only embed, but still should abort further processing
const fnameParts = getEmbeddedFilenameParts(src);
return !(fnameParts.hasArearef || fnameParts.hasGroupref || fnameParts.hasFrameref || fnameParts.hasClippedFrameref) &&
(fnameParts.hasBlockref || fnameParts.hasSectionref)
(fnameParts.hasBlockref || fnameParts.hasSectionref) && fnameParts.blockref !== "as-image"
}
const tmpObsidianWYSIWYG = async (
@@ -724,6 +724,9 @@ const tmpObsidianWYSIWYG = async (
const file = app.vault.getAbstractFileByPath(ctx.sourcePath);
if(!(file instanceof TFile)) return;
if(!plugin.isExcalidrawFile(file)) return;
if(ctx.frontmatter?.["excalidraw-embed-md"]) {
return;
}
//@ts-ignore
if (ctx.remainingNestLevel < 4) {

149
src/lang/langDiffWithEn.js Normal file
View File

@@ -0,0 +1,149 @@
/**
* Language Pack Diff Checker Script
*
* Purpose:
* Compare src/lang/locale/en.ts and a target language file (e.g. zh-cn.ts), output missing and extra keys.
* Output is color-coded:
* - Green: Key exists in en.ts but missing in the target language file
* - Red: Key exists in the target language file but not in en.ts
* - Yellow: The same key exists in both files but the line numbers are different
*
* Dependencies:
* Node.js environment, no extra dependencies required.
*
* Usage:
* 1. Open a terminal in this file's directory (or project root).
* 2. Run:
* node src/lang/langDiffWithEn.js zh-cn
* # or node src/lang/langDiffWithEn.js ja
* # The argument is the language file name (without extension), default is zh-cn
*
* Output:
* + (green): Key exists in en.ts but missing in the target language file
* - (red): Key exists in the target language file but not in en.ts
* ! (yellow): The same key exists in both files but the line numbers are different
* If there is no output, the two files have identical keys.
*/
/**
* 语言包差异检测脚本
*
* 用途:
* 比较 src/lang/locale/en.ts 与指定语言文件(如 zh-cn.ts中的 key输出缺失和多余的 key。
* 输出内容会用不同颜色区分:
* - 绿色en.ts 有但目标语言缺失的 key
* - 红色:目标语言有但 en.ts 没有的 key
* - 黄色:相同的 key 所在的行号不相同
*
* 依赖:
* Node.js 环境,无需额外依赖。
*
* 用法:
* 1. 在命令行进入本文件所在目录(或项目根目录)。
* 2. 运行:
* node src/lang/langDiffWithEn.js zh-cn
* # 或 node src/lang/langDiffWithEn.js ja
* # 参数为语言文件名(不带扩展名),默认为 zh-cn
*
* 输出说明:
* + 开头绿色en.ts 有但目标语言缺失的 key
* - 开头(红色):目标语言有但 en.ts 没有的 key
* ! 开头(黄色):相同的 key 所在的行号不相同
* 若无输出则表示两个文件 key 完全一致。
*/
const fs = require("fs");
const path = require("path");
/**
* 读取 locale 文件夹下指定语言和 en.ts 文件,逐行解析键值和行号
* @param lang 语言文件名(不含扩展名),如 zh-cn
* @returns { en: Record<string, {value: string, line: number}>, lang: Record<string, {value: string, line: number}> }
*/
function readLocaleFiles(lang = "zh-cn") {
// 构造 locale 目录路径
const localeDir = path.join(__dirname, "./locale");
// 获取 en.ts 文件路径
const enFile = path.join(localeDir, "en.ts");
// 获取指定语言文件路径
const langFile = path.join(localeDir, `${lang}.ts`);
/**
* 解析指定的语言文件,提取每个 key 的值和所在行号
* @param file 文件路径
* @returns {Record<string, {value: string, line: number}>}
*/
const parse = (file) => {
// 读取文件内容并按行分割
const lines = fs.readFileSync(file, "utf8").split(/\r?\n/);
const result = {};
let inExport = false;
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
// 检查是否进入 export default 块
if (!inExport && line.includes("export default")) {
inExport = true;
continue;
}
if (!inExport) continue;
// 匹配 key: "value", 格式的行
const m = line.match(/^\s*([A-Z0-9_]+)\s*:\s*.*?,?$/);
if (m) {
let key = m[1];
// 保存 key 及其所在行号
result[key] = i + 1;
}
}
return result;
};
// 返回 en 和指定语言的解析结果
return {
en: parse(enFile),
lang: parse(langFile),
};
}
/**
* 比较 en 和 lang 的 key/value输出差异
*/
function diffLang(lang = "zh-cn") {
const { en, lang: l } = readLocaleFiles(lang);
const allKeys = new Set([...Object.keys(en), ...Object.keys(l)]);
const diffs = [];
for (const key of allKeys) {
if (!(key in en)) {
diffs.push(`- ${key}: ${l[key]}`);
} else if (!(key in l)) {
diffs.push(`+ ${key}: ${en[key]}`);
} else {
if (en[key] !== l[key]) {
diffs.push(`! ${key}: en: ${en[key]} <--> lang: ${l[key]}`);
}
}
}
return diffs;
}
// CLI
if (require.main === module) {
const lang = process.argv[2] || "zh-cn";
const diffs = diffLang(lang);
if (diffs.length === 0) {
console.log(`语言文件 ${lang} 与 en.ts 无差异`);
} else {
diffs.forEach((line) => {
if (line.startsWith("+")) {
// 绿色
console.log("\x1b[32m%s\x1b[0m", line);
} else if (line.startsWith("-")) {
// 红色
console.log("\x1b[31m%s\x1b[0m", line);
} else if (line.startsWith("!")) {
// 黄色
console.log("\x1b[33m%s\x1b[0m", line);
} else {
// 默认
console.log(line);
}
});
}
}

View File

@@ -419,7 +419,8 @@ FILENAME_HEAD: "Filename",
SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:
"...even if the file has the <b>excalidraw-open-md: true</b> frontmatter key.<br>" +
"When this setting is off and the file is set to open in md by default, the hover preview will show the " +
"markdown side of the document.",
"markdown side of the document.<br>" +
"Note: <b>excalidraw-open-md</b> is different from <b>excalidraw-embed-md</b>. If <b>excalidraw-embed-md</b> is set to true, the hover preview will always show the markdown side, regardless of this setting. To force image rendering when embedding, use <code>![[drawing#^as-image]]</code> in your markdown file.",
SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME: "Render as image when in markdown reading mode of an Excalidraw file",
SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:
"When you are in markdown reading mode (aka. reading the back side of the drawing) should the Excalidraw drawing be rendered as an image? " +

View File

@@ -83,10 +83,10 @@ export default {
INSERT_PDF: "Insertar archivo PDF desde la bóveda",
INSERT_LAST_ACTIVE_PDF_PAGE_AS_IMAGE: "Insertar última página PDF activa como imagen",
UNIVERSAL_ADD_FILE: "Insertar CUALQUIER archivo",
INSERT_CARD: "Agregar tarjeta_de_reverso de nota",
CONVERT_CARD_TO_FILE: "Mover tarjeta_de_reverso de nota a Archivo",
INSERT_CARD: "Agregar tarjeta al reverso-de-la-nota",
CONVERT_CARD_TO_FILE: "Mover tarjeta del reverso-de-la-nota a un Archivo",
ERROR_TRY_AGAIN: "Por favor, inténtalo de nuevo.",
PASTE_CODEBLOCK: "Pegar un bloque de código",
PASTE_CODEBLOCK: "Pegar un Bloque de Código",
INSERT_LATEX:
`Insertar fórmula LaTeX (ej. \\binom{n}{k} = \\frac{n!}{k!(n-k)!}).`,
ENTER_LATEX: "Ingresa una expresión LaTeX válida",
@@ -192,7 +192,18 @@ export default {
SAVE_IS_TAKING_LONG: "Guardar tu archivo anterior está tomando mucho tiempo. Por favor espera...",
SAVE_IS_TAKING_VERY_LONG: "Para un mejor rendimiento, considera dividir bosquejos grandes en varios archivos más pequeños.",
//ContentSearcher.ts
SEARCH_COPIED_TO_CLIPBOARD: "Markdown listo en el portapapeles",
SEARCH_COPY_TO_CLIPBOARD_ARIA: "Copia todo el diálogo de configuración al portapapeles como Markdown. Ideal para usar con herramientas como ChatGPT para buscar y entender la configuración.",
SEARCH_SHOWHIDE_ARIA: "Mostrar/Ocultar barra de búsqueda",
SEARCH_NEXT: "Siguiente",
SEARCH_PREVIOUS: "Anterior",
//settings.ts
NOTEBOOKLM_LINK_ARIA: "Pídele ayuda a NotebookLM sobre el complemento. Este modelo viene precargado con todas mis transcripciones de videos, notas de lanzamiento y otro contenido útil. Chatea con NotebookLM para explorar mis más de 250 videos y la documentación de Excalidraw.",
NOTEBOOKLM_LINK_TEXT: "Aprende sobre el complemento. Accede a la base de conocimientos de NotebookLM.",
LINKS_BUGS_ARIA: "Reporta errores y solicita nuevas funciones en la página de GitHub del complemento",
LINKS_BUGS: "Reportar Errores",
LINKS_YT_ARIA: "Visita mi canal de YouTube para aprender sobre Pensamiento Visual y Excalidraw",
@@ -204,22 +215,20 @@ export default {
LINKS_VTW: "Únete a un Taller",
LINKS_BOOK_ARIA: "Lee Sketch Your Mind, mi libro sobre Pensamiento Visual",
LINKS_BOOK: "Lee el Libro",
SETTINGS_COPIED_TO_CLIPBOARD: "Markdown listo en el portapapeles",
SETTINGS_COPY_TO_CLIPBOARD: "Copiar como Texto",
SETTINGS_COPY_TO_CLIPBOARD_ARIA: "Copia todo el diálogo de configuración al portapapeles como Markdown. Ideal para usar con herramientas como ChatGPT para buscar y entender la configuración.",
LINKS_WIKI: "Wiki del Complemento",
LINKS_WIKI_ARIA: "Explora la Wiki del Complemento de Excalidraw",
RELEASE_NOTES_NAME: "Mostrar Notas de la Versión después de actualizar",
RELEASE_NOTES_DESC:
"<b><u>Activar:</u></b> Muestra las notas de la versión cada vez que actualices Excalidraw a una versión más reciente.<br>" +
"<b><u>Desactivar:</u></b> Modo silencioso. Aún puedes leer las notas de la versión en <a href='https://github.com/zsviczian/obsidian-excalidraw-plugin/releases'>GitHub</a>.",
"<b><u>Activado:</u></b> Muestra las notas de la versión cada vez que actualices Excalidraw a una versión más reciente.<br>" +
"<b><u>Desactivado:</u></b> Modo silencioso. Aún puedes leer las notas de la versión en <a href='https://github.com/zsviczian/obsidian-excalidraw-plugin/releases'>GitHub</a>.",
NEWVERSION_NOTIFICATION_NAME: "Notificación de Actualización del Complemento",
NEWVERSION_NOTIFICATION_DESC:
"<b><u>Activar:</u></b> Muestra una notificación cuando hay una nueva versión del complemento disponible.<br>" +
"<b><u>Desactivar:</u></b> Modo silencioso. Necesitarás verificar las actualizaciones del complemento en Complementos Comunitarios.",
"<b><u>Activado:</u></b> Muestra una notificación cuando hay una nueva versión del complemento disponible.<br>" +
"<b><u>Desactivado:</u></b> Modo silencioso. Necesitarás verificar las actualizaciones del complemento en Complementos Comunitarios.",
BASIC_HEAD: "Básico",
BASIC_DESC: `En la configuración "Básica", puedes configurar opciones como mostrar las notas de la versión después de las actualizaciones, recibir notificaciones de actualización del complemento, establecer la ubicación predeterminada para nuevos bosquejos, especificar la carpeta de Excalidraw para incrustar bosquejos en documentos activos, definir un archivo de plantilla de Excalidraw, y designar una carpeta de scripts de Excalidraw Automate para gestionar scripts de automatización.`,
BASIC_DESC: `En la configuración "Básico", puedes configurar opciones como mostrar las notas de la versión después de las actualizaciones, recibir notificaciones de actualización del complemento, establecer la ubicación predeterminada para nuevos bosquejos, especificar la carpeta de Excalidraw para incrustar bosquejos en documentos activos, definir un archivo de plantilla de Excalidraw, y designar una carpeta de scripts de Excalidraw Automate para gestionar scripts de automatización.`,
FOLDER_NAME: "Carpeta de Excalidraw (¡Sensible a MAYÚSCULAS/minúsculas!)",
FOLDER_DESC:
"Ubicación predeterminada para nuevos bosquejos. Si está vacío, los bosquejos se crearán en la raíz de la Bóveda.",
@@ -253,7 +262,7 @@ export default {
FOLDER_EMBED_DESC:
"Define en qué carpeta se colocará el bosquejo recién insertado " +
"al usar la acción de la paleta de comandos: 'Crear un nuevo bosquejo e incrustar en el documento activo'.<br>" +
"<b><u>Activar:</u></b> Usar carpeta de Excalidraw<br><b><u>Desactivar:</u></b> Usar la carpeta de adjuntos definida en la configuración de Obsidian.",
"<b><u>Activado:</u></b> Usar carpeta de Excalidraw<br><b><u>Desactivado:</u></b> Usar la carpeta de adjuntos definida en la configuración de Obsidian.",
TEMPLATE_NAME: "Archivo o carpeta de plantillas de Excalidraw (¡Sensible a MAYÚSCULAS/minúsculas!)",
TEMPLATE_DESC:
"Ruta de archivo o carpeta completa a la plantilla de Excalidraw.<br>" +
@@ -504,7 +513,7 @@ FILENAME_HEAD: "Nombre de archivo",
"activated Excalidraw.",
MAINWORKSPACE_PANE_NAME: "Abrir en el espacio de trabajo principal",
MAINWORKSPACE_PANE_DESC:
`Cuando usas ${labelCTRL()}+${labelALT()} y haces click en un enlace en Excalidraw, por defecto el plugin lo abrirá en un panel nuevo en la ventana activa. ` +
`Cuando usas ${labelCTRL()}+${labelALT()} y haces click en un enlace en Excalidraw, por defecto el complemento lo abrirá en un panel nuevo en la ventana activa. ` +
"Al activar esta opción, Excalidraw abrirá el enlace en un panel nuevo o ya existente en el espacio de trabajo principal. ",
LINK_BRACKETS_NAME: "Mostrar <code>[[corchetes]]</code> alrededor de los enlaces",
LINK_BRACKETS_DESC: `${
@@ -633,7 +642,7 @@ FILENAME_HEAD: "Nombre de archivo",
"Puede que quieras desactivar esta opción si sospechas que el caché no se está actualizando correctamente.",
EMBED_IMAGE_CACHE_CLEAR: "Vaciar caché de imágenes",
BACKUP_CACHE_CLEAR: "Eliminar copias de seguridad",
BACKUP_CACHE_CLEAR_CONFIRMATION: "Esta acción eliminará todas las copias de seguridad de los bosquejos de Excalidraw. Las copias de seguridad se utilizan como medida de seguridad en caso de que tu archivo de bosquejo se dañe. Cada vez que abres Obsidian, el plugin elimina automáticamente las copias de seguridad de los archivos que ya no existen en tu Bóveda. ¿Estás seguro de que quieres borrar todas las copias de seguridad?",
BACKUP_CACHE_CLEAR_CONFIRMATION: "Esta acción eliminará todas las copias de seguridad de los bosquejos de Excalidraw. Las copias de seguridad se utilizan como medida de seguridad en caso de que tu archivo de bosquejo se dañe. Cada vez que abres Obsidian, el complemento elimina automáticamente las copias de seguridad de los archivos que ya no existen en tu Bóveda. ¿Estás seguro de que quieres borrar todas las copias de seguridad?",
EMBED_REUSE_EXPORTED_IMAGE_NAME:
"Si se encuentra, usar la imagen ya exportada para la vista previa",
EMBED_REUSE_EXPORTED_IMAGE_DESC:
@@ -702,7 +711,7 @@ FILENAME_HEAD: "Nombre de archivo",
EXPORT_SYNC_NAME:
"Mantiene los nombres de archivo .SVG y/o .PNG sincronizados con el archivo del bosquejo",
EXPORT_SYNC_DESC:
"Cuando está activado, el plugin actualizará automáticamente el nombre de los archivos .SVG y/o .PNG cuando el bosquejo en la misma carpeta (y con el mismo nombre) sea renombrado. " +
"Cuando está activado, el complemento actualizará automáticamente el nombre de los archivos .SVG y/o .PNG cuando el bosquejo en la misma carpeta (y con el mismo nombre) sea renombrado. " +
"El complemento también eliminará automáticamente los archivos .SVG y/o .PNG cuando el bosquejo en la misma carpeta (y con el mismo nombre) sea eliminado. ",
EXPORT_SVG_NAME: "Auto-exportar SVG",
EXPORT_SVG_DESC:
@@ -718,7 +727,7 @@ FILENAME_HEAD: "Nombre de archivo",
EXPORT_BOTH_DARK_AND_LIGHT_DESC: "Cuando está habilitado, Excalidraw exportará dos archivos en lugar de uno: nombre-archivo.dark.png, nombre-archivo.light.png y/o nombre-archivo.dark.svg y nombre-archivo.light.svg<br>"+
"Se exportarán archivos dobles tanto si la autoexportación de SVG o PNG (o ambos) está habilitada, como al hacer clic en exportar en una sola imagen.",
COMPATIBILITY_HEAD: "Funciones de compatibilidad",
COMPATIBILITY_DESC: "Solo debes habilitar estas funciones si tienes una razón de peso para querer trabajar con archivos de excalidraw.com en lugar de archivos Markdown. Muchas de las funciones del plugin no son compatibles con los archivos heredados. Un caso de uso típico sería si configuras tu bóveda sobre una carpeta de proyecto de Visual Studio Code y también quieres acceder a los bosquejos .excalidraw desde allí. Otro caso de uso podría ser usar Excalidraw en Logseq y Obsidian en paralelo.",
COMPATIBILITY_DESC: "Solo debes habilitar estas funciones si tienes una razón de peso para querer trabajar con archivos de excalidraw.com en lugar de archivos Markdown. Muchas de las funciones del complemento no son compatibles con los archivos heredados. Un caso de uso típico sería si configuras tu bóveda sobre una carpeta de proyecto de Visual Studio Code y también quieres acceder a los bosquejos .excalidraw desde allí. Otro caso de uso podría ser usar Excalidraw en Logseq y Obsidian en paralelo.",
DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME: "Linter compatibility",
DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC: "Excalidraw es sensible a la estructura del archivo debajo de <code># Excalidraw Data</code>. La revisión automática de documentos (linting) puede crear errores en los datos de Excalidraw. " +
"Si bien he hecho un esfuerzo para que la carga de datos sea resistente a los " +
@@ -730,7 +739,7 @@ FILENAME_HEAD: "Nombre de archivo",
PRESERVE_TEXT_AFTER_DRAWING_DESC: "Preserva el texto después de la sección ## Bosquejo del archivo Markdown. Esto puede tener un impacto muy leve en el rendimiento al guardar bosquejos muy grandes.",
DEBUGMODE_NAME: "Habilitar mensajes de depuración",
DEBUGMODE_DESC: "Recomiendo reiniciar Obsidian después de habilitar o deshabilitar esta configuración. Esto habilita los mensajes de depuración en la consola. Esto es útil para solucionar problemas. " +
"Si estás experimentando problemas con el plugin, por favor, habilita esta configuración, reproduce el problema e incluye el registro de la consola en el problema que reportes en <a href='https://github.com/zsviczian/obsidian-excalidraw-plugin/issues'>GitHub</a>",
"Si estás experimentando problemas con el complemento, por favor, habilita esta configuración, reproduce el problema e incluye el registro de la consola en el problema que reportes en <a href='https://github.com/zsviczian/obsidian-excalidraw-plugin/issues'>GitHub</a>",
SLIDING_PANES_NAME: "Soporte para el complemento Sliding Panes",
SLIDING_PANES_DESC:
"Necesitas reiniciar Obsidian para que este cambio surta efecto.<br>" +
@@ -781,11 +790,11 @@ FILENAME_HEAD: "Nombre de archivo",
"sus parámetros y una breve descripción mientras escribes. El sugeridor de campos es la documentación más actualizada de la API.",
FIELD_SUGGESTER_NAME: "Habilitar Sugeridor de Campos",
FIELD_SUGGESTER_DESC:
"El sugeridor de campos, tomado de los plugins Breadcrumbs y Templater, mostrará un menú de autocompletar " +
"El sugeridor de campos, tomado de los complementos Breadcrumbs y Templater, mostrará un menú de autocompletar " +
"cuando escribas <code>excalidraw-</code> o <code>ea.</code> , con descripciones de las funciones como pistas para cada elemento en la lista.",
STARTUP_SCRIPT_NAME: "Script de inicio",
STARTUP_SCRIPT_DESC:
"Si está configurado, Excalidraw ejecutará el script al iniciar el plugin. Esto es útil si quieres establecer cualquiera de los hooks de Excalidraw Automate. El script de inicio es un archivo Markdown " +
"Si está configurado, Excalidraw ejecutará el script al iniciar el complemento. Esto es útil si quieres establecer cualquiera de los hooks de Excalidraw Automate. El script de inicio es un archivo Markdown " +
"que debe contener el código Javascript que quieres ejecutar cuando Excalidraw se inicie",
STARTUP_SCRIPT_BUTTON_CREATE: "Crear script de inicio",
STARTUP_SCRIPT_BUTTON_OPEN: "Abrir script de inicio",
@@ -810,7 +819,7 @@ FILENAME_HEAD: "Nombre de archivo",
EXCALIDRAW_PROPERTIES_DESC: "Activa esta configuración para cargar las propiedades de los documentos de Excalidraw en el sugeridor de propiedades de Obsidian al iniciar el complemento. "+
"Habilitar esta función simplifica el uso de las propiedades de frontmatter de Excalidraw, permitiéndote aprovechar muchas configuraciones poderosas. Si prefieres no cargar estas propiedades automáticamente, " +
"puedes deshabilitar esta función, pero tendrás que eliminar manualmente cualquier propiedad no deseada del sugeridor. " +
"Ten en cuenta que activar esta configuración requiere reiniciar el plugin, ya que las propiedades se cargan al inicio.",
"Ten en cuenta que activar esta configuración requiere reiniciar el complemento, ya que las propiedades se cargan al inicio.",
FONTS_HEAD: "Fuentes",
FONTS_DESC: "Configura los tipos de letra locales y las fuentes CJK (chino, japonés y coreano) descargadas para Excalidraw.",
CUSTOM_FONT_HEAD: "Fuente local",
@@ -829,7 +838,7 @@ FILENAME_HEAD: "Nombre de archivo",
OFFLINE_CJK_NAME: "Soporte de fuentes CJK (chino, japonés y coreano) sin conexión",
OFFLINE_CJK_DESC:
`<strong>Los cambios que hagas aquí solo se aplicarán después de reiniciar Obsidian.</strong><br>
Excalidraw.com ofrece fuentes CJK (chino, japonés, coreano) escritas a mano. Por defecto, estas fuentes no se incluyen en el plugin de forma local, sino que se obtienen de internet.
Excalidraw.com ofrece fuentes CJK (chino, japonés, coreano) escritas a mano. Por defecto, estas fuentes no se incluyen en el complemento de forma local, sino que se obtienen de internet.
Si prefieres que Excalidraw funcione completamente sin conexión a internet, puedes descargar los <a href="https://github.com/zsviczian/obsidian-excalidraw-plugin/raw/refs/heads/master/assets/excalidraw-fonts.zip" target="_blank">archivos de fuentes necesarios desde GitHub</a>.
Después de descargarlos, descomprime el contenido en una carpeta dentro de tu Bóveda.<br>
La precarga de fuentes afectará el rendimiento al iniciar. Por esta razón, puedes seleccionar qué fuentes cargar.`,
@@ -960,7 +969,7 @@ FILENAME_HEAD: "Nombre de archivo",
ES_FILENAME_VISIBLE: "Nombre de archivo visible",
ES_BACKGROUND_HEAD: "Color de fondo de la nota incrustada",
ES_BACKGROUND_DESC_INFO: "Haz click aquí para más información sobre los colores",
ES_BACKGROUND_DESC_DETAIL: "El color de fondo afecta solo al modo de vista previa del incrustado de Markdown. Al editar, sigue el tema claro/oscuro de Obsidian, según lo establecido para la escena (a través de la propiedad del documento) o en la configuración del plugin. El color de fondo tiene dos capas: el color de fondo del elemento (capa inferior) y un color encima (capa superior). Seleccionar 'Coincidir con el color de fondo del elemento' significa que ambas capas siguen el color del elemento. Seleccionar 'Coincidir con el lienzo' o un color de fondo específico mantiene la capa de fondo del elemento. Establecer la opacidad (ej., 50%) mezcla el lienzo o el color seleccionado con el color de fondo del elemento. Para eliminar la capa de fondo del elemento, establece el color del elemento en transparente en el editor de propiedades de Excalidraw. Esto hace que solo la capa superior sea efectiva.",
ES_BACKGROUND_DESC_DETAIL: "El color de fondo afecta solo al modo de vista previa del incrustado de Markdown. Al editar, sigue el tema claro/oscuro de Obsidian, según lo establecido para la escena (a través de la propiedad del documento) o en la configuración del complemento. El color de fondo tiene dos capas: el color de fondo del elemento (capa inferior) y un color encima (capa superior). Seleccionar 'Coincidir con el color de fondo del elemento' significa que ambas capas siguen el color del elemento. Seleccionar 'Coincidir con el lienzo' o un color de fondo específico mantiene la capa de fondo del elemento. Establecer la opacidad (ej., 50%) mezcla el lienzo o el color seleccionado con el color de fondo del elemento. Para eliminar la capa de fondo del elemento, establece el color del elemento en transparente en el editor de propiedades de Excalidraw. Esto hace que solo la capa superior sea efectiva.",
ES_BACKGROUND_MATCH_ELEMENT: "Coincidir con el color de fondo del elemento",
ES_BACKGROUND_MATCH_CANVAS: "Coincidir con el color de fondo del lienzo",
ES_BACKGROUND_COLOR: "Color de fondo",

View File

@@ -195,12 +195,15 @@ export default {
//ContentSearcher.ts
SEARCH_COPIED_TO_CLIPBOARD: "Markdown 已复制到剪贴板",
SEARCH_COPY_TO_CLIPBOARD_ARIA: "将整个对话框复制为 Markdown 到剪贴板。非常适合搭配 ChatGPT 等工具进行搜索和理解。",
SEARCH_SHOWHIDE_ARIA : "显示/隐藏搜索栏" ,
SEARCH_NEXT: "下一个",
SEARCH_PREVIOUS: "上一个",
//settings.ts
NOTEBOOKLM_LINK_ARIA : "向 NotebookLM 咨询有关插件的帮助。此模型已预加载我的所有视频转录、发布说明以及其他有用内容。与 NotebookLM 聊天,探索我的 250+ 视频以及 Excalidraw 文档。" ,
NOTEBOOKLM_LINK_TEXT : "了解插件。访问 NotebookLM 知识库。" ,
LINKS_BUGS_ARIA: "在插件的 GitHub 页面报告错误和提交功能请求",
LINKS_BUGS: "报告错误",
LINKS_YT_ARIA: "访问我的 YouTube 频道学习视觉思维和 Excalidraw",
@@ -212,6 +215,8 @@ export default {
LINKS_VTW: "参加研讨会",
LINKS_BOOK_ARIA: "阅读我的视觉思维著作《Sketch Your Mind》",
LINKS_BOOK: "阅读书籍",
LINKS_WIKI : "插件 Wiki" ,
LINKS_WIKI_ARIA : "探索 Excalidraw 插件 Wiki" ,
RELEASE_NOTES_NAME: "显示更新说明",
RELEASE_NOTES_DESC:
@@ -414,7 +419,8 @@ FILENAME_HEAD: "文件名",
SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:
"...即使文件具有 `<b>excalidraw-open-md: true</b>` frontmatter 属性。<br>" +
"当此设置关闭且文件默认设置为以 md 格式打开时,悬停预览将显示文档的 Markdown 部分(背景笔记)。" +
"",
"<br>" +
"注意:<b>excalidraw-open-md</b> 与 <b>excalidraw-embed-md</b> 是不同的。如果 <b>excalidraw-embed-md</b> 设置为 true则悬停预览始终显示 markdown 部分,而不受此设置影响。要在嵌入时强制图像渲染,请在你的 markdown 文件中使用 <code>![[drawing#^as-image]]</code>。" ,
SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME: "Excalidraw 文件在 Markdown 阅读模式下渲染为图片",
SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:
"当您处于 Markdown 阅读模式即查看绘图的背景笔记Excalidraw 绘图是否应该渲染为图像?" +
@@ -943,7 +949,7 @@ FILENAME_HEAD: "文件名",
//IFrameActionsMenu.tsx
NARROW_TO_HEADING: "缩放至标题",
PIN_VIEW: "锁定视图",
DO_NOT_PIN_VIEW: "锁定视图",
DO_NOT_PIN_VIEW: "取消锁定视图",
NARROW_TO_BLOCK: "缩放至块",
SHOW_ENTIRE_FILE: "显示全部",
SELECT_SECTION: "从文档选择章节",

View File

@@ -192,7 +192,32 @@ export default {
SAVE_IS_TAKING_LONG: "儲存您之前的檔案花費的時間較長,請稍候...",
SAVE_IS_TAKING_VERY_LONG: "為了更好的效能,請考慮將大型繪圖拆分成幾個較小的檔案。",
//ContentSearcher.ts
SEARCH_COPIED_TO_CLIPBOARD: "Markdown 已複製到剪貼簿",
SEARCH_COPY_TO_CLIPBOARD_ARIA: "將整個對話框複製為 Markdown 到剪貼簿。非常適合搭配 ChatGPT 等工具進行搜尋和理解。",
SEARCH_SHOWHIDE_ARIA : "顯示/隱藏搜尋欄" ,
SEARCH_NEXT: "下一個",
SEARCH_PREVIOUS: "上一個",
//settings.ts
NOTEBOOKLM_LINK_ARIA : "向 NotebookLM 諮詢有關外掛的幫助。此模型已預載入我的所有影片轉錄、發佈說明以及其他有用內容。與 NotebookLM 聊天,探索我的 250+ 影片以及 Excalidraw 文件。" ,
NOTEBOOKLM_LINK_TEXT : "瞭解外掛。訪問 NotebookLM 知識庫。" ,
LINKS_BUGS_ARIA: "在外掛的 GitHub 頁面回報錯誤和提交功能請求",
LINKS_BUGS: "回報錯誤",
LINKS_YT_ARIA: "訪問我的 YouTube 頻道學習視覺思維和 Excalidraw",
LINKS_YT: "在 YouTube 學習",
LINKS_DISCORD_ARIA: "加入視覺思維研討會 Discord 伺服器",
LINKS_DISCORD: "加入社群",
LINKS_TWITTER: "關注我",
LINKS_VTW_ARIA: "瞭解視覺知識管理、Excalidraw、Obsidian、ExcaliBrain 等內容",
LINKS_VTW: "參加研討會",
LINKS_BOOK_ARIA: "閱讀我的視覺思維著作《Sketch Your Mind》",
LINKS_BOOK: "閱讀書籍",
LINKS_WIKI : "外掛 Wiki" ,
LINKS_WIKI_ARIA : "探索 Excalidraw 外掛 Wiki" ,
RELEASE_NOTES_NAME: "顯示更新說明",
RELEASE_NOTES_DESC:
"<b>開啟:</b>每次更新本外掛後,顯示最新發行版本的說明。<br>" +
@@ -922,8 +947,12 @@ FILENAME_HEAD: "檔名",
//IFrameActionsMenu.tsx
NARROW_TO_HEADING: "縮放至標題",
PIN_VIEW: "釘選視圖",
DO_NOT_PIN_VIEW: "取消釘選視圖",
NARROW_TO_BLOCK: "縮放至塊",
SHOW_ENTIRE_FILE: "顯示全部",
SELECT_SECTION: "從文件選擇區塊",
SELECT_VIEW: "從基礎選擇視圖",
ZOOM_TO_FIT: "縮放至合適大小",
RELOAD: "過載連結",
OPEN_IN_BROWSER: "在瀏覽器中開啟",

View File

@@ -18,13 +18,16 @@ I build this plugin in my free time, as a labor of love. Curious about the philo
<div class="ex-coffee-div"><a href="https://ko-fi.com/zsolt"><img src="https://storage.ko-fi.com/cdn/kofi6.png?v=6" border="0" alt="Buy Me a Coffee at ko-fi.com" height=45></a></div>
`,
"2.14.1":`
## New
- Added Spanish translation by [@Joakim31](https://github.com/Joakim31) [#2425](https://github.com/zsviczian/obsidian-excalidraw-plugin/pull/2425)
- Incremental minor updates from the main Excalidraw project.
## Fixed
- Excalidraw broke Obsidian's UI in Arabic, Persian, and Hebrew due to LTR, RTL conflict. [#2423](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2423)
- Styling issues impacting native Obsidian search/replace dialogs. [#2420](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2420)
- Now using native Obsidian attachment location function. 🙏 [mnaoumov](https://github.com/mnaoumov) [#2421](https://github.com/zsviczian/obsidian-excalidraw-plugin/pull/2421), potentially fixes [#179](https://github.com/RainCat1998/obsidian-custom-attachment-location/issues/179) of the Obsidian Custom Attachment Location plugin issue.
## New
- New frontmatter option \`excalidraw-embed-md\`. When set to \`true\`, embedding the drawing into a markdown note will render the "back of the note" (its markdown content) instead of rendering it as an image.
- If you want to always display the drawing as an image, even when \`excalidraw-embed-md\` is enabled, use the special embed syntax: \`![[drawing#^as-image]]\`. Here, \`as-image\` is a phantom block reference that forces image rendering.
- Added Spanish translation by [@Joakim31](https://github.com/Joakim31) [#2425](https://github.com/zsviczian/obsidian-excalidraw-plugin/pull/2425)
- Incremental minor updates from the main [Excalidraw project](https://github.com/excalidraw/excalidraw).
`,
"2.14.0":`
## A Big "Small" Update

View File

@@ -1067,6 +1067,13 @@ export const FRONTMATTER_KEYS_INFO: SuggesterInfo[] = [
desc: "If this key is present the file will be opened as a markdown file in the editor",
after: ": true",
},
{
field: "embed-md",
code: null,
desc: "If this key is present, when embedding the ![[image]] into a markdown document, it will be embedded as markdown, not as an image.\n" +
"If however you embed ![[image#^as-image]], i.e. you reference the 'as-image' block, then the image will be embedded as an image.",
after: ": true",
},
{
field: "autoexport",
code: null,