feat: Complete Spanish, French, Portuguese, Chinese localization and add German/Italian support
- Updated all Spanish (es) translation files with comprehensive translations for tracking, AI, family, insights, children, and settings pages - Updated French (fr), Portuguese (pt), and Chinese (zh) translations to match English structure - Added German (de) and Italian (it) language support with complete translation files - Fixed medicine tracker route from /track/medication to /track/medicine - Updated i18n config to support 7 languages: en, es, fr, pt, zh, de, it - All tracking pages now fully localized: sleep, feeding, diaper, medicine, activity - AI assistant interface fully translated with thinking messages and suggested questions - Family management and insights pages now support all languages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,69 +1,69 @@
|
||||
{
|
||||
"general": {
|
||||
"unknown": "An unknown error occurred",
|
||||
"networkError": "Network error. Please check your connection.",
|
||||
"serverError": "Server error. Please try again later.",
|
||||
"notFound": "The requested resource was not found",
|
||||
"unauthorized": "You are not authorized to perform this action",
|
||||
"forbidden": "Access denied",
|
||||
"validation": "Please check your input and try again",
|
||||
"timeout": "Request timed out. Please try again."
|
||||
"unknown": "Une erreur inconnue s'est produite",
|
||||
"networkError": "Erreur réseau. Veuillez vérifier votre connexion.",
|
||||
"serverError": "Erreur serveur. Veuillez réessayer plus tard.",
|
||||
"notFound": "La ressource demandée n'a pas été trouvée",
|
||||
"unauthorized": "Vous n'êtes pas autorisé à effectuer cette action",
|
||||
"forbidden": "Accès refusé",
|
||||
"validation": "Veuillez vérifier votre saisie et réessayer",
|
||||
"timeout": "Délai d'attente dépassé. Veuillez réessayer."
|
||||
},
|
||||
"auth": {
|
||||
"invalidCredentials": "Invalid email or password",
|
||||
"emailExists": "An account with this email already exists",
|
||||
"emailNotVerified": "Please verify your email address",
|
||||
"accountLocked": "Your account has been locked. Please contact support.",
|
||||
"sessionExpired": "Your session has expired. Please sign in again.",
|
||||
"weakPassword": "Password is too weak",
|
||||
"tokenInvalid": "Invalid or expired token",
|
||||
"deviceNotTrusted": "Device not trusted. Please verify your device."
|
||||
"invalidCredentials": "E-mail ou mot de passe invalide",
|
||||
"emailExists": "Un compte avec cet e-mail existe déjà",
|
||||
"emailNotVerified": "Veuillez vérifier votre adresse e-mail",
|
||||
"accountLocked": "Votre compte a été verrouillé. Veuillez contacter le support.",
|
||||
"sessionExpired": "Votre session a expiré. Veuillez vous reconnecter.",
|
||||
"weakPassword": "Le mot de passe est trop faible",
|
||||
"tokenInvalid": "Jeton invalide ou expiré",
|
||||
"deviceNotTrusted": "Appareil non fiable. Veuillez vérifier votre appareil."
|
||||
},
|
||||
"family": {
|
||||
"limitExceeded": "Family size limit exceeded",
|
||||
"memberNotFound": "Family member not found",
|
||||
"cannotRemoveSelf": "You cannot remove yourself from the family",
|
||||
"insufficientPermissions": "You don't have permission to perform this action",
|
||||
"invitationExpired": "This invitation has expired",
|
||||
"alreadyMember": "This person is already a family member"
|
||||
"limitExceeded": "Limite de taille de famille dépassée",
|
||||
"memberNotFound": "Membre de famille non trouvé",
|
||||
"cannotRemoveSelf": "Vous ne pouvez pas vous retirer de la famille",
|
||||
"insufficientPermissions": "Vous n'avez pas la permission d'effectuer cette action",
|
||||
"invitationExpired": "Cette invitation a expiré",
|
||||
"alreadyMember": "Cette personne est déjà membre de la famille"
|
||||
},
|
||||
"child": {
|
||||
"notFound": "Child profile not found",
|
||||
"invalidAge": "Invalid age. Please check the date of birth.",
|
||||
"limitExceeded": "You've reached the maximum number of children"
|
||||
"notFound": "Profil d'enfant non trouvé",
|
||||
"invalidAge": "Âge invalide. Veuillez vérifier la date de naissance.",
|
||||
"limitExceeded": "Vous avez atteint le nombre maximum d'enfants"
|
||||
},
|
||||
"tracking": {
|
||||
"invalidData": "Invalid tracking data",
|
||||
"futureDate": "You cannot log activities in the future",
|
||||
"duplicateEntry": "A similar entry already exists",
|
||||
"invalidDuration": "Invalid duration",
|
||||
"invalidAmount": "Invalid amount"
|
||||
"invalidData": "Données de suivi invalides",
|
||||
"futureDate": "Vous ne pouvez pas enregistrer d'activités dans le futur",
|
||||
"duplicateEntry": "Une entrée similaire existe déjà",
|
||||
"invalidDuration": "Durée invalide",
|
||||
"invalidAmount": "Quantité invalide"
|
||||
},
|
||||
"ai": {
|
||||
"dailyLimitReached": "Daily AI question limit reached",
|
||||
"contextError": "Failed to load context for AI",
|
||||
"responseError": "Failed to generate AI response",
|
||||
"moderationFlag": "Your message was flagged by our content moderation system"
|
||||
"dailyLimitReached": "Limite quotidienne de questions IA atteinte",
|
||||
"contextError": "Échec du chargement du contexte pour l'IA",
|
||||
"responseError": "Échec de la génération de réponse IA",
|
||||
"moderationFlag": "Votre message a été signalé par notre système de modération de contenu"
|
||||
},
|
||||
"offline": {
|
||||
"noConnection": "No internet connection",
|
||||
"syncFailed": "Failed to sync data",
|
||||
"pendingChanges": "You have pending changes that need to be synced"
|
||||
"noConnection": "Aucune connexion internet",
|
||||
"syncFailed": "Échec de la synchronisation des données",
|
||||
"pendingChanges": "Vous avez des modifications en attente qui doivent être synchronisées"
|
||||
},
|
||||
"validation": {
|
||||
"required": "This field is required",
|
||||
"invalidEmail": "Please enter a valid email address",
|
||||
"invalidPhone": "Please enter a valid phone number",
|
||||
"invalidDate": "Please enter a valid date",
|
||||
"minLength": "Must be at least {{min}} characters",
|
||||
"maxLength": "Must be no more than {{max}} characters",
|
||||
"minValue": "Must be at least {{min}}",
|
||||
"maxValue": "Must be no more than {{max}}",
|
||||
"invalidFormat": "Invalid format",
|
||||
"passwordMismatch": "Passwords do not match"
|
||||
"required": "Ce champ est requis",
|
||||
"invalidEmail": "Veuillez entrer une adresse e-mail valide",
|
||||
"invalidPhone": "Veuillez entrer un numéro de téléphone valide",
|
||||
"invalidDate": "Veuillez entrer une date valide",
|
||||
"minLength": "Doit contenir au moins {{min}} caractères",
|
||||
"maxLength": "Ne doit pas dépasser {{max}} caractères",
|
||||
"minValue": "Doit être au moins {{min}}",
|
||||
"maxValue": "Ne doit pas dépasser {{max}}",
|
||||
"invalidFormat": "Format invalide",
|
||||
"passwordMismatch": "Les mots de passe ne correspondent pas"
|
||||
},
|
||||
"retry": "Retry",
|
||||
"goBack": "Go Back",
|
||||
"contactSupport": "Contact Support",
|
||||
"dismiss": "Dismiss"
|
||||
}
|
||||
"retry": "Réessayer",
|
||||
"goBack": "Retour",
|
||||
"contactSupport": "Contacter le Support",
|
||||
"dismiss": "Ignorer"
|
||||
}
|
||||
Reference in New Issue
Block a user