autumnnote 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,320 @@
1
+ /**
2
+ * es.js - Spanish locale
3
+ * Deep-merged over en.js; only keys that differ from English are listed.
4
+ */
5
+
6
+ /** @type {Partial<import('../../../types/index.js').AsnLocale>} */
7
+ export const es = {
8
+ toolbar: {
9
+ bold: 'Negrita (Ctrl+B)',
10
+ italic: 'Cursiva (Ctrl+I)',
11
+ underline: 'Subrayado (Ctrl+U)',
12
+ strikethrough: 'Tachado',
13
+ superscript: 'Superíndice',
14
+ subscript: 'Subíndice',
15
+ alignLeft: 'Alinear a la izquierda',
16
+ alignCenter: 'Centrar',
17
+ alignRight: 'Alinear a la derecha',
18
+ alignJustify: 'Justificar',
19
+ ul: 'Lista sin orden',
20
+ ol: 'Lista ordenada',
21
+ checklist: 'Lista de verificación',
22
+ indent: 'Aumentar sangría',
23
+ outdent: 'Reducir sangría',
24
+ undo: 'Deshacer (Ctrl+Z)',
25
+ redo: 'Rehacer (Ctrl+Y)',
26
+ hr: 'Línea horizontal',
27
+ link: 'Insertar enlace',
28
+ image: 'Insertar imagen',
29
+ video: 'Insertar vídeo',
30
+ emoji: 'Insertar emoji',
31
+ icon: 'Insertar icono FA',
32
+ table: 'Insertar tabla',
33
+ fontSize: 'Tamaño de fuente',
34
+ fontSizePlaceholder: 'Tamaño',
35
+ removeFormat: 'Eliminar formato',
36
+ direction: 'Cambiar dirección del texto (LTR / RTL)',
37
+ fontFamily: 'Fuente',
38
+ paragraphStyle: 'Estilo de párrafo',
39
+ paragraphStylePlaceholder: 'Estilo',
40
+ lineHeight: 'Interlineado',
41
+ lineHeightPlaceholder: '↕ Línea',
42
+ codeview: 'Vista de código HTML',
43
+ fullscreen: 'Pantalla completa',
44
+ shortcuts: 'Atajos de teclado (Ctrl+Shift+/)',
45
+ find: 'Buscar (Ctrl+F)',
46
+ findReplace: 'Buscar y reemplazar (Ctrl+H)',
47
+ inlineCode: 'Código en línea (Ctrl+`)',
48
+ print: 'Imprimir',
49
+ foreColor: 'Color del texto',
50
+ backColor: 'Color de resaltado',
51
+ chooseTextColor: 'Elegir color del texto',
52
+ chooseHighlightColor: 'Elegir color de resaltado',
53
+ customColor: 'Color personalizado',
54
+ insertTableLabel: 'Insertar tabla',
55
+ paragraphItems: {
56
+ p: 'Normal',
57
+ blockquote: 'Cita',
58
+ pre: 'Código',
59
+ },
60
+ },
61
+
62
+ linkDialog: {
63
+ ariaLabel: 'Insertar enlace',
64
+ title: 'Insertar enlace',
65
+ url: 'URL',
66
+ urlPlaceholder: 'https://',
67
+ displayText: 'Texto a mostrar',
68
+ textPlaceholder: 'Texto del enlace',
69
+ openInNewTab: 'Abrir en nueva pestaña',
70
+ insertBtn: 'Insertar',
71
+ cancelBtn: 'Cancelar',
72
+ },
73
+
74
+ imageDialog: {
75
+ ariaLabel: 'Insertar imagen',
76
+ title: 'Insertar imagen',
77
+ imageUrl: 'URL de imagen',
78
+ urlPlaceholder: 'https://example.com/image.png',
79
+ altText: 'Texto alternativo',
80
+ altPlaceholder: 'Describir la imagen',
81
+ alignment: 'Alineación',
82
+ alignNone: 'Ninguna',
83
+ alignLeft: 'Izquierda',
84
+ alignCenter: 'Centro',
85
+ alignRight: 'Derecha',
86
+ uploadLabel: 'O subir un archivo',
87
+ insertBtn: 'Insertar',
88
+ cancelBtn: 'Cancelar',
89
+ },
90
+
91
+ videoDialog: {
92
+ ariaLabel: 'Insertar vídeo',
93
+ title: 'Insertar vídeo',
94
+ videoUrl: 'URL del vídeo',
95
+ urlPlaceholder: 'YouTube, Vimeo o URL directa .mp4',
96
+ widthLabel: 'Ancho (px)',
97
+ widthPlaceholder: '560',
98
+ insertBtn: 'Insertar',
99
+ cancelBtn: 'Cancelar',
100
+ detected: (type) => `Detectado: ${type}`,
101
+ unknownFormat: 'Formato desconocido — se intentará incrustar el vídeo directamente',
102
+ invalidUrl: 'URL no válida — introduzca un enlace de vídeo válido.',
103
+ },
104
+
105
+ emojiDialog: {
106
+ ariaLabel: 'Insertar emoji',
107
+ title: 'Insertar emoji',
108
+ searchPlaceholder: 'Buscar emojis…',
109
+ all: 'Todos',
110
+ cancelBtn: 'Cancelar',
111
+ close: 'Cerrar',
112
+ categories: {
113
+ smileys: 'Caritas',
114
+ people: 'Personas',
115
+ animals: 'Animales',
116
+ food: 'Comida',
117
+ travel: 'Viajes',
118
+ objects: 'Objetos',
119
+ symbols: 'Símbolos',
120
+ },
121
+ },
122
+
123
+ iconDialog: {
124
+ ariaLabel: 'Insertar icono FA',
125
+ title: 'Insertar icono FA',
126
+ searchPlaceholder: 'Buscar iconos…',
127
+ all: 'Todos',
128
+ style: 'Estilo',
129
+ size: 'Tamaño',
130
+ color: 'Color',
131
+ useColor: ' Usar color',
132
+ selectHint: 'Seleccionar un icono',
133
+ insertBtn: 'Insertar icono FA',
134
+ cancelBtn: 'Cancelar',
135
+ close: 'Cerrar',
136
+ categories: {
137
+ popular: 'Popular',
138
+ interface: 'Interfaz',
139
+ navigation: 'Navegación',
140
+ media: 'Medios',
141
+ communication: 'Comunicación',
142
+ files: 'Archivos',
143
+ people: 'Personas',
144
+ objects: 'Objetos',
145
+ },
146
+ },
147
+
148
+ findReplace: {
149
+ findTitle: 'Buscar',
150
+ findReplaceTitle: 'Buscar y reemplazar',
151
+ findPlaceholder: 'Buscar…',
152
+ searchAriaLabel: 'Texto de búsqueda',
153
+ caseSensitive: '\u00a0Distinguir mayúsculas',
154
+ prevBtn: '← Anterior',
155
+ nextBtn: 'Siguiente →',
156
+ replacePlaceholder: 'Reemplazar con…',
157
+ replaceAriaLabel: 'Reemplazar con',
158
+ replaceBtn: 'Reemplazar',
159
+ replaceAllBtn: 'Reemplazar todo',
160
+ close: '×',
161
+ },
162
+
163
+ shortcutsDialog: {
164
+ title: 'Atajos de teclado',
165
+ ariaLabel: 'Atajos de teclado',
166
+ close: 'Cerrar',
167
+ shortcuts: [
168
+ {
169
+ category: 'Formato de texto',
170
+ items: [
171
+ { keys: 'Ctrl + B', action: 'Negrita' },
172
+ { keys: 'Ctrl + I', action: 'Cursiva' },
173
+ { keys: 'Ctrl + U', action: 'Subrayado' },
174
+ { keys: 'Ctrl + K', action: 'Insertar / editar enlace' },
175
+ ],
176
+ },
177
+ {
178
+ category: 'Historial',
179
+ items: [
180
+ { keys: 'Ctrl + Z', action: 'Deshacer' },
181
+ { keys: 'Ctrl + Y / Ctrl + Shift + Z', action: 'Rehacer' },
182
+ ],
183
+ },
184
+ {
185
+ category: 'Selección y navegación',
186
+ items: [
187
+ { keys: 'Ctrl + A', action: 'Seleccionar todo' },
188
+ { keys: 'Tab', action: 'Aumentar sangría / insertar espacios' },
189
+ { keys: 'Shift + Tab', action: 'Reducir sangría' },
190
+ ],
191
+ },
192
+ {
193
+ category: 'Portapapeles',
194
+ items: [
195
+ { keys: 'Ctrl + Shift + V', action: 'Pegar como texto plano' },
196
+ ],
197
+ },
198
+ {
199
+ category: 'Buscar y reemplazar',
200
+ items: [
201
+ { keys: 'Ctrl + F', action: 'Buscar en el documento' },
202
+ { keys: 'Ctrl + H', action: 'Buscar y reemplazar' },
203
+ ],
204
+ },
205
+ {
206
+ category: 'Editor',
207
+ items: [
208
+ { keys: 'Ctrl + Shift + /', action: 'Mostrar este diálogo de atajos' },
209
+ ],
210
+ },
211
+ ],
212
+ },
213
+
214
+ contextMenu: {
215
+ cut: 'Cortar',
216
+ copy: 'Copiar',
217
+ paste: 'Pegar',
218
+ bold: 'Negrita',
219
+ italic: 'Cursiva',
220
+ underline: 'Subrayado',
221
+ textColor: 'Color del texto',
222
+ highlightColor: 'Color de resaltado',
223
+ copyFormat: 'Copiar formato',
224
+ pasteFormat: 'Pegar formato',
225
+ removeFormat: 'Eliminar formato',
226
+ link: 'Insertar enlace',
227
+ image: 'Insertar imagen',
228
+ video: 'Insertar vídeo',
229
+ table: 'Insertar tabla',
230
+ back: 'Atrás',
231
+ noHighlight: 'Sin resaltado',
232
+ customColor: 'Color personalizado',
233
+ customColorLabel: 'Personalizado…',
234
+ },
235
+
236
+ statusbar: {
237
+ resizeHandle: 'Redimensionar editor',
238
+ words: (n) => `Palabras: ${n}`,
239
+ wordsLimit: (n, max) => `Palabras: ${n}/${max}`,
240
+ chars: (n) => `Caracteres: ${n}`,
241
+ charsLimit: (n, max) => `Caracteres: ${n}/${max}`,
242
+ },
243
+
244
+ tooltips: {
245
+ link: {
246
+ ariaLabel: 'Acciones de enlace',
247
+ openLink: 'Abrir enlace',
248
+ copyUrl: 'Copiar URL',
249
+ editLink: 'Editar enlace',
250
+ removeLink: 'Eliminar enlace',
251
+ },
252
+ image: {
253
+ ariaLabel: 'Acciones de imagen',
254
+ label: 'Imagen',
255
+ floatLeft: 'Flotar a la izquierda',
256
+ noFloat: 'Sin flotado',
257
+ alignCenter: 'Centrar',
258
+ floatRight: 'Flotar a la derecha',
259
+ originalSize: 'Tamaño original',
260
+ rotateLeft: 'Rotar a la izquierda',
261
+ rotateRight: 'Rotar a la derecha',
262
+ cropImage: 'Recortar imagen',
263
+ addCaption: 'Añadir / editar pie de foto',
264
+ deleteImage: 'Eliminar imagen',
265
+ },
266
+ code: {
267
+ ariaLabel: 'Acciones de bloque de código',
268
+ label: 'Código',
269
+ syntaxLanguage: 'Lenguaje de sintaxis',
270
+ syntaxAriaLabel: 'Lenguaje de sintaxis',
271
+ copyCode: 'Copiar código',
272
+ toggleWordWrap: 'Alternar ajuste de línea',
273
+ enableWordWrap: 'Activar ajuste de línea',
274
+ disableWordWrap: 'Desactivar ajuste de línea',
275
+ convertToParagraph: 'Convertir en párrafo',
276
+ deleteCodeBlock: 'Eliminar bloque de código',
277
+ },
278
+ table: {
279
+ ariaLabel: 'Acciones de tabla',
280
+ label: 'Tabla',
281
+ selectCells: 'Seleccionar celdas',
282
+ addRowAbove: 'Añadir fila encima',
283
+ addRowBelow: 'Añadir fila debajo',
284
+ deleteRow: 'Eliminar fila',
285
+ addColumnLeft: 'Añadir columna a la izquierda',
286
+ addColumnRight: 'Añadir columna a la derecha',
287
+ deleteColumn: 'Eliminar columna',
288
+ mergeCells: 'Combinar celdas',
289
+ unmergeCells: 'Separar celdas',
290
+ columnWidth: 'Ancho de columna',
291
+ rowHeight: 'Alto de fila',
292
+ tableBorderWidth: 'Grosor del borde de la tabla',
293
+ deleteTable: 'Eliminar tabla',
294
+ columnWidthPx: 'Ancho de columna (px)',
295
+ rowHeightPx: 'Alto de fila (px)',
296
+ tableBorderWidthPx: 'Grosor del borde (px)',
297
+ cancelBtn: 'Cancelar',
298
+ applyBtn: 'Aplicar',
299
+ },
300
+ video: {
301
+ ariaLabel: 'Acciones de vídeo',
302
+ label: 'Vídeo',
303
+ floatLeft: 'Flotar a la izquierda',
304
+ noFloat: 'Sin flotado',
305
+ alignCenter: 'Centrar',
306
+ floatRight: 'Flotar a la derecha',
307
+ originalSize: 'Tamaño original',
308
+ previewVideo: 'Vista previa de vídeo',
309
+ exitPreview: 'Salir de la vista previa',
310
+ deleteVideo: 'Eliminar vídeo',
311
+ },
312
+ },
313
+
314
+ errors: {
315
+ imageFormat: (type) =>
316
+ `El formato "${type}" no es compatible con los navegadores web. Por favor, conviértalo primero a JPEG, PNG o WebP.`,
317
+ imageSize: (maxSize) =>
318
+ `El archivo de imagen es demasiado grande. El tamaño máximo permitido es ${maxSize} MB.`,
319
+ },
320
+ };
@@ -0,0 +1,321 @@
1
+ /**
2
+ * fr.js - Français (French) locale
3
+ * Seules les clés différentes de en.js sont définies ici.
4
+ * Les clés manquantes sont complétées par en.js via deep-merge dans resolveLocale.
5
+ */
6
+
7
+ /** @type {Partial<import('../../../types/index.js').AsnLocale>} */
8
+ export const fr = {
9
+ toolbar: {
10
+ bold: 'Gras (Ctrl+B)',
11
+ italic: 'Italique (Ctrl+I)',
12
+ underline: 'Souligné (Ctrl+U)',
13
+ strikethrough: 'Barré',
14
+ superscript: 'Exposant',
15
+ subscript: 'Indice',
16
+ alignLeft: 'Aligner à gauche',
17
+ alignCenter: 'Centrer',
18
+ alignRight: 'Aligner à droite',
19
+ alignJustify: 'Justifier',
20
+ ul: 'Liste à puces',
21
+ ol: 'Liste numérotée',
22
+ checklist: 'Liste de tâches',
23
+ indent: 'Augmenter le retrait',
24
+ outdent: 'Diminuer le retrait',
25
+ undo: 'Annuler (Ctrl+Z)',
26
+ redo: 'Rétablir (Ctrl+Y)',
27
+ hr: 'Ligne horizontale',
28
+ link: 'Insérer un lien',
29
+ image: 'Insérer une image',
30
+ video: 'Insérer une vidéo',
31
+ emoji: 'Insérer un emoji',
32
+ icon: 'Insérer une icône FA',
33
+ table: 'Insérer un tableau',
34
+ fontSize: 'Taille de police',
35
+ fontSizePlaceholder: 'Taille',
36
+ removeFormat: 'Effacer la mise en forme',
37
+ direction: 'Basculer la direction du texte (LTR / RTL)',
38
+ fontFamily: 'Police',
39
+ paragraphStyle: 'Style de paragraphe',
40
+ paragraphStylePlaceholder: 'Style',
41
+ lineHeight: 'Interligne',
42
+ lineHeightPlaceholder: '\u2195 Ligne',
43
+ codeview: 'Afficher le code HTML',
44
+ fullscreen: 'Plein écran',
45
+ shortcuts: 'Raccourcis clavier (Ctrl+Shift+/)',
46
+ find: 'Rechercher (Ctrl+F)',
47
+ findReplace: 'Rechercher et remplacer (Ctrl+H)',
48
+ inlineCode: 'Code inline (Ctrl+`)',
49
+ print: 'Imprimer',
50
+ foreColor: 'Couleur du texte',
51
+ backColor: 'Couleur de surbrillance',
52
+ chooseTextColor: 'Choisir la couleur du texte',
53
+ chooseHighlightColor: 'Choisir la couleur de surbrillance',
54
+ customColor: 'Couleur personnalisée',
55
+ insertTableLabel: 'Insérer un tableau',
56
+ paragraphItems: {
57
+ p: 'Normal',
58
+ blockquote: 'Citation',
59
+ pre: 'Code',
60
+ },
61
+ },
62
+
63
+ linkDialog: {
64
+ ariaLabel: 'Insérer un lien',
65
+ title: 'Insérer un lien',
66
+ url: 'URL',
67
+ urlPlaceholder: 'https://',
68
+ displayText: 'Texte affiché',
69
+ textPlaceholder: 'Texte du lien',
70
+ openInNewTab: 'Ouvrir dans un nouvel onglet',
71
+ insertBtn: 'Insérer',
72
+ cancelBtn: 'Annuler',
73
+ },
74
+
75
+ imageDialog: {
76
+ ariaLabel: 'Insérer une image',
77
+ title: 'Insérer une image',
78
+ imageUrl: 'URL de l\'image',
79
+ urlPlaceholder: 'https://example.com/image.png',
80
+ altText: 'Texte alternatif',
81
+ altPlaceholder: 'Description de l\'image',
82
+ alignment: 'Alignement',
83
+ alignNone: 'Aucun',
84
+ alignLeft: 'Gauche',
85
+ alignCenter: 'Centre',
86
+ alignRight: 'Droite',
87
+ uploadLabel: 'Ou téléverser un fichier',
88
+ insertBtn: 'Insérer',
89
+ cancelBtn: 'Annuler',
90
+ },
91
+
92
+ videoDialog: {
93
+ ariaLabel: 'Insérer une vidéo',
94
+ title: 'Insérer une vidéo',
95
+ videoUrl: 'URL de la vidéo',
96
+ urlPlaceholder: 'YouTube, Vimeo ou URL .mp4 directe',
97
+ widthLabel: 'Largeur (px)',
98
+ widthPlaceholder: '560',
99
+ insertBtn: 'Insérer',
100
+ cancelBtn: 'Annuler',
101
+ detected: (type) => `Détecté\u00a0: ${type}`,
102
+ unknownFormat: 'Format inconnu \u2014 tentative d\'intégration directe',
103
+ invalidUrl: 'URL invalide \u2014 veuillez saisir un lien vidéo valide.',
104
+ },
105
+
106
+ emojiDialog: {
107
+ ariaLabel: 'Insérer un emoji',
108
+ title: 'Insérer un emoji',
109
+ searchPlaceholder: 'Rechercher des emojis\u2026',
110
+ all: 'Tout',
111
+ cancelBtn: 'Annuler',
112
+ close: 'Fermer',
113
+ categories: {
114
+ smileys: 'Smileys',
115
+ people: 'Personnes',
116
+ animals: 'Animaux',
117
+ food: 'Nourriture',
118
+ travel: 'Voyage',
119
+ objects: 'Objets',
120
+ symbols: 'Symboles',
121
+ },
122
+ },
123
+
124
+ iconDialog: {
125
+ ariaLabel: 'Insérer une icône FA',
126
+ title: 'Insérer une icône FA',
127
+ searchPlaceholder: 'Rechercher des icônes\u2026',
128
+ all: 'Tout',
129
+ style: 'Style',
130
+ size: 'Taille',
131
+ color: 'Couleur',
132
+ useColor: ' Utiliser la couleur',
133
+ selectHint: 'Sélectionner une icône',
134
+ insertBtn: 'Insérer une icône FA',
135
+ cancelBtn: 'Annuler',
136
+ close: 'Fermer',
137
+ categories: {
138
+ popular: 'Populaire',
139
+ interface: 'Interface',
140
+ navigation: 'Navigation',
141
+ media: 'Média',
142
+ communication: 'Communication',
143
+ files: 'Fichiers',
144
+ people: 'Personnes',
145
+ objects: 'Objets',
146
+ },
147
+ },
148
+
149
+ findReplace: {
150
+ findTitle: 'Rechercher',
151
+ findReplaceTitle: 'Rechercher et remplacer',
152
+ findPlaceholder: 'Rechercher\u2026',
153
+ searchAriaLabel: 'Texte à rechercher',
154
+ caseSensitive: '\u00a0Respecter la casse',
155
+ prevBtn: '\u2190 Préc.',
156
+ nextBtn: 'Suiv. \u2192',
157
+ replacePlaceholder: 'Remplacer par\u2026',
158
+ replaceAriaLabel: 'Remplacer par',
159
+ replaceBtn: 'Remplacer',
160
+ replaceAllBtn: 'Tout remplacer',
161
+ close: '\u00d7',
162
+ },
163
+
164
+ shortcutsDialog: {
165
+ title: 'Raccourcis clavier',
166
+ ariaLabel: 'Raccourcis clavier',
167
+ close: 'Fermer',
168
+ shortcuts: [
169
+ {
170
+ category: 'Mise en forme du texte',
171
+ items: [
172
+ { keys: 'Ctrl + B', action: 'Gras' },
173
+ { keys: 'Ctrl + I', action: 'Italique' },
174
+ { keys: 'Ctrl + U', action: 'Souligné' },
175
+ { keys: 'Ctrl + K', action: 'Insérer / modifier un lien' },
176
+ ],
177
+ },
178
+ {
179
+ category: 'Historique',
180
+ items: [
181
+ { keys: 'Ctrl + Z', action: 'Annuler' },
182
+ { keys: 'Ctrl + Y / Ctrl + Shift + Z', action: 'Rétablir' },
183
+ ],
184
+ },
185
+ {
186
+ category: 'Sélection et navigation',
187
+ items: [
188
+ { keys: 'Ctrl + A', action: 'Tout sélectionner' },
189
+ { keys: 'Tab', action: 'Augmenter le retrait / insérer des espaces' },
190
+ { keys: 'Shift + Tab', action: 'Diminuer le retrait' },
191
+ ],
192
+ },
193
+ {
194
+ category: 'Presse-papiers',
195
+ items: [
196
+ { keys: 'Ctrl + Shift + V', action: 'Coller en texte brut' },
197
+ ],
198
+ },
199
+ {
200
+ category: 'Rechercher et remplacer',
201
+ items: [
202
+ { keys: 'Ctrl + F', action: 'Rechercher dans le document' },
203
+ { keys: 'Ctrl + H', action: 'Rechercher et remplacer' },
204
+ ],
205
+ },
206
+ {
207
+ category: 'Éditeur',
208
+ items: [
209
+ { keys: 'Ctrl + Shift + /', action: 'Afficher les raccourcis clavier' },
210
+ ],
211
+ },
212
+ ],
213
+ },
214
+
215
+ contextMenu: {
216
+ cut: 'Couper',
217
+ copy: 'Copier',
218
+ paste: 'Coller',
219
+ bold: 'Gras',
220
+ italic: 'Italique',
221
+ underline: 'Souligné',
222
+ textColor: 'Couleur du texte',
223
+ highlightColor: 'Couleur de surbrillance',
224
+ copyFormat: 'Copier la mise en forme',
225
+ pasteFormat: 'Coller la mise en forme',
226
+ removeFormat: 'Effacer la mise en forme',
227
+ link: 'Insérer un lien',
228
+ image: 'Insérer une image',
229
+ video: 'Insérer une vidéo',
230
+ table: 'Insérer un tableau',
231
+ back: 'Retour',
232
+ noHighlight: 'Sans surbrillance',
233
+ customColor: 'Couleur personnalisée',
234
+ customColorLabel: 'Personnaliser\u2026',
235
+ },
236
+
237
+ statusbar: {
238
+ resizeHandle: 'Faire glisser pour redimensionner',
239
+ words: (n) => `Mots\u00a0: ${n}`,
240
+ wordsLimit: (n, max) => `Mots\u00a0: ${n}/${max}`,
241
+ chars: (n) => `Caractères\u00a0: ${n}`,
242
+ charsLimit: (n, max) => `Caractères\u00a0: ${n}/${max}`,
243
+ },
244
+
245
+ tooltips: {
246
+ link: {
247
+ ariaLabel: 'Actions du lien',
248
+ openLink: 'Ouvrir le lien',
249
+ copyUrl: 'Copier l\'URL',
250
+ editLink: 'Modifier le lien',
251
+ removeLink: 'Supprimer le lien',
252
+ },
253
+ image: {
254
+ ariaLabel: 'Actions de l\'image',
255
+ label: 'Image',
256
+ floatLeft: 'Flottant à gauche',
257
+ noFloat: 'Sans flottant',
258
+ alignCenter: 'Centré',
259
+ floatRight: 'Flottant à droite',
260
+ originalSize: 'Taille originale',
261
+ rotateLeft: 'Rotation à gauche',
262
+ rotateRight: 'Rotation à droite',
263
+ cropImage: 'Recadrer l\'image',
264
+ addCaption: 'Ajouter / modifier la légende',
265
+ deleteImage: 'Supprimer l\'image',
266
+ },
267
+ code: {
268
+ ariaLabel: 'Actions du bloc de code',
269
+ label: 'Code',
270
+ syntaxLanguage: 'Langage de syntaxe',
271
+ syntaxAriaLabel: 'Langage de syntaxe',
272
+ copyCode: 'Copier le code',
273
+ toggleWordWrap: 'Activer/désactiver le retour à la ligne',
274
+ enableWordWrap: 'Activer le retour à la ligne',
275
+ disableWordWrap: 'Désactiver le retour à la ligne',
276
+ convertToParagraph: 'Convertir en paragraphe',
277
+ deleteCodeBlock: 'Supprimer le bloc de code',
278
+ },
279
+ table: {
280
+ ariaLabel: 'Actions du tableau',
281
+ label: 'Tableau',
282
+ selectCells: 'Sélectionner des cellules',
283
+ addRowAbove: 'Ajouter une ligne au-dessus',
284
+ addRowBelow: 'Ajouter une ligne en-dessous',
285
+ deleteRow: 'Supprimer la ligne',
286
+ addColumnLeft: 'Ajouter une colonne à gauche',
287
+ addColumnRight: 'Ajouter une colonne à droite',
288
+ deleteColumn: 'Supprimer la colonne',
289
+ mergeCells: 'Fusionner les cellules',
290
+ unmergeCells: 'Scinder les cellules',
291
+ columnWidth: 'Largeur de colonne',
292
+ rowHeight: 'Hauteur de ligne',
293
+ tableBorderWidth: 'Épaisseur des bordures',
294
+ deleteTable: 'Supprimer le tableau',
295
+ columnWidthPx: 'Largeur de colonne (px)',
296
+ rowHeightPx: 'Hauteur de ligne (px)',
297
+ tableBorderWidthPx: 'Épaisseur des bordures (px)',
298
+ cancelBtn: 'Annuler',
299
+ applyBtn: 'Appliquer',
300
+ },
301
+ video: {
302
+ ariaLabel: 'Actions de la vidéo',
303
+ label: 'Vidéo',
304
+ floatLeft: 'Flottant à gauche',
305
+ noFloat: 'Sans flottant',
306
+ alignCenter: 'Centré',
307
+ floatRight: 'Flottant à droite',
308
+ originalSize: 'Taille originale',
309
+ previewVideo: 'Aperçu',
310
+ exitPreview: 'Quitter l\'aperçu',
311
+ deleteVideo: 'Supprimer la vidéo',
312
+ },
313
+ },
314
+
315
+ errors: {
316
+ imageFormat: (type) =>
317
+ `Le format "${type}" n'est pas pris en charge par le navigateur. Veuillez le convertir en JPEG, PNG ou WebP.`,
318
+ imageSize: (maxSize) =>
319
+ `Le fichier image est trop volumineux. La taille maximale autorisée est de ${maxSize}\u00a0Mo.`,
320
+ },
321
+ };
@@ -0,0 +1,59 @@
1
+ /**
2
+ * i18n/index.js — Locale registry and resolver for autumn-note-ce.
3
+ *
4
+ * Usage:
5
+ * lang: 'en' → built-in English (default)
6
+ * lang: 'vi' → built-in Vietnamese
7
+ * lang: 'ja' → built-in Japanese
8
+ * lang: 'zh' → built-in Simplified Chinese
9
+ * lang: 'fr' → built-in French
10
+ * lang: 'de' → built-in German
11
+ * lang: 'es' → built-in Spanish
12
+ * lang: 'ko' → built-in Korean
13
+ * lang: { ... } → custom locale object, deep-merged over English
14
+ */
15
+
16
+ import { mergeDeep } from '../core/func.js';
17
+ import { en } from './en.js';
18
+ import { vi } from './vi.js';
19
+ import { ja } from './ja.js';
20
+ import { zh } from './zh.js';
21
+ import { fr } from './fr.js';
22
+ import { de } from './de.js';
23
+ import { es } from './es.js';
24
+ import { ko } from './ko.js';
25
+
26
+ /**
27
+ * All built-in locales keyed by their language code.
28
+ * @type {Record<string, Partial<AsnLocale>>}
29
+ */
30
+ export const locales = { en, vi, ja, zh, fr, de, es, ko };
31
+
32
+ /**
33
+ * Resolve a locale object from a lang option value.
34
+ *
35
+ * @param {string | Partial<AsnLocale> | null | undefined} lang
36
+ * @returns {AsnLocale} A fully-populated locale (always contains every key from en.js).
37
+ */
38
+ export function resolveLocale(lang) {
39
+ // Default / English shortcut (no merge needed)
40
+ if (!lang || lang === 'en') return en;
41
+
42
+ if (typeof lang === 'string') {
43
+ const partial = locales[lang];
44
+ // Unknown language code → fall back to English
45
+ if (!partial) return en;
46
+ return mergeDeep(mergeDeep({}, en), partial);
47
+ }
48
+
49
+ if (typeof lang === 'object') {
50
+ // Custom locale object supplied directly by the user
51
+ return mergeDeep(mergeDeep({}, en), lang);
52
+ }
53
+
54
+ return en;
55
+ }
56
+
57
+ /**
58
+ * @typedef {Object} AsnLocale (see types/index.d.ts for the full definition)
59
+ */