From 9c1fe714897a2c7eb7faf71a63965c801fa9190b Mon Sep 17 00:00:00 2001 From: Pavly Date: Fri, 20 Jun 2025 23:21:48 +0300 Subject: [PATCH] Add Spanish and French languages --- .../Components/navbar/navbar.component.html | 2 + Interface/src/app/app.component.html | 2 +- .../src/app/services/language.service.ts | 6 +- Interface/src/assets/i18n/es.json | 139 ++++++++++++++++++ Interface/src/assets/i18n/fr.json | 139 ++++++++++++++++++ 5 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 Interface/src/assets/i18n/es.json create mode 100644 Interface/src/assets/i18n/fr.json diff --git a/Interface/src/Components/navbar/navbar.component.html b/Interface/src/Components/navbar/navbar.component.html index d2554c1b..fdc6a11f 100644 --- a/Interface/src/Components/navbar/navbar.component.html +++ b/Interface/src/Components/navbar/navbar.component.html @@ -15,6 +15,8 @@
  • {{ 'HOME' | translate }}
  • diff --git a/Interface/src/app/app.component.html b/Interface/src/app/app.component.html index 94ddf5db..dd8e14f4 100644 --- a/Interface/src/app/app.component.html +++ b/Interface/src/app/app.component.html @@ -6,7 +6,7 @@ {{ title }} -
    +
    diff --git a/Interface/src/app/services/language.service.ts b/Interface/src/app/services/language.service.ts index a7cb77b4..bb88b263 100644 --- a/Interface/src/app/services/language.service.ts +++ b/Interface/src/app/services/language.service.ts @@ -10,14 +10,16 @@ import { TranslateService } from '@ngx-translate/core'; @Injectable({ providedIn: 'root' }) export class LanguageService { private isBrowser: boolean; + private rtl_languages: Set; constructor( private translate: TranslateService, @Inject(PLATFORM_ID) private platformId: object ) { this.isBrowser = isPlatformBrowser(platformId); + this.rtl_languages = new Set(['ar']); - translate.addLangs(['en', 'ar']); + translate.addLangs(['en', 'ar', 'fr', 'es']); translate.setDefaultLang('en'); const savedLang = this.isBrowser ? localStorage.getItem('lang') : 'en'; @@ -39,7 +41,7 @@ export class LanguageService { private setDirection(lang: string) { if (this.isBrowser) { - const dir = lang === 'ar' ? 'rtl' : 'ltr'; + const dir = this.rtl_languages.has(lang) ? 'rtl' : 'ltr'; document.documentElement.setAttribute('dir', dir); document.documentElement.setAttribute('lang', lang); } diff --git a/Interface/src/assets/i18n/es.json b/Interface/src/assets/i18n/es.json new file mode 100644 index 00000000..0cda524a --- /dev/null +++ b/Interface/src/assets/i18n/es.json @@ -0,0 +1,139 @@ +{ + "HOME": "Inicio", + "ABOUT_US": "Sobre Nosotros", + "INSIGHTS": "Análisis", + "LOGOUT": "Cerrar Sesión", + "LOGIN": "Iniciar Sesión", + "SIGNUP": "Registrarse", + "OUR_TEAM": "Nuestro Equipo", + "TEAM_SUBHEADING": "Somos un equipo de apasionados estudiantes de Ciencias de la Computación de la Universidad de Assiut, impulsados por la innovación y la búsqueda incansable de la excelencia.", + "TEAM_DESCRIPTION": "A lo largo de nuestro viaje, hemos enfrentado desafíos, superado límites y aprovechado cada oportunidad de aprendizaje. Nuestro compromiso de entregar resultados de alta calidad bajo presión nos ha convertido en los solucionadores de problemas que somos hoy.", + "WELCOME_TITLE": "Bienvenido a FeedPulse", + "WELCOME_SUBTITLE": "Analizamos comentarios reales de redes sociales para ayudar a tu negocio a crecer de manera inteligente", + "CREATE_REPORT": "Crear Informe", + "GET_STARTED": "Empezar", + "WATCH_VIDEO": "Ver Video", + "PROCESS": "Proceso", + "HOW_IT_WORKS": "¿Cómo funciona?", + "STEP_REGISTER_TITLE": "Registrarse", + "STEP_REGISTER_DESC": "Por favor, completa el proceso de registro para comenzar.", + "STEP_FB_TITLE": "Conectar con Facebook", + "STEP_FB_DESC": "Conecta tu cuenta a Facebook para acceder a funciones adicionales.", + "STEP_INSIGHTS_TITLE": "¡Mira tus análisis!", + "STEP_INSIGHTS_DESC": "Consulta tu rendimiento y análisis una vez conectado.", + "LEARN_MORE": "¿Quieres saber más?", + "CHECK_VIDEO": "Ver el video", + "ABOUT_FEEDPULSE": "Sobre FeedPulse", + "GROW_BUSINESS": "Haremos Todo lo Posible para Hacer Crecer tu Negocio", + "DESCRIPTION": "En FeedPulse, empoderamos tu marca transformando los comentarios de los clientes en insights accionables, impulsando el crecimiento sostenible y la innovación.", + "OUR_VISION": "Nuestra Visión", + "VISION_1": "Ser la plataforma líder.", + "VISION_2": "Ofrecer insights de clientes en tiempo real.", + "VISION_3": "Permitir que las organizaciones tomen decisiones más inteligentes.", + "OUR_MISSION": "Nuestra Misión", + "MISSION_1": "Simplificar el análisis de comentarios con tecnología inteligente.", + "MISSION_2": "Ayudar a las empresas a prosperar entendiendo y actuando según la voz del cliente.", + "OUR_STORY": "Nuestra Historia", + "services": { + "title": "Nuestros Servicios", + "subtitle": "Lo que ofrecemos", + "sentiment": "Análisis de Sentimientos", + "topic": "Detección de Temas", + "security": "Seguridad", + "eco": "Ecológico", + "report": "Informes y Visualizaciones Personalizados", + "chatbot": "Chatbot" + }, + "CONTACT_GET_IN_TOUCH": "Contacto", + "CONTACT_WORK_WITH_US": "Siempre estamos buscando trabajar con nuevos clientes.", + "CONTACT_FULLNAME": "Nombre Completo", + "CONTACT_EMAIL": "Correo Electrónico", + "CONTACT_PHONE": "Número de Teléfono", + "CONTACT_SUBJECT": "Asunto", + "CONTACT_MESSAGE": "Mensaje", + "CONTACT_SEND_MESSAGE": "Enviar Mensaje", + "FOOTER_SUBSCRIBE_TITLE": "Suscríbete a las Actualizaciones de FeedPulse", + "FOOTER_EMAIL_PLACEHOLDER": "Tu Correo Electrónico", + "FOOTER_SUBSCRIBE_BUTTON": "Suscribirse Ahora", + "FOOTER_DESCRIPTION": "Analizamos comentarios reales de redes sociales para ayudar a tu negocio a crecer de manera inteligente.", + "FOOTER_QUICK_LINKS": "Enlaces Rápidos", + "FOOTER_HOME": "Inicio", + "FOOTER_SERVICES": "Servicios", + "FOOTER_ABOUT": "Sobre Nosotros", + "FOOTER_PRIVACY": "Política de Privacidad", + "FOOTER_CONTACT": "Contacto Rápido", + "FOOTER_EMAIL": "Correo: info@feedpulse.com", + "FOOTER_PHONE": "Teléfono: +123456789", + "FOOTER_ADDRESS": "Dirección: El Cairo, Egipto", + "FOOTER_RIGHTS": "Todos los derechos reservados.", + "ADD_ORG_TITLE": "Agregar Organización", + "ORG_NAME": "Nombre:", + "ORG_DESCRIPTION": "Descripción:", + "ORG_DESCRIPTION_PLACEHOLDER": "Ingresa la descripción", + "ORG_FB_ID": "ID de Facebook:", + "ORG_PAGE_TOKEN": "Token de Acceso a la Página:", + "ORG_USER_ID": "ID de Usuario:", + "SUBMIT": "Enviar", + "FB_CONNECT_TEXT": "Conectar con Facebook", + "FB_CONNECT_HEADER": "Conecta tu cuenta a Facebook para acceder a funciones adicionales", + "FB_CONNECT_BUTTON": "Conectar a Facebook", + "DISCONNECT": "Desconectar", + "WELCOME_USER": "Bienvenido,", + "UNREGISTERED_PAGES": "Tus páginas no registradas:", + "REGISTERED_PAGES": "Tus páginas registradas:", + "UNKNOWN_PAGE": "Página Desconocida", + "GO_TO_FORM": "Ir al formulario", + "LOG": { + "TITLE": "Iniciar Sesión", + "USERNAME": "Nombre de Usuario*", + "PASSWORD": "Contraseña*", + "PASSWORD_REQUIRED": "La contraseña es obligatoria.", + "PASSWORD_MIN": "La contraseña debe tener al menos 8 caracteres.", + "BUTTON": "Iniciar Sesión" + }, + "FULL_NAME": "Nombre Completo", + "USER_NAME": "Nombre de Usuario", + "EMAIL": "Correo Electrónico", + "PHONE_NUMBER": "Número de Teléfono", + "PASSWORD": "Contraseña", + "CONFIRM_PASSWORD": "Confirmar Contraseña", + "COUNTRY": "País", + "ADDRESS": "Dirección", + "PHOTO": "Foto", + "REGISTER": "Registrarse", + "REQUIRED": "es obligatorio.", + "MIN_LENGTH": "debe tener al menos {{length}} caracteres.", + "MAX_LENGTH": "no puede exceder los {{length}} caracteres.", + "INVALID_EMAIL": "Por favor, ingresa un correo electrónico válido.", + "INVALID_PHONE": "Por favor, ingresa un número de teléfono válido de 11 dígitos.", + "PASSWORD_NOT_MATCH": "Las contraseñas no coinciden.", + "CHOOSE_COUNTRY": "Elegir País", + "ANALYTICS_PAGE": "Página de Análisis", + "START_DATE": "Fecha de Inicio", + "END_DATE": "Fecha de Fin", + "SEE_INSIGHTS": "Ver Análisis", + "SELECT_DATES_WARNING": "Por favor, selecciona una fecha de inicio y una fecha de fin para continuar.", + "REPORT_FROM": "Informe del", + "TO": "al", + "GOALS": "Objetivos", + "ANALYTICS_IMAGES": "Imágenes de Análisis", + "METRICS": "Métricas", + "SENTIMENT_COUNTS": "Conteo de Sentimientos", + "TOPIC_COUNTS": "Conteo de Temas", + "TOP_5_TOPICS": "Top 5 de Temas", + "MOST_FREQ_SENTIMENT_PER_TOPIC": "Sentimiento Más Frecuente por Tema", + "MOST_FREQ_TOPIC_PER_SENTIMENT": "Tema Más Frecuente por Sentimiento", + "SENTIMENT": "Sentimiento", + "TOPIC": "Tema", + "COUNT": "Conteo", + "GENERATE_REPORTS": "GENERAR INFORMES", + "WE_WILL_GROW_BUSINESS": "Haremos Todo lo Posible para Hacer Crecer tu Negocio", + "FEEDPULSE_DESCRIPTION": "En FeedPulse, empoderamos tu marca transformando los comentarios de los clientes en insights accionables, impulsando el crecimiento sostenible y la innovación.", + "ANALYTICS_PAGE_DESCRIPTION": "Aquí puedes ver tu rendimiento y análisis una vez conectado.", + "TRY_MOCK_PAGE": "Probar Página de Prueba", + "LOGIN_SUCCESSFUL": "Inicio de Sesión Exitoso", + "WELCOME_BACK": "¡Bienvenido de nuevo!", + "LOGIN_FAILED": "Error al Iniciar Sesión", + "INVALID_CREDENTIALS": "Credenciales inválidas", + "OK": "Aceptar" +} diff --git a/Interface/src/assets/i18n/fr.json b/Interface/src/assets/i18n/fr.json new file mode 100644 index 00000000..a453a428 --- /dev/null +++ b/Interface/src/assets/i18n/fr.json @@ -0,0 +1,139 @@ +{ + "HOME": "Accueil", + "ABOUT_US": "À Propos", + "INSIGHTS": "Analyses", + "LOGOUT": "Déconnexion", + "LOGIN": "Connexion", + "SIGNUP": "Inscription", + "OUR_TEAM": "Notre Équipe", + "TEAM_SUBHEADING": "Nous sommes une équipe d'étudiants passionnés en Informatique de l'Université d'Assiut, animés par l'innovation et une quête incessante d'excellence.", + "TEAM_DESCRIPTION": "Tout au long de notre parcours, nous avons relevé des défis, repoussé les limites et saisi chaque opportunité d'apprentissage. Notre engagement à fournir des résultats de qualité sous pression a façonné notre capacité à résoudre les problèmes.", + "WELCOME_TITLE": "Bienvenue sur FeedPulse", + "WELCOME_SUBTITLE": "Nous analysons les retours des réseaux sociaux pour aider votre entreprise à grandir intelligemment", + "CREATE_REPORT": "Créer un Rapport", + "GET_STARTED": "Commencer", + "WATCH_VIDEO": "Regarder la Vidéo", + "PROCESS": "Processus", + "HOW_IT_WORKS": "Comment ça marche ?", + "STEP_REGISTER_TITLE": "S'inscrire", + "STEP_REGISTER_DESC": "Veuillez compléter le processus d'inscription pour commencer.", + "STEP_FB_TITLE": "Se Connecter à Facebook", + "STEP_FB_DESC": "Connectez votre compte à Facebook pour accéder à des fonctionnalités supplémentaires.", + "STEP_INSIGHTS_TITLE": "Voir vos Analyses !", + "STEP_INSIGHTS_DESC": "Consultez vos performances et analyses une fois connecté.", + "LEARN_MORE": "Vous voulez en savoir plus ?", + "CHECK_VIDEO": "Regarder la vidéo", + "ABOUT_FEEDPULSE": "À Propos de FeedPulse", + "GROW_BUSINESS": "Nous Ferons de Notre Mieux pour Faire Croître Votre Entreprise", + "DESCRIPTION": "Chez FeedPulse, nous renforçons votre marque en transformant les retours clients en insights actionnables, favorisant une croissance durable et l'innovation.", + "OUR_VISION": "Notre Vision", + "VISION_1": "Être la plateforme leader.", + "VISION_2": "Fournir des insights clients en temps réel.", + "VISION_3": "Permettre aux organisations de prendre des décisions plus intelligentes.", + "OUR_MISSION": "Notre Mission", + "MISSION_1": "Simplifier l'analyse des retours avec une technologie intelligente.", + "MISSION_2": "Aider les entreprises à prospérer en comprenant et en agissant sur la voix des clients.", + "OUR_STORY": "Notre Histoire", + "services": { + "title": "Nos Services", + "subtitle": "Ce que nous offrons", + "sentiment": "Analyse des Sentiments", + "topic": "Détection de Thèmes", + "security": "Sécurité", + "eco": "Écologique", + "report": "Rapports et Visualisations Personnalisés", + "chatbot": "Chatbot" + }, + "CONTACT_GET_IN_TOUCH": "Contactez-nous", + "CONTACT_WORK_WITH_US": "Nous sommes toujours à la recherche de nouveaux clients.", + "CONTACT_FULLNAME": "Nom Complet", + "CONTACT_EMAIL": "Email", + "CONTACT_PHONE": "Numéro de Téléphone", + "CONTACT_SUBJECT": "Sujet", + "CONTACT_MESSAGE": "Message", + "CONTACT_SEND_MESSAGE": "Envoyer le Message", + "FOOTER_SUBSCRIBE_TITLE": "Abonnez-vous aux Mises à Jour de FeedPulse", + "FOOTER_EMAIL_PLACEHOLDER": "Votre Adresse Email", + "FOOTER_SUBSCRIBE_BUTTON": "S'abonner Maintenant", + "FOOTER_DESCRIPTION": "Nous analysons les retours des réseaux sociaux pour aider votre entreprise à grandir intelligemment.", + "FOOTER_QUICK_LINKS": "Liens Rapides", + "FOOTER_HOME": "Accueil", + "FOOTER_SERVICES": "Services", + "FOOTER_ABOUT": "À Propos", + "FOOTER_PRIVACY": "Politique de Confidentialité", + "FOOTER_CONTACT": "Contact Rapide", + "FOOTER_EMAIL": "Email : info@feedpulse.com", + "FOOTER_PHONE": "Téléphone : +123456789", + "FOOTER_ADDRESS": "Adresse : Le Caire, Égypte", + "FOOTER_RIGHTS": "Tous droits réservés.", + "ADD_ORG_TITLE": "Ajouter une Organisation", + "ORG_NAME": "Nom :", + "ORG_DESCRIPTION": "Description :", + "ORG_DESCRIPTION_PLACEHOLDER": "Entrez la description", + "ORG_FB_ID": "ID Facebook :", + "ORG_PAGE_TOKEN": "Jeton d'Accès à la Page :", + "ORG_USER_ID": "ID Utilisateur :", + "SUBMIT": "Soumettre", + "FB_CONNECT_TEXT": "Se Connecter avec Facebook", + "FB_CONNECT_HEADER": "Connectez votre compte à Facebook pour accéder à des fonctionnalités supplémentaires", + "FB_CONNECT_BUTTON": "Se Connecter à Facebook", + "DISCONNECT": "Déconnecter", + "WELCOME_USER": "Bienvenue,", + "UNREGISTERED_PAGES": "Vos pages non enregistrées :", + "REGISTERED_PAGES": "Vos pages enregistrées :", + "UNKNOWN_PAGE": "Page Inconnue", + "GO_TO_FORM": "Aller au formulaire", + "LOG": { + "TITLE": "Connexion", + "USERNAME": "Nom d'Utilisateur*", + "PASSWORD": "Mot de Passe*", + "PASSWORD_REQUIRED": "Le mot de passe est requis.", + "PASSWORD_MIN": "Le mot de passe doit contenir au moins 8 caractères.", + "BUTTON": "Se Connecter" + }, + "FULL_NAME": "Nom Complet", + "USER_NAME": "Nom d'Utilisateur", + "EMAIL": "Email", + "PHONE_NUMBER": "Numéro de Téléphone", + "PASSWORD": "Mot de Passe", + "CONFIRM_PASSWORD": "Confirmer le Mot de Passe", + "COUNTRY": "Pays", + "ADDRESS": "Adresse", + "PHOTO": "Photo", + "REGISTER": "S'inscrire", + "REQUIRED": "est requis.", + "MIN_LENGTH": "doit contenir au moins {{length}} caractères.", + "MAX_LENGTH": "ne peut pas dépasser {{length}} caractères.", + "INVALID_EMAIL": "Veuillez entrer une adresse email valide.", + "INVALID_PHONE": "Veuillez entrer un numéro de téléphone valide à 11 chiffres.", + "PASSWORD_NOT_MATCH": "Les mots de passe ne correspondent pas.", + "CHOOSE_COUNTRY": "Choisir un Pays", + "ANALYTICS_PAGE": "Page d'Analyses", + "START_DATE": "Date de Début", + "END_DATE": "Date de Fin", + "SEE_INSIGHTS": "Voir les Analyses", + "SELECT_DATES_WARNING": "Veuillez sélectionner une date de début et une date de fin pour continuer.", + "REPORT_FROM": "Rapport du", + "TO": "au", + "GOALS": "Objectifs", + "ANALYTICS_IMAGES": "Images d'Analyses", + "METRICS": "Métriques", + "SENTIMENT_COUNTS": "Nombre de Sentiments", + "TOPIC_COUNTS": "Nombre de Thèmes", + "TOP_5_TOPICS": "Top 5 des Thèmes", + "MOST_FREQ_SENTIMENT_PER_TOPIC": "Sentiment le Plus Fréquent par Thème", + "MOST_FREQ_TOPIC_PER_SENTIMENT": "Thème le Plus Fréquent par Sentiment", + "SENTIMENT": "Sentiment", + "TOPIC": "Thème", + "COUNT": "Nombre", + "GENERATE_REPORTS": "GÉNÉRER DES RAPPORTS", + "WE_WILL_GROW_BUSINESS": "Nous Ferons de Notre Mieux pour Faire Croître Votre Entreprise", + "FEEDPULSE_DESCRIPTION": "Chez FeedPulse, nous renforçons votre marque en transformant les retours clients en insights actionnables, favorisant une croissance durable et l'innovation.", + "ANALYTICS_PAGE_DESCRIPTION": "Ici, vous pouvez voir vos performances et analyses une fois connecté.", + "TRY_MOCK_PAGE": "Essayer une Page de Test", + "LOGIN_SUCCESSFUL": "Connexion Réussie", + "WELCOME_BACK": "Content de vous revoir !", + "LOGIN_FAILED": "Échec de la Connexion", + "INVALID_CREDENTIALS": "Identifiants invalides", + "OK": "Ok" +}