t9n-cli 0.1.0 → 0.1.1

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.
Files changed (47) hide show
  1. package/dictionaries/ar.json +244 -0
  2. package/dictionaries/de.json +244 -0
  3. package/dictionaries/el.json +244 -0
  4. package/dictionaries/en.json +244 -0
  5. package/dictionaries/es.json +244 -0
  6. package/dictionaries/fr.json +244 -0
  7. package/dictionaries/hi.json +244 -0
  8. package/dictionaries/id.json +244 -0
  9. package/dictionaries/it.json +244 -0
  10. package/dictionaries/ja.json +244 -0
  11. package/dictionaries/ko.json +244 -0
  12. package/dictionaries/ms.json +244 -0
  13. package/dictionaries/nl.json +244 -0
  14. package/dictionaries/pl.json +244 -0
  15. package/dictionaries/pt.json +244 -0
  16. package/dictionaries/ru.json +244 -0
  17. package/dictionaries/sv.json +244 -0
  18. package/dictionaries/th.json +244 -0
  19. package/dictionaries/tr.json +244 -0
  20. package/dictionaries/vi.json +244 -0
  21. package/dictionaries/yue.json +244 -0
  22. package/dictionaries/zh-CN.json +244 -0
  23. package/dictionaries/zh-TW.json +244 -0
  24. package/dist/api.d.ts +1 -0
  25. package/dist/api.js +52 -0
  26. package/dist/commands/auth.d.ts +1 -0
  27. package/dist/commands/auth.js +41 -0
  28. package/dist/commands/diff.d.ts +1 -0
  29. package/dist/commands/diff.js +96 -0
  30. package/dist/commands/init.d.ts +1 -0
  31. package/dist/commands/init.js +32 -0
  32. package/dist/commands/scan.d.ts +1 -0
  33. package/dist/commands/scan.js +151 -0
  34. package/dist/commands/status.d.ts +1 -0
  35. package/dist/commands/status.js +42 -0
  36. package/dist/commands/translate.d.ts +1 -0
  37. package/dist/commands/translate.js +76 -0
  38. package/dist/config.d.ts +19 -0
  39. package/dist/config.js +60 -0
  40. package/dist/i18n.d.ts +7 -0
  41. package/dist/i18n.js +52 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.js +58 -0
  44. package/dist/lib/jsonUtils.d.ts +12 -0
  45. package/dist/lib/jsonUtils.js +151 -0
  46. package/dist/tsconfig.tsbuildinfo +1 -0
  47. package/package.json +2 -2
@@ -0,0 +1,244 @@
1
+ {
2
+ "home": {
3
+ "badge": "t9n - MVP",
4
+ "title": "Traducción i18n que respeta tu código.",
5
+ "subtitle": "Cero errores de sintaxis. Protección de variables. Sensible al contexto.",
6
+ "button": "Empezar a traducir"
7
+ },
8
+ "editor": {
9
+ "run": "EJECUTAR TRADUCCIÓN",
10
+ "translating": "TRADUCIENDO",
11
+ "source": {
12
+ "label": "Idioma de origen",
13
+ "upload": "Subir JSON",
14
+ "upload_multiple": "Haz clic para subir archivos JSON",
15
+ "context": "Contexto",
16
+ "context_placeholder": "Añade contexto para mejorar la traducción...",
17
+ "pro_feature": "FUNCIÓN PRO",
18
+ "pro_context_msg": "Mejora tu plan para añadir contexto y mayor precisión.",
19
+ "info": "ORIGEN",
20
+ "lines": "Líneas",
21
+ "clear_context": "Limpiar",
22
+ "large_file_title": "Archivo grande cargado ({size})",
23
+ "large_file_desc": "Vista previa desactivada por rendimiento. Se enviará todo el contenido para traducir."
24
+ },
25
+ "diff_dialog": {
26
+ "title": "Actualización incremental (Diff)",
27
+ "files_preview": "Vista previa de archivos",
28
+ "base_tag": "BASE",
29
+ "start_diff": "Iniciar Diff"
30
+ },
31
+ "target": {
32
+ "label": "Idioma de destino",
33
+ "copy": "Copiar",
34
+ "download": "Descargar",
35
+ "no_selection": "Sin idiomas seleccionados",
36
+ "placeholder": "Selecciona idioma y traduce para ver los resultados aquí",
37
+ "stale_warning": "Origen cambiado - Traducción desactualizada",
38
+ "max_select": "MÁX {n}",
39
+ "more_suffix": "(+{n})"
40
+ },
41
+ "mobile": {
42
+ "view_result": "Ver resultado",
43
+ "back_to_code": "Volver al código"
44
+ },
45
+ "features": {
46
+ "diff_title": "Diff incremental",
47
+ "diff_msg": "¡La función de actualización incremental llegará pronto!",
48
+ "soon": "PRONTO"
49
+ },
50
+ "messages": {
51
+ "pro_feature_title": "Función Pro (Próximamente)",
52
+ "upload_pro_msg": "Subir archivos es una función Pro.\n\nEstamos construyendo las funciones premium. ¡Sigue atento!\n\n¿Ayuda? Contacto: {email}",
53
+ "download_pro_msg": "Descargar es una función Pro.\n\nEstamos construyendo las funciones premium. ¡Sigue atento!\n\n¿Ayuda? Contacto: {email}",
54
+ "diff_upload_hint": "Sube todos tus archivos de traducción. El más completo se usará como base.",
55
+ "file_too_large_title": "Archivo demasiado grande",
56
+ "file_too_large_msg": "El archivo es demasiado grande ({size}). El límite es {limit}.\n\n¡La división de archivos llegará pronto!",
57
+ "copied": "¡Copiado al portapapeles!",
58
+ "copy_failed": "Error al copiar al portapapeles",
59
+ "invalid_json": "JSON de origen inválido",
60
+ "translation_complete": "¡Traducción completada!",
61
+ "translation_failed": "Error en la traducción",
62
+ "daily_limit_reached": "LÍMITE DIARIO ALCANZADO",
63
+ "daily_limit_desc": "Has agotado tus traducciones gratuitas de hoy.",
64
+ "pro_plan_coming_soon": "¡EL PLAN PRO Y EL ACCESO ILIMITADO LLEGARÁN PRONTO!",
65
+ "building_premium": "Estamos construyendo las funciones premium. ¡Sigue atento!",
66
+ "contact_us": "¿Necesitas más? Contáctanos: {email}",
67
+ "error_details": "Detalles del error:",
68
+ "limit_exceeded": "Límite excedido",
69
+ "limit_exceeded_desc": "El plan {tier} permite hasta {max} claves por solicitud. Tu archivo tiene {keys} claves.",
70
+ "insufficient_credits": "Créditos insuficientes",
71
+ "insufficient_credits_desc": "Esta traducción requiere {cost} créditos, pero te quedan {available}.",
72
+ "free_plan_limit_exceeded": "LÍMITE DEL PLAN GRATUITO EXCEDIDO",
73
+ "upgrade_to_pro": "MEJORAR A PRO (Próximamente)",
74
+ "pro_benefits_1": "Claves ilimitadas por archivo",
75
+ "pro_benefits_2": "Longitud de contexto ilimitada",
76
+ "pro_benefits_3": "Traducción por lotes",
77
+ "reduce_size": "Por ahora, reduce el tamaño del archivo o el contexto.",
78
+ "select_target_lang": "Selecciona al menos un idioma de destino.",
79
+ "up_to_date": "Todos los idiomas seleccionados están actualizados.",
80
+ "translating_placeholder": "// Traduciendo...",
81
+ "error_no_data": "// Error: No se devolvieron datos.",
82
+ "error_failed_generic": "// Error: Error al traducir. Inténtalo de nuevo.",
83
+ "max_langs_reached": "Máximo {n} idiomas de destino permitidos en el plan gratuito.",
84
+ "credits_needed": "Créditos necesarios",
85
+ "credits_remaining": "Restantes",
86
+ "invalid_base_json": "JSON base inválido",
87
+ "invalid_base_content": "Contenido del archivo base inválido"
88
+ }
89
+ },
90
+ "common": {
91
+ "contact": "Contacto",
92
+ "email": "z17682341097@gmail.com",
93
+ "pro": "PRO",
94
+ "coming_soon": "Próximamente",
95
+ "pricing": "Precios",
96
+ "docs": "Docs y CLI",
97
+ "cli": "CLI",
98
+ "i18n_note": "Todas las traducciones de este sitio se generaron con t9n.",
99
+ "upgrade": "Mejorar",
100
+ "auto_detect": "Auto-detectar",
101
+ "soon": "PRONTO",
102
+ "pro_only": "(Solo {pro})",
103
+ "contact_support": "Contactar soporte",
104
+ "pricing_limits": "Precios y límites",
105
+ "back_to_home": "VOLVER AL INICIO",
106
+ "back_to_editor": "Volver al editor",
107
+ "mail_to": "Enviar correo a",
108
+ "cancel": "CANCELAR",
109
+ "close": "CERRAR",
110
+ "confirm": "CONFIRMAR",
111
+ "notification": "Notificación"
112
+ },
113
+ "auth": {
114
+ "login": "Iniciar sesión",
115
+ "logout": "Cerrar sesión",
116
+ "welcome_back": "Bienvenido de nuevo",
117
+ "login_desc": "Inicia sesión para acceder a funciones Pro y límites más altos",
118
+ "cli_login_required": "Inicia sesión primero con: t9n auth <tu-api-key>",
119
+ "continue_google": "Continuar con Google",
120
+ "continue_github": "Continuar con GitHub",
121
+ "terms": "Al continuar, aceptas nuestros Términos de Servicio y Política de Privacidad."
122
+ },
123
+ "settings": {
124
+ "title": "Configuración",
125
+ "apikeys": {
126
+ "title": "Claves de API",
127
+ "desc": "Gestiona tus claves de API para herramientas CLI o pipelines CI/CD.",
128
+ "create": "Crear nueva clave",
129
+ "name_label": "Nombre de la clave",
130
+ "name_placeholder": "ej. CLI de mi portátil",
131
+ "key_secret_warning": "Copia tu clave ahora. Por seguridad, no se volverá a mostrar.",
132
+ "copy_key": "Copiar clave",
133
+ "list_empty": "No hay claves de API creadas.",
134
+ "revoke": "Revocar",
135
+ "revoke_confirm": "¿Seguro que quieres revocar esta clave? Las herramientas que la usen dejarán de funcionar.",
136
+ "last_used": "Último uso",
137
+ "never_used": "Nunca",
138
+ "created": "Creada"
139
+ }
140
+ },
141
+ "pricing": {
142
+ "title": "Precios simples y transparentes",
143
+ "subtitle": "Elige el plan que mejor se adapte a tus necesidades.",
144
+ "monthly": "mensual",
145
+ "daily": "diario",
146
+ "per_request": "por solicitud",
147
+ "get_started": "Empezar",
148
+ "upgrade": "Mejorar ahora",
149
+ "contact_sales": "Contactar ventas",
150
+ "features": {
151
+ "credits": "{n} Créditos",
152
+ "keys": "Hasta {n} claves",
153
+ "langs": "Hasta {n} idiomas",
154
+ "upload_download": "Subir / Descargar",
155
+ "diff": "Actualización incremental (Diff)",
156
+ "context": "Sensibilidad al contexto"
157
+ },
158
+ "most_popular": "Más popular",
159
+ "custom": "Personalizado"
160
+ },
161
+ "metadata": {
162
+ "title": "t9n - Traductor JSON para desarrolladores | Traductor AI i18n",
163
+ "description": "El traductor AI para archivos i18n JSON pensado para desarrolladores. Cero errores, protección de variables y contexto inteligente. Traduce software, no solo palabras.",
164
+ "og_title": "t9n - Traductor JSON para desarrolladores",
165
+ "og_description": "Traduce archivos JSON i18n sin romper variables. Soporta React Intl, i18next y más."
166
+ },
167
+ "docs": {
168
+ "title": "Documentación",
169
+ "subtitle": "Explora las funciones de t9n, desde el uso básico hasta actualizaciones incrementales y optimización por contexto.",
170
+ "sections": {
171
+ "basic": {
172
+ "title": "Función básica: Traducción en tiempo real",
173
+ "content": "t9n está diseñado para el formato i18n JSON. Optimizamos la estrategia de prompts para proteger variables como {name} o {{count}} durante la traducción.",
174
+ "item1": "Soporta selección por lotes de idiomas, generando varias traducciones a la vez.",
175
+ "item2": "Vista previa en tiempo real: comparación lado a lado del origen y destino."
176
+ },
177
+ "context": {
178
+ "title": "Sensibilidad al contexto",
179
+ "content": "Traducir es más que palabra por palabra. Con el contexto de la aplicación, la IA elige el vocabulario con mayor precisión.",
180
+ "example": "Por ejemplo, \"Menu\" es una carta en un restaurante o una lista de funciones en software. El contexto elimina la ambigüedad."
181
+ },
182
+ "diff": {
183
+ "title": "Actualización incremental inteligente (Modo Diff)",
184
+ "content": "Cuando tu archivo de origen tiene contenido nuevo, no necesitas retraducirlo todo. El modo incremental de t9n ahora es automático.",
185
+ "new_feature": "Nuevo: Reconocimiento automático multiactivo",
186
+ "step1_title": "1. Selección múltiple",
187
+ "step1_desc": "Selecciona el inglés (base) y las traducciones existentes a la vez. Sin comparaciones manuales.",
188
+ "step2_title": "2. Detección base inteligente",
189
+ "step2_desc": "El sistema cuenta las claves y usa la más completa como base, rellenando lo que falta en las demás.",
190
+ "step3_title": "3. Traducción de precisión",
191
+ "step3_desc": "Las claves faltantes se marcan con 🚧 [MISSING]. La IA solo traduce estas, ahorrando más del 90% de créditos.",
192
+ "quote": "\"Mantén el 100% de las traducciones existentes, solo atiende lo nuevo.\""
193
+ },
194
+ "cli": {
195
+ "tag": "Disponible ahora",
196
+ "title": "t9n CLI",
197
+ "content": "Gestión profesional de i18n desde tu terminal. Automatiza tu flujo con nuestra interfaz de comandos.",
198
+ "install": "npm install -g @t9n/cli",
199
+ "command_auth": "t9n auth <key>",
200
+ "command_init": "t9n init",
201
+ "command_scan": "t9n scan ./src",
202
+ "command_translate": "t9n translate ./en.json -t zh-CN,ja",
203
+ "command_diff": "t9n diff ./dictionaries",
204
+ "desc_auth": "Enlaza tu entorno local con tu cuenta de t9n.",
205
+ "desc_init": "Crea t9n.config.json para guardar preferencias de proyecto.",
206
+ "desc_scan": "Busca claves en el código que aún no estén en tu JSON.",
207
+ "desc_translate": "Traduce archivos locales y guarda resultados automáticamente.",
208
+ "desc_diff": "Actualizaciones inteligentes para todos los idiomas de una carpeta.",
209
+ "progress": "Listo para producción"
210
+ }
211
+ },
212
+ "example_correct": "Portfolio\" → \"Cartera de inversiones\"",
213
+ "example_incorrect": "Portfolio\" → \"Colección de arte\""
214
+ },
215
+ "cli": {
216
+ "diff": {
217
+ "title": "🛰️ T9N CLI - Actualización incremental",
218
+ "analyzing": "🔍 Analizando diferencias...",
219
+ "comparing": "Comparando con archivo existente...",
220
+ "new_lang": "Nuevo idioma detectado.",
221
+ "success": "¡Traducción recibida con éxito!",
222
+ "updated": "Actualizado:",
223
+ "all_up_to_date": "✨ ¡Todas las traducciones están al día!"
224
+ },
225
+ "scan": {
226
+ "title": "🔍 T9N CLI - Escáner de código",
227
+ "scanning": "Escaneando archivos...",
228
+ "scanned": "Escaneados {n} archivos.",
229
+ "missing_found": "Encontradas {n} claves faltantes (en código pero NO en diccionario):",
230
+ "all_present": "✨ Todas las claves del código están en el diccionario.",
231
+ "orphaned": "Encontradas {n} posibles claves sin uso (en dict pero NO en código):"
232
+ },
233
+ "auth": {
234
+ "verifying": "Verificando clave API...",
235
+ "success": "¡Autenticación exitosa! (config {target})",
236
+ "key_missing": "Proporciona una clave API. Uso: t9n auth <key>"
237
+ },
238
+ "init": {
239
+ "title": "🎬 T9N - Inicialización de proyecto",
240
+ "created": "Configuración de proyecto creada: {path}",
241
+ "already_exists": "El archivo de configuración ya existe en: {path}"
242
+ }
243
+ }
244
+ }
@@ -0,0 +1,244 @@
1
+ {
2
+ "home": {
3
+ "badge": "t9n - MVP",
4
+ "title": "La traduction i18n qui respecte votre code.",
5
+ "subtitle": "Zéro erreur de syntaxe. Protection des variables. Sensible au contexte.",
6
+ "button": "Traduire maintenant"
7
+ },
8
+ "editor": {
9
+ "run": "LANCER LA TRADUCTION",
10
+ "translating": "TRADUCTION EN COURS",
11
+ "source": {
12
+ "label": "Langue source",
13
+ "upload": "Charger JSON",
14
+ "upload_multiple": "Cliquez pour charger des fichiers JSON",
15
+ "context": "Contexte",
16
+ "context_placeholder": "Ajoutez du contexte pour améliorer la traduction...",
17
+ "pro_feature": "FONCTION PRO",
18
+ "pro_context_msg": "Passez à la version Pro pour fournir du contexte et gagner en précision.",
19
+ "info": "SOURCE",
20
+ "lines": "Lignes",
21
+ "clear_context": "Effacer",
22
+ "large_file_title": "Fichier volumineux chargé ({size})",
23
+ "large_file_desc": "L'aperçu est désactivé pour les performances. Tout le contenu sera envoyé pour traduction."
24
+ },
25
+ "diff_dialog": {
26
+ "title": "Mise à jour incrémentielle (Diff)",
27
+ "files_preview": "Aperçu des fichiers",
28
+ "base_tag": "BASE",
29
+ "start_diff": "Lancer le Diff"
30
+ },
31
+ "target": {
32
+ "label": "Langue cible",
33
+ "copy": "Copier",
34
+ "download": "Télécharger",
35
+ "no_selection": "Aucune langue sélectionnée",
36
+ "placeholder": "Sélectionnez une langue et lancez la traduction pour voir les résultats",
37
+ "stale_warning": "Source modifiée - Traduction obsolète",
38
+ "max_select": "MAX {n}",
39
+ "more_suffix": "(+{n})"
40
+ },
41
+ "mobile": {
42
+ "view_result": "Voir le résultat",
43
+ "back_to_code": "Retour au code"
44
+ },
45
+ "features": {
46
+ "diff_title": "Diff incrémentiel",
47
+ "diff_msg": "La fonctionnalité de mise à jour incrémentielle arrive bientôt !",
48
+ "soon": "BIENTÔT"
49
+ },
50
+ "messages": {
51
+ "pro_feature_title": "Fonction Pro (Bientôt disponible)",
52
+ "upload_pro_msg": "L'importation est une fonction Pro.\n\nNous construisons actuellement les fonctions premium. Restez à l'écoute !\n\nBesoin d'aide ? Contact : {email}",
53
+ "download_pro_msg": "Le téléchargement est une fonction Pro.\n\nNous construisons actuellement les fonctions premium. Restez à l'écoute !\n\nBesoin d'aide ? Contact : {email}",
54
+ "diff_upload_hint": "Chargez tous vos fichiers de traduction. Le plus complet servira de base.",
55
+ "file_too_large_title": "Fichier trop volumineux",
56
+ "file_too_large_msg": "Le fichier est trop volumineux ({size}). Limite max : {limit}.\n\nLe découpage de fichiers arrive bientôt !",
57
+ "copied": "Copié dans le presse-papiers !",
58
+ "copy_failed": "Échec de la copie",
59
+ "invalid_json": "JSON source invalide",
60
+ "translation_complete": "Traduction terminée !",
61
+ "translation_failed": "Échec de la traduction",
62
+ "daily_limit_reached": "LIMITE QUOTIDIENNE ATTEINTE",
63
+ "daily_limit_desc": "Vous avez utilisé vos traductions gratuites du jour.",
64
+ "pro_plan_coming_soon": "FORFAIT PRO ET ACCÈS ILLIMITÉ BIENTÔT DISPONIBLES !",
65
+ "building_premium": "Nous construisons actuellement les fonctions premium. Restez à l'écoute !",
66
+ "contact_us": "Besoin de plus ? Contactez-nous : {email}",
67
+ "error_details": "Détails de l'erreur :",
68
+ "limit_exceeded": "Limite dépassée",
69
+ "limit_exceeded_desc": "Le forfait {tier} autorise jusqu'à {max} clés par requête. Votre fichier en contient {keys}.",
70
+ "insufficient_credits": "Crédits insuffisants",
71
+ "insufficient_credits_desc": "Cette traduction nécessite {cost} crédits, mais il vous en reste {available}.",
72
+ "free_plan_limit_exceeded": "LIMITE DU FORFAIT GRATUIT DÉPASSÉE",
73
+ "upgrade_to_pro": "PASSER PRO (Bientôt)",
74
+ "pro_benefits_1": "Clés illimitées par fichier",
75
+ "pro_benefits_2": "Longueur de contexte illimitée",
76
+ "pro_benefits_3": "Traduction par lots",
77
+ "reduce_size": "Pour l'instant, veuillez réduire la taille du fichier ou du contexte.",
78
+ "select_target_lang": "Veuillez sélectionner au moins une langue cible.",
79
+ "up_to_date": "Toutes les langues sélectionnées sont à jour.",
80
+ "translating_placeholder": "// Traduction en cours...",
81
+ "error_no_data": "// Erreur : Aucune donnée reçue.",
82
+ "error_failed_generic": "// Erreur : Échec de la traduction. Veuillez réessayer.",
83
+ "max_langs_reached": "Maximum {n} langues cibles autorisées en forfait gratuit.",
84
+ "credits_needed": "Crédits requis",
85
+ "credits_remaining": "Restants",
86
+ "invalid_base_json": "JSON de base invalide",
87
+ "invalid_base_content": "Contenu du fichier de base invalide"
88
+ }
89
+ },
90
+ "common": {
91
+ "contact": "Contact",
92
+ "email": "z17682341097@gmail.com",
93
+ "pro": "PRO",
94
+ "coming_soon": "Bientôt",
95
+ "pricing": "Tarifs",
96
+ "docs": "Docs & CLI",
97
+ "cli": "CLI",
98
+ "i18n_note": "Toutes les traductions de ce site ont été générées avec t9n.",
99
+ "upgrade": "Améliorer",
100
+ "auto_detect": "Détection auto",
101
+ "soon": "BIENTÔT",
102
+ "pro_only": "(Uniquement {pro})",
103
+ "contact_support": "Contacter le support",
104
+ "pricing_limits": "Tarifs & Limites",
105
+ "back_to_home": "RETOUR À L'ACCUEIL",
106
+ "back_to_editor": "Retour à l'éditeur",
107
+ "mail_to": "Envoyer à",
108
+ "cancel": "ANNULER",
109
+ "close": "FERMER",
110
+ "confirm": "CONFIRMER",
111
+ "notification": "Notification"
112
+ },
113
+ "auth": {
114
+ "login": "Connexion",
115
+ "logout": "Déconnexion",
116
+ "welcome_back": "Bon retour",
117
+ "login_desc": "Connectez-vous pour accéder aux fonctions Pro et aux limites supérieures",
118
+ "cli_login_required": "Veuillez vous connecter d'abord avec : t9n auth <votre-clé-api>",
119
+ "continue_google": "Continuer avec Google",
120
+ "continue_github": "Continuer avec GitHub",
121
+ "terms": "En continuant, vous acceptez nos Conditions d'utilisation et notre Politique de confidentialité."
122
+ },
123
+ "settings": {
124
+ "title": "Paramètres",
125
+ "apikeys": {
126
+ "title": "Clés API",
127
+ "desc": "Gérez vos clés API pour le CLI ou les pipelines CI/CD.",
128
+ "create": "Créer une clé",
129
+ "name_label": "Nom de la clé",
130
+ "name_placeholder": "ex: Mon Laptop CLI",
131
+ "key_secret_warning": "Copiez votre clé maintenant. Par sécurité, elle ne sera plus affichée.",
132
+ "copy_key": "Copier la clé",
133
+ "list_empty": "Aucune clé API créée.",
134
+ "revoke": "Révoquer",
135
+ "revoke_confirm": "Révoquer cette clé API ? Les outils l'utilisant cesseront de fonctionner.",
136
+ "last_used": "Dernière utilisation",
137
+ "never_used": "Jamais",
138
+ "created": "Créée"
139
+ }
140
+ },
141
+ "pricing": {
142
+ "title": "Tarifs simples et transparents",
143
+ "subtitle": "Choisissez le forfait qui correspond à vos besoins.",
144
+ "monthly": "mensuel",
145
+ "daily": "quotidien",
146
+ "per_request": "par requête",
147
+ "get_started": "Démarrer",
148
+ "upgrade": "Améliorer maintenant",
149
+ "contact_sales": "Contacter les ventes",
150
+ "features": {
151
+ "credits": "{n} Crédits",
152
+ "keys": "Jusqu'à {n} clés",
153
+ "langs": "Jusqu'à {n} langues",
154
+ "upload_download": "Import / Export",
155
+ "diff": "Mise à jour incrémentielle (Diff)",
156
+ "context": "Sensibilité au contexte"
157
+ },
158
+ "most_popular": "Le plus populaire",
159
+ "custom": "Sur mesure"
160
+ },
161
+ "metadata": {
162
+ "title": "t9n - Traducteur JSON pour Développeurs | Traducteur i18n AI",
163
+ "description": "Le traducteur IA pensé pour les développeurs. Zéro erreur de syntaxe, protection des variables (React Intl, i18next) et contexte intelligent. Traduisez du logiciel, pas juste des mots.",
164
+ "og_title": "t9n - Traducteur JSON pour Développeurs",
165
+ "og_description": "Traduisez vos fichiers JSON i18n sans casser vos variables. Supporte React Intl, i18next, etc."
166
+ },
167
+ "docs": {
168
+ "title": "Documentation",
169
+ "subtitle": "Découvrez les fonctionnalités de t9n, de l'utilisation basique aux mises à jour incrémentielles et à l'optimisation par IA.",
170
+ "sections": {
171
+ "basic": {
172
+ "title": "Fonction de base : Traduction temps réel",
173
+ "content": "t9n est conçu pour le format JSON i18n. Notre stratégie de Prompt assure que toutes les variables (comme {name} ou {{count}}) sont strictement protégées.",
174
+ "item1": "Sélection multiple de langues cibles, générant plusieurs fichiers d'un coup.",
175
+ "item2": "Aperçu temps réel : comparaison côte à côte des sources et cibles."
176
+ },
177
+ "context": {
178
+ "title": "Conscience du Contexte",
179
+ "content": "Traduire, c'est plus que du mot à mot. En fournissant le contexte de l'application, l'IA choisit le vocabulaire plus précisément.",
180
+ "example": "Par exemple, le mot \"Menu\" désigne une carte dans une application de restaurant et une \"liste de fonctions\" dans un logiciel de design."
181
+ },
182
+ "diff": {
183
+ "title": "Mise à jour incrémentielle intelligente (Mode Diff)",
184
+ "content": "Quand votre source (en.json) change, pas besoin de tout retraduire. Le mode incrémentiel est désormais automatisé.",
185
+ "new_feature": "Nouveau : Reconnaissance multi-fichiers auto",
186
+ "step1_title": "1. Import multiple",
187
+ "step1_desc": "Sélectionnez l'anglais (base) et vos traductions existantes simultanément. Plus de comparaisons manuelles.",
188
+ "step2_title": "2. Détection intelligente de base",
189
+ "step2_desc": "Le système analyse les clés et traite le fichier le plus complet comme base, remplissant les parties manquantes des autres.",
190
+ "step3_title": "3. Traduction de précision",
191
+ "step3_desc": "Les clés manquantes sont marquées 🚧 [MISSING]. L'IA ne traduit que celles-ci, économisant plus de 90% de crédits.",
192
+ "quote": "\"Gardez 100% de vos traductions, traitez uniquement les nouveautés.\""
193
+ },
194
+ "cli": {
195
+ "tag": "Disponible",
196
+ "title": "t9n CLI",
197
+ "content": "Gestion i18n pro depuis votre terminal. Automatisez votre workflow avec notre interface en ligne de commande.",
198
+ "install": "npm install -g @t9n/cli",
199
+ "command_auth": "t9n auth <key>",
200
+ "command_init": "t9n init",
201
+ "command_scan": "t9n scan ./src",
202
+ "command_translate": "t9n translate ./en.json -t zh-CN,ja",
203
+ "command_diff": "t9n diff ./dictionaries",
204
+ "desc_auth": "Liez votre environnement local à votre compte t9n.",
205
+ "desc_init": "Créez t9n.config.json pour vos préférences de projet.",
206
+ "desc_scan": "Trouvez les clés manquantes dans votre code source.",
207
+ "desc_translate": "Traduisez directement vos fichiers locaux et sauvegardez les résultats.",
208
+ "desc_diff": "Mises à jour incrémentielles pour toutes les langues d'un dossier.",
209
+ "progress": "Prêt pour la production"
210
+ }
211
+ },
212
+ "example_correct": "Portfolio\" → \"Portefeuille d'investissement\"",
213
+ "example_incorrect": "Portfolio\" → \"Galerie d'art\""
214
+ },
215
+ "cli": {
216
+ "diff": {
217
+ "title": "🛰️ T9N CLI - Mise à jour incrémentielle",
218
+ "analyzing": "🔍 Analyse des différences...",
219
+ "comparing": "Comparaison avec le fichier existant...",
220
+ "new_lang": "Nouvelle langue détectée.",
221
+ "success": "Traduction reçue avec succès !",
222
+ "updated": "Mis à jour :",
223
+ "all_up_to_date": "✨ Toutes les traductions sont à jour !"
224
+ },
225
+ "scan": {
226
+ "title": "🔍 T9N CLI - Scanner de code",
227
+ "scanning": "Scan des fichiers...",
228
+ "scanned": "{n} fichiers scannés.",
229
+ "missing_found": "{n} clés manquantes trouvées (dans le code mais PAS dans le dictionnaire) :",
230
+ "all_present": "✨ Toutes les clés du code sont présentes dans le dictionnaire.",
231
+ "orphaned": "{n} clés potentiellement inutilisées (dans le dictionnaire mais PAS dans le code) :"
232
+ },
233
+ "auth": {
234
+ "verifying": "Vérification de la clé API...",
235
+ "success": "Authentification réussie ! (config {target})",
236
+ "key_missing": "Veuillez fournir une clé API. Usage : t9n auth <key>"
237
+ },
238
+ "init": {
239
+ "title": "🎬 T9N - Initialisation du projet",
240
+ "created": "Configuration créée : {path}",
241
+ "already_exists": "Le fichier de config existe déjà : {path}"
242
+ }
243
+ }
244
+ }