From 262f21d157da06f4186adaef4f67b64c822fee9c Mon Sep 17 00:00:00 2001 From: Jonathan Bourdon Date: Tue, 26 Aug 2025 15:58:06 -0400 Subject: [PATCH 1/3] feat(i18n): deprecate Spanish language support in the frontend --- frontend/src/locales/es.json | 41 - frontend/src/main.js | 87 ++- frontend/src/stores/languageStore.js | 65 +- .../src/views/auth/ForgotPasswordView.vue | 349 ++++----- frontend/src/views/auth/LoginView.vue | 343 +++++---- frontend/src/views/auth/RegisterView.vue | 22 +- frontend/src/views/auth/ResetPasswordView.vue | 13 - frontend/src/views/auth/VerifyEmailView.vue | 408 +++++----- frontend/src/views/creators/AboutCreator.vue | 30 - frontend/src/views/creators/ActualBanner.vue | 105 +-- frontend/src/views/creators/AlbumEditor.vue | 609 ++++++++------- frontend/src/views/creators/AlbumView.vue | 208 +++-- frontend/src/views/creators/AlbumViewer.vue | 310 ++++---- frontend/src/views/creators/BannerActions.vue | 300 ++++---- frontend/src/views/creators/BannerEditor.vue | 674 ++++++++--------- frontend/src/views/creators/CreateCreator.vue | 227 +++--- frontend/src/views/creators/CreatorHome.vue | 105 +-- frontend/src/views/creators/CreatorLayout.vue | 20 - frontend/src/views/creators/CreatorLogo.vue | 130 ++-- .../src/views/creators/CreatorLogoEditor.vue | 711 +++++++++--------- .../src/views/creators/DonationButton.vue | 117 ++- frontend/src/views/creators/DonationForm.vue | 20 +- frontend/src/views/creators/NameEditor.vue | 359 ++++----- frontend/src/views/creators/NameTitle.vue | 37 +- .../src/views/creators/PaymentCompleted.vue | 7 - frontend/src/views/creators/PaymentFailed.vue | 6 - frontend/src/views/main/Footer.vue | 233 +++--- frontend/src/views/main/Landing.vue | 536 ++++++------- frontend/src/views/main/SideBar.vue | 10 +- frontend/src/views/profile/ProfilePage.vue | 33 - .../src/views/profile/account/AliasDialog.vue | 92 ++- .../profile/account/ChangePasswordDialog.vue | 283 +++---- .../src/views/profile/account/EmailDialog.vue | 122 ++- .../views/profile/account/FullnameDialog.vue | 103 ++- .../profile/creators/ChangeEmailDialog.vue | 274 ++++--- .../profile/creators/ChangeNameDialog.vue | 127 ++-- .../profile/creators/ChangePhoneDialog.vue | 411 +++++----- .../profile/creators/ChangeSlugDialog.vue | 209 ++--- .../profile/creators/ChangeStripeIdDialog.vue | 134 ++-- .../profile/creators/ChangeTitleDialog.vue | 130 ++-- .../views/profile/creators/SocialsDialog.vue | 360 +++++---- 41 files changed, 4148 insertions(+), 4212 deletions(-) delete mode 100644 frontend/src/locales/es.json diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json deleted file mode 100644 index 0c64d44..0000000 --- a/frontend/src/locales/es.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "save": "Guardar", - "cancel": "Cancelar", - "edit": "Editar", - "delete": "Eliminar", - "create": "Crear", - "apply": "Aplicar", - "preview": "Vista previa", - "label": "Etiqueta", - "confirm": "Confirmar", - "close": "Cerrar", - "accept": "Aceptar", - "loading": "Cargando...", - "error": "Error", - "success": "Éxito", - "changesSaved": "Cambios guardados con éxito", - "errorOccurred": "Ha ocurrido un error", - "name": "Nombre", - "email": "Correo electrónico", - "password": "Contraseña", - "description": "Descripción", - "title": "Título", - "image": "Imagen", - "file": "Archivo", - "required": "Este campo es obligatorio", - "invalidEmail": "Correo electrónico inválido", - "invalidPassword": "Contraseña inválida", - "facebook": "Facebook", - "instagram": "Instagram", - "linkedin": "LinkedIn", - "reddit": "Reddit", - "tiktok": "TikTok", - "x": "X (Twitter)", - "youtube": "YouTube", - "website": "Sitio web", - "errors": { - "unexpected": "Ha ocurrido un error inesperado", - "imageLoad": "Error al cargar la imagen", - "imageUpload": "Error al subir la imagen" - } -} \ No newline at end of file diff --git a/frontend/src/main.js b/frontend/src/main.js index b99bc6d..52698cc 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -5,54 +5,71 @@ import { createPinia } from 'pinia'; import 'vuetify/styles'; import { createVuetify } from 'vuetify'; import { aliases, mdi } from 'vuetify/iconsets/mdi-svg'; -import { VDialog, VApp, VBtn, VProgressLinear, VProgressCircular, VIcon, VTextField, VSnackbar, VForm, VTextarea, VAlert } from 'vuetify/components'; -import { } from 'vuetify/directives'; +import { + VAlert, + VApp, + VBtn, + VDialog, + VForm, + VIcon, + VProgressCircular, + VProgressLinear, + VSnackbar, + VTextarea, + VTextField, +} from 'vuetify/components'; import vueGoogleOauth from 'vue3-google-login'; -import { useAuthStore } from "@/stores/authStore.js"; -import { useUserProfileStore } from "@/stores/userProfileStore.js"; -import { useCreatorProfileStore } from "@/stores/creatorProfileStore.js"; +import { useAuthStore } from '@/stores/authStore.js'; +import { useUserProfileStore } from '@/stores/userProfileStore.js'; +import { useCreatorProfileStore } from '@/stores/creatorProfileStore.js'; import Toast, { POSITION } from 'vue-toastification'; import 'vue-toastification/dist/index.css'; import './assets/main.css'; +import { createI18n } from 'vue-i18n'; +import en from '@/locales/en.json'; +import fr from '@/locales/fr.json'; const vuetify = createVuetify({ - components: { - VDialog, VApp, VBtn, VProgressLinear, VProgressCircular, VIcon, VTextField, VSnackbar, VForm, VTextarea, VAlert - }, - directives: { - }, - icons: { - defaultSet: 'mdi', - aliases, - sets: { mdi } - } + components: { + VDialog, + VApp, + VBtn, + VProgressLinear, + VProgressCircular, + VIcon, + VTextField, + VSnackbar, + VForm, + VTextarea, + VAlert, + }, + directives: {}, + icons: { + defaultSet: 'mdi', + aliases, + sets: { mdi }, + }, }); -import { createI18n } from 'vue-i18n' -import en from '@/locales/en.json' -import fr from '@/locales/fr.json' -import es from '@/locales/es.json' - const i18n = createI18n({ - legacy: false, - fallbackLocale: 'en', - messages: { - en: en, - fr: fr, - es: es - } -}) + legacy: false, + fallbackLocale: 'fr', + messages: { + en: en, + fr: fr, + }, +}); const pinia = createPinia(); const app = createApp(App) - .use(pinia) - .use(vuetify) - .use(router) - .use(i18n) - .use(vueGoogleOauth, { - clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID, - }) + .use(pinia) + .use(vuetify) + .use(router) + .use(i18n) + .use(vueGoogleOauth, { + clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID, + }) .use(Toast, { position: POSITION.TOP_CENTER, }); diff --git a/frontend/src/stores/languageStore.js b/frontend/src/stores/languageStore.js index 89bd26a..783ab83 100644 --- a/frontend/src/stores/languageStore.js +++ b/frontend/src/stores/languageStore.js @@ -1,31 +1,38 @@ -import { defineStore } from 'pinia' -import { useSessionStorage } from '@vueuse/core' -import { useI18n } from 'vue-i18n' +import { defineStore } from 'pinia'; +import { useSessionStorage } from '@vueuse/core'; +import { useI18n } from 'vue-i18n'; -export const useLanguageStore = defineStore( - 'language', - () => { - // Initialize with the stored value or default to 'fr' - const storedLocale = useSessionStorage('user-locale', 'fr') - - // Get i18n instance - const { locale } = useI18n() - - // Set the initial locale from storage - if (locale && storedLocale.value) { - locale.value = storedLocale.value - } - - function setLocale(newLocale) { - if (locale) { - locale.value = newLocale - } - storedLocale.value = newLocale - } - - return { - locale: storedLocale, - setLocale - } +const ALLOWED_LOCALES = ['en', 'fr']; +const DEFAULT_LOCALE = 'fr'; + +export const useLanguageStore = defineStore('language', () => { + const storedLocale = useSessionStorage('user-locale', DEFAULT_LOCALE); + + // Get i18n instance (provided globally) + const { locale } = useI18n(); + + function sanitizeLocale(value) { + return ALLOWED_LOCALES.includes(value) ? value : DEFAULT_LOCALE; } -) \ No newline at end of file + + // Initialize locale with a sanitized value + const initial = sanitizeLocale(storedLocale.value); + storedLocale.value = initial; + if (locale) { + locale.value = initial; + } + + function setLocale(newLocale) { + const next = sanitizeLocale(newLocale); + if (locale) { + locale.value = next; + } + storedLocale.value = next; + } + + return { + locale: storedLocale, + setLocale, + allowedLocales: ALLOWED_LOCALES, + }; +}); diff --git a/frontend/src/views/auth/ForgotPasswordView.vue b/frontend/src/views/auth/ForgotPasswordView.vue index 7131f20..bb99f05 100644 --- a/frontend/src/views/auth/ForgotPasswordView.vue +++ b/frontend/src/views/auth/ForgotPasswordView.vue @@ -1,209 +1,218 @@ { - "en": { - "title": "Forgot Password?", - "description": "Please enter your account email address. A password reset link will be sent to you.", - "email": "Email", - "resetPassword": "Reset Password", - "backToLogin": "Back to Login", - "resetEmailSent": "Password reset email sent. Please check your inbox.", - "resetRequestFailed": "Failed to request password reset. Please try again.", - "emailRequired": "Email is required." - }, - "fr": { - "title": "Mot de passe oublié ?", - "description": "Veuillez saisir l'adresse e-mail de votre compte. Un lien de réinitialisation vous sera envoyé.", - "email": "Email", - "resetPassword": "Réinitialiser le mot de passe", - "backToLogin": "Retour à la connexion", - "resetEmailSent": "Email de réinitialisation du mot de passe envoyé. Veuillez vérifier votre boîte de réception.", - "resetRequestFailed": "Échec de la demande de réinitialisation du mot de passe. Veuillez réessayer.", - "emailRequired": "L'email est requis." - }, - "es": { - "title": "¿Olvidaste tu contraseña?", - "description": "Por favor, introduce la dirección de correo electrónico de tu cuenta. Te enviaremos un enlace para restablecer tu contraseña.", - "email": "Correo electrónico", - "resetPassword": "Restablecer contraseña", - "backToLogin": "Volver al inicio de sesión", - "resetEmailSent": "Correo electrónico de restablecimiento de contraseña enviado. Por favor revise su bandeja de entrada.", - "resetRequestFailed": "No se pudo solicitar el restablecimiento de contraseña. Por favor, inténtelo de nuevo.", - "emailRequired": "El correo electrónico es obligatorio." - } + "en": { + "title": "Forgot Password?", + "description": "Please enter your account email address. A password reset link will be sent to you.", + "email": "Email", + "resetPassword": "Reset Password", + "backToLogin": "Back to Login", + "resetEmailSent": "Password reset email sent. Please check your inbox.", + "resetRequestFailed": "Failed to request password reset. Please try again.", + "emailRequired": "Email is required." + }, + "fr": { + "title": "Mot de passe oublié ?", + "description": "Veuillez saisir l'adresse e-mail de votre compte. Un lien de réinitialisation vous sera envoyé.", + "email": "Email", + "resetPassword": "Réinitialiser le mot de passe", + "backToLogin": "Retour à la connexion", + "resetEmailSent": "Email de réinitialisation du mot de passe envoyé. Veuillez vérifier votre boîte de réception.", + "resetRequestFailed": "Échec de la demande de réinitialisation du mot de passe. Veuillez réessayer.", + "emailRequired": "L'email est requis." + } } diff --git a/frontend/src/views/auth/LoginView.vue b/frontend/src/views/auth/LoginView.vue index 4561027..ba2cdd8 100644 --- a/frontend/src/views/auth/LoginView.vue +++ b/frontend/src/views/auth/LoginView.vue @@ -1,195 +1,214 @@ { - "en": { - "title": "Sign in", - "alt": "Login", - "email": "Email", - "password": "Password", - "signIn": "Connect", - "forgotPassword": "Forgot password?", - "resendVerification": "Resend verification email", - "orContinueWith": "Or", - "noAccount": "Don't have an account?", - "register": "Register", - "loginFailed": "Login failed. Please check your credentials.", - "continueWithGoogle": "Continue with Google" - }, - "fr": { - "title": "Se connecter", - "alt": "Connexion", - "email": "Email", - "password": "Mot de passe", - "signIn": "Connexion", - "forgotPassword": "Mot de passe oublié?", - "resendVerification": "Renvoyer l'email de vérification", - "orContinueWith": "Ou", - "noAccount": "Vous n'avez pas de compte?", - "register": "S'inscrire", - "loginFailed": "Échec de la connexion. Veuillez vérifier vos identifiants.", - "continueWithGoogle": "Continuer avec Google" - }, - "es": { - "title": "Iniciar sesión", - "alt": "Inicio de sesión", - "email": "Correo electrónico", - "password": "Contraseña", - "signIn": "Conéctate", - "forgotPassword": "¿Olvidó su contraseña?", - "resendVerification": "Reenviar correo de verificación", - "orContinueWith": "o", - "noAccount": "¿No tiene una cuenta?", - "register": "Registrarse", - "loginFailed": "Error de inicio de sesión. Por favor, compruebe sus credenciales.", - "continueWithGoogle": "Continuar con Google" - } + "en": { + "title": "Sign in", + "alt": "Login", + "email": "Email", + "password": "Password", + "signIn": "Connect", + "forgotPassword": "Forgot password?", + "resendVerification": "Resend verification email", + "orContinueWith": "Or", + "noAccount": "Don't have an account?", + "register": "Register", + "loginFailed": "Login failed. Please check your credentials.", + "continueWithGoogle": "Continue with Google" + }, + "fr": { + "title": "Se connecter", + "alt": "Connexion", + "email": "Email", + "password": "Mot de passe", + "signIn": "Connexion", + "forgotPassword": "Mot de passe oublié?", + "resendVerification": "Renvoyer l'email de vérification", + "orContinueWith": "Ou", + "noAccount": "Vous n'avez pas de compte?", + "register": "S'inscrire", + "loginFailed": "Échec de la connexion. Veuillez vérifier vos identifiants.", + "continueWithGoogle": "Continuer avec Google" + } } diff --git a/frontend/src/views/auth/RegisterView.vue b/frontend/src/views/auth/RegisterView.vue index 3c37082..471d2d7 100644 --- a/frontend/src/views/auth/RegisterView.vue +++ b/frontend/src/views/auth/RegisterView.vue @@ -25,8 +25,8 @@ {{ t('success.backToLogin') }} {{ t('success.resendVerification') }} @@ -232,26 +232,6 @@ "backToLogin": "Retour à la connexion", "resendVerification": "Vous n'avez pas reçu l'email? Renvoyer la vérification" } - }, - "es": { - "title": "Crea tu cuenta", - "alt": "Registro de Hutopy", - "name": "Nombre completo", - "email": "Correo electrónico", - "password": "Contraseña", - "confirmPassword": "Confirmar contraseña", - "passwordRequirements": "La contraseña debe tener al menos 8 caracteres", - "register": "Registrarse", - "alreadyHaveAccount": "¿Ya tienes una cuenta?", - "signIn": "Iniciar sesión", - "passwordsDoNotMatch": "Las contraseñas no coinciden", - "registrationFailed": "El registro falló. Por favor, inténtelo de nuevo.", - "success": { - "title": "¡Registro exitoso!", - "message": "Por favor revisa tu correo electrónico para verificar tu cuenta. Hemos enviado un enlace de verificación a:", - "backToLogin": "Volver al inicio de sesión", - "resendVerification": "¿No recibiste el correo? Reenviar verificación" - } } } diff --git a/frontend/src/views/auth/ResetPasswordView.vue b/frontend/src/views/auth/ResetPasswordView.vue index 0cc4e8b..5736dd3 100644 --- a/frontend/src/views/auth/ResetPasswordView.vue +++ b/frontend/src/views/auth/ResetPasswordView.vue @@ -259,19 +259,6 @@ "passwordTooShort": "Le mot de passe doit comporter au moins 8 caractères", "resetFailed": "Échec de la réinitialisation du mot de passe. Veuillez réessayer ou demander un nouveau lien de réinitialisation.", "invalidResetLink": "Lien de réinitialisation invalide ou expiré. Veuillez demander une nouvelle réinitialisation de mot de passe." - }, - "es": { - "title": "Restablecer su Contraseña", - "newPassword": "Nueva Contraseña", - "confirmPassword": "Confirmar Contraseña", - "passwordRequirements": "La contraseña debe tener al menos 8 caracteres", - "resetPassword": "Restablecer Contraseña", - "passwordResetSuccess": "¡Su contraseña ha sido restablecida con éxito!", - "proceedToLogin": "Proceder al Inicio de Sesión", - "passwordsDoNotMatch": "Las contraseñas no coinciden", - "passwordTooShort": "La contraseña debe tener al menos 8 caracteres", - "resetFailed": "Error al restablecer la contraseña. Inténtelo de nuevo o solicite un nuevo enlace de restablecimiento.", - "invalidResetLink": "Enlace de restablecimiento inválido o caducado. Solicite un nuevo restablecimiento de contraseña." } } diff --git a/frontend/src/views/auth/VerifyEmailView.vue b/frontend/src/views/auth/VerifyEmailView.vue index e7a0ce3..ef60c29 100644 --- a/frontend/src/views/auth/VerifyEmailView.vue +++ b/frontend/src/views/auth/VerifyEmailView.vue @@ -1,219 +1,237 @@ { - "en": { - "verifying": "Verifying your email...", - "success": { - "title": "Email Verified Successfully!", - "message": "Your email has been verified. You can now log in to your account.", - "goToLogin": "Go to Login" + "en": { + "verifying": "Verifying your email...", + "success": { + "title": "Email Verified Successfully!", + "message": "Your email has been verified. You can now log in to your account.", + "goToLogin": "Go to Login" + }, + "error": { + "title": "Verification Failed", + "defaultMessage": "We couldn't verify your email. The link may be invalid or expired.", + "missingParams": "Missing required verification parameters.", + "goToLogin": "Go to Login" + }, + "resend": { + "title": "Resend Verification Email", + "emailLabel": "Email", + "button": "Resend Verification Email", + "success": "Verification email sent successfully. Please check your inbox.", + "error": "Failed to send verification email. Please try again.", + "invalidEmail": "Please enter a valid email address." + } }, - "error": { - "title": "Verification Failed", - "defaultMessage": "We couldn't verify your email. The link may be invalid or expired.", - "missingParams": "Missing required verification parameters.", - "goToLogin": "Go to Login" - }, - "resend": { - "title": "Resend Verification Email", - "emailLabel": "Email", - "button": "Resend Verification Email", - "success": "Verification email sent successfully. Please check your inbox.", - "error": "Failed to send verification email. Please try again.", - "invalidEmail": "Please enter a valid email address." + "fr": { + "verifying": "Vérification de votre email...", + "success": { + "title": "Email vérifié avec succès !", + "message": "Votre email a été vérifié. Vous pouvez maintenant vous connecter à votre compte.", + "goToLogin": "Aller à la connexion" + }, + "error": { + "title": "Échec de la vérification", + "defaultMessage": "Nous n'avons pas pu vérifier votre email. Le lien peut être invalide ou expiré.", + "missingParams": "Paramètres de vérification requis manquants.", + "goToLogin": "Aller à la connexion" + }, + "resend": { + "title": "Renvoyer l'email de vérification", + "emailLabel": "Email", + "button": "Renvoyer l'email de vérification", + "success": "Email de vérification envoyé avec succès. Veuillez vérifier votre boîte de réception.", + "error": "Échec de l'envoi de l'email de vérification. Veuillez réessayer.", + "invalidEmail": "Veuillez entrer une adresse email valide." + } } - }, - "fr": { - "verifying": "Vérification de votre email...", - "success": { - "title": "Email vérifié avec succès !", - "message": "Votre email a été vérifié. Vous pouvez maintenant vous connecter à votre compte.", - "goToLogin": "Aller à la connexion" - }, - "error": { - "title": "Échec de la vérification", - "defaultMessage": "Nous n'avons pas pu vérifier votre email. Le lien peut être invalide ou expiré.", - "missingParams": "Paramètres de vérification requis manquants.", - "goToLogin": "Aller à la connexion" - }, - "resend": { - "title": "Renvoyer l'email de vérification", - "emailLabel": "Email", - "button": "Renvoyer l'email de vérification", - "success": "Email de vérification envoyé avec succès. Veuillez vérifier votre boîte de réception.", - "error": "Échec de l'envoi de l'email de vérification. Veuillez réessayer.", - "invalidEmail": "Veuillez entrer une adresse email valide." - } - }, - "es": { - "verifying": "Verificando tu correo electrónico...", - "success": { - "title": "¡Correo electrónico verificado con éxito!", - "message": "Tu correo electrónico ha sido verificado. Ahora puedes iniciar sesión en tu cuenta.", - "goToLogin": "Ir al inicio de sesión" - }, - "error": { - "title": "Falló la verificación", - "defaultMessage": "No pudimos verificar tu correo electrónico. El enlace puede ser inválido o estar caducado.", - "missingParams": "Faltan parámetros de verificación requeridos.", - "goToLogin": "Ir al inicio de sesión" - }, - "resend": { - "title": "Reenviar correo de verificación", - "emailLabel": "Correo electrónico", - "button": "Reenviar correo de verificación", - "success": "Correo de verificación enviado con éxito. Por favor revisa tu bandeja de entrada.", - "error": "Error al enviar el correo de verificación. Por favor, inténtelo de nuevo.", - "invalidEmail": "Por favor, introduce una dirección de correo electrónico válida." - } - } } diff --git a/frontend/src/views/creators/AboutCreator.vue b/frontend/src/views/creators/AboutCreator.vue index a22678f..e0fce58 100644 --- a/frontend/src/views/creators/AboutCreator.vue +++ b/frontend/src/views/creators/AboutCreator.vue @@ -681,36 +681,6 @@ "descriptionRequired": "La description est obligatoire" } } - }, - "es": { - "edit": "Editar", - "save": "Guardar", - "cancel": "Cancelar", - "creator": { - "sections": { - "about": { - "title": "Acerca de", - "description": "Descripción", - "contactInfo": "Información de contacto", - "characters": "caracteres", - "formattingHint": "Consejo: ¡Usa saltos de línea y emojis para hacer tu descripción más atractiva!" - }, - "photos": { - "title": "Fotos", - "image": "Imagen" - } - }, - "fields": { - "videoUrl": "URL del video", - "phoneNumber": "Número de teléfono", - "email": "Correo electrónico" - }, - "validation": { - "invalidYoutubeUrl": "Por favor, introduce una URL de YouTube o un ID de video válido", - "descriptionTooLong": "La descripción no puede exceder los 2000 caracteres", - "descriptionRequired": "La descripción es obligatoria" - } - } } } diff --git a/frontend/src/views/creators/ActualBanner.vue b/frontend/src/views/creators/ActualBanner.vue index f18d899..981ffbc 100644 --- a/frontend/src/views/creators/ActualBanner.vue +++ b/frontend/src/views/creators/ActualBanner.vue @@ -1,64 +1,81 @@  { - "en": { - "alt": "Creator banner" - }, - "fr": { - "alt": "Bannière du créateur" - }, - "es": { - "alt": "Banner del creador" - } + "en": { + "alt": "Creator banner" + }, + "fr": { + "alt": "Bannière du créateur" + } } diff --git a/frontend/src/views/creators/AlbumEditor.vue b/frontend/src/views/creators/AlbumEditor.vue index 1eacc85..11e1145 100644 --- a/frontend/src/views/creators/AlbumEditor.vue +++ b/frontend/src/views/creators/AlbumEditor.vue @@ -1,330 +1,367 @@ { - "en": { - "title": "Album", - "dropzoneText": "Drop a photo here to add it to your album", - "processing": "Processing...", - "uploading": "Uploading...", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete" - }, - "fr": { - "title": "Album", - "dropzoneText": "Déposez une photo ici pour l'ajouter à l'album", - "processing": "Traitement en cours...", - "uploading": "Téléchargement...", - "moveLeft": "Déplacer à gauche", - "moveRight": "Déplacer à droite", - "delete": "Supprimer" - }, - "es": { - "title": "Album", - "dropzoneText": "Suelta una foto aquí para añadirla al álbum", - "processing": "Procesando...", - "uploading": "Subiendo...", - "moveLeft": "Mover a la izquierda", - "moveRight": "Mover a la derecha", - "delete": "Eliminar" - } + "en": { + "title": "Album", + "dropzoneText": "Drop a photo here to add it to your album", + "processing": "Processing...", + "uploading": "Uploading...", + "moveLeft": "Move Left", + "moveRight": "Move Right", + "delete": "Delete" + }, + "fr": { + "title": "Album", + "dropzoneText": "Déposez une photo ici pour l'ajouter à l'album", + "processing": "Traitement en cours...", + "uploading": "Téléchargement...", + "moveLeft": "Déplacer à gauche", + "moveRight": "Déplacer à droite", + "delete": "Supprimer" + } } diff --git a/frontend/src/views/creators/AlbumView.vue b/frontend/src/views/creators/AlbumView.vue index c942c7e..0de66fd 100644 --- a/frontend/src/views/creators/AlbumView.vue +++ b/frontend/src/views/creators/AlbumView.vue @@ -1,138 +1,134 @@ { - "en": { - "creator": { - "sections": { - "album": { - "title": "Photo Album", - "image": "Album image" + "en": { + "creator": { + "sections": { + "album": { + "title": "Photo Album", + "image": "Album image" + } + } } - } - } - }, - "fr": { - "creator": { - "sections": { - "album": { - "title": "Album photo", - "image": "Image de l'album" + }, + "fr": { + "creator": { + "sections": { + "album": { + "title": "Album photo", + "image": "Image de l'album" + } + } } - } } - }, - "es": { - "creator": { - "sections": { - "album": { - "title": "Álbum de fotos", - "image": "Imagen del álbum" - } - } - } - } } \ No newline at end of file diff --git a/frontend/src/views/creators/AlbumViewer.vue b/frontend/src/views/creators/AlbumViewer.vue index 23f7ffb..9e2649b 100644 --- a/frontend/src/views/creators/AlbumViewer.vue +++ b/frontend/src/views/creators/AlbumViewer.vue @@ -1,175 +1,207 @@ { - "en": { - "viewer": { - "previous": "Previous image", - "next": "Next image", - "close": "Close viewer", - "imageAlt": "Image {index}" + "en": { + "viewer": { + "previous": "Previous image", + "next": "Next image", + "close": "Close viewer", + "imageAlt": "Image {index}" + } + }, + "fr": { + "viewer": { + "previous": "Image précédente", + "next": "Image suivante", + "close": "Fermer", + "imageAlt": "Image {index}" + } } - }, - "fr": { - "viewer": { - "previous": "Image précédente", - "next": "Image suivante", - "close": "Fermer", - "imageAlt": "Image {index}" - } - }, - "es": { - "viewer": { - "previous": "Imagen anterior", - "next": "Imagen siguiente", - "close": "Cerrar", - "imageAlt": "Imagen {index}" - } - } } diff --git a/frontend/src/views/creators/BannerActions.vue b/frontend/src/views/creators/BannerActions.vue index 78120f0..57e4248 100644 --- a/frontend/src/views/creators/BannerActions.vue +++ b/frontend/src/views/creators/BannerActions.vue @@ -1,172 +1,170 @@  { - "en": { - "facebook": "Facebook", - "instagram": "Instagram", - "linkedin": "LinkedIn", - "reddit": "Reddit", - "tiktok": "TikTok", - "x": "X (Twitter)", - "youtube": "YouTube", - "website": "Website" - }, - "fr": { - "facebook": "Facebook", - "instagram": "Instagram", - "linkedin": "LinkedIn", - "reddit": "Reddit", - "tiktok": "TikTok", - "x": "X (Twitter)", - "youtube": "YouTube", - "website": "Site web" - }, - "es": { - "facebook": "Facebook", - "instagram": "Instagram", - "linkedin": "LinkedIn", - "reddit": "Reddit", - "tiktok": "TikTok", - "x": "X (Twitter)", - "youtube": "YouTube", - "website": "Sitio web" - } + "en": { + "facebook": "Facebook", + "instagram": "Instagram", + "linkedin": "LinkedIn", + "reddit": "Reddit", + "tiktok": "TikTok", + "x": "X (Twitter)", + "youtube": "YouTube", + "website": "Website" + }, + "fr": { + "facebook": "Facebook", + "instagram": "Instagram", + "linkedin": "LinkedIn", + "reddit": "Reddit", + "tiktok": "TikTok", + "x": "X (Twitter)", + "youtube": "YouTube", + "website": "Site web" + } } \ No newline at end of file diff --git a/frontend/src/views/creators/BannerEditor.vue b/frontend/src/views/creators/BannerEditor.vue index b35f7b0..7073f6b 100644 --- a/frontend/src/views/creators/BannerEditor.vue +++ b/frontend/src/views/creators/BannerEditor.vue @@ -1,375 +1,377 @@  { - "en": { - "title": "Banner Editor", - "description": "Upload or edit your profile banner image. The recommended size is 1024x256 pixels (4:1 ratio).", - "chooseImage": "Choose an image", - "clickToEdit": "Click to edit", - "uploading": "Uploading" - }, - "fr": { - "title": "Éditeur de bannière", - "description": "Téléchargez ou modifiez votre image de bannière de profil. La taille recommandée est de 1024x256 pixels (ratio 4:1).", - "chooseImage": "Choisir une image", - "clickToEdit": "Cliquez pour modifier", - "uploading": "Téléchargement" - }, - "es": { - "title": "Editor de banner", - "description": "Sube o edita tu imagen de banner de perfil. El tamaño recomendado es de 1024x256 píxeles (ratio 4:1).", - "chooseImage": "Elegir una imagen", - "clickToEdit": "Haga clic para editar", - "uploading": "Subiendo" - } + "en": { + "title": "Banner Editor", + "description": "Upload or edit your profile banner image. The recommended size is 1024x256 pixels (4:1 ratio).", + "chooseImage": "Choose an image", + "clickToEdit": "Click to edit", + "uploading": "Uploading" + }, + "fr": { + "title": "Éditeur de bannière", + "description": "Téléchargez ou modifiez votre image de bannière de profil. La taille recommandée est de 1024x256 pixels (ratio 4:1).", + "chooseImage": "Choisir une image", + "clickToEdit": "Cliquez pour modifier", + "uploading": "Téléchargement" + } } diff --git a/frontend/src/views/creators/CreateCreator.vue b/frontend/src/views/creators/CreateCreator.vue index 3f6515d..943820b 100644 --- a/frontend/src/views/creators/CreateCreator.vue +++ b/frontend/src/views/creators/CreateCreator.vue @@ -1,144 +1,131 @@  { - "en": { - "title": "Create your Hutopy", - "cancel": "Cancel", - "create": "Create my page", - "errors": { - "unexpected": "An unexpected error occurred" + "en": { + "title": "Create your Hutopy", + "cancel": "Cancel", + "create": "Create my page", + "errors": { + "unexpected": "An unexpected error occurred" + } + }, + "fr": { + "title": "Créez votre Hutopy", + "cancel": "Annuler", + "create": "Créer ma page", + "errors": { + "unexpected": "Une erreur inattendue s'est produite" + } } - }, - "fr": { - "title": "Créez votre Hutopy", - "cancel": "Annuler", - "create": "Créer ma page", - "errors": { - "unexpected": "Une erreur inattendue s'est produite" - } - }, - "es": { - "title": "Crea tu Hutopy", - "cancel": "Cancelar", - "create": "Crear mi página", - "errors": { - "unexpected": "Se produjo un error inesperado" - } - } } diff --git a/frontend/src/views/creators/CreatorHome.vue b/frontend/src/views/creators/CreatorHome.vue index 5a7d298..8500735 100644 --- a/frontend/src/views/creators/CreatorHome.vue +++ b/frontend/src/views/creators/CreatorHome.vue @@ -1,64 +1,69 @@ - - - diff --git a/frontend/src/views/creators/CreatorLayout.vue b/frontend/src/views/creators/CreatorLayout.vue index 47a9e55..f3517b8 100644 --- a/frontend/src/views/creators/CreatorLayout.vue +++ b/frontend/src/views/creators/CreatorLayout.vue @@ -141,26 +141,6 @@ "goHome": "Aller à l'accueil" } } - }, - "es": { - "creator": { - "layout": { - "deletion": { - "pending": "Esta página de creador está pendiente de eliminación" - } - }, - "notFound": { - "title": "Creador No Encontrado", - "message": "El creador '{creator}' no existe o puede haber sido eliminado.", - "goHome": "Ir al Inicio", - "goBack": "Volver" - }, - "error": { - "title": "Algo Salió Mal", - "message": "Tenemos problemas para cargar esta página de creador. Por favor, inténtalo de nuevo más tarde.", - "goHome": "Ir al Inicio" - } - } } } diff --git a/frontend/src/views/creators/CreatorLogo.vue b/frontend/src/views/creators/CreatorLogo.vue index 2d28d15..37c6d65 100644 --- a/frontend/src/views/creators/CreatorLogo.vue +++ b/frontend/src/views/creators/CreatorLogo.vue @@ -1,78 +1,92 @@  { - "en": { - "logoAlt": "Creator logo", - "editLogo": "Edit logo" - }, - "fr": { - "logoAlt": "Logo du créateur", - "editLogo": "Modifier le logo" - }, - "es": { - "logoAlt": "Logo del creador", - "editLogo": "Editar logo" - } + "en": { + "logoAlt": "Creator logo", + "editLogo": "Edit logo" + }, + "fr": { + "logoAlt": "Logo du créateur", + "editLogo": "Modifier le logo" + } } diff --git a/frontend/src/views/creators/CreatorLogoEditor.vue b/frontend/src/views/creators/CreatorLogoEditor.vue index d6ea1b3..ee53695 100644 --- a/frontend/src/views/creators/CreatorLogoEditor.vue +++ b/frontend/src/views/creators/CreatorLogoEditor.vue @@ -1,397 +1,398 @@  { - "en": { - "logoTitle": "Edit Logo", - "logoDescription": "Choose a logo image for your creator page. The image will be cropped to a circle.", - "chooseImage": "Choose Image", - "clickToEdit": "Click to edit", - "uploading": "Uploading" - }, - "fr": { - "logoTitle": "Modifier le logo", - "logoDescription": "Choisissez une image de logo pour votre page de créateur. L'image sera recadrée en cercle.", - "chooseImage": "Choisir une image", - "clickToEdit": "Cliquez pour modifier", - "uploading": "Téléchargement" - }, - "es": { - "logoTitle": "Editar logo", - "logoDescription": "Elige una imagen de logo para tu página de creador. La imagen se recortará en círculo.", - "chooseImage": "Elegir imagen", - "clickToEdit": "Haz clic para editar", - "uploading": "Subiendo" - } + "en": { + "logoTitle": "Edit Logo", + "logoDescription": "Choose a logo image for your creator page. The image will be cropped to a circle.", + "chooseImage": "Choose Image", + "clickToEdit": "Click to edit", + "uploading": "Uploading" + }, + "fr": { + "logoTitle": "Modifier le logo", + "logoDescription": "Choisissez une image de logo pour votre page de créateur. L'image sera recadrée en cercle.", + "chooseImage": "Choisir une image", + "clickToEdit": "Cliquez pour modifier", + "uploading": "Téléchargement" + } } - diff --git a/frontend/src/views/creators/DonationButton.vue b/frontend/src/views/creators/DonationButton.vue index 42d9eee..8c6b50e 100644 --- a/frontend/src/views/creators/DonationButton.vue +++ b/frontend/src/views/creators/DonationButton.vue @@ -1,83 +1,74 @@  { - "en": { - "creator": { - "donation": { - "isupport": "I Support" - } + "en": { + "creator": { + "donation": { + "isupport": "I Support" + } + } + }, + "fr": { + "creator": { + "donation": { + "isupport": "Je Soutiens" + } + } } - }, - "fr": { - "creator": { - "donation": { - "isupport": "Je Soutiens" - } - } - }, - "es": { - "creator": { - "donation": { - "isupport": "Apoyo" - } - } - } } diff --git a/frontend/src/views/creators/DonationForm.vue b/frontend/src/views/creators/DonationForm.vue index 3dd7f4d..00c13fe 100644 --- a/frontend/src/views/creators/DonationForm.vue +++ b/frontend/src/views/creators/DonationForm.vue @@ -183,24 +183,6 @@ } } } - }, - "es": { - "common": { - "cancel": "Cancelar" - }, - "creator": { - "donation": { - "isupport": "Apoyo", - "amount": "Cantidad ($)", - "message": "Mensaje (opcional)", - "send": "Enviar", - "processing": "Procesando...", - "errors": { - "payment": "Ocurrió un error durante el procesamiento del pago", - "invalidAmount": "Por favor ingrese un monto válido" - } - } - } } } - \ No newline at end of file + diff --git a/frontend/src/views/creators/NameEditor.vue b/frontend/src/views/creators/NameEditor.vue index 898b1df..6e5b2ab 100644 --- a/frontend/src/views/creators/NameEditor.vue +++ b/frontend/src/views/creators/NameEditor.vue @@ -1,220 +1,223 @@  { - "en": { - "creator": { - "name": { - "label": "Your creator handle", - "errors": { - "required": "Creator handle is required", - "invalid": "Only letters, numbers, and hyphens are allowed" + "en": { + "creator": { + "name": { + "label": "Your creator handle", + "errors": { + "required": "Creator handle is required", + "invalid": "Only letters, numbers, and hyphens are allowed" + } + } } - } - } - }, - "fr": { - "creator": { - "name": { - "label": "Votre identifiant de créateur", - "errors": { - "required": "L'identifiant est requis", - "invalid": "Seules les lettres, chiffres et tirets sont autorisés" + }, + "fr": { + "creator": { + "name": { + "label": "Votre identifiant de créateur", + "errors": { + "required": "L'identifiant est requis", + "invalid": "Seules les lettres, chiffres et tirets sont autorisés" + } + } } - } } - }, - "es": { - "creator": { - "name": { - "label": "Tu identificador de creador", - "errors": { - "required": "El identificador es obligatorio", - "invalid": "Solo se permiten letras, números y guiones" - } - } - } - } } diff --git a/frontend/src/views/creators/NameTitle.vue b/frontend/src/views/creators/NameTitle.vue index 64aaf37..e4a8d03 100644 --- a/frontend/src/views/creators/NameTitle.vue +++ b/frontend/src/views/creators/NameTitle.vue @@ -4,37 +4,36 @@ {{ brandingStore.value.name }} -
+
{{ brandingStore.value.title }} - + { - "en": { - "verified": "Verified Account" - }, - "fr": { - "verified": "Compte vérifié" - }, - "es": { - "verified": "Cuenta verificada" - } + "en": { + "verified": "Verified Account" + }, + "fr": { + "verified": "Compte vérifié" + } } - \ No newline at end of file + diff --git a/frontend/src/views/creators/PaymentCompleted.vue b/frontend/src/views/creators/PaymentCompleted.vue index b5e7072..97715a3 100644 --- a/frontend/src/views/creators/PaymentCompleted.vue +++ b/frontend/src/views/creators/PaymentCompleted.vue @@ -75,13 +75,6 @@ "usernameDefault": "Le créateur", "receipt": "Un reçu a été envoyé à votre email.", "returnToCreator": "Retourner à la page du créateur" - }, - "es": { - "title": "¡{creatorName} te agradece!", - "message": "Su pago ha sido procesado con éxito.", - "usernameDefault": "El creador", - "receipt": "Se ha enviado un recibo a su correo electrónico.", - "returnToCreator": "Volver a la página del creador" } } diff --git a/frontend/src/views/creators/PaymentFailed.vue b/frontend/src/views/creators/PaymentFailed.vue index 44668eb..f7e2a5d 100644 --- a/frontend/src/views/creators/PaymentFailed.vue +++ b/frontend/src/views/creators/PaymentFailed.vue @@ -46,12 +46,6 @@ "message": "Nous n'avons pas pu traiter votre paiement.", "retry": "Réessayer", "returnToCreator": "Retourner à la page du créateur" - }, - "es": { - "title": "Pago fallido", - "message": "No pudimos procesar su pago.", - "retry": "Intentar de nuevo", - "returnToCreator": "Volver a la página del creador" } } diff --git a/frontend/src/views/main/Footer.vue b/frontend/src/views/main/Footer.vue index 1eede27..d33fd8b 100644 --- a/frontend/src/views/main/Footer.vue +++ b/frontend/src/views/main/Footer.vue @@ -1,134 +1,139 @@  { - "en": { - "footer": { - "helpandcontact": "Help & Contact", - "faq": "FAQ", - "creatorguide": "Creator Guide", - "termsandconditions": "Terms & Conditions", - "contentpolicy": "Content Policy", - "about": "About", - "pricing": "Pricing", - "allRightsReserved": "All Rights Reserved" + "en": { + "footer": { + "helpandcontact": "Help & Contact", + "faq": "FAQ", + "creatorguide": "Creator Guide", + "termsandconditions": "Terms & Conditions", + "contentpolicy": "Content Policy", + "about": "About", + "pricing": "Pricing", + "allRightsReserved": "All Rights Reserved" + } + }, + "fr": { + "footer": { + "helpandcontact": "Aide & Contact", + "faq": "FAQ", + "creatorguide": "Guide du Créateur", + "termsandconditions": "Conditions Générales", + "contentpolicy": "Politique de Contenu", + "about": "À Propos", + "pricing": "Tarifs", + "allRightsReserved": "Tous Droits Réservés" + } } - }, - "fr": { - "footer": { - "helpandcontact": "Aide & Contact", - "faq": "FAQ", - "creatorguide": "Guide du Créateur", - "termsandconditions": "Conditions Générales", - "contentpolicy": "Politique de Contenu", - "about": "À Propos", - "pricing": "Tarifs", - "allRightsReserved": "Tous Droits Réservés" - } - }, - "es": { - "footer": { - "helpandcontact": "Ayuda y Contacto", - "faq": "Preguntas Frecuentes", - "creatorguide": "Guía del Creador", - "termsandconditions": "Términos y Condiciones", - "contentpolicy": "Política de Contenido", - "about": "Acerca de", - "pricing": "Precios", - "allRightsReserved": "Todos los Derechos Reservados" - } - } } - \ No newline at end of file + diff --git a/frontend/src/views/main/Landing.vue b/frontend/src/views/main/Landing.vue index 01d1ada..d49200d 100644 --- a/frontend/src/views/main/Landing.vue +++ b/frontend/src/views/main/Landing.vue @@ -1,297 +1,309 @@ { - "en": { - "inscription": "Sign Up", - "createPage": "Create Page", - "support": "Support", - "creators": "Creators", - "projects": "Projects", - "love": "Love", - "supportText": "Support", - "supportDescription": "Support your favorite creators and help them grow. Your contributions make a real difference in their creative journey.", - "create": "Create", - "creatorDescription": "Create your own page and start your creative journey. Share your passion with the world and build your community.", - "signup": "Sign Up", - "whatIsHutopy": "What is Hutopy?", - "hutopyDescription": "Hutopy is a platform that connects creators with their audience. We provide tools and features to help creators monetize their content and build their community.", - "hutopyValues": "Our values are centered around creativity, community, and support. We believe in empowering creators to pursue their passions and build sustainable careers." - }, - "fr": { - "inscription": "S'inscrire", - "createPage": "Créer une Page", - "support": "Soutenir", - "creators": "Créateurs", - "projects": "Projets", - "love": "Passion", - "supportText": "Soutenir", - "supportDescription": "Soutenez vos créateurs préférés et aidez-les à grandir. Vos contributions font une réelle différence dans leur parcours créatif.", - "create": "Créer", - "creatorDescription": "Créez votre propre page et commencez votre parcours créatif. Partagez votre passion avec le monde et construisez votre communauté.", - "signup": "S'inscrire", - "whatIsHutopy": "Qu'est-ce que Hutopy ?", - "hutopyDescription": "Hutopy est une plateforme qui connecte les créateurs avec leur audience. Nous fournissons des outils et des fonctionnalités pour aider les créateurs à monétiser leur contenu et à construire leur communauté.", - "hutopyValues": "Nos valeurs sont centrées sur la créativité, la communauté et le soutien. Nous croyons en l'autonomisation des créateurs pour poursuivre leurs passions et construire des carrières durables." - }, - "es": { - "inscription": "Registrarse", - "createPage": "Crear Página", - "support": "Apoyar", - "creators": "Creadores", - "projects": "Proyectos", - "love": "Pasión", - "supportText": "Apoyar", - "supportDescription": "Apoya a tus creadores favoritos y ayúdales a crecer. Tus contribuciones hacen una diferencia real en su viaje creativo.", - "create": "Crear", - "creatorDescription": "Crea tu propia página y comienza tu viaje creativo. Comparte tu pasión con el mundo y construye tu comunidad.", - "signup": "Registrarse", - "whatIsHutopy": "¿Qué es Hutopy?", - "hutopyDescription": "Hutopy es una plataforma que conecta a los creadores con su audiencia. Proporcionamos herramientas y funciones para ayudar a los creadores a monetizar su contenido y construir su comunidad.", - "hutopyValues": "Nuestros valores se centran en la creatividad, la comunidad y el apoyo. Creemos en empoderar a los creadores para perseguir sus pasiones y construir carreras sostenibles." - } + "en": { + "inscription": "Sign Up", + "createPage": "Create Page", + "support": "Support", + "creators": "Creators", + "projects": "Projects", + "love": "Love", + "supportText": "Support", + "supportDescription": "Support your favorite creators and help them grow. Your contributions make a real difference in their creative journey.", + "create": "Create", + "creatorDescription": "Create your own page and start your creative journey. Share your passion with the world and build your community.", + "signup": "Sign Up", + "whatIsHutopy": "What is Hutopy?", + "hutopyDescription": "Hutopy is a platform that connects creators with their audience. We provide tools and features to help creators monetize their content and build their community.", + "hutopyValues": "Our values are centered around creativity, community, and support. We believe in empowering creators to pursue their passions and build sustainable careers." + }, + "fr": { + "inscription": "S'inscrire", + "createPage": "Créer une Page", + "support": "Soutenir", + "creators": "Créateurs", + "projects": "Projets", + "love": "Passion", + "supportText": "Soutenir", + "supportDescription": "Soutenez vos créateurs préférés et aidez-les à grandir. Vos contributions font une réelle différence dans leur parcours créatif.", + "create": "Créer", + "creatorDescription": "Créez votre propre page et commencez votre parcours créatif. Partagez votre passion avec le monde et construisez votre communauté.", + "signup": "S'inscrire", + "whatIsHutopy": "Qu'est-ce que Hutopy ?", + "hutopyDescription": "Hutopy est une plateforme qui connecte les créateurs avec leur audience. Nous fournissons des outils et des fonctionnalités pour aider les créateurs à monétiser leur contenu et à construire leur communauté.", + "hutopyValues": "Nos valeurs sont centrées sur la créativité, la communauté et le soutien. Nous croyons en l'autonomisation des créateurs pour poursuivre leurs passions et construire des carrières durables." + } } - \ No newline at end of file + diff --git a/frontend/src/views/main/SideBar.vue b/frontend/src/views/main/SideBar.vue index 13c8ce0..3ec6712 100644 --- a/frontend/src/views/main/SideBar.vue +++ b/frontend/src/views/main/SideBar.vue @@ -16,7 +16,7 @@ const authStore = useAuthStore(); function toggleLanguage() { - const languages = ['fr', 'en', 'es']; + const languages = ['fr', 'en']; const currentIndex = languages.indexOf(locale.value); const nextIndex = (currentIndex + 1) % languages.length; languageStore.setLocale(languages[nextIndex]); @@ -193,14 +193,6 @@ "signIn": "Se Connecter", "signOut": "Se Déconnecter" } - }, - "es": { - "sidebar": { - "myPage": "Mi Página", - "myProfile": "Mi Perfil", - "signIn": "Iniciar Sesión", - "signOut": "Cerrar Sesión" - } } } diff --git a/frontend/src/views/profile/ProfilePage.vue b/frontend/src/views/profile/ProfilePage.vue index b79b1c1..45abd63 100644 --- a/frontend/src/views/profile/ProfilePage.vue +++ b/frontend/src/views/profile/ProfilePage.vue @@ -948,39 +948,6 @@ "phoneNumber": "Numéro de téléphone", "title": "Titre", "removeStripe": "Retirer Stripe" - }, - "es": { - "personalInfo": "Información Personal", - "fullName": "Nombre Completo", - "alias": "Alias", - "email": "Correo Electrónico", - "changePassword": "Actualizar contraseña", - "creatorInfo": "Información del Creador", - "dangerZone": "Zona de Peligro", - "dangerZoneWarning": "Las acciones a continuación pueden tener impactos significativos en tu página de creador. Por favor, procede con precaución.", - "deleteWarning": "¿Estás seguro de que quieres eliminar tu página de creador? Esta acción no se puede deshacer.", - "restoreWarning": "¿Estás seguro de que quieres restaurar tu página de creador? Esto hará que tu página sea visible nuevamente.", - "deleteCreatorPage": "Eliminar Página de Creador", - "restoreCreatorPage": "Restaurar Página de Creador", - "stripeAccountId": "ID de Cuenta Stripe", - "socialNetworks": "Redes Sociales", - "handle": "Identificador del creador", - "qrCode": "Código QR", - "qrCodeDescription": "¡Imprime este código QR para compartir tu Hutopy con el mundo! Perfecto para tarjetas de presentación, redes sociales y materiales promocionales.", - "downloadQRCode": "Descargar Código QR", - "payment-information": "Información de Pago", - "stripeStatus": "Estado de Stripe", - "configured": "Configurado", - "notConfigured": "No Configurado", - "needsMoreInfo": "Requiere Más Información", - "pendingVerification": "Verificación Pendiente", - "continueStripeSetup": "Continuar Configuración de Stripe", - "reviewStripe": "Revisar Stripe", - "notSet": "No Establecido", - "configureStripe": "Connectar Stripe", - "phoneNumber": "Número de teléfono", - "title": "Título", - "removeStripe": "Eliminar Stripe" } } diff --git a/frontend/src/views/profile/account/AliasDialog.vue b/frontend/src/views/profile/account/AliasDialog.vue index abf3e59..5f23082 100644 --- a/frontend/src/views/profile/account/AliasDialog.vue +++ b/frontend/src/views/profile/account/AliasDialog.vue @@ -1,66 +1,58 @@  { - "en": { - "title": "Alias", - "label": "Your alias" - }, - "fr": { - "title": "Alias", - "label": "Votre alias" - }, - "es": { - "title": "Alias", - "label": "Tu alias" - } + "en": { + "title": "Alias", + "label": "Your alias" + }, + "fr": { + "title": "Alias", + "label": "Votre alias" + } } - - diff --git a/frontend/src/views/profile/account/ChangePasswordDialog.vue b/frontend/src/views/profile/account/ChangePasswordDialog.vue index 652761f..b2517d4 100644 --- a/frontend/src/views/profile/account/ChangePasswordDialog.vue +++ b/frontend/src/views/profile/account/ChangePasswordDialog.vue @@ -1,162 +1,177 @@ { - "en": { - "changePassword": "Update Password", - "newPassword": "New Password", - "confirmPassword": "Confirm New Password", - "passwordRequirements": "Password must be at least 8 characters", - "passwordDescription": "Updating your password allows you to log in directly with your email and password.", - "save": "Save", - "cancel": "Cancel", - "passwordsDoNotMatch": "New passwords do not match", - "passwordTooShort": "Password must be at least 8 characters long", - "passwordUpdateFailed": "Failed to update password. Please try again." - }, - "fr": { - "changePassword": "Modifier le mot de passe", - "newPassword": "Nouveau mot de passe", - "confirmPassword": "Confirmer le nouveau mot de passe", - "passwordRequirements": "Le mot de passe doit comporter au moins 8 caractères", - "passwordDescription": "La modification de votre mot de passe vous permet de vous connecter directement avec votre email et mot de passe.", - "save": "Enregistrer", - "cancel": "Annuler", - "passwordsDoNotMatch": "Les nouveaux mots de passe ne correspondent pas", - "passwordTooShort": "Le mot de passe doit comporter au moins 8 caractères", - "passwordUpdateFailed": "Échec de la mise à jour du mot de passe. Veuillez réessayer." - }, - "es": { - "changePassword": "Actualizar contraseña", - "newPassword": "Nueva contraseña", - "confirmPassword": "Confirmar nueva contraseña", - "passwordRequirements": "La contraseña debe tener al menos 8 caracteres", - "passwordDescription": "La actualización de su contraseña le permite iniciar sesión directamente con su correo electrónico y contraseña.", - "save": "Guardar", - "cancel": "Cancelar", - "passwordsDoNotMatch": "Las nuevas contraseñas no coinciden", - "passwordTooShort": "La contraseña debe tener al menos 8 caracteres", - "passwordUpdateFailed": "Error al actualizar la contraseña. Por favor, inténtelo de nuevo." - } + "en": { + "changePassword": "Update Password", + "newPassword": "New Password", + "confirmPassword": "Confirm New Password", + "passwordRequirements": "Password must be at least 8 characters", + "passwordDescription": "Updating your password allows you to log in directly with your email and password.", + "save": "Save", + "cancel": "Cancel", + "passwordsDoNotMatch": "New passwords do not match", + "passwordTooShort": "Password must be at least 8 characters long", + "passwordUpdateFailed": "Failed to update password. Please try again." + }, + "fr": { + "changePassword": "Modifier le mot de passe", + "newPassword": "Nouveau mot de passe", + "confirmPassword": "Confirmer le nouveau mot de passe", + "passwordRequirements": "Le mot de passe doit comporter au moins 8 caractères", + "passwordDescription": "La modification de votre mot de passe vous permet de vous connecter directement avec votre email et mot de passe.", + "save": "Enregistrer", + "cancel": "Annuler", + "passwordsDoNotMatch": "Les nouveaux mots de passe ne correspondent pas", + "passwordTooShort": "Le mot de passe doit comporter au moins 8 caractères", + "passwordUpdateFailed": "Échec de la mise à jour du mot de passe. Veuillez réessayer." + } } diff --git a/frontend/src/views/profile/account/EmailDialog.vue b/frontend/src/views/profile/account/EmailDialog.vue index f691c2a..0056d71 100644 --- a/frontend/src/views/profile/account/EmailDialog.vue +++ b/frontend/src/views/profile/account/EmailDialog.vue @@ -1,82 +1,78 @@  { - "en": { - "title": "Change your Email", - "label": "Your email" - }, - "fr": { - "title": "Changez votre Courriel", - "label": "Votre email" - }, - "es": { - "title": "Cambia tu correo electrónico", - "label": "Tu correo electrónico" - } + "en": { + "title": "Change your Email", + "label": "Your email" + }, + "fr": { + "title": "Changez votre Courriel", + "label": "Votre email" + } } - - diff --git a/frontend/src/views/profile/account/FullnameDialog.vue b/frontend/src/views/profile/account/FullnameDialog.vue index 907b3eb..059c567 100644 --- a/frontend/src/views/profile/account/FullnameDialog.vue +++ b/frontend/src/views/profile/account/FullnameDialog.vue @@ -1,70 +1,69 @@  { - "en": { - "title": "Full Name", - "firstname": "First Name", - "lastname": "Last Name" - }, - "fr": { - "title": "Nom complet", - "firstname": "Prénom", - "lastname": "Nom" - }, - "es": { - "title": "Nombre completo", - "firstname": "Nombre", - "lastname": "Apellido" - } + "en": { + "title": "Full Name", + "firstname": "First Name", + "lastname": "Last Name" + }, + "fr": { + "title": "Nom complet", + "firstname": "Prénom", + "lastname": "Nom" + } } \ No newline at end of file diff --git a/frontend/src/views/profile/creators/ChangeEmailDialog.vue b/frontend/src/views/profile/creators/ChangeEmailDialog.vue index 972b63b..0e981b5 100644 --- a/frontend/src/views/profile/creators/ChangeEmailDialog.vue +++ b/frontend/src/views/profile/creators/ChangeEmailDialog.vue @@ -1,174 +1,164 @@ { - "en": { - "changeEmail": "Change Email", - "email": "Email", - "save": "Save", - "cancel": "Cancel", - "validation": { - "emailRequired": "Email is required", - "emailInvalid": "Please enter a valid email address" + "en": { + "changeEmail": "Change Email", + "email": "Email", + "save": "Save", + "cancel": "Cancel", + "validation": { + "emailRequired": "Email is required", + "emailInvalid": "Please enter a valid email address" + }, + "errors": { + "unexpected": "An unexpected error occurred" + } }, - "errors": { - "unexpected": "An unexpected error occurred" + "fr": { + "changeEmail": "Modifier l'email", + "email": "Email", + "save": "Enregistrer", + "cancel": "Annuler", + "validation": { + "emailRequired": "L'email est requis", + "emailInvalid": "Veuillez entrer une adresse email valide" + }, + "errors": { + "unexpected": "Une erreur inattendue s'est produite" + } } - }, - "fr": { - "changeEmail": "Modifier l'email", - "email": "Email", - "save": "Enregistrer", - "cancel": "Annuler", - "validation": { - "emailRequired": "L'email est requis", - "emailInvalid": "Veuillez entrer une adresse email valide" - }, - "errors": { - "unexpected": "Une erreur inattendue s'est produite" - } - }, - "es": { - "changeEmail": "Cambiar correo electrónico", - "email": "Correo electrónico", - "save": "Guardar", - "cancel": "Cancelar", - "validation": { - "emailRequired": "El correo electrónico es obligatorio", - "emailInvalid": "Por favor ingrese una dirección de correo electrónico válida" - }, - "errors": { - "unexpected": "Se produjo un error inesperado" - } - } } \ No newline at end of file diff --git a/frontend/src/views/profile/creators/ChangeNameDialog.vue b/frontend/src/views/profile/creators/ChangeNameDialog.vue index b05f7a6..643165e 100644 --- a/frontend/src/views/profile/creators/ChangeNameDialog.vue +++ b/frontend/src/views/profile/creators/ChangeNameDialog.vue @@ -1,87 +1,82 @@  - + { - "en": { - "title": "Change Name", - "label": "Your name" - }, - "fr": { - "title": "Modifier le nom", - "label": "Votre nom" - }, - "es": { - "title": "Cambiar nombre", - "label": "Tu nombre" - } + "en": { + "title": "Change Name", + "label": "Your name" + }, + "fr": { + "title": "Modifier le nom", + "label": "Votre nom" + } } diff --git a/frontend/src/views/profile/creators/ChangePhoneDialog.vue b/frontend/src/views/profile/creators/ChangePhoneDialog.vue index 7a2e428..f89d010 100644 --- a/frontend/src/views/profile/creators/ChangePhoneDialog.vue +++ b/frontend/src/views/profile/creators/ChangePhoneDialog.vue @@ -1,246 +1,239 @@ { - "en": { - "changePhoneNumber": "Change Phone Number", - "phoneNumber": "Phone Number", - "phonePlaceholder": "(555) 123-4567", - "save": "Save", - "cancel": "Cancel", - "validation": { - "phoneRequired": "Phone number is required", - "phoneInvalid": "Please enter a complete 10-digit phone number" + "en": { + "changePhoneNumber": "Change Phone Number", + "phoneNumber": "Phone Number", + "phonePlaceholder": "(555) 123-4567", + "save": "Save", + "cancel": "Cancel", + "validation": { + "phoneRequired": "Phone number is required", + "phoneInvalid": "Please enter a complete 10-digit phone number" + }, + "errors": { + "unexpected": "An unexpected error occurred" + } }, - "errors": { - "unexpected": "An unexpected error occurred" + "fr": { + "changePhoneNumber": "Modifier le numéro de téléphone", + "phoneNumber": "Numéro de téléphone", + "phonePlaceholder": "(555) 123-4567", + "save": "Enregistrer", + "cancel": "Annuler", + "validation": { + "phoneRequired": "Le numéro de téléphone est requis", + "phoneInvalid": "Veuillez entrer un numéro de téléphone complet à 10 chiffres" + }, + "errors": { + "unexpected": "Une erreur inattendue s'est produite" + } } - }, - "fr": { - "changePhoneNumber": "Modifier le numéro de téléphone", - "phoneNumber": "Numéro de téléphone", - "phonePlaceholder": "(555) 123-4567", - "save": "Enregistrer", - "cancel": "Annuler", - "validation": { - "phoneRequired": "Le numéro de téléphone est requis", - "phoneInvalid": "Veuillez entrer un numéro de téléphone complet à 10 chiffres" - }, - "errors": { - "unexpected": "Une erreur inattendue s'est produite" - } - }, - "es": { - "changePhoneNumber": "Cambiar número de teléfono", - "phoneNumber": "Número de teléfono", - "phonePlaceholder": "(555) 123-4567", - "save": "Guardar", - "cancel": "Cancelar", - "validation": { - "phoneRequired": "El número de teléfono es obligatorio", - "phoneInvalid": "Por favor ingrese un número de teléfono completo de 10 dígitos" - }, - "errors": { - "unexpected": "Se produjo un error inesperado" - } - } } \ No newline at end of file diff --git a/frontend/src/views/profile/creators/ChangeSlugDialog.vue b/frontend/src/views/profile/creators/ChangeSlugDialog.vue index 4d3d3a8..080ccf9 100644 --- a/frontend/src/views/profile/creators/ChangeSlugDialog.vue +++ b/frontend/src/views/profile/creators/ChangeSlugDialog.vue @@ -1,119 +1,120 @@ - + { - "en": { - "title": "Change Creator Handle" - }, - "fr": { - "title": "Modifier l'identifiant du créateur" - }, - "es": { - "title": "Cambiar identificador del creador" - } + "en": { + "title": "Change Creator Handle" + }, + "fr": { + "title": "Modifier l'identifiant du créateur" + } } - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/views/profile/creators/ChangeStripeIdDialog.vue b/frontend/src/views/profile/creators/ChangeStripeIdDialog.vue index e473522..80fc324 100644 --- a/frontend/src/views/profile/creators/ChangeStripeIdDialog.vue +++ b/frontend/src/views/profile/creators/ChangeStripeIdDialog.vue @@ -1,86 +1,84 @@ - + { - "en": { - "title": "Change Stripe ID", - "label": "Your Stripe ID" - }, - "fr": { - "title": "Modifier l'ID Stripe", - "label": "Votre ID Stripe" - }, - "es": { - "title": "Cambiar ID de Stripe", - "label": "Tu ID de Stripe" - } + "en": { + "title": "Change Stripe ID", + "label": "Your Stripe ID" + }, + "fr": { + "title": "Modifier l'ID Stripe", + "label": "Votre ID Stripe" + } } diff --git a/frontend/src/views/profile/creators/ChangeTitleDialog.vue b/frontend/src/views/profile/creators/ChangeTitleDialog.vue index fcb7122..5682694 100644 --- a/frontend/src/views/profile/creators/ChangeTitleDialog.vue +++ b/frontend/src/views/profile/creators/ChangeTitleDialog.vue @@ -1,88 +1,82 @@  - + { - "en": { - "title": "Change Title", - "label": "Your title" - }, - "fr": { - "title": "Modifier le titre", - "label": "Votre titre" - }, - "es": { - "title": "Cambiar título", - "label": "Tu título" - } + "en": { + "title": "Change Title", + "label": "Your title" + }, + "fr": { + "title": "Modifier le titre", + "label": "Votre titre" + } } diff --git a/frontend/src/views/profile/creators/SocialsDialog.vue b/frontend/src/views/profile/creators/SocialsDialog.vue index 41379bd..de930e3 100644 --- a/frontend/src/views/profile/creators/SocialsDialog.vue +++ b/frontend/src/views/profile/creators/SocialsDialog.vue @@ -1,210 +1,200 @@  { - "en": { - "title": "Social Media Links" - }, - "fr": { - "title": "Liens des réseaux sociaux" - }, - "es": { - "title": "Enlaces de redes sociales" - } + "en": { + "title": "Social Media Links" + }, + "fr": { + "title": "Liens des réseaux sociaux" + } } From 9da862b629346d38f811eccc49a5899ae3c72758 Mon Sep 17 00:00:00 2001 From: Jonathan Bourdon Date: Tue, 26 Aug 2025 16:35:48 -0400 Subject: [PATCH 2/3] refactor(ui): simplify layout by introducing an unified site-bar --- frontend/src/App.vue | 84 +++++++++---------- .../views/main/{SideBar.vue => SiteBar.vue} | 18 ++-- 2 files changed, 46 insertions(+), 56 deletions(-) rename frontend/src/views/main/{SideBar.vue => SiteBar.vue} (92%) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d002972..3ac1351 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,57 +1,53 @@ diff --git a/frontend/src/views/main/SideBar.vue b/frontend/src/views/main/SiteBar.vue similarity index 92% rename from frontend/src/views/main/SideBar.vue rename to frontend/src/views/main/SiteBar.vue index 3ec6712..9277ef8 100644 --- a/frontend/src/views/main/SideBar.vue +++ b/frontend/src/views/main/SiteBar.vue @@ -4,12 +4,10 @@ import { useCreatorProfileStore } from '@/stores/creatorProfileStore.js'; import { useUserProfileStore } from '@/stores/userProfileStore.js'; import { useLanguageStore } from '@/stores/languageStore.js'; - import { useRoute } from 'vue-router'; import { mdiAccount, mdiFileAccountOutline, mdiLogin, mdiLogout, mdiTranslateVariant } from '@mdi/js'; const { locale, t } = useI18n(); const languageStore = useLanguageStore(); - const route = useRoute(); const userProfileStore = useUserProfileStore(); const creatorProfileStore = useCreatorProfileStore(); @@ -117,23 +115,20 @@