Commit avant changement d'agent vers devstral

This commit is contained in:
2025-11-13 17:00:47 +01:00
parent a09b73e4f1
commit cc1d6880a7
25 changed files with 2903 additions and 89 deletions

98
locales/README.md Normal file
View File

@ -0,0 +1,98 @@
# Localization Files
This directory contains translation files for the Personotes application.
## Available Languages
- **English** (`en.json`) - Default language
- **Français** (`fr.json`) - French translation
## File Structure
Each language file is a JSON file with nested keys for organizing translations:
```json
{
"app": {
"name": "Personotes",
"tagline": "Simple Markdown note-taking"
},
"menu": {
"home": "Home",
"search": "Search"
},
"errors": {
"internalError": "Internal error"
}
}
```
## Adding a New Language
To add support for a new language:
1. **Create a new JSON file** named with the language code (e.g., `es.json` for Spanish, `de.json` for German)
2. **Copy the structure** from `en.json`
3. **Translate all strings** to the target language
4. **Keep placeholders intact**: Use `{{variable}}` syntax as-is (e.g., `{{filename}}`, `{{date}}`)
5. **Test your translation** by setting the language in the application
### Language Codes
Use standard ISO 639-1 codes:
- `en` - English
- `fr` - Français (French)
- `es` - Español (Spanish)
- `de` - Deutsch (German)
- `it` - Italiano (Italian)
- `pt` - Português (Portuguese)
- `ja` - 日本語 (Japanese)
- `zh` - 中文 (Chinese)
## Variable Interpolation
Some strings contain variables in the format `{{variableName}}`. Keep these exactly as they are:
```json
{
"editor": {
"confirmDelete": "Are you sure you want to delete this note ({{filename}})?"
}
}
```
In French:
```json
{
"editor": {
"confirmDelete": "Êtes-vous sûr de vouloir supprimer cette note ({{filename}}) ?"
}
}
```
## Guidelines for Translators
1. **Consistency**: Use consistent terminology throughout
2. **Context**: Consider the UI context (button labels should be short, help text can be longer)
3. **Formality**: Match the tone of the original language
4. **Special Characters**: Ensure proper encoding for special characters
5. **Testing**: Test in the actual application to see how translations fit in the UI
## Contributing
To contribute a new translation:
1. Fork the repository
2. Create your translation file (e.g., `locales/es.json`)
3. Add the language to `languages` section in your file:
```json
"languages": {
"en": "English",
"fr": "Français",
"es": "Español"
}
```
4. Update this README with your language
5. Submit a pull request
Thank you for helping make Personotes accessible to more users! 🌍

264
locales/en.json Normal file
View File

@ -0,0 +1,264 @@
{
"app": {
"name": "Personotes",
"tagline": "Simple Markdown note-taking"
},
"menu": {
"home": "Home",
"newNote": "New Note",
"newFolder": "New Folder",
"search": "Search",
"settings": "Settings",
"about": "About",
"favorites": "Pinned Notes",
"daily": "Daily Notes"
},
"editor": {
"save": "Save",
"saving": "Saving...",
"saved": "Saved",
"autoSaved": "Auto-saved",
"delete": "Delete",
"confirmDelete": "Are you sure you want to delete this note ({{filename}})?",
"backlinks": "Backlinks",
"noBacklinks": "No backlinks",
"tags": "Tags",
"lastModified": "Last modified",
"splitView": "Split View",
"editorOnly": "Editor Only",
"previewOnly": "Preview Only",
"refresh": "Refresh",
"togglePreview": "Mode: Editor + Preview (click for Editor only)"
},
"fileTree": {
"notes": "Notes",
"noNotes": "No notes found.",
"newFolder": "New Folder",
"createNote": "Create Note",
"createFolder": "Create Folder",
"noteName": "Note name",
"noteNamePlaceholder": "my-note.md",
"noteNameLabel": "Name of the new note (e.g., my-super-note.md)",
"folderName": "Folder name",
"folderNamePlaceholder": "my-folder",
"cancel": "Cancel",
"create": "Create",
"createTheNote": "Create the note",
"createTheFolder": "Create the folder",
"selectAll": "Select All",
"deselectAll": "Deselect All",
"deleteSelected": "Delete Selected",
"confirmDeleteMultiple": "Are you sure you want to delete the selected items?"
},
"search": {
"title": "Search",
"placeholder": "Search notes (keyword, tag:project, title:...)",
"noResults": "No results found",
"searchHelp": "💡 Advanced search",
"searchHelpText": "Enter keywords to search in your notes",
"byTag": "Search by tag",
"byTagExample": "tag:project",
"byTitle": "Search in titles",
"byTitleExample": "title:meeting",
"byPath": "Search in paths",
"byPathExample": "path:backend",
"quotedPhrase": "Exact phrase",
"quotedPhraseExample": "\"exact phrase\""
},
"daily": {
"title": "Daily Notes",
"recent": "Recent",
"calendar": "Calendar",
"noRecent": "No recent notes",
"noteOf": "Note of {{date}}",
"noNote": "{{date}} - No note",
"openToday": "Open today's note (Ctrl/Cmd+D)",
"previousMonth": "Previous month",
"nextMonth": "Next month"
},
"favorites": {
"title": "bookmarks",
"noFavorites": "No bookmarks yet",
"add": "Add to bookmarks",
"remove": "Remove from bookmarks",
"alreadyInFavorites": "Already in bookmarks",
"notFound": "Bookmark not found"
},
"settings": {
"title": "Settings",
"theme": "Theme",
"font": "Font",
"fontSize": "Font Size",
"vimMode": "Vim Mode",
"language": "Language",
"appearance": "Appearance",
"editor": "Editor",
"other": "Other",
"apply": "Apply",
"close": "Close",
"fontSizeSmall": "Small",
"fontSizeMedium": "Medium",
"fontSizeLarge": "Large",
"fontSizeExtraLarge": "Extra Large"
},
"tabs": {
"themes": "Themes",
"fonts": "Fonts",
"shortcuts": "Shortcuts",
"other": "Other"
},
"newNoteModal": {
"title": "New Note",
"label": "Note name",
"placeholder": "my-note.md",
"create": "Create / Open",
"cancel": "Cancel"
},
"newFolderModal": {
"title": "New Folder",
"label": "Folder name",
"placeholder": "my-folder",
"create": "Create",
"cancel": "Cancel"
},
"selectionToolbar": {
"delete": "Delete",
"cancel": "Cancel"
},
"sidebar": {
"files": "Files",
"favorites": "Bookmarks",
"daily": "Daily Notes",
"search": "Search"
},
"themes": {
"materialDark": "Material Dark",
"monokai": "Monokai",
"dracula": "Dracula",
"oneDark": "One Dark",
"solarizedDark": "Solarized Dark",
"nord": "Nord",
"catppuccin": "Catppuccin",
"everforest": "Everforest"
},
"fonts": {
"jetbrainsMono": "JetBrains Mono",
"firaCode": "Fira Code",
"inter": "Inter",
"ibmPlexMono": "IBM Plex Mono",
"sourceCodePro": "Source Code Pro",
"cascadiaCode": "Cascadia Code",
"robotoMono": "Roboto Mono",
"ubuntuMono": "Ubuntu Mono"
},
"languages": {
"en": "English",
"fr": "Français"
},
"shortcuts": {
"title": "Keyboard Shortcuts",
"save": "Save note",
"search": "Open search",
"daily": "Create/open today's note",
"sidebar": "Toggle sidebar",
"help": "Show this help",
"newNote": "New note",
"close": "Close"
},
"errors": {
"methodNotAllowed": "Method not allowed",
"internalError": "Internal error",
"renderError": "Render error",
"invalidForm": "Invalid form",
"pathRequired": "Path required",
"fileNotFound": "File/folder not found",
"loadError": "Loading error",
"saveError": "Save error",
"deleteError": "Delete error",
"alreadyExists": "A note with this name already exists",
"invalidPath": "Invalid path",
"invalidFilename": "Invalid filename",
"invalidName": "Invalid name. Avoid \\ and .. characters",
"invalidFolderName": "Invalid folder name. Avoid \\ and .. characters",
"enterNoteName": "Please enter a note name",
"enterFolderName": "Please enter a folder name",
"moveFailed": "Failed to move file",
"createFolderFailed": "Failed to create folder",
"nothingSelected": "Nothing selected",
"cannotMoveIntoSelf": "Cannot move a folder into itself or into one of its subfolders",
"jsonInvalid": "Invalid JSON",
"readRequestError": "Error reading request",
"parseRequestError": "Error parsing request",
"formReadError": "Cannot read form",
"filenameMissing": "Filename missing",
"frontMatterError": "Error generating front matter"
},
"vim": {
"notAvailable": "❌ Vim mode is not available.\n\nThe @replit/codemirror-vim package is not installed.\n\nTo install it, run:\ncd frontend\nnpm install\nnpm run build",
"enabled": "Vim mode enabled",
"disabled": "Vim mode disabled"
},
"slashCommands": {
"h1": "Heading 1",
"h2": "Heading 2",
"h3": "Heading 3",
"bold": "Bold text",
"italic": "Italic text",
"code": "Inline code",
"codeblock": "Code block",
"quote": "Quote",
"list": "Bullet list",
"hr": "Horizontal rule",
"table": "Table",
"link": "Link",
"ilink": "Internal link",
"date": "Insert date"
},
"about": {
"title": "About Personotes",
"version": "Version",
"description": "A lightweight web-based Markdown note-taking application",
"features": "Features",
"github": "GitHub",
"documentation": "Documentation"
},
"home": {
"autoUpdate": "Auto-update",
"allNotes": "All notes",
"recentlyModified": "Recently modified"
},
"calendar": {
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday",
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat",
"sun": "Sun",
"january": "January",
"february": "February",
"march": "March",
"april": "April",
"may": "May",
"june": "June",
"july": "July",
"august": "August",
"september": "September",
"october": "October",
"november": "November",
"december": "December",
"today": "Today",
"thisMonth": "This month",
"prevMonth": "Previous month",
"nextMonth": "Next month",
"noNote": "No note",
"noteOf": "Note of"
}
}

264
locales/fr.json Normal file
View File

@ -0,0 +1,264 @@
{
"app": {
"name": "Personotes",
"tagline": "Prise de notes Markdown simple"
},
"menu": {
"home": "Accueil",
"newNote": "Nouvelle Note",
"newFolder": "Nouveau Dossier",
"search": "Rechercher",
"settings": "Paramètres",
"about": "À propos",
"favorites": "Favoris",
"daily": "Notes Quotidiennes"
},
"editor": {
"save": "Enregistrer",
"saving": "Sauvegarde...",
"saved": "Sauvegardé",
"autoSaved": "Auto-sauvegardé",
"delete": "Supprimer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer cette note ({{filename}}) ?",
"backlinks": "Rétroliens",
"noBacklinks": "Aucun rétrolien",
"tags": "Tags",
"lastModified": "Dernière modification",
"splitView": "Vue divisée",
"editorOnly": "Éditeur seul",
"previewOnly": "Aperçu seul",
"refresh": "Actualiser",
"togglePreview": "Mode: Éditeur + Preview (cliquer pour Éditeur seul)"
},
"fileTree": {
"notes": "Notes",
"noNotes": "Aucune note trouvée.",
"newFolder": "Nouveau Dossier",
"createNote": "Créer une Note",
"createFolder": "Créer un Dossier",
"noteName": "Nom de la note",
"noteNamePlaceholder": "ma-note.md",
"noteNameLabel": "Nom de la nouvelle note (ex: ma-super-note.md)",
"folderName": "Nom du dossier",
"folderNamePlaceholder": "mon-dossier",
"cancel": "Annuler",
"create": "Créer",
"createTheNote": "Créer la note",
"createTheFolder": "Créer le dossier",
"selectAll": "Tout sélectionner",
"deselectAll": "Tout désélectionner",
"deleteSelected": "Supprimer la sélection",
"confirmDeleteMultiple": "Êtes-vous sûr de vouloir supprimer les éléments sélectionnés ?"
},
"search": {
"title": "Recherche",
"placeholder": "Rechercher une note (mot-clé, tag:projet, title:...)",
"noResults": "Aucun résultat trouvé",
"searchHelp": "💡 Recherche avancée",
"searchHelpText": "Saisissez des mots-clés pour rechercher dans vos notes",
"byTag": "Rechercher par tag",
"byTagExample": "tag:projet",
"byTitle": "Rechercher dans les titres",
"byTitleExample": "title:réunion",
"byPath": "Rechercher dans les chemins",
"byPathExample": "path:backend",
"quotedPhrase": "Phrase exacte",
"quotedPhraseExample": "\"phrase exacte\""
},
"daily": {
"title": "Notes Quotidiennes",
"recent": "Récentes",
"calendar": "Calendrier",
"noRecent": "Aucune note récente",
"noteOf": "Note du {{date}}",
"noNote": "{{date}} - Pas de note",
"openToday": "Ouvrir la note du jour (Ctrl/Cmd+D)",
"previousMonth": "Mois précédent",
"nextMonth": "Mois suivant"
},
"favorites": {
"title": "Favoris",
"noFavorites": "Aucun favori pour le moment",
"add": "Ajouter aux favoris",
"remove": "Retirer des favoris",
"alreadyInFavorites": "Déjà en favoris",
"notFound": "Favori introuvable"
},
"settings": {
"title": "Paramètres",
"theme": "Thème",
"font": "Police",
"fontSize": "Taille de police",
"vimMode": "Mode Vim",
"language": "Langue",
"appearance": "Apparence",
"editor": "Éditeur",
"other": "Autre",
"apply": "Appliquer",
"close": "Fermer",
"fontSizeSmall": "Petite",
"fontSizeMedium": "Moyenne",
"fontSizeLarge": "Grande",
"fontSizeExtraLarge": "Très Grande"
},
"tabs": {
"themes": "Thèmes",
"fonts": "Polices",
"shortcuts": "Raccourcis",
"other": "Autre"
},
"newNoteModal": {
"title": "Nouvelle Note",
"label": "Nom de la note",
"placeholder": "ma-note.md",
"create": "Créer / Ouvrir",
"cancel": "Annuler"
},
"newFolderModal": {
"title": "Nouveau Dossier",
"label": "Nom du dossier",
"placeholder": "mon-dossier",
"create": "Créer",
"cancel": "Annuler"
},
"selectionToolbar": {
"delete": "Supprimer",
"cancel": "Annuler"
},
"sidebar": {
"files": "Fichiers",
"favorites": "Favoris",
"daily": "Notes Quotidiennes",
"search": "Recherche"
},
"themes": {
"materialDark": "Material Dark",
"monokai": "Monokai",
"dracula": "Dracula",
"oneDark": "One Dark",
"solarizedDark": "Solarized Dark",
"nord": "Nord",
"catppuccin": "Catppuccin",
"everforest": "Everforest"
},
"fonts": {
"jetbrainsMono": "JetBrains Mono",
"firaCode": "Fira Code",
"inter": "Inter",
"ibmPlexMono": "IBM Plex Mono",
"sourceCodePro": "Source Code Pro",
"cascadiaCode": "Cascadia Code",
"robotoMono": "Roboto Mono",
"ubuntuMono": "Ubuntu Mono"
},
"languages": {
"en": "English",
"fr": "Français"
},
"shortcuts": {
"title": "Raccourcis Clavier",
"save": "Sauvegarder la note",
"search": "Ouvrir la recherche",
"daily": "Créer/ouvrir la note du jour",
"sidebar": "Basculer la barre latérale",
"help": "Afficher cette aide",
"newNote": "Nouvelle note",
"close": "Fermer"
},
"errors": {
"methodNotAllowed": "Méthode non autorisée",
"internalError": "Erreur interne",
"renderError": "Erreur de rendu",
"invalidForm": "Formulaire invalide",
"pathRequired": "Chemin requis",
"fileNotFound": "Fichier/dossier introuvable",
"loadError": "Erreur de chargement",
"saveError": "Erreur de sauvegarde",
"deleteError": "Erreur de suppression",
"alreadyExists": "Une note avec ce nom existe déjà",
"invalidPath": "Chemin invalide",
"invalidFilename": "Nom de fichier invalide",
"invalidName": "Nom invalide. Évitez les caractères \\ et ..",
"invalidFolderName": "Nom de dossier invalide. Évitez les caractères \\ et ..",
"enterNoteName": "Veuillez entrer un nom de note",
"enterFolderName": "Veuillez entrer un nom de dossier",
"moveFailed": "Erreur lors du déplacement du fichier",
"createFolderFailed": "Erreur lors de la création du dossier",
"nothingSelected": "Aucun élément sélectionné",
"cannotMoveIntoSelf": "Impossible de déplacer un dossier dans lui-même ou dans un de ses sous-dossiers",
"jsonInvalid": "JSON invalide",
"readRequestError": "Erreur lecture requête",
"parseRequestError": "Erreur parsing requête",
"formReadError": "Lecture du formulaire impossible",
"filenameMissing": "Nom de fichier manquant",
"frontMatterError": "Erreur lors de la génération du front matter"
},
"vim": {
"notAvailable": "❌ Le mode Vim n'est pas disponible.\n\nLe package @replit/codemirror-vim n'est pas installé.\n\nPour l'installer, exécutez :\ncd frontend\nnpm install\nnpm run build",
"enabled": "Mode Vim activé",
"disabled": "Mode Vim désactivé"
},
"slashCommands": {
"h1": "Titre 1",
"h2": "Titre 2",
"h3": "Titre 3",
"bold": "Texte en gras",
"italic": "Texte en italique",
"code": "Code en ligne",
"codeblock": "Bloc de code",
"quote": "Citation",
"list": "Liste à puces",
"hr": "Ligne horizontale",
"table": "Tableau",
"link": "Lien",
"ilink": "Lien interne",
"date": "Insérer la date"
},
"about": {
"title": "À propos de Personotes",
"version": "Version",
"description": "Application légère de prise de notes Markdown",
"features": "Fonctionnalités",
"github": "GitHub",
"documentation": "Documentation"
},
"home": {
"autoUpdate": "Mise à jour automatique",
"allNotes": "Toutes les notes",
"recentlyModified": "Récemment modifiés"
},
"calendar": {
"monday": "Lundi",
"tuesday": "Mardi",
"wednesday": "Mercredi",
"thursday": "Jeudi",
"friday": "Vendredi",
"saturday": "Samedi",
"sunday": "Dimanche",
"mon": "Lun",
"tue": "Mar",
"wed": "Mer",
"thu": "Jeu",
"fri": "Ven",
"sat": "Sam",
"sun": "Dim",
"january": "Janvier",
"february": "Février",
"march": "Mars",
"april": "Avril",
"may": "Mai",
"june": "Juin",
"july": "Juillet",
"august": "Août",
"september": "Septembre",
"october": "Octobre",
"november": "Novembre",
"december": "Décembre",
"today": "Aujourd'hui",
"thisMonth": "Ce mois",
"prevMonth": "Mois précédent",
"nextMonth": "Mois suivant",
"noNote": "Pas de note",
"noteOf": "Note du"
}
}