diff --git a/frontend/app/src/i18n/ca/components/activities/activityBellowMPillsComponent.json b/frontend/app/src/i18n/ca/components/activities/activityBellowMPillsComponent.json index b58c56049..d176eff9b 100644 --- a/frontend/app/src/i18n/ca/components/activities/activityBellowMPillsComponent.json +++ b/frontend/app/src/i18n/ca/components/activities/activityBellowMPillsComponent.json @@ -17,7 +17,7 @@ "labelAvgCadence": "Cadència mitjana", "labelMaxCadence": "Cadència màx", "subTitleElevation": "Elevació", - "labelElevationGain": "Desnivell positiu", + "labelElevationGain": "Desnivell +", "labelElevationLoss": "Pèrdua elevació", "subTitleStrokeRate": "Freqüència batecs", "labelAvgStrokeRate": "Freqüència mitjana de batecs", diff --git a/frontend/app/src/i18n/ca/components/activities/activitySummaryComponent.json b/frontend/app/src/i18n/ca/components/activities/activitySummaryComponent.json index 41b8388dc..412efc529 100644 --- a/frontend/app/src/i18n/ca/components/activities/activitySummaryComponent.json +++ b/frontend/app/src/i18n/ca/components/activities/activitySummaryComponent.json @@ -22,8 +22,8 @@ "activityMaxHR": "FC Màx", "activityAvgPower": "Força Mitja", "activityAvgSpeed": "Vel mitja", - "activityEleGain": "Desnivell Positiu", - "activityEleLoss": "Desnivell Negatiu", + "activityEleGain": "Desnivell +", + "activityEleLoss": "Desnivell -", "activityCalories": "Calories", "activityNoData": "Sense dades", "errorFetchingUserById": "Error obtenint usuari per id", diff --git a/frontend/app/src/i18n/ca/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/ca/components/activities/modals/editActivityModalComponent.json index aa18eddb9..3dc4f2e8a 100644 --- a/frontend/app/src/i18n/ca/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/ca/components/activities/modals/editActivityModalComponent.json @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Seguidors", "modalEditActivityVisibilityOption2": "Privat", "modalEditActivityIsHiddenLabel": "Està ocult", + "modalEditActivityHiddenItemsLabel": "Camps d'activitat ocults", "modalEditActivityHideStartTimeLabel": "Amaga hora inici", "modalEditActivityHideLocationLabel": "Amaga localització", "modalEditActivityHideMapLabel": "Amaga el mapa", diff --git a/frontend/app/src/i18n/ca/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/ca/components/health/healthDashboardZoneComponent.json index f033b57fa..663c5cc23 100644 --- a/frontend/app/src/i18n/ca/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Son d'Avui", + "noSleepTarget": "Sense objectiu de son", + "restingHeartRate": "Freqüència cardíaca en repòs", + "avgSkinTemperatureDeviation": "Temp. dev. pell.", "weight": "Pes", "noWeightData": "Sense dades de Pes", "noWeightTarget": "Cap objectiu de pes", @@ -9,5 +13,8 @@ "bmiOverweight": "Sobrepès", "bmiObesityClass1": "Obesitat (Classe 1)", "bmiObesityClass2": "Obesitat (Classe 2)", - "bmiObesityClass3": "Obessitat Extrema (Classe 3)" + "bmiObesityClass3": "Obessitat Extrema (Classe 3)", + "steps": "Passes d'avui", + "stepsTargetLabel": "passos", + "noStepsTarget": "Sense objectiu de passos" } diff --git a/frontend/app/src/i18n/ca/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/ca/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/ca/components/health/healthSideBarComponent.json index d8af5ad18..9caccee41 100644 --- a/frontend/app/src/i18n/ca/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/ca/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Panell de control", + "sleepSection": "Son", + "RHRSection": "Freqüència cardíaca en repòs", + "stepsSection": "Passos", "weightSection": "Pes" } diff --git a/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..a3bc8c48f --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Son total", + "deepSleepLabel": "Son profund", + "lightSleepLabel": "Son lleuger", + "remSleepLabel": "Somni REM", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Mitja Stres de Son", + "restingHeartRateLabel": "FC en repòs", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Durada", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..d6a314a53 --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "FC en repòs", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Mitja Stres de Son" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/ca/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..5be7cd9ca --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Afegir passos", + "editStepsModalTitle": "Edita passos", + "addStepsLabel": "Passos", + "addStepsDateLabel": "Data", + "successAddSteps": "Passos afegits", + "errorAddSteps": "Error afegint passos" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..0c797b66d --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "passos", + "labelDate": "Data", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Esborra entrada de passos", + "modalDeleteStepsBody": "Segur que vols suprimir l'entrada de passos per ", + "successDeleteSteps": "Passos esborrats", + "errorDeleteSteps": "No s'ha pogut suprimir l'entrada de passos", + "successEditSteps": "Passos editats", + "errorEditSteps": "No s'ha pogut editar l'entrada de passos" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/ca/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..5337b977f --- /dev/null +++ b/frontend/app/src/i18n/ca/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Afegir passos", + "buttonStepsTarget": "Objectiu de passos", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 8b337f78e..ad1f79394 100644 --- a/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Editar pes", "addWeightWeightLabel": "Pes", "addWeightDateLabel": "Data", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Pes afegit", "errorAddWeight": "Error afegint pes" } diff --git a/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightListComponent.json index 556e1c419..aa926f1ff 100644 --- a/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/ca/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Detalls", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Esborrar pes", "modalDeleteWeightBody": "Segur que vols suprimir l'entrada de pes per ", "successDeleteWeight": "Pes esborrat", diff --git a/frontend/app/src/i18n/ca/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/ca/components/health/healthWeightZoneComponent.json index f3dfc30b5..2aa67e2fe 100644 --- a/frontend/app/src/i18n/ca/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Afegir pes", - "labelNumberOfHealthWeightWeight1": "Hi ha un total de ", - "labelNumberOfHealthWeightWeight2": " mesure(s) de pes inserides (", - "labelNumberOfHealthWeightWeight3": " carregat):" + "buttonWeightTarget": "Objectiu de pes", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..d09f56027 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Afegir proveidor d'identitats", + "editTitle": "Edita proveidor d'identitats", + "templateLabel": "Plantilles", + "templateCustom": "Personalitzat (config. manual)", + "nameLabel": "Nom del proveïdor", + "namePlaceholder": "Entra nom del proveidor", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Caràcters alfanumèrics en minúscula. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Tipus de proveïdor", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client ID", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Aparença", + "iconLabel": "Icona", + "iconCustom": "Personalitzat", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Opcions", + "enabledLabel": "Habilitat", + "autoCreateUsersLabel": "Crea usuaris/es automàticament", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..65b8fd661 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Afegir proveidor d'identitats", + "labelNumberOfProviders1": "Tens ", + "labelNumberOfProviders2": " proveïdor(s) d'identitat(s) configurat(s):", + "enabledBadge": "Habilitat", + "disabledBadge": "Deshabilitat", + "disableButton": "Deshabilita", + "enableButton": "Habilita", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edita", + "deleteButton": "Esborra", + "infoAlert": "Els proveïdors d'identitat permeten als usuaris accedir amb serveis com Keycloack o Authentik.", + "deleteModalTitle": "Esborra proveidor d'identitat", + "deleteModalBody": "Esborrar proveidor d'identitat '{name}'? Usuais linkat al proveidor no podran accedir.", + "deleteModalConfirm": "Suprimeix proveïdor", + "enablingProvider": "Habilitant {name}...", + "disablingProvider": "Deshabilitant {name}...", + "providerEnabled": "{name} habilitat", + "providerDisabled": "{name} deshabilitat", + "deletingProvider": "Esborrant {name}...", + "providerDeleted": "{name} esborrat", + "providerAdded": "{name} afegit", + "providerDetailsTitle": "Detalls proveidor", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "Sense permissos per administrar proveidors", + "errorFetchingProviders": "Error obtenint proveidors", + "errorUpdatingProvider": "Error actualitzant proveïdors", + "errorDeletingProvider": "Error esborrant proveïdors" +} diff --git a/frontend/app/src/i18n/ca/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsSecurityZoneComponent.json index 34173dddb..b220621f7 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Contrasenya canviada correctament", "userChangePasswordErrorMessage": "Error canviant contrasenya", "successDeleteSession": "Sessió eliminada correctament", - "errorDeleteSession": "Error esborrant sessió" + "errorDeleteSession": "Error esborrant sessió", + "subtitleLinkedAccounts": "Comptes vinculat", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Última sessió", + "linkedAccountsLinkedAt": "Linkat", + "linkedAccountsNeverUsed": "Mai usat", + "unlinkAccountButton": "Desenllaça", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Desenllaça el compte", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/ca/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsServerSettingsZoneComponent.json index 0afb5893b..9f3625df4 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Registre", "adminApprovalLabel": "Aprovació d'administrador", "emailConfirmationLabel": "Confirmació d'email", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Deshabilitar logins locals no permetrà entrar amb usuari/contrasenya. Assegura un SSO abans de deshabilitar-ho.", + "ssoAutoRedirectLabel": "Redireccionant a SSO", + "ssoAutoRedirectInfoAlert": "Redireccionar a SSO quan només hi ha um configurat i accés local deshabilitat.", "publicShareableLinksLabel": "Enllaços publics compartibles", "enabledLabel": "Habilitat", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Activant això, es podran veure totes les activitats publicades sense autenticació.", diff --git a/frontend/app/src/i18n/ca/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsSideBarComponent.json index 7b4ae7c0d..c40d27b67 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Usuaris", "serverSettingsSection": "Opcions servidor", + "identityProvidersSection": "Identity Providers", "generalSection": "General", "myProfileSection": "El meu perfil", "myGoals": "Objectius", diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..08ee0db53 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" +} diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUserProfileZoneComponent.json index d95072952..6ad43e496 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Divisa", "heightLabel": "Alçada", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Idioma preferit", "firstDayOfWeekLabel": "Primer dia de la setmana", "accessTypeLabel": "Tipus d'accés", diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index d057334a9..77aea8201 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Icona de proveïdor desconegut", - "providerTypeBadgeLabel": "Tipus de proveïdor d'autenticació", - "linkedAtLabel": "Data i hora quan es va enllaçar el proveïdor", - "linkedAt": "Enllaçat", - "lastLoginLabel": "Data i hora de l'últim inici de sessió amb aquest proveïdor", + "unknownProviderIcon": "Icona de proveidor desconeguda", + "providerTypeBadgeLabel": "Tipus proveidor autentificació", + "linkedAtLabel": "Data i hora de proveidor linkat", + "linkedAt": "Linkat", + "lastLoginLabel": "Data i hora de l'últim accés amb el proveidor", "lastLogin": "Últim ús", - "neverUsedLabel": "Aquest proveïdor mai s'ha utilitzat per iniciar sessió", - "neverUsed": "Mai utilitzat", - "deleteButtonAriaLabel": "Eliminar l'enllaç del proveïdor d'identitat {provider}", - "modalDeleteTitle": "Eliminar proveïdor d'identitat", - "modalDeleteBody1": "Estàs segur que vols desenllaçar", - "modalDeleteBody2": "? L'usuari ja no podrà iniciar sessió utilitzant aquest proveïdor.", - "modalDeleteButton": "Eliminar enllaç del proveïdor" + "neverUsedLabel": "Proveidor mai utilitzat per accedir", + "neverUsed": "Mai usat", + "deleteButtonAriaLabel": "Esborra {provider} link de proveidor", + "modalDeleteTitle": "Esborra proveidor d'identitat", + "modalDeleteBody1": "Segur que vols deslinkar", + "modalDeleteBody2": "? L'usuari no podrà accedir amb aquest proveidor.", + "modalDeleteButton": "Suprimeix link proveïdor" } diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 09ff94bb2..bd167c849 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Divisa", "addEditUserModalHeightLabel": "Alçada", "addEditUserModalHeightPlaceholder": "Alçada", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Alçada invàlida. Insereix una alçada en peus vàlida.", "addEditUserModalInchesValidationLabel": "Alçada invàlida. Insereix una alçada en polzades vàlida.", "addEditUserModalUserPreferredLanguageLabel": "Idioma preferit", diff --git a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersListComponent.json index 311f78aed..377b807fa 100644 --- a/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/ca/components/settings/settingsUsersZone/usersListComponent.json @@ -5,7 +5,7 @@ "userListUserIsAdminBadge": "Admin", "userListUserIsInactiveBadge": "Inactiu", "userListUserHasUnverifiedEmailBadge": "Correu no verificat", - "userListUserHasExternalAuthBadge": "Auth Externa", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "Aprova el registre d'usuari", "modalApproveSignUpBody": "Esteu segur que voleu aprovar l'usuari ", "processingApproval": "Processant aprovació...", @@ -21,8 +21,8 @@ "userSessionDeleteSuccessMessage": "Sessió eliminada correctament", "userSessionDeleteErrorMessage": "Error esborrant sessió", "tabSessions": "Sessions", - "tabIdentityProviders": "Proveïdors d'identitat", - "userIdpsLoadErrorMessage": "Error carregant proveïdors d'identitat", - "userIdpDeleteSuccessMessage": "Proveïdor d'identitat desenllaçat correctament", - "userIdpDeleteErrorMessage": "Error desenllaçant proveïdor d'identitat" + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/ca/generalItems.json b/frontend/app/src/i18n/ca/generalItems.json index 3d83eaa24..faaeef88b 100644 --- a/frontend/app/src/i18n/ca/generalItems.json +++ b/frontend/app/src/i18n/ca/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Torna", "buttonClose": "Tanca", + "buttonSubmit": "Envia", "true": "Cert", "false": "Fals", "yes": "Si", @@ -36,7 +37,8 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Pes en kg", - "unitsInches": "polzades", + "labelWeightTargetInKg": "Objectiu de pes en Kg", + "unitsInches": "inches", "unitsFeet": "peus", "unitsFeetShort": "peus", "unitsFeetInches": "peus, polzades", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lliures", "labelWeightInLbs": "Pes en lliures", + "labelWeightTargetInLbs": "Objectiu de pes en Lbs", + "labelSteps": "Passos", + "labelStepsTarget": "Objectiu de passos", + "labelSleep": "Dormir", + "labelSleepTarget": "Objectiu de son", + "labelDeep": "Profunditat", + "labelLight": "Llum", + "labelREM": "REM", + "labelAwake": "Despert", "unitsCalories": "kCal", "unitsBpm": "bpm", "labelHRinBpm": "Bategs en bpm", @@ -78,5 +89,13 @@ "genderFemale": "Dona", "genderUnspecified": "Sense especificar", "labelAverage": "Mitja", - "labelMaximum": "Màxim" + "labelMaximum": "Màxim", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Freqüència cardíaca en repòs", + "labelHours": "Hores", + "labelMinutes": "Minuts", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/ca/healthView.json b/frontend/app/src/i18n/ca/healthView.json index 233df9cdd..7fd2b3ae2 100644 --- a/frontend/app/src/i18n/ca/healthView.json +++ b/frontend/app/src/i18n/ca/healthView.json @@ -1,5 +1,13 @@ { "title": "Salut", + "errorFetchingHealthSteps": "Error recollint passos", "errorFetchingHealthWeight": "Error recollint dades de salut", - "errorFetchingHealthTargets": "Error recollint objectius de salut" + "errorFetchingHealthSleep": "Error recollint dades de son", + "errorFetchingHealthTargets": "Error recollint objectius de salut", + "successUpdatingWeightTarget": "Objectiu de pes actualitzat", + "errorUpdatingWeightTarget": "Error actualitzant objectiu de pes", + "successUpdatingStepsTarget": "Objectiu de pasos actualitzat", + "errorUpdatingStepsTarget": "Error actualitzant objectiu de passos", + "successUpdatingSleepTarget": "Objectiu de son actualitzat", + "errorUpdatingSleepTarget": "Error actualitzant objectiu de son" } diff --git a/frontend/app/src/i18n/ca/loginView.json b/frontend/app/src/i18n/ca/loginView.json index ba5e4e639..7278eea1b 100644 --- a/frontend/app/src/i18n/ca/loginView.json +++ b/frontend/app/src/i18n/ca/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Inici de sessió", "username": "Nom d’usuari", "password": "Contrasenya", + "hidePassword": "Amaga contrasenya", + "showPassword": "Mostra contrasenya", "mfaCode": "Codi MFA", "mfaRequired": "Autenticació multifactor requerida. Si us plau entra el codi de 6 dígits.", "verifyMFAButton": "Verificar MFA", @@ -33,5 +35,15 @@ "signUpLink": "No tens compte? Registre", "emailVerificationSent": "Reviseu el correu electrònic per obtenir instruccions de verificació", "adminApprovalRequired": "Compte pendent d'aprovació d''administració", - "verifyEmailInvalidLink": "Enllaç de verificació d'email invàlid" + "verifyEmailInvalidLink": "Enllaç de verificació d'email invàlid", + "ssoSection": "O accedeix amb", + "ssoButton": "Inicia sessió amb {provider}", + "ssoSuccess": "Autenticat correctament amb SSO", + "ssoFailed": "Autenticació SSO fallida. Torna a provar", + "ssoCancelled": "Autenticació SSO cancel•lada", + "ssoAccountNotFound": "Compte no trobat. Contacta amb l'admin", + "ssoAccountDisabled": "Compte deshabilitat. Contacta amb l'admin", + "ssoAutoCreateDisabled": "Auto creació de comptes deshabilitat. Contacta amn l'admin", + "ssoErrorUndefined": "Error durant autenticació SSO", + "forceLocalLogin": "Usa usuari i contrasenya per accedir." } diff --git a/frontend/app/src/i18n/cn/activityItems.json b/frontend/app/src/i18n/cn/activityItems.json index 8f4f30882..379a34f2c 100644 --- a/frontend/app/src/i18n/cn/activityItems.json +++ b/frontend/app/src/i18n/cn/activityItems.json @@ -40,9 +40,9 @@ "padel": "配斗球", "treadmillRun": "跑步机跑", "cardioTraining": "有氧训练", - "kayaking": "Kayaking", - "sailing": "Sailing", - "snowShoeing": "Snow shoeing", - "inlineSkating": "Inline skating", + "kayaking": "皮划艇", + "sailing": "帆船", + "snowShoeing": "雪地健行", + "inlineSkating": "直排轮滑", "labelWorkout": " 运动" } diff --git a/frontend/app/src/i18n/cn/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/cn/components/activities/modals/editActivityModalComponent.json index 3b1c38d4f..75092b3ee 100644 --- a/frontend/app/src/i18n/cn/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/cn/components/activities/modals/editActivityModalComponent.json @@ -48,15 +48,16 @@ "modalEditActivityTypeOption39": "配斗球", "modalEditActivityTypeOption40": "跑步机跑", "modalEditActivityTypeOption41": "有氧训练", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", - "modalEditActivityTypeOption44": "Snow shoeing", - "modalEditActivityTypeOption45": "Inline skating", + "modalEditActivityTypeOption42": "皮划艇", + "modalEditActivityTypeOption43": "帆船", + "modalEditActivityTypeOption44": "雪地健行", + "modalEditActivityTypeOption45": "直排轮滑", "modalEditActivityVisibilityLabel": "可见性", "modalEditActivityVisibilityOption0": "公开", "modalEditActivityVisibilityOption1": "粉丝", "modalEditActivityVisibilityOption2": "私密", "modalEditActivityIsHiddenLabel": "是否隐藏", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "隐藏起始时间", "modalEditActivityHideLocationLabel": "隐藏位置", "modalEditActivityHideMapLabel": "隐藏地图", diff --git a/frontend/app/src/i18n/cn/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/cn/components/health/healthDashboardZoneComponent.json index c2b824c89..72815fd5a 100644 --- a/frontend/app/src/i18n/cn/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "体重", "noWeightData": "没有体重数据", "noWeightTarget": "没有体量目标", @@ -9,5 +13,8 @@ "bmiOverweight": "超重", "bmiObesityClass1": "一级肥胖", "bmiObesityClass2": "二级肥胖", - "bmiObesityClass3": "三级肥胖(极度肥胖)" + "bmiObesityClass3": "三级肥胖(极度肥胖)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/cn/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/cn/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/cn/components/health/healthSideBarComponent.json index 36cf1ecae..74444a574 100644 --- a/frontend/app/src/i18n/cn/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/cn/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "仪表板", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "体重" } diff --git a/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/cn/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/cn/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/cn/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 1319abda1..482d92799 100644 --- a/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "编辑体重", "addWeightWeightLabel": "体重", "addWeightDateLabel": "日期", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "体重已添加", "errorAddWeight": "添加体重时出错" } diff --git a/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightListComponent.json index 9b576dd35..d9948d3b2 100644 --- a/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/cn/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "删除体重记录", "modalDeleteWeightBody": "确定要删除此体重记录吗?", "successDeleteWeight": "体重记录已删除", diff --git a/frontend/app/src/i18n/cn/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/cn/components/health/healthWeightZoneComponent.json index 445ed1b56..c74ae34ec 100644 --- a/frontend/app/src/i18n/cn/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "添加体重", - "labelNumberOfHealthWeightWeight1": "共有", - "labelNumberOfHealthWeightWeight2": "条体重记录(", - "labelNumberOfHealthWeightWeight3": "条已加载):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/cn/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsSecurityZoneComponent.json index cbc6e1206..f24732cee 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "密码修改成功", "userChangePasswordErrorMessage": "修改密码时出错", "successDeleteSession": "会话删除成功", - "errorDeleteSession": "删除会话时出错" + "errorDeleteSession": "删除会话时出错", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/cn/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsServerSettingsZoneComponent.json index dd02ad6c5..b4451a5d2 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "注册设置", "adminApprovalLabel": "管理员审核", "emailConfirmationLabel": "邮箱验证", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "公开分享链接", "enabledLabel": "启用", "serverSettingsPublicShareableLinksEnabledWarningAlert": "启用此选项后,所有公开发布的活动将可在未登录的情况下被查看。", diff --git a/frontend/app/src/i18n/cn/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsSideBarComponent.json index 1b48f5346..b6538a526 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "用户", "serverSettingsSection": "服务器设置", + "identityProvidersSection": "Identity Providers", "generalSection": "通用设置", "myProfileSection": "我的资料", "myGoals": "我的目标", diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 26c341d8d..08ee0db53 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1,17 +1,18 @@ { - "addEditGoalModalAddTitle": "Add Goal", - "addEditGoalModalEditTitle": "Edit Goal", + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", "addEditGoalModalGoalIntervalLabel": "Interval", "intervalOption1": "Daily", "intervalOption2": "Weekly", "intervalOption3": "Monthly", "intervalOption4": "Yearly", - "addEditGoalModalGoalActivityTypeLabel": "Activity Type", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", "activityTypeRun": "Run", "activityTypeBike": "Bike", "activityTypeSwim": "Swim", "activityTypeWalk": "Walk", "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", "addEditGoalModalGoalTypeLabel": "Type", "addEditGoalModalCaloriesLabel": "Calories", "addEditGoalModalCaloriesPlaceholder": "Target calories", diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUserProfileZoneComponent.json index a27709eca..730a8d1d6 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "英制", "currencyLabel": "货币", "heightLabel": "身高", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "首选语言", "firstDayOfWeekLabel": "每周的第一天", "accessTypeLabel": "账户类型", diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index b6d57f1f3..79c32cd3a 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "未知提供商图标", - "providerTypeBadgeLabel": "身份验证提供商类型", - "linkedAtLabel": "提供商链接的日期和时间", - "linkedAt": "已链接", - "lastLoginLabel": "使用此提供商最后一次登录的日期和时间", - "lastLogin": "最后使用", - "neverUsedLabel": "此提供商从未用于登录", - "neverUsed": "从未使用", - "deleteButtonAriaLabel": "删除 {provider} 身份提供商链接", - "modalDeleteTitle": "删除身份提供商", - "modalDeleteBody1": "确定要取消链接", - "modalDeleteBody2": " 吗?用户将无法再使用此提供商登录。", - "modalDeleteButton": "删除提供商链接" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 0a18681e1..84f300b0b 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "货币", "addEditUserModalHeightLabel": "身高", "addEditUserModalHeightPlaceholder": "身高", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "身高无效。请输入以英尺为单位的有效身高。", "addEditUserModalInchesValidationLabel": "身高无效。请输入以英寸为单位的有效身高。", "addEditUserModalUserPreferredLanguageLabel": "首选语言", diff --git a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersListComponent.json index 70b29f78c..6f41f09b3 100644 --- a/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/cn/components/settings/settingsUsersZone/usersListComponent.json @@ -1,28 +1,28 @@ { "userListAccessTypeOption1": "普通用户", "userListAccessTypeOption2": "管理员", - "userListUserIsMeBadge": "我", + "userListUserIsMeBadge": "自己", "userListUserIsAdminBadge": "管理员", - "userListUserIsInactiveBadge": "未激活", - "userListUserHasUnverifiedEmailBadge": "未验证邮箱", - "userListUserHasExternalAuthBadge": "外部认证", + "userListUserIsInactiveBadge": "未启用", + "userListUserHasUnverifiedEmailBadge": "邮箱未验证", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "批准用户注册", - "modalApproveSignUpBody": "您确定要批准用户 ", - "processingApproval": "正在处理批准...", - "userApproveSuccessMessage": "用户已成功批准。", - "userApproveErrorMessage": "批准用户时出错", + "modalApproveSignUpBody": "确定要批准用户 ", + "processingApproval": "正在处理审批……", + "userApproveSuccessMessage": "用户审批成功。", + "userApproveErrorMessage": "审批用户时出错", "modalRejectSignUpTitle": "拒绝用户注册", - "modalRejectSignUpBody1": "您确定要拒绝用户 ", - "modalRejectSignUpBody2": "该用户将被删除,此操作无法撤消。", + "modalRejectSignUpBody1": "确定要拒绝用户 ", + "modalRejectSignUpBody2": "该用户将被删除,此操作无法撤销。", "userEditErrorMessage": "编辑用户时出错", "modalDeleteUserTitle": "删除用户", - "modalDeleteUserBody": "您确定要删除用户 ", + "modalDeleteUserBody": "确定要删除用户 ", "userListUserSessionsTitle": "用户会话", - "userSessionDeleteSuccessMessage": "会话已成功删除", + "userSessionDeleteSuccessMessage": "会话删除成功", "userSessionDeleteErrorMessage": "删除会话时出错", - "tabSessions": "会话", - "tabIdentityProviders": "身份提供商", - "userIdpsLoadErrorMessage": "加载身份提供商时出错", - "userIdpDeleteSuccessMessage": "身份提供商已成功解除链接", - "userIdpDeleteErrorMessage": "解除身份提供商链接时出错" + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/cn/generalItems.json b/frontend/app/src/i18n/cn/generalItems.json index e61bf94bd..e37fd683a 100644 --- a/frontend/app/src/i18n/cn/generalItems.json +++ b/frontend/app/src/i18n/cn/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "返回", "buttonClose": "关闭", + "buttonSubmit": "Submit", "true": "真", "false": "假", "yes": "是", @@ -36,6 +37,7 @@ "unitsKmH": "公里/小时", "unitsKg": "千克", "labelWeightInKg": "体重(千克)", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "英寸", "unitsFeet": "英尺", "unitsFeetShort": "英尺", @@ -45,6 +47,15 @@ "unitsMph": "英里/小时", "unitsLbs": "磅", "labelWeightInLbs": "体重(磅)", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "卡路里", "unitsBpm": "次/分钟", "labelHRinBpm": "心率(次/分)", @@ -78,5 +89,13 @@ "genderFemale": "女", "genderUnspecified": "未指定", "labelAverage": "平均", - "labelMaximum": "最大值" + "labelMaximum": "最大值", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/cn/healthView.json b/frontend/app/src/i18n/cn/healthView.json index 7397272df..c51fc7ef9 100644 --- a/frontend/app/src/i18n/cn/healthView.json +++ b/frontend/app/src/i18n/cn/healthView.json @@ -1,5 +1,13 @@ { "title": "健康", - "errorFetchingHealthWeight": "获取健康数据出错", - "errorFetchingHealthTargets": "获取健康目标出错" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "获取健康目标出错", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/cn/loginView.json b/frontend/app/src/i18n/cn/loginView.json index b8b73a450..2c97081dd 100644 --- a/frontend/app/src/i18n/cn/loginView.json +++ b/frontend/app/src/i18n/cn/loginView.json @@ -8,6 +8,8 @@ "subtitle": "在下方登录", "username": "用户名", "password": "密码", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "两步验证代码", "mfaRequired": "需要两步验证。请输入您的 6 位数字代码。", "verifyMFAButton": "验证 MFA", @@ -33,5 +35,15 @@ "signUpLink": "还没有账户?请注册", "emailVerificationSent": "请检查您的电子邮箱以获取验证说明", "adminApprovalRequired": "您的帐户正在等待管理员批准", - "verifyEmailInvalidLink": "无效的电子邮件验证链接" + "verifyEmailInvalidLink": "无效的电子邮件验证链接", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/cn/searchView.json b/frontend/app/src/i18n/cn/searchView.json index 679292063..ef6dd06c7 100644 --- a/frontend/app/src/i18n/cn/searchView.json +++ b/frontend/app/src/i18n/cn/searchView.json @@ -21,10 +21,10 @@ "searchSelectActivityType15": "滑冰", "searchSelectActivityType16": "足球", "searchSelectActivityType17": "有氧", - "searchSelectActivityType18": "Kayaking", - "searchSelectActivityType19": "Sailing", - "searchSelectActivityType20": "Snow shoeing", - "searchSelectActivityType21": "Skating", + "searchSelectActivityType18": "皮划艇", + "searchSelectActivityType19": "帆船", + "searchSelectActivityType20": "雪地健行", + "searchSelectActivityType21": "溜冰", "searchSelectGearType0": "全部", "searchSelectGearType1": "自行车", "searchSelectGearType2": "鞋子", diff --git a/frontend/app/src/i18n/de/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/de/components/activities/modals/editActivityModalComponent.json index 8ab325316..019672a30 100644 --- a/frontend/app/src/i18n/de/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/de/components/activities/modals/editActivityModalComponent.json @@ -48,15 +48,16 @@ "modalEditActivityTypeOption39": "Padel", "modalEditActivityTypeOption40": "Laufbandlauf", "modalEditActivityTypeOption41": "Cardio training", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", + "modalEditActivityTypeOption42": "Kajaken", + "modalEditActivityTypeOption43": "Segeln", "modalEditActivityTypeOption44": "Snow shoeing", - "modalEditActivityTypeOption45": "Inline skating", + "modalEditActivityTypeOption45": "Inlineskaten", "modalEditActivityVisibilityLabel": "Sichtbarkeit", "modalEditActivityVisibilityOption0": "Öffentlich", "modalEditActivityVisibilityOption1": "Follower", "modalEditActivityVisibilityOption2": "Privat", "modalEditActivityIsHiddenLabel": "Versteckt", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Startzeit ausblenden", "modalEditActivityHideLocationLabel": "Standort verbergen", "modalEditActivityHideMapLabel": "Karte ausblenden", diff --git a/frontend/app/src/i18n/de/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/de/components/health/healthDashboardZoneComponent.json index f8656a3f5..2b97c04de 100644 --- a/frontend/app/src/i18n/de/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/de/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Gewicht", "noWeightData": "Keine Gewichtsdaten", "noWeightTarget": "Kein Gewichtsziel", @@ -9,5 +13,8 @@ "bmiOverweight": "Übergewichtig", "bmiObesityClass1": "Fettleibigkeit (Klasse 1)", "bmiObesityClass2": "Fettleibigkeit (Klasse 2)", - "bmiObesityClass3": "Fettleibigkeit (Klasse 3)" + "bmiObesityClass3": "Fettleibigkeit (Klasse 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/de/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/de/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/de/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/de/components/health/healthSideBarComponent.json index 96cc4514e..1cfb1797f 100644 --- a/frontend/app/src/i18n/de/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/de/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Dashboard", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Gewicht" } diff --git a/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/de/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/de/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/de/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/de/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/de/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index fdf8e2f73..d233db108 100644 --- a/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Gewicht bearbeiten", "addWeightWeightLabel": "Gewicht", "addWeightDateLabel": "Datum", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Gewicht hinzugefügt", "errorAddWeight": "Fehler beim hinzufügen des Gewichts" } diff --git a/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightListComponent.json index 98301dceb..a89e1ba4a 100644 --- a/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/de/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Gewicht löschen", "modalDeleteWeightBody": "Bist du sicher, dass du den Gewichtseintrag für löschen möchtest ", "successDeleteWeight": "Gewicht gelöscht", diff --git a/frontend/app/src/i18n/de/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/de/components/health/healthWeightZoneComponent.json index 726a0bee2..4e9ced55d 100644 --- a/frontend/app/src/i18n/de/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/de/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Gewicht hinzufügen", - "labelNumberOfHealthWeightWeight1": "Insgesamt ", - "labelNumberOfHealthWeightWeight2": " Gewichtsmessung(en) hinzugefügt (", - "labelNumberOfHealthWeightWeight3": " geladen):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/de/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json b/frontend/app/src/i18n/de/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json index cc951107a..97f88253d 100644 --- a/frontend/app/src/i18n/de/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json +++ b/frontend/app/src/i18n/de/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json @@ -1,4 +1,4 @@ { "title": "New sign-up request", - "subTitle": " has requested to sign-up" + "subTitle": " hat eine Registrierung angefragt" } diff --git a/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/de/components/settings/settingsImportZoneComponent.json b/frontend/app/src/i18n/de/components/settings/settingsImportZoneComponent.json index 6e4fae105..cad03e459 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsImportZoneComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsImportZoneComponent.json @@ -6,7 +6,7 @@ "errorMessageUnableToImportActivities": "An error occurred while importing activities", "importTitle": "Import", "stravaGearImportTitle": "Strava gear import", - "stravaGearImportBody": "Importiere Ausrüstung aus einem Strava Bulk Export (in den Daten/activity_files/bulk_import Ordner)", + "stravaGearImportBody": "Importiere Ausrüstung aus einem Strava Massen-Export (in den Daten/activity_files/bulk_import Ordner)", "stravaGearImportbuttonBikes": "Import Strava bikes", "loadingMessageStravaBikesImport": "Importing Strava bikes from file...", "successMessageStravaBikesImport": "Strava bikes imported successfully", diff --git a/frontend/app/src/i18n/de/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/de/components/settings/settingsSecurityZoneComponent.json index 8eab43401..f81ad2b99 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsSecurityZoneComponent.json @@ -25,7 +25,26 @@ "errorDisableMFA": "Deaktivieren der MFA fehlgeschlagen", "subtitleMySessions": "Meine Sitzungen", "userChangePasswordSuccessMessage": "Passwort erfolgreich geändert", - "userChangePasswordErrorMessage": "Fehler beim ändern des Passwort", + "userChangePasswordErrorMessage": "Fehler beim Ändern des Passworts", "successDeleteSession": "Sitzung erfolgreich gelöscht", - "errorDeleteSession": "Fehler beim Löschen der Sitzung" + "errorDeleteSession": "Fehler beim Löschen der Sitzung", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/de/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/de/components/settings/settingsServerSettingsZoneComponent.json index 94977099e..3674f197c 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsServerSettingsZoneComponent.json @@ -8,8 +8,14 @@ "signupTitle": "Sign-up", "adminApprovalLabel": "Admin approval", "emailConfirmationLabel": "Email confirmation", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Öffentliche Links", - "enabledLabel": "Enabled", + "enabledLabel": "Aktiviert", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Durch das Aktivieren dieser Option werden alle öffentlich geposteten Aktivitäten ohne Authentifizierung sichtbar.", "publicShareableLinksShowUserInfoLabel": "Zeige Benutzerinformationen", "serverSettingsPublicShareableLinksShowUserWarningAlert": "Durch das Aktivieren dieser Option werden alle Benutzerinformationen bei öffentlichen Links sichtbar", diff --git a/frontend/app/src/i18n/de/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/de/components/settings/settingsSideBarComponent.json index b1c593465..572083678 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsSideBarComponent.json @@ -1,10 +1,11 @@ { "usersSection": "Benutzer", "serverSettingsSection": "Server-Einstellungen", + "identityProvidersSection": "Identity Providers", "generalSection": "Allgemein", "myProfileSection": "Mein Profil", "myGoals": "Meine Ziele", "securitySection": "Sicherheit", "integrationsSection": "Integrationen", - "importSection": "Import" + "importSection": "Importieren" } diff --git a/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..08ee0db53 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" +} diff --git a/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/de/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUserProfileZoneComponent.json index e693a26fc..04f74e0cd 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUserProfileZoneComponent.json @@ -16,7 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Währung", "heightLabel": "Höhe", - "maxHeartRateLabel": "Maximale Herzfrequenz", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Bevorzugte Sprache", "firstDayOfWeekLabel": "Erster Tag der Woche", "accessTypeLabel": "Zugangsart", diff --git a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index 86e002437..79c32cd3a 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Unbekanntes Anbieter-Symbol", - "providerTypeBadgeLabel": "Authentifizierungsanbieter-Typ", - "linkedAtLabel": "Datum und Uhrzeit, zu der der Anbieter verknüpft wurde", - "linkedAt": "Verknüpft", - "lastLoginLabel": "Datum und Uhrzeit der letzten Anmeldung mit diesem Anbieter", - "lastLogin": "Zuletzt verwendet", - "neverUsedLabel": "Dieser Anbieter wurde noch nie zur Anmeldung verwendet", - "neverUsed": "Nie verwendet", - "deleteButtonAriaLabel": "Identitätsanbieter-Verknüpfung {provider} löschen", - "modalDeleteTitle": "Identitätsanbieter löschen", - "modalDeleteBody1": "Sind Sie sicher, dass Sie", - "modalDeleteBody2": " trennen möchten? Der Benutzer kann sich nicht mehr mit diesem Anbieter anmelden.", - "modalDeleteButton": "Anbieterverknüpfung löschen" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 3e692e631..6c6caf20f 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,8 +26,8 @@ "addEditUserModalCurrencyLabel": "Währung", "addEditUserModalHeightLabel": "Größe", "addEditUserModalHeightPlaceholder": "Größe", - "addEditUserModalMaxHeartRateLabel": "Maximale Herzfrequenz (optional)", - "addEditUserModalMaxHeartRatePlaceholder": "Maximale Herzfrequenz", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Ungültige Höhe. Bitte geben Sie eine gültige Höhe in Fuß ein.", "addEditUserModalInchesValidationLabel": "Ungültige Höhe. Bitte geben Sie eine gültige Höhe in Zoll ein.", "addEditUserModalUserPreferredLanguageLabel": "Bevorzugte Sprache", diff --git a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersListComponent.json index 92c6c8b3c..c9a610474 100644 --- a/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/de/components/settings/settingsUsersZone/usersListComponent.json @@ -4,25 +4,25 @@ "userListUserIsMeBadge": "Ich", "userListUserIsAdminBadge": "Admin", "userListUserIsInactiveBadge": "Inaktiv", - "userListUserHasUnverifiedEmailBadge": "Unbestätigte E-Mail", - "userListUserHasExternalAuthBadge": "Externe Auth", - "modalApproveSignUpTitle": "Benutzeranmeldung genehmigen", - "modalApproveSignUpBody": "Möchten Sie den Benutzer wirklich genehmigen ", - "processingApproval": "Genehmigung wird verarbeitet...", - "userApproveSuccessMessage": "Benutzer erfolgreich genehmigt.", - "userApproveErrorMessage": "Fehler beim Genehmigen des Benutzers", - "modalRejectSignUpTitle": "Benutzeranmeldung ablehnen", - "modalRejectSignUpBody1": "Möchten Sie den Benutzer wirklich ablehnen ", - "modalRejectSignUpBody2": "Der Benutzer wird gelöscht, dies kann nicht rückgängig gemacht werden.", + "userListUserHasUnverifiedEmailBadge": "Unverified email", + "userListUserHasExternalAuthBadge": "External auth", + "modalApproveSignUpTitle": "Approve user sign up", + "modalApproveSignUpBody": "Are you sure you want to approve user ", + "processingApproval": "Processing approval...", + "userApproveSuccessMessage": "User approved successfully.", + "userApproveErrorMessage": "Error approving user", + "modalRejectSignUpTitle": "Reject user sign up", + "modalRejectSignUpBody1": "Bist du sicher, dass du den Benutzer ablehnen möchtest ", + "modalRejectSignUpBody2": "Der Nutzer wird gelöscht, dies kann nicht rückgängig gemacht werden.", "userEditErrorMessage": "Fehler beim Bearbeiten des Benutzers", "modalDeleteUserTitle": "Benutzer löschen", - "modalDeleteUserBody": "Sind Sie sicher, dass Sie den Benutzer löschen möchten ", + "modalDeleteUserBody": "Sicher, dass du Benutzer löschen möchtest ", "userListUserSessionsTitle": "Benutzer-Sitzungen", "userSessionDeleteSuccessMessage": "Sitzung erfolgreich gelöscht", "userSessionDeleteErrorMessage": "Fehler beim Löschen der Sitzung", - "tabSessions": "Sitzungen", - "tabIdentityProviders": "Identitätsanbieter", - "userIdpsLoadErrorMessage": "Fehler beim Laden der Identitätsanbieter", - "userIdpDeleteSuccessMessage": "Identitätsanbieter erfolgreich getrennt", - "userIdpDeleteErrorMessage": "Fehler beim Trennen des Identitätsanbieters" + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/de/emailVerificationView.json b/frontend/app/src/i18n/de/emailVerificationView.json index c66f2308a..fe11acb02 100644 --- a/frontend/app/src/i18n/de/emailVerificationView.json +++ b/frontend/app/src/i18n/de/emailVerificationView.json @@ -1,8 +1,8 @@ { "title1": "Handling verify email", - "title2": "Please wait while your email is being verified. Do not refresh this page.", - "emailVerified": "Email verified successfully!", - "tokenNotFound": "Token not found", - "tokenExpired": "Token expired", - "verificationFailed": "Email verification failed" + "title2": "Bitte warte, während deine E-Mail verifiziert wird. Aktualisiere diese Seite NICHT.", + "emailVerified": "E-Mail Verifizierung erfolgreich!", + "tokenNotFound": "Token nicht gefunden", + "tokenExpired": "Token ausgelaufen", + "verificationFailed": "E-Mail-Bestätigung fehlgeschlagen" } diff --git a/frontend/app/src/i18n/de/generalItems.json b/frontend/app/src/i18n/de/generalItems.json index c421a61a4..8f3e2bada 100644 --- a/frontend/app/src/i18n/de/generalItems.json +++ b/frontend/app/src/i18n/de/generalItems.json @@ -1,13 +1,14 @@ { "buttonBack": "Zurück", "buttonClose": "Schließen", + "buttonSubmit": "Submit", "true": "Wahr", "false": "Falsch", "yes": "Ja", "no": "Nein", "ofWithSpaces": " von ", "languageOption1": "Englisch (US)", - "languageOption2": "Katalan (CA)", + "languageOption2": "Katalanisch (CA)", "languageOption3": "Portugiesisch (PT)", "languageOption4": "Deutsch (DE)", "languageOption5": "Französisch (FR)", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Gewicht in kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "Zoll", "unitsFeet": "Fuß", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lb", "labelWeightInLbs": "Gewicht in lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kCal", "unitsBpm": "bpm", "labelHRinBpm": "Herzfrequenz in bpm", @@ -78,5 +89,13 @@ "genderFemale": "Weiblich", "genderUnspecified": "Keine Angabe", "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelMaximum": "Maximum", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/de/healthView.json b/frontend/app/src/i18n/de/healthView.json index 43613c56e..5f2502eca 100644 --- a/frontend/app/src/i18n/de/healthView.json +++ b/frontend/app/src/i18n/de/healthView.json @@ -1,5 +1,13 @@ { "title": "Gesundheit", + "errorFetchingHealthSteps": "Fehler beim Laden der Schritte", "errorFetchingHealthWeight": "Fehler beim Laden der Gesundheitsdaten", - "errorFetchingHealthTargets": "Fehler beim Laden der Gesundheitsziele" + "errorFetchingHealthSleep": "Fehler beim Laden der Schlafdaten", + "errorFetchingHealthTargets": "Fehler beim Laden der Gesundheitsziele", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Fehler beim Aktualisieren des Gewichtsziels", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Fehler beim Aktualisieren der Schrittziele", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Fehler beim Aktualisieren der Schlafziele" } diff --git a/frontend/app/src/i18n/de/loginView.json b/frontend/app/src/i18n/de/loginView.json index ed8b2e5ce..3cb9c75fa 100644 --- a/frontend/app/src/i18n/de/loginView.json +++ b/frontend/app/src/i18n/de/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Unten anmelden", "username": "Benutzername", "password": "Passwort", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "MFA-Code", "mfaRequired": "Mehrstufige Authentifizierung erforderlich. Bitte geben Sie Ihren 6-stelligen Code ein.", "verifyMFAButton": "MFA überprüfen", @@ -33,5 +35,15 @@ "signUpLink": "Kein Konto? Jetzt registrieren", "emailVerificationSent": "Please check your email for verification instructions", "adminApprovalRequired": "Your account is pending admin approval", - "verifyEmailInvalidLink": "Invalid email verification link" + "verifyEmailInvalidLink": "Ungültiger E-Mail Bestätigungslink", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/de/searchView.json b/frontend/app/src/i18n/de/searchView.json index 4ef2656ba..6830ae0bf 100644 --- a/frontend/app/src/i18n/de/searchView.json +++ b/frontend/app/src/i18n/de/searchView.json @@ -14,7 +14,7 @@ "searchSelectActivityType8": "Yoga", "searchSelectActivityType9": "Ski", "searchSelectActivityType10": "Snowboard", - "searchSelectActivityType11": "Racquet sports", + "searchSelectActivityType11": "Racquet-Sport", "searchSelectActivityType12": "Windsurfen", "searchSelectActivityType13": "Stand-Up-Paddling", "searchSelectActivityType14": "Surfen", diff --git a/frontend/app/src/i18n/es/activityItems.json b/frontend/app/src/i18n/es/activityItems.json index 68a1d0024..8b5a017c4 100644 --- a/frontend/app/src/i18n/es/activityItems.json +++ b/frontend/app/src/i18n/es/activityItems.json @@ -6,11 +6,11 @@ "gravelRide": "Ciclismo de camino", "mtbRide": "Bicicleta de montaña", "virtualRide": "Ciclismo virtual", - "lapSwimming": "Lap swimming", + "lapSwimming": "Natación en piscina", "openWaterSwimming": "Natación en aguas abiertas", "workout": "Entrenamiento", "walk": "Caminata", - "indoorWalk": "Indoor walk", + "indoorWalk": "Caminata en cinta", "hike": "Senderismo", "rowing": "Remo", "yoga": "Yoga", @@ -30,19 +30,19 @@ "indoorRide": "Viaje interior", "mixedSurfaceRide": "Mezcla de superficie", "windsurf": "Windsurf", - "standUpPaddling": "Stand up paddling", + "standUpPaddling": "Paddle surf", "surf": "Surf", - "trackRun": "Track run", - "ebikeRide": "E-Bike ride", - "ebikeMountainRide": "E-Bike mountain ride", - "iceSkate": "Ice skate", - "soccer": "Soccer", - "padel": "Padel", - "treadmillRun": "Treadmill run", - "cardioTraining": "Cardio training", - "kayaking": "Kayaking", - "sailing": "Sailing", - "snowShoeing": "Snow shoeing", - "inlineSkating": "Inline skating", + "trackRun": "Carrera en pista", + "ebikeRide": "Bicicleta eléctrica", + "ebikeMountainRide": "Bicicleta eléctrica de montaña", + "iceSkate": "Patinaje sobre hielo", + "soccer": "Fútbol", + "padel": "Pádel", + "treadmillRun": "Carrera en cinta", + "cardioTraining": "Entrenamiento de cardio", + "kayaking": "Piraguismo", + "sailing": "Navegación", + "snowShoeing": "Raquetas de nieve", + "inlineSkating": "Patinaje en línea", "labelWorkout": " entrenamiento" } diff --git a/frontend/app/src/i18n/es/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/es/components/activities/modals/editActivityModalComponent.json index e3184b1e9..ed0383d3c 100644 --- a/frontend/app/src/i18n/es/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/es/components/activities/modals/editActivityModalComponent.json @@ -37,26 +37,27 @@ "modalEditActivityTypeOption28": "Viaje interior", "modalEditActivityTypeOption29": "Mezcla de superficie", "modalEditActivityTypeOption30": "Windsurf", - "modalEditActivityTypeOption31": "Indoor walk", - "modalEditActivityTypeOption32": "Stand up paddling", + "modalEditActivityTypeOption31": "Caminar en interior", + "modalEditActivityTypeOption32": "Paddle surf", "modalEditActivityTypeOption33": "Surf", - "modalEditActivityTypeOption34": "Track run", - "modalEditActivityTypeOption35": "E-Bike ride", - "modalEditActivityTypeOption36": "E-Bike mountain ride", - "modalEditActivityTypeOption37": "Ice skate", - "modalEditActivityTypeOption38": "Soccer", - "modalEditActivityTypeOption39": "Padel", - "modalEditActivityTypeOption40": "Treadmill run", - "modalEditActivityTypeOption41": "Cardio training", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", - "modalEditActivityTypeOption44": "Snow shoeing", - "modalEditActivityTypeOption45": "Inline skating", + "modalEditActivityTypeOption34": "Carrera en pista", + "modalEditActivityTypeOption35": "Bicicleta eléctrica", + "modalEditActivityTypeOption36": "Bicicleta eléctrica de montaña", + "modalEditActivityTypeOption37": "Patinaje sobre hielo", + "modalEditActivityTypeOption38": "Fútbol", + "modalEditActivityTypeOption39": "Pádel", + "modalEditActivityTypeOption40": "Carrera en cinta", + "modalEditActivityTypeOption41": "Entrenamiento de cardio", + "modalEditActivityTypeOption42": "Piraguismo", + "modalEditActivityTypeOption43": "Navegación", + "modalEditActivityTypeOption44": "Raquetas de nieve", + "modalEditActivityTypeOption45": "Patinaje en línea", "modalEditActivityVisibilityLabel": "Visibilidad", "modalEditActivityVisibilityOption0": "Público", "modalEditActivityVisibilityOption1": "Seguidores", "modalEditActivityVisibilityOption2": "Privado", "modalEditActivityIsHiddenLabel": "Está oculto", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Ocultar hora de inicio", "modalEditActivityHideLocationLabel": "Ocultar ubicación", "modalEditActivityHideMapLabel": "Ocultar mapa", diff --git a/frontend/app/src/i18n/es/components/gears/gearComponentListComponent.json b/frontend/app/src/i18n/es/components/gears/gearComponentListComponent.json index 2c05bfb88..c5ab7bd3d 100644 --- a/frontend/app/src/i18n/es/components/gears/gearComponentListComponent.json +++ b/frontend/app/src/i18n/es/components/gears/gearComponentListComponent.json @@ -5,10 +5,10 @@ "gearComponentFrontTube": "Tubo delantero", "gearComponentBackWheelValve": "Válvula de rueda trasera", "gearComponentFrontWheelValve": "Válvula de rueda delantera", - "gearComponentBackTubelessSealant": "Back tubeless sealant", - "gearComponentBackTubelessRimTape": "Back tubeless rim tape", - "gearComponentFrontTubelessSealant": "Front tubeless sealant", - "gearComponentFrontTubelessRimTape": "Front tubeless rim tape", + "gearComponentBackTubelessSealant": "Líquido tubeless trasero", + "gearComponentBackTubelessRimTape": "Cinta trasera de tubeless", + "gearComponentFrontTubelessSealant": "Líquido tubeless delantero", + "gearComponentFrontTubelessRimTape": "Cinta delantera de tubeless", "gearComponentBackWheel": "Rueda trasera", "gearComponentFrontWheel": "Rueda delantera", "gearComponentBackBreakRotor": "Rotor del freno trasero", @@ -40,7 +40,7 @@ "gearComponentGrips": "Empuñadura", "gearComponentStem": "Stem", "gearComponentSeatpost": "Seatpost", - "gearComponentSaddle": "Saddle", + "gearComponentSaddle": "Montura", "gearComponentFork": "Fork", "gearComponentFrame": "Cuadro", "gearComponentCleats": "Cleats", @@ -51,7 +51,7 @@ "gearComponentGrommets": "Grommets", "gearComponentOverGrip": "Over grip", "gearComponentStrings": "Strings", - "gearComponentSail": "Sail", + "gearComponentSail": "Vela", "gearComponentBoard": "Board", "gearComponentMast": "Mast", "gearComponentBoom": "Boom", @@ -64,12 +64,12 @@ "gearComponentRiggingLines": "Rigging lines", "gearComponentFootpad": "Footpad", "gearComponentImpactVest": "Impact vest", - "gearComponentLifeguardVest": "Lifeguard vest", - "gearComponentHelmet": "Helmet", - "gearComponentWing": "Wing", + "gearComponentLifeguardVest": "Chaleco Salvavidas", + "gearComponentHelmet": "Casco", + "gearComponentWing": "Ala", "gearComponentFrontFoil": "Front foil", - "gearComponentStabilizer": "Stabilizer", - "gearComponentFuselage": "Fuselage", + "gearComponentStabilizer": "Estabilizador", + "gearComponentFuselage": "Fuselaje", "gearComponentOf": " de ", "gearComponentListGearComponentIsInactiveBadge": "Inactivo", "gearComponentListModalDeleteGearComponentTitle": "Eliminar componente de equipamiento", diff --git a/frontend/app/src/i18n/es/components/gears/gearsAddEditGearModalComponent.json b/frontend/app/src/i18n/es/components/gears/gearsAddEditGearModalComponent.json index ebb2d7ace..b77c6aa01 100644 --- a/frontend/app/src/i18n/es/components/gears/gearsAddEditGearModalComponent.json +++ b/frontend/app/src/i18n/es/components/gears/gearsAddEditGearModalComponent.json @@ -12,7 +12,7 @@ "addEditGearModalAddTypeOption5": "Esquíes", "addEditGearModalAddTypeOption6": "Snowboard", "addEditGearModalAddTypeOption7": "Windsurf", - "addEditGearModalAddTypeOption8": "Water sports board", + "addEditGearModalAddTypeOption8": "Tabla de deportes acuáticos", "addEditGearModalAddDateLabel": "Fecha de creación", "addEditGearModalAddIsActiveLabel": "Está activo", "addEditGearModalAddIsActiveOption1": "Activo", diff --git a/frontend/app/src/i18n/es/components/gears/gearsListComponent.json b/frontend/app/src/i18n/es/components/gears/gearsListComponent.json index 0af8bc8ee..ecdff7ab7 100644 --- a/frontend/app/src/i18n/es/components/gears/gearsListComponent.json +++ b/frontend/app/src/i18n/es/components/gears/gearsListComponent.json @@ -7,7 +7,7 @@ "gearListTypeOption5": "Esquíes", "gearListTypeOption6": "Snowboard", "gearListTypeOption7": "Windsurf", - "gearListTypeOption8": "Water sports board", + "gearListTypeOption8": "Tabla de deportes acuáticos", "gearListGearIsInactiveBadge": "Inactivo", "gearListModalDeleteGearTitle": "Eliminar equipo", "gearListModalDeleteGearBody": "¿Está seguro que desea eliminar el equipo?", diff --git a/frontend/app/src/i18n/es/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/es/components/health/healthDashboardZoneComponent.json index f65b88a55..758647cc6 100644 --- a/frontend/app/src/i18n/es/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/es/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Peso", "noWeightData": "Sin datos de peso", "noWeightTarget": "Sin objetivo de peso", @@ -9,5 +13,8 @@ "bmiOverweight": "Sobrepeso", "bmiObesityClass1": "Obesidad (Clase 1)", "bmiObesityClass2": "Obesidad (Clase 2)", - "bmiObesityClass3": "Obesidad extrema (Clase 3)" + "bmiObesityClass3": "Obesidad extrema (Clase 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/es/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/es/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/es/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/es/components/health/healthSideBarComponent.json index f85e97ba3..61e6eea79 100644 --- a/frontend/app/src/i18n/es/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/es/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Panel", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Peso" } diff --git a/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/es/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/es/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/es/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/es/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/es/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 36ebd367b..ff12caaf9 100644 --- a/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Editar peso", "addWeightWeightLabel": "Peso", "addWeightDateLabel": "Fecha", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Peso agregado", "errorAddWeight": "Error al añadir peso" } diff --git a/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightListComponent.json index d59f57923..3c8541fdc 100644 --- a/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/es/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Eliminar peso", "modalDeleteWeightBody": "¿Está seguro que desea eliminar la entrada de peso para ", "successDeleteWeight": "Peso eliminado", diff --git a/frontend/app/src/i18n/es/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/es/components/health/healthWeightZoneComponent.json index e00592325..c98cd6ae2 100644 --- a/frontend/app/src/i18n/es/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/es/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Añadir peso", - "labelNumberOfHealthWeightWeight1": "Hay un total de ", - "labelNumberOfHealthWeightWeight2": " medición(es) de peso insertado(s) (", - "labelNumberOfHealthWeightWeight3": " cargado):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/es/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json b/frontend/app/src/i18n/es/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json index cc951107a..d9fa8a928 100644 --- a/frontend/app/src/i18n/es/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json +++ b/frontend/app/src/i18n/es/components/notifications/adminNewSignUpApprovalRequestNotificationComponent.json @@ -1,4 +1,4 @@ { - "title": "New sign-up request", - "subTitle": " has requested to sign-up" + "title": "Nueva solicitud de registro", + "subTitle": " has solicitado registrarte" } diff --git a/frontend/app/src/i18n/es/components/notifications/newAcceptedRequestNotificationComponent.json b/frontend/app/src/i18n/es/components/notifications/newAcceptedRequestNotificationComponent.json index 0cd86fce6..6f0e65f8c 100644 --- a/frontend/app/src/i18n/es/components/notifications/newAcceptedRequestNotificationComponent.json +++ b/frontend/app/src/i18n/es/components/notifications/newAcceptedRequestNotificationComponent.json @@ -1,4 +1,4 @@ { - "newAcceptedRequestTitle": "New accepted request", - "newAcceptedRequestSubTitle": " has accepted your follow request" + "newAcceptedRequestTitle": "Nueva solicitud aceptada", + "newAcceptedRequestSubTitle": " ha aceptado tu solicitud de seguimiento" } diff --git a/frontend/app/src/i18n/es/components/notifications/newFollowerRequestNotificationComponent.json b/frontend/app/src/i18n/es/components/notifications/newFollowerRequestNotificationComponent.json index 9d34f427b..a0a8c2ef4 100644 --- a/frontend/app/src/i18n/es/components/notifications/newFollowerRequestNotificationComponent.json +++ b/frontend/app/src/i18n/es/components/notifications/newFollowerRequestNotificationComponent.json @@ -1,4 +1,4 @@ { - "newFollowerRequestTitle": "New follower request", - "newFollowerRequestSubTitle": "You have a new follower request from " + "newFollowerRequestTitle": "Nueva solicitud de seguimiento", + "newFollowerRequestSubTitle": "Tienes una nueva solicitud de seguimiento de " } diff --git a/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/es/components/settings/settingsImportZoneComponent.json b/frontend/app/src/i18n/es/components/settings/settingsImportZoneComponent.json index b54024456..84c0bff39 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsImportZoneComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsImportZoneComponent.json @@ -1,18 +1,18 @@ { - "bulkImportIntegrationTitle": "Bulk import", - "bulkImportIntegrationBody": "Bulk import activities from files (in the data/activity_files/bulk_import folder)", - "buttonBulkImport": "Import activities", - "loadingMessageBulkImport": "Importing activities from files...", - "errorMessageUnableToImportActivities": "An error occurred while importing activities", - "importTitle": "Import", - "stravaGearImportTitle": "Strava gear import", - "stravaGearImportBody": "Import gear from a Strava bulk export (in the data/activity_files/bulk_import folder)", - "stravaGearImportbuttonBikes": "Import Strava bikes", - "loadingMessageStravaBikesImport": "Importing Strava bikes from file...", - "successMessageStravaBikesImport": "Strava bikes imported successfully", - "errorMessageUnableToImportBikes": "An error occurred while importing Strava bikes", - "stravaImportbuttonShoes": "Import Strava shoes", - "loadingMessageStravaShoesImport": "Importing Strava shoes from file...", - "successMessageStravaShoesImport": "Strava shoes imported successfully", - "errorMessageUnableToImportShoes": "An error occurred while importing Strava shoes" + "bulkImportIntegrationTitle": "Importación masiva", + "bulkImportIntegrationBody": "Importación masiva de actividades desde archivos (en la carpeta data/activity_files/bulk_import)", + "buttonBulkImport": "Importando actividades", + "loadingMessageBulkImport": "Importando actividades desde archivos...", + "errorMessageUnableToImportActivities": "Ocurrió un error al importar actividades", + "importTitle": "Importar", + "stravaGearImportTitle": "Importar equipo de Strava", + "stravaGearImportBody": "Importar equipo desde una exportación masiva de Strava (en la carpeta data/activity_files/bulk_import)", + "stravaGearImportbuttonBikes": "Importar bicicletas de Strava", + "loadingMessageStravaBikesImport": "Importando bicicletas de Strava desde archivo...", + "successMessageStravaBikesImport": "Bicicletas de Strava importadas con éxito", + "errorMessageUnableToImportBikes": "Ocurrió un error al importar actividades de ciclismo de Strava", + "stravaImportbuttonShoes": "Importar zapatillas desde Strava", + "loadingMessageStravaShoesImport": "Importando zapatillas de Strava desde archivo...", + "successMessageStravaShoesImport": "Calzado de Strava importado correctamente", + "errorMessageUnableToImportShoes": "Se ha producido un error al importar zapatillas de Strava" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/es/components/settings/settingsSecurityZoneComponent.json index f3a4397dd..97ca0eaba 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsSecurityZoneComponent.json @@ -5,27 +5,46 @@ "changeUserPasswordPasswordConfirmationLabel": "Confirmar nueva contraseña", "changeUserPasswordFeedbackLabel": "La contraseña no cumple con los requisitos", "changeUserPasswordPasswordsDoNotMatchFeedbackLabel": "Las contraseñas no coinciden", - "subtitleMFA": "Multi-Factor Authentication (MFA)", - "mfaDisabledDescription": "MFA is currently disabled. Enable it to add an extra layer of security to your account.", - "mfaEnabledDescription": "MFA is currently enabled. Your account is protected with two-factor authentication.", - "enableMFAButton": "Enable MFA", - "disableMFAButton": "Disable MFA", - "mfaSetupModalTitle": "Setup Multi-Factor Authentication", - "mfaSetupInstructions": "Scan the QR code below with your authenticator app (Google Authenticator, Authy, etc.) or manually enter the secret:", - "mfaSecretLabel": "Secret Key", - "mfaVerificationCodeLabel": "Verification Code", - "mfaVerificationCodePlaceholder": "Enter 6-digit code", - "mfaDisableModalTitle": "Disable Multi-Factor Authentication", - "mfaDisableConfirmation": "Are you sure you want to disable MFA? This will reduce your account security.", - "mfaEnabledSuccess": "MFA enabled successfully", - "mfaDisabledSuccess": "MFA disabled successfully", - "errorLoadMFAStatus": "Error loading MFA status", - "errorSetupMFA": "Error setting up MFA", - "errorEnableMFA": "Error enabling MFA", - "errorDisableMFA": "Error disabling MFA", + "subtitleMFA": "Autenticación multi-factor (MFA)", + "mfaDisabledDescription": "MFA está actualmente deshabilitado. Habilítalo para añadir una capa extra de seguridad a tu cuenta.", + "mfaEnabledDescription": "MFA está activado. Tu cuenta está protegida con autenticación de dos factores.", + "enableMFAButton": "Habilitar MFA", + "disableMFAButton": "Desactivar MFA", + "mfaSetupModalTitle": "Configurar Autenticación Multi-Factor", + "mfaSetupInstructions": "Escanea el código QR de abajo con tu aplicación de autenticación (Google Authenticator, Authy, Aegis, etc.) o introduce manualmente el secreto:", + "mfaSecretLabel": "Clave secreta", + "mfaVerificationCodeLabel": "Codigo de Verificacion", + "mfaVerificationCodePlaceholder": "Introduce el código de 6 dígitos", + "mfaDisableModalTitle": "Desactivar Autenticación Multi-Factor", + "mfaDisableConfirmation": "¿Estás seguro de que quieres desactivar MFA? Esto reducirá la seguridad de tu cuenta.", + "mfaEnabledSuccess": "MFA habilitado con éxito", + "mfaDisabledSuccess": "MFA desactivado correctamente", + "errorLoadMFAStatus": "Error al cargar el estado de MFA", + "errorSetupMFA": "Error al configurar MFA", + "errorEnableMFA": "Error activando MFA", + "errorDisableMFA": "Error desactivando MFA", "subtitleMySessions": "Mis sesiones", "userChangePasswordSuccessMessage": "La contraseña ha sido cambiada correctamente", "userChangePasswordErrorMessage": "Error al cambiar la contraseña", "successDeleteSession": "Sesión eliminada exitosamente", - "errorDeleteSession": "Error al eliminar la sesión" + "errorDeleteSession": "Error al eliminar la sesión", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/es/components/settings/settingsServerSettingsZoneComponent.json index 0a15b1b06..40471053f 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsServerSettingsZoneComponent.json @@ -5,11 +5,17 @@ "unitsImperial": "Imperial", "currencyLabel": "Moneda predeterminada", "numRecordsLabel": "Número de registros por página", - "signupTitle": "Sign-up", - "adminApprovalLabel": "Admin approval", - "emailConfirmationLabel": "Email confirmation", + "signupTitle": "Registrarse", + "adminApprovalLabel": "Aprobación del administrador", + "emailConfirmationLabel": "Confirmación de correo electrónico", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Enlace público para compartir", - "enabledLabel": "Enabled", + "enabledLabel": "Activado", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Habilitar esto hará que todas las actividades publicadas sean visibles sin autenticación.", "publicShareableLinksShowUserInfoLabel": "Mostrar información del usuario", "serverSettingsPublicShareableLinksShowUserWarningAlert": "Habilitar esto mostrará la información del usuario en todos los enlaces públicos", @@ -25,5 +31,5 @@ "successPhotoDelete": "Foto eliminada con éxito", "successUpdateServerSettings": "Ajustes del servidor actualizados correctamente", "errorUpdateServerSettings": "Error al actualizar los ajustes del servidor", - "errorFetchingServerSettings": "Error fetching server settings" + "errorFetchingServerSettings": "Error obteniendo la configuración del servidor" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/es/components/settings/settingsSideBarComponent.json index dbedd2b0a..05ffa0fb9 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsSideBarComponent.json @@ -1,10 +1,11 @@ { "usersSection": "Usuarios", "serverSettingsSection": "Ajustes del Servidor", + "identityProvidersSection": "Identity Providers", "generalSection": "General", "myProfileSection": "Mi perfil", - "myGoals": "My Goals", + "myGoals": "Mis Objetivos", "securitySection": "Seguridad", "integrationsSection": "Integraciones", - "importSection": "Import" + "importSection": "Importar" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsUserGoals.json b/frontend/app/src/i18n/es/components/settings/settingsUserGoals.json index 2f48bad9d..382dc26be 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUserGoals.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUserGoals.json @@ -1,7 +1,7 @@ { - "addNewGoal": "Add new goal", - "labelNumberOfGoals1": "You have ", - "labelNumberOfGoals2": " goal(s) set:", - "successGoalDeleted": "Goal deleted successfully", - "errorFetchingGoals": "Error fetching goals" + "addNewGoal": "Añadir nuevo objetivo", + "labelNumberOfGoals1": "Tienes ", + "labelNumberOfGoals2": " objetivo(s) establecidos:", + "successGoalDeleted": "Objetivo eliminado correctamente", + "errorFetchingGoals": "Error obteniendo objetivos" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..08ee0db53 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" +} diff --git a/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUserProfileZoneComponent.json index bd64f7711..d3a9e1f18 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Moneda", "heightLabel": "Altura", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Idioma preferido", "firstDayOfWeekLabel": "Primer día de la semana", "accessTypeLabel": "Tipo de acceso", diff --git a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index 38e83c5da..79c32cd3a 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Icono de proveedor desconocido", - "providerTypeBadgeLabel": "Tipo de proveedor de autenticación", - "linkedAtLabel": "Fecha y hora cuando se vinculó el proveedor", - "linkedAt": "Vinculado", - "lastLoginLabel": "Fecha y hora del último inicio de sesión con este proveedor", - "lastLogin": "Último uso", - "neverUsedLabel": "Este proveedor nunca se ha utilizado para iniciar sesión", - "neverUsed": "Nunca utilizado", - "deleteButtonAriaLabel": "Eliminar el enlace del proveedor de identidad {provider}", - "modalDeleteTitle": "Eliminar proveedor de identidad", - "modalDeleteBody1": "¿Estás seguro de que quieres desvincular", - "modalDeleteBody2": "? El usuario ya no podrá iniciar sesión usando este proveedor.", - "modalDeleteButton": "Eliminar enlace del proveedor" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index fa50507fe..952a8a49d 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Moneda", "addEditUserModalHeightLabel": "Altura", "addEditUserModalHeightPlaceholder": "Altura", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Altura inválida. Por favor, introduzca una altura válida en pies.", "addEditUserModalInchesValidationLabel": "Altura inválida. Por favor, introduzca una altura válida en pulgadas.", "addEditUserModalUserPreferredLanguageLabel": "Idioma preferido", diff --git a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersListComponent.json index 0c25ef48a..1ee856c0e 100644 --- a/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/es/components/settings/settingsUsersZone/usersListComponent.json @@ -5,24 +5,24 @@ "userListUserIsAdminBadge": "Administrador", "userListUserIsInactiveBadge": "Inactivo", "userListUserHasUnverifiedEmailBadge": "Correo no verificado", - "userListUserHasExternalAuthBadge": "Auth Externa", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "Aprobar registro de usuario", - "modalApproveSignUpBody": "¿Está seguro de que desea aprobar al usuario ", + "modalApproveSignUpBody": "Confirma si quieres aprobar al usuario ", "processingApproval": "Procesando aprobación...", - "userApproveSuccessMessage": "Usuario aprobado exitosamente.", - "userApproveErrorMessage": "Error al aprobar el usuario", + "userApproveSuccessMessage": "Usuario aprobado con éxito.", + "userApproveErrorMessage": "Error al aprobar usuario", "modalRejectSignUpTitle": "Rechazar registro de usuario", - "modalRejectSignUpBody1": "¿Está seguro de que desea rechazar al usuario ", - "modalRejectSignUpBody2": "El usuario será eliminado, esto no se puede deshacer.", + "modalRejectSignUpBody1": "Confirma si quieres rechazar al usuario ", + "modalRejectSignUpBody2": "El usuario será eliminado, esto no se podrá deshacer.", "userEditErrorMessage": "Error al editar el usuario", "modalDeleteUserTitle": "Eliminar usuario", - "modalDeleteUserBody": "¿Está seguro de que desea eliminar al usuario ", + "modalDeleteUserBody": "¿Está seguro de que desea eliminar el usuario?", "userListUserSessionsTitle": "Sesiones de usuario", "userSessionDeleteSuccessMessage": "Sesión eliminada exitosamente", "userSessionDeleteErrorMessage": "Error al eliminar la sesión", - "tabSessions": "Sesiones", - "tabIdentityProviders": "Proveedores de identidad", - "userIdpsLoadErrorMessage": "Error al cargar proveedores de identidad", - "userIdpDeleteSuccessMessage": "Proveedor de identidad desvinculado exitosamente", - "userIdpDeleteErrorMessage": "Error al desvincular proveedor de identidad" + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/es/components/users/userDistanceStatsComponent.json b/frontend/app/src/i18n/es/components/users/userDistanceStatsComponent.json index be1abc1ff..4981bec13 100644 --- a/frontend/app/src/i18n/es/components/users/userDistanceStatsComponent.json +++ b/frontend/app/src/i18n/es/components/users/userDistanceStatsComponent.json @@ -1,4 +1,4 @@ { - "thisWeekDistancesTitle": "Week top 3", - "thisMonthDistancesTitle": "Month top 3" + "thisWeekDistancesTitle": "Top 3 semanal", + "thisMonthDistancesTitle": "Top 3 mensual" } diff --git a/frontend/app/src/i18n/es/components/users/userGoalsStatsComponent.json b/frontend/app/src/i18n/es/components/users/userGoalsStatsComponent.json index 94e75f5bd..2fbf5c172 100644 --- a/frontend/app/src/i18n/es/components/users/userGoalsStatsComponent.json +++ b/frontend/app/src/i18n/es/components/users/userGoalsStatsComponent.json @@ -1,14 +1,14 @@ { - "title": "Goals", - "activityTypeRun": "Run", - "activityTypeBike": "Bike", - "activityTypeSwim": "Swim", - "activityTypeWalk": "Walk", + "title": "Objetivos", + "activityTypeRun": "Correr", + "activityTypeBike": "Bicicleta", + "activityTypeSwim": "Natación", + "activityTypeWalk": "Caminata", "activityTypeStrength": "Strength", "activityTypeCardio": "Cardio", - "intervalOption1": "Daily", - "intervalOption2": "Weekly", - "intervalOption3": "Monthly", - "intervalOption4": "Yearly", - "activities": "activities" + "intervalOption1": "Diario", + "intervalOption2": "Semanalmente", + "intervalOption3": "Mensualmente", + "intervalOption4": "Anualmente", + "activities": "actividades" } diff --git a/frontend/app/src/i18n/es/emailVerificationView.json b/frontend/app/src/i18n/es/emailVerificationView.json index c66f2308a..f688e88c9 100644 --- a/frontend/app/src/i18n/es/emailVerificationView.json +++ b/frontend/app/src/i18n/es/emailVerificationView.json @@ -1,8 +1,8 @@ { - "title1": "Handling verify email", - "title2": "Please wait while your email is being verified. Do not refresh this page.", - "emailVerified": "Email verified successfully!", - "tokenNotFound": "Token not found", - "tokenExpired": "Token expired", - "verificationFailed": "Email verification failed" + "title1": "Correo de verificación", + "title2": "Espera mientras tu correo electrónico se verifica. No actualices esta página.", + "emailVerified": "¡Correo electrónico verificado!", + "tokenNotFound": "Token no encontrado", + "tokenExpired": "Token caducado", + "verificationFailed": "La verificación del correo electrónico ha fallado" } diff --git a/frontend/app/src/i18n/es/gears/gearView.json b/frontend/app/src/i18n/es/gears/gearView.json index 0794d41ec..ea03d016d 100644 --- a/frontend/app/src/i18n/es/gears/gearView.json +++ b/frontend/app/src/i18n/es/gears/gearView.json @@ -13,7 +13,7 @@ "gearTypeOption5": "Esquíes", "gearTypeOption6": "Snowboard", "gearTypeOption7": "Windsurf", - "gearTypeOption8": "Water sports board", + "gearTypeOption8": "Tabla de deportes acuáticos", "gearFromStrava": "Strava", "gearFromGarminConnect": "Garmin Connect", "labelBrand": "Marca", diff --git a/frontend/app/src/i18n/es/generalItems.json b/frontend/app/src/i18n/es/generalItems.json index bdff2eb32..2f786d3fb 100644 --- a/frontend/app/src/i18n/es/generalItems.json +++ b/frontend/app/src/i18n/es/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Atrás", "buttonClose": "Cerrar", + "buttonSubmit": "Submit", "true": "Verdadero", "false": "Falso", "yes": "Si", @@ -13,11 +14,11 @@ "languageOption5": "Francés (FR)", "languageOption6": "Holandés (NL)", "languageOption7": "Español (ES)", - "languageOption8": "Chinese (Simplified)", - "languageOption9": "Chinese (Traditional)", + "languageOption8": "Chino (Simplificado)", + "languageOption9": "Chino (Tradicional)", "languageOption10": "Galician (GL)", - "languageOption11": "Italian (IT)", - "languageOption12": "Slovenian (SL)", + "languageOption11": "Italiano (IT)", + "languageOption12": "Esloveno (SL)", "firstDayOfWeekOption0": "Domingo", "firstDayOfWeekOption1": "Lunes", "firstDayOfWeekOption2": "Martes", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Peso en kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "pulgadas", "unitsFeet": "pies", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lbs", "labelWeightInLbs": "Peso en lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "ppm", "labelHRinBpm": "Frecuencia cardíaca en ppm", @@ -74,9 +85,17 @@ "currencyDollarSymbol": "$", "currencyPound": "Libra esterlina", "currencyPoundSymbol": "£", - "genderMale": "Male", - "genderFemale": "Female", - "genderUnspecified": "Unspecified", - "labelAverage": "Average", - "labelMaximum": "Maximum" + "genderMale": "Hombre", + "genderFemale": "Mujer", + "genderUnspecified": "Sin especificar", + "labelAverage": "Promedio", + "labelMaximum": "Máximo", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/es/healthView.json b/frontend/app/src/i18n/es/healthView.json index f307fb54d..b0626ec77 100644 --- a/frontend/app/src/i18n/es/healthView.json +++ b/frontend/app/src/i18n/es/healthView.json @@ -1,5 +1,13 @@ { "title": "Salud", - "errorFetchingHealthWeight": "Error obteniendo datos de salud", - "errorFetchingHealthTargets": "Error obteniendo objetivos de salud" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Error obteniendo objetivos de salud", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/es/loginView.json b/frontend/app/src/i18n/es/loginView.json index c07abf5f6..d29a0c917 100644 --- a/frontend/app/src/i18n/es/loginView.json +++ b/frontend/app/src/i18n/es/loginView.json @@ -8,30 +8,42 @@ "subtitle": "Iniciar sesión abajo", "username": "Usuario", "password": "Contraseña", - "mfaCode": "MFA Code", - "mfaRequired": "Multi-factor authentication required. Please enter your 6-digit code.", - "verifyMFAButton": "Verify MFA", - "invalidMFACode": "Invalid MFA code. Please try again.", + "hidePassword": "Hide password", + "showPassword": "Show password", + "mfaCode": "Código MFA", + "mfaRequired": "Se requiere autenticación de múltiples factores. Introduce el código de 6 dígitos.", + "verifyMFAButton": "Verificar MFA", + "invalidMFACode": "Código MFA no válido. Inténtalo de nuevo.", "neverExpires": "Recordarme (no marque esta casilla si está usando una computadora compartida)", "signInButton": "Registrarse", "signUpText": "¿Buscando registrarse?", "signUpButton": "Registrarse", "errorPublicActivityNotFound": "Actividad pública no encontrada", - "errorPublic_shareable_links": "Public shareable links are not allowed. To view this activity, you must be signed in", - "forgotPassword": "Forgot your password?", - "passwordResetInvalidLink": "No password reset token provided", - "passwordResetSuccess": "Your password has been reset successfully", - "forgotPasswordModalTitle": "Forgot Password", - "forgotPasswordModalEmailLabel": "Email address", - "forgotPasswordModalEmailHelp": "Enter the email address associated with your account. An email with a link to reset your password will be sent.", - "forgotPasswordModalSubmitButton": "Send Reset Link", - "forgotPasswordModalEmailRequired": "Email address is required", - "forgotPasswordModalRequestSuccess": "If the email exists in the system, a password reset link will be sent to the provided email address", - "forgotPasswordModalRequestError": "Failed to process password reset request", - "forgotPasswordModalEmailNotConfigured": "Email service is not configured. Please contact the administrator", - "forgotPasswordModalUnableToSendEmail": "Unable to send email. Please try again later or contact the administrator", - "signUpLink": "Don't have an account? Sign up", - "emailVerificationSent": "Please check your email for verification instructions", - "adminApprovalRequired": "Your account is pending admin approval", - "verifyEmailInvalidLink": "Invalid email verification link" + "errorPublic_shareable_links": "Los enlaces públicos no están permitidos. Para ver esta actividad, debes iniciar sesión", + "forgotPassword": "¿Olvidaste tu contraseña?", + "passwordResetInvalidLink": "No hay token de restablecimiento de contraseña", + "passwordResetSuccess": "Se ha restablecido tu contraseña correctamente", + "forgotPasswordModalTitle": "Contraseña olvidada", + "forgotPasswordModalEmailLabel": "Correo electrónico", + "forgotPasswordModalEmailHelp": "Introduce la dirección de correo electrónico asociada a tu cuenta. Se enviará un correo electrónico con un enlace para restablecer tu contraseña.", + "forgotPasswordModalSubmitButton": "Enviar enlace de restablecimiento", + "forgotPasswordModalEmailRequired": "Se requiere una dirección de correo", + "forgotPasswordModalRequestSuccess": "Si el correo electrónico existe en el sistema, se enviará un enlace para restablecer la contraseña a esa misma dirección", + "forgotPasswordModalRequestError": "Error al procesar la solicitud de restablecimiento de contraseña", + "forgotPasswordModalEmailNotConfigured": "El servicio de correo electrónico no está configurado. Ponte en contacto con el administrador", + "forgotPasswordModalUnableToSendEmail": "No se puede enviar el correo electrónico. Inténtalo de nuevo más tarde o contacta con el administrador", + "signUpLink": "¿No tienes cuenta? Regístrate", + "emailVerificationSent": "Comprueba tu correo electrónico para ver las instrucciones de verificación", + "adminApprovalRequired": "Tu cuenta está pendiente de aprobación por parte del administrador", + "verifyEmailInvalidLink": "Enlace de verificación de correo electrónico no válido", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/es/resetPassword.json b/frontend/app/src/i18n/es/resetPassword.json index 59d812b06..adfa47961 100644 --- a/frontend/app/src/i18n/es/resetPassword.json +++ b/frontend/app/src/i18n/es/resetPassword.json @@ -1,11 +1,11 @@ { - "title": "Reset Password", - "newPasswordLabel": "New Password", - "confirmPasswordLabel": "Confirm New Password", - "submitButton": "Reset Password", - "backToLogin": "Back to Login", - "passwordComplexityError": "Password must be at least 8 characters long, include an uppercase letter, a number, and a special character", - "passwordMismatchError": "Passwords do not match", - "resetError": "Failed to reset password", - "invalidOrExpiredToken": "Invalid or expired password reset token" + "title": "Restablecer contraseña", + "newPasswordLabel": "Nueva Contraseña", + "confirmPasswordLabel": "Confirmar nueva contraseña", + "submitButton": "Restablecer contraseña", + "backToLogin": "Volver a Inicio de sesión", + "passwordComplexityError": "La contraseña debe tener al menos 8 caracteres, incluir una letra mayúscula, un número y un carácter especial", + "passwordMismatchError": "Las contraseñas no coinciden", + "resetError": "Error al restablecer la contraseña", + "invalidOrExpiredToken": "Token de restablecimiento de contraseña no válido o caducado" } diff --git a/frontend/app/src/i18n/es/searchView.json b/frontend/app/src/i18n/es/searchView.json index 55eceed8a..6479e8f32 100644 --- a/frontend/app/src/i18n/es/searchView.json +++ b/frontend/app/src/i18n/es/searchView.json @@ -12,19 +12,19 @@ "searchSelectActivityType6": "Senderismo", "searchSelectActivityType7": "Remo", "searchSelectActivityType8": "Yoga", - "searchSelectActivityType9": "Ski", + "searchSelectActivityType9": "Esquí", "searchSelectActivityType10": "Snowboard", - "searchSelectActivityType11": "Racquet sports", + "searchSelectActivityType11": "Deportes de raqueta", "searchSelectActivityType12": "Windsurf", - "searchSelectActivityType13": "Stand up paddling", + "searchSelectActivityType13": "Paddle surf", "searchSelectActivityType14": "Surf", - "searchSelectActivityType15": "Ice skate", - "searchSelectActivityType16": "Soccer", + "searchSelectActivityType15": "Patinaje sobre hielo", + "searchSelectActivityType16": "Fútbol", "searchSelectActivityType17": "Cardio", - "searchSelectActivityType18": "Kayaking", - "searchSelectActivityType19": "Sailing", - "searchSelectActivityType20": "Snow shoeing", - "searchSelectActivityType21": "Skating", + "searchSelectActivityType18": "Piraguismo", + "searchSelectActivityType19": "Navegación", + "searchSelectActivityType20": "Raquetas de nieve", + "searchSelectActivityType21": "Patinaje", "searchSelectGearType0": "Todos", "searchSelectGearType1": "Bicicleta", "searchSelectGearType2": "Calzado", @@ -33,7 +33,7 @@ "searchSelectGearType5": "Esquíes", "searchSelectGearType6": "Snowboard", "searchSelectGearType7": "Windsurf", - "searchSelectGearType8": "Water sports board", + "searchSelectGearType8": "Tabla de deportes acuáticos", "resultIsInactiveBadge": "Inactivo", "searchInputPlaceholder": "Buscar el texto", "errorFetchingUserWithUsernameContains": "Error obteniendo usuario con nombre de usuario contiene lógica", diff --git a/frontend/app/src/i18n/es/signupView.json b/frontend/app/src/i18n/es/signupView.json index a5bf27da2..af81f5d43 100644 --- a/frontend/app/src/i18n/es/signupView.json +++ b/frontend/app/src/i18n/es/signupView.json @@ -1,33 +1,33 @@ { - "title": "Sign up", - "subtitle": "Create your account below", - "name": "Full name", - "username": "Username", - "email": "Email address", - "password": "Password", - "optionalFields": " Optional fields", - "preferredLanguage": "Preferred language", - "city": "City", - "birthdate": "Birth date", - "gender": "Gender", - "units": "Units", - "metric": "Metric", + "title": "Registrarse", + "subtitle": "Crea tu cuenta a continuación", + "name": "Nombre completo", + "username": "Nombre de usuario", + "email": "Correo electrónico", + "password": "Contraseña", + "optionalFields": " Campos opcionales", + "preferredLanguage": "Idioma preferido", + "city": "Ciudad", + "birthdate": "Fecha de nacimiento", + "gender": "Sexo", + "units": "Unidades", + "metric": "Métrica", "imperial": "Imperial", - "height": "Height", - "firstDayOfWeek": "First day of week", - "currency": "Currency", - "signUpButton": "Create account", - "alreadyHaveAccount": "Already have an account? Sign in", - "success": "Sign-up successful", - "errorNameRequired": "Full name is required", - "errorUsernameRequired": "Username is required", - "errorEmailRequired": "Email address is required", - "errorEmailInvalid": "Please enter a valid email address", - "errorPasswordRequired": "Password is required", - "errorPasswordTooShort": "Password must be at least 8 characters long", - "errorUserExists": "A user with this email or username already exists", - "errorSignupDisabled": "Sign-up is not enabled on this server", - "errorValidation": "Please check your input and try again", - "errorGeneral": "An error occurred during sign-up", - "signupDisabled": "User sign-up is not enabled on this server" + "height": "Estatura", + "firstDayOfWeek": "Primer día de la semana", + "currency": "Moneda", + "signUpButton": "Crear cuenta", + "alreadyHaveAccount": "¿Ya tienes una cuenta? Inicia sesión", + "success": "Suscripción correcta", + "errorNameRequired": "El campo del nombre es obligatorio", + "errorUsernameRequired": "El nombre de usuario es obligatorio", + "errorEmailRequired": "Se requiere una dirección de correo", + "errorEmailInvalid": "Introduce un correo electrónico válido", + "errorPasswordRequired": "La contraseña es necesaria", + "errorPasswordTooShort": "La contraseña debe contener al menos 8 caracteres", + "errorUserExists": "Ya existe un usuario con este correo electrónico o nombre de usuario", + "errorSignupDisabled": "El registro no está activado en este servidor", + "errorValidation": "Comprueba tus datos e inténtalo de nuevo", + "errorGeneral": "Se ha producido un error durante el registro", + "signupDisabled": "El registro de usuario no está activado en este servidor" } diff --git a/frontend/app/src/i18n/es/summaryView.json b/frontend/app/src/i18n/es/summaryView.json index 986843c0a..a640c0e71 100644 --- a/frontend/app/src/i18n/es/summaryView.json +++ b/frontend/app/src/i18n/es/summaryView.json @@ -3,7 +3,7 @@ "filterLabelActivityType": "Tipo", "filterOptionAllTypes": "Todos los tipos", "labelViewType": "Ver por", - "optionDaily": "Daily", + "optionDaily": "Diario", "optionWeekly": "Semanalmente", "optionMonthly": "Mensualmente", "optionYearly": "Anualmente", diff --git a/frontend/app/src/i18n/fr/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/fr/components/activities/modals/editActivityModalComponent.json index 69b9b3679..1b5f8c8eb 100644 --- a/frontend/app/src/i18n/fr/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/fr/components/activities/modals/editActivityModalComponent.json @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Abonnés", "modalEditActivityVisibilityOption2": "Privé", "modalEditActivityIsHiddenLabel": "Is hidden", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Masquer l'heure de début", "modalEditActivityHideLocationLabel": "Masquer le lieu", "modalEditActivityHideMapLabel": "Masquer la carte", diff --git a/frontend/app/src/i18n/fr/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/fr/components/health/healthDashboardZoneComponent.json index f86b85282..dc79d3ae1 100644 --- a/frontend/app/src/i18n/fr/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Poids", "noWeightData": "Aucune donnée de poids", "noWeightTarget": "Aucune cible de poids", @@ -9,5 +13,8 @@ "bmiOverweight": "Surpoids", "bmiObesityClass1": "Obésité (classe 1)", "bmiObesityClass2": "Obésité (classe 2)", - "bmiObesityClass3": "Obésité morbide (classe 3)" + "bmiObesityClass3": "Obésité morbide (classe 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/fr/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/fr/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/fr/components/health/healthSideBarComponent.json index f864b1a66..acd0351fe 100644 --- a/frontend/app/src/i18n/fr/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/fr/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Tableau de Bord", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Poids" } diff --git a/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/fr/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/fr/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/fr/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index c843fdc30..a37ae37c8 100644 --- a/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Modifier le poids", "addWeightWeightLabel": "Poids", "addWeightDateLabel": "Date", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Poids ajouté", "errorAddWeight": "Erreur lors de l'ajout du poids" } diff --git a/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightListComponent.json index 51b21f092..5c1a04951 100644 --- a/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/fr/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Supprimer le poids", "modalDeleteWeightBody": "Êtes-vous sûr de vouloir supprimer la saisie de poids pour ", "successDeleteWeight": "Poids supprimé", diff --git a/frontend/app/src/i18n/fr/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/fr/components/health/healthWeightZoneComponent.json index 8614c43a5..0cba0eba0 100644 --- a/frontend/app/src/i18n/fr/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Ajouter un poids", - "labelNumberOfHealthWeightWeight1": "Il y a un total de ", - "labelNumberOfHealthWeightWeight2": " mesure(s) de poids insérée(s) (", - "labelNumberOfHealthWeightWeight3": " chargé(e)(s) ):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/fr/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsSecurityZoneComponent.json index 642d64f0b..e88729567 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Le mot de passe a bien été modifié", "userChangePasswordErrorMessage": "Erreur lors de la modification du mot de passe", "successDeleteSession": "Session supprimée avec succès", - "errorDeleteSession": "Erreur lors de la suppression de session" + "errorDeleteSession": "Erreur lors de la suppression de session", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/fr/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsServerSettingsZoneComponent.json index 79e39ee0a..3a318bc55 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Sign-up", "adminApprovalLabel": "Admin approval", "emailConfirmationLabel": "Email confirmation", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Lien public à partager", "enabledLabel": "Enabled", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Activer cette option rendra toutes les activités publiques visibles sans authentification.", diff --git a/frontend/app/src/i18n/fr/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsSideBarComponent.json index 308964074..faf7ac258 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Utilisateurs", "serverSettingsSection": "Paramètres du serveur", + "identityProvidersSection": "Identity Providers", "generalSection": "Général", "myProfileSection": "Mon profil", "myGoals": "My Goals", diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..08ee0db53 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" +} diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUserProfileZoneComponent.json index e5af656cf..a4789ae24 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Impérial", "currencyLabel": "Currency", "heightLabel": "Taille", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Langue préférée", "firstDayOfWeekLabel": "First day of week", "accessTypeLabel": "Type d'accès", diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index abdf9c3e8..79c32cd3a 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Icône de fournisseur inconnu", - "providerTypeBadgeLabel": "Type de fournisseur d'authentification", - "linkedAtLabel": "Date et heure de liaison du fournisseur", - "linkedAt": "Lié", - "lastLoginLabel": "Date et heure de la dernière connexion avec ce fournisseur", - "lastLogin": "Dernière utilisation", - "neverUsedLabel": "Ce fournisseur n'a jamais été utilisé pour se connecter", - "neverUsed": "Jamais utilisé", - "deleteButtonAriaLabel": "Supprimer le lien du fournisseur d'identité {provider}", - "modalDeleteTitle": "Supprimer le Fournisseur d'Identité", - "modalDeleteBody1": "Êtes-vous sûr de vouloir dissocier", - "modalDeleteBody2": " ? L'utilisateur ne pourra plus se connecter en utilisant ce fournisseur.", - "modalDeleteButton": "Supprimer le Lien du Fournisseur" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index b7c203b66..0de737486 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Currency", "addEditUserModalHeightLabel": "Taille", "addEditUserModalHeightPlaceholder": "Taille", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Taille non valide. Veuillez entrer une taille valide en pieds.", "addEditUserModalInchesValidationLabel": "Taille non valide. Veuillez entrer une taille valide en pieds.", "addEditUserModalUserPreferredLanguageLabel": "Langue préférée", diff --git a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersListComponent.json index 9bd8ec532..e4ff0d7bd 100644 --- a/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/fr/components/settings/settingsUsersZone/usersListComponent.json @@ -4,16 +4,16 @@ "userListUserIsMeBadge": "Moi", "userListUserIsAdminBadge": "Administrateur", "userListUserIsInactiveBadge": "Inactif", - "userListUserHasUnverifiedEmailBadge": "E-mail non vérifié", - "userListUserHasExternalAuthBadge": "Auth Externe", - "modalApproveSignUpTitle": "Approuver l'inscription de l'utilisateur", - "modalApproveSignUpBody": "Êtes-vous sûr de vouloir approuver l'utilisateur ", - "processingApproval": "Traitement de l'approbation...", - "userApproveSuccessMessage": "Utilisateur approuvé avec succès.", - "userApproveErrorMessage": "Erreur lors de l'approbation de l'utilisateur", - "modalRejectSignUpTitle": "Rejeter l'inscription de l'utilisateur", - "modalRejectSignUpBody1": "Êtes-vous sûr de vouloir rejeter l'utilisateur ", - "modalRejectSignUpBody2": "L'utilisateur sera supprimé, cette action est irréversible.", + "userListUserHasUnverifiedEmailBadge": "Unverified email", + "userListUserHasExternalAuthBadge": "External auth", + "modalApproveSignUpTitle": "Approve user sign up", + "modalApproveSignUpBody": "Are you sure you want to approve user ", + "processingApproval": "Processing approval...", + "userApproveSuccessMessage": "User approved successfully.", + "userApproveErrorMessage": "Error approving user", + "modalRejectSignUpTitle": "Reject user sign up", + "modalRejectSignUpBody1": "Are you sure you want to reject user ", + "modalRejectSignUpBody2": "The user will be deleted, this cannot be undone.", "userEditErrorMessage": "Erreur lors de la modification de l'utilisateur", "modalDeleteUserTitle": "Supprimer l’utilisateur", "modalDeleteUserBody": "Êtes-vous sûr de vouloir supprimer l'utilisateur ", @@ -21,8 +21,8 @@ "userSessionDeleteSuccessMessage": "Session supprimée avec succès", "userSessionDeleteErrorMessage": "Erreur lors de la suppression de session", "tabSessions": "Sessions", - "tabIdentityProviders": "Fournisseurs d'identité", - "userIdpsLoadErrorMessage": "Erreur lors du chargement des fournisseurs d'identité", - "userIdpDeleteSuccessMessage": "Fournisseur d'identité dissocié avec succès", - "userIdpDeleteErrorMessage": "Erreur lors de la dissociation du fournisseur d'identité" + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/fr/generalItems.json b/frontend/app/src/i18n/fr/generalItems.json index 5d245b9e0..b1c3a2019 100644 --- a/frontend/app/src/i18n/fr/generalItems.json +++ b/frontend/app/src/i18n/fr/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Précédent", "buttonClose": "Fermer", + "buttonSubmit": "Submit", "true": "Vrai", "false": "Faux", "yes": "Oui", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Poids en kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "pouces", "unitsFeet": "pieds", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mile/h", "unitsLbs": "livres", "labelWeightInLbs": "Poids en livres", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Fréquence cardiaque en bpm", @@ -78,5 +89,13 @@ "genderFemale": "Female", "genderUnspecified": "Unspecified", "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelMaximum": "Maximum", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/fr/healthView.json b/frontend/app/src/i18n/fr/healthView.json index 7ebe452c9..f08fe20bf 100644 --- a/frontend/app/src/i18n/fr/healthView.json +++ b/frontend/app/src/i18n/fr/healthView.json @@ -1,5 +1,13 @@ { "title": "Santé", - "errorFetchingHealthWeight": "Erreur lors de la récupération des données de santé", - "errorFetchingHealthTargets": "Erreur lors de la récupération des objectifs de santé" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Erreur lors de la récupération des objectifs de santé", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/fr/loginView.json b/frontend/app/src/i18n/fr/loginView.json index 946bda842..806779fa9 100644 --- a/frontend/app/src/i18n/fr/loginView.json +++ b/frontend/app/src/i18n/fr/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Connectez-vous ci-dessous", "username": "Identifiant", "password": "Mot de passe", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "MFA Code", "mfaRequired": "Multi-factor authentication required. Please enter your 6-digit code.", "verifyMFAButton": "Verify MFA", @@ -33,5 +35,15 @@ "signUpLink": "Don't have an account? Sign up", "emailVerificationSent": "Please check your email for verification instructions", "adminApprovalRequired": "Your account is pending admin approval", - "verifyEmailInvalidLink": "Invalid email verification link" + "verifyEmailInvalidLink": "Invalid email verification link", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/gl/activityItems.json b/frontend/app/src/i18n/gl/activityItems.json index e4e36b797..c5a934c03 100644 --- a/frontend/app/src/i18n/gl/activityItems.json +++ b/frontend/app/src/i18n/gl/activityItems.json @@ -39,10 +39,10 @@ "soccer": "Fútbol", "padel": "Pádel", "treadmillRun": "Correr na cinta", - "cardioTraining": "Cardio training", - "kayaking": "Kayaking", - "sailing": "Sailing", + "cardioTraining": "Adestramento Cardio", + "kayaking": "Caiac", + "sailing": "Vela", "snowShoeing": "Snow shoeing", - "inlineSkating": "Inline skating", + "inlineSkating": "Patinaxe en liña", "labelWorkout": " adestramento" } diff --git a/frontend/app/src/i18n/gl/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/gl/components/activities/modals/editActivityModalComponent.json index 625630377..9f02621f1 100644 --- a/frontend/app/src/i18n/gl/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/gl/components/activities/modals/editActivityModalComponent.json @@ -47,9 +47,9 @@ "modalEditActivityTypeOption38": "Fútbol", "modalEditActivityTypeOption39": "Pádel", "modalEditActivityTypeOption40": "Correr na cinta", - "modalEditActivityTypeOption41": "Cardio training", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", + "modalEditActivityTypeOption41": "Adestramento Cardio", + "modalEditActivityTypeOption42": "Caiac", + "modalEditActivityTypeOption43": "Vela", "modalEditActivityTypeOption44": "Snow shoeing", "modalEditActivityTypeOption45": "Inline skating", "modalEditActivityVisibilityLabel": "Visibilidade", @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Para seguidoras", "modalEditActivityVisibilityOption2": "Privada", "modalEditActivityIsHiddenLabel": "Está oculta", + "modalEditActivityHiddenItemsLabel": "Campos ocultos da actividade", "modalEditActivityHideStartTimeLabel": "Ocultar hora de inicio", "modalEditActivityHideLocationLabel": "Ocultar localización", "modalEditActivityHideMapLabel": "Ocultar mapa", diff --git a/frontend/app/src/i18n/gl/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/gl/components/health/healthDashboardZoneComponent.json index 30e60ec68..10f57109e 100644 --- a/frontend/app/src/i18n/gl/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Tempo durmindo hoxe", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Pulso en repouso", + "avgSkinTemperatureDeviation": "Desv. da temp. da pel", "weight": "Peso", "noWeightData": "Sen datos do peso", "noWeightTarget": "Sen obxectivo de peso", @@ -9,5 +13,8 @@ "bmiOverweight": "Sobrepeso", "bmiObesityClass1": "Obesidade (clase 1)", "bmiObesityClass2": "Obesidade (clase 2)", - "bmiObesityClass3": "Obesidade extrema (clase 3)" + "bmiObesityClass3": "Obesidade extrema (clase 3)", + "steps": "Pasos de hoxe", + "stepsTargetLabel": "pasos", + "noStepsTarget": "Sen obxectivo de pasos" } diff --git a/frontend/app/src/i18n/gl/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/gl/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/gl/components/health/healthSideBarComponent.json index 35dd5c26d..c992d90e4 100644 --- a/frontend/app/src/i18n/gl/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/gl/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Taboleiro", + "sleepSection": "Durmir", + "RHRSection": "Pulso en repouso", + "stepsSection": "Pasos", "weightSection": "Peso" } diff --git a/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/gl/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/gl/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/gl/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 3a454d25d..8b0fc2425 100644 --- a/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Editar peso", "addWeightWeightLabel": "Peso", "addWeightDateLabel": "Data", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Peso engadido", "errorAddWeight": "Erro ao engadir o peso" } diff --git a/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightListComponent.json index 9187c2f3a..331e7c8c2 100644 --- a/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/gl/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Eliminar peso", "modalDeleteWeightBody": "Tes certeza de querer eliminar o peso de ", "successDeleteWeight": "Peso eliminado", diff --git a/frontend/app/src/i18n/gl/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/gl/components/health/healthWeightZoneComponent.json index 5917e02c8..4e8bcbbda 100644 --- a/frontend/app/src/i18n/gl/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Engadir peso", - "labelNumberOfHealthWeightWeight1": "Hai un total de ", - "labelNumberOfHealthWeightWeight2": " engadido o peso (", - "labelNumberOfHealthWeightWeight3": " cargado):" + "buttonWeightTarget": "Obxectivo de peso", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 9d30c4f25..916501d31 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1,21 +1,21 @@ { - "addTitle": "Add Identity Provider", - "editTitle": "Edit Identity Provider", + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", "templateLabel": "Template", - "templateCustom": "Custom (Manual Configuration)", - "nameLabel": "Provider Name", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", "slugLabel": "Slug", "slugPlaceholder": "provider-slug", "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", - "providerTypeLabel": "Provider Type", + "providerTypeLabel": "Provider type", "issuerUrlLabel": "Issuer URL", "issuerUrlPlaceholder": "https://auth.example.com", "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", "clientIdLabel": "Client ID", "clientIdPlaceholder": "Enter OAuth client ID", - "clientSecretLabel": "Client Secret", + "clientSecretLabel": "Client secret", "clientSecretPlaceholder": "Enter OAuth client secret", "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", @@ -24,20 +24,21 @@ "scopesHelp": "Space-separated list of OAuth scopes to request.", "appearanceSection": "Appearance", "iconLabel": "Icon", - "iconPlaceholder": "keycloak, authentik, authelia, google, microsoft, or custom", - "iconHelp": "Icon name for SSO button. Leave blank for default.", - "buttonTextLabel": "Button Text", - "buttonTextPlaceholder": "Sign in with Provider", - "buttonColorLabel": "Button Color", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", "optionsSection": "Options", "enabledLabel": "Enabled", "autoCreateUsersLabel": "Auto-create users", "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", "syncUserInfoLabel": "Sync user information", "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", - "configurationNotes": "Configuration Notes:", - "addButton": "Add Provider", - "saveButton": "Save Changes", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", "creatingProvider": "Creating identity provider...", "updatingProvider": "Updating identity provider...", "providerCreated": "Identity provider created successfully", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZoneComponent.json index 763a30cbd..79201fded 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1,15 +1,19 @@ { "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", "enabledBadge": "Enabled", "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", "oidcType": "OpenID Connect", "oauth2Type": "OAuth 2.0", "editButton": "Edit", "deleteButton": "Delete", - "infoAlert": "Identity providers allow users to authenticate using external services like Google, Microsoft, Keycloak, or Authentik.", - "deleteModalTitle": "Delete Identity Provider", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", - "deleteModalConfirm": "Delete Provider", + "deleteModalConfirm": "Delete provider", "enablingProvider": "Enabling {name}...", "disablingProvider": "Disabling {name}...", "providerEnabled": "{name} has been enabled", @@ -17,13 +21,13 @@ "deletingProvider": "Deleting {name}...", "providerDeleted": "{name} has been deleted", "providerAdded": "{name} has been added", - "providerDetailsTitle": "Provider Details", + "providerDetailsTitle": "Provider details", "slugLabel": "Slug", "issuerUrlLabel": "Issuer URL", "clientIdLabel": "Client ID", - "authEndpointLabel": "Authorization Endpoint", - "tokenEndpointLabel": "Token Endpoint", - "userinfoEndpointLabel": "UserInfo Endpoint", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", "errorForbidden": "You don't have permission to manage identity providers", "errorFetchingProviders": "Error fetching identity providers", "errorUpdatingProvider": "Error updating identity provider", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsSecurityZoneComponent.json index 4462b6b96..b6126d7c3 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Contrasial cambiado correctamente", "userChangePasswordErrorMessage": "Erro ao cambiar o contrasinal", "successDeleteSession": "Sesión eliminada correctamente", - "errorDeleteSession": "Erro ao eliminar a sesión" + "errorDeleteSession": "Erro ao eliminar a sesión", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/gl/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsServerSettingsZoneComponent.json index 0ee55ee2b..3330d2b93 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Crear conta", "adminApprovalLabel": "Aprobación por Admin", "emailConfirmationLabel": "Confirmación por correo", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Ligazóns públicas compartibles", "enabledLabel": "Activado", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Ao activar isto farás que todas as actividades públicas poidan verse sen precisar autenticación.", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsSideBarComponent.json index 52b7a5f8b..41d8cfcee 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Contas", "serverSettingsSection": "Axustes do servidor", + "identityProvidersSection": "Identity Providers", "generalSection": "Xerais", "myProfileSection": "O meu perfil", "myGoals": "Obxectivos", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 26c341d8d..08ee0db53 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1,17 +1,18 @@ { - "addEditGoalModalAddTitle": "Add Goal", - "addEditGoalModalEditTitle": "Edit Goal", + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", "addEditGoalModalGoalIntervalLabel": "Interval", "intervalOption1": "Daily", "intervalOption2": "Weekly", "intervalOption3": "Monthly", "intervalOption4": "Yearly", - "addEditGoalModalGoalActivityTypeLabel": "Activity Type", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", "activityTypeRun": "Run", "activityTypeBike": "Bike", "activityTypeSwim": "Swim", "activityTypeWalk": "Walk", "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", "addEditGoalModalGoalTypeLabel": "Type", "addEditGoalModalCaloriesLabel": "Calories", "addEditGoalModalCaloriesPlaceholder": "Target calories", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUserProfileZoneComponent.json index 12b6f2c84..133bfcaaa 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Moeda", "heightLabel": "Altura", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Idioma preferido", "firstDayOfWeekLabel": "Primeiro día da semana", "accessTypeLabel": "Tipo de acceso", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index 691c18200..79c32cd3a 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Icona de provedor descoñecido", - "providerTypeBadgeLabel": "Tipo de provedor de autenticación", - "linkedAtLabel": "Data e hora cando se enlazou o provedor", - "linkedAt": "Enlazado", - "lastLoginLabel": "Data e hora do último inicio de sesión con este provedor", - "lastLogin": "Último uso", - "neverUsedLabel": "Este provedor nunca se utilizou para iniciar sesión", - "neverUsed": "Nunca utilizado", - "deleteButtonAriaLabel": "Eliminar ligazón co provedor de identidade {provider}", - "modalDeleteTitle": "Eliminar Provedor de Identidade", - "modalDeleteBody1": "Estás seguro de que queres desvincular", - "modalDeleteBody2": "? O usuario xa non poderá iniciar sesión utilizando este provedor.", - "modalDeleteButton": "Eliminar Ligazón co Provedor" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index ebca7da25..eab9ed56e 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Moeda", "addEditUserModalHeightLabel": "Altura", "addEditUserModalHeightPlaceholder": "Altura", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Altura non válida. Escribe unha altura en pés.", "addEditUserModalInchesValidationLabel": "Altura non válida. Escribe unha altura en pulgadas.", "addEditUserModalUserPreferredLanguageLabel": "Idioma preferido", diff --git a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersListComponent.json index 6cb380f27..a8bd28f6b 100644 --- a/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/gl/components/settings/settingsUsersZone/usersListComponent.json @@ -5,6 +5,7 @@ "userListUserIsAdminBadge": "Administradora", "userListUserIsInactiveBadge": "Inactiva", "userListUserHasUnverifiedEmailBadge": "Correo non verificado", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "Aprobar conta da usuaria", "modalApproveSignUpBody": "Tes certeza de querer aprobar a conta da usuaria ", "processingApproval": "Procesando a aprobación…", @@ -18,5 +19,10 @@ "modalDeleteUserBody": "Tes certeza de querer eliminar a usuaria ", "userListUserSessionsTitle": "Sesións abertas", "userSessionDeleteSuccessMessage": "Sesión eliminada correctamente", - "userSessionDeleteErrorMessage": "Erro ao eliminar a sesión" + "userSessionDeleteErrorMessage": "Erro ao eliminar a sesión", + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/gl/generalItems.json b/frontend/app/src/i18n/gl/generalItems.json index 4288bc8be..1de0ff4af 100644 --- a/frontend/app/src/i18n/gl/generalItems.json +++ b/frontend/app/src/i18n/gl/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Volver", "buttonClose": "Fechar", + "buttonSubmit": "Enviar", "true": "Certo", "false": "Falso", "yes": "Si", @@ -17,7 +18,7 @@ "languageOption9": "Chinés (Tradicional)", "languageOption10": "Galego (GL)", "languageOption11": "Italiano (IT)", - "languageOption12": "Slovenian (SL)", + "languageOption12": "Esloveno (SL)", "firstDayOfWeekOption0": "Domingo", "firstDayOfWeekOption1": "Luns", "firstDayOfWeekOption2": "Martes", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "", "labelWeightInKg": "Peso en kg", + "labelWeightTargetInKg": "Obxectivo para peso en kg", "unitsInches": "pulgadas", "unitsFeet": "pés", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lbs", "labelWeightInLbs": "Peso en libras", + "labelWeightTargetInLbs": "Obxectivo para peso en lbs", + "labelSteps": "Pasos", + "labelStepsTarget": "Obxectivo de pasos", + "labelSleep": "Durmir", + "labelSleepTarget": "Obxetivo de durmir", + "labelDeep": "Profundo", + "labelLight": "Leve", + "labelREM": "REM", + "labelAwake": "Esperta", "unitsCalories": "kcal", "unitsBpm": "lpm", "labelHRinBpm": "Pulso en latexos por minuto", @@ -77,6 +88,14 @@ "genderMale": "Masculino", "genderFemale": "Feminino", "genderUnspecified": "Sen especificar", - "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelAverage": "Promedio", + "labelMaximum": "Máximo", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Pulso en repouso", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/gl/healthView.json b/frontend/app/src/i18n/gl/healthView.json index 690d296c8..92d68a1c3 100644 --- a/frontend/app/src/i18n/gl/healthView.json +++ b/frontend/app/src/i18n/gl/healthView.json @@ -1,5 +1,13 @@ { "title": "Saúde", + "errorFetchingHealthSteps": "Erro ao obter os datos de pasos", "errorFetchingHealthWeight": "Erro ao obter datos de saúde", - "errorFetchingHealthTargets": "Erro ao obter obxectivos de saúde" + "errorFetchingHealthSleep": "Erro ao obter os datos de durmir", + "errorFetchingHealthTargets": "Erro ao obter obxectivos de saúde", + "successUpdatingWeightTarget": "Actualizado correctamente o obxectivo de peso", + "errorUpdatingWeightTarget": "Erro ao actualizar o obxectivo de peso", + "successUpdatingStepsTarget": "Actualizado correctamente o obxectivo de pasos", + "errorUpdatingStepsTarget": "Erro ao actualizar o obxectivo de pasos", + "successUpdatingSleepTarget": "Actualizado correctamente o obxectivo de durmir", + "errorUpdatingSleepTarget": "Erro ao actualizar o obxectivo de durmir" } diff --git a/frontend/app/src/i18n/gl/loginView.json b/frontend/app/src/i18n/gl/loginView.json index 523012e3d..a06a5ddf6 100644 --- a/frontend/app/src/i18n/gl/loginView.json +++ b/frontend/app/src/i18n/gl/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Accede abaixo", "username": "Indentificador", "password": "Contrasinal", + "hidePassword": "Ocultar contrasinal", + "showPassword": "Mostrar contrasinal", "mfaCode": "Código AMF", "mfaRequired": "Requírese a Autenticación Multi-Factor. Escribe o código de 6 díxitos.", "verifyMFAButton": "Verificar AMF", @@ -33,5 +35,15 @@ "signUpLink": "Non tes unha conta? Crea unha", "emailVerificationSent": "Mira no teu correo para ler as instruccións de verificación", "adminApprovalRequired": "A túa conta está pendente de ser aprobada pola administración", - "verifyEmailInvalidLink": "Ligazón de verificación de correo non válida" + "verifyEmailInvalidLink": "Ligazón de verificación de correo non válida", + "ssoSection": "Ou inicia sesión con", + "ssoButton": "Inicia sesión con {provider}", + "ssoSuccess": "Autenticación correcta usando SSO", + "ssoFailed": "Fallou a autenticación SSO. Volve a intentalo", + "ssoCancelled": "Cancelouse a autenticación SSO", + "ssoAccountNotFound": "Non se atopa a conta. Contacta coa administración", + "ssoAccountDisabled": "A túa conta está desactivada. Contacta coa administración", + "ssoAutoCreateDisabled": "A creación automática de contas está desactivada. Contacta coa administración", + "ssoErrorUndefined": "Aconteceu un fallo descoñecido durante a autenticación SSO", + "forceLocalLogin": "Activada a marca de acceso local. Utiliza identificador e contrasinal para acceder." } diff --git a/frontend/app/src/i18n/gl/searchView.json b/frontend/app/src/i18n/gl/searchView.json index 8f15e43ad..ab62ebb27 100644 --- a/frontend/app/src/i18n/gl/searchView.json +++ b/frontend/app/src/i18n/gl/searchView.json @@ -21,10 +21,10 @@ "searchSelectActivityType15": "Patinaxe sobre xeo", "searchSelectActivityType16": "Fútbol", "searchSelectActivityType17": "Cardio", - "searchSelectActivityType18": "Kayaking", - "searchSelectActivityType19": "Sailing", + "searchSelectActivityType18": "Caiac", + "searchSelectActivityType19": "Vela", "searchSelectActivityType20": "Snow shoeing", - "searchSelectActivityType21": "Skating", + "searchSelectActivityType21": "Patinaxe", "searchSelectGearType0": "Todo", "searchSelectGearType1": "Bicicleta", "searchSelectGearType2": "Zapatillas", diff --git a/frontend/app/src/i18n/it/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/it/components/activities/modals/editActivityModalComponent.json index dcd35d830..5f75fe65e 100644 --- a/frontend/app/src/i18n/it/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/it/components/activities/modals/editActivityModalComponent.json @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Follower", "modalEditActivityVisibilityOption2": "Privato", "modalEditActivityIsHiddenLabel": "È nascosta", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Nascondi ora di inizio", "modalEditActivityHideLocationLabel": "Nascondi località", "modalEditActivityHideMapLabel": "Nascondi mappa", diff --git a/frontend/app/src/i18n/it/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/it/components/health/healthDashboardZoneComponent.json index 6bf485bc8..3cd72113c 100644 --- a/frontend/app/src/i18n/it/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/it/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Peso", "noWeightData": "Nessun dato sul peso", "noWeightTarget": "Nessun obiettivo di peso", @@ -9,5 +13,8 @@ "bmiOverweight": "Sovrappeso", "bmiObesityClass1": "Obesità (Classe 1)", "bmiObesityClass2": "Obesità (Classe 2)", - "bmiObesityClass3": "Obesità estrema (Classe 3)" + "bmiObesityClass3": "Obesità estrema (Classe 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/it/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/it/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/it/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/it/components/health/healthSideBarComponent.json index b3f7a9ee6..99f1dde27 100644 --- a/frontend/app/src/i18n/it/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/it/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Dashboard", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Peso" } diff --git a/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/it/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/it/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/it/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/it/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/it/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 63a317dcc..b20cdc1b7 100644 --- a/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Modifica peso", "addWeightWeightLabel": "Peso", "addWeightDateLabel": "Data", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Peso aggiunto", "errorAddWeight": "Errore nell'aggiunta del peso" } diff --git a/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightListComponent.json index 9e5ec4ce6..40d2587d0 100644 --- a/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/it/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Elimina peso", "modalDeleteWeightBody": "Sei sicuro di voler eliminare la voce di peso per ", "successDeleteWeight": "Peso eliminato", diff --git a/frontend/app/src/i18n/it/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/it/components/health/healthWeightZoneComponent.json index 8b5265d81..546738357 100644 --- a/frontend/app/src/i18n/it/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/it/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Aggiungi peso", - "labelNumberOfHealthWeightWeight1": "C'è un totale di ", - "labelNumberOfHealthWeightWeight2": " misurazioni di peso inserite (", - "labelNumberOfHealthWeightWeight3": " caricate):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json new file mode 100644 index 000000000..916501d31 --- /dev/null +++ b/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -0,0 +1,50 @@ +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZoneComponent.json new file mode 100644 index 000000000..79201fded --- /dev/null +++ b/frontend/app/src/i18n/it/components/settings/settingsIdentityProvidersZoneComponent.json @@ -0,0 +1,35 @@ +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/it/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/it/components/settings/settingsSecurityZoneComponent.json index be85b64a1..e0b152a68 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Password cambiata con successo", "userChangePasswordErrorMessage": "Errore nel cambio password", "successDeleteSession": "Sessione eliminata con successo", - "errorDeleteSession": "Errore nell'eliminazione della sessione" + "errorDeleteSession": "Errore nell'eliminazione della sessione", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/it/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/it/components/settings/settingsServerSettingsZoneComponent.json index 529a81553..b357b7e54 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Registrazione", "adminApprovalLabel": "Approvazione amministratore", "emailConfirmationLabel": "Conferma email", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Link condivisibili pubblici", "enabledLabel": "Abilitato", "serverSettingsPublicShareableLinksEnabledWarningAlert": "L'abilitazione renderà tutte le attività pubblicate visibili senza autenticazione.", diff --git a/frontend/app/src/i18n/it/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/it/components/settings/settingsSideBarComponent.json index 3cdcf5bfe..44e024d79 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Utenti", "serverSettingsSection": "Impostazioni server", + "identityProvidersSection": "Identity Providers", "generalSection": "Generale", "myProfileSection": "Il mio profilo", "myGoals": "I miei obiettivi", diff --git a/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index ffe737c0b..08ee0db53 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1,30 +1,31 @@ { - "addEditGoalModalAddTitle": "Aggiungi obiettivo", - "addEditGoalModalEditTitle": "Modifica obiettivo", - "addEditGoalModalGoalIntervalLabel": "Intervallo", - "intervalOption1": "Giornaliero", - "intervalOption2": "Settimanale", - "intervalOption3": "Mensile", - "intervalOption4": "Annuale", - "addEditGoalModalGoalActivityTypeLabel": "Tipo di attività", - "activityTypeRun": "Corsa", - "activityTypeBike": "Ciclismo", - "activityTypeSwim": "Nuoto", - "activityTypeWalk": "Camminata", - "activityTypeStrength": "Forza", - "addEditGoalModalGoalTypeLabel": "Tipo", - "addEditGoalModalCaloriesLabel": "Calorie", - "addEditGoalModalCaloriesPlaceholder": "Calorie target", - "addEditGoalModalActivitiesNumberLabel": "Numero di attività", - "addEditGoalModalActivitiesNumberPlaceholder": "Numero di attività target", - "addEditGoalModalDistanceLabel": "Distanza", - "addEditGoalModalDistancePlaceholder": "Distanza target", - "addEditGoalModalElevationLabel": "Elevazione", - "addEditGoalModalElevationPlaceholder": "Elevazione target", - "addEditGoalModalDurationLabel": "Durata", - "addEditGoalModalDurationPlaceholder": "Durata target (es: 1.5 uguale 1h30m)", - "addEditGoalModalSuccessAddGoal": "Obiettivo aggiunto con successo", - "addEditGoalModalErrorAddGoal": "Errore nell'aggiunta dell'obiettivo", - "addEditGoalModalSuccessEditGoal": "Obiettivo modificato con successo", - "addEditGoalModalErrorEditGoal": "Errore nella modifica dell'obiettivo" + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" } diff --git a/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsListComponent.json index 76965fcb7..2c8b06fbe 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Elimina obiettivo", - "modalDeleteGoalBody": "Sei sicuro di voler eliminare l'obiettivo con ID ", - "goalDeleteErrorMessage": "Errore nell'eliminazione dell'obiettivo" + "modalDeleteGoalTitle": "Delete goal", + "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", + "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/it/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUserProfileZoneComponent.json index c9ab62497..5a7b91dac 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperiali", "currencyLabel": "Valuta", "heightLabel": "Altezza", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Lingua preferita", "firstDayOfWeekLabel": "Primo giorno della settimana", "accessTypeLabel": "Tipo di accesso", diff --git a/frontend/app/src/i18n/it/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/userIdentityProviderListComponent.json new file mode 100644 index 000000000..79c32cd3a --- /dev/null +++ b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -0,0 +1,15 @@ +{ + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" +} diff --git a/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 70e6a9d49..d63dc6c13 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Valuta", "addEditUserModalHeightLabel": "Altezza", "addEditUserModalHeightPlaceholder": "Altezza", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Altezza non valida. Inserisci un'altezza valida in piedi.", "addEditUserModalInchesValidationLabel": "Altezza non valida. Inserisci un'altezza valida in pollici.", "addEditUserModalUserPreferredLanguageLabel": "Lingua preferita", diff --git a/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersListComponent.json index 57273aa4f..2b96b474b 100644 --- a/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/it/components/settings/settingsUsersZone/usersListComponent.json @@ -5,6 +5,7 @@ "userListUserIsAdminBadge": "Admin", "userListUserIsInactiveBadge": "Inattivo", "userListUserHasUnverifiedEmailBadge": "Email non verificata", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "Approva registrazione utente", "modalApproveSignUpBody": "Sei sicuro di voler approvare l'utente ", "processingApproval": "Elaborazione approvazione...", @@ -18,5 +19,10 @@ "modalDeleteUserBody": "Sei sicuro di voler eliminare l'utente ", "userListUserSessionsTitle": "Sessioni utente", "userSessionDeleteSuccessMessage": "Sessione eliminata con successo", - "userSessionDeleteErrorMessage": "Errore nell'eliminazione della sessione" + "userSessionDeleteErrorMessage": "Errore nell'eliminazione della sessione", + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/it/generalItems.json b/frontend/app/src/i18n/it/generalItems.json index d2135bc05..418b12c72 100644 --- a/frontend/app/src/i18n/it/generalItems.json +++ b/frontend/app/src/i18n/it/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Indietro", "buttonClose": "Chiudi", + "buttonSubmit": "Submit", "true": "Vero", "false": "Falso", "yes": "Sì", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Peso in kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "pollici", "unitsFeet": "piedi", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lbs", "labelWeightInLbs": "Peso in lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Frequenza cardiaca in bpm", @@ -78,5 +89,13 @@ "genderFemale": "Femmina", "genderUnspecified": "Non specificato", "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelMaximum": "Maximum", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/it/healthView.json b/frontend/app/src/i18n/it/healthView.json index 353436758..929a33eab 100644 --- a/frontend/app/src/i18n/it/healthView.json +++ b/frontend/app/src/i18n/it/healthView.json @@ -1,5 +1,13 @@ { "title": "Salute", - "errorFetchingHealthWeight": "Errore nel recupero dei dati sulla salute", - "errorFetchingHealthTargets": "Errore nel recupero degli obiettivi di salute" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Errore nel recupero degli obiettivi di salute", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/it/loginView.json b/frontend/app/src/i18n/it/loginView.json index c8723168a..28bcefb1f 100644 --- a/frontend/app/src/i18n/it/loginView.json +++ b/frontend/app/src/i18n/it/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Accedi qui sotto", "username": "Nome utente", "password": "Password", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "Codice MFA", "mfaRequired": "Autenticazione a più fattori richiesta. Inserisci il tuo codice a 6 cifre.", "verifyMFAButton": "Verifica MFA", @@ -33,5 +35,15 @@ "signUpLink": "Non hai un account? Registrati", "emailVerificationSent": "Controlla la tua email per le istruzioni di verifica", "adminApprovalRequired": "Il tuo account è in attesa di approvazione dell'amministratore", - "verifyEmailInvalidLink": "Link di verifica email non valido" + "verifyEmailInvalidLink": "Link di verifica email non valido", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/nl/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/nl/components/activities/modals/editActivityModalComponent.json index c13c5617b..bec392212 100644 --- a/frontend/app/src/i18n/nl/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/nl/components/activities/modals/editActivityModalComponent.json @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Volgers", "modalEditActivityVisibilityOption2": "Privé", "modalEditActivityIsHiddenLabel": "Is verborgen", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Verberg begintijd", "modalEditActivityHideLocationLabel": "Verberg locatie", "modalEditActivityHideMapLabel": "Verberg kaart", diff --git a/frontend/app/src/i18n/nl/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/nl/components/health/healthDashboardZoneComponent.json index 0a17e7264..69a3f441e 100644 --- a/frontend/app/src/i18n/nl/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Gewicht", "noWeightData": "Geen gewichtsgegevens", "noWeightTarget": "Geen gewichtsdoel", @@ -9,5 +13,8 @@ "bmiOverweight": "Overgewicht", "bmiObesityClass1": "Obesitas (klasse 1)", "bmiObesityClass2": "Obesitas (klasse 2)", - "bmiObesityClass3": "Extreme obesitas (klasse 3)" + "bmiObesityClass3": "Extreme obesitas (klasse 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/nl/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/nl/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/nl/components/health/healthSideBarComponent.json index 96cc4514e..1cfb1797f 100644 --- a/frontend/app/src/i18n/nl/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/nl/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Dashboard", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Gewicht" } diff --git a/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/nl/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/nl/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/nl/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index e37ef4940..73569a83d 100644 --- a/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Gewicht Wijzigen", "addWeightWeightLabel": "Gewicht", "addWeightDateLabel": "Datum", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Gewicht toegevoegd", "errorAddWeight": "Fout bij gewicht toevoegen" } diff --git a/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightListComponent.json index 4253ccc52..dacd14895 100644 --- a/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/nl/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Gewicht verwijderen", "modalDeleteWeightBody": "Weet u zeker dat u gewicht wilt verwijderen voor ", "successDeleteWeight": "Gewicht verwijderd", diff --git a/frontend/app/src/i18n/nl/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/nl/components/health/healthWeightZoneComponent.json index 7e1a22357..cd9c47add 100644 --- a/frontend/app/src/i18n/nl/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Gewicht Toevoegen", - "labelNumberOfHealthWeightWeight1": "Er is een totaal van ", - "labelNumberOfHealthWeightWeight2": " gewicht afmeting(en) ingevoegd (", - "labelNumberOfHealthWeightWeight3": " geladen):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/nl/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsSecurityZoneComponent.json index a4a0050c7..66d46109c 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Wachtwoord met succes gewijzigd", "userChangePasswordErrorMessage": "Fout opgetreden bij wijzigen van wachtwoord", "successDeleteSession": "Sessie succesvol verwijderd", - "errorDeleteSession": "Fout bij verwijderen sessie" + "errorDeleteSession": "Fout bij verwijderen sessie", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/nl/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsServerSettingsZoneComponent.json index ef93fd3ec..8aa5afdff 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Sign-up", "adminApprovalLabel": "Admin approval", "emailConfirmationLabel": "Email confirmation", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Openbare link", "enabledLabel": "Enabled", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Het inschakelen van dit zal alle openbaar geplaatste activiteiten zichtbaar maken zonder authenticatie.", diff --git a/frontend/app/src/i18n/nl/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsSideBarComponent.json index 8268b1bb4..869f62e5e 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Gebruikers", "serverSettingsSection": "Serverinstellingen", + "identityProvidersSection": "Identity Providers", "generalSection": "Algemeen", "myProfileSection": "Mijn profiel", "myGoals": "My Goals", diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..08ee0db53 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", + "addEditGoalModalGoalIntervalLabel": "Interval", + "intervalOption1": "Daily", + "intervalOption2": "Weekly", + "intervalOption3": "Monthly", + "intervalOption4": "Yearly", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", + "activityTypeRun": "Run", + "activityTypeBike": "Bike", + "activityTypeSwim": "Swim", + "activityTypeWalk": "Walk", + "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Type", + "addEditGoalModalCaloriesLabel": "Calories", + "addEditGoalModalCaloriesPlaceholder": "Target calories", + "addEditGoalModalActivitiesNumberLabel": "Activities number", + "addEditGoalModalActivitiesNumberPlaceholder": "Target activities number", + "addEditGoalModalDistanceLabel": "Distance", + "addEditGoalModalDistancePlaceholder": "Target distance", + "addEditGoalModalElevationLabel": "Elevation", + "addEditGoalModalElevationPlaceholder": "Target elevation", + "addEditGoalModalDurationLabel": "Duration", + "addEditGoalModalDurationPlaceholder": "Target duration (ex: 1.5 equals 1h30m)", + "addEditGoalModalSuccessAddGoal": "Goal added successfully", + "addEditGoalModalErrorAddGoal": "Error adding goal", + "addEditGoalModalSuccessEditGoal": "Goal edited successfully", + "addEditGoalModalErrorEditGoal": "Error editing goal" +} diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUserProfileZoneComponent.json index a1200a14f..b704d375b 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperiaal", "currencyLabel": "Currency", "heightLabel": "Hoogte", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Taalvoorkeur", "firstDayOfWeekLabel": "First day of week", "accessTypeLabel": "Toegang type", diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index 238157ad8..79c32cd3a 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Onbekend provider pictogram", - "providerTypeBadgeLabel": "Authenticatieprovider type", - "linkedAtLabel": "Datum en tijd waarop de provider is gekoppeld", - "linkedAt": "Gekoppeld", - "lastLoginLabel": "Datum en tijd van laatste inloggen met deze provider", - "lastLogin": "Laatst gebruikt", - "neverUsedLabel": "Deze provider is nog nooit gebruikt om in te loggen", - "neverUsed": "Nooit gebruikt", - "deleteButtonAriaLabel": "Verwijder {provider} identiteitsprovider koppeling", - "modalDeleteTitle": "Verwijder identiteitsprovider", - "modalDeleteBody1": "Weet je zeker dat je", - "modalDeleteBody2": " wilt ontkoppelen? De gebruiker kan niet langer inloggen met deze provider.", - "modalDeleteButton": "Verwijder provider koppeling" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 56d35e89f..e35e2a6fa 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Currency", "addEditUserModalHeightLabel": "Hoogte", "addEditUserModalHeightPlaceholder": "Hoogte", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Ongeldige hoogte. Voer een geldige hoogte in voeten in..", "addEditUserModalInchesValidationLabel": "Ongeldige hoogte. Voer een geldige hoogte in inch in", "addEditUserModalUserPreferredLanguageLabel": "Taalvoorkeur", diff --git a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersListComponent.json index 8148233c0..e55366264 100644 --- a/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/nl/components/settings/settingsUsersZone/usersListComponent.json @@ -4,25 +4,25 @@ "userListUserIsMeBadge": "Ik", "userListUserIsAdminBadge": "Admin", "userListUserIsInactiveBadge": "Inactief", - "userListUserHasUnverifiedEmailBadge": "Niet-geverifieerde e-mail", - "userListUserHasExternalAuthBadge": "Externe Auth", - "modalApproveSignUpTitle": "Gebruikersregistratie goedkeuren", - "modalApproveSignUpBody": "Weet u zeker dat u gebruiker wilt goedkeuren ", - "processingApproval": "Goedkeuring verwerken...", - "userApproveSuccessMessage": "Gebruiker succesvol goedgekeurd.", - "userApproveErrorMessage": "Fout bij goedkeuren gebruiker", - "modalRejectSignUpTitle": "Gebruikersregistratie afwijzen", - "modalRejectSignUpBody1": "Weet u zeker dat u gebruiker wilt afwijzen ", - "modalRejectSignUpBody2": "De gebruiker wordt verwijderd, dit kan niet ongedaan worden gemaakt.", + "userListUserHasUnverifiedEmailBadge": "Unverified email", + "userListUserHasExternalAuthBadge": "External auth", + "modalApproveSignUpTitle": "Approve user sign up", + "modalApproveSignUpBody": "Are you sure you want to approve user ", + "processingApproval": "Processing approval...", + "userApproveSuccessMessage": "User approved successfully.", + "userApproveErrorMessage": "Error approving user", + "modalRejectSignUpTitle": "Reject user sign up", + "modalRejectSignUpBody1": "Are you sure you want to reject user ", + "modalRejectSignUpBody2": "The user will be deleted, this cannot be undone.", "userEditErrorMessage": "Fout bij bewerken gebruiker", "modalDeleteUserTitle": "Gebruiker verwijderen", - "modalDeleteUserBody": "Weet u zeker dat u gebruiker wilt verwijderen ", + "modalDeleteUserBody": "Weet u zeker dat u gebruiker wilt verwijderen? ", "userListUserSessionsTitle": "Gebruikerssessies", "userSessionDeleteSuccessMessage": "Sessie succesvol verwijderd", "userSessionDeleteErrorMessage": "Fout bij verwijderen sessie", - "tabSessions": "Sessies", - "tabIdentityProviders": "Identiteitsproviders", - "userIdpsLoadErrorMessage": "Fout bij laden identiteitsproviders", - "userIdpDeleteSuccessMessage": "Identiteitsprovider succesvol ontkoppeld", - "userIdpDeleteErrorMessage": "Fout bij ontkoppelen identiteitsprovider" + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/nl/generalItems.json b/frontend/app/src/i18n/nl/generalItems.json index 1118a0564..cfa9f0665 100644 --- a/frontend/app/src/i18n/nl/generalItems.json +++ b/frontend/app/src/i18n/nl/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Terug", "buttonClose": "Sluiten", + "buttonSubmit": "Submit", "true": "Waar", "false": "Fout", "yes": "Ja", @@ -36,6 +37,7 @@ "unitsKmH": "km/u", "unitsKg": "kg", "labelWeightInKg": "Gewicht in kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "inches", "unitsFeet": "voet", "unitsFeetShort": "voet", @@ -45,6 +47,15 @@ "unitsMph": "mpu", "unitsLbs": "lbs", "labelWeightInLbs": "Gewicht in lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Hartslag in bpm", @@ -78,5 +89,13 @@ "genderFemale": "Female", "genderUnspecified": "Unspecified", "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelMaximum": "Maximum", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/nl/healthView.json b/frontend/app/src/i18n/nl/healthView.json index 60c193255..35bd87378 100644 --- a/frontend/app/src/i18n/nl/healthView.json +++ b/frontend/app/src/i18n/nl/healthView.json @@ -1,5 +1,13 @@ { "title": "Gezondheid", - "errorFetchingHealthWeight": "Fout bij het ophalen van gezondheidsgegevens", - "errorFetchingHealthTargets": "Fout bij ophalen van gezondheidsdoelen" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Fout bij ophalen van gezondheidsdoelen", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/nl/loginView.json b/frontend/app/src/i18n/nl/loginView.json index 1f8a916bc..2dcafcabd 100644 --- a/frontend/app/src/i18n/nl/loginView.json +++ b/frontend/app/src/i18n/nl/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Login hieronder", "username": "Gebruikersnaam", "password": "Wachtwoord", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "MFA Code", "mfaRequired": "Multi-factor authentication required. Please enter your 6-digit code.", "verifyMFAButton": "Verify MFA", @@ -33,5 +35,15 @@ "signUpLink": "Don't have an account? Sign up", "emailVerificationSent": "Please check your email for verification instructions", "adminApprovalRequired": "Your account is pending admin approval", - "verifyEmailInvalidLink": "Invalid email verification link" + "verifyEmailInvalidLink": "Invalid email verification link", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/pt/activityItems.json b/frontend/app/src/i18n/pt/activityItems.json index 392142539..41d19cf69 100644 --- a/frontend/app/src/i18n/pt/activityItems.json +++ b/frontend/app/src/i18n/pt/activityItems.json @@ -40,9 +40,9 @@ "padel": "Padel", "treadmillRun": "Corrida de passadeira", "cardioTraining": "Cardio", - "kayaking": "Kayaking", - "sailing": "Sailing", - "snowShoeing": "Snow shoeing", - "inlineSkating": "Inline skating", + "kayaking": "Caiaque", + "sailing": "Vela", + "snowShoeing": "Caminhada na neve", + "inlineSkating": "Patins em linha", "labelWorkout": " treino" } diff --git a/frontend/app/src/i18n/pt/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/pt/components/activities/modals/editActivityModalComponent.json index 0944dede5..9d7d2e940 100644 --- a/frontend/app/src/i18n/pt/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/pt/components/activities/modals/editActivityModalComponent.json @@ -48,15 +48,16 @@ "modalEditActivityTypeOption39": "Padel", "modalEditActivityTypeOption40": "Corrida de passadeira", "modalEditActivityTypeOption41": "Cardio", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", - "modalEditActivityTypeOption44": "Snow shoeing", - "modalEditActivityTypeOption45": "Inline skating", + "modalEditActivityTypeOption42": "Caiaque", + "modalEditActivityTypeOption43": "Vela", + "modalEditActivityTypeOption44": "Caminhada na neve", + "modalEditActivityTypeOption45": "Patins em linha", "modalEditActivityVisibilityLabel": "Visibilidade", "modalEditActivityVisibilityOption0": "Público", "modalEditActivityVisibilityOption1": "Seguidores", "modalEditActivityVisibilityOption2": "Privado", "modalEditActivityIsHiddenLabel": "Está oculta", + "modalEditActivityHiddenItemsLabel": "Campos ocultos de atividade", "modalEditActivityHideStartTimeLabel": "Ocultar hora de início", "modalEditActivityHideLocationLabel": "Ocultar localização", "modalEditActivityHideMapLabel": "Ocultar mapa", diff --git a/frontend/app/src/i18n/pt/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/pt/components/health/healthDashboardZoneComponent.json index 199d0660c..1dc073892 100644 --- a/frontend/app/src/i18n/pt/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Sono de hoje", + "noSleepTarget": "Sem meta de sono", + "restingHeartRate": "FC em repouso", + "avgSkinTemperatureDeviation": "Desvio temp. pele", "weight": "Peso", "noWeightData": "Sem dados de peso", "noWeightTarget": "Sem meta de peso", @@ -9,5 +13,8 @@ "bmiOverweight": "Acima do peso", "bmiObesityClass1": "Obesidade (Classe 1)", "bmiObesityClass2": "Obesidade (Classe 2)", - "bmiObesityClass3": "Obesidade extrema (Classe 3)" + "bmiObesityClass3": "Obesidade extrema (Classe 3)", + "steps": "Passos de hoje", + "stepsTargetLabel": "passos", + "noStepsTarget": "Sem meta de passos" } diff --git a/frontend/app/src/i18n/pt/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/pt/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..e4adc64e9 --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "Existe um total de ", + "labelNumberOfHealthRHR2": " entradas de FC em repouso inseridas (", + "labelNumberOfHealthRHR3": " carregada(s)):" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/pt/components/health/healthSideBarComponent.json index 6d59a74a2..1258a93ae 100644 --- a/frontend/app/src/i18n/pt/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Painel de controlo", + "sleepSection": "Sono", + "RHRSection": "FC em repouso", + "stepsSection": "Passos", "weightSection": "Peso" } diff --git a/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepAddEditModalComponent.json index 00b275758..f61dc0de2 100644 --- a/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepAddEditModalComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -2,29 +2,28 @@ "addSleepModalTitle": "Adicionar sono", "editSleepModalTitle": "Editar sono", "dateLabel": "Data", - "sleepStartTimeLabel": "Hora de início do sono", - "sleepEndTimeLabel": "Hora de fim do sono", - "totalSleepLabel": "Sono Total", - "deepSleepLabel": "Sono Profundo", - "lightSleepLabel": "Sono Leve", + "sleepStartTimeLabel": "Hora de início", + "sleepEndTimeLabel": "Hora de fim", + "totalSleepLabel": "Sono total", + "deepSleepLabel": "Sono profundo", + "lightSleepLabel": "Sono leve", "remSleepLabel": "Sono REM", - "awakeSleepLabel": "Sono Acordado", - "unmeasurableSleepLabel": "Sono Não Mensurável", - "avgHeartRateLabel": "Frequência cardíaca média", - "minHeartRateLabel": "Frequência cardíaca mínima", - "maxHeartRateLabel": "Frequência cardíaca máxima", - "avgSpo2Label": "SpO2 médio", - "lowestSpo2Label": "SpO2 mínimo", - "highestSpo2Label": "SpO2 máximo", - "sleepScoreOverallLabel": "Pontuação geral do sono", - "awakeCountLabel": "Número de despertares", - "avgSleepStressLabel": "Stress Médio do Sono", - "restingHeartRateLabel": "Frequência Cardíaca em Repouso", - "avgSkinTempDeviationLabel": "Desvio Médio da Temp. da Pele", - "sleepStagesLabel": "Fases do sono", - "addStageButton": "Adicionar fase", - "stageLabel": "Fase", - "stageTypeLabel": "Tipo de fase", + "awakeSleepLabel": "Acordado", + "avgHeartRateLabel": "FC méd.", + "minHeartRateLabel": "FC mín", + "maxHeartRateLabel": "FC máx", + "avgSpo2Label": "SpO2 méd.", + "lowestSpo2Label": "SpO2 mín", + "highestSpo2Label": "SpO2 máx", + "sleepScoreOverallLabel": "Pontuação geral", + "awakeCountLabel": "Vezes acordado", + "avgSleepStressLabel": "Stress de sono méd.", + "restingHeartRateLabel": "FC em repouso", + "avgSkinTempDeviationLabel": "Desvio méd. temp. pele", + "sleepStagesLabel": "Estágios de sono", + "addStageButton": "Adicionar estágio", + "stageLabel": "Estágio", + "stageTypeLabel": "Tipo", "stageTypeDeep": "Profundo", "stageTypeLight": "Leve", "stageTypeRem": "REM", @@ -32,7 +31,7 @@ "stageStartTimeLabel": "Hora de início", "stageEndTimeLabel": "Hora de fim", "stageDurationLabel": "Duração", - "noStagesMessage": "Nenhuma fase de sono adicionada ainda. Clique em 'Adicionar fase' para adicionar uma fase de sono.", - "successAddSleep": "Sono adicionado com sucesso", + "noStagesMessage": "Nenhum estágio de sono adicionado ainda. Clique em 'Adicionar estágio' para adicionar um estágio de sono.", + "successAddSleep": "Entrada de sono adicionada com sucesso", "errorAddSleep": "Erro ao adicionar sono" } diff --git a/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..e3a2fffac --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Data", + "sleepStagesTitle": "Estágios de sono", + "modalDeleteSleepTitle": "Excluir entrada de sono", + "modalDeleteSleepBody": "Tem a certeza que deseja eliminar a entrada de sono para ", + "successDeleteSleep": "Sono eliminado", + "errorDeleteSleep": "Não foi possível eliminar a entrada de sono", + "successEditSleep": "Sono editado", + "errorEditSleep": "Não foi possível editar a entrada de sono" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..3285121d0 --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Pontuação", + "sleepDetailsLabel": "Detalhes", + "scoreLabel": "Pontuação", + "qualityLabel": "Qualidade", + "durationLabel": "Duração", + "HRVLabel": "VRC", + "deepLabel": "Profundo", + "lightLabel": "Leve", + "REMLabel": "REM", + "awakeLabel": "Acordado", + "summaryTitle": "Sumário", + "breakdownTitle": "Detalhe", + "balancedLabel": "Equilibrado", + "unbalancedLabel": "Desequilibrado", + "lowLabel": "Baixo", + "poorLabel": "Pobre", + "excellentLabel": "Excelente", + "goodLabel": "Bom", + "fairLabel": "Razoável", + "heartRateTitle": "Frequência cardíaca", + "restingHeartRateLabel": "FC em repouso", + "avgLabel": "Méd.", + "maxLabel": "Máx.", + "minLabel": "Mín.", + "respiratoryTitle": "Taxa respiratória", + "spo2Title": "Saturação de Oxigénio no Sangue (SpO2)", + "avgSkinTempDeviationLabel": "Desvio méd. temp. pele", + "avgSleepStressLabel": "Stress de sono méd." +} diff --git a/frontend/app/src/i18n/pt/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/pt/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68acf6b65 --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Adicionar sono", + "buttonSleepTarget": "Meta de sono", + "modalSleepTargetHoursLabel": "horas", + "modalSleepTargetMinutesLabel": "minutos", + "labelNumberOfHealthSleep1": "Existe um total de ", + "labelNumberOfHealthSleep2": " entradas de sono inseridas (", + "labelNumberOfHealthSleep3": " carregada(s)):" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..49f4d022d --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Adicionar passos", + "editStepsModalTitle": "Editar passos", + "addStepsLabel": "Passos", + "addStepsDateLabel": "Data", + "successAddSteps": "Passos adicionados", + "errorAddSteps": "Erro ao adicionar passos" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..79ab42d08 --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "passos", + "labelDate": "Data", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Excluir entrada de passos", + "modalDeleteStepsBody": "Tem a certeza que deseja eliminar a entrada de passos para ", + "successDeleteSteps": "Passos eliminados", + "errorDeleteSteps": "Não foi possível eliminar a entrada de passos", + "successEditSteps": "Passos editados", + "errorEditSteps": "Não foi possível editar a entrada de passos" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/pt/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..01bca91e9 --- /dev/null +++ b/frontend/app/src/i18n/pt/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Adicionar passos", + "buttonStepsTarget": "Meta de passos", + "modalStepsTargetLabel": "Digite a sua meta de passos", + "labelNumberOfHealthSteps1": "Existe um total de ", + "labelNumberOfHealthSteps2": " entradas de passos inseridas (", + "labelNumberOfHealthSteps3": " carregada(s)):" +} diff --git a/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 9bb116ec3..e030be996 100644 --- a/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Editar peso", "addWeightWeightLabel": "Peso", "addWeightDateLabel": "Data", + "addWeightHiddenItemsLabel": "Detalhes", + "addWeightBMILabel": "IMC", + "addWeightBodyFatLabel": "Gordura corporal", + "addWeightBodyWaterLabel": "Água corporal", + "addWeightBoneMassLabel": "Massa óssea", + "addWeightMuscleMassLabel": "Massa muscular", "successAddWeight": "Peso adicionado", "errorAddWeight": "Erro ao adicionar peso" } diff --git a/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightListComponent.json index 4727b3a76..325819408 100644 --- a/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Data", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Detalhes", + "bmiLabel": "IMC", + "bodyFatLabel": "Gordura corporal", + "bodyWaterLabel": "Água corporal", + "boneMassLabel": "Massa óssea", + "muscleMassLabel": "Massa muscular", "modalDeleteWeightTitle": "Apagar peso", "modalDeleteWeightBody": "Tem a certeza que deseja eliminar a entrada de peso para ", "successDeleteWeight": "Peso eliminado", diff --git a/frontend/app/src/i18n/pt/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/pt/components/health/healthWeightZoneComponent.json index 77ea741b2..729ccd4fa 100644 --- a/frontend/app/src/i18n/pt/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/health/healthWeightZoneComponent.json @@ -1,5 +1,7 @@ { "buttonAddWeight": "Adicionar peso", + "buttonWeightTarget": "Meta de peso", + "modalWeightTargetLabel": "Digite a sua meta de peso", "labelNumberOfHealthWeightWeight1": "Existe um total de ", "labelNumberOfHealthWeightWeight2": " medida(s) de peso inserida(s) (", "labelNumberOfHealthWeightWeight3": " carregada(s)):" diff --git a/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..c203323bc 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Adicionar fornecedor de identidade", + "editTitle": "Editar fornecedor de identidade", + "templateLabel": "Modelo", + "templateCustom": "Customizado (configuração manual)", + "nameLabel": "Nome do fornecedor", + "namePlaceholder": "Insira o nome do fornecedor (ex.: Meu Fornecedor SSO)", + "slugLabel": "Slug", + "slugPlaceholder": "Slug do fornecedor", + "slugHelp": "Apenas caracteres alfanuméricos minúsculos e hífen. Usado no URL de retorno de chamada.", + "slugInvalid": "O slug deve conter apenas letras minúsculas, números e hífenes.", + "providerTypeLabel": "Tipo de fornecedor", + "issuerUrlLabel": "URL do emissor", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "Para fornecedores de OIDC, isto é usado para descoberta automática. Para OAuth2, configure endpoints manualmente.", + "clientIdLabel": "ID do cliente", + "clientIdPlaceholder": "Insira o ID do cliente OAuth", + "clientSecretLabel": "Segredo do cliente", + "clientSecretPlaceholder": "Insira o ID do cliente OAuth", + "clientSecretPlaceholderEdit": "Deixe em branco para manter segredo existente", + "clientSecretHelpEdit": "Apenas digite um novo segredo se quiser atualizá-lo.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Lista de scopes OAuth2 separados por espaço", + "appearanceSection": "Aspeto", + "iconLabel": "Ícone", + "iconCustom": "Personalizado", + "customIconUrlLabel": "URL do ícone personalizado", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL para um ícone personalizado para o botão e lista SSO.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, ou URL", + "iconHelp": "Nome do ícone para o botão SSO. Valores suportados são authelia, authentik, casdoor ou keycloak. Para ícones personalizados, forneça a URL do ícone.", + "optionsSection": "Opções", + "enabledLabel": "Ativo", + "autoCreateUsersLabel": "Criar utilizadores automaticamente", + "autoCreateUsersHelp": "Criar automaticamente contas de utilizador quando os utilizadores se autenticarem via SSO pela primeira vez.", + "syncUserInfoLabel": "Sincronizar informações do utilizador", + "syncUserInfoHelp": "Atualiza as informações do perfil do utilizador a partir do fornecedor de identidade.", + "configurationNotes": "Notas de configuração:", + "addButton": "Adicionar fornecedor", + "saveButton": "Guardar alterações", + "creatingProvider": "A criar fornecedor de identidade...", + "updatingProvider": "A atualizar fornecedor de identidade...", + "providerCreated": "Fornecedor de identidade criado com sucesso", + "providerUpdated": "Fornecedor de identidade atualizado com sucesso", + "errorCreating": "Erro ao criar fornecedor de identidade", + "errorUpdating": "Erro ao atualizar fornecedor de identidade", + "errorSlugExists": "Já existe um fornecedor com esse slug", + "errorForbidden": "Não tem permissões para efetuar esta ação" +} diff --git a/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..7b542b353 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Adicionar fornecedor de identidade", + "labelNumberOfProviders1": "Você tem ", + "labelNumberOfProviders2": " fornecedor(es) de identidade configurados:", + "enabledBadge": "Ativo", + "disabledBadge": "Desativado", + "disableButton": "Desativar", + "enableButton": "Ativar", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Editar", + "deleteButton": "Eliminar", + "infoAlert": "Fornecedores de identidade permitem que os utilizadores se autentiquem com serviços externos como Keycloak ou Authentik.", + "deleteModalTitle": "Eliminar fornecedor de identidade", + "deleteModalBody": "Tem certeza que deseja eliminar o fornecedor de identidade '{name}'? Os utilizadores ligados a este fornecedor não poderão mais autenticar-se através dele.", + "deleteModalConfirm": "Eliminar fornecedor", + "enablingProvider": "A ativar {name}...", + "disablingProvider": "A desativar {name}...", + "providerEnabled": "{name} foi ativado", + "providerDisabled": "{name} foi desativado", + "deletingProvider": "A eliminar {name}...", + "providerDeleted": "{name} foi eliminado", + "providerAdded": "{name} foi adicionado", + "providerDetailsTitle": "Detalhes do fornecedor", + "slugLabel": "Slug", + "issuerUrlLabel": "URL do emissor", + "clientIdLabel": "ID do cliente", + "authEndpointLabel": "Endpoint da autorização", + "tokenEndpointLabel": "Endpoint do token", + "userinfoEndpointLabel": "Endpoint do userinfo", + "errorForbidden": "Não tem permissão para gerir fornecedores de identidade", + "errorFetchingProviders": "Erro ao carregar fornecedores de identidade", + "errorUpdatingProvider": "Erro ao atualizar fornecedor de identidade", + "errorDeletingProvider": "Erro ao eliminar fornecedor de identidade" +} diff --git a/frontend/app/src/i18n/pt/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsSecurityZoneComponent.json index 5e4856c08..90c31a72f 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Palavra-passe alterada com sucesso", "userChangePasswordErrorMessage": "Erro ao alterar palavra-passe", "successDeleteSession": "Sessão eliminada com sucesso", - "errorDeleteSession": "Erro ao eliminar sessão" + "errorDeleteSession": "Erro ao eliminar sessão", + "subtitleLinkedAccounts": "Contas conectadas", + "linkedAccountsDescription": "Gerir fornecedores de identidade externos (SSO) associados à sua conta. Pode autenticar-se com qualquer um destes fornecedores.", + "linkedAccountsLastLogin": "Último início de sessão", + "linkedAccountsLinkedAt": "Associado", + "linkedAccountsNeverUsed": "Nunca utilizado", + "unlinkAccountButton": "Desassociar", + "availableProvidersLabel": "Fornecedores disponíveis", + "unlinkModalTitle": "Desassociar conta", + "unlinkModalConfirmation": "Tem certeza que deseja desassociar a conta {providerName}? Não poderá mais entrar autenticar-se este fornecedor.", + "unlinkModalLastMethodWarning": "Aviso: Este é o seu único método de autenticação. Por favor, defina uma palavra passe antes de desassociar.", + "unlinkAccountSuccess": "Conta desvinculada com sucesso", + "unlinkAccountError": "Erro ao desvincular conta", + "unlinkAccountLastMethodError": "Não é possível desvincular o último método de autenticação. Por favor, defina uma palavra passe primeiro.", + "linkAccountSuccess": "Conta {providerName} vinculada com sucesso", + "linkAccountError": "Erro ao desvincular conta", + "linkAccountAlreadyLinked": "Conta {providerName} já está vinculada", + "linkAccountInUse": "Esta conta do {providerName} já está vinculada a outro utilizador", + "errorLoadingLinkedAccounts": "Erro ao carregar contas conectadas", + "refreshButton": "Atualizar" } diff --git a/frontend/app/src/i18n/pt/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsServerSettingsZoneComponent.json index d89d0bc07..ed4c3aa4a 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Registar", "adminApprovalLabel": "Aprovação do administrador", "emailConfirmationLabel": "E-mail de confirmação", + "ssoTitle": "Início de sessão único (SSO)", + "ssoEnabledInfoAlert": "Habilitar SSO para permitir aos utilizadores autenticarem-se com fornecedores de identidade externos.", + "localLoginEnabledLabel": "Autenticação local ativa", + "localLoginEnabledWarningAlert": "Desabilitar a autenticação local impedirá que os utilizadores se autentiquem com utilizador e palavra passe. Certifique-se de que pelo menos um fornecedor de SSO está configurado antes de desativar.", + "ssoAutoRedirectLabel": "Redirecionar automaticamente para SSO", + "ssoAutoRedirectInfoAlert": "Redirecionar automaticamente para o fornecedor SSO quando apenas um fornecedor estiver configurado e a autenticação local estiver desativa.", "publicShareableLinksLabel": "Links publicamente compartilháveis", "enabledLabel": "Ativo", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Ao ativar esta opção, todas as atividades publicadas publicamente ficarão visíveis sem autenticação.", diff --git a/frontend/app/src/i18n/pt/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsSideBarComponent.json index 2bfc5199e..a4c6efa01 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Utilizadores", "serverSettingsSection": "Definições do Servidor", + "identityProvidersSection": "Fornecedores de identidade", "generalSection": "Geral", "myProfileSection": "O meu perfil", "myGoals": "Meus objetivos", diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 0967ef424..e62c20882 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1 +1,31 @@ -{} +{ + "addEditGoalModalAddTitle": "Adicionar objetivo", + "addEditGoalModalEditTitle": "Editar objetivo", + "addEditGoalModalGoalIntervalLabel": "Intervalo", + "intervalOption1": "Diário", + "intervalOption2": "Semanal", + "intervalOption3": "Mensal", + "intervalOption4": "Anual", + "addEditGoalModalGoalActivityTypeLabel": "Tipo de actividade", + "activityTypeRun": "Corrida", + "activityTypeBike": "Ciclismo", + "activityTypeSwim": "Natação", + "activityTypeWalk": "Caminhada", + "activityTypeStrength": "Força", + "activityTypeCardio": "Cardio", + "addEditGoalModalGoalTypeLabel": "Tipo", + "addEditGoalModalCaloriesLabel": "Calorias", + "addEditGoalModalCaloriesPlaceholder": "Calorias alvo", + "addEditGoalModalActivitiesNumberLabel": "Número de atividades", + "addEditGoalModalActivitiesNumberPlaceholder": "Número de atividades alvo", + "addEditGoalModalDistanceLabel": "Distância", + "addEditGoalModalDistancePlaceholder": "Distância alvo", + "addEditGoalModalElevationLabel": "Elevação", + "addEditGoalModalElevationPlaceholder": "Elevação alvo", + "addEditGoalModalDurationLabel": "Duração", + "addEditGoalModalDurationPlaceholder": "Duração alvo (ex: 1.5 é igual a 1h30m)", + "addEditGoalModalSuccessAddGoal": "Objetivo adicionado com sucesso", + "addEditGoalModalErrorAddGoal": "Erro ao adicionar objetivo", + "addEditGoalModalSuccessEditGoal": "Objetivo editado com sucesso", + "addEditGoalModalErrorEditGoal": "Erro ao editar objetivo" +} diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..215c903ed 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", - "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", - "goalDeleteErrorMessage": "Error deleting goal" + "modalDeleteGoalTitle": "Eliminar objetivo", + "modalDeleteGoalBody": "Tem a certeza de que deseja eliminar objetivo com o ID ", + "goalDeleteErrorMessage": "Erro ao eliminar objetivo" } diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUserProfileZoneComponent.json index 64203dc16..a390437e1 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Moeda", "heightLabel": "Altura", + "maxHeartRateLabel": "FC máx.", "preferredLanguageLabel": "Idioma de preferência", "firstDayOfWeekLabel": "Primeiro dia da semana", "accessTypeLabel": "Tipo de acesso", diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index 6eca8deae..51761acee 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "Ícone de fornecedor desconhecido", - "providerTypeBadgeLabel": "Tipo de fornecedor de autenticação", - "linkedAtLabel": "Data e hora em que o fornecedor foi vinculado", - "linkedAt": "Vinculado", - "lastLoginLabel": "Data e hora do último login com este fornecedor", - "lastLogin": "Último uso", - "neverUsedLabel": "Este fornecedor nunca foi usado para fazer login", - "neverUsed": "Nunca usado", - "deleteButtonAriaLabel": "Remover vínculo do fornecedor de identidade {provider}", - "modalDeleteTitle": "Remover fornecedor de identidade", + "unknownProviderIcon": "Ícone desconhecido", + "providerTypeBadgeLabel": "Tipo de autenticação", + "linkedAtLabel": "Data e hora de vínculo", + "linkedAt": "Ligado", + "lastLoginLabel": "Data e hora da última autenticação", + "lastLogin": "Última utilização", + "neverUsedLabel": "Este fornecedor nunca foi usado para autenticação", + "neverUsed": "Nunca utilizado", + "deleteButtonAriaLabel": "Excluir vínculo de fornecedor de identidade {provider}", + "modalDeleteTitle": "Eliminar fornecedor de identidade", "modalDeleteBody1": "Tem certeza de que deseja desvincular", - "modalDeleteBody2": "? O utilizador não poderá mais fazer login usando este fornecedor.", - "modalDeleteButton": "Remover vínculo do fornecedor" + "modalDeleteBody2": "? O utilizador não conseguirá autenticar-se com este fornecedor de identidade.", + "modalDeleteButton": "Eliminar link do fornecedor" } diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index c8ba4362b..ba0e9021c 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Moeda", "addEditUserModalHeightLabel": "Altura", "addEditUserModalHeightPlaceholder": "Altura", + "addEditUserModalMaxHeartRateLabel": "FC máx. (opcional)", + "addEditUserModalMaxHeartRatePlaceholder": "FC máx.", "addEditUserModalFeetValidationLabel": "Altura inválida. Por favor, insira uma altura válida em pés.", "addEditUserModalInchesValidationLabel": "Altura inválida. Por favor, insira uma altura válida em polegadas.", "addEditUserModalUserPreferredLanguageLabel": "Idioma de preferência", diff --git a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersListComponent.json index 89b0ad0c9..7538514e1 100644 --- a/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/pt/components/settings/settingsUsersZone/usersListComponent.json @@ -5,7 +5,7 @@ "userListUserIsAdminBadge": "Administrador", "userListUserIsInactiveBadge": "Inativo", "userListUserHasUnverifiedEmailBadge": "E-mail não verificado", - "userListUserHasExternalAuthBadge": "Auth Externa", + "userListUserHasExternalAuthBadge": "Autenticação externa", "modalApproveSignUpTitle": "Aprovar inscrição de utilizador", "modalApproveSignUpBody": "Tem certeza de que deseja aprovar o utilizador ", "processingApproval": "A processar aprovação...", diff --git a/frontend/app/src/i18n/pt/generalItems.json b/frontend/app/src/i18n/pt/generalItems.json index e14c77d78..cdf5be7b6 100644 --- a/frontend/app/src/i18n/pt/generalItems.json +++ b/frontend/app/src/i18n/pt/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Voltar", "buttonClose": "Fechar", + "buttonSubmit": "Submeter", "true": "Verdade", "false": "Falso", "yes": "Sim", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Peso em kg", + "labelWeightTargetInKg": "Meta de peso em kg", "unitsInches": "polegadas", "unitsFeet": "pés", "unitsFeetShort": "pés", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "las", "labelWeightInLbs": "Peso em libras", + "labelWeightTargetInLbs": "Meta de peso em libras", + "labelSteps": "Passos", + "labelStepsTarget": "Meta de passos", + "labelSleep": "Sono", + "labelSleepTarget": "Meta de sono", + "labelDeep": "Profundo", + "labelLight": "Leve", + "labelREM": "REM", + "labelAwake": "Acordado", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Frequência cardíaca em bpm", @@ -77,8 +88,14 @@ "genderMale": "Masculino", "genderFemale": "Feminino", "genderUnspecified": "Não especificado", - "labelAverage": "Average", - "labelMaximum": "Maximum", + "labelAverage": "Média", + "labelMaximum": "Máximo", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "FC em repouso", "labelHours": "Horas", - "labelMinutes": "Minutos" + "labelMinutes": "Minutos", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/pt/healthView.json b/frontend/app/src/i18n/pt/healthView.json index a578c536c..3d2218848 100644 --- a/frontend/app/src/i18n/pt/healthView.json +++ b/frontend/app/src/i18n/pt/healthView.json @@ -1,5 +1,13 @@ { "title": "Saúde", + "errorFetchingHealthSteps": "Erro ao obter dados de passos", "errorFetchingHealthWeight": "Erro ao obter dados de saúde", - "errorFetchingHealthTargets": "Erro ao obter metas de saúde" + "errorFetchingHealthSleep": "Erro ao obter dados de sono", + "errorFetchingHealthTargets": "Erro ao obter metas de saúde", + "successUpdatingWeightTarget": "Meta de peso atualizada com sucesso", + "errorUpdatingWeightTarget": "Erro ao atualizar meta de peso", + "successUpdatingStepsTarget": "Meta de peso atualizada com sucesso", + "errorUpdatingStepsTarget": "Erro ao atualizar meta de passos", + "successUpdatingSleepTarget": "Meta de sono atualizada com sucesso", + "errorUpdatingSleepTarget": "Erro ao atualizar meta de sono" } diff --git a/frontend/app/src/i18n/pt/loginView.json b/frontend/app/src/i18n/pt/loginView.json index fe9d85d84..429fc1184 100644 --- a/frontend/app/src/i18n/pt/loginView.json +++ b/frontend/app/src/i18n/pt/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Iniciar sessão abaixo", "username": "Nome de utilizador", "password": "Palavra-passe", + "hidePassword": "Esconder palavra-passe", + "showPassword": "Mostrar palavra-passe", "mfaCode": "Código MFA", "mfaRequired": "Autenticação multi-fator necessária. Insira o seu código de 6 dígitos.", "verifyMFAButton": "Verificar MFA", @@ -33,5 +35,15 @@ "signUpLink": "Não tem conta? Registe-se", "emailVerificationSent": "Por favor, verifique o seu e-mail para instruções de verificação", "adminApprovalRequired": "A sua conta está pendente de aprovação de administrador", - "verifyEmailInvalidLink": "Link de verificação de e-mail inválido" + "verifyEmailInvalidLink": "Link de verificação de e-mail inválido", + "ssoSection": "Ou inicie sessão com", + "ssoButton": "Iniciar sessão com {provider}", + "ssoSuccess": "Autenticado com sucesso via SSO", + "ssoFailed": "Erro na autenticação SSO. Tente novamente", + "ssoCancelled": "Autenticação SSO foi cancelada", + "ssoAccountNotFound": "Nenhuma conta encontrada. Entre em contacto com o administrador", + "ssoAccountDisabled": "A sua conta está desativada. Por favor, entre em contacto com o administrador", + "ssoAutoCreateDisabled": "A criação automática da conta está desativada. Entre em contacto com o administrador", + "ssoErrorUndefined": "Um erro inesperado ocorreu durante a autenticação SSO", + "forceLocalLogin": "Autenticação local ativa. Use o seu nome de utilizador e palavra-passe para iniciar sessão." } diff --git a/frontend/app/src/i18n/pt/searchView.json b/frontend/app/src/i18n/pt/searchView.json index 4d160bdb4..1f1e5f844 100644 --- a/frontend/app/src/i18n/pt/searchView.json +++ b/frontend/app/src/i18n/pt/searchView.json @@ -21,10 +21,10 @@ "searchSelectActivityType15": "Patinagem no gelo", "searchSelectActivityType16": "Futebol", "searchSelectActivityType17": "Cardio", - "searchSelectActivityType18": "Kayaking", - "searchSelectActivityType19": "Sailing", - "searchSelectActivityType20": "Snow shoeing", - "searchSelectActivityType21": "Skating", + "searchSelectActivityType18": "Caiaque", + "searchSelectActivityType19": "Vela", + "searchSelectActivityType20": "Caminhada na neve", + "searchSelectActivityType21": "Patinagem", "searchSelectGearType0": "Todos", "searchSelectGearType1": "Bicicleta", "searchSelectGearType2": "Sapatilhas", diff --git a/frontend/app/src/i18n/sl/activityItems.json b/frontend/app/src/i18n/sl/activityItems.json index 029ee31fd..87a8fbe2e 100644 --- a/frontend/app/src/i18n/sl/activityItems.json +++ b/frontend/app/src/i18n/sl/activityItems.json @@ -40,9 +40,9 @@ "padel": "Padel", "treadmillRun": "Tek na tekalni stezi", "cardioTraining": "Kardio trening", - "kayaking": "Kayaking", - "sailing": "Sailing", - "snowShoeing": "Snow shoeing", - "inlineSkating": "Inline skating", + "kayaking": "Kajak", + "sailing": "Jadranje", + "snowShoeing": "Krpljanje", + "inlineSkating": "Rolanje znotraj", "labelWorkout": " dejavnost" } diff --git a/frontend/app/src/i18n/sl/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/sl/components/activities/modals/editActivityModalComponent.json index 4cce97fe0..db339290a 100644 --- a/frontend/app/src/i18n/sl/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/sl/components/activities/modals/editActivityModalComponent.json @@ -48,15 +48,16 @@ "modalEditActivityTypeOption39": "Padel", "modalEditActivityTypeOption40": "Tek na tekalni stezi", "modalEditActivityTypeOption41": "Kardio trening", - "modalEditActivityTypeOption42": "Kayaking", - "modalEditActivityTypeOption43": "Sailing", - "modalEditActivityTypeOption44": "Snow shoeing", - "modalEditActivityTypeOption45": "Inline skating", + "modalEditActivityTypeOption42": "Kajak", + "modalEditActivityTypeOption43": "Jadranje", + "modalEditActivityTypeOption44": "Krpljanje", + "modalEditActivityTypeOption45": "Rolanje znotraj", "modalEditActivityVisibilityLabel": "Vidnost", "modalEditActivityVisibilityOption0": "Javno", "modalEditActivityVisibilityOption1": "Sledilci", "modalEditActivityVisibilityOption2": "Privatno", "modalEditActivityIsHiddenLabel": "Je skrito", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Skrij začetni čas", "modalEditActivityHideLocationLabel": "Skrij lokacijo", "modalEditActivityHideMapLabel": "Skrij zemljevid", diff --git a/frontend/app/src/i18n/sl/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/sl/components/health/healthDashboardZoneComponent.json index aa3b70bca..9ea6b51a2 100644 --- a/frontend/app/src/i18n/sl/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/sl/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Teža", "noWeightData": "Ni podatkov o teži", "noWeightTarget": "Ni ciljne teže", @@ -9,5 +13,8 @@ "bmiOverweight": "Prekomerna teža", "bmiObesityClass1": "Debelost (Razred 1)", "bmiObesityClass2": "Debelost (Razred 2)", - "bmiObesityClass3": "Ekstremna debelost (Razred 3)" + "bmiObesityClass3": "Ekstremna debelost (Razred 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/sl/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/sl/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/sl/components/health/healthSideBarComponent.json index fb3add4b3..1b1d0066c 100644 --- a/frontend/app/src/i18n/sl/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/sl/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Nadzorna plošča", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Teža" } diff --git a/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/sl/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/sl/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 9116846eb..685406fee 100644 --- a/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Uredi težo", "addWeightWeightLabel": "Teža", "addWeightDateLabel": "Datum", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Teža dodana", "errorAddWeight": "Napaka pri dodajanju teže" } diff --git a/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightListComponent.json index a17b1fe58..c90f4a15e 100644 --- a/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/sl/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Izbriši težo", "modalDeleteWeightBody": "Ali ste prepričani, da želite izbrisati vnos teže za ", "successDeleteWeight": "Teža izbrisana", diff --git a/frontend/app/src/i18n/sl/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/sl/components/health/healthWeightZoneComponent.json index 6a242fdab..464dc6508 100644 --- a/frontend/app/src/i18n/sl/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/sl/components/health/healthWeightZoneComponent.json @@ -1,6 +1,8 @@ { "buttonAddWeight": "Dodaj težo", - "labelNumberOfHealthWeightWeight1": "Skupaj je ", - "labelNumberOfHealthWeightWeight2": " vstavljenih meritev teže (", - "labelNumberOfHealthWeightWeight3": " naloženo):" + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", + "labelNumberOfHealthWeightWeight1": "There is a total of ", + "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", + "labelNumberOfHealthWeightWeight3": " loaded):" } diff --git a/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json new file mode 100644 index 000000000..916501d31 --- /dev/null +++ b/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -0,0 +1,50 @@ +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZoneComponent.json new file mode 100644 index 000000000..79201fded --- /dev/null +++ b/frontend/app/src/i18n/sl/components/settings/settingsIdentityProvidersZoneComponent.json @@ -0,0 +1,35 @@ +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/sl/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsSecurityZoneComponent.json index 74d9f8606..3dc1fe29b 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Geslo uspešno spremenjeno", "userChangePasswordErrorMessage": "Napaka pri spreminjanju gesla", "successDeleteSession": "Seja uspešno izbrisana", - "errorDeleteSession": "Napaka pri brisanju seje" + "errorDeleteSession": "Napaka pri brisanju seje", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/sl/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsServerSettingsZoneComponent.json index 014f8d87f..9daac55a6 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Registracija", "adminApprovalLabel": "Odobritev s strani administratorja", "emailConfirmationLabel": "Potrditev e-poštnega naslova", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Javne povezave za skupno rabo", "enabledLabel": "Omogočeno", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Omogočitev tega bo omogočila ogled vseh javno objavljenih aktivnosti brez avtentikacije.", diff --git a/frontend/app/src/i18n/sl/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsSideBarComponent.json index 46e9f193e..d6a86b20e 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Uporabniki", "serverSettingsSection": "Nastavitve strežnika", + "identityProvidersSection": "Identity Providers", "generalSection": "Splošno", "myProfileSection": "Moj profil", "myGoals": "Moji cilji", diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 26c341d8d..08ee0db53 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1,17 +1,18 @@ { - "addEditGoalModalAddTitle": "Add Goal", - "addEditGoalModalEditTitle": "Edit Goal", + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", "addEditGoalModalGoalIntervalLabel": "Interval", "intervalOption1": "Daily", "intervalOption2": "Weekly", "intervalOption3": "Monthly", "intervalOption4": "Yearly", - "addEditGoalModalGoalActivityTypeLabel": "Activity Type", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", "activityTypeRun": "Run", "activityTypeBike": "Bike", "activityTypeSwim": "Swim", "activityTypeWalk": "Walk", "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", "addEditGoalModalGoalTypeLabel": "Type", "addEditGoalModalCaloriesLabel": "Calories", "addEditGoalModalCaloriesPlaceholder": "Target calories", diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUserProfileZoneComponent.json index f82e7d293..5f546194c 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperialne", "currencyLabel": "Valuta", "heightLabel": "Višina", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Želeni jezik", "firstDayOfWeekLabel": "Prvi dan v tednu", "accessTypeLabel": "Vrsta dostopa", diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json new file mode 100644 index 000000000..79c32cd3a --- /dev/null +++ b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -0,0 +1,15 @@ +{ + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" +} diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index 387e881de..7a5f59aac 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Valuta", "addEditUserModalHeightLabel": "Višina", "addEditUserModalHeightPlaceholder": "Višina", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Neveljavna višina. Vnesite veljavno višino v čevljih.", "addEditUserModalInchesValidationLabel": "Neveljavna višina. Vnesite veljavno višino v palcih.", "addEditUserModalUserPreferredLanguageLabel": "Želeni jezik", diff --git a/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersListComponent.json index 233dce36a..6a4ea124a 100644 --- a/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/sl/components/settings/settingsUsersZone/usersListComponent.json @@ -5,6 +5,7 @@ "userListUserIsAdminBadge": "Administrator", "userListUserIsInactiveBadge": "Neaktiven", "userListUserHasUnverifiedEmailBadge": "Nepreverjen e-poštni naslov", + "userListUserHasExternalAuthBadge": "External auth", "modalApproveSignUpTitle": "Odobri registracijo uporabnika", "modalApproveSignUpBody": "Ali ste prepričani, da želite odobriti uporabnika ", "processingApproval": "Obdelava odobritve...", @@ -18,5 +19,10 @@ "modalDeleteUserBody": "Ali ste prepričani, da želite izbrisati uporabnika ", "userListUserSessionsTitle": "Uporabniške seje", "userSessionDeleteSuccessMessage": "Seja uspešno izbrisana", - "userSessionDeleteErrorMessage": "Napaka pri brisanju seje" + "userSessionDeleteErrorMessage": "Napaka pri brisanju seje", + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/sl/generalItems.json b/frontend/app/src/i18n/sl/generalItems.json index e4efc674d..147ac0a68 100644 --- a/frontend/app/src/i18n/sl/generalItems.json +++ b/frontend/app/src/i18n/sl/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Nazaj", "buttonClose": "Zapri", + "buttonSubmit": "Submit", "true": "Pravilno", "false": "Napačno", "yes": "Da", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Teža v kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "palcev", "unitsFeet": "čevljev", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "funti", "labelWeightInLbs": "Teža v lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Srčni utrip v bpm", @@ -78,5 +89,13 @@ "genderFemale": "Ženska", "genderUnspecified": "Nedoločeno", "labelAverage": "Povprečno", - "labelMaximum": "Največ" + "labelMaximum": "Največ", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/sl/healthView.json b/frontend/app/src/i18n/sl/healthView.json index 5191f43d8..6cc9780fd 100644 --- a/frontend/app/src/i18n/sl/healthView.json +++ b/frontend/app/src/i18n/sl/healthView.json @@ -1,5 +1,13 @@ { "title": "Zdravje", - "errorFetchingHealthWeight": "Napaka pri pridobivanju zdravstvenih podatkov", - "errorFetchingHealthTargets": "Napaka pri pridobivanju zdravstvenih ciljev" + "errorFetchingHealthSteps": "Error fetching health steps", + "errorFetchingHealthWeight": "Error fetching health data", + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Napaka pri pridobivanju zdravstvenih ciljev", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/sl/loginView.json b/frontend/app/src/i18n/sl/loginView.json index a9ef205ba..e08255342 100644 --- a/frontend/app/src/i18n/sl/loginView.json +++ b/frontend/app/src/i18n/sl/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Prijavite se spodaj", "username": "Uporabniško ime", "password": "Geslo", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "MFA koda", "mfaRequired": "Zahteva se večfaktorska avtentikacija. Vnesite svojo 6-mestno kodo.", "verifyMFAButton": "Preveri MFA", @@ -33,5 +35,15 @@ "signUpLink": "Nimate računa? Registrirajte se", "emailVerificationSent": "Za navodila za preverjanje preverite svoj e-poštni naslov", "adminApprovalRequired": "Vaš račun čaka na odobritev skrbnika", - "verifyEmailInvalidLink": "Neveljavna povezava za preverjanje e-pošte" + "verifyEmailInvalidLink": "Neveljavna povezava za preverjanje e-pošte", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." } diff --git a/frontend/app/src/i18n/sl/searchView.json b/frontend/app/src/i18n/sl/searchView.json index 62014c013..7d41dff81 100644 --- a/frontend/app/src/i18n/sl/searchView.json +++ b/frontend/app/src/i18n/sl/searchView.json @@ -21,10 +21,10 @@ "searchSelectActivityType15": "Drsanje na ledu", "searchSelectActivityType16": "Nogomet", "searchSelectActivityType17": "Kardio", - "searchSelectActivityType18": "Kayaking", - "searchSelectActivityType19": "Sailing", - "searchSelectActivityType20": "Snow shoeing", - "searchSelectActivityType21": "Skating", + "searchSelectActivityType18": "Kajak", + "searchSelectActivityType19": "Jadranje", + "searchSelectActivityType20": "Krpljanje", + "searchSelectActivityType21": "Drsanje", "searchSelectGearType0": "Vse", "searchSelectGearType1": "Kolo", "searchSelectGearType2": "Čevlji", diff --git a/frontend/app/src/i18n/tw/components/activities/modals/addGearToActivityModalComponent.json b/frontend/app/src/i18n/tw/components/activities/modals/addGearToActivityModalComponent.json index 734c573b5..7a59591e1 100644 --- a/frontend/app/src/i18n/tw/components/activities/modals/addGearToActivityModalComponent.json +++ b/frontend/app/src/i18n/tw/components/activities/modals/addGearToActivityModalComponent.json @@ -1,6 +1,6 @@ { - "modalLabelAddGear": "Add gear to activity", - "modalLabelSelectGear": "Select gear", - "modalButtonAddGear": "Add gear", - "errorEditingGear": "Error editing gear" + "modalLabelAddGear": "為活動添加裝備", + "modalLabelSelectGear": "請選擇裝備", + "modalButtonAddGear": "添加裝備", + "errorEditingGear": "編輯裝備時出錯" } diff --git a/frontend/app/src/i18n/tw/components/activities/modals/editActivityModalComponent.json b/frontend/app/src/i18n/tw/components/activities/modals/editActivityModalComponent.json index 7d695c92d..f8a4430cd 100644 --- a/frontend/app/src/i18n/tw/components/activities/modals/editActivityModalComponent.json +++ b/frontend/app/src/i18n/tw/components/activities/modals/editActivityModalComponent.json @@ -1,6 +1,6 @@ { - "modalEditActivityTitle": "Edit activity", - "modalEditActivityDescriptionLabel": "Description", + "modalEditActivityTitle": "編輯活動", + "modalEditActivityDescriptionLabel": "說明", "modalEditActivityDescriptionPlaceholder": "Description (max 2500 characters)", "modalEditActivityPrivateNotesLabel": "Private notes", "modalEditActivityPrivateNotesPlaceholder": "Private notes (max 2500 characters)", @@ -57,6 +57,7 @@ "modalEditActivityVisibilityOption1": "Followers", "modalEditActivityVisibilityOption2": "Private", "modalEditActivityIsHiddenLabel": "Is hidden", + "modalEditActivityHiddenItemsLabel": "Activity hidden fields", "modalEditActivityHideStartTimeLabel": "Hide start time", "modalEditActivityHideLocationLabel": "Hide location", "modalEditActivityHideMapLabel": "Hide map", diff --git a/frontend/app/src/i18n/tw/components/health/healthDashboardZoneComponent.json b/frontend/app/src/i18n/tw/components/health/healthDashboardZoneComponent.json index 62a49e059..51036258e 100644 --- a/frontend/app/src/i18n/tw/components/health/healthDashboardZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/health/healthDashboardZoneComponent.json @@ -1,4 +1,8 @@ { + "sleep": "Today's sleep", + "noSleepTarget": "No sleep target", + "restingHeartRate": "Resting heart rate", + "avgSkinTemperatureDeviation": "Skin temp. dev.", "weight": "Weight", "noWeightData": "No weight data", "noWeightTarget": "No weight target", @@ -9,5 +13,8 @@ "bmiOverweight": "Overweight", "bmiObesityClass1": "Obesity (Class 1)", "bmiObesityClass2": "Obesity (Class 2)", - "bmiObesityClass3": "Extreme Obesity (Class 3)" + "bmiObesityClass3": "Extreme Obesity (Class 3)", + "steps": "Today's steps", + "stepsTargetLabel": "steps", + "noStepsTarget": "No steps target" } diff --git a/frontend/app/src/i18n/tw/components/health/healthRHRZoneComponent.json b/frontend/app/src/i18n/tw/components/health/healthRHRZoneComponent.json new file mode 100644 index 000000000..8588b5737 --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthRHRZoneComponent.json @@ -0,0 +1,5 @@ +{ + "labelNumberOfHealthRHR1": "There is a total of ", + "labelNumberOfHealthRHR2": " RHR entries inserted (", + "labelNumberOfHealthRHR3": " loaded):" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthSideBarComponent.json b/frontend/app/src/i18n/tw/components/health/healthSideBarComponent.json index 82d94300d..608279a32 100644 --- a/frontend/app/src/i18n/tw/components/health/healthSideBarComponent.json +++ b/frontend/app/src/i18n/tw/components/health/healthSideBarComponent.json @@ -1,4 +1,7 @@ { "dashboardSection": "Dashboard", + "sleepSection": "Sleep", + "RHRSection": "Resting heart rate", + "stepsSection": "Steps", "weightSection": "Weight" } diff --git a/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepAddEditModalComponent.json b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepAddEditModalComponent.json new file mode 100644 index 000000000..20b88764b --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepAddEditModalComponent.json @@ -0,0 +1,37 @@ +{ + "addSleepModalTitle": "Add sleep", + "editSleepModalTitle": "Edit sleep", + "dateLabel": "Date", + "sleepStartTimeLabel": "Sleep start time", + "sleepEndTimeLabel": "Sleep end time", + "totalSleepLabel": "Total sleep", + "deepSleepLabel": "Deep sleep", + "lightSleepLabel": "Light sleep", + "remSleepLabel": "REM sleep", + "awakeSleepLabel": "Awake sleep", + "avgHeartRateLabel": "Avg HR", + "minHeartRateLabel": "Min HR", + "maxHeartRateLabel": "Max HR", + "avgSpo2Label": "Avg SpO2", + "lowestSpo2Label": "Min SpO2", + "highestSpo2Label": "Max SpO2", + "sleepScoreOverallLabel": "Overall sleep score", + "awakeCountLabel": "Awake count", + "avgSleepStressLabel": "Avg sleep stress", + "restingHeartRateLabel": "Resting HR", + "avgSkinTempDeviationLabel": "Avg. skin temp. deviation", + "sleepStagesLabel": "Sleep stages", + "addStageButton": "Add stage", + "stageLabel": "Stage", + "stageTypeLabel": "Stage type", + "stageTypeDeep": "Deep", + "stageTypeLight": "Light", + "stageTypeRem": "REM", + "stageTypeAwake": "Awake", + "stageStartTimeLabel": "Start time", + "stageEndTimeLabel": "End time", + "stageDurationLabel": "Duration", + "noStagesMessage": "No sleep stages added yet. Click 'Add stage' to add a sleep stage.", + "successAddSleep": "Sleep added successfully", + "errorAddSleep": "Error adding sleep" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListComponent.json b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListComponent.json new file mode 100644 index 000000000..13d64a110 --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListComponent.json @@ -0,0 +1,10 @@ +{ + "labelDate": "Date", + "sleepStagesTitle": "Sleep stages", + "modalDeleteSleepTitle": "Delete sleep entry", + "modalDeleteSleepBody": "Are you sure you want to delete sleep entry for ", + "successDeleteSleep": "Sleep deleted", + "errorDeleteSleep": "It was not possible to delete sleep entry", + "successEditSleep": "Sleep edited", + "errorEditSleep": "It was not possible to edit sleep entry" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListTabsComponent.json b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListTabsComponent.json new file mode 100644 index 000000000..ed2bf7bde --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthSleepZone/healthSleepListTabsComponent.json @@ -0,0 +1,30 @@ +{ + "sleepScoreLabel": "Sleep score", + "sleepDetailsLabel": "Sleep details", + "scoreLabel": "Score", + "qualityLabel": "Quality", + "durationLabel": "Duration", + "HRVLabel": "HRV", + "deepLabel": "Deep", + "lightLabel": "Light", + "REMLabel": "REM", + "awakeLabel": "Awake", + "summaryTitle": "Summary", + "breakdownTitle": "Breakdown", + "balancedLabel": "Balanced", + "unbalancedLabel": "Unbalanced", + "lowLabel": "Low", + "poorLabel": "Poor", + "excellentLabel": "Excellent", + "goodLabel": "Good", + "fairLabel": "Fair", + "heartRateTitle": "Heart Rate", + "restingHeartRateLabel": "Resting HR", + "avgLabel": "Avg.", + "maxLabel": "Max.", + "minLabel": "Min.", + "respiratoryTitle": "Respiratory Rate", + "spo2Title": "Blood Oxygen Saturation (SpO2)", + "avgSkinTempDeviationLabel": "Avg. Skin Temp. Deviation", + "avgSleepStressLabel": "Avg. Sleep Stress" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthSleepZoneComponent.json b/frontend/app/src/i18n/tw/components/health/healthSleepZoneComponent.json new file mode 100644 index 000000000..68112aabf --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthSleepZoneComponent.json @@ -0,0 +1,9 @@ +{ + "buttonAddSleep": "Add sleep", + "buttonSleepTarget": "Sleep target", + "modalSleepTargetHoursLabel": "hours", + "modalSleepTargetMinutesLabel": "minutes", + "labelNumberOfHealthSleep1": "There is a total of ", + "labelNumberOfHealthSleep2": " sleep entries inserted (", + "labelNumberOfHealthSleep3": " loaded):" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsAddEditModalComponent.json b/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsAddEditModalComponent.json new file mode 100644 index 000000000..7dde8c6a4 --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsAddEditModalComponent.json @@ -0,0 +1,8 @@ +{ + "addStepsModalTitle": "Add steps", + "editStepsModalTitle": "Edit steps", + "addStepsLabel": "Steps", + "addStepsDateLabel": "Date", + "successAddSteps": "Steps added", + "errorAddSteps": "Error adding steps" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsListComponent.json b/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsListComponent.json new file mode 100644 index 000000000..b74818045 --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthStepsZone/healthStepsListComponent.json @@ -0,0 +1,11 @@ +{ + "labelSteps": "steps", + "labelDate": "Date", + "labelGarminConnect": "Garmin Connect", + "modalDeleteStepsTitle": "Delete steps entry", + "modalDeleteStepsBody": "Are you sure you want to delete steps entry for ", + "successDeleteSteps": "Steps deleted", + "errorDeleteSteps": "It was not possible to delete steps entry", + "successEditSteps": "Steps edited", + "errorEditSteps": "It was not possible to edit steps entry" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthStepsZoneComponent.json b/frontend/app/src/i18n/tw/components/health/healthStepsZoneComponent.json new file mode 100644 index 000000000..fc0ae06e6 --- /dev/null +++ b/frontend/app/src/i18n/tw/components/health/healthStepsZoneComponent.json @@ -0,0 +1,8 @@ +{ + "buttonAddSteps": "Add steps", + "buttonStepsTarget": "Steps target", + "modalStepsTargetLabel": "Enter your steps target", + "labelNumberOfHealthSteps1": "There is a total of ", + "labelNumberOfHealthSteps2": " steps entries inserted (", + "labelNumberOfHealthSteps3": " loaded):" +} diff --git a/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightAddEditModalComponent.json b/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightAddEditModalComponent.json index 2af10b444..9bac552bb 100644 --- a/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightAddEditModalComponent.json +++ b/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightAddEditModalComponent.json @@ -3,6 +3,12 @@ "editWeightModalTitle": "Edit weight", "addWeightWeightLabel": "Weight", "addWeightDateLabel": "Date", + "addWeightHiddenItemsLabel": "Details", + "addWeightBMILabel": "BMI", + "addWeightBodyFatLabel": "Body fat", + "addWeightBodyWaterLabel": "Body water", + "addWeightBoneMassLabel": "Bone mass", + "addWeightMuscleMassLabel": "Muscle mass", "successAddWeight": "Weight added", "errorAddWeight": "Error adding weight" } diff --git a/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightListComponent.json b/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightListComponent.json index 5d457e51f..c2648741b 100644 --- a/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightListComponent.json +++ b/frontend/app/src/i18n/tw/components/health/healthWeightZone/healthWeightListComponent.json @@ -1,5 +1,12 @@ { + "dateLabel": "Date", "labelGarminConnect": "Garmin Connect", + "detailsTitle": "Details", + "bmiLabel": "BMI", + "bodyFatLabel": "Body fat", + "bodyWaterLabel": "Body water", + "boneMassLabel": "Bone mass", + "muscleMassLabel": "Muscle mass", "modalDeleteWeightTitle": "Delete weight", "modalDeleteWeightBody": "Are you sure you want to delete weight entry for ", "successDeleteWeight": "Weight deleted", diff --git a/frontend/app/src/i18n/tw/components/health/healthWeightZoneComponent.json b/frontend/app/src/i18n/tw/components/health/healthWeightZoneComponent.json index aa95322f6..e50513d79 100644 --- a/frontend/app/src/i18n/tw/components/health/healthWeightZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/health/healthWeightZoneComponent.json @@ -1,5 +1,7 @@ { "buttonAddWeight": "Add weight", + "buttonWeightTarget": "Weight target", + "modalWeightTargetLabel": "Enter your weight target", "labelNumberOfHealthWeightWeight1": "There is a total of ", "labelNumberOfHealthWeightWeight2": " weight measure(s) inserted (", "labelNumberOfHealthWeightWeight3": " loaded):" diff --git a/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json index 0967ef424..916501d31 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZone/identityProvidersAddEditModalComponent.json @@ -1 +1,50 @@ -{} +{ + "addTitle": "Add identity provider", + "editTitle": "Edit identity provider", + "templateLabel": "Template", + "templateCustom": "Custom (manual configuration)", + "nameLabel": "Provider name", + "namePlaceholder": "Enter provider name (e.g., My SSO Provider)", + "slugLabel": "Slug", + "slugPlaceholder": "provider-slug", + "slugHelp": "Lowercase alphanumeric characters and hyphens only. Used in callback URL.", + "slugInvalid": "Slug must contain only lowercase letters, numbers, and hyphens.", + "providerTypeLabel": "Provider type", + "issuerUrlLabel": "Issuer URL", + "issuerUrlPlaceholder": "https://auth.example.com", + "issuerUrlHelp": "For OIDC providers, this is used for auto-discovery. For OAuth2, configure endpoints manually.", + "clientIdLabel": "Client ID", + "clientIdPlaceholder": "Enter OAuth client ID", + "clientSecretLabel": "Client secret", + "clientSecretPlaceholder": "Enter OAuth client secret", + "clientSecretPlaceholderEdit": "Leave blank to keep existing secret", + "clientSecretHelpEdit": "Only enter a new secret if you want to update it.", + "scopesLabel": "Scopes", + "scopesPlaceholder": "openid profile email", + "scopesHelp": "Space-separated list of OAuth scopes to request.", + "appearanceSection": "Appearance", + "iconLabel": "Icon", + "iconCustom": "Custom", + "customIconUrlLabel": "Custom icon URL", + "customIconUrlPlaceholder": "https://example.com/my-icon.png", + "customIconUrlHelp": "URL to a custom icon for the SSO button and list.", + "iconPlaceholder": "authelia, authentik, casdoor, keycloak, or URL", + "iconHelp": "Icon name for SSO button. Supported values are authelia, authentik, casdoor or keycloak. For custom icons, provide the icon URL.", + "optionsSection": "Options", + "enabledLabel": "Enabled", + "autoCreateUsersLabel": "Auto-create users", + "autoCreateUsersHelp": "Automatically create user accounts when users sign in via SSO for the first time.", + "syncUserInfoLabel": "Sync user information", + "syncUserInfoHelp": "Update user profile information from the identity provider on each sign-in.", + "configurationNotes": "Configuration notes:", + "addButton": "Add provider", + "saveButton": "Save changes", + "creatingProvider": "Creating identity provider...", + "updatingProvider": "Updating identity provider...", + "providerCreated": "Identity provider created successfully", + "providerUpdated": "Identity provider updated successfully", + "errorCreating": "Error creating identity provider", + "errorUpdating": "Error updating identity provider", + "errorSlugExists": "A provider with this slug already exists", + "errorForbidden": "You don't have permission to perform this action" +} diff --git a/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZoneComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZoneComponent.json index 0967ef424..79201fded 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsIdentityProvidersZoneComponent.json @@ -1 +1,35 @@ -{} +{ + "addProviderButton": "Add identity provider", + "labelNumberOfProviders1": "You have ", + "labelNumberOfProviders2": " identity provider(s) configured:", + "enabledBadge": "Enabled", + "disabledBadge": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable", + "oidcType": "OpenID Connect", + "oauth2Type": "OAuth 2.0", + "editButton": "Edit", + "deleteButton": "Delete", + "infoAlert": "Identity providers allow users to authenticate using external services like Keycloak, or Authentik.", + "deleteModalTitle": "Delete identity provider", + "deleteModalBody": "Are you sure you want to delete the identity provider '{name}'? Users linked to this provider will no longer be able to authenticate through it.", + "deleteModalConfirm": "Delete provider", + "enablingProvider": "Enabling {name}...", + "disablingProvider": "Disabling {name}...", + "providerEnabled": "{name} has been enabled", + "providerDisabled": "{name} has been disabled", + "deletingProvider": "Deleting {name}...", + "providerDeleted": "{name} has been deleted", + "providerAdded": "{name} has been added", + "providerDetailsTitle": "Provider details", + "slugLabel": "Slug", + "issuerUrlLabel": "Issuer URL", + "clientIdLabel": "Client ID", + "authEndpointLabel": "Authorization endpoint", + "tokenEndpointLabel": "Token endpoint", + "userinfoEndpointLabel": "UserInfo endpoint", + "errorForbidden": "You don't have permission to manage identity providers", + "errorFetchingProviders": "Error fetching identity providers", + "errorUpdatingProvider": "Error updating identity provider", + "errorDeletingProvider": "Error deleting identity provider" +} diff --git a/frontend/app/src/i18n/tw/components/settings/settingsSecurityZoneComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsSecurityZoneComponent.json index cab71a900..a312cc504 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsSecurityZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsSecurityZoneComponent.json @@ -27,5 +27,24 @@ "userChangePasswordSuccessMessage": "Password changed successfully", "userChangePasswordErrorMessage": "Error changing password", "successDeleteSession": "Session deleted successfully", - "errorDeleteSession": "Error deleting session" + "errorDeleteSession": "Error deleting session", + "subtitleLinkedAccounts": "Linked accounts", + "linkedAccountsDescription": "Manage external authentication providers (SSO) linked to your account. You can sign in using any of these providers.", + "linkedAccountsLastLogin": "Last login", + "linkedAccountsLinkedAt": "Linked", + "linkedAccountsNeverUsed": "Never used", + "unlinkAccountButton": "Unlink", + "availableProvidersLabel": "Available providers", + "unlinkModalTitle": "Unlink Account", + "unlinkModalConfirmation": "Are you sure you want to unlink your {providerName} account? You will no longer be able to sign in using this provider.", + "unlinkModalLastMethodWarning": "Warning: This is your only authentication method. Please set a password before unlinking.", + "unlinkAccountSuccess": "Account unlinked successfully", + "unlinkAccountError": "Error unlinking account", + "unlinkAccountLastMethodError": "Cannot unlink last authentication method. Please set a password first.", + "linkAccountSuccess": "{providerName} account linked successfully", + "linkAccountError": "Error linking account", + "linkAccountAlreadyLinked": "This {providerName} account is already linked", + "linkAccountInUse": "This {providerName} account is already linked to another user", + "errorLoadingLinkedAccounts": "Error loading linked accounts", + "refreshButton": "Refresh" } diff --git a/frontend/app/src/i18n/tw/components/settings/settingsServerSettingsZoneComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsServerSettingsZoneComponent.json index 1aaf373ae..dfc5ce72f 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsServerSettingsZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsServerSettingsZoneComponent.json @@ -8,6 +8,12 @@ "signupTitle": "Sign-up", "adminApprovalLabel": "Admin approval", "emailConfirmationLabel": "Email confirmation", + "ssoTitle": "Single Sign-On (SSO)", + "ssoEnabledInfoAlert": "Enable SSO to allow users to authenticate using external identity providers.", + "localLoginEnabledLabel": "Local login enabled", + "localLoginEnabledWarningAlert": "Disabling local login will prevent users from logging in with username/password. Ensure at least one SSO provider is configured before disabling.", + "ssoAutoRedirectLabel": "Auto-redirect to SSO", + "ssoAutoRedirectInfoAlert": "Automatically redirect to SSO provider when only one provider is configured and local login is disabled.", "publicShareableLinksLabel": "Public shareable links", "enabledLabel": "Enabled", "serverSettingsPublicShareableLinksEnabledWarningAlert": "Enabling this will make all publicly posted activities viewable without authentication.", diff --git a/frontend/app/src/i18n/tw/components/settings/settingsSideBarComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsSideBarComponent.json index e43abd6c3..f925e17f2 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsSideBarComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsSideBarComponent.json @@ -1,6 +1,7 @@ { "usersSection": "Users", "serverSettingsSection": "Server Settings", + "identityProvidersSection": "Identity Providers", "generalSection": "General", "myProfileSection": "My Profile", "myGoals": "My Goals", diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json index 26c341d8d..08ee0db53 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsAddEditGoalModalComponent.json @@ -1,17 +1,18 @@ { - "addEditGoalModalAddTitle": "Add Goal", - "addEditGoalModalEditTitle": "Edit Goal", + "addEditGoalModalAddTitle": "Add goal", + "addEditGoalModalEditTitle": "Edit goal", "addEditGoalModalGoalIntervalLabel": "Interval", "intervalOption1": "Daily", "intervalOption2": "Weekly", "intervalOption3": "Monthly", "intervalOption4": "Yearly", - "addEditGoalModalGoalActivityTypeLabel": "Activity Type", + "addEditGoalModalGoalActivityTypeLabel": "Activity type", "activityTypeRun": "Run", "activityTypeBike": "Bike", "activityTypeSwim": "Swim", "activityTypeWalk": "Walk", "activityTypeStrength": "Strength", + "activityTypeCardio": "Cardio", "addEditGoalModalGoalTypeLabel": "Type", "addEditGoalModalCaloriesLabel": "Calories", "addEditGoalModalCaloriesPlaceholder": "Target calories", diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsListComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsListComponent.json index b8880e31d..2c8b06fbe 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsListComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUserGoalsZone/goalsListComponent.json @@ -1,5 +1,5 @@ { - "modalDeleteGoalTitle": "Delete Goal", + "modalDeleteGoalTitle": "Delete goal", "modalDeleteGoalBody": "Are you sure you want to delete the goal with ID ", "goalDeleteErrorMessage": "Error deleting goal" } diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUserProfileZoneComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUserProfileZoneComponent.json index 60ea305c6..c570dc289 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUserProfileZoneComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUserProfileZoneComponent.json @@ -16,6 +16,7 @@ "unitsOption2": "Imperial", "currencyLabel": "Currency", "heightLabel": "Height", + "maxHeartRateLabel": "Max heart rate", "preferredLanguageLabel": "Preferred language", "firstDayOfWeekLabel": "First day of week", "accessTypeLabel": "Access type", diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/userIdentityProviderListComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/userIdentityProviderListComponent.json index d111d09c5..79c32cd3a 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/userIdentityProviderListComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/userIdentityProviderListComponent.json @@ -1,15 +1,15 @@ { - "unknownProviderIcon": "未知提供者圖示", - "providerTypeBadgeLabel": "身分驗證提供者類型", - "linkedAtLabel": "提供者連結的日期和時間", - "linkedAt": "已連結", - "lastLoginLabel": "使用此提供者最後一次登入的日期和時間", - "lastLogin": "最後使用", - "neverUsedLabel": "此提供者從未用於登入", - "neverUsed": "從未使用", - "deleteButtonAriaLabel": "刪除 {provider} 身份提供者連結", - "modalDeleteTitle": "刪除身份提供者", - "modalDeleteBody1": "確定要取消連結", - "modalDeleteBody2": " 嗎?使用者將無法再使用此提供者登入。", - "modalDeleteButton": "刪除提供者連結" + "unknownProviderIcon": "Unknown provider icon", + "providerTypeBadgeLabel": "Authentication provider type", + "linkedAtLabel": "Date and time when provider was linked", + "linkedAt": "Linked", + "lastLoginLabel": "Date and time of last login with this provider", + "lastLogin": "Last used", + "neverUsedLabel": "This provider has never been used for login", + "neverUsed": "Never used", + "deleteButtonAriaLabel": "Delete {provider} identity provider link", + "modalDeleteTitle": "Delete identity provider", + "modalDeleteBody1": "Are you sure you want to unlink", + "modalDeleteBody2": "? The user will no longer be able to log in using this provider.", + "modalDeleteButton": "Delete provider link" } diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json index f9ccb345a..336c90aa5 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json @@ -26,6 +26,8 @@ "addEditUserModalCurrencyLabel": "Currency", "addEditUserModalHeightLabel": "Height", "addEditUserModalHeightPlaceholder": "Height", + "addEditUserModalMaxHeartRateLabel": "Max heart rate (optional)", + "addEditUserModalMaxHeartRatePlaceholder": "Max heart rate", "addEditUserModalFeetValidationLabel": "Invalid height. Please enter a valid height in feet.", "addEditUserModalInchesValidationLabel": "Invalid height. Please enter a valid height in inches.", "addEditUserModalUserPreferredLanguageLabel": "Preferred language", diff --git a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersListComponent.json b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersListComponent.json index 91cbc3eee..f16337358 100644 --- a/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersListComponent.json +++ b/frontend/app/src/i18n/tw/components/settings/settingsUsersZone/usersListComponent.json @@ -1,28 +1,28 @@ { - "userListAccessTypeOption1": "一般使用者", - "userListAccessTypeOption2": "管理員", - "userListUserIsMeBadge": "我", - "userListUserIsAdminBadge": "管理員", - "userListUserIsInactiveBadge": "未啟用", - "userListUserHasUnverifiedEmailBadge": "未驗證電子郵件", - "userListUserHasExternalAuthBadge": "外部認證", - "modalApproveSignUpTitle": "批准使用者註冊", - "modalApproveSignUpBody": "您確定要批准使用者 ", - "processingApproval": "正在處理批准...", - "userApproveSuccessMessage": "使用者已成功批准。", - "userApproveErrorMessage": "批准使用者時發生錯誤", - "modalRejectSignUpTitle": "拒絕使用者註冊", - "modalRejectSignUpBody1": "您確定要拒絕使用者 ", - "modalRejectSignUpBody2": "該使用者將被刪除,此操作無法復原。", - "userEditErrorMessage": "編輯使用者時發生錯誤", - "modalDeleteUserTitle": "刪除使用者", - "modalDeleteUserBody": "您確定要刪除使用者 ", - "userListUserSessionsTitle": "使用者工作階段", - "userSessionDeleteSuccessMessage": "工作階段已成功刪除", - "userSessionDeleteErrorMessage": "刪除工作階段時發生錯誤", - "tabSessions": "工作階段", - "tabIdentityProviders": "身分提供者", - "userIdpsLoadErrorMessage": "載入身分提供者時發生錯誤", - "userIdpDeleteSuccessMessage": "身分提供者已成功解除連結", - "userIdpDeleteErrorMessage": "解除身分提供者連結時發生錯誤" + "userListAccessTypeOption1": "Regular user", + "userListAccessTypeOption2": "Administrator", + "userListUserIsMeBadge": "Me", + "userListUserIsAdminBadge": "Admin", + "userListUserIsInactiveBadge": "Inactive", + "userListUserHasUnverifiedEmailBadge": "Unverified email", + "userListUserHasExternalAuthBadge": "External auth", + "modalApproveSignUpTitle": "Approve user sign up", + "modalApproveSignUpBody": "Are you sure you want to approve user ", + "processingApproval": "Processing approval...", + "userApproveSuccessMessage": "User approved successfully.", + "userApproveErrorMessage": "Error approving user", + "modalRejectSignUpTitle": "Reject user sign up", + "modalRejectSignUpBody1": "Are you sure you want to reject user ", + "modalRejectSignUpBody2": "The user will be deleted, this cannot be undone.", + "userEditErrorMessage": "Error editing user", + "modalDeleteUserTitle": "Delete user", + "modalDeleteUserBody": "Are you sure you want to delete user ", + "userListUserSessionsTitle": "User sessions", + "userSessionDeleteSuccessMessage": "Session deleted successfully", + "userSessionDeleteErrorMessage": "Error deleting session", + "tabSessions": "Sessions", + "tabIdentityProviders": "Identity providers", + "userIdpsLoadErrorMessage": "Error loading identity providers", + "userIdpDeleteSuccessMessage": "Identity provider unlinked successfully", + "userIdpDeleteErrorMessage": "Error unlinking identity provider" } diff --git a/frontend/app/src/i18n/tw/generalItems.json b/frontend/app/src/i18n/tw/generalItems.json index 101a83e90..fccc9cbdc 100644 --- a/frontend/app/src/i18n/tw/generalItems.json +++ b/frontend/app/src/i18n/tw/generalItems.json @@ -1,6 +1,7 @@ { "buttonBack": "Back", "buttonClose": "Close", + "buttonSubmit": "Submit", "true": "True", "false": "False", "yes": "Yes", @@ -36,6 +37,7 @@ "unitsKmH": "km/h", "unitsKg": "kg", "labelWeightInKg": "Weight in kg", + "labelWeightTargetInKg": "Weight target in kg", "unitsInches": "inches", "unitsFeet": "feet", "unitsFeetShort": "ft", @@ -45,6 +47,15 @@ "unitsMph": "mph", "unitsLbs": "lbs", "labelWeightInLbs": "Weight in lbs", + "labelWeightTargetInLbs": "Weight target in lbs", + "labelSteps": "Steps", + "labelStepsTarget": "Steps target", + "labelSleep": "Sleep", + "labelSleepTarget": "Sleep target", + "labelDeep": "Deep", + "labelLight": "Light", + "labelREM": "REM", + "labelAwake": "Awake", "unitsCalories": "kcal", "unitsBpm": "bpm", "labelHRinBpm": "Heart rate in bpm", @@ -78,5 +89,13 @@ "genderFemale": "Female", "genderUnspecified": "Unspecified", "labelAverage": "Average", - "labelMaximum": "Maximum" + "labelMaximum": "Maximum", + "unitsBrpm": "brpm", + "unitsCelsius": "°C", + "unitsFahrenheit": "°F", + "RHRLabel": "Resting heart rate", + "labelHours": "Hours", + "labelMinutes": "Minutes", + "labelHoursShort": "h", + "labelMinutesShort": "min" } diff --git a/frontend/app/src/i18n/tw/healthView.json b/frontend/app/src/i18n/tw/healthView.json index 3ef96595c..a8dd95a40 100644 --- a/frontend/app/src/i18n/tw/healthView.json +++ b/frontend/app/src/i18n/tw/healthView.json @@ -1,5 +1,13 @@ { "title": "Health", + "errorFetchingHealthSteps": "Error fetching health steps", "errorFetchingHealthWeight": "Error fetching health data", - "errorFetchingHealthTargets": "Error fetching health targets" + "errorFetchingHealthSleep": "Error fetching health sleep", + "errorFetchingHealthTargets": "Error fetching health targets", + "successUpdatingWeightTarget": "Successfully updated weight target", + "errorUpdatingWeightTarget": "Error updating weight target", + "successUpdatingStepsTarget": "Successfully updated steps target", + "errorUpdatingStepsTarget": "Error updating steps target", + "successUpdatingSleepTarget": "Successfully updated sleep target", + "errorUpdatingSleepTarget": "Error updating sleep target" } diff --git a/frontend/app/src/i18n/tw/loginView.json b/frontend/app/src/i18n/tw/loginView.json index 6f39d8899..655ae0a3c 100644 --- a/frontend/app/src/i18n/tw/loginView.json +++ b/frontend/app/src/i18n/tw/loginView.json @@ -8,6 +8,8 @@ "subtitle": "Sign-in below", "username": "Username", "password": "Password", + "hidePassword": "Hide password", + "showPassword": "Show password", "mfaCode": "MFA Code", "mfaRequired": "Multi-factor authentication required. Please enter your 6-digit code.", "verifyMFAButton": "Verify MFA", @@ -33,5 +35,15 @@ "signUpLink": "Don't have an account? Sign up", "emailVerificationSent": "Please check your email for verification instructions", "adminApprovalRequired": "Your account is pending admin approval", - "verifyEmailInvalidLink": "Invalid email verification link" + "verifyEmailInvalidLink": "Invalid email verification link", + "ssoSection": "Or sign in with", + "ssoButton": "Sign in with {provider}", + "ssoSuccess": "Successfully authenticated via SSO", + "ssoFailed": "SSO authentication failed. Please try again", + "ssoCancelled": "SSO authentication was cancelled", + "ssoAccountNotFound": "No account found. Please contact your administrator", + "ssoAccountDisabled": "Your account has been disabled. Please contact your administrator", + "ssoAutoCreateDisabled": "Account auto-creation is disabled. Please contact your administrator", + "ssoErrorUndefined": "An unexpected error occurred during SSO authentication", + "forceLocalLogin": "Local login flag enabled. Please use your username and password to log in." }