diff --git a/client/src/constants/english.ts b/client/src/constants/english.ts index 8c11a61..b29b3fe 100644 --- a/client/src/constants/english.ts +++ b/client/src/constants/english.ts @@ -4,8 +4,9 @@ const enTranslations = { landing_btn_login: 'Login', landing_btn_register: 'Register', landing_btn_english: 'English', - landing_btn_portuguese: 'Portuguese', - landing_btn_spanish: 'Spanish', + landing_btn_portuguese: 'Português do Brasil', + landing_btn_spanish: 'Español', + landing_btn_russian: 'Русский', login_title: 'Login', login_email_label: 'Email', diff --git a/client/src/constants/languages_available.ts b/client/src/constants/languages_available.ts index 4308212..3b23dec 100644 --- a/client/src/constants/languages_available.ts +++ b/client/src/constants/languages_available.ts @@ -8,5 +8,6 @@ export interface LangAvailable { export const languages: LangAvailable[] = [ { lang: USER_LANG.ENGLISH, key: 'landing_btn_english' }, { lang: USER_LANG.PORTUGUESE, key: 'landing_btn_portuguese' }, - { lang: USER_LANG.SPANISH, key: 'landing_btn_spanish' } + { lang: USER_LANG.SPANISH, key: 'landing_btn_spanish' }, + { lang: USER_LANG.RUSSIAN, key: 'landing_btn_russian' } ]; diff --git a/client/src/constants/portuguese.ts b/client/src/constants/portuguese.ts index abd8a3a..3a1bac6 100644 --- a/client/src/constants/portuguese.ts +++ b/client/src/constants/portuguese.ts @@ -3,9 +3,10 @@ const ptBrTranslations = { landing_subtitle: 'Seu melhor aliado para organizar tarefas e notas!', landing_btn_login: 'Entrar', landing_btn_register: 'Criar conta', - landing_btn_english: 'Inglês', - landing_btn_portuguese: 'Português', - landing_btn_spanish: 'Espahol', + landing_btn_english: 'English', + landing_btn_portuguese: 'Português do Brasil', + landing_btn_spanish: 'Español', + landing_btn_russian: 'Русский', login_title: 'Entrar', login_email_label: 'E-mail', diff --git a/client/src/constants/russian.ts b/client/src/constants/russian.ts new file mode 100644 index 0000000..feef1a5 --- /dev/null +++ b/client/src/constants/russian.ts @@ -0,0 +1,133 @@ +const ruTranslations = { + landing_title: 'Добро пожаловать в TaskNote', + landing_subtitle: 'Ваш лучший помощник для заметок и задач!', + landing_btn_login: 'Войти', + landing_btn_register: 'Зарегистрироваться', + landing_btn_english: 'English', + landing_btn_portuguese: 'Português do Brasil', + landing_btn_spanish: 'Español', + landing_btn_russian: 'Русский', + + login_title: 'Войти', + login_email_label: 'Электронная почта', + login_email_placeholder: 'Введите вашу электронную почту', + login_password_label: 'Пароль', + login_password_placeholder: 'Введите ваш пароль', + login_btn_submit: 'Войти', + login_account: 'Ещё нет аккаунта?', + login_go_other: 'Создать аккаунт', + login_back_home: 'Вернуться на главную', + + register_title: 'Создать аккаунт', + register_email_label: 'Электронная почта', + register_email_placeholder: 'Введите вашу электронную почту', + register_password_label: 'Пароль', + register_password_placeholder: 'Введите ваш пароль', + register_btn_submit: 'Создать аккаунт', + register_account: 'Уже есть аккаунт?', + register_go_other: 'Войти', + register_back_home: 'Вернуться на главную', + + home_nav_home: 'Главная', + home_nav_tasks: 'Задачи', + home_nav_notes: 'Заметки', + home_nav_about: 'О приложении', + home_welcome_title: 'Добро пожаловать в вашу панель управления', + home_card_task_title: 'Обзор задач', + home_card_task_pending: 'Незавершённые задачи', + home_card_task_empty: 'Нет незавершённых задач', + home_card_task_done: 'выполненные задачи!', + home_card_task_done_empty: 'Нет выполненных задач!', + home_card_task_btn: 'Перейти к задачам', + home_card_note_title: 'Обзор заметок', + home_card_note_count: 'Примечания', + home_card_note_btn: 'Перейти к заметкам', + home_card_search_label: 'Искать задачи и заметки', + home_card_search_placeholder: 'Введите запрос', + home_card_search_btn: 'Искать', + home_card_search_result_label: 'Результаты поиска', + home_card_search_empty_result: 'Нет результатов', + + task_form_title: 'Добавить задачу', + task_form_desc_label: 'Описание', + task_form_desc_placeholder: 'Введите описание задачи', + task_form_url_label: 'URL', + task_form_url_placeholder: 'URL-адрес (необязательно)', + task_form_duedate_label: 'Срок оплаты', + task_form_duedate_placeholder: 'Срок выполнения (необязательно)', + task_form_submit: 'Сохранить задачу', + task_table_description: 'Описание', + task_table_done: 'Сделанный', + task_table_actions: 'Действия', + task_table_action_done: 'Сделанный', + task_table_action_undone: 'Отменено', + task_table_action_done_yes: 'Да', + task_table_action_done_no: 'Нет', + task_table_action_edit: 'Редактировать', + task_table_action_delete: 'Удалить', + + note_form_title: 'Добавить примечание', + note_form_title_label: 'Заголовок', + note_form_title_placeholder: 'Введите название заметки', + note_form_content_label: 'Примечание к содержанию', + note_form_content_placeholder: 'Введите содержание заметки', + note_form_submit: 'Сохранить заметку', + note_table_btn_edit: 'Редактировать', + note_table_btn_delete: 'Удалить', + + about_app_title: 'О TaskNote', + about_app_description: `TaskNote — это ваше приложение для управления + задачами и заметками в одном удобном месте. Независимо от того, отслеживаете ли вы + ежедневные задачи или организуете заметки с важных встреч, TaskNote помогает + вам оставаться организованными и продуктивными.`, + about_app_features: 'Функции', + about_app_features_one: 'Быстро добавляйте и управляйте задачами и заметками', + about_app_features_two: 'Поиск и фильтрация заметок для легкого доступа', + about_app_features_three: 'Интуитивно понятный и понятный пользовательский интерфейс', + about_app_help_title: 'Помощь и как использовать', + about_app_help_description: `Чтобы начать, просто зарегистрируйтесь или войдите в систему, и + вы получите доступ к своей персонализированной панели. Оттуда вы можете + создавать, редактировать и удалять задачи и заметки, а также организовывать их так, как вам + нравится. Нужна помощь? Посетите нашу страницу «Справка» (в будущем) для получения руководств + и часто задаваемых вопросов.`, + + about_tech_title: 'Технологии', + about_tech_description: `TaskNote был создан с использованием современных веб-технологий, + которые обеспечивают скорость, надежность и безопасность.`, + about_tech_list_one: 'React с TypeScript для фронтенда', + about_tech_list_two: 'Bootstrap 5 для компонентов и адаптивного дизайна', + about_tech_list_three: 'Java и Spring Boot плюс GraalVM для бэкэнда и Cloud Native', + about_tech_list_four: 'PostgreSQL для управления базами данных', + about_tech_list_five: 'Docker для контейнеризации и развертывания', + about_tech_list_six: 'Действия GitHub для CI/CD, тестирования и принудительного линтинга', + about_tech_list_seven: 'SonarCloud и GitHub QL для проверок безопасности и улучшений', + + about_dev_title: 'О разработчике', + about_dev_description: `Привет! Я Рикардо, разработчик TaskNote. Я увлечен созданием приложений, + которые делают жизнь проще и более + организованной. Вы можете связаться со мной по адресу `, + about_dev_description_two: ' для любых вопросов или отзывов.', + + account_my_account_tittle: 'Мой счет', + account_my_account_hello: 'Привет! Здесь вы можете управлять своими предпочтениями.', + account_my_account_logged: 'Вы вошли как:', + account_app_lang_tittle: 'Язык приложения', + account_app_lang_description: 'Вы можете выбрать один из этих языков:', + account_privacy_little: 'Ваша конфиденциальность имеет значение', + account_privacy_text: `Мы стремимся защищать вашу конфиденциальность и + предоставлять вам полный контроль над вашими данными. Вы можете запросить полное удаление + аккаунта в любое время. После обработки вся ваша личная информация будет + навсегда удалена с наших серверов.`, + account_privacy_delete_btn: 'Удалить все мои данные', + account_delete_tittle: 'Вы собираетесь удалить свою учетную запись!', + account_delete_description: `Это действие нельзя отменить. Если вы действительно хотите + удалить все свои данные, нажмите кнопку ниже. Если нет, закройте это сообщение, и ваши + данные будут в безопасности.`, + account_delete_btn: 'Да, удалить все', + + footer_my_account: 'Мой счет ', + + logout: 'Выйти' +}; + +export default ruTranslations; diff --git a/client/src/constants/spanish.ts b/client/src/constants/spanish.ts index 3677857..5ac1b48 100644 --- a/client/src/constants/spanish.ts +++ b/client/src/constants/spanish.ts @@ -3,9 +3,10 @@ const esTranslations = { landing_subtitle: '¡Tu mejor aliado para organizar tareas y notas!', landing_btn_login: 'Iniciar sesión', landing_btn_register: 'Crear cuenta', - landing_btn_english: 'Inglés', - landing_btn_portuguese: 'Portugués', + landing_btn_english: 'English', + landing_btn_portuguese: 'Português do Brasil', landing_btn_spanish: 'Español', + landing_btn_russian: 'Русский', login_title: 'Acceso', login_email_label: 'Correo electrónico', diff --git a/client/src/i18n.ts b/client/src/i18n.ts index 28de69f..9535b69 100644 --- a/client/src/i18n.ts +++ b/client/src/i18n.ts @@ -3,6 +3,7 @@ import { initReactI18next } from 'react-i18next'; import enTranslations from './constants/english'; import esTranslations from './constants/spanish'; import ptBrTranslations from './constants/portuguese'; +import ruTranslations from './constants/russian'; i18n .use(initReactI18next) @@ -21,6 +22,9 @@ i18n }, pt_br: { translation: ptBrTranslations + }, + ru: { + translation: ruTranslations } } }); diff --git a/client/src/types/UserLangs.ts b/client/src/types/UserLangs.ts index 7f9e323..b42a8ea 100644 --- a/client/src/types/UserLangs.ts +++ b/client/src/types/UserLangs.ts @@ -1,7 +1,8 @@ const USER_LANG = { ENGLISH: 'en', SPANISH: 'es', - PORTUGUESE: 'pt_br' + PORTUGUESE: 'pt_br', + RUSSIAN: 'ru' }; export default USER_LANG; diff --git a/client/src/utils/TranslatorUtils.ts b/client/src/utils/TranslatorUtils.ts index ed00f9d..6c1127b 100644 --- a/client/src/utils/TranslatorUtils.ts +++ b/client/src/utils/TranslatorUtils.ts @@ -33,6 +33,9 @@ function translateMessage(message: string, target: string): string { else if (target === USER_LANG.SPANISH) { lang = USER_LANG.SPANISH; } + else if (target === USER_LANG.RUSSIAN) { + lang = USER_LANG.RUSSIAN; + } if (lang === USER_LANG.ENGLISH) { return message; } @@ -40,67 +43,151 @@ function translateMessage(message: string, target: string): string { if (message.includes(' ago')) { const firstSpace = message.indexOf(' '); const numberValue = message.substring(0, firstSpace); - const textvalue = message.substring(firstSpace).trim(); - switch (textvalue) { + const textValue = message.substring(firstSpace).trim(); + switch (textValue) { case 'years ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} anos atrás` - : `Hace ${numberValue} años`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} anos atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} años`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} года назад`; + } + break; } case 'year ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} ano atrás` - : `Hace ${numberValue} año`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} ano atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} año`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} год назад`; + } + break; } case 'months ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} meses atrás` - : `Hace ${numberValue} meses`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} meses atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} meses`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} месяца назад`; + } + // here + break; } case 'month ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} mês atrás` - : `Hace ${numberValue} mes`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} mês atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} mes`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} месяц назад`; + } + break; } case 'days ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} dias atrás` - : `Hace ${numberValue} días`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} dias atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} días`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} дня назад`; + } + break; } case 'day ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} dia atrás` - : `Hace ${numberValue} día`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} dia atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} día`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} день назад`; + } + break; } case 'hours ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} horas atrás` - : `Hace ${numberValue} horas`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} horas atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} horas`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} часа назад`; + } + break; } case 'hour ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} hora atrás` - : `Hace ${numberValue} hora`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} hora atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} hora`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} час назад`; + } + break; } case 'minutes ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} minutos atrás` - : `Hace ${numberValue} minutos`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} minutos atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} minutos`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} минуты назад`; + } + break; } case 'minute ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} minuto atrás` - : `Hace ${numberValue} minuto`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} minuto atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} minuto`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} минуту назад`; + } + break; } case 'seconds ago': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} segundos atrás` - : `Hace ${numberValue} segundos`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} segundos atrás`; + } + else if (lang === USER_LANG.SPANISH) { + return `Hace ${numberValue} segundos`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `${numberValue} секунд назад`; + } + break; } case 'Moments ago': { - return lang === USER_LANG.PORTUGUESE - ? 'Momentos atrás' - : 'Hace momentos'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Momentos atrás'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Hace momentos'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Несколько минут назад'; + } } } } @@ -108,114 +195,256 @@ function translateMessage(message: string, target: string): string { if (message.includes(' left')) { const firstSpace = message.indexOf(' '); const numberValue = message.substring(0, firstSpace); - const textvalue = message.substring(firstSpace).trim(); - switch (textvalue) { + const textValue = message.substring(firstSpace).trim(); + switch (textValue) { case 'years left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} anos restantes` - : `Faltan ${numberValue} años`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} anos restantes`; + } + else if (lang === USER_LANG.SPANISH) { + return `Faltan ${numberValue} años`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `осталось ${numberValue} лет`; + } + break; } case 'year left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} ano restante` - : `Falta ${numberValue} año`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} ano restante`; + } + else if (lang === USER_LANG.SPANISH) { + return `Falta ${numberValue} año`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `Остался ${numberValue} год`; + } + break; } case 'months left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} meses restantes` - : `Faltan ${numberValue} meses`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} meses restantes`; + } + else if (lang === USER_LANG.SPANISH) { + return `Faltan ${numberValue} meses`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `осталось ${numberValue} месяцев`; + } + break; } case 'month left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} mês restante` - : `Falta ${numberValue} mes`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} mês restante`; + } + else if (lang === USER_LANG.SPANISH) { + return `Falta ${numberValue} mes`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `Остался ${numberValue} месяц`; + } + break; } case 'days left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} dias restantes` - : `Faltan ${numberValue} días`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} dias restantes`; + } + else if (lang === USER_LANG.SPANISH) { + return `Faltan ${numberValue} días`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `осталось ${numberValue} дней`; + } + break; } case 'day left': { - return lang === USER_LANG.PORTUGUESE - ? `${numberValue} dia restante` - : `Falta ${numberValue} día`; + if (lang === USER_LANG.PORTUGUESE) { + return `${numberValue} dia restante`; + } + else if (lang === USER_LANG.SPANISH) { + return `Falta ${numberValue} día`; + } + else if (lang === USER_LANG.RUSSIAN) { + return `Остался ${numberValue} день`; + } + break; } } } switch (message) { case 'Bad password: Password must have at least at least 8 characters, 1 uppercase, 1 special character': { - return lang === USER_LANG.PORTUGUESE - ? 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial' - : 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 специальный символ.'; + } + break; } case 'Bad password: Password must have at least 1 uppercase, 1 special character': { - return lang === USER_LANG.PORTUGUESE - ? 'Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial' - : 'Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неправильный пароль: Пароль должен содержать как минимум 1 заглавную букву и 1 специальный символ.'; + } + break; } case 'Bad password: Password must have at least 1 special character': { - return lang === USER_LANG.PORTUGUESE - ? 'Senha fraca: Senha deve possuir pelo menos 1 caracter especial' - : 'Contraseña inválida: La contraseña debe tener al menos 1 carácter especial'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Senha fraca: Senha deve possuir pelo menos 1 caracter especial'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Contraseña inválida: La contraseña debe tener al menos 1 carácter especial'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неправильный пароль: Пароль должен содержать хотя бы 1 специальный символ.'; + } + break; } case 'Email already exists!': { - return lang === USER_LANG.PORTUGUESE - ? 'E-mail já cadastrado!' - : '¡El correo ya está registrado!'; + if (lang === USER_LANG.PORTUGUESE) { + return 'E-mail já cadastrado!'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡El correo ya está registrado!'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Электронная почта уже существует!'; + } + break; } case 'Forbidden! Access denied!': { - return lang === USER_LANG.PORTUGUESE - ? 'Proibido! Acesso negado' - : '¡Prohibido! Acceso denegado'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Proibido! Acesso negado'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Prohibido! Acceso denegado'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Запрещено! Доступ запрещен!'; + } + break; } case 'Internal Server Error!': { - return lang === USER_LANG.PORTUGUESE - ? 'Erro Interno do Servidor!' - : '¡Error interno del servidor!'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Erro Interno do Servidor!'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Error interno del servidor!'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Внутренняя ошибка сервера!'; + } + break; } case 'Max login attempt limit reached. Please wait 30 minutes': { - return lang === USER_LANG.PORTUGUESE - ? 'Limite máximo de tentativas atingido. Por favor aguarde 30 minutos' - : 'Has alcanzado el límite máximo de intentos de inicio de sesión. Por favor, espera 30 minutos'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Limite máximo de tentativas atingido. Por favor aguarde 30 minutos'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Has alcanzado el límite máximo de intentos de inicio de sesión. Por favor, espera 30 minutos'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Достигнут максимальный лимит попыток входа. Пожалуйста, подождите 30 минут'; + } + break; } case 'Please fill in all the fields': { - return lang === USER_LANG.PORTUGUESE - ? 'Por ravor, preencha todos os campos' - : 'Por favor, completa todos los campos'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Por ravor, preencha todos os campos'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Por favor, completa todos los campos'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Пожалуйста, заполните все поля'; + } + break; } case 'Please fill in your username and password!': { - return lang === USER_LANG.PORTUGUESE - ? 'Por favor, informe seu e-mail e senha!' - : '¡Por favor, ingresa tu nombre de usuario y contraseña!'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Por favor, informe seu e-mail e senha!'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Por favor, ingresa tu nombre de usuario y contraseña!'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Пожалуйста, введите свое имя пользователя и пароль!'; + } + break; } case 'Please type at least 3 characters': { - return lang === USER_LANG.PORTUGUESE - ? 'Por favor, digite pelo menos 3 letras' - : '¡Por favor, escriba al menos 3 caracteres'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Por favor, digite pelo menos 3 letras'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Por favor, escriba al menos 3 caracteres'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Пожалуйста, введите не менее 3 символов'; + } + break; } case 'The maximum text length is 2000': { - return lang === USER_LANG.PORTUGUESE - ? 'O tamanho máximo do texto é 2000' - : 'La longitud máxima del texto es 2000'; + if (lang === USER_LANG.PORTUGUESE) { + return 'O tamanho máximo do texto é 2000'; + } + else if (lang === USER_LANG.SPANISH) { + return 'La longitud máxima del texto es 2000'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Максимальная длина текста — 2000.'; + } + break; } case 'Unknown error': { - return lang === USER_LANG.PORTUGUESE - ? 'Erro desconhecido' - : 'Error desconocido'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Erro desconhecido'; + } + else if (lang === USER_LANG.SPANISH) { + return 'Error desconocido'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неизвестная ошибка'; + } + break; } case 'Wrong or missing information!': { - return lang === USER_LANG.PORTUGUESE - ? 'Informação errada ou incompleta!' - : '¡Información incorrecta o incompleta!'; + if (lang === USER_LANG.PORTUGUESE) { + return 'Informação errada ou incompleta!'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Información incorrecta o incompleta!'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неверная или отсутствующая информация!'; + } + break; } case 'Wrong user or password': { - return lang === USER_LANG.PORTUGUESE - ? 'E-mail ou senha inválidos!' - : '¡Usuario o contraseña incorrectos!'; + if (lang === USER_LANG.PORTUGUESE) { + return 'E-mail ou senha inválidos!'; + } + else if (lang === USER_LANG.SPANISH) { + return '¡Usuario o contraseña incorrectos!'; + } + else if (lang === USER_LANG.RUSSIAN) { + return 'Неправильный пользователь или пароль'; + } + break; } default: return ''; } + + return ''; } export { translateTaskResponse, translateMessage }; diff --git a/client/src/views/Landing/index.tsx b/client/src/views/Landing/index.tsx index 020cf6a..8edfcb4 100644 --- a/client/src/views/Landing/index.tsx +++ b/client/src/views/Landing/index.tsx @@ -37,8 +37,9 @@ function Landing(): JSX.Element {

{t('landing_title')}

{t('landing_subtitle')}

- {t('landing_btn_login')} - {t('landing_btn_register')} + {t('landing_btn_login')} +
+ {t('landing_btn_register')}