commit 8c5387a4a809b23d8dfe94a7c9257f5dcf6ecec2 Author: Zhongwei Li Date: Sun Nov 30 08:27:13 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..5d366e8 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "leapmultix-skill-i18n-sync", + "description": "Skill i18n-sync from LeapMultix", + "version": "1.0.0", + "author": { + "name": "Julien LE SAUX", + "email": "contact@jls42.org" + }, + "skills": [ + "./skills" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0766905 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# leapmultix-skill-i18n-sync + +Skill i18n-sync from LeapMultix diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..083cd82 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:jls42/leapmultix:leapmultix-marketplace/skills/i18n-sync", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "54516030e8862b1b61b413c959a8b9356eba82dd", + "treeHash": "fb3729f17c8c4e6fed608f683d873635eae7e6c29f2f89e74fa43dcc336b97c4", + "generatedAt": "2025-11-28T10:19:13.141956Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "leapmultix-skill-i18n-sync", + "description": "Skill i18n-sync from LeapMultix", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "407f71df8484676d92b33de464f8be809a9019482f25f21fc380edbc33190858" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "0d7e42f2844af0720c473ced94cfe5c278b4fc90f919f9c8bc8d546e472c5d36" + }, + { + "path": "skills/i18n-sync/SKILL.md", + "sha256": "3f4903c3df10d0daf7d26080864207dc42a2bcfbbc05d82338c1d34933fcffbd" + } + ], + "dirSha256": "fb3729f17c8c4e6fed608f683d873635eae7e6c29f2f89e74fa43dcc336b97c4" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/i18n-sync/SKILL.md b/skills/i18n-sync/SKILL.md new file mode 100644 index 0000000..62df61a --- /dev/null +++ b/skills/i18n-sync/SKILL.md @@ -0,0 +1,169 @@ +--- +name: synchronizing-i18n-translations +description: Verifies translation files synchronization (fr.json, en.json, es.json) and detects missing keys, empty values, and type inconsistencies +allowed-tools: Read, Grep, Glob, Bash +--- + +# I18n Translation Synchronization + +Maintient la synchronisation des fichiers de traduction pour toutes les langues supportées. + +## Table des matières + +- [Quand utiliser](#quand-utiliser) +- [Langues supportées](#langues-supportées) +- [Scripts disponibles](#scripts-disponibles) +- [Workflow principal](#workflow-principal) +- [Détection automatique](#détection-automatique) +- [Corriger les erreurs](#corriger-les-erreurs) +- [Structure des fichiers](#structure-des-fichiers) +- [Checklist i18n](#checklist-i18n) +- [En cas de doute](#en-cas-de-doute) + +## Quand utiliser + +- Ajout de nouveaux textes UI +- Modification de traductions existantes +- Avant de committer changements i18n +- Quand `npm run i18n:compare` signale erreurs + +## Langues supportées + +- **fr.json** (référence) - Toujours modifier en premier +- **en.json** (anglais) +- **es.json** (espagnol) + +## Scripts disponibles + +```bash +npm run i18n:compare # Compare tous les fichiers (PRINCIPAL) +npm run i18n:verify # Vérifie cohérence +npm run i18n:unused # Détecte clés inutilisées +``` + +## Workflow principal + +### 1. Vérifier l'état actuel + +```bash +npm run i18n:compare +``` + +Si erreurs, lire le rapport détaillé. + +### 2. Modifier les traductions + +**Règle d'or :** Toujours commencer par `fr.json` + +1. Modifie `fr.json` d'abord +2. Copie la STRUCTURE (pas les valeurs) dans en.json et es.json +3. Traduis les valeurs + +### 3. Vérifier synchronisation + +```bash +npm run i18n:compare +``` + +Doit afficher : "Tous les fichiers de traduction sont parfaitement synchronisés !" + +### 4. Tester dans l'UI + +Lance l'application et teste le sélecteur de langue. + +## Détection automatique + +Le script `npm run i18n:compare` détecte : + +**Clés manquantes :** + +- Clés présentes dans fr.json mais absentes dans en.json/es.json + +**Clés supplémentaires :** + +- Clés présentes dans en.json/es.json mais absentes dans fr.json + +**Valeurs vides :** + +- `""`, `null`, `undefined`, `[]` + +**Incohérences de types :** + +- String vs Array (ex: fr.json = "text", en.json = ["array"]) + +**Format du rapport :** + +- Console détaillée +- JSON exporté dans `docs/translations-comparison-report.json` + +## Corriger les erreurs + +### Clés manquantes + +Ajoute les clés manquantes dans en.json/es.json avec traductions appropriées. + +### Clés supplémentaires + +Supprime les clés supplémentaires OU ajoute-les dans fr.json si nécessaires. + +### Valeurs vides + +Remplace les valeurs vides par traductions appropriées. + +### Types incohérents + +Uniformise le type (soit String partout, soit Array partout). + +## Structure des fichiers + +**Format JSON :** + +```json +{ + "key": "value", + "nested": { + "key": "value" + }, + "array": ["item1", "item2"] +} +``` + +**Dot notation :** + +- `key` → "key" +- `nested.key` → "nested.key" +- `array` → "array" + +Le script aplatit la structure en dot notation pour comparaison. + +## Checklist i18n + +- [ ] fr.json modifié en premier +- [ ] Structure copiée dans en.json et es.json +- [ ] Valeurs traduites correctement +- [ ] `npm run i18n:compare` passe (100% synchronisé) +- [ ] Testé dans UI avec sélecteur de langue +- [ ] Pas de valeurs vides +- [ ] Types cohérents (String ou Array) + +## En cas de doute + +**Source :** fr.json + npm scripts + +**Règles absolues :** + +1. Toujours vérifier avec `npm run i18n:compare` +2. fr.json est la référence (pas en.json, pas es.json) +3. Ne jamais committer avec erreurs i18n +4. Tester dans UI avant commit +5. Scripts npm détectent TOUS les problèmes + +**Workflow minimal :** + +```bash +# Modifier fr.json +npm run i18n:compare # Vérifier +# Copier structure dans en.json, es.json +# Traduire valeurs +npm run i18n:compare # DOIT être OK +```