Translations optimizations

This commit is contained in:
João Vitória Silva
2025-02-06 15:16:13 +00:00
parent 09e7d61e86
commit fa186f0699
60 changed files with 364 additions and 410 deletions

View File

@@ -19,6 +19,8 @@ files:
translation: /frontend/app/src/i18n/%two_letters_code%/components/health/%original_file_name%
- source: /frontend/app/src/i18n/us/components/health/healthWeightZone/*.json
translation: /frontend/app/src/i18n/%two_letters_code%/components/health/healthWeightZone/%original_file_name%
- source: /frontend/app/src/i18n/us/components/navbar/*.json
translation: /frontend/app/src/i18n/%two_letters_code%/components/navbar/%original_file_name%
- source: /frontend/app/src/i18n/us/components/settings/*.json
translation: /frontend/app/src/i18n/%two_letters_code%/components/settings/%original_file_name%
- source: /frontend/app/src/i18n/us/components/settings/settingsGeneralZone/*.json

View File

@@ -4,7 +4,7 @@
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="addGearToActivityModal">
{{ $t("activity.modalLabelAddGear") }}
{{ $t("addGearToActivityModalComponent.modalLabelAddGear") }}
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal"
aria-label="Close"></button>
@@ -12,7 +12,7 @@
<form @submit.prevent="submitAddGearToActivityForm">
<div class="modal-body">
<!-- gear type fields -->
<label for="gearIDAdd"><b>* {{ $t("activity.modalLabelSelectGear") }}</b></label>
<label for="gearIDAdd"><b>* {{ $t("addGearToActivityModalComponent.modalLabelSelectGear") }}</b></label>
<select class="form-control" name="gearIDAdd" v-model="gearId" required>
<option v-for="gear in gearsByType" :key="gear.id" :value="gear.id">
{{ gear.nickname }}
@@ -24,7 +24,7 @@
{{ $t("generalItems.buttonClose") }}
</button>
<button type="submit" class="btn btn-success" data-bs-dismiss="modal" name="addGearToActivity">
{{ $t("activity.modalButtonAddGear") }}
{{ $t("addGearToActivityModalComponent.modalButtonAddGear") }}
</button>
</div>
</form>
@@ -72,7 +72,7 @@ export default {
// Emit the gearId to the parent component
emit("gearId", gearId.value);
} catch (error) {
push.error(`${t("generalItems.errorEditingInfo")} - ${error}`);
push.error(`${t("addGearToActivityModalComponent.errorEditingGear")} - ${error}`);
}
}

View File

@@ -16,7 +16,7 @@
<!-- Search -->
<a class="nav-link link-body-emphasis" href="#" role="button" @click="toggleShowSearch" v-if="authStore.isAuthenticated">
<font-awesome-icon :icon="['fas', 'magnifying-glass']" />
<span class="ms-1" v-if="!showSearch">{{ $t("navbar.search") }}</span>
<span class="ms-1" v-if="!showSearch">{{ $t("navbarComponent.search") }}</span>
</a>
<NavbarSearchComponent v-if="showSearch" @collapseNavbar="collapseNavbar" @toggleShowSearch="toggleShowSearch"/>
@@ -27,14 +27,14 @@
<router-link :to="{ name: 'gears' }" class="nav-link link-body-emphasis" v-if="authStore.isAuthenticated" @click="collapseNavbar">
<font-awesome-icon :icon="['fas', 'fa-bicycle']" />
<span class="ms-1">
{{ $t("navbar.gear") }}
{{ $t("navbarComponent.gear") }}
</span>
</router-link>
<!-- if is logged in show health button -->
<router-link :to="{ name: 'health' }" class="nav-link link-body-emphasis" v-if="authStore.isAuthenticated" @click="collapseNavbar">
<font-awesome-icon :icon="['fas', 'fa-heart']" />
<span class="ms-1">
{{ $t("navbar.health") }}
{{ $t("navbarComponent.health") }}
</span>
</router-link>
</div>
@@ -52,7 +52,7 @@
<!-- profile button -->
<router-link :to="{ name: 'user', params: { id: authStore.user.id } }" class="nav-link link-body-emphasis" v-if="authStore.isAuthenticated" @click="collapseNavbar">
<UserAvatarComponent :user="authStore.user" :width=24 :height=24 :alignTop=2 />
<span class="ms-2">{{ $t("navbar.profile") }}</span>
<span class="ms-2">{{ $t("navbarComponent.profile") }}</span>
</router-link>
<!-- pipe -->
@@ -63,18 +63,18 @@
<!-- Settings button -->
<router-link :to="{ name: 'settings' }" class="nav-link link-body-emphasis" v-if="authStore.isAuthenticated" @click="collapseNavbar">
<font-awesome-icon :icon="['fas', 'fa-gear']" />
<span class="ms-1">{{ $t("navbar.settings") }}</span>
<span class="ms-1">{{ $t("navbarComponent.settings") }}</span>
</router-link>
<!-- Login/logout button -->
<a class="nav-link link-body-emphasis" href="#" v-if="authStore.isAuthenticated" @click="handleLogout">
<font-awesome-icon :icon="['fas', 'fa-sign-out-alt']" />
<span class="ms-1">{{ $t("navbar.logout") }}</span>
<span class="ms-1">{{ $t("navbarComponent.logout") }}</span>
</a>
<!-- if is not logged in -->
<router-link :to="{ name: 'login' }" class="nav-link link-body-emphasis" v-if="!authStore.isAuthenticated" @click="collapseNavbar">
<font-awesome-icon :icon="['fas', 'fa-sign-in-alt']" />
<span class="ms-1">{{ $t("navbar.login") }}</span>
<span class="ms-1">{{ $t("navbarComponent.login") }}</span>
</router-link>
</div>
</div>
@@ -117,7 +117,7 @@ export default {
collapseNavbar();
await authStore.logoutUser(router, locale);
} catch (error) {
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("navbarComponent.errorLogout")} - ${error}`);
}
}

View File

@@ -2,14 +2,14 @@
<div>
<form>
<div class="input-group">
<label for="inputSelectTypeToSearch" class="form-label visually-hidden">{{ $t("footer.searchSelectLabel") }}</label>
<label for="inputSelectTypeToSearch" class="form-label visually-hidden">{{ $t("navbarSearchComponent.searchSelectLabel") }}</label>
<select id="inputSelectTypeToSearch" class="form-select" v-model="searchSelectValue">
<option value="1">{{ $t("footer.searchSelectOptionUser") }}</option>
<option value="2">{{ $t("footer.searchSelectOptionActivity") }}</option>
<option value="3">{{ $t("footer.searchSelectOptionGear") }}</option>
<option value="1">{{ $t("navbarSearchComponent.searchSelectOptionUser") }}</option>
<option value="2">{{ $t("navbarSearchComponent.searchSelectOptionActivity") }}</option>
<option value="3">{{ $t("navbarSearchComponent.searchSelectOptionGear") }}</option>
</select>
<div class="ms-1">
<input type="text" class="form-control" id="inputTextFieldToSearch" :placeholder='$t("footer.searchInputPlaceholder")' v-model="inputSearch">
<input type="text" class="form-control" id="inputTextFieldToSearch" :placeholder='$t("navbarSearchComponent.searchInputPlaceholder")' v-model="inputSearch">
<ul v-if="searchResults" class="list-group z-1 position-absolute">
<li v-for="result in searchResults" :key="result.id" class="list-group-item list-group-item-action">
<router-link :to="{ name: 'user', params: { id: result.id }}" class="link-body-emphasis link-underline-opacity-0 link-underline-opacity-100-hover" v-if="searchSelectValue == 1" @click="closeSearch">
@@ -61,7 +61,7 @@ export default {
try {
searchResults.value = await users.getUserContainsUsername(query);
} catch (error) {
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('navbarSearchComponent.errorFetchingUserWithUsernameContains')} - ${error}`)
}
}, 500);
@@ -73,7 +73,7 @@ export default {
try {
searchResults.value = await activities.getActivityByName(query);
} catch (error) {
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('navbarSearchComponent.errorFetchingActivityWithNameContains')} - ${error}`)
}
}, 500);
@@ -85,7 +85,7 @@ export default {
try {
searchResults.value = await gears.getGearContainsNickname(query);
} catch (error) {
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('navbarSearchComponent.errorFetchingGearWithNicknameContains')} - ${error}`)
}
}, 500);

View File

@@ -1,9 +1,6 @@
<template>
<form>
<label for="themeSelect" class="form-label">{{ $t("settingsThemeSwitcher.formLabel") }}</label>
<!-- <select class="form-select" id="themeSelect" aria-label="Select for theme picker">
<option v-for="theme in themes" :key="theme.value" :value="theme.value" :selected="themeStore.theme == theme.value" @click="changeTheme(theme.value)">{{ theme.label }}</option>
</select> -->
<select
class="form-select"
id="themeSelect"

View File

@@ -5,28 +5,28 @@
<form @submit.prevent="submitChangeUserPasswordForm">
<!-- password fields -->
<label for="validationNewPassword"><b>* {{ $t("usersListComponent.modalChangeUserPasswordPasswordLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordValid || !isPasswordMatch }" type="password" id="validationNewPassword" aria-describedby="validationNewPasswordFeedback" :placeholder='$t("usersListComponent.modalChangeUserPasswordPasswordLabel")' v-model="newPassword" required>
<label for="validationNewPassword"><b>* {{ $t("settingsSecurityZone.changeUserPasswordPasswordLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordValid || !isPasswordMatch }" type="password" id="validationNewPassword" aria-describedby="validationNewPasswordFeedback" :placeholder='$t("settingsSecurityZone.changeUserPasswordPasswordLabel")' v-model="newPassword" required>
<div id="validationNewPasswordFeedback" class="invalid-feedback" v-if="!isNewPasswordValid">
{{ $t("usersListComponent.modalChangeUserPasswordFeedbackLabel") }}
{{ $t("settingsSecurityZone.changeUserPasswordFeedbackLabel") }}
</div>
<div id="validationNewPasswordFeedback" class="invalid-feedback" v-if="!isPasswordMatch">
{{ $t("usersListComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
{{ $t("settingsSecurityZone.changeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
</div>
<!-- repeat password fields -->
<label class="mt-1" for="validationNewPasswordRepeat"><b>* {{ $t("usersListComponent.modalChangeUserPasswordPasswordConfirmationLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordRepeatValid || !isPasswordMatch }" type="password" id="validationNewPasswordRepeat" aria-describedby="validationNewPasswordRepeatFeedback" :placeholder='$t("usersListComponent.modalChangeUserPasswordPasswordConfirmationLabel")' v-model="newPasswordRepeat" required>
<!-- repeat password fields -->
<label class="mt-1" for="validationNewPasswordRepeat"><b>* {{ $t("settingsSecurityZone.changeUserPasswordPasswordConfirmationLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordRepeatValid || !isPasswordMatch }" type="password" id="validationNewPasswordRepeat" aria-describedby="validationNewPasswordRepeatFeedback" :placeholder='$t("settingsSecurityZone.changeUserPasswordPasswordConfirmationLabel")' v-model="newPasswordRepeat" required>
<div id="validationNewPasswordRepeatFeedback" class="invalid-feedback" v-if="!isNewPasswordRepeatValid">
{{ $t("usersListComponent.modalChangeUserPasswordFeedbackLabel") }}
{{ $t("settingsSecurityZone.changeUserPasswordFeedbackLabel") }}
</div>
<div id="validationNewPasswordRepeatFeedback" class="invalid-feedback" v-if="!isPasswordMatch">
{{ $t("usersListComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
{{ $t("settingsSecurityZone.changeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
</div>
<p>* {{ $t("generalItems.requiredField") }}</p>
<button type="submit" class="btn btn-success" name="editUserPassword">{{ $t("settingsSecurityZone.subtitleChangePassword") }}</button>
<button type="submit" class="btn btn-success" :disabled="!isNewPasswordValid || !isNewPasswordRepeatValid || !isPasswordMatch" name="editUserPassword">{{ $t("settingsSecurityZone.subtitleChangePassword") }}</button>
</form>
<hr>
@@ -99,13 +99,13 @@ export default {
// Show the success alert.
push.success(
t("usersListComponent.userChangePasswordSuccessMessage"),
t("settingsSecurityZone.userChangePasswordSuccessMessage"),
);
}
} catch (error) {
// If there is an error, show the error alert.
push.error(
`${t("usersListComponent.userChangePasswordErrorMessage")} - ${error}`,
`${t("settingsSecurityZone.userChangePasswordErrorMessage")} - ${error}`,
);
}
}

View File

@@ -10,23 +10,7 @@
<a class="mt-4 w-100 btn btn-danger" href="#" role="button" data-bs-toggle="modal" data-bs-target="#deleteProfilePhotoModal" v-if="authStore.user.photo_path">{{ $t("settingsUserProfileZone.buttonDeleteProfilePhoto") }}</a>
<!-- Modal delete profile photo -->
<div class="modal fade" id="deleteProfilePhotoModal" tabindex="-1" aria-labelledby="deleteProfilePhotoModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="deleteProfilePhotoModal">{{ $t("settingsUserProfileZone.buttonDeleteProfilePhoto") }}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{ $t("settingsUserProfileZone.modalDeleteProfilePhotoBody") }}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ $t("generalItems.buttonClose") }}</button>
<a type="button" class="btn btn-danger" data-bs-dismiss="modal" @click="submitDeleteUserPhoto">{{ $t("settingsUserProfileZone.buttonDeleteProfilePhoto") }}</a>
</div>
</div>
</div>
</div>
<ModalComponent modalId="deleteProfilePhotoModal" :title="t('settingsUserProfileZone.buttonDeleteProfilePhoto')" :body="`${t('settingsUserProfileZone.modalDeleteProfilePhotoBody')}`" actionButtonType="danger" :actionButtonText="t('settingsUserProfileZone.buttonDeleteProfilePhoto')" @submitAction="submitDeleteUserPhoto"/>
<!-- Edit profile section -->
<a class="mt-2 w-100 btn btn-primary" href="#" role="button" data-bs-toggle="modal" data-bs-target="#editProfileModal">{{ $t("settingsUserProfileZone.buttonEditProfile") }}</a>
@@ -38,36 +22,36 @@
<!-- user name -->
<h2>{{ authStore.user.name }}</h2>
<!-- user username -->
<p><b>{{ $t("usersAddEditUserModalComponent.addEditUserModalUsernameLabel") }}: </b>{{ authStore.user.username }}</p>
<p><b>{{ $t("settingsUserProfileZone.usernameLabel") }}: </b>{{ authStore.user.username }}</p>
<!-- user email -->
<p><b>{{ $t("usersAddEditUserModalComponent.addEditUserModalEmailLabel") }}: </b>{{ authStore.user.email }}</p>
<p><b>{{ $t("settingsUserProfileZone.emailLabel") }}: </b>{{ authStore.user.email }}</p>
<!-- user city -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalCityLabel") }}: </b>
<b>{{ $t("settingsUserProfileZone.cityLabel") }}: </b>
<span v-if="authStore.user.city">{{ authStore.user.city }}</span>
<span v-else>{{ $t("generalItems.labelNotApplicable") }}</span>
</p>
<!-- user birthdate -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalBirthdayLabel") }}: </b>
<b>{{ $t("settingsUserProfileZone.birthdayLabel") }}: </b>
<span v-if="authStore.user.birthdate">{{ authStore.user.birthdate }}</span>
<span v-else>{{ $t("generalItems.labelNotApplicable") }}</span>
</p>
<!-- user gender -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalGenderLabel") }}: </b>
<span v-if="authStore.user.gender == 1">{{ $t("usersAddEditUserModalComponent.addEditUserModalGenderOption1") }}</span>
<span v-else>{{ $t("usersAddEditUserModalComponent.addEditUserModalGenderOption2") }}</span>
<b>{{ $t("settingsUserProfileZone.genderLabel") }}: </b>
<span v-if="authStore.user.gender == 1">{{ $t("settingsUserProfileZone.genderOption1") }}</span>
<span v-else>{{ $t("settingsUserProfileZone.genderOption2") }}</span>
</p>
<!-- user units -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalUnitsLabel") }}: </b>
<span v-if="Number(authStore?.user?.units) === 1">{{ $t("usersAddEditUserModalComponent.addEditUserModalUnitsOption1") }}</span>
<span v-else>{{ $t("usersAddEditUserModalComponent.addEditUserModalUnitsOption2") }}</span>
<b>{{ $t("settingsUserProfileZone.unitsLabel") }}: </b>
<span v-if="Number(authStore?.user?.units) === 1">{{ $t("settingsUserProfileZone.unitsOption1") }}</span>
<span v-else>{{ $t("settingsUserProfileZone.unitsOption2") }}</span>
</p>
<!-- user height -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalHeightLabel") }}
<b>{{ $t("settingsUserProfileZone.heightLabel") }}
<span v-if="Number(authStore?.user?.units) === 1">({{ $t("generalItems.unitsCm") }}): </span>
<span v-else>({{ $t("generalItems.unitsFeetInches") }}): </span>
</b>
@@ -79,18 +63,18 @@
</p>
<!-- user preferred language -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalUserPreferredLanguageLabel") }}: </b>
<span v-if="authStore.user.preferred_language == 'us'">{{ $t("usersAddEditUserModalComponent.addEditUserModalPreferredLanguageOption1") }}</span>
<span v-if="authStore.user.preferred_language == 'ca'">{{ $t("usersAddEditUserModalComponent.addEditUserModalPreferredLanguageOption2") }}</span>
<span v-if="authStore.user.preferred_language == 'pt'">{{ $t("usersAddEditUserModalComponent.addEditUserModalPreferredLanguageOption3") }}</span>
<span v-if="authStore.user.preferred_language == 'de'">{{ $t("usersAddEditUserModalComponent.addEditUserModalPreferredLanguageOption4") }}</span>
<span v-if="authStore.user.preferred_language == 'fr'">{{ $t("usersAddEditUserModalComponent.addEditUserModalPreferredLanguageOption5") }}</span>
<b>{{ $t("settingsUserProfileZone.preferredLanguageLabel") }}: </b>
<span v-if="authStore.user.preferred_language == 'us'">{{ $t("settingsUserProfileZone.preferredLanguageOption1") }}</span>
<span v-if="authStore.user.preferred_language == 'ca'">{{ $t("settingsUserProfileZone.preferredLanguageOption2") }}</span>
<span v-if="authStore.user.preferred_language == 'pt'">{{ $t("settingsUserProfileZone.preferredLanguageOption3") }}</span>
<span v-if="authStore.user.preferred_language == 'de'">{{ $t("settingsUserProfileZone.preferredLanguageOption4") }}</span>
<span v-if="authStore.user.preferred_language == 'fr'">{{ $t("settingsUserProfileZone.preferredLanguageOption5") }}</span>
</p>
<!-- user type -->
<p>
<b>{{ $t("usersAddEditUserModalComponent.addEditUserModalUserTypeLabel") }}: </b>
<span v-if="authStore.user.access_type == 1">{{ $t("usersAddEditUserModalComponent.addEditUserModalUserTypeOption1") }}</span>
<span v-else>{{ $t("usersAddEditUserModalComponent.addEditUserModalUserTypeOption2") }}</span>
<b>{{ $t("settingsUserProfileZone.accessTypeLabel") }}: </b>
<span v-if="authStore.user.access_type == 1">{{ $t("settingsUserProfileZone.accessTypeOption1") }}</span>
<span v-else>{{ $t("settingsUserProfileZone.accessTypeOption2") }}</span>
</p>
</div>
</div>
@@ -110,11 +94,13 @@ import { cmToFeetInches } from "@/utils/unitsUtils";
// Importing the components
import UserAvatarComponent from "../Users/UserAvatarComponent.vue";
import UsersAddEditUserModalComponent from "@/components/Settings/SettingsUsersZone/UsersAddEditUserModalComponent.vue";
import ModalComponent from "@/components/Modals/ModalComponent.vue";
export default {
components: {
UserAvatarComponent,
UsersAddEditUserModalComponent,
ModalComponent,
},
setup() {
const authStore = useAuthStore();
@@ -134,11 +120,11 @@ export default {
authStore.setUser(user, authStore.session_id, locale);
// Set the success message and show the success alert.
push.success(t("usersListComponent.userPhotoDeleteSuccessMessage"));
push.success(t("settingsUserProfileZone.userPhotoDeleteSuccess"));
} catch (error) {
// Show the error message
push.error(
`${t("usersListComponent.userPhotoDeleteErrorMessage")} - ${error}`,
`${t("settingsUserProfileZone.userPhotoDeleteError")} - ${error}`,
);
}
}

View File

@@ -103,7 +103,7 @@ export default {
usersArray.value = await users.getUserContainsUsername(searchUsername.value);
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("settingsUsersZone.errorFetchingUsers")} - ${error}`);
}
}, 500);
@@ -127,7 +127,7 @@ export default {
isUsersUpdatingLoading.value = false;
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("settingsUsersZone.errorFetchingUsers")} - ${error}`);
}
}
@@ -143,7 +143,7 @@ export default {
totalPages.value = Math.ceil(usersNumber.value / numRecords);
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("settingsUsersZone.errorFetchingUsers")} - ${error}`);
}
}
@@ -153,7 +153,7 @@ export default {
);
usersNumber.value--;
push.success(t("usersListComponent.userDeleteSuccessMessage"));
push.success(t("settingsUsersZone.successUserDeleted"));
}
function addUserList(createdUser) {

View File

@@ -4,7 +4,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="addUserModal" v-if="action == 'add'">{{ $t("settingsUsersZone.buttonAddUser") }}</h1>
<h1 class="modal-title fs-5" id="addUserModal" v-if="action == 'add'">{{ $t("usersAddEditUserModalComponent.addEditUserModalAddTitle") }}</h1>
<h1 class="modal-title fs-5" :id='editUserModalId' v-else-if="action == 'edit'">{{ $t("usersAddEditUserModalComponent.addEditUserModalEditTitle") }}</h1>
<h1 class="modal-title fs-5" id="editProfileModal" v-else>{{ $t("usersAddEditUserModalComponent.addEditUserModalEditProfileTitle") }}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
@@ -26,7 +26,7 @@
<label for="userUsernameAddEdit"><b>* {{ $t("usersAddEditUserModalComponent.addEditUserModalUsernameLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isUsernameExists }" type="text" name="userUsernameAddEdit" :placeholder='$t("usersAddEditUserModalComponent.addEditUserModalUsernamePlaceholder")' maxlength="250" v-model="newEditUserUsername" required>
<div id="validationUsernameFeedback" class="invalid-feedback" v-if="!isUsernameExists">
{{ $t("generalItems.errorUsernameAlreadyExistsFeedback") }}
{{ $t("usersAddEditUserModalComponent.addEditUserModalErrorUsernameExists") }}
</div>
<!-- name fields -->
<label for="userNameAddEdit"><b>* {{ $t("usersAddEditUserModalComponent.addEditUserModalNameLabel") }}</b></label>
@@ -35,17 +35,17 @@
<label for="userEmailAddEdit"><b>* {{ $t("usersAddEditUserModalComponent.addEditUserModalEmailLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isEmailValid || !isEmailExists }" type="text" name="userEmailAddEdit" :placeholder='$t("usersAddEditUserModalComponent.addEditUserModalEmailPlaceholder")' maxlength="45" v-model="newEditUserEmail" required>
<div id="validationEmailFeedback" class="invalid-feedback" v-if="!isEmailValid">
{{ $t("generalItems.errorEmailNotValidFeedback") }}
{{ $t("usersAddEditUserModalComponent.addEditUserModalErrorEmailInvalid") }}
</div>
<div id="validationEmailFeedback" class="invalid-feedback" v-else-if="!isEmailExists">
{{ $t("generalItems.errorEmailAlreadyExistsFeedback") }}
{{ $t("usersAddEditUserModalComponent.addEditUserModalErrorEmailExists") }}
</div>
<!-- password fields -->
<div v-if="action == 'add'">
<label for="passUserAdd"><b>* {{ $t("usersAddEditUserModalComponent.addEditUserModalPasswordLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isPasswordValid }" type="password" id="validationPassword" aria-describedby="validationPasswordFeedback" name="passUserAdd" :placeholder='$t("usersAddEditUserModalComponent.addEditUserModalPasswordPlaceholder")' v-model="newUserPassword" required>
<div id="validationPasswordFeedback" class="invalid-feedback" v-if="!isPasswordValid">
{{ $t("usersListComponent.modalChangeUserPasswordFeedbackLabel") }}
{{ $t("usersAddEditUserModalComponent.addEditUserModalErrorPasswordInvalid") }}
</div>
</div>
<!-- city fields -->
@@ -203,7 +203,7 @@ export default {
isUsernameExists.value = true;
}
} catch (error) {
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("usersAddEditUserModalComponent.addEditUserModalErrorFetchingUserByUsername")} - ${error}`);
}
} else {
isUsernameExists.value = true;
@@ -238,7 +238,7 @@ export default {
isEmailExists.value = true;
}
} catch (error) {
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("usersAddEditUserModalComponent.addEditUserModalErrorFetchingUserByEmail")} - ${error}`);
}
}
} else {
@@ -287,11 +287,11 @@ export default {
emit("userPhotoDeleted", props.user.id);
// Set the success message and show the success alert.
push.success(t("usersListComponent.userPhotoDeleteSuccessMessage"));
push.success(t("usersAddEditUserModalComponent.addEditUserModalSuccessDeleteUserPhoto"));
} catch (error) {
// Set the error message
push.error(
`${t("usersListComponent.userPhotoDeleteErrorMessage")} - ${error}`,
`${t("usersAddEditUserModalComponent.addEditUserModalErrorDeleteUserPhoto")} - ${error}`,
);
}
}
@@ -327,7 +327,7 @@ export default {
createdUser.photo_path = await users.uploadImage(newEditUserPhotoFile.value, createdUser.id);
} catch (error) {
// Set the error message
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("usersAddEditUserModalComponent.addEditUserModalErrorUploadingUserPhoto")} - ${error}`);
}
}
@@ -338,11 +338,11 @@ export default {
emit("createdUser", createdUser);
// Set the success message and show the success alert.
push.success(t("settingsUsersZone.successUserAdded"));
push.success(t("usersAddEditUserModalComponent.addEditUserModalSuccessAddUser"));
}
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("usersAddEditUserModalComponent.addEditUserModalErrorAddUser")} - ${error}`);
} finally {
// Set the loading variable to false.
emit("isLoadingNewUser", false);
@@ -382,7 +382,7 @@ export default {
}
} catch (error) {
// Set the error message
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("usersAddEditUserModalComponent.addEditUserModalErrorUploadingUserPhoto")} - ${error}`);
}
}
@@ -401,11 +401,11 @@ export default {
}
// Set the success message and show the success alert.
push.success(t("usersListComponent.userEditSuccessMessage"));
push.success(t("usersAddEditUserModalComponent.addEditUserModalSuccessEditUser"));
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(
`${t("usersListComponent.userEditErrorMessage")} - ${error}`,
`${t("usersAddEditUserModalComponent.addEditUserModalErrorEditUser")} - ${error}`,
);
}
}

View File

@@ -4,40 +4,40 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" :id="`editUserPasswordModal${user.id}`">{{ $t("usersListComponent.modalChangeUserPasswordTitle") }}</h1>
<h1 class="modal-title fs-5" :id="`editUserPasswordModal${user.id}`">{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordTitle") }}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form @submit.prevent="submitChangeUserPasswordForm">
<div class="modal-body">
<UsersPasswordRequirementsComponent />
<p>{{ $t("usersListComponent.modalChangeUserPasswordBodyLabel") }}<b>{{ user.username }}</b></p>
<p>{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordBodyLabel") }}<b>{{ user.username }}</b></p>
<!-- password fields -->
<label for="validationNewPassword"><b>* {{ $t("usersListComponent.modalChangeUserPasswordPasswordLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordValid || !isPasswordMatch }" type="password" id="validationNewPassword" aria-describedby="validationNewPasswordFeedback" :placeholder='$t("usersListComponent.modalChangeUserPasswordPasswordLabel")' v-model="newPassword" required>
<label for="validationNewPassword"><b>* {{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordValid || !isPasswordMatch }" type="password" id="validationNewPassword" aria-describedby="validationNewPasswordFeedback" :placeholder='$t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordLabel")' v-model="newPassword" required>
<div id="validationNewPasswordFeedback" class="invalid-feedback" v-if="!isNewPasswordValid">
{{ $t("usersListComponent.modalChangeUserPasswordFeedbackLabel") }}
{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordFeedbackLabel") }}
</div>
<div id="validationNewPasswordFeedback" class="invalid-feedback" v-if="!isPasswordMatch">
{{ $t("usersListComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
</div>
<!-- repeat password fields -->
<label class="mt-1" for="validationNewPasswordRepeat"><b>* {{ $t("usersListComponent.modalChangeUserPasswordPasswordConfirmationLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordRepeatValid || !isPasswordMatch }" type="password" id="validationNewPasswordRepeat" aria-describedby="validationNewPasswordRepeatFeedback" :placeholder='$t("usersListComponent.modalChangeUserPasswordPasswordConfirmationLabel")' v-model="newPasswordRepeat" required>
<label class="mt-1" for="validationNewPasswordRepeat"><b>* {{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordConfirmationLabel") }}</b></label>
<input class="form-control" :class="{ 'is-invalid': !isNewPasswordRepeatValid || !isPasswordMatch }" type="password" id="validationNewPasswordRepeat" aria-describedby="validationNewPasswordRepeatFeedback" :placeholder='$t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordConfirmationLabel")' v-model="newPasswordRepeat" required>
<div id="validationNewPasswordRepeatFeedback" class="invalid-feedback" v-if="!isNewPasswordRepeatValid">
{{ $t("usersListComponent.modalChangeUserPasswordFeedbackLabel") }}
{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordFeedbackLabel") }}
</div>
<div id="validationNewPasswordRepeatFeedback" class="invalid-feedback" v-if="!isPasswordMatch">
{{ $t("usersListComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel") }}
</div>
<p>* {{ $t("generalItems.requiredField") }}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ $t("generalItems.buttonClose") }}</button>
<button type="submit" class="btn btn-success" :disabled="!isNewPasswordValid || !isNewPasswordRepeatValid || !isPasswordMatch" name="editUserPasswordAdmin" data-bs-dismiss="modal">{{ $t("usersListComponent.modalChangeUserPasswordTitle") }}</button>
<button type="submit" class="btn btn-success" :disabled="!isNewPasswordValid || !isNewPasswordRepeatValid || !isPasswordMatch" name="editUserPasswordAdmin" data-bs-dismiss="modal">{{ $t("usersChangeUserPasswordModalComponent.modalChangeUserPasswordTitle") }}</button>
</div>
</form>
</div>
@@ -94,13 +94,13 @@ export default {
await users.editUserPassword(props.user.id, data);
// Set the success message and show the success alert.
push.success(
t("usersListComponent.userChangePasswordSuccessMessage"),
t("usersChangeUserPasswordModalComponent.userChangePasswordSuccessMessage"),
);
}
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(
`${t("usersListComponent.userChangePasswordErrorMessage")} - ${error}`,
`${t("usersChangeUserPasswordModalComponent.userChangePasswordErrorMessage")} - ${error}`,
);
}
}

View File

@@ -151,12 +151,12 @@ export default {
// Show the success alert.
push.success(
t("settingsSecurityZone.successDeleteSession"),
t("usersListComponent.userSessionDeleteSuccessMessage"),
);
} catch (error) {
// If there is an error, show the error alert.
push.error(
`${t("settingsSecurityZone.errorDeleteSession")} - ${error}`,
`${t("usersListComponent.userSessionDeleteErrorMessage")} - ${error}`,
);
}
}

View File

@@ -3,15 +3,15 @@
<div class="alert alert-info alert-dismissible d-flex align-items-center" role="alert">
<!--<i class="fa-solid fa-circle-info me-1 allign-top"></i>-->
<div>
{{ $t("usersListComponent.modalChangeUserPasswordPasswordRequirementsTitle") }}
{{ $t("usersPasswordRequirementsComponent.passwordRequirementsTitle") }}
<br>
{{ $t("usersListComponent.modalChangeUserPasswordCharacters") }}
{{ $t("usersPasswordRequirementsComponent.passwordCharacters") }}
<br>
{{ $t("usersListComponent.modalChangeUserPasswordCapitalLetters") }}
{{ $t("usersPasswordRequirementsComponent.passwordCapitalLetters") }}
<br>
{{ $t("usersListComponent.modalChangeUserPasswordNumbers") }}
{{ $t("usersPasswordRequirementsComponent.passwordNumbers") }}
<br>
{{ $t("usersListComponent.modalChangeUserPasswordSpecialCharacters") }}
{{ $t("usersPasswordRequirementsComponent.passwordSpecialCharacters") }}
</div>
</div>
</template>

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -1,36 +1,3 @@
{
"addEditUserModalEditTitle": "Edit user",
"addEditUserModalDeleteUserPhotoButton": "Delete photo",
"addEditUserModalUserPhotoLabel": "User photo",
"addEditUserModalUsernameLabel": "Username",
"addEditUserModalUsernamePlaceholder": "Username (max 45 characters)",
"addEditUserModalNameLabel": "Name",
"addEditUserModalNamePlaceholder": "Name (max 45 characters)",
"addEditUserModalEmailLabel": "Email",
"addEditUserModalEmailPlaceholder": "Email (max 45 characters)",
"addEditUserModalPasswordLabel": "Password",
"addEditUserModalPasswordPlaceholder": "Password",
"addEditUserModalTownLabel": "Town/city",
"addEditUserModalTownPlaceholder": "Town/city (max 45 characters)",
"addEditUserModalBirthdayLabel": "Birthday",
"addEditUserModalHeightLabel": "Height",
"addEditUserModalHeightPlaceholder": "Height",
"addEditUserModalGenderLabel": "Gender",
"addEditUserModalGenderOption1": "Male",
"addEditUserModalGenderOption2": "Female",
"addEditUserModalUnitsLabel": "Units",
"addEditUserModalUnitsOption1": "Metric",
"addEditUserModalUnitsOption2": "Imperial",
"addEditUserModalUserPreferredLanguageLabel": "Preferred language",
"addEditUserModalPreferredLanguageOption1": "English (US)",
"addEditUserModalPreferredLanguageOption2": "Catalan",
"addEditUserModalPreferredLanguageOption3": "Portuguese (PT)",
"addEditUserModalPreferredLanguageOption4": "German (DE)",
"addEditUserModalPreferredLanguageOption5": "French (FR)",
"addEditUserModalUserTypeLabel": "Access type",
"addEditUserModalUserTypeOption1": "Regular user",
"addEditUserModalUserTypeOption2": "Administrator",
"addEditUserModalIsActiveLabel": "Is active",
"addEditUserModalIsActiveOption1": "Yes",
"addEditUserModalIsActiveOption2": "No"
}

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -1,36 +1,3 @@
{
"addEditUserModalEditTitle": "Edit user",
"addEditUserModalDeleteUserPhotoButton": "Delete photo",
"addEditUserModalUserPhotoLabel": "User photo",
"addEditUserModalUsernameLabel": "Username",
"addEditUserModalUsernamePlaceholder": "Username (max 45 characters)",
"addEditUserModalNameLabel": "Name",
"addEditUserModalNamePlaceholder": "Name (max 45 characters)",
"addEditUserModalEmailLabel": "Email",
"addEditUserModalEmailPlaceholder": "Email (max 45 characters)",
"addEditUserModalPasswordLabel": "Password",
"addEditUserModalPasswordPlaceholder": "Password",
"addEditUserModalTownLabel": "Town/city",
"addEditUserModalTownPlaceholder": "Town/city (max 45 characters)",
"addEditUserModalBirthdayLabel": "Birthday",
"addEditUserModalHeightLabel": "Height",
"addEditUserModalHeightPlaceholder": "Height",
"addEditUserModalGenderLabel": "Gender",
"addEditUserModalGenderOption1": "Male",
"addEditUserModalGenderOption2": "Female",
"addEditUserModalUnitsLabel": "Units",
"addEditUserModalUnitsOption1": "Metric",
"addEditUserModalUnitsOption2": "Imperial",
"addEditUserModalUserPreferredLanguageLabel": "Preferred language",
"addEditUserModalPreferredLanguageOption1": "English (US)",
"addEditUserModalPreferredLanguageOption2": "Catalan",
"addEditUserModalPreferredLanguageOption3": "Portuguese (PT)",
"addEditUserModalPreferredLanguageOption4": "German (DE)",
"addEditUserModalPreferredLanguageOption5": "French (FR)",
"addEditUserModalUserTypeLabel": "Access type",
"addEditUserModalUserTypeOption1": "Regular user",
"addEditUserModalUserTypeOption2": "Administrator",
"addEditUserModalIsActiveLabel": "Is active",
"addEditUserModalIsActiveOption1": "Yes",
"addEditUserModalIsActiveOption2": "No"
}

View File

@@ -31,6 +31,5 @@
"userDeleteSuccessMessage": "Benutzer wurde erfolgreich gelöscht",
"userDeleteErrorMessage": "Fehler beim Löschen des Benutzers",
"userPhotoDeleteSuccessMessage": "Foto erfolgreich gelöscht",
"userPhotoDeleteErrorMessage": "Fehler beim Löschen des Fotos",
"userListUserSessionsTitle": "User sessions"
"userPhotoDeleteErrorMessage": "Fehler beim Löschen des Fotos"
}

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -1,36 +1,3 @@
{
"addEditUserModalEditTitle": "Edit user",
"addEditUserModalDeleteUserPhotoButton": "Delete photo",
"addEditUserModalUserPhotoLabel": "User photo",
"addEditUserModalUsernameLabel": "Username",
"addEditUserModalUsernamePlaceholder": "Username (max 45 characters)",
"addEditUserModalNameLabel": "Name",
"addEditUserModalNamePlaceholder": "Name (max 45 characters)",
"addEditUserModalEmailLabel": "Email",
"addEditUserModalEmailPlaceholder": "Email (max 45 characters)",
"addEditUserModalPasswordLabel": "Password",
"addEditUserModalPasswordPlaceholder": "Password",
"addEditUserModalTownLabel": "Town/city",
"addEditUserModalTownPlaceholder": "Town/city (max 45 characters)",
"addEditUserModalBirthdayLabel": "Birthday",
"addEditUserModalHeightLabel": "Height",
"addEditUserModalHeightPlaceholder": "Height",
"addEditUserModalGenderLabel": "Gender",
"addEditUserModalGenderOption1": "Male",
"addEditUserModalGenderOption2": "Female",
"addEditUserModalUnitsLabel": "Units",
"addEditUserModalUnitsOption1": "Metric",
"addEditUserModalUnitsOption2": "Imperial",
"addEditUserModalUserPreferredLanguageLabel": "Preferred language",
"addEditUserModalPreferredLanguageOption1": "English (US)",
"addEditUserModalPreferredLanguageOption2": "Catalan",
"addEditUserModalPreferredLanguageOption3": "Portuguese (PT)",
"addEditUserModalPreferredLanguageOption4": "German (DE)",
"addEditUserModalPreferredLanguageOption5": "French (FR)",
"addEditUserModalUserTypeLabel": "Access type",
"addEditUserModalUserTypeOption1": "Regular user",
"addEditUserModalUserTypeOption2": "Administrator",
"addEditUserModalIsActiveLabel": "Is active",
"addEditUserModalIsActiveOption1": "Yes",
"addEditUserModalIsActiveOption2": "No"
}

View File

@@ -2,13 +2,13 @@ import { createI18n } from 'vue-i18n';
// Importing translations
// Catalan translations
// Navbar and footer components
import caNavbarComponent from './ca/components/navbarComponent.json';
// Footer components
import caFooterComponent from './ca/components/footerComponent.json';
// Activities component
import caAddGearToActivityModalComponent from './ca/components/activities/modals/addGearToActivityModalComponent.json';
import caEditActivityModalComponent from './ca/components/activities/modals/editActivityModalComponent.json';
import caUserDistanceStatsComponent from './ca/components/activities/userDistanceStatsComponent.json';
import caActivitySummaryComponent from './ca/components/activities/activitySummaryComponent.json';
import caEditActivityModalComponent from './ca/components/activities/modals/editActivityModalComponent.json';
// Followers component
import caFollowersListComponent from './ca/components/followers/followersListComponent.json';
// Gears component
@@ -20,6 +20,9 @@ import caHealthWeightListComponent from './ca/components/health/healthWeightZone
import caHealthDashboardZoneComponent from './ca/components/health/healthDashboardZoneComponent.json'
import caHealthSideBarComponent from './ca/components/health/healthSideBarComponent.json';
import caHealthWeightZoneComponent from './ca/components/health/healthWeightZoneComponent.json'
// Navbar components
import caNavbarComponent from './ca/components/navbar/navbarComponent.json';
import caNavbarSearchComponent from './ca/components/navbar/navbarSearchComponent.json';
// Settings components
import caSettingsSideBarComponent from './ca/components/settings/settingsSideBarComponent.json';
import caSettingsUsersZoneComponent from './ca/components/settings/settingsUsersZoneComponent.json';
@@ -30,7 +33,9 @@ import caSettingsSecurityZoneComponent from './ca/components/settings/settingsSe
import caSettingsIntegrationsZoneComponent from './ca/components/settings/settingsIntegrationsZoneComponent.json';
import caGarminConnectLoginModalComponent from './ca/components/settings/settingsIntegrationsZone/garminConnectLoginModalComponent.json';
import caUsersAddEditUserModalComponent from './ca/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json';
import caUsersChangeUserPasswordModalComponent from './ca/components/settings/settingsUsersZone/usersChangeUserPasswordModalComponent.json';
import caUsersListComponent from './ca/components/settings/settingsUsersZone/usersListComponent.json';
import caUsersPasswordRequirementsComponent from './ca/components/settings/settingsUsersZone/usersPasswordRequirementsComponent.json';
import caUserSessionsListComponent from './ca/components/settings/settingsUserSessionsZone/userSessionsListComponent.json';
// General components
import caNoItemsFoundComponent from './ca/components/noItemsFoundComponent.json';
@@ -49,13 +54,13 @@ import caUserView from './ca/userView.json';
import caSettingsView from './ca/settingsView.json';
// German translations
// Navbar and footer components
import deNavbarComponent from './de/components/navbarComponent.json';
// Footer components
import deFooterComponent from './de/components/footerComponent.json';
// Activities component
import deAddGearToActivityModalComponent from './de/components/activities/modals/addGearToActivityModalComponent.json';
import deEditActivityModalComponent from './de/components/activities/modals/editActivityModalComponent.json';
import deUserDistanceStatsComponent from './de/components/activities/userDistanceStatsComponent.json';
import deActivitySummaryComponent from './de/components/activities/activitySummaryComponent.json';
import deEditActivityModalComponent from './de/components/activities/modals/editActivityModalComponent.json';
// Followers component
import deFollowersListComponent from './de/components/followers/followersListComponent.json';
// Gears component
@@ -67,6 +72,9 @@ import deHealthWeightListComponent from './de/components/health/healthWeightZone
import deHealthDashboardZoneComponent from './de/components/health/healthDashboardZoneComponent.json'
import deHealthSideBarComponent from './de/components/health/healthSideBarComponent.json';
import deHealthWeightZoneComponent from './de/components/health/healthWeightZoneComponent.json'
// Navbar components
import deNavbarComponent from './de/components/navbar/navbarComponent.json';
import deNavbarSearchComponent from './de/components/navbar/navbarSearchComponent.json';
// Settings components
import deSettingsSideBarComponent from './de/components/settings/settingsSideBarComponent.json';
import deSettingsUsersZoneComponent from './de/components/settings/settingsUsersZoneComponent.json';
@@ -77,7 +85,9 @@ import deSettingsSecurityZoneComponent from './de/components/settings/settingsSe
import deSettingsIntegrationsZoneComponent from './de/components/settings/settingsIntegrationsZoneComponent.json';
import deGarminConnectLoginModalComponent from './de/components/settings/settingsIntegrationsZone/garminConnectLoginModalComponent.json';
import deUsersAddEditUserModalComponent from './de/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json';
import deUsersChangeUserPasswordModalComponent from './de/components/settings/settingsUsersZone/usersChangeUserPasswordModalComponent.json';
import deUsersListComponent from './de/components/settings/settingsUsersZone/usersListComponent.json';
import deUsersPasswordRequirementsComponent from './de/components/settings/settingsUsersZone/usersPasswordRequirementsComponent.json';
import deUserSessionsListComponent from './de/components/settings/settingsUserSessionsZone/userSessionsListComponent.json';
// General components
import deNoItemsFoundComponent from './de/components/noItemsFoundComponent.json';
@@ -97,13 +107,13 @@ import deSettingsView from './de/settingsView.json';
// French translations
// Navbar and footer components
import frNavbarComponent from './fr/components/navbarComponent.json';
// Footer components
import frFooterComponent from './fr/components/footerComponent.json';
// Activities component
import frAddGearToActivityModalComponent from './fr/components/activities/modals/addGearToActivityModalComponent.json';
import frEditActivityModalComponent from './fr/components/activities/modals/editActivityModalComponent.json';
import frUserDistanceStatsComponent from './fr/components/activities/userDistanceStatsComponent.json';
import frActivitySummaryComponent from './fr/components/activities/activitySummaryComponent.json';
import frEditActivityModalComponent from './fr/components/activities/modals/editActivityModalComponent.json';
// Followers component
import frFollowersListComponent from './fr/components/followers/followersListComponent.json';
// Gears component
@@ -115,6 +125,9 @@ import frHealthWeightListComponent from './fr/components/health/healthWeightZone
import frHealthDashboardZoneComponent from './fr/components/health/healthDashboardZoneComponent.json'
import frHealthSideBarComponent from './fr/components/health/healthSideBarComponent.json';
import frHealthWeightZoneComponent from './fr/components/health/healthWeightZoneComponent.json'
// Navbar components
import frNavbarComponent from './fr/components/navbar/navbarComponent.json';
import frNavbarSearchComponent from './fr/components/navbar/navbarSearchComponent.json';
// Settings components
import frSettingsSideBarComponent from './fr/components/settings/settingsSideBarComponent.json';
import frSettingsUsersZoneComponent from './fr/components/settings/settingsUsersZoneComponent.json';
@@ -125,7 +138,9 @@ import frSettingsSecurityZoneComponent from './fr/components/settings/settingsSe
import frSettingsIntegrationsZoneComponent from './fr/components/settings/settingsIntegrationsZoneComponent.json';
import frGarminConnectLoginModalComponent from './fr/components/settings/settingsIntegrationsZone/garminConnectLoginModalComponent.json';
import frUsersAddEditUserModalComponent from './fr/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json';
import frUsersChangeUserPasswordModalComponent from './fr/components/settings/settingsUsersZone/usersChangeUserPasswordModalComponent.json';
import frUsersListComponent from './fr/components/settings/settingsUsersZone/usersListComponent.json';
import frUsersPasswordRequirementsComponent from './fr/components/settings/settingsUsersZone/usersPasswordRequirementsComponent.json';
import frUserSessionsListComponent from './fr/components/settings/settingsUserSessionsZone/userSessionsListComponent.json';
// General components
import frNoItemsFoundComponent from './fr/components/noItemsFoundComponent.json';
@@ -145,13 +160,13 @@ import frSettingsView from './fr/settingsView.json';
// Portuguese Portugal translations
// Navbar and footer components
import ptNavbarComponent from './pt/components/navbarComponent.json';
// Footer components
import ptFooterComponent from './pt/components/footerComponent.json';
// Activities component
import ptAddGearToActivityModalComponent from './pt/components/activities/modals/addGearToActivityModalComponent.json';
import ptEditActivityModalComponent from './pt/components/activities/modals/editActivityModalComponent.json';
import ptUserDistanceStatsComponent from './pt/components/activities/userDistanceStatsComponent.json';
import ptActivitySummaryComponent from './pt/components/activities/activitySummaryComponent.json';
import ptEditActivityModalComponent from './pt/components/activities/modals/editActivityModalComponent.json';
// Followers component
import ptFollowersListComponent from './pt/components/followers/followersListComponent.json';
// Gears component
@@ -163,6 +178,9 @@ import ptHealthWeightListComponent from './pt/components/health/healthWeightZone
import ptHealthDashboardZoneComponent from './pt/components/health/healthDashboardZoneComponent.json'
import ptHealthSideBarComponent from './pt/components/health/healthSideBarComponent.json';
import ptHealthWeightZoneComponent from './pt/components/health/healthWeightZoneComponent.json'
// Navbar components
import ptNavbarComponent from './pt/components/navbar/navbarComponent.json';
import ptNavbarSearchComponent from './pt/components/navbar/navbarSearchComponent.json';
// Settings components
import ptSettingsSideBarComponent from './pt/components/settings/settingsSideBarComponent.json';
import ptSettingsUsersZoneComponent from './pt/components/settings/settingsUsersZoneComponent.json';
@@ -173,7 +191,9 @@ import ptSettingsSecurityZoneComponent from './pt/components/settings/settingsSe
import ptSettingsIntegrationsZoneComponent from './pt/components/settings/settingsIntegrationsZoneComponent.json';
import ptGarminConnectLoginModalComponent from './pt/components/settings/settingsIntegrationsZone/garminConnectLoginModalComponent.json';
import ptUsersAddEditUserModalComponent from './pt/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json';
import ptUsersChangeUserPasswordModalComponent from './pt/components/settings/settingsUsersZone/usersChangeUserPasswordModalComponent.json';
import ptUsersListComponent from './pt/components/settings/settingsUsersZone/usersListComponent.json';
import ptUsersPasswordRequirementsComponent from './pt/components/settings/settingsUsersZone/usersPasswordRequirementsComponent.json';
import ptUserSessionsListComponent from './pt/components/settings/settingsUserSessionsZone/userSessionsListComponent.json';
// General components
import ptNoItemsFoundComponent from './pt/components/noItemsFoundComponent.json';
@@ -192,13 +212,13 @@ import ptUserView from './pt/userView.json';
import ptSettingsView from './pt/settingsView.json';
// US translations
// Navbar and footer components
import usNavbarComponent from './us/components/navbarComponent.json';
// Footer components
import usFooterComponent from './us/components/footerComponent.json';
// Activities component
import usAddGearToActivityModalComponent from './us/components/activities/modals/addGearToActivityModalComponent.json';
import usEditActivityModalComponent from './us/components/activities/modals/editActivityModalComponent.json';
import usUserDistanceStatsComponent from './us/components/activities/userDistanceStatsComponent.json';
import usActivitySummaryComponent from './us/components/activities/activitySummaryComponent.json';
import usEditActivityModalComponent from './us/components/activities/modals/editActivityModalComponent.json';
// Followers component
import usFollowersListComponent from './us/components/followers/followersListComponent.json';
// Gears component
@@ -210,6 +230,9 @@ import usHealthWeightListComponent from './us/components/health/healthWeightZone
import usHealthDashboardZoneComponent from './us/components/health/healthDashboardZoneComponent.json'
import usHealthSideBarComponent from './us/components/health/healthSideBarComponent.json';
import usHealthWeightZoneComponent from './us/components/health/healthWeightZoneComponent.json'
// Navbar components
import usNavbarComponent from './us/components/navbar/navbarComponent.json';
import usNavbarSearchComponent from './us/components/navbar/navbarSearchComponent.json';
// Settings components
import usSettingsSideBarComponent from './us/components/settings/settingsSideBarComponent.json';
import usSettingsUsersZoneComponent from './us/components/settings/settingsUsersZoneComponent.json';
@@ -220,7 +243,9 @@ import usSettingsSecurityZoneComponent from './us/components/settings/settingsSe
import usSettingsIntegrationsZoneComponent from './us/components/settings/settingsIntegrationsZoneComponent.json';
import usGarminConnectLoginModalComponent from './us/components/settings/settingsIntegrationsZone/garminConnectLoginModalComponent.json';
import usUsersAddEditUserModalComponent from './us/components/settings/settingsUsersZone/usersAddEditUserModalComponent.json';
import usUsersChangeUserPasswordModalComponent from './us/components/settings/settingsUsersZone/usersChangeUserPasswordModalComponent.json';
import usUsersListComponent from './us/components/settings/settingsUsersZone/usersListComponent.json';
import usUsersPasswordRequirementsComponent from './us/components/settings/settingsUsersZone/usersPasswordRequirementsComponent.json';
import usUserSessionsListComponent from './us/components/settings/settingsUserSessionsZone/userSessionsListComponent.json';
// General components
import usNoItemsFoundComponent from './us/components/noItemsFoundComponent.json';
@@ -242,13 +267,13 @@ import GearsListComponent from '@/components/Gears/GearsListComponent.vue';
// Constructing the messages structure
const messages = {
ca: {
// Navbar and footer components
navbar: caNavbarComponent,
// Footer components
footer: caFooterComponent,
// Activities component
addGearToActivityModalComponent: caAddGearToActivityModalComponent,
editActivityModalComponent: caEditActivityModalComponent,
userDistanceStats: caUserDistanceStatsComponent,
activitySummary: caActivitySummaryComponent,
editActivityModalComponent: caEditActivityModalComponent,
// Followers component
followersListComponent: caFollowersListComponent,
// Gears component
@@ -260,6 +285,9 @@ const messages = {
healthDashboardZoneComponent: caHealthDashboardZoneComponent,
healthWeightZoneComponent: caHealthWeightZoneComponent,
healthWeightListComponent: caHealthWeightListComponent,
// Navbar components
navbarComponent: caNavbarComponent,
navbarSearchComponent: caNavbarSearchComponent,
// Settings components
settingsSideBar: caSettingsSideBarComponent,
settingsUsersZone: caSettingsUsersZoneComponent,
@@ -270,7 +298,9 @@ const messages = {
settingsIntegrationsZone: caSettingsIntegrationsZoneComponent,
garminConnectLoginModalComponent: caGarminConnectLoginModalComponent,
usersAddEditUserModalComponent: caUsersAddEditUserModalComponent,
usersChangeUserPasswordModalComponent: caUsersChangeUserPasswordModalComponent,
usersListComponent: caUsersListComponent,
usersPasswordRequirementsComponent: caUsersPasswordRequirementsComponent,
userSessionsListComponent: caUserSessionsListComponent,
// General components
noItemsFoundComponent: caNoItemsFoundComponent,
@@ -282,20 +312,20 @@ const messages = {
gearsView: caGearsView,
gearView: caGearView,
stravaCallbackView: caStravaCallbackView,
activity: caActivityView,
activityView: caActivityView,
healthView: caHealthView,
notFound: caNotFoundView,
settingsView: caSettingsView,
userView: caUserView,
},
de: {
// Navbar and footer components
navbar: deNavbarComponent,
// Footer components
footer: deFooterComponent,
// Activities component
addGearToActivityModalComponent: deAddGearToActivityModalComponent,
editActivityModalComponent: deEditActivityModalComponent,
userDistanceStats: deUserDistanceStatsComponent,
activitySummary: deActivitySummaryComponent,
editActivityModalComponent: deEditActivityModalComponent,
// Followers component
followersListComponent: deFollowersListComponent,
// Gears component
@@ -307,6 +337,9 @@ const messages = {
healthDashboardZoneComponent: deHealthDashboardZoneComponent,
healthWeightZoneComponent: deHealthWeightZoneComponent,
healthWeightListComponent: deHealthWeightListComponent,
// Navbar components
navbarComponent: deNavbarComponent,
navbarSearchComponent: deNavbarSearchComponent,
// Settings components
settingsSideBar: deSettingsSideBarComponent,
settingsUsersZone: deSettingsUsersZoneComponent,
@@ -317,7 +350,9 @@ const messages = {
settingsIntegrationsZone: deSettingsIntegrationsZoneComponent,
garminConnectLoginModalComponent: deGarminConnectLoginModalComponent,
usersAddEditUserModalComponent: deUsersAddEditUserModalComponent,
usersChangeUserPasswordModalComponent: deUsersChangeUserPasswordModalComponent,
usersListComponent: deUsersListComponent,
usersPasswordRequirementsComponent: deUsersPasswordRequirementsComponent,
userSessionsListComponent: deUserSessionsListComponent,
// General components
noItemsFoundComponent: deNoItemsFoundComponent,
@@ -329,20 +364,20 @@ const messages = {
gearsView: deGearsView,
gearView: deGearView,
stravaCallbackView: deStravaCallbackView,
activity: deActivityView,
activityView: deActivityView,
healthView: deHealthView,
notFound: deNotFoundView,
settingsView: deSettingsView,
userView: deUserView,
},
fr: {
// Navbar and footer components
navbar: frNavbarComponent,
// Footer components
footer: frFooterComponent,
// Activities component
addGearToActivityModalComponent: frAddGearToActivityModalComponent,
editActivityModalComponent: frEditActivityModalComponent,
userDistanceStats: frUserDistanceStatsComponent,
activitySummary: frActivitySummaryComponent,
editActivityModalComponent: frEditActivityModalComponent,
// Followers component
followersListComponent: frFollowersListComponent,
// Gears component
@@ -354,6 +389,9 @@ const messages = {
healthDashboardZoneComponent: frHealthDashboardZoneComponent,
healthWeightZoneComponent: frHealthWeightZoneComponent,
healthWeightListComponent: frHealthWeightListComponent,
// Navbar components
navbarComponent: frNavbarComponent,
navbarSearchComponent: frNavbarSearchComponent,
// Settings components
settingsSideBar: frSettingsSideBarComponent,
settingsUsersZone: frSettingsUsersZoneComponent,
@@ -364,7 +402,9 @@ const messages = {
settingsIntegrationsZone: frSettingsIntegrationsZoneComponent,
garminConnectLoginModalComponent: frGarminConnectLoginModalComponent,
usersAddEditUserModalComponent: frUsersAddEditUserModalComponent,
usersChangeUserPasswordModalComponent: frUsersChangeUserPasswordModalComponent,
usersListComponent: frUsersListComponent,
usersPasswordRequirementsComponent: frUsersPasswordRequirementsComponent,
userSessionsListComponent: frUserSessionsListComponent,
// General components
noItemsFoundComponent: frNoItemsFoundComponent,
@@ -376,20 +416,20 @@ const messages = {
gearsView: frGearsView,
gearView: frGearView,
stravaCallbackView: frStravaCallbackView,
activity: frActivityView,
activityView: frActivityView,
healthView: frHealthView,
notFound: frNotFoundView,
settingsView: frSettingsView,
userView: frUserView,
},
pt: {
// Navbar and footer components
navbar: ptNavbarComponent,
// Footer components
footer: ptFooterComponent,
// Activities component
addGearToActivityModalComponent: ptAddGearToActivityModalComponent,
editActivityModalComponent: ptEditActivityModalComponent,
userDistanceStats: ptUserDistanceStatsComponent,
activitySummary: ptActivitySummaryComponent,
editActivityModalComponent: ptEditActivityModalComponent,
// Followers component
followersListComponent: ptFollowersListComponent,
// Gears component
@@ -401,6 +441,9 @@ const messages = {
healthDashboardZoneComponent: ptHealthDashboardZoneComponent,
healthWeightZoneComponent: ptHealthWeightZoneComponent,
healthWeightListComponent: ptHealthWeightListComponent,
// Navbar components
navbarComponent: ptNavbarComponent,
navbarSearchComponent: ptNavbarSearchComponent,
// Settings components
settingsSideBar: ptSettingsSideBarComponent,
settingsUsersZone: ptSettingsUsersZoneComponent,
@@ -411,7 +454,9 @@ const messages = {
settingsIntegrationsZone: ptSettingsIntegrationsZoneComponent,
garminConnectLoginModalComponent: ptGarminConnectLoginModalComponent,
usersAddEditUserModalComponent: ptUsersAddEditUserModalComponent,
usersChangeUserPasswordModalComponent: ptUsersChangeUserPasswordModalComponent,
usersListComponent: ptUsersListComponent,
usersPasswordRequirementsComponent: ptUsersPasswordRequirementsComponent,
userSessionsListComponent: ptUserSessionsListComponent,
// General components
noItemsFoundComponent: ptNoItemsFoundComponent,
@@ -423,20 +468,20 @@ const messages = {
gearsView: ptGearsView,
gearView: ptGearView,
stravaCallbackView: ptStravaCallbackView,
activity: ptActivityView,
activityView: ptActivityView,
healthView: ptHealthView,
notFound: ptNotFoundView,
settingsView: ptSettingsView,
userView: ptUserView,
},
us: {
// Navbar and footer components
navbar: usNavbarComponent,
// Footer components
footer: usFooterComponent,
// Activities component
addGearToActivityModalComponent: usAddGearToActivityModalComponent,
editActivityModalComponent: usEditActivityModalComponent,
userDistanceStats: usUserDistanceStatsComponent,
activitySummary: usActivitySummaryComponent,
editActivityModalComponent: usEditActivityModalComponent,
// Followers component
followersListComponent: usFollowersListComponent,
// Gears component
@@ -448,6 +493,9 @@ const messages = {
healthDashboardZoneComponent: usHealthDashboardZoneComponent,
healthWeightZoneComponent: usHealthWeightZoneComponent,
healthWeightListComponent: usHealthWeightListComponent,
// Navbar components
navbarComponent: usNavbarComponent,
navbarSearchComponent: usNavbarSearchComponent,
// Settings components
settingsSideBar: usSettingsSideBarComponent,
settingsUsersZone: usSettingsUsersZoneComponent,
@@ -458,7 +506,9 @@ const messages = {
settingsIntegrationsZone: usSettingsIntegrationsZoneComponent,
garminConnectLoginModalComponent: usGarminConnectLoginModalComponent,
usersAddEditUserModalComponent: usUsersAddEditUserModalComponent,
usersChangeUserPasswordModalComponent: usUsersChangeUserPasswordModalComponent,
usersListComponent: usUsersListComponent,
usersPasswordRequirementsComponent: usUsersPasswordRequirementsComponent,
userSessionsListComponent: usUserSessionsListComponent,
// General components
noItemsFoundComponent: usNoItemsFoundComponent,
@@ -470,7 +520,7 @@ const messages = {
gearsView: usGearsView,
gearView: usGearView,
stravaCallbackView: usStravaCallbackView,
activity: usActivityView,
activityView: usActivityView,
healthView: usHealthView,
notFound: usNotFoundView,
settingsView: usSettingsView,

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -1,36 +1,3 @@
{
"addEditUserModalEditTitle": "Edit user",
"addEditUserModalDeleteUserPhotoButton": "Delete photo",
"addEditUserModalUserPhotoLabel": "User photo",
"addEditUserModalUsernameLabel": "Username",
"addEditUserModalUsernamePlaceholder": "Username (max 45 characters)",
"addEditUserModalNameLabel": "Name",
"addEditUserModalNamePlaceholder": "Name (max 45 characters)",
"addEditUserModalEmailLabel": "Email",
"addEditUserModalEmailPlaceholder": "Email (max 45 characters)",
"addEditUserModalPasswordLabel": "Password",
"addEditUserModalPasswordPlaceholder": "Password",
"addEditUserModalTownLabel": "Town/city",
"addEditUserModalTownPlaceholder": "Town/city (max 45 characters)",
"addEditUserModalBirthdayLabel": "Birthday",
"addEditUserModalHeightLabel": "Height",
"addEditUserModalHeightPlaceholder": "Height",
"addEditUserModalGenderLabel": "Gender",
"addEditUserModalGenderOption1": "Male",
"addEditUserModalGenderOption2": "Female",
"addEditUserModalUnitsLabel": "Units",
"addEditUserModalUnitsOption1": "Metric",
"addEditUserModalUnitsOption2": "Imperial",
"addEditUserModalUserPreferredLanguageLabel": "Preferred language",
"addEditUserModalPreferredLanguageOption1": "English (US)",
"addEditUserModalPreferredLanguageOption2": "Catalan",
"addEditUserModalPreferredLanguageOption3": "Portuguese (PT)",
"addEditUserModalPreferredLanguageOption4": "German (DE)",
"addEditUserModalPreferredLanguageOption5": "French (FR)",
"addEditUserModalUserTypeLabel": "Access type",
"addEditUserModalUserTypeOption1": "Regular user",
"addEditUserModalUserTypeOption2": "Administrator",
"addEditUserModalIsActiveLabel": "Is active",
"addEditUserModalIsActiveOption1": "Yes",
"addEditUserModalIsActiveOption2": "No"
}

View File

@@ -1,9 +1,6 @@
{
"labelGear": "Gear",
"labelGearNotSet": "Not set",
"modalLabelAddGear": "Add gear to activity",
"modalLabelSelectGear": "Select gear",
"modalButtonAddGear": "Add gear",
"modalLabelDeleteGear": "Delete gear from activity",
"modalLabelDeleteGearBody": "Are you sure you want to remove the gear from the activity?",
"modalLabelDeleteGearButton": "Delete gear",

View File

@@ -0,0 +1,6 @@
{
"modalLabelAddGear": "Add gear to activity",
"modalLabelSelectGear": "Select gear",
"modalButtonAddGear": "Add gear",
"errorEditingGear": "Error editing gear"
}

View File

@@ -6,5 +6,5 @@
"settings": "Settings",
"login": "Login",
"logout": "Logout",
"warningZone": "Alpha software, some features might not work has expected"
"errorLogout": "Error logging out"
}

View File

@@ -0,0 +1,10 @@
{
"searchSelectLabel": "Search",
"searchSelectOptionActivity": "Activity",
"searchSelectOptionUser": "User",
"searchSelectOptionGear": "Gear",
"searchInputPlaceholder": "Search text",
"errorFetchingUserWithUsernameContains": "Error fetching user with username contains logic",
"errorFetchingActivityWithNameContains": "Error fetching activity with name contains logic",
"errorFetchingGearWithNicknameContains": "Error fetching gear with nickname contains logic"
}

View File

@@ -1,6 +1,13 @@
{
"subtitleChangePassword": "Change password",
"changeUserPasswordBodyLabel": "Change password for user ",
"changeUserPasswordPasswordLabel": "New password",
"changeUserPasswordPasswordConfirmationLabel": "Confirm new password",
"changeUserPasswordFeedbackLabel": "Password does not meet requirements",
"changeUserPasswordPasswordsDoNotMatchFeedbackLabel": "Passwords do not match",
"subtitleMySessions": "My sessions",
"userChangePasswordSuccessMessage": "Password changed successfully",
"userChangePasswordErrorMessage": "Error changing password",
"successDeleteSession": "Session deleted successfully",
"errorDeleteSession": "Error deleting session"
}

View File

@@ -1,5 +1,27 @@
{
"buttonDeleteProfilePhoto": "Delete photo",
"modalDeleteProfilePhotoBody": "Are you sure you want to delete your profile photo?",
"buttonEditProfile": "Edit profile"
"buttonEditProfile": "Edit profile",
"usernameLabel": "Username",
"emailLabel": "Email",
"cityLabel": "City",
"birthdayLabel": "Birthday",
"genderLabel": "Gender",
"genderOption1": "Male",
"genderOption2": "Female",
"unitsLabel": "Units",
"unitsOption1": "Metric",
"unitsOption2": "Imperial",
"heightLabel": "Height",
"preferredLanguageLabel": "Preferred language",
"preferredLanguageOption1": "English (US)",
"preferredLanguageOption2": "Catalan",
"preferredLanguageOption3": "Portuguese (PT)",
"preferredLanguageOption4": "German (DE)",
"preferredLanguageOption5": "French (FR)",
"accessTypeLabel": "Access type",
"accessTypeOption1": "Regular user",
"accessTypeOption2": "Administrator",
"userPhotoDeleteSuccess": "Profile photo deleted successfully",
"userPhotoDeleteError": "Error deleting profile photo"
}

View File

@@ -1,17 +1,21 @@
{
"addEditUserModalAddTitle": "Add user",
"addEditUserModalEditTitle": "Edit user",
"addEditUserModalEditProfileTitle": "Edit profile",
"addEditUserModalAddTitle": "Add user",
"addEditUserModalDeleteUserPhotoButton": "Delete photo",
"addEditUserModalUserPhotoLabel": "User photo",
"addEditUserModalUsernameLabel": "Username",
"addEditUserModalUsernamePlaceholder": "Username (max 45 characters)",
"addEditUserModalErrorUsernameExists": "Username already exists",
"addEditUserModalNameLabel": "Name",
"addEditUserModalNamePlaceholder": "Name (max 45 characters)",
"addEditUserModalEmailLabel": "Email",
"addEditUserModalEmailPlaceholder": "Email (max 45 characters)",
"addEditUserModalErrorEmailInvalid": "Email is not valid",
"addEditUserModalErrorEmailExists": "Email already exists",
"addEditUserModalPasswordLabel": "Password",
"addEditUserModalPasswordPlaceholder": "Password",
"addEditUserModalErrorPasswordInvalid": "Password does not meet requirements",
"addEditUserModalCityLabel": "City",
"addEditUserModalCityPlaceholder": "City (max 45 characters)",
"addEditUserModalBirthdayLabel": "Birthday",
@@ -36,5 +40,14 @@
"addEditUserModalUserTypeOption2": "Administrator",
"addEditUserModalIsActiveLabel": "Is active",
"addEditUserModalIsActiveOption1": "Yes",
"addEditUserModalIsActiveOption2": "No"
"addEditUserModalIsActiveOption2": "No",
"addEditUserModalErrorFetchingUserByUsername": "Error fetching user by username",
"addEditUserModalErrorFetchingUserByEmail": "Error fetching user by email",
"addEditUserModalSuccessDeleteUserPhoto": "User photo deleted successfully",
"addEditUserModalErrorDeleteUserPhoto": "Error deleting user photo",
"addEditUserModalErrorUploadingUserPhoto": "Error uploading user photo",
"addEditUserModalSuccessAddUser": "User added successfully",
"addEditUserModalErrorAddUser": "Error adding user",
"addEditUserModalSuccessEditUser": "User edited successfully",
"addEditUserModalErrorEditUser": "Error editing user"
}

View File

@@ -0,0 +1,10 @@
{
"modalChangeUserPasswordTitle": "Change user password",
"modalChangeUserPasswordBodyLabel": "Change password for user ",
"modalChangeUserPasswordPasswordLabel": "New password",
"modalChangeUserPasswordPasswordConfirmationLabel": "Confirm new password",
"modalChangeUserPasswordFeedbackLabel": "Password does not meet requirements",
"modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel": "Passwords do not match",
"userChangePasswordSuccessMessage": "Password changed successfully",
"userChangePasswordErrorMessage": "Error changing password"
}

View File

@@ -6,26 +6,10 @@
"userListUserIsAdminBadge": "Admin",
"userListUserIsActiveBadge": "Active",
"userListUserIsInactiveBadge": "Inactive",
"modalChangeUserPasswordTitle": "Change user password",
"modalChangeUserPasswordPasswordRequirementsTitle": "Password requirements includes:",
"modalChangeUserPasswordCharacters": "- 8 characters;",
"modalChangeUserPasswordCapitalLetters": "- 1 capital letter;",
"modalChangeUserPasswordNumbers": "- 1 number;",
"modalChangeUserPasswordSpecialCharacters": "- 1 special character;",
"modalChangeUserPasswordBodyLabel": "Change password for user ",
"modalChangeUserPasswordPasswordLabel": "New password",
"modalChangeUserPasswordPasswordConfirmationLabel": "Confirm new password",
"modalChangeUserPasswordFeedbackLabel": "Password does not meet requirements",
"modalChangeUserPasswordPasswordsDoNotMatchFeedbackLabel": "Passwords do not match",
"userChangePasswordSuccessMessage": "Password changed successfully",
"userChangePasswordErrorMessage": "Error changing password",
"userEditSuccessMessage": "User edited successfully",
"userEditErrorMessage": "Error editing user",
"modalDeleteUserTitle": "Delete user",
"modalDeleteUserBody": "Are you sure you want to delete user ",
"userDeleteSuccessMessage": "User deleted successfully",
"userDeleteErrorMessage": "Error deleting user",
"userPhotoDeleteSuccessMessage": "Photo deleted successfully",
"userPhotoDeleteErrorMessage": "Error deleting photo",
"userListUserSessionsTitle": "User sessions"
"userListUserSessionsTitle": "User sessions",
"userSessionDeleteSuccessMessage": "Session deleted successfully",
"userSessionDeleteErrorMessage": "Error deleting session"
}

View File

@@ -0,0 +1,7 @@
{
"passwordRequirementsTitle": "Password requirements includes:",
"passwordCharacters": "- 8 characters;",
"passwordCapitalLetters": "- 1 capital letter;",
"passwordNumbers": "- 1 number;",
"passwordSpecialCharacters": "- 1 special character;"
}

View File

@@ -4,5 +4,7 @@
"labelNumberOfUsers1": "There is a total of ",
"labelNumberOfUsers2": " user(s) (",
"labelNumberOfUsers3": " loaded):",
"successUserAdded": "User added successfully"
"successUserAdded": "User added successfully",
"successUserDeleted": "User deleted successfully",
"errorFetchingUsers": "Error fetching users"
}

View File

@@ -16,5 +16,7 @@
"labelDate": "Date",
"title": "Gear activities",
"subtitle": "(last 10 activities)",
"successGearEdited": "Gear edited successfully"
"successGearEdited": "Gear edited successfully",
"errorGearDelete": "Error deleting gear",
"errorFetchingGears": "Error fetching gears"
}

View File

@@ -8,5 +8,6 @@
"displayUserNumberOfGears2": " gear(s) (",
"displayUserNumberOfGears3": " loaded):",
"successGearDeleted": "Gear deleted successfully",
"errorGearNotFound": "Gear not found"
"errorGearNotFound": "Gear not found",
"errorFetchingGears": "Error fetching gears"
}

View File

@@ -1,3 +1,5 @@
{
"title": "Health"
"title": "Health",
"errorFetchingHealthData": "Error fetching health data",
"errorFetchingHealthTargets": "Error fetching health targets"
}

View File

@@ -8,5 +8,7 @@
"errorActivityAdded": "Error adding activity",
"errorActivityNotFound": "Activity not found",
"processingActivity": "Processing activity",
"successActivityDeleted": "Activity deleted successfully"
"successActivityDeleted": "Activity deleted successfully",
"errorFetchingUserStats": "Error fetching user stats",
"errorFetchingUserActivities": "Error fetching user activities"
}

View File

@@ -25,5 +25,8 @@
"activitiesPaginationWeek51": "One year ago",
"successFollowingDeleted": "Following deleted",
"successFollowerDeleted": "Follower deleted",
"successFollowerAccepted": "Follower accepted"
"successFollowerAccepted": "Follower accepted",
"errorFetchingUserStats": "Error fetching user stats",
"errorFetchingUserFollowers": "Error fetching user followers",
"errorFetchingUserActivities": "Error fetching user activities"
}

View File

@@ -21,7 +21,7 @@
<div class="d-flex justify-content-between align-items-center" v-else-if="activity">
<p class="pt-2">
<span class="fw-lighter">
{{ $t("activity.labelGear") }}
{{ $t("activityView.labelGear") }}
</span>
<br>
<span v-if="activity.activity_type === 1 || activity.activity_type === 2 || activity.activity_type === 3">
@@ -34,7 +34,7 @@
<font-awesome-icon :icon="['fas', 'fa-person-swimming']" />
</span>
<span class="ms-2" v-if="activity.gear_id && gear">{{ gear.nickname }}</span>
<span class="ms-2" v-else>{{ $t("activity.labelGearNotSet") }}</span>
<span class="ms-2" v-else>{{ $t("activityView.labelGearNotSet") }}</span>
</p>
<div class="justify-content-end">
<!-- add gear button -->
@@ -56,7 +56,7 @@
</a>
<!-- Modal delete gear -->
<ModalComponent modalId="deleteGearActivityModal" :title="t('activity.modalLabelDeleteGear')" :body="`${t('activity.modalLabelDeleteGearBody')}`" actionButtonType="danger" :actionButtonText="t('activity.modalLabelDeleteGearButton')" @submitAction="submitDeleteGearFromActivity"/>
<ModalComponent modalId="deleteGearActivityModal" :title="t('activityView.modalLabelDeleteGear')" :body="`${t('activityView.modalLabelDeleteGearBody')}`" actionButtonType="danger" :actionButtonText="t('activityView.modalLabelDeleteGearButton')" @submitAction="submitDeleteGearFromActivity"/>
</div>
</div>
@@ -64,7 +64,7 @@
<hr class="mb-2 mt-2">
<div class="row">
<div class="col-md-2">
<p>{{ $t("activity.labelGraph") }}</p>
<p>{{ $t("activityView.labelGraph") }}</p>
<ul class="nav nav-pills flex-column mb-auto" id="sidebarLineGraph">
<li class="nav-item" v-for="item in graphItems" :key="item.type">
<a href="javascript:void(0);" class="nav-link text-secondary"
@@ -74,7 +74,7 @@
</a>
</li>
</ul>
<p class="mt-2">{{ $t("activity.labelDownsampling") }}</p>
<p class="mt-2">{{ $t("activityView.labelDownsampling") }}</p>
</div>
<div class="col">
<LoadingComponent v-if="isLoading"/>
@@ -156,7 +156,7 @@ export default {
await activities.editActivity(auxActivity);
// Show the success message
push.success(t("activity.successMessageGearDeleted"));
push.success(t("activityView.successMessageGearDeleted"));
// Update the activity gear
activity.value.gear_id = null;
@@ -171,7 +171,7 @@ export default {
activity.value.gear_id = gearId;
// Show the success message
push.success(t("activity.successMessageGearAdded"));
push.success(t("activityView.successMessageGearAdded"));
}
function updateActivityFieldsOnEdit(data) {

View File

@@ -152,7 +152,7 @@ export default {
gear.value = await gears.deleteGear(route.params.id);
router.push({ path: "/gears", query: { gearDeleted: "true" } });
} catch (error) {
push.error(`${t("generalItems.errorEditingInfo")} - ${error}`);
push.error(`${t("gearView.errorGearDelete")} - ${error}`);
}
}
@@ -188,7 +188,7 @@ export default {
});
}
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorEditingInfo")} - ${error}`);
push.error(`${t("gearView.errorFetchingGears")} - ${error}`);
}
isLoading.value = false;

View File

@@ -136,7 +136,7 @@ export default {
isGearsUpdatingLoading.value = false;
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("gearsView.errorFetchingGears")} - ${error}`);
}
}
@@ -152,7 +152,7 @@ export default {
totalPages.value = Math.ceil(userGearsNumber.value / numRecords);
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("gearsView.errorFetchingGears")} - ${error}`);
}
}

View File

@@ -79,7 +79,7 @@ export default {
isHealthDataUpdatingLoading.value = false;
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("healthView.errorFetchingHealthData")} - ${error}`);
}
}
@@ -99,7 +99,7 @@ export default {
totalPages.value = Math.ceil(userHealthDataNumber.value / numRecords);
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("healthView.errorFetchingHealthData")} - ${error}`);
}
}
@@ -109,7 +109,7 @@ export default {
userHealthTargets.value = await health_targets.getUserHealthTargets();
} catch (error) {
// If there is an error, set the error message and show the error alert.
push.error(`${t("generalItems.errorFetchingInfo")} - ${error}`);
push.error(`${t("healthView.errorFetchingHealthTargets")} - ${error}`);
}
}

View File

@@ -160,7 +160,7 @@ export default {
thisMonthDistances.value = await activities.getUserThisMonthStats(authStore.user.id);
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('homeView.errorFetchingUserStats')} - ${error}`)
}
}
@@ -182,7 +182,7 @@ export default {
}
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('homeView.errorFetchingUserActivities')} - ${error}`)
}
}
@@ -267,7 +267,7 @@ export default {
}
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('homeView.errorFetchingUserActivities')} - ${error}`)
}
isLoading.value = false;

View File

@@ -98,29 +98,7 @@
</a>
<!-- Modal follow user -->
<div class="modal fade" id="followUserModal" tabindex="-1" aria-labelledby="followUserModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="followUserModal">
{{ $t("userView.modalFollowUserTitle") }}
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{ $t("userView.modalFollowUserBody") }}<b>{{ userProfile.name }}</b>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
{{ $t("generalItems.buttonClose") }}
</button>
<a type="button" class="btn btn-success" data-bs-dismiss="modal" @click="submitFollowUser">
{{ $t("userView.modalFollowUserTitle") }}
</a>
</div>
</div>
</div>
</div>
<ModalComponent modalId="followUserModal" :title="t('userView.modalFollowUserTitle')" :body="`${t('userView.modalFollowUserBody')}<b>${userProfile.name}</b>?`" :actionButtonType="`success`" :actionButtonText="t('userView.modalFollowUserTitle')" @submitAction="submitFollowUser"/>
</li>
<li class="nav-item" role="presentation" v-if="userProfile.id != authStore.user.id && userFollowState != null && !userFollowState.is_accepted">
<!-- Cancel follow request button -->
@@ -131,29 +109,7 @@
</a>
<!-- Modal cancel follow request -->
<div class="modal fade" id="cancelFollowUserModal" tabindex="-1" aria-labelledby="cancelFollowUserModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="cancelFollowUserModal">
{{ $t("userView.modalCancelFollowRequestTitle") }}
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{ $t("userView.modalCancelFollowRequestBody") }}<b>{{ userProfile.name }}</b>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
{{ $t("generalItems.buttonClose") }}
</button>
<a type="button" class="btn btn-danger" data-bs-dismiss="modal" @click="submitCancelFollowUser">
{{ $t("userView.modalCancelFollowRequestTitle") }}
</a>
</div>
</div>
</div>
</div>
<ModalComponent modalId="cancelFollowUserModal" :title="t('userView.modalCancelFollowRequestTitle')" :body="`${t('userView.modalCancelFollowRequestBody')}<b>${userProfile.name}</b>?`" :actionButtonType="`danger`" :actionButtonText="t('userView.modalCancelFollowRequestTitle')" @submitAction="submitCancelFollowUser"/>
</li>
<li class="nav-item" role="presentation" v-if="userProfile.id != authStore.user.id && userFollowState != null && userFollowState.is_accepted">
<!-- Unfollow user button -->
@@ -164,29 +120,7 @@
</a>
<!-- Modal unfollow user -->
<div class="modal fade" id="unfollowUserModal" tabindex="-1" aria-labelledby="unfollowUserModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="unfollowUserModal">
{{ $t("userView.modalUnfollowUserTitle") }}
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{ $t("userView.modalUnfollowUserBody") }}<b>{{ userProfile.name }}</b>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
{{ $t("generalItems.buttonClose") }}
</button>
<a type="button" class="btn btn-danger" data-bs-dismiss="modal" @click="submitUnfollowUser">
{{ $t("userView.modalUnfollowUserTitle") }}
</a>
</div>
</div>
</div>
</div>
<ModalComponent modalId="unfollowUserModal" :title="t('userView.modalUnfollowUserTitle')" :body="`${t('userView.modalUnfollowUserBody')}<b>${userProfile.name}</b>?`" :actionButtonType="`danger`" :actionButtonText="t('userView.modalUnfollowUserTitle')" @submitAction="submitUnfollowUser"/>
</li>
</ul>
@@ -285,6 +219,7 @@ import ActivityMapComponent from '@/components/Activities/ActivityMapComponent.v
import FollowersListComponent from '@/components/Followers/FollowersListComponent.vue';
import BackButtonComponent from '@/components/GeneralComponents/BackButtonComponent.vue';
import UserAvatarComponent from '@/components/Users/UserAvatarComponent.vue';
import ModalComponent from "@/components/Modals/ModalComponent.vue";
export default {
components: {
@@ -296,6 +231,7 @@ export default {
FollowersListComponent,
BackButtonComponent,
UserAvatarComponent,
ModalComponent,
},
setup () {
const { t } = useI18n();
@@ -328,7 +264,7 @@ export default {
thisMonthDistances.value = await activities.getUserThisMonthStats(authStore.user.id);
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('userView.errorFetchingUserStats')} - ${error}`)
}
}
@@ -350,7 +286,7 @@ export default {
}
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('userView.errorFetchingUserFollowers')} - ${error}`)
}
}
@@ -378,7 +314,7 @@ export default {
userFollowState.value = await followers.getUserFollowState(authStore.user.id, route.params.id);
}
} catch (error) {
push.error(`${t('generalItems.errorFetchingInfo')} - ${error}`)
push.error(`${t('userView.errorFetchingUserActivities')} - ${error}`)
}
isLoading.value = false;
isActivitiesLoading.value = false;
@@ -413,7 +349,7 @@ export default {
userWeekActivities.value = await activities.getUserWeekActivities(userProfile.value.id, week.value);
} catch (error) {
// Set the error message
push.error(`${t('generalItems.errorEditingInfo')} - ${error}`)
push.error(`${t('userView.errorFetchingUserActivities')} - ${error}`)
} finally {
isActivitiesLoading.value = false;
}
@@ -517,7 +453,7 @@ export default {
push.success(t('userView.successFollowRequestCancelled'))
} catch (error) {
// Set the error message
push.error(`${t('user.errorUnableToSendFollow')} - ${error}`)
push.error(`${t('userView.errorUnableToSendFollow')} - ${error}`)
}
}
@@ -533,7 +469,7 @@ export default {
push.success(t('userView.successUserUnfollowed'))
} catch (error) {
// Set the error message
push.error(`${t('user.errorUnableToUnfollow')} - ${error}`)
push.error(`${t('userView.errorUnableToUnfollow')} - ${error}`)
}
}