Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# leapmultix-skill-i18n-sync
|
||||||
|
|
||||||
|
Skill i18n-sync from LeapMultix
|
||||||
45
plugin.lock.json
Normal file
45
plugin.lock.json
Normal file
@@ -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": []
|
||||||
|
}
|
||||||
|
}
|
||||||
169
skills/i18n-sync/SKILL.md
Normal file
169
skills/i18n-sync/SKILL.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user