i18n-sync — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited i18n-sync (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Les 5 fichiers de locale se trouvent dans apps/desktop/src/locales/ :
en.ts — source de vérité (objet TypeScript imbriqué const en = { ... })fr.ts, es.ts, pt-BR.ts, zh-CN.ts — doivent refléter exactement la même structureLes locales utilisent des objets imbriqués (pas de clés dot-notation plates) :
const fr = {
common: {
cancel: "Annuler",
save: "Enregistrer",
},
// ...
}Les composants Vue consomment les clés via useI18n() :
const { t } = useI18n()
// template: {{ t('common.save') }}Au démarrage, demander à l'utilisateur quel mode il souhaite — sauf si le contexte est explicite (ex : "j'ai ajouté un bouton", "il faut traduire X") : aller directement en Mode 3.
Objectif : détecter les désynchronisations sans modifier aucun fichier.
en.ts et extraire récursivement toutes les clés (chemin dot-notation : common.cancel, branches.create, …)fr.ts, es.ts, pt-BR.ts, zh-CN.tsen.ts mais absentes de la localeen.tsLocale | Clés manquantes | Clés orphelines
-----------|-----------------|----------------
fr.ts | 0 | 0
es.ts | 3 | 0
pt-BR.ts | 1 | 2
zh-CN.ts | 0 | 0Objectif : corriger toutes les désynchronisations détectées.
Pour chaque clé manquante dans une locale :
// TODO: translateen.ts)Exemple :
// Avant (es.ts) — clé manquante : common.refresh
common: {
cancel: "Cancelar",
save: "Guardar",
},
// Après
common: {
cancel: "Cancelar",
refresh: "Refresh", // TODO: translate
save: "Guardar",
},Pour les clés orphelines :
Terminer par un résumé des fichiers modifiés et du nombre de clés ajoutées.
Objectif : ajouter proprement une nouvelle string UI dans les 5 locales.
en.ts (ex: common, branches, settings…)en.ts avec la valeur en anglais définitivefr.ts, es.ts, pt-BR.ts, zh-CN.ts avec valeur anglaise + // TODO: translateuseI18n() — signaler tout texte hardcodé détectéExemple d'ajout dans en.ts :
branches: {
checkout: "Check out",
create: "Create branch",
delete: "Delete branch", // ← nouvelle clé ajoutée ici
rename: "Rename",
},Exemple dans fr.ts :
branches: {
checkout: "Extraire",
create: "Créer une branche",
delete: "Delete branch", // TODO: translate
rename: "Renommer",
},t('clé')en.ts fait référence ; les autres locales suivent le même ordre dans chaque groupe~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.