feat: Complete Spanish, French, Portuguese, Chinese localization and add German/Italian support
Some checks failed
CI/CD Pipeline / Lint and Test (push) Has been cancelled
CI/CD Pipeline / E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled

- 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:
2025-10-03 15:03:02 +00:00
parent 41320638e5
commit 58c3a8d9d5
74 changed files with 5413 additions and 1735 deletions

View File

@@ -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": "Ocorreu um erro desconhecido",
"networkError": "Erro de rede. Por favor, verifique sua conexão.",
"serverError": "Erro do servidor. Por favor, tente novamente mais tarde.",
"notFound": "O recurso solicitado não foi encontrado",
"unauthorized": "Você não está autorizado a realizar esta ação",
"forbidden": "Acesso negado",
"validation": "Por favor, verifique sua entrada e tente novamente",
"timeout": "Tempo limite esgotado. Por favor, tente novamente."
},
"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 senha inválidos",
"emailExists": "Já existe uma conta com este e-mail",
"emailNotVerified": "Por favor, verifique seu endereço de e-mail",
"accountLocked": "Sua conta foi bloqueada. Por favor, entre em contato com o suporte.",
"sessionExpired": "Sua sessão expirou. Por favor, faça login novamente.",
"weakPassword": "A senha é muito fraca",
"tokenInvalid": "Token inválido ou expirado",
"deviceNotTrusted": "Dispositivo não confiável. Por favor, verifique seu dispositivo."
},
"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 tamanho da família excedido",
"memberNotFound": "Membro da família não encontrado",
"cannotRemoveSelf": "Você não pode se remover da família",
"insufficientPermissions": "Você não tem permissão para realizar esta ação",
"invitationExpired": "Este convite expirou",
"alreadyMember": "Esta pessoa já é membro da família"
},
"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": "Perfil da criança não encontrado",
"invalidAge": "Idade inválida. Por favor, verifique a data de nascimento.",
"limitExceeded": "Você atingiu o número máximo de crianças"
},
"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": "Dados de acompanhamento inválidos",
"futureDate": "Você não pode registrar atividades no futuro",
"duplicateEntry": "Uma entrada similar já existe",
"invalidDuration": "Duração inválida",
"invalidAmount": "Quantidade inválida"
},
"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 diário de perguntas IA atingido",
"contextError": "Falha ao carregar contexto para IA",
"responseError": "Falha ao gerar resposta IA",
"moderationFlag": "Sua mensagem foi sinalizada pelo nosso sistema de moderação de conteúdo"
},
"offline": {
"noConnection": "No internet connection",
"syncFailed": "Failed to sync data",
"pendingChanges": "You have pending changes that need to be synced"
"noConnection": "Sem conexão com a internet",
"syncFailed": "Falha ao sincronizar dados",
"pendingChanges": "Você tem alterações pendentes que precisam ser sincronizadas"
},
"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": "Este campo é obrigatório",
"invalidEmail": "Por favor, digite um endereço de e-mail válido",
"invalidPhone": "Por favor, digite um número de telefone válido",
"invalidDate": "Por favor, digite uma data válida",
"minLength": "Deve ter pelo menos {{min}} caracteres",
"maxLength": "Não deve ter mais de {{max}} caracteres",
"minValue": "Deve ser pelo menos {{min}}",
"maxValue": "Não deve ser mais de {{max}}",
"invalidFormat": "Formato inválido",
"passwordMismatch": "As senhas não coincidem"
},
"retry": "Retry",
"goBack": "Go Back",
"contactSupport": "Contact Support",
"dismiss": "Dismiss"
}
"retry": "Tentar Novamente",
"goBack": "Voltar",
"contactSupport": "Entrar em Contato com o Suporte",
"dismiss": "Dispensar"
}