From 0e083868cb9539ae56727b4d4fdcbdd0bc0c2c42 Mon Sep 17 00:00:00 2001 From: chamikaJ Date: Fri, 11 Jul 2025 09:37:50 +0530 Subject: [PATCH] chore: moved locale files --- .../src/public/locales/alb/404-page.json | 4 + .../src/public/locales/alb/account-setup.json | 31 ++ .../alb/admin-center/current-bill.json | 113 ++++++ .../locales/alb/admin-center/overview.json | 8 + .../locales/alb/admin-center/projects.json | 12 + .../locales/alb/admin-center/sidebar.json | 8 + .../locales/alb/admin-center/teams.json | 33 ++ .../locales/alb/admin-center/users.json | 9 + .../public/locales/alb/all-project-list.json | 34 ++ .../public/locales/alb/auth/auth-common.json | 5 + .../locales/alb/auth/forgot-password.json | 12 + .../src/public/locales/alb/auth/login.json | 27 ++ .../src/public/locales/alb/auth/signup.json | 29 ++ .../locales/alb/auth/verify-reset-email.json | 14 + .../src/public/locales/alb/common.json | 9 + .../alb/create-first-project-form.json | 13 + .../locales/alb/create-first-tasks.json | 7 + .../src/public/locales/alb/home.json | 46 +++ .../alb/invite-initial-team-members.json | 8 + .../src/public/locales/alb/kanban-board.json | 30 ++ .../public/locales/alb/license-expired.json | 6 + .../src/public/locales/alb/navbar.json | 31 ++ .../locales/alb/organization-name-form.json | 5 + .../src/public/locales/alb/phases-drawer.json | 19 + .../public/locales/alb/project-drawer.json | 42 ++ .../locales/alb/project-view-files.json | 14 + .../locales/alb/project-view-insights.json | 41 ++ .../locales/alb/project-view-members.json | 17 + .../locales/alb/project-view-updates.json | 6 + .../src/public/locales/alb/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../alb/project-view/project-view-header.json | 30 ++ .../alb/project-view/save-as-template.json | 27 ++ .../locales/alb/reporting-members-drawer.json | 90 +++++ .../public/locales/alb/reporting-members.json | 35 ++ .../alb/reporting-overview-drawer.json | 39 ++ .../locales/alb/reporting-overview.json | 25 ++ .../alb/reporting-projects-drawer.json | 59 +++ .../alb/reporting-projects-filters.json | 35 ++ .../locales/alb/reporting-projects.json | 52 +++ .../public/locales/alb/reporting-sidebar.json | 8 + .../src/public/locales/alb/schedule.json | 39 ++ .../locales/alb/settings/categories.json | 10 + .../locales/alb/settings/change-password.json | 15 + .../public/locales/alb/settings/clients.json | 22 ++ .../locales/alb/settings/job-titles.json | 20 + .../public/locales/alb/settings/labels.json | 11 + .../public/locales/alb/settings/language.json | 7 + .../locales/alb/settings/notifications.json | 11 + .../public/locales/alb/settings/profile.json | 14 + .../alb/settings/project-templates.json | 8 + .../public/locales/alb/settings/sidebar.json | 14 + .../locales/alb/settings/task-templates.json | 9 + .../locales/alb/settings/team-members.json | 47 +++ .../public/locales/alb/settings/teams.json | 16 + .../alb/task-drawer/task-drawer-info-tab.json | 29 ++ .../locales/alb/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/alb/task-list-filters.json | 85 ++++ .../public/locales/alb/task-list-table.json | 136 +++++++ .../public/locales/alb/task-management.json | 21 + .../locales/alb/task-template-drawer.json | 11 + .../alb/tasks/task-table-bulk-actions.json | 26 ++ .../public/locales/alb/template-drawer.json | 19 + .../public/locales/alb/templateDrawer.json | 23 ++ .../src/public/locales/alb/time-report.json | 44 +++ .../src/public/locales/alb/unauthorized.json | 5 + .../src/public/locales/de/404-page.json | 4 + .../src/public/locales/de/account-setup.json | 31 ++ .../locales/de/admin-center/current-bill.json | 113 ++++++ .../locales/de/admin-center/overview.json | 8 + .../locales/de/admin-center/projects.json | 12 + .../locales/de/admin-center/sidebar.json | 8 + .../public/locales/de/admin-center/teams.json | 33 ++ .../public/locales/de/admin-center/users.json | 9 + .../public/locales/de/all-project-list.json | 34 ++ .../public/locales/de/auth/auth-common.json | 5 + .../locales/de/auth/forgot-password.json | 12 + .../src/public/locales/de/auth/login.json | 27 ++ .../src/public/locales/de/auth/signup.json | 29 ++ .../locales/de/auth/verify-reset-email.json | 14 + .../src/public/locales/de/common.json | 9 + .../locales/de/create-first-project-form.json | 13 + .../public/locales/de/create-first-tasks.json | 7 + .../src/public/locales/de/home.json | 46 +++ .../de/invite-initial-team-members.json | 8 + .../src/public/locales/de/kanban-board.json | 30 ++ .../public/locales/de/license-expired.json | 6 + .../src/public/locales/de/navbar.json | 31 ++ .../locales/de/organization-name-form.json | 5 + .../src/public/locales/de/phases-drawer.json | 19 + .../src/public/locales/de/project-drawer.json | 42 ++ .../public/locales/de/project-view-files.json | 14 + .../locales/de/project-view-insights.json | 41 ++ .../locales/de/project-view-members.json | 17 + .../locales/de/project-view-updates.json | 6 + .../src/public/locales/de/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../de/project-view/project-view-header.json | 30 ++ .../de/project-view/save-as-template.json | 27 ++ .../locales/de/reporting-members-drawer.json | 90 +++++ .../public/locales/de/reporting-members.json | 35 ++ .../locales/de/reporting-overview-drawer.json | 39 ++ .../public/locales/de/reporting-overview.json | 25 ++ .../locales/de/reporting-projects-drawer.json | 59 +++ .../de/reporting-projects-filters.json | 35 ++ .../public/locales/de/reporting-projects.json | 52 +++ .../public/locales/de/reporting-sidebar.json | 8 + .../src/public/locales/de/schedule.json | 39 ++ .../locales/de/settings/categories.json | 10 + .../locales/de/settings/change-password.json | 15 + .../public/locales/de/settings/clients.json | 22 ++ .../locales/de/settings/job-titles.json | 20 + .../public/locales/de/settings/labels.json | 11 + .../public/locales/de/settings/language.json | 7 + .../locales/de/settings/notifications.json | 11 + .../public/locales/de/settings/profile.json | 14 + .../de/settings/project-templates.json | 8 + .../public/locales/de/settings/sidebar.json | 14 + .../locales/de/settings/task-templates.json | 9 + .../locales/de/settings/team-members.json | 47 +++ .../src/public/locales/de/settings/teams.json | 16 + .../de/task-drawer/task-drawer-info-tab.json | 29 ++ .../locales/de/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/de/task-list-filters.json | 85 ++++ .../public/locales/de/task-list-table.json | 136 +++++++ .../public/locales/de/task-management.json | 21 + .../locales/de/task-template-drawer.json | 11 + .../de/tasks/task-table-bulk-actions.json | 41 ++ .../public/locales/de/template-drawer.json | 19 + .../src/public/locales/de/templateDrawer.json | 23 ++ .../src/public/locales/de/time-report.json | 44 +++ .../src/public/locales/de/unauthorized.json | 5 + .../src/public/locales/en/404-page.json | 4 + .../src/public/locales/en/account-setup.json | 31 ++ .../locales/en/admin-center/current-bill.json | 121 ++++++ .../locales/en/admin-center/overview.json | 8 + .../locales/en/admin-center/projects.json | 12 + .../locales/en/admin-center/sidebar.json | 8 + .../public/locales/en/admin-center/teams.json | 35 ++ .../public/locales/en/admin-center/users.json | 9 + .../public/locales/en/all-project-list.json | 34 ++ .../public/locales/en/auth/auth-common.json | 5 + .../locales/en/auth/forgot-password.json | 12 + .../src/public/locales/en/auth/login.json | 27 ++ .../src/public/locales/en/auth/signup.json | 29 ++ .../locales/en/auth/verify-reset-email.json | 14 + .../src/public/locales/en/common.json | 9 + .../locales/en/create-first-project-form.json | 13 + .../public/locales/en/create-first-tasks.json | 7 + .../src/public/locales/en/home.json | 46 +++ .../en/invite-initial-team-members.json | 8 + .../src/public/locales/en/kanban-board.json | 33 ++ .../public/locales/en/license-expired.json | 6 + .../src/public/locales/en/navbar.json | 31 ++ .../locales/en/organization-name-form.json | 5 + .../src/public/locales/en/phases-drawer.json | 19 + .../src/public/locales/en/project-drawer.json | 52 +++ .../public/locales/en/project-view-files.json | 14 + .../locales/en/project-view-insights.json | 41 ++ .../locales/en/project-view-members.json | 17 + .../locales/en/project-view-updates.json | 6 + .../src/public/locales/en/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../en/project-view/project-view-header.json | 30 ++ .../en/project-view/save-as-template.json | 27 ++ .../locales/en/reporting-members-drawer.json | 90 +++++ .../public/locales/en/reporting-members.json | 35 ++ .../locales/en/reporting-overview-drawer.json | 39 ++ .../public/locales/en/reporting-overview.json | 25 ++ .../locales/en/reporting-projects-drawer.json | 59 +++ .../en/reporting-projects-filters.json | 35 ++ .../public/locales/en/reporting-projects.json | 52 +++ .../public/locales/en/reporting-sidebar.json | 8 + .../src/public/locales/en/schedule.json | 39 ++ .../locales/en/settings/appearance.json | 5 + .../locales/en/settings/categories.json | 10 + .../locales/en/settings/change-password.json | 15 + .../public/locales/en/settings/clients.json | 22 ++ .../locales/en/settings/job-titles.json | 20 + .../public/locales/en/settings/labels.json | 11 + .../public/locales/en/settings/language.json | 7 + .../locales/en/settings/notifications.json | 11 + .../public/locales/en/settings/profile.json | 14 + .../en/settings/project-templates.json | 8 + .../public/locales/en/settings/sidebar.json | 15 + .../locales/en/settings/task-templates.json | 9 + .../locales/en/settings/team-members.json | 47 +++ .../src/public/locales/en/settings/teams.json | 16 + .../en/task-drawer/task-drawer-info-tab.json | 30 ++ .../task-drawer-recurring-config.json | 34 ++ .../locales/en/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/en/task-list-filters.json | 85 ++++ .../public/locales/en/task-list-table.json | 136 +++++++ .../public/locales/en/task-management.json | 35 ++ .../locales/en/task-template-drawer.json | 12 + .../en/tasks/task-table-bulk-actions.json | 41 ++ .../public/locales/en/template-drawer.json | 19 + .../src/public/locales/en/templateDrawer.json | 23 ++ .../src/public/locales/en/time-report.json | 57 +++ .../src/public/locales/en/unauthorized.json | 5 + .../src/public/locales/es/404-page.json | 4 + .../src/public/locales/es/account-setup.json | 32 ++ .../locales/es/admin-center/current-bill.json | 113 ++++++ .../locales/es/admin-center/overview.json | 8 + .../locales/es/admin-center/projects.json | 12 + .../locales/es/admin-center/sidebar.json | 8 + .../public/locales/es/admin-center/teams.json | 35 ++ .../public/locales/es/admin-center/users.json | 9 + .../public/locales/es/all-project-list.json | 34 ++ .../public/locales/es/auth/auth-common.json | 5 + .../locales/es/auth/forgot-password.json | 12 + .../src/public/locales/es/auth/login.json | 27 ++ .../src/public/locales/es/auth/signup.json | 29 ++ .../locales/es/auth/verify-reset-email.json | 14 + .../src/public/locales/es/common.json | 9 + .../locales/es/create-first-project-form.json | 13 + .../public/locales/es/create-first-tasks.json | 7 + .../src/public/locales/es/home.json | 45 +++ .../es/invite-initial-team-members.json | 8 + .../src/public/locales/es/kanban-board.json | 30 ++ .../public/locales/es/license-expired.json | 6 + .../src/public/locales/es/navbar.json | 31 ++ .../locales/es/organization-name-form.json | 5 + .../src/public/locales/es/phases-drawer.json | 19 + .../src/public/locales/es/project-drawer.json | 52 +++ .../public/locales/es/project-view-files.json | 14 + .../locales/es/project-view-insights.json | 41 ++ .../locales/es/project-view-members.json | 17 + .../locales/es/project-view-updates.json | 6 + .../src/public/locales/es/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../es/project-view/project-view-header.json | 30 ++ .../es/project-view/save-as-template.json | 27 ++ .../locales/es/reporting-members-drawer.json | 90 +++++ .../public/locales/es/reporting-members.json | 35 ++ .../locales/es/reporting-overview-drawer.json | 39 ++ .../public/locales/es/reporting-overview.json | 25 ++ .../locales/es/reporting-projects-drawer.json | 59 +++ .../es/reporting-projects-filters.json | 35 ++ .../public/locales/es/reporting-projects.json | 52 +++ .../public/locales/es/reporting-sidebar.json | 8 + .../src/public/locales/es/schedule.json | 39 ++ .../locales/es/settings/appearance.json | 5 + .../locales/es/settings/categories.json | 10 + .../locales/es/settings/change-password.json | 15 + .../public/locales/es/settings/clients.json | 22 ++ .../locales/es/settings/job-titles.json | 20 + .../public/locales/es/settings/labels.json | 11 + .../public/locales/es/settings/language.json | 7 + .../locales/es/settings/notifications.json | 10 + .../public/locales/es/settings/profile.json | 14 + .../es/settings/project-templates.json | 8 + .../public/locales/es/settings/sidebar.json | 15 + .../locales/es/settings/task-templates.json | 9 + .../locales/es/settings/team-members.json | 47 +++ .../src/public/locales/es/settings/teams.json | 16 + .../es/task-drawer/task-drawer-info-tab.json | 30 ++ .../task-drawer-recurring-config.json | 34 ++ .../locales/es/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/es/task-list-filters.json | 81 ++++ .../public/locales/es/task-list-table.json | 136 +++++++ .../public/locales/es/task-management.json | 21 + .../locales/es/task-template-drawer.json | 11 + .../es/tasks/task-table-bulk-actions.json | 41 ++ .../public/locales/es/template-drawer.json | 19 + .../src/public/locales/es/templateDrawer.json | 23 ++ .../src/public/locales/es/time-report.json | 57 +++ .../src/public/locales/es/unauthorized.json | 5 + .../src/public/locales/pt/404-page.json | 4 + .../src/public/locales/pt/account-setup.json | 32 ++ .../locales/pt/admin-center/current-bill.json | 113 ++++++ .../locales/pt/admin-center/overview.json | 8 + .../locales/pt/admin-center/projects.json | 12 + .../locales/pt/admin-center/sidebar.json | 8 + .../public/locales/pt/admin-center/teams.json | 35 ++ .../public/locales/pt/admin-center/users.json | 9 + .../public/locales/pt/all-project-list.json | 34 ++ .../public/locales/pt/auth/auth-common.json | 5 + .../locales/pt/auth/forgot-password.json | 12 + .../src/public/locales/pt/auth/login.json | 27 ++ .../src/public/locales/pt/auth/signup.json | 29 ++ .../locales/pt/auth/verify-reset-email.json | 14 + .../src/public/locales/pt/common.json | 9 + .../locales/pt/create-first-project-form.json | 13 + .../public/locales/pt/create-first-tasks.json | 7 + .../src/public/locales/pt/home.json | 45 +++ .../pt/invite-initial-team-members.json | 8 + .../src/public/locales/pt/kanban-board.json | 30 ++ .../public/locales/pt/license-expired.json | 6 + .../src/public/locales/pt/navbar.json | 31 ++ .../locales/pt/organization-name-form.json | 5 + .../src/public/locales/pt/phases-drawer.json | 19 + .../src/public/locales/pt/project-drawer.json | 52 +++ .../public/locales/pt/project-view-files.json | 14 + .../locales/pt/project-view-insights.json | 41 ++ .../locales/pt/project-view-members.json | 17 + .../locales/pt/project-view-updates.json | 6 + .../src/public/locales/pt/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../pt/project-view/project-view-header.json | 30 ++ .../pt/project-view/save-as-template.json | 27 ++ .../locales/pt/reporting-members-drawer.json | 90 +++++ .../public/locales/pt/reporting-members.json | 35 ++ .../locales/pt/reporting-overview-drawer.json | 39 ++ .../public/locales/pt/reporting-overview.json | 25 ++ .../locales/pt/reporting-projects-drawer.json | 59 +++ .../pt/reporting-projects-filters.json | 35 ++ .../public/locales/pt/reporting-projects.json | 52 +++ .../public/locales/pt/reporting-sidebar.json | 8 + .../src/public/locales/pt/schedule.json | 39 ++ .../locales/pt/settings/appearance.json | 5 + .../locales/pt/settings/categories.json | 10 + .../locales/pt/settings/change-password.json | 15 + .../public/locales/pt/settings/clients.json | 22 ++ .../locales/pt/settings/job-titles.json | 20 + .../public/locales/pt/settings/labels.json | 11 + .../public/locales/pt/settings/language.json | 7 + .../locales/pt/settings/notifications.json | 10 + .../public/locales/pt/settings/profile.json | 14 + .../pt/settings/project-templates.json | 8 + .../public/locales/pt/settings/sidebar.json | 15 + .../locales/pt/settings/task-templates.json | 9 + .../locales/pt/settings/team-members.json | 47 +++ .../src/public/locales/pt/settings/teams.json | 16 + .../pt/task-drawer/task-drawer-info-tab.json | 30 ++ .../task-drawer-recurring-config.json | 34 ++ .../locales/pt/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/pt/task-list-filters.json | 82 ++++ .../public/locales/pt/task-list-table.json | 136 +++++++ .../public/locales/pt/task-management.json | 21 + .../locales/pt/task-template-drawer.json | 11 + .../pt/tasks/task-table-bulk-actions.json | 41 ++ .../public/locales/pt/template-drawer.json | 19 + .../src/public/locales/pt/templateDrawer.json | 23 ++ .../src/public/locales/pt/time-report.json | 57 +++ .../src/public/locales/pt/unauthorized.json | 5 + .../src/public/locales/zh/404-page.json | 4 + .../src/public/locales/zh/account-setup.json | 27 ++ .../locales/zh/admin-center/current-bill.json | 96 +++++ .../locales/zh/admin-center/overview.json | 8 + .../locales/zh/admin-center/projects.json | 12 + .../locales/zh/admin-center/sidebar.json | 8 + .../public/locales/zh/admin-center/teams.json | 33 ++ .../public/locales/zh/admin-center/users.json | 9 + .../public/locales/zh/all-project-list.json | 34 ++ .../public/locales/zh/auth/auth-common.json | 5 + .../locales/zh/auth/forgot-password.json | 12 + .../src/public/locales/zh/auth/login.json | 27 ++ .../src/public/locales/zh/auth/signup.json | 29 ++ .../locales/zh/auth/verify-reset-email.json | 14 + .../src/public/locales/zh/common.json | 9 + .../locales/zh/create-first-project-form.json | 13 + .../public/locales/zh/create-first-tasks.json | 7 + .../src/public/locales/zh/home.json | 46 +++ .../zh/invite-initial-team-members.json | 8 + .../src/public/locales/zh/kanban-board.json | 19 + .../public/locales/zh/license-expired.json | 6 + .../src/public/locales/zh/navbar.json | 31 ++ .../locales/zh/organization-name-form.json | 5 + .../src/public/locales/zh/phases-drawer.json | 19 + .../src/public/locales/zh/project-drawer.json | 42 ++ .../public/locales/zh/project-view-files.json | 14 + .../locales/zh/project-view-insights.json | 41 ++ .../locales/zh/project-view-members.json | 17 + .../locales/zh/project-view-updates.json | 6 + .../src/public/locales/zh/project-view.json | 14 + .../project-view/import-task-templates.json | 11 + .../project-view/project-member-drawer.json | 7 + .../zh/project-view/project-view-header.json | 30 ++ .../zh/project-view/save-as-template.json | 27 ++ .../locales/zh/reporting-members-drawer.json | 76 ++++ .../public/locales/zh/reporting-members.json | 31 ++ .../locales/zh/reporting-overview-drawer.json | 33 ++ .../public/locales/zh/reporting-overview.json | 22 ++ .../locales/zh/reporting-projects-drawer.json | 52 +++ .../zh/reporting-projects-filters.json | 31 ++ .../public/locales/zh/reporting-projects.json | 44 +++ .../public/locales/zh/reporting-sidebar.json | 8 + .../src/public/locales/zh/schedule.json | 34 ++ .../locales/zh/settings/categories.json | 10 + .../locales/zh/settings/change-password.json | 15 + .../public/locales/zh/settings/clients.json | 22 ++ .../locales/zh/settings/job-titles.json | 20 + .../public/locales/zh/settings/labels.json | 11 + .../public/locales/zh/settings/language.json | 7 + .../locales/zh/settings/notifications.json | 11 + .../public/locales/zh/settings/profile.json | 14 + .../zh/settings/project-templates.json | 8 + .../public/locales/zh/settings/sidebar.json | 15 + .../locales/zh/settings/task-templates.json | 9 + .../locales/zh/settings/team-members.json | 47 +++ .../src/public/locales/zh/settings/teams.json | 16 + .../zh/task-drawer/task-drawer-info-tab.json | 29 ++ .../locales/zh/task-drawer/task-drawer.json | 123 ++++++ .../public/locales/zh/task-list-filters.json | 79 ++++ .../public/locales/zh/task-list-table.json | 129 ++++++ .../public/locales/zh/task-management.json | 35 ++ .../locales/zh/task-template-drawer.json | 11 + .../zh/tasks/task-table-bulk-actions.json | 24 ++ .../public/locales/zh/template-drawer.json | 19 + .../src/public/locales/zh/templateDrawer.json | 23 ++ .../src/public/locales/zh/time-report.json | 33 ++ .../src/public/locales/zh/unauthorized.json | 5 + .../optimized-bulk-action-bar.tsx | 9 +- .../task-management/task-list-board.tsx | 15 +- .../src/hooks/useTranslationPreloader.ts | 283 ------------- worklenz-frontend/src/i18n.ts | 371 +----------------- .../projects/projectView/project-view.tsx | 19 +- worklenz-frontend/vite.config.ts | 1 + 414 files changed, 11185 insertions(+), 674 deletions(-) create mode 100644 worklenz-backend/src/public/locales/alb/404-page.json create mode 100644 worklenz-backend/src/public/locales/alb/account-setup.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/alb/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/alb/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/alb/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/alb/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/alb/auth/login.json create mode 100644 worklenz-backend/src/public/locales/alb/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/alb/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/alb/common.json create mode 100644 worklenz-backend/src/public/locales/alb/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/alb/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/alb/home.json create mode 100644 worklenz-backend/src/public/locales/alb/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/alb/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/alb/license-expired.json create mode 100644 worklenz-backend/src/public/locales/alb/navbar.json create mode 100644 worklenz-backend/src/public/locales/alb/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/alb/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/alb/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/alb/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/alb/schedule.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/language.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/alb/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/alb/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/alb/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/alb/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/alb/task-management.json create mode 100644 worklenz-backend/src/public/locales/alb/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/alb/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/alb/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/alb/time-report.json create mode 100644 worklenz-backend/src/public/locales/alb/unauthorized.json create mode 100644 worklenz-backend/src/public/locales/de/404-page.json create mode 100644 worklenz-backend/src/public/locales/de/account-setup.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/de/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/de/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/de/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/de/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/de/auth/login.json create mode 100644 worklenz-backend/src/public/locales/de/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/de/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/de/common.json create mode 100644 worklenz-backend/src/public/locales/de/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/de/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/de/home.json create mode 100644 worklenz-backend/src/public/locales/de/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/de/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/de/license-expired.json create mode 100644 worklenz-backend/src/public/locales/de/navbar.json create mode 100644 worklenz-backend/src/public/locales/de/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/de/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/de/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/de/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/de/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/de/project-view.json create mode 100644 worklenz-backend/src/public/locales/de/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/de/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/de/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/de/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/de/schedule.json create mode 100644 worklenz-backend/src/public/locales/de/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/de/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/de/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/de/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/de/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/de/settings/language.json create mode 100644 worklenz-backend/src/public/locales/de/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/de/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/de/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/de/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/de/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/de/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/de/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/de/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/de/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/de/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/de/task-management.json create mode 100644 worklenz-backend/src/public/locales/de/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/de/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/de/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/de/time-report.json create mode 100644 worklenz-backend/src/public/locales/de/unauthorized.json create mode 100644 worklenz-backend/src/public/locales/en/404-page.json create mode 100644 worklenz-backend/src/public/locales/en/account-setup.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/en/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/en/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/en/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/en/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/en/auth/login.json create mode 100644 worklenz-backend/src/public/locales/en/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/en/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/en/common.json create mode 100644 worklenz-backend/src/public/locales/en/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/en/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/en/home.json create mode 100644 worklenz-backend/src/public/locales/en/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/en/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/en/license-expired.json create mode 100644 worklenz-backend/src/public/locales/en/navbar.json create mode 100644 worklenz-backend/src/public/locales/en/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/en/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/en/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/en/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/en/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/en/project-view.json create mode 100644 worklenz-backend/src/public/locales/en/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/en/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/en/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/en/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/en/schedule.json create mode 100644 worklenz-backend/src/public/locales/en/settings/appearance.json create mode 100644 worklenz-backend/src/public/locales/en/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/en/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/en/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/en/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/en/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/en/settings/language.json create mode 100644 worklenz-backend/src/public/locales/en/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/en/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/en/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/en/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/en/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/en/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/en/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/en/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/en/task-drawer/task-drawer-recurring-config.json create mode 100644 worklenz-backend/src/public/locales/en/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/en/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/en/task-management.json create mode 100644 worklenz-backend/src/public/locales/en/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/en/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/en/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/en/time-report.json create mode 100644 worklenz-backend/src/public/locales/en/unauthorized.json create mode 100644 worklenz-backend/src/public/locales/es/404-page.json create mode 100644 worklenz-backend/src/public/locales/es/account-setup.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/es/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/es/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/es/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/es/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/es/auth/login.json create mode 100644 worklenz-backend/src/public/locales/es/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/es/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/es/common.json create mode 100644 worklenz-backend/src/public/locales/es/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/es/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/es/home.json create mode 100644 worklenz-backend/src/public/locales/es/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/es/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/es/license-expired.json create mode 100644 worklenz-backend/src/public/locales/es/navbar.json create mode 100644 worklenz-backend/src/public/locales/es/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/es/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/es/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/es/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/es/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/es/project-view.json create mode 100644 worklenz-backend/src/public/locales/es/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/es/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/es/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/es/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/es/schedule.json create mode 100644 worklenz-backend/src/public/locales/es/settings/appearance.json create mode 100644 worklenz-backend/src/public/locales/es/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/es/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/es/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/es/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/es/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/es/settings/language.json create mode 100644 worklenz-backend/src/public/locales/es/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/es/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/es/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/es/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/es/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/es/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/es/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/es/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/es/task-drawer/task-drawer-recurring-config.json create mode 100644 worklenz-backend/src/public/locales/es/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/es/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/es/task-management.json create mode 100644 worklenz-backend/src/public/locales/es/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/es/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/es/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/es/time-report.json create mode 100644 worklenz-backend/src/public/locales/es/unauthorized.json create mode 100644 worklenz-backend/src/public/locales/pt/404-page.json create mode 100644 worklenz-backend/src/public/locales/pt/account-setup.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/pt/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/pt/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/pt/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/pt/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/pt/auth/login.json create mode 100644 worklenz-backend/src/public/locales/pt/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/pt/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/pt/common.json create mode 100644 worklenz-backend/src/public/locales/pt/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/pt/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/pt/home.json create mode 100644 worklenz-backend/src/public/locales/pt/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/pt/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/pt/license-expired.json create mode 100644 worklenz-backend/src/public/locales/pt/navbar.json create mode 100644 worklenz-backend/src/public/locales/pt/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/pt/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/pt/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/pt/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/pt/schedule.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/appearance.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/language.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/pt/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-recurring-config.json create mode 100644 worklenz-backend/src/public/locales/pt/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/pt/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/pt/task-management.json create mode 100644 worklenz-backend/src/public/locales/pt/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/pt/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/pt/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/pt/time-report.json create mode 100644 worklenz-backend/src/public/locales/pt/unauthorized.json create mode 100644 worklenz-backend/src/public/locales/zh/404-page.json create mode 100644 worklenz-backend/src/public/locales/zh/account-setup.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/current-bill.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/overview.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/projects.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/sidebar.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/teams.json create mode 100644 worklenz-backend/src/public/locales/zh/admin-center/users.json create mode 100644 worklenz-backend/src/public/locales/zh/all-project-list.json create mode 100644 worklenz-backend/src/public/locales/zh/auth/auth-common.json create mode 100644 worklenz-backend/src/public/locales/zh/auth/forgot-password.json create mode 100644 worklenz-backend/src/public/locales/zh/auth/login.json create mode 100644 worklenz-backend/src/public/locales/zh/auth/signup.json create mode 100644 worklenz-backend/src/public/locales/zh/auth/verify-reset-email.json create mode 100644 worklenz-backend/src/public/locales/zh/common.json create mode 100644 worklenz-backend/src/public/locales/zh/create-first-project-form.json create mode 100644 worklenz-backend/src/public/locales/zh/create-first-tasks.json create mode 100644 worklenz-backend/src/public/locales/zh/home.json create mode 100644 worklenz-backend/src/public/locales/zh/invite-initial-team-members.json create mode 100644 worklenz-backend/src/public/locales/zh/kanban-board.json create mode 100644 worklenz-backend/src/public/locales/zh/license-expired.json create mode 100644 worklenz-backend/src/public/locales/zh/navbar.json create mode 100644 worklenz-backend/src/public/locales/zh/organization-name-form.json create mode 100644 worklenz-backend/src/public/locales/zh/phases-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/project-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view-files.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view-insights.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view-members.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view-updates.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view/import-task-templates.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view/project-member-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view/project-view-header.json create mode 100644 worklenz-backend/src/public/locales/zh/project-view/save-as-template.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-members-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-members.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-overview-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-overview.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-projects-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-projects-filters.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-projects.json create mode 100644 worklenz-backend/src/public/locales/zh/reporting-sidebar.json create mode 100644 worklenz-backend/src/public/locales/zh/schedule.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/categories.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/change-password.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/clients.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/job-titles.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/labels.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/language.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/notifications.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/profile.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/project-templates.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/sidebar.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/task-templates.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/team-members.json create mode 100644 worklenz-backend/src/public/locales/zh/settings/teams.json create mode 100644 worklenz-backend/src/public/locales/zh/task-drawer/task-drawer-info-tab.json create mode 100644 worklenz-backend/src/public/locales/zh/task-drawer/task-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/task-list-filters.json create mode 100644 worklenz-backend/src/public/locales/zh/task-list-table.json create mode 100644 worklenz-backend/src/public/locales/zh/task-management.json create mode 100644 worklenz-backend/src/public/locales/zh/task-template-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/tasks/task-table-bulk-actions.json create mode 100644 worklenz-backend/src/public/locales/zh/template-drawer.json create mode 100644 worklenz-backend/src/public/locales/zh/templateDrawer.json create mode 100644 worklenz-backend/src/public/locales/zh/time-report.json create mode 100644 worklenz-backend/src/public/locales/zh/unauthorized.json delete mode 100644 worklenz-frontend/src/hooks/useTranslationPreloader.ts diff --git a/worklenz-backend/src/public/locales/alb/404-page.json b/worklenz-backend/src/public/locales/alb/404-page.json new file mode 100644 index 00000000..a5e803fe --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "Na vjen keq, faqja që kërkoni nuk ekziston.", + "backHomeButton": "Kthehu në Faqen Kryesore" +} diff --git a/worklenz-backend/src/public/locales/alb/account-setup.json b/worklenz-backend/src/public/locales/alb/account-setup.json new file mode 100644 index 00000000..d5f624b3 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/account-setup.json @@ -0,0 +1,31 @@ +{ + "continue": "Vazhdo", + + "setupYourAccount": "Konfiguro Llogarinë Tënde në Worklenz.", + "organizationStepTitle": "Emërtoni Organizatën Tuaj", + "organizationStepLabel": "Zgjidhni një emër për llogarinë tuaj në Worklenz.", + + "projectStepTitle": "Krijoni projektin tuaj të parë", + "projectStepLabel": "Në cilin projekt po punoni aktualisht?", + "projectStepPlaceholder": "p.sh. Plani i Marketingut", + + "tasksStepTitle": "Krijoni detyrat tuaja të para", + "tasksStepLabel": "Shkruani disa detyra që do të kryeni në", + "tasksStepAddAnother": "Shto një tjetër", + + "emailPlaceholder": "Adresa email", + "invalidEmail": "Ju lutemi vendosni një adresë email të vlefshme", + "or": "ose", + "templateButton": "Importo nga shablloni", + "goBack": "Kthehu Mbrapa", + "cancel": "Anulo", + "create": "Krijo", + "templateDrawerTitle": "Zgjidh nga shabllonet", + "step3InputLabel": "Fto me email", + "addAnother": "Shto një tjetër", + "skipForNow": "Kalo tani për tani", + "formTitle": "Krijoni detyrën tuaj të parë.", + "step3Title": "Fto ekipin tënd të punojë me", + "maxMembers": " (Mund të ftoni deri në 5 anëtarë)", + "maxTasks": " (Mund të krijoni deri në 5 detyra)" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/current-bill.json b/worklenz-backend/src/public/locales/alb/admin-center/current-bill.json new file mode 100644 index 00000000..1f76f32b --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/current-bill.json @@ -0,0 +1,113 @@ +{ + "title": "Faturimet", + "currentBill": "Fatura Aktuale", + "configuration": "Konfigurimi", + "currentPlanDetails": "Detajet e Planit Aktual", + "upgradePlan": "Përmirëso Planin", + "cardBodyText01": "Provë falas", + "cardBodyText02": "(Plani juaj i provës skadon në 1 muaj 19 ditë)", + "redeemCode": "Kodi i Zbritjes", + "accountStorage": "Depozita e Llogarisë", + "used": "Përdorur:", + "remaining": "E mbetur:", + "charges": "Tarifat", + "tooltip": "Tarifat për ciklin aktual të faturimit", + "description": "Përshkrimi", + "billingPeriod": "Periudha e Faturimit", + "billStatus": "Statusi i Faturës", + "perUserValue": "Vlera për Përdorues", + "users": "Përdoruesit", + + "amount": "Shuma", + "invoices": "Faturat", + "transactionId": "ID e Transaksionit", + "transactionDate": "Data e Transaksionit", + "paymentMethod": "Metoda e Pagesës", + "status": "Statusi", + "ltdUsers": "Mund të shtoni deri në {{ltd_users}} përdorues.", + + "totalSeats": "Vende totale", + "availableSeats": "Vende të disponueshme", + "addMoreSeats": "Shto më shumë vende", + + "drawerTitle": "Kodi i Zbritjes", + "label": "Kodi i Zbritjes", + "drawerPlaceholder": "Vendosni kodin tuaj të zbritjes", + "redeemSubmit": "Paraqit", + + "modalTitle": "Zgjidhni planin më të mirë për ekipin tuaj", + "seatLabel": "Numri i vendeve", + "freePlan": "Plan Falas", + "startup": "Startup", + "business": "Biznes", + "tag": "Më i Popullarizuar", + "enterprise": "Ndërmarrje", + + "freeSubtitle": "falas përgjithmonë", + "freeUsers": "Më e mira për përdorim personal", + "freeText01": "100MB depozitë", + "freeText02": "3 projekte", + "freeText03": "5 anëtarë të ekipit", + + "startupSubtitle": "ÇMIM I RASTËSISHËM / muaj", + "startupUsers": "Deri në 15 përdorues", + "startupText01": "25GB depozitë", + "startupText02": "Projekte të pakufizuara aktive", + "startupText03": "Orar", + "startupText04": "Raportim", + "startupText05": "Abonohu në projekte", + + "businessSubtitle": "përdorues / muaj", + "businessUsers": "16 - 200 përdorues", + + "enterpriseUsers": "200 - 500+ përdorues", + + "footerTitle": "Ju lutemi na jepni një numër kontakti që mund të përdorim për t'ju kontaktuar.", + "footerLabel": "Numri i Kontaktit", + "footerButton": "Na kontaktoni", + + "redeemCodePlaceHolder": "Vendosni kodin tuaj të zbritjes", + "submit": "Paraqit", + + "trialPlan": "Provë Falas", + "trialExpireDate": "E vlefshme deri më {{trial_expire_date}}", + "trialExpired": "Provat tuaja falas skaduan {{trial_expire_string}}", + "trialInProgress": "Provat tuaja falas skadojnë {{trial_expire_string}}", + + "required": "Kjo fushë është e detyrueshme", + "invalidCode": "Kod i pavlefshëm", + + "selectPlan": "Zgjidhni planin më të mirë për ekipin tuaj", + "changeSubscriptionPlan": "Ndryshoni planin tuaj të abonimit", + "noOfSeats": "Numri i vendeve", + "annualPlan": "Pro - Vjetor", + "monthlyPlan": "Pro - Mujor", + "freeForever": "Falas Përgjithmonë", + "bestForPersonalUse": "Më e mira për përdorim personal", + "storage": "Depozitë", + "projects": "Projekte", + "teamMembers": "Anëtarët e Ekipit", + "unlimitedTeamMembers": "Anëtarë të pakufizuar të ekipit", + "unlimitedActiveProjects": "Projekte të pakufizuara aktive", + "schedule": "Orar", + "reporting": "Raportim", + "subscribeToProjects": "Abonohu në projekte", + "billedAnnually": "Faturuar çdo vit", + "billedMonthly": "Faturuar çdo muaj", + + "pausePlan": "Pauzë Planin", + "resumePlan": "Rifillo Planin", + "changePlan": "Ndrysho Planin", + "cancelPlan": "Anulo Planin", + + "perMonthPerUser": "për përdorues/muaj", + "viewInvoice": "Shiko Faturën", + "switchToFreePlan": "Kalo në Planin Falas", + + "expirestoday": "sot", + "expirestomorrow": "nesër", + "expiredDaysAgo": "{{days}} ditë më parë", + + "continueWith": "Vazhdo me {{plan}}", + "changeToPlan": "Ndrysho në {{plan}}" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/overview.json b/worklenz-backend/src/public/locales/alb/admin-center/overview.json new file mode 100644 index 00000000..296eae4c --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "Përmbledhje", + "name": "Emri i Organizatës", + "owner": "Pronari i Organizatës", + "admins": "Administruesit e Organizatës", + "contactNumber": "Shto Numrin e Kontaktit", + "edit": "Redakto" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/projects.json b/worklenz-backend/src/public/locales/alb/admin-center/projects.json new file mode 100644 index 00000000..356aaec9 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "Numri i Anëtarëve", + "createdAt": "Krijuar më", + "projectName": "Emri i Projektit", + "teamName": "Emri i Ekipit", + "refreshProjects": "Rifresko Projektet", + "searchPlaceholder": "Kërkoni sipas emrit të projektit", + "deleteProject": "Jeni i sigurt që dëshironi të fshini këtë projekt?", + "confirm": "Konfirmo", + "cancel": "Anulo", + "delete": "Fshi Projektin" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/sidebar.json b/worklenz-backend/src/public/locales/alb/admin-center/sidebar.json new file mode 100644 index 00000000..584a9a10 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Përmbledhje", + "users": "Përdoruesit", + "teams": "Ekipet", + "billing": "Faturimi", + "projects": "Projektet", + "adminCenter": "Qendra Administrative" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/teams.json b/worklenz-backend/src/public/locales/alb/admin-center/teams.json new file mode 100644 index 00000000..de37bf7a --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/teams.json @@ -0,0 +1,33 @@ +{ + "title": "Ekipet", + "subtitle": "ekipet", + "tooltip": "Rifresko ekipet", + "placeholder": "Kërko sipas emrit", + "addTeam": "Shto Ekip", + "team": "Ekipi", + "membersCount": "Numri i Anëtarëve", + "members": "Anëtarët", + "drawerTitle": "Krijo Ekip të Ri", + "label": "Emri i Ekipit", + "drawerPlaceholder": "Emri", + "create": "Krijo", + "delete": "Fshi", + "settings": "Cilësimet", + "popTitle": "Jeni i sigurt?", + "message": "Ju lutemi shkruani një Emër", + "teamSettings": "Cilësimet e Ekipit", + "teamName": "Emri i Ekipit", + "teamDescription": "Përshkrimi i Ekipit", + "teamMembers": "Anëtarët e Ekipit", + "teamMembersCount": "Numri i Anëtarëve të Ekipit", + "teamMembersPlaceholder": "Kërko sipas emrit", + "addMember": "Shto Anëtar", + "add": "Shto", + "update": "Përditëso", + "teamNamePlaceholder": "Emri i ekipit", + "user": "Përdoruesi", + "role": "Roli", + "owner": "Pronari", + "admin": "Administruesi", + "member": "Anëtari" +} diff --git a/worklenz-backend/src/public/locales/alb/admin-center/users.json b/worklenz-backend/src/public/locales/alb/admin-center/users.json new file mode 100644 index 00000000..9cfe7956 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "Përdoruesit", + "subTitle": "përdoruesit", + "placeholder": "Kërko sipas emrit", + "user": "Përdoruesi", + "email": "Email", + "lastActivity": "Aktiviteti i Fundit", + "refresh": "Rifresko përdoruesit" +} diff --git a/worklenz-backend/src/public/locales/alb/all-project-list.json b/worklenz-backend/src/public/locales/alb/all-project-list.json new file mode 100644 index 00000000..8079f13d --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "Emri", + "client": "Klienti", + "category": "Kategoria", + "status": "Statusi", + "tasksProgress": "Përparimi i Detyrave", + "updated_at": "E Përditësuar së Fundi", + "members": "Anëtarët", + "setting": "Cilësimet", + "projects": "Projektet", + "refreshProjects": "Rifresko projektet", + "all": "Të gjitha", + "favorites": "Të preferuarit", + "archived": "E arkivuar", + "placeholder": "Kërko sipas emrit", + "archive": "Arkivo", + "unarchive": "Çarkivo", + "archiveConfirm": "Jeni i sigurt që dëshironi të arkivoni këtë projekt?", + "unarchiveConfirm": "Jeni i sigurt që dëshironi të çarkivoni këtë projekt?", + "yes": "Po", + "no": "Jo", + "clickToFilter": "Kliko për të filtruar sipas", + "noProjects": "Nuk u gjetën projekte", + "addToFavourites": "Shto te të preferuarit", + "list": "Lista", + "group": "Grupi", + "listView": "Pamja e Listës", + "groupView": "Pamja e Grupit", + "groupBy": { + "category": "Kategoria", + "client": "Klienti" + }, + "noPermission": "Nuk keni leje për të kryer këtë veprim" +} diff --git a/worklenz-backend/src/public/locales/alb/auth/auth-common.json b/worklenz-backend/src/public/locales/alb/auth/auth-common.json new file mode 100644 index 00000000..5f687234 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "Po dilni...", + "authenticating": "Po autentikoheni...", + "gettingThingsReady": "Po përgatiten gjërat për ju..." +} diff --git a/worklenz-backend/src/public/locales/alb/auth/forgot-password.json b/worklenz-backend/src/public/locales/alb/auth/forgot-password.json new file mode 100644 index 00000000..2ee64388 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "Rivendosni fjalëkalimin tuaj", + "emailLabel": "Email", + "emailPlaceholder": "Vendosni email-in tuaj", + "emailRequired": "Ju lutemi vendosni Email-in tuaj!", + "resetPasswordButton": "Rivendos Fjalëkalimin", + "returnToLoginButton": "Kthehu te Hyrja", + "passwordResetSuccessMessage": "Një lidhje për rivendosjen e fjalëkalimit është dërguar në email-in tuaj.", + "orText": "OSE", + "successTitle": "U dërguan udhëzimet për rivendosje!", + "successMessage": "Informacioni për rivendosje është dërguar në email-in tuaj. Ju lutemi kontrolloni email-in." +} diff --git a/worklenz-backend/src/public/locales/alb/auth/login.json b/worklenz-backend/src/public/locales/alb/auth/login.json new file mode 100644 index 00000000..668b4fdc --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "Hyni në llogarinë tuaj", + "emailLabel": "Email", + "emailPlaceholder": "Vendosni email-in tuaj", + "emailRequired": "Ju lutemi vendosni Email-in tuaj!", + "passwordLabel": "Fjalëkalimi", + "passwordPlaceholder": "Vendosni fjalëkalimin", + "passwordRequired": "Ju lutemi vendosni Fjalëkalimin!", + "rememberMe": "Më mbaj mend", + "loginButton": "Hyr", + "signupButton": "Regjistrohu", + "forgotPasswordButton": "Keni harruar fjalëkalimin?", + "signInWithGoogleButton": "Hyr me Google", + "dontHaveAccountText": "Nuk keni llogari?", + "orText": "OSE", + "successMessage": "Jeni futur me sukses!", + "loginError": "Hyrja dështoi", + "googleLoginError": "Hyrja përmes Google dështoi", + "validationMessages": { + "email": "Ju lutemi vendosni një adresë email të vlefshme", + "password": "Fjalëkalimi duhet të jetë së paku 8 karaktere" + }, + "errorMessages": { + "loginErrorTitle": "Hyrja dështoi", + "loginErrorMessage": "Ju lutemi kontrolloni email-in dhe fjalëkalimin dhe provoni përsëri" + } +} diff --git a/worklenz-backend/src/public/locales/alb/auth/signup.json b/worklenz-backend/src/public/locales/alb/auth/signup.json new file mode 100644 index 00000000..1dac7a39 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "Regjistrohuni për të filluar", + "nameLabel": "Emri i Plotë", + "namePlaceholder": "Shkruani emrin tuaj të plotë", + "nameRequired": "Ju lutemi shkruani emrin tuaj të plotë!", + "nameMinCharacterRequired": "Emri duhet të jetë së paku 4 karaktere!", + "emailLabel": "Email", + "emailPlaceholder": "Shkruani email-in tuaj", + "emailRequired": "Ju lutemi shkruani Email-in tuaj!", + "passwordLabel": "Fjalëkalimi", + "passwordPlaceholder": "Krijoni një fjalëkalim", + "passwordRequired": "Ju lutemi krijoni një Fjalëkalim!", + "passwordMinCharacterRequired": "Fjalëkalimi duhet të jetë së paku 8 karaktere!", + "passwordPatternRequired": "Fjalëkalimi nuk plotëson kërkesat!", + "strongPasswordPlaceholder": "Vendosni një fjalëkalim më të fortë", + "passwordValidationAltText": "Fjalëkalimi duhet të përmbajë së paku 8 karaktere me shkronja të mëdha dhe të vogla, një numër dhe një simbol.", + "signupSuccessMessage": "Jeni regjistruar me sukses!", + "privacyPolicyLink": "Politika e Privatësisë", + "termsOfUseLink": "Kushtet e Përdorimit", + "bySigningUpText": "Duke u regjistruar, ju pranoni", + "andText": "dhe", + "signupButton": "Regjistrohu", + "signInWithGoogleButton": "Hyr me Google", + "alreadyHaveAccountText": "Keni tashmë një llogari?", + "loginButton": "Hyr", + "orText": "OSE", + "reCAPTCHAVerificationError": "Gabim në Verifikimin e reCAPTCHA", + "reCAPTCHAVerificationErrorMessage": "Nuk mundëm të verifikojmë reCAPTCHA-n tuaj. Ju lutemi provoni përsëri." +} diff --git a/worklenz-backend/src/public/locales/alb/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/alb/auth/verify-reset-email.json new file mode 100644 index 00000000..16017318 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "Verifikoni Email-in për Rivendosje", + "description": "Vendosni fjalëkalimin tuaj të ri", + "placeholder": "Vendosni fjalëkalimin tuaj të ri", + "confirmPasswordPlaceholder": "Konfirmoni fjalëkalimin e ri", + "passwordHint": "Të paktën 8 karaktere, me shkronja të mëdha dhe të vogla, një numër dhe një simbol.", + "resetPasswordButton": "Rivendos fjalëkalimin", + "orText": "Ose", + "resendResetEmail": "Dërgo përsëri email-in e rivendosjes", + "passwordRequired": "Ju lutemi vendosni fjalëkalimin e ri", + "returnToLoginButton": "Kthehu te Hyrja", + "confirmPasswordRequired": "Ju lutemi konfirmoni fjalëkalimin e ri", + "passwordMismatch": "Fjalëkalimet nuk përputhen" +} diff --git a/worklenz-backend/src/public/locales/alb/common.json b/worklenz-backend/src/public/locales/alb/common.json new file mode 100644 index 00000000..5af25f69 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "Hyrja u krye me sukses!", + "login-failed": "Hyrja dështoi. Ju lutemi kontrolloni kredencialet dhe provoni përsëri.", + "signup-success": "Regjistrimi u krye me sukses! Mirë se erdhët.", + "signup-failed": "Regjistrimi dështoi. Ju lutemi sigurohuni që të gjitha fushat e nevojshme janë plotësuar dhe provoni përsëri.", + "reconnecting": "Jeni shkëputur nga serveri.", + "connection-lost": "Lidhja me serverin dështoi. Ju lutemi kontrolloni lidhjen tuaj me internet.", + "connection-restored": "U lidhët me serverin me sukses" +} diff --git a/worklenz-backend/src/public/locales/alb/create-first-project-form.json b/worklenz-backend/src/public/locales/alb/create-first-project-form.json new file mode 100644 index 00000000..80c3bb86 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "Krijoni projektin tuaj të parë", + "inputLabel": "Në cilin projekt po punoni aktualisht?", + "or": "ose", + "templateButton": "Importo nga shablloni", + "createFromTemplate": "Krijo nga shablloni", + "goBack": "Kthehu Mbrapa", + "continue": "Vazhdo", + "cancel": "Anulo", + "create": "Krijo", + "templateDrawerTitle": "Zgjidh nga shabllonet", + "createProject": "Krijo Projekt" +} diff --git a/worklenz-backend/src/public/locales/alb/create-first-tasks.json b/worklenz-backend/src/public/locales/alb/create-first-tasks.json new file mode 100644 index 00000000..5e74d7d4 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "Krijo detyrën tënde të parë.", + "inputLabel": "Shkruaj disa detyra që do të kryesh në", + "addAnother": "Shto një tjetër", + "goBack": "Kthehu mbrapa", + "continue": "Vazhdo" +} diff --git a/worklenz-backend/src/public/locales/alb/home.json b/worklenz-backend/src/public/locales/alb/home.json new file mode 100644 index 00000000..58d26e0b --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/home.json @@ -0,0 +1,46 @@ +{ + "todoList": { + "title": "Lista e Detyrave", + "refreshTasks": "Rifresko detyrat", + "addTask": "+ Shto Detyrë", + "noTasks": "Asnjë detyrë", + "pressEnter": "Shtyp", + "toCreate": "për të krijuar.", + "markAsDone": "Shëno si të përfunduar" + }, + "projects": { + "title": "Projektet", + "refreshProjects": "Rifresko projektet", + "noRecentProjects": "Aktualisht nuk jeni caktuar në asnjë projekt.", + "noFavouriteProjects": "Asnjë projekt i shënuar si i preferuar.", + "recent": "Të Fundit", + "favourites": "Të Preferuarat" + }, + "tasks": { + "assignedToMe": "Më janë caktuar", + "assignedByMe": "I kam caktuar", + "all": "Të Gjitha", + "today": "Sot", + "upcoming": "Ardhj", + "overdue": "Të vonuara", + "noDueDate": "Pa afat", + "noTasks": "Asnjë detyrë për të shfaqur.", + "addTask": "+ Shto detyrë", + "name": "Emri", + "project": "Projekti", + "status": "Statusi", + "dueDate": "Afati", + "dueDatePlaceholder": "Cakto Afatin", + "tomorrow": "Nesër", + "nextWeek": "Javën e Ardhshme", + "nextMonth": "Muajin e Ardhshëm", + "projectRequired": "Ju lutemi zgjidhni një projekt", + "pressTabToSelectDueDateAndProject": "Shtyp Tab për të zgjedhur afatin dhe projektin", + "dueOn": "Detyrat me afat më", + "taskRequired": "Ju lutemi shtoni një detyrë", + "list": "Listë", + "calendar": "Kalendar", + "tasks": "Detyrat", + "refresh": "Rifresko" + } +} diff --git a/worklenz-backend/src/public/locales/alb/invite-initial-team-members.json b/worklenz-backend/src/public/locales/alb/invite-initial-team-members.json new file mode 100644 index 00000000..c86da726 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "Fto ekipin tënd të punojë me", + "inputLabel": "Fto me email", + "addAnother": "Shto një tjetër", + "goBack": "Kthehu mbrapa", + "continue": "Vazhdo", + "skipForNow": "Anashkalo tani për tani" +} diff --git a/worklenz-backend/src/public/locales/alb/kanban-board.json b/worklenz-backend/src/public/locales/alb/kanban-board.json new file mode 100644 index 00000000..def705aa --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/kanban-board.json @@ -0,0 +1,30 @@ +{ + "rename": "Riemërto", + "delete": "Fshi", + "addTask": "Shto Detyrë", + "addSectionButton": "Shto Seksion", + "changeCategory": "Ndrysho kategorinë", + + "deleteTooltip": "Fshi", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + + "dueDate": "Data e përfundimit", + "cancel": "Anulo", + + "today": "Sot", + "tomorrow": "Nesër", + "assignToMe": "Cakto mua", + "archive": "Arkivo", + + "newTaskNamePlaceholder": "Shkruaj emrin e detyrës", + "newSubtaskNamePlaceholder": "Shkruaj emrin e nëndetyrës", + "untitledSection": "Seksion pa titull", + "unmapped": "Pa hartë", + "clickToChangeDate": "Klikoni për të ndryshuar datën", + "noDueDate": "Pa datë përfundimi", + "save": "Ruaj", + "clear": "Pastro", + "nextWeek": "Javën e ardhshme" +} diff --git a/worklenz-backend/src/public/locales/alb/license-expired.json b/worklenz-backend/src/public/locales/alb/license-expired.json new file mode 100644 index 00000000..94abf5ae --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "Prova juaj e Worklenz ka skaduar!", + "subtitle": "Ju lutemi përmirësoni tani.", + "button": "Përmirëso tani", + "checking": "Po kontrollohet statusi i abonimit..." +} diff --git a/worklenz-backend/src/public/locales/alb/navbar.json b/worklenz-backend/src/public/locales/alb/navbar.json new file mode 100644 index 00000000..88c53de4 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Logoja e Worklenz", + "home": "Kryefaqja", + "projects": "Projektet", + "schedule": "Orari", + "reporting": "Raportimi", + "clients": "Klientët", + "teams": "Ekipet", + "labels": "Etiketa", + "jobTitles": "Tituj Pune", + "upgradePlan": "Përmirëso Abonimin", + "upgradePlanTooltip": "Përmirëso abonimin", + "invite": "Fto", + "inviteTooltip": "Fto anëtarë të ekipit të bashkohen", + "switchTeamTooltip": "Ndrysho ekipin", + "help": "Ndihmë", + "notificationTooltip": "Shiko njoftimet", + "profileTooltip": "Shiko profilin", + "adminCenter": "Qendra Administrative", + "settings": "Cilësimet", + "logOut": "Dil", + "notificationsDrawer": { + "read": "Lexuara e njoftimet ", + "unread": "Njoftimet e palexuara", + "markAsRead": "Shëno si të lexuara", + "readAndJoin": "Lexo & Bashkohu", + "accept": "Prano", + "acceptAndJoin": "Prano & Bashkohu", + "noNotifications": "Asnjë njoftim" + } +} diff --git a/worklenz-backend/src/public/locales/alb/organization-name-form.json b/worklenz-backend/src/public/locales/alb/organization-name-form.json new file mode 100644 index 00000000..d01b09c8 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "Emërtoni organizatën tuaj.", + "worklenzAccountTitle": "Zgjidhni një emër për llogarinë tuaj në Worklenz.", + "continue": "Vazhdo" +} diff --git a/worklenz-backend/src/public/locales/alb/phases-drawer.json b/worklenz-backend/src/public/locales/alb/phases-drawer.json new file mode 100644 index 00000000..cccda7d2 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "Konfiguro Fazat", + "phaseLabel": "Etiketa e Fazës", + "enterPhaseName": "Vendosni një emër për etiketën e fazës", + "addOption": "Shto Opsion", + "phaseOptions": "Opsionet e Fazës:", + "dragToReorderPhases": "Zvarrit fazat për t'i rirenditur. Çdo fazë mund të ketë një ngjyrë të ndryshme.", + "enterNewPhaseName": "Shkruani emrin e fazës së re...", + "addPhase": "Shto Fazë", + "noPhasesFound": "Nuk u gjetën faza. Krijoni fazën tuaj të parë më sipër.", + "deletePhase": "Fshi Fazën", + "deletePhaseConfirm": "Jeni të sigurt që doni të fshini këtë fazë? Ky veprim nuk mund të zhbëhet.", + "rename": "Riemëro", + "delete": "Fshi", + "enterPhaseName": "Shkruani emrin e fazës", + "selectColor": "Zgjidh ngjyrën", + "managePhases": "Menaxho Fazat", + "close": "Mbyll" +} diff --git a/worklenz-backend/src/public/locales/alb/project-drawer.json b/worklenz-backend/src/public/locales/alb/project-drawer.json new file mode 100644 index 00000000..952dba7e --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-drawer.json @@ -0,0 +1,42 @@ +{ + "createProject": "Krijo Projekt", + "editProject": "Modifiko Projektin", + "enterCategoryName": "Vendosni emër për kategorinë", + "hitEnterToCreate": "Shtyp Enter për të krijuar!", + "enterNotes": "Shënime", + "youCanManageClientsUnderSettings": "Mund të menaxhoni klientët nën Cilësimet", + "addCategory": "Shto kategori projektit", + "newCategory": "Kategori e Re", + "notes": "Shënime", + "startDate": "Data e Fillimit", + "endDate": "Data e Përfundimit", + "estimateWorkingDays": "Vlerëso ditët e punës", + "estimateManDays": "Vlerëso ditët e punëtorëve", + "hoursPerDay": "Orë në ditë", + "create": "Krijo", + "update": "Përditëso", + "delete": "Fshi", + "typeToSearchClients": "Shkruani për të kërkuar klientë", + "projectColor": "Ngjyra e Projektit", + "pleaseEnterAName": "Ju lutemi vendosni një emër", + "enterProjectName": "Vendosni emrin e projektit", + "name": "Emri", + "status": "Statusi", + "health": "Gjendja", + "category": "Kategoria", + "projectManager": "Menaxheri i Projektit", + "client": "Klienti", + "deleteConfirmation": "Jeni i sigurt që doni të fshini?", + "deleteConfirmationDescription": "Kjo do të fshijë të gjitha të dhënat e lidhura dhe nuk mund të zhbëhet.", + "yes": "Po", + "no": "Jo", + "createdAt": "Krijuar më", + "updatedAt": "Përditësuar më", + "by": "nga", + "add": "Shto", + "asClient": "si klient", + "createClient": "Krijo klient", + "searchInputPlaceholder": "Kërko sipas emrit ose emailit", + "hoursPerDayValidationMessage": "Orët në ditë duhet të jenë një numër midis 1 dhe 24", + "noPermission": "Nuk ka leje" +} diff --git a/worklenz-backend/src/public/locales/alb/project-view-files.json b/worklenz-backend/src/public/locales/alb/project-view-files.json new file mode 100644 index 00000000..1a49c36a --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "Emri", + "attachedTaskColumn": "Detyra e Bashkangjitur", + "sizeColumn": "Madhësia", + "uploadedByColumn": "Ngarkuar Nga", + "uploadedAtColumn": "Ngarkuar Më", + "fileIconAlt": "Ikona e skedarit", + "titleDescriptionText": "Të gjitha bashkëngjitjet e detyrave në këtë projekt do të shfahen këtu.", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "segmentedTooltip": "Së shpejti! Kaloni midis pamjes listë dhe pamjes miniaturash.", + "emptyText": "Nuk ka bashkëngjitje në projekt." +} diff --git a/worklenz-backend/src/public/locales/alb/project-view-insights.json b/worklenz-backend/src/public/locales/alb/project-view-insights.json new file mode 100644 index 00000000..c7714578 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "Përmbledhje", + "statusOverview": "Përmbledhje Statusi", + "priorityOverview": "Përmbledhje Prioriteti", + "lastUpdatedTasks": "Detyrat e Përditësuara Së Fundi" + }, + "members": { + "title": "Anëtarët", + "tooltip": "Anëtarët", + "tasksByMembers": "Detyrat sipas anëtarëve", + "tasksByMembersTooltip": "Detyrat sipas anëtarëve", + "name": "Emri", + "taskCount": "Numri i Detyrave", + "contribution": "Kontributi", + "completed": "Të Përfunduara", + "incomplete": "Të Papërfunduara", + "overdue": "Të Vonuara", + "progress": "Progresi" + }, + "tasks": { + "overdueTasks": "Detyrat e Vonuara", + "overLoggedTasks": "Detyrat me regjistrim të tepërt", + "tasksCompletedEarly": "Detyrat e përfunduara para afatit", + "tasksCompletedLate": "Detyrat e përfunduara pas afatit", + "overLoggedTasksTooltip": "Detyrat me kohë të regjistruar mbi kohën e vlerësuar", + "overdueTasksTooltip": "Detyrat që kanë kaluar afatin e tyre" + }, + "common": { + "seeAll": "Shiko të gjitha", + "totalLoggedHours": "Orët totale të regjistruara", + "totalEstimation": "Vlerësimi total", + "completedTasks": "Detyrat e përfunduara", + "incompleteTasks": "Detyrat e papërfunduara", + "overdueTasks": "Detyrat e vonuara", + "overdueTasksTooltip": "Detyrat që kanë kaluar afatin e tyre", + "totalLoggedHoursTooltip": "Vlerësimi dhe koha e regjistruar për detyrat.", + "includeArchivedTasks": "Përfshi Detyrat e Arkivuara", + "export": "Eksporto" + } +} diff --git a/worklenz-backend/src/public/locales/alb/project-view-members.json b/worklenz-backend/src/public/locales/alb/project-view-members.json new file mode 100644 index 00000000..239b77e9 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "Emri", + "jobTitleColumn": "Titulli i Punës", + "emailColumn": "Email", + "tasksColumn": "Detyrat", + "taskProgressColumn": "Progresi i Detyrave", + "accessColumn": "Qasja", + "fileIconAlt": "Ikona e skedarit", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "refreshButtonTooltip": "Rifresko anëtarët", + "deleteButtonTooltip": "Hiq nga projekti", + "memberCount": "Anëtar", + "membersCountPlural": "Anëtarë", + "emptyText": "Nuk ka bashkëngjitje në projekt." +} diff --git a/worklenz-backend/src/public/locales/alb/project-view-updates.json b/worklenz-backend/src/public/locales/alb/project-view-updates.json new file mode 100644 index 00000000..15a4ec1c --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "Shto një koment..", + "addButton": "Shto", + "cancelButton": "Anulo", + "deleteButton": "Fshi" +} diff --git a/worklenz-backend/src/public/locales/alb/project-view.json b/worklenz-backend/src/public/locales/alb/project-view.json new file mode 100644 index 00000000..2bc256fe --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "Lista e Detyrave", + "board": "Tabela Kanban", + "insights": "Analiza", + "files": "Skedarë", + "members": "Anëtarë", + "updates": "Përditësime", + "projectView": "Pamja e Projektit", + "loading": "Duke ngarkuar projektin...", + "error": "Gabim në ngarkimin e projektit", + "pinnedTab": "E fiksuar si tab i parazgjedhur", + "pinTab": "Fikso si tab i parazgjedhur", + "unpinTab": "Hiqe fiksimin e tab-it të parazgjedhur" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/alb/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/alb/project-view/import-task-templates.json new file mode 100644 index 00000000..fab0381b --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "Importo Shabllon Detyrash", + "templateName": "Emri i Shabllonit", + "templateDescription": "Përshkrimi i Shabllonit", + "selectedTasks": "Detyrat e Përzgjedhura", + "tasks": "Detyrat", + "templates": "Shabllonet", + "remove": "Hiq", + "cancel": "Anulo", + "import": "Importo" +} diff --git a/worklenz-backend/src/public/locales/alb/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/alb/project-view/project-member-drawer.json new file mode 100644 index 00000000..aa6637e1 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "Anëtarët e Projektit", + "searchLabel": "Shtoni anëtarë duke shkruar emrin ose email-in e tyre", + "searchPlaceholder": "Shkruani emrin ose email-in", + "inviteAsAMember": "Fto si anëtar", + "inviteNewMemberByEmail": "Fto anëtar të ri me email" +} diff --git a/worklenz-backend/src/public/locales/alb/project-view/project-view-header.json b/worklenz-backend/src/public/locales/alb/project-view/project-view-header.json new file mode 100644 index 00000000..51d91ba1 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "Importo detyra", + "importTask": "Importo detyrë", + "createTask": "Krijo detyrë", + "settings": "Cilësimet", + "subscribe": "Abonohu", + "unsubscribe": "Çabonohu", + "deleteProject": "Fshi projektin", + "startDate": "Data e fillimit", + "endDate": "Data e mbarimit", + "projectSettings": "Cilësimet e projektit", + "projectSummary": "Përmbledhja e projektit", + "receiveProjectSummary": "Merrni një përmbledhje të projektit çdo mbrëmje.", + "refreshProject": "Rifresko projektin", + "saveAsTemplate": "Ruaj si model", + "invite": "Fto", + "share": "Ndaj", + "subscribeTooltip": "Abonohu tek njoftimet e projektit", + "unsubscribeTooltip": "Çabonohu nga njoftimet e projektit", + "refreshTooltip": "Rifresko të dhënat e projektit", + "settingsTooltip": "Hap cilësimet e projektit", + "saveAsTemplateTooltip": "Ruaj këtë projekt si model", + "inviteTooltip": "Fto anëtarë të ekipit në këtë projekt", + "createTaskTooltip": "Krijo një detyrë të re", + "importTaskTooltip": "Importo detyrë nga modeli", + "navigateBackTooltip": "Kthehu tek lista e projekteve", + "projectStatusTooltip": "Statusi i projektit", + "projectDatesInfo": "Informacion për kohëzgjatjen e projektit", + "projectCategoryTooltip": "Kategoria e projektit" +} diff --git a/worklenz-backend/src/public/locales/alb/project-view/save-as-template.json b/worklenz-backend/src/public/locales/alb/project-view/save-as-template.json new file mode 100644 index 00000000..63d7ace8 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "Ruaj si Shabllon", + "templateName": "Emri i Shabllonit", + "includes": "Çfarë duhet të përfshihet në shabllon nga projekti?", + "includesOptions": { + "statuses": "Statuset", + "phases": "Fazat", + "labels": "Etiketat" + }, + "taskIncludes": "Çfarë duhet të përfshihet në shabllon nga detyrat?", + "taskIncludesOptions": { + "statuses": "Statuset", + "phases": "Fazat", + "labels": "Etiketat", + "name": "Emri", + "priority": "Prioriteti", + "status": "Statusi", + "phase": "Faza", + "label": "Etiketa", + "timeEstimate": "Vlerësimi i Kohës", + "description": "Përshkrimi", + "subTasks": "Nëndetyrat" + }, + "cancel": "Anulo", + "save": "Ruaj", + "templateNamePlaceholder": "Shkruani emrin e shabllonit" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-members-drawer.json b/worklenz-backend/src/public/locales/alb/reporting-members-drawer.json new file mode 100644 index 00000000..899e590e --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-members-drawer.json @@ -0,0 +1,90 @@ +{ + "exportButton": "Eksporto", + "timeLogsButton": "Regjistrimet e Kohës", + "activityLogsButton": "Regjistrimet e Aktivitetit", + "tasksButton": "Detyrat", + "searchByNameInputPlaceholder": "Kërko sipas emrit", + + "overviewTab": "Përmbledhje", + "timeLogsTab": "Regjistrimet e Kohës", + "activityLogsTab": "Regjistrimet e Aktivitetit", + "tasksTab": "Detyrat", + + "projectsText": "Projektet", + "totalTasksText": "Detyrat Gjithsej", + "assignedTasksText": "Detyrat e Caktuara", + "completedTasksText": "Detyrat e Përfunduara", + "ongoingTasksText": "Detyrat në Vazhdim", + "overdueTasksText": "Detyrat e Vonuara", + "loggedHoursText": "Orët e Regjistruara", + + "tasksText": "Detyrat", + "allText": "Të Gjitha", + + "tasksByProjectsText": "Detyrat Sipas Projekteve", + "tasksByStatusText": "Detyrat Sipas Statusit", + "tasksByPriorityText": "Detyrat Sipas Prioritetit", + + "todoText": "Për Të Bërë", + "doingText": "Duke bërë", + "doneText": "E Përfunduar", + "lowText": "I Ulët", + "mediumText": "I Mesëm", + "highText": "I Lartë", + + "billableButton": "Fakturueshme", + "billableText": "Fakturueshme", + "nonBillableText": "Jo Fakturueshme", + + "timeLogsEmptyPlaceholder": "Asnjë regjistrim kohe për të shfaqur", + "loggedText": "Regjistruar", + "forText": "për", + "inText": "në", + "updatedText": "Përditësuar", + "fromText": "Nga", + "toText": "në", + "withinText": "brenda", + + "activityLogsEmptyPlaceholder": "Asnjë regjistrim aktiviteti për të shfaqur", + + "filterByText": "Filtro sipas:", + "selectProjectPlaceholder": "Zgjidh Projektin", + + "taskColumn": "Detyra", + "nameColumn": "Emri", + "projectColumn": "Projekti", + "statusColumn": "Statusi", + "priorityColumn": "Prioriteti", + "dueDateColumn": "Afati", + "completedDateColumn": "Data e Përfundimit", + "estimatedTimeColumn": "Koha e Vlerësuar", + "loggedTimeColumn": "Koha e Regjistruar", + "overloggedTimeColumn": "Koha e Tepërt", + "daysLeftColumn": "Ditë të Mbetura/Vonuar", + "startDateColumn": "Data e Fillimit", + "endDateColumn": "Data e Përfundimit", + "actualTimeColumn": "Koha Aktuale", + "projectHealthColumn": "Gjendja e Projektit", + "categoryColumn": "Kategoria", + "projectManagerColumn": "Menaxheri i Projektit", + + "tasksStatsOverviewDrawerTitle": "Detyrat e ", + "projectsStatsOverviewDrawerTitle": "Projektet e ", + + "cancelledText": "Anuluar", + "blockedText": "E Bllokuar", + "onHoldText": "Në Pritje", + "proposedText": "E Propozuar", + "inPlanningText": "Në Planifikim", + "inProgressText": "Në Progres", + "completedText": "E Përfunduar", + "continuousText": "E Vazhdueshme", + + "daysLeftText": "ditë të mbetura", + "daysOverdueText": "ditë vonuar", + + "notSetText": "Pa Caktuar", + "needsAttentionText": "Kërkon Vëmendje", + "atRiskText": "Në Rrezik", + "goodText": "Në Rregull" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-members.json b/worklenz-backend/src/public/locales/alb/reporting-members.json new file mode 100644 index 00000000..d88f0662 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-members.json @@ -0,0 +1,35 @@ +{ + "yesterdayText": "Dje", + "lastSevenDaysText": "7 Ditët e Fundit", + "lastWeekText": "Javën e Kaluar", + "lastThirtyDaysText": "30 Ditët e Fundit", + "lastMonthText": "Muajin e Kaluar", + "lastThreeMonthsText": "3 Muajt e Fundit", + "allTimeText": "Të Gjitha", + "customRangeText": "Interval i Përshtatur", + "startDateInputPlaceholder": "Data e fillimit", + "EndDateInputPlaceholder": "Data e përfundimit", + "filterButton": "Filtro", + + "membersTitle": "Anëtarët", + "includeArchivedButton": "Përfshij Projektet e Arkivuara", + "exportButton": "Eksporto", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "Kërko sipas emrit", + + "memberColumn": "Anëtari", + "tasksProgressColumn": "Progresi i Detyrave", + "tasksAssignedColumn": "Detyrat e Caktuara", + "completedTasksColumn": "Detyrat e Përfunduara", + "overdueTasksColumn": "Detyrat e Vonuara", + "ongoingTasksColumn": "Detyrat në Vazhdim", + + "tasksAssignedColumnTooltip": "Detyrat e caktuara në intervalin e zgjedhur", + "overdueTasksColumnTooltip": "Detyrat e vonuara deri në fund të intervalit të zgjedhur", + "completedTasksColumnTooltip": "Detyrat e përfunduara në intervalin e zgjedhur", + "ongoingTasksColumnTooltip": "Detyrat e filluara por jo të përfunduara ende", + + "todoText": "Për Të Bërë", + "doingText": "Duke bërë", + "doneText": "E Përfunduar" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/alb/reporting-overview-drawer.json new file mode 100644 index 00000000..9e4d9186 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-overview-drawer.json @@ -0,0 +1,39 @@ +{ + "exportButton": "Eksporto", + "projectsButton": "Projektet", + "membersButton": "Anëtarët", + "searchByNameInputPlaceholder": "Kërko sipas emrit", + + "overviewTab": "Përmbledhje", + "projectsTab": "Projektet", + "membersTab": "Anëtarët", + + "projectsByStatusText": "Projektet Sipas Statusit", + "projectsByCategoryText": "Projektet Sipas Kategorisë", + "projectsByHealthText": "Projektet Sipas Gjendjes", + + "projectsText": "Projektet", + "allText": "Të Gjitha", + + "cancelledText": "Anuluar", + "blockedText": "E Bllokuar", + "onHoldText": "Në Pritje", + "proposedText": "E Propozuar", + "inPlanningText": "Në Planifikim", + "inProgressText": "Në Progres", + "completedText": "E Përfunduar", + "continuousText": "E Vazhdueshme", + + "notSetText": "Pa Caktuar", + "needsAttentionText": "Kërkon Vëmendje", + "atRiskText": "Në Rrezik", + "goodText": "Në Rregull", + + "nameColumn": "Emri", + "emailColumn": "Email", + "projectsColumn": "Projektet", + "tasksColumn": "Detyrat", + "overdueTasksColumn": "Detyrat e Vonuara", + "completedTasksColumn": "Detyrat e Përfunduara", + "ongoingTasksColumn": "Detyrat në Vazhdim" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-overview.json b/worklenz-backend/src/public/locales/alb/reporting-overview.json new file mode 100644 index 00000000..b8977912 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-overview.json @@ -0,0 +1,25 @@ +{ + "overviewTitle": "Përmbledhje", + "includeArchivedButton": "Përfshij Projektet e Arkivuara", + + "teamCount": "Ekip", + "teamCountPlural": "Ekipe", + "projectCount": "Projekt", + "projectCountPlural": "Projekte", + "memberCount": "Anëtar", + "memberCountPlural": "Anëtarë", + "activeProjectCount": "Projekt Aktiv", + "activeProjectCountPlural": "Projekte Aktive", + "overdueProjectCount": "Projekt i Vonuar", + "overdueProjectCountPlural": "Projekte të Vonuara", + "unassignedMemberCount": "Anëtar i Pacaktuar", + "unassignedMemberCountPlural": "Anëtarë të Pacaktuar", + "memberWithOverdueTaskCount": "Anëtar me Detyrë të Vonuar", + "memberWithOverdueTaskCountPlural": "Anëtarë me Detyra të Vonuara", + + "teamsText": "Ekipet", + + "nameColumn": "Emri", + "projectsColumn": "Projektet", + "membersColumn": "Anëtarët" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/alb/reporting-projects-drawer.json new file mode 100644 index 00000000..fd3a380c --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-projects-drawer.json @@ -0,0 +1,59 @@ +{ + "exportButton": "Eksporto", + "membersButton": "Anëtarët", + "tasksButton": "Detyrat", + "searchByNameInputPlaceholder": "Kërko sipas emrit", + + "overviewTab": "Përmbledhje", + "membersTab": "Anëtarët", + "tasksTab": "Detyrat", + + "completedTasksText": "Detyrat e Përfunduara", + "incompleteTasksText": "Detyrat e Papërfunduara", + "overdueTasksText": "Detyrat e Vonuara", + "allocatedHoursText": "Orët e Alokuara", + "loggedHoursText": "Orët e Regjistruara", + + "tasksText": "Detyrat", + "allText": "Të Gjitha", + + "tasksByStatusText": "Detyrat Sipas Statusit", + "tasksByPriorityText": "Detyrat Sipas Prioritetit", + "tasksByDueDateText": "Detyrat Sipas Afatit", + + "todoText": "Për Të Bërë", + "doingText": "Duke bërë", + "doneText": "E Përfunduar", + "lowText": "I Ulët", + "mediumText": "I Mesëm", + "highText": "I Lartë", + "completedText": "E Përfunduar", + "upcomingText": "Në Ardhje", + "overdueText": "E Vonuar", + "noDueDateText": "Pa Afat", + + "nameColumn": "Emri", + "tasksCountColumn": "Numri i Detyrave", + "completedTasksColumn": "Detyrat e Përfunduara", + "incompleteTasksColumn": "Detyrat e Papërfunduara", + "overdueTasksColumn": "Detyrat e Vonuara", + "contributionColumn": "Kontributi", + "progressColumn": "Progresi", + "loggedTimeColumn": "Koha e Regjistruar", + "taskColumn": "Detyra", + "projectColumn": "Projekti", + "statusColumn": "Statusi", + "priorityColumn": "Prioriteti", + "phaseColumn": "Faza", + "dueDateColumn": "Afati", + "completedDateColumn": "Data e Përfundimit", + "estimatedTimeColumn": "Koha e Vlerësuar", + "overloggedTimeColumn": "Koha e Tepërt", + "completedOnColumn": "Përfunduar Më", + "daysOverdueColumn": "Ditë vonim", + + "groupByText": "Grupo Sipas:", + "statusText": "Statusi", + "priorityText": "Prioriteti", + "phaseText": "Faza" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-projects-filters.json b/worklenz-backend/src/public/locales/alb/reporting-projects-filters.json new file mode 100644 index 00000000..614d57f3 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-projects-filters.json @@ -0,0 +1,35 @@ +{ + "searchByNamePlaceholder": "Kërko sipas emrit", + "searchByCategoryPlaceholder": "Kërko sipas kategorisë", + + "statusText": "Statusi", + "healthText": "Gjendja", + "categoryText": "Kategoria", + "projectManagerText": "Menaxheri i Projektit", + "showFieldsText": "Shfaq fushat", + + "cancelledText": "Anuluar", + "blockedText": "E bllokuar", + "onHoldText": "Në pritje", + "proposedText": "E propozuar", + "inPlanningText": "Në planifikim", + "inProgressText": "Në progres", + "completedText": "E përfunduar", + "continuousText": "E vazhdueshme", + + "notSetText": "Pa caktuar", + "needsAttentionText": "Kërkon vëmendje", + "atRiskText": "Në rrezik", + "goodText": "Në rregull", + + "nameText": "Projekti", + "estimatedVsActualText": "Vlerësuar vs Aktual", + "tasksProgressText": "Progresi i detyrave", + "lastActivityText": "Aktiviteti i fundit", + "datesText": "Datat e Fillimit/Përfundimit", + "daysLeftText": "Ditë të mbetura/vonuar", + "projectHealthText": "Gjendja e projektit", + "projectUpdateText": "Përditësimi i projektit", + "clientText": "Klienti", + "teamText": "Ekipi" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-projects.json b/worklenz-backend/src/public/locales/alb/reporting-projects.json new file mode 100644 index 00000000..c10e8f7a --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-projects.json @@ -0,0 +1,52 @@ +{ + "projectCount": "Projekt", + "projectCountPlural": "Projekte", + "includeArchivedButton": "Përfshij Projektet e Arkivuara", + "exportButton": "Eksporto", + "excelButton": "Excel", + + "projectColumn": "Projekti", + "estimatedVsActualColumn": "Vlerësuar vs Aktual", + "tasksProgressColumn": "Progresi i Detyrave", + "lastActivityColumn": "Aktiviteti i Fundit", + "statusColumn": "Statusi", + "datesColumn": "Data e Fillimit/Përfundimit", + "daysLeftColumn": "Ditë të Mbetura/Vonuar", + "projectHealthColumn": "Gjendja e Projektit", + "categoryColumn": "Kategoria", + "projectUpdateColumn": "Përditësimi i Projektit", + "clientColumn": "Klienti", + "teamColumn": "Ekipi", + "projectManagerColumn": "Menaxheri i Projektit", + + "openButton": "Hap", + + "estimatedText": "Vlerësuar", + "actualText": "Aktual", + + "todoText": "Për të Bërë", + "doingText": "duke bërë", + "doneText": "E Përfunduar", + + "cancelledText": "Anuluar", + "blockedText": "E Bllokuar", + "onHoldText": "Në Pritje", + "proposedText": "E Propozuar", + "inPlanningText": "Në Planifikim", + "inProgressText": "Në Progres", + "completedText": "E Përfunduar", + "continuousText": "E Vazhdueshme", + + "daysLeftText": "ditë të mbetura", + "dayLeftText": "ditë e mbetur", + "daysOverdueText": "ditë vonuar", + + "notSetText": "Pa Caktuar", + "needsAttentionText": "Kërkon Vëmendje", + "atRiskText": "Në Rrezik", + "goodText": "Në Rregull", + + "setCategoryText": "Cakto Kategorinë", + "searchByNameInputPlaceholder": "Kërko sipas emrit", + "todayText": "Sot" +} diff --git a/worklenz-backend/src/public/locales/alb/reporting-sidebar.json b/worklenz-backend/src/public/locales/alb/reporting-sidebar.json new file mode 100644 index 00000000..a8c14e68 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Përmbledhje", + "projects": "Projektet", + "members": "Anëtarët", + "timeReports": "Raportet e Kohës", + "estimateVsActual": "Vlerësimi vs Aktual", + "currentOrganizationTooltip": "Organizata aktuale" +} diff --git a/worklenz-backend/src/public/locales/alb/schedule.json b/worklenz-backend/src/public/locales/alb/schedule.json new file mode 100644 index 00000000..a5670aaa --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/schedule.json @@ -0,0 +1,39 @@ +{ + "today": "Sot", + "week": "Javë", + "month": "Muaj", + + "settings": "Cilësimet", + "workingDays": "Ditët e punës", + "monday": "E hënë", + "tuesday": "E martë", + "wednesday": "E mërkurë", + "thursday": "E enjte", + "friday": "E premte", + "saturday": "E shtunë", + "sunday": "E diel", + "workingHours": "Orët e punës", + "hours": "Orë", + "saveButton": "Ruaj", + + "totalAllocation": "Alokimi Total", + "timeLogged": "Koha e Regjistruar", + "remainingTime": "Koha e Mbetur", + "total": "Total", + "perDay": "Në Ditë", + "tasks": "detyra", + "startDate": "Data e Fillimit", + "endDate": "Data e Përfundimit", + + "hoursPerDay": "Orë Në Ditë", + "totalHours": "Orë Totale", + "deleteButton": "Fshi", + "cancelButton": "Anulo", + + "tabTitle": "Detyra pa Data Fillimi & Përfundimi", + + "allocatedTime": "Koha e alokuar", + "totalLogged": "Total i Regjistruar", + "loggedBillable": "Regjistruar Fakturueshme", + "loggedNonBillable": "Regjistruar Jo Fakturueshme" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/categories.json b/worklenz-backend/src/public/locales/alb/settings/categories.json new file mode 100644 index 00000000..62eb60d5 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "Kategoria", + "deleteConfirmationTitle": "Jeni të sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "associatedTaskColumn": "Projektet e Lidhura", + "searchPlaceholder": "Kërko sipas emrit", + "emptyText": "Kategoritë mund të krijohen gjatë përditësimit ose krijimit të projekteve.", + "colorChangeTooltip": "Klikoni për të ndryshuar ngjyrën" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/change-password.json b/worklenz-backend/src/public/locales/alb/settings/change-password.json new file mode 100644 index 00000000..ac1500bd --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "Ndrysho Fjalëkalimin", + "currentPassword": "Fjalëkalimi Aktual", + "newPassword": "Fjalëkalimi i Ri", + "confirmPassword": "Konfirmo Fjalëkalimin", + "currentPasswordPlaceholder": "Vendosni fjalëkalimin aktual", + "newPasswordPlaceholder": "Fjalëkalimi i Ri", + "confirmPasswordPlaceholder": "Konfirmo Fjalëkalimin", + "currentPasswordRequired": "Ju lutemi vendosni fjalëkalimin aktual!", + "newPasswordRequired": "Ju lutemi vendosni fjalëkalimin e ri!", + "passwordValidationError": "Fjalëkalimi duhet të përmbajë të paktën 8 karaktere, me një shkronjë të madhe, një numër dhe një simbol.", + "passwordMismatch": "Fjalëkalimet nuk përputhen!", + "passwordRequirements": "Fjalëkalimi i ri duhet të jetë së paku 8 karaktere, me një shkronjë të madhe, një numër dhe një simbol.", + "updateButton": "Përditëso Fjalëkalimin" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/clients.json b/worklenz-backend/src/public/locales/alb/settings/clients.json new file mode 100644 index 00000000..72407a5e --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "Emri", + "projectColumn": "Projekti", + "noProjectsAvailable": "Nuk ka projekte të disponueshme", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "searchPlaceholder": "Kërko sipas emrit", + "createClient": "Krijo Klient", + "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore", + "createClientDrawerTitle": "Krijo Klient", + "updateClientDrawerTitle": "Përditëso Klientin", + "nameLabel": "Emri", + "namePlaceholder": "Emri", + "nameRequiredError": "Ju lutemi shkruani një Emër", + "createButton": "Krijo", + "updateButton": "Përditëso", + "createClientSuccessMessage": "Klienti u krijua me sukses!", + "createClientErrorMessage": "Krijimi i klientit dështoi!", + "updateClientSuccessMessage": "Klienti u përditësua me sukses!", + "updateClientErrorMessage": "Përditësimi i klientit dështoi!" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/job-titles.json b/worklenz-backend/src/public/locales/alb/settings/job-titles.json new file mode 100644 index 00000000..a464716a --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "Emri", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "searchPlaceholder": "Kërko sipas emrit", + "createJobTitleButton": "Krijo Titull Pune", + "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore", + "createJobTitleDrawerTitle": "Krijo Titull Pune", + "updateJobTitleDrawerTitle": "Përditëso Titullin e Punës", + "nameLabel": "Emri", + "namePlaceholder": "Emri", + "nameRequiredError": "Ju lutemi shkruani një Emër", + "createButton": "Krijo", + "updateButton": "Përditëso", + "createJobTitleSuccessMessage": "Titulli i punës u krijua me sukses!", + "createJobTitleErrorMessage": "Krijimi i titullit të punës dështoi!", + "updateJobTitleSuccessMessage": "Titulli i punës u përditësua me sukses!", + "updateJobTitleErrorMessage": "Përditësimi i titullit të punës dështoi!" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/labels.json b/worklenz-backend/src/public/locales/alb/settings/labels.json new file mode 100644 index 00000000..40e6361b --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "Etiketa", + "deleteConfirmationTitle": "Jeni i sigurt?", + "deleteConfirmationOk": "Po", + "deleteConfirmationCancel": "Anulo", + "associatedTaskColumn": "Numri i Detyrave të Lidhura", + "searchPlaceholder": "Kërko sipas emrit", + "emptyText": "Etiketat mund të krijohen gjatë përditësimit ose krijimit të detyrave.", + "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore", + "colorChangeTooltip": "Klikoni për të ndryshuar ngjyrën" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/language.json b/worklenz-backend/src/public/locales/alb/settings/language.json new file mode 100644 index 00000000..7c0d3756 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "Gjuha", + "language_required": "Gjuha është e detyrueshme", + "time_zone": "Zona kohore", + "time_zone_required": "Zona kohore është e detyrueshme", + "save_changes": "Ruaj Ndryshimet" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/notifications.json b/worklenz-backend/src/public/locales/alb/settings/notifications.json new file mode 100644 index 00000000..4bfd55b2 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/notifications.json @@ -0,0 +1,11 @@ +{ + "title": "Cilësimet e Njoftimeve", + "emailTitle": "Më dërgo njoftime me email", + "emailDescription": "Kjo përfshin caktimet e reja të detyrave", + "dailyDigestTitle": "Më dërgo një përmbledhje ditore", + "dailyDigestDescription": "Çdo mbrëmje, do të merrni një përmbledhje të aktivitetit të fundit në detyra.", + "popupTitle": "Shfaq njoftimet në kompjuterin tim kur Worklenz është i hapur", + "popupDescription": "Njoftimet e shfaqura mund të çaktivizohen nga shfletuesi juaj. Ndryshoni cilësimet e shfletuesit për t'i lejuar ato.", + "unreadItemsTitle": "Shfaq numrin e artikujve të palexuar", + "unreadItemsDescription": "Do të shihni numërimin për çdo njoftim." +} diff --git a/worklenz-backend/src/public/locales/alb/settings/profile.json b/worklenz-backend/src/public/locales/alb/settings/profile.json new file mode 100644 index 00000000..dcce50d5 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "Mund të ngarkoni vetëm skedarë JPG/PNG!", + "uploadSizeError": "Imazhi duhet të jetë më i vogël se 2MB!", + "upload": "Ngarko", + "nameLabel": "Emri", + "nameRequiredError": "Emri është i detyrueshëm", + "emailLabel": "Email", + "emailRequiredError": "Email-i është i detyrueshëm", + "saveChanges": "Ruaj Ndryshimet", + "profileJoinedText": "U bashkua një muaj më parë", + "profileLastUpdatedText": "Përditësuar një muaj më parë", + "avatarTooltip": "Klikoni për të ngarkuar një avatar", + "title": "Cilësimet e Profilit" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/project-templates.json b/worklenz-backend/src/public/locales/alb/settings/project-templates.json new file mode 100644 index 00000000..ac0a87ef --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "Emri", + "editToolTip": "Modifiko", + "deleteToolTip": "Fshi", + "confirmText": "Jeni i sigurt?", + "okText": "Po", + "cancelText": "Anulo" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/sidebar.json b/worklenz-backend/src/public/locales/alb/settings/sidebar.json new file mode 100644 index 00000000..a2b6dd2e --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/sidebar.json @@ -0,0 +1,14 @@ +{ + "profile": "Profili", + "notifications": "Njoftimet", + "clients": "Klientët", + "job-titles": "Tituj Pune", + "labels": "Etiketa", + "categories": "Kategoritë", + "project-templates": "Shabllonet e Projekteve", + "task-templates": "Shabllonet e Detyrave", + "team-members": "Anëtarët e Ekipit", + "teams": "Ekipet", + "change-password": "Ndrysho Fjalëkalimin", + "language-and-region": "Gjuha dhe Rajoni" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/task-templates.json b/worklenz-backend/src/public/locales/alb/settings/task-templates.json new file mode 100644 index 00000000..b053027c --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "Emri", + "createdColumn": "Krijuar", + "editToolTip": "Redakto", + "deleteToolTip": "Fshi", + "confirmText": "Jeni i sigurt?", + "okText": "Po", + "cancelText": "Anulo" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/team-members.json b/worklenz-backend/src/public/locales/alb/settings/team-members.json new file mode 100644 index 00000000..955954dc --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "Anëtarët e Ekipit", + "nameColumn": "Emri", + "projectsColumn": "Projektet", + "emailColumn": "Email", + "teamAccessColumn": "Qasja në Ekip", + "memberCount": "Anëtar", + "membersCountPlural": "Anëtarë", + "searchPlaceholder": "Kërko anëtarë sipas emrit", + "pinTooltip": "Rifresko listën e anëtarëve", + "addMemberButton": "Shto Anëtar të Ri", + "editTooltip": "Modifiko anëtarin", + "deactivateTooltip": "Çaktivizo anëtarin", + "activateTooltip": "Aktivizo anëtarin", + "deleteTooltip": "Fshi anëtarin", + "confirmDeleteTitle": "Jeni i sigurt që doni të fshini këtë anëtar?", + "confirmActivateTitle": "Jeni i sigurt që doni të ndryshoni statusin e këtij anëtari?", + "okText": "Po, vazhdo", + "cancelText": "Jo, anulo", + "deactivatedText": "(Aktualisht i çaktivizuar)", + "pendingInvitationText": "(Ftesë në pritje)", + "addMemberDrawerTitle": "Shto Anëtar të Ri në Ekip", + "updateMemberDrawerTitle": "Përditëso Anëtarin e Ekipit", + "addMemberEmailHint": "Anëtarët do të shtohen në ekip pavarësisht nga statusi i pranimit të ftesës", + "memberEmailLabel": "Email(o)", + "memberEmailPlaceholder": "Vendos adresën email të anëtarit të ekipit", + "memberEmailRequiredError": "Ju lutemi vendosni një adresë email të vlefshme", + "jobTitleLabel": "Titulli i Punës", + "jobTitlePlaceholder": "Zgjidh ose kërko titull pune (Opsionale)", + "memberAccessLabel": "Niveli i Qasjes", + "addToTeamButton": "Shto Anëtar në Ekip", + "updateButton": "Ruaj Ndryshimet", + "resendInvitationButton": "Dërgo Përsëri Email-in e Ftesës", + "invitationSentSuccessMessage": "Ftesa për ekip u dërgua me sukses!", + "createMemberSuccessMessage": "Anëtari i ri i ekipit u shtua me sukses!", + "createMemberErrorMessage": "Dështoi shtimi i anëtarit të ri. Ju lutemi provoni përsëri.", + "updateMemberSuccessMessage": "Anëtari i ekipit u përditësua me sukses!", + "updateMemberErrorMessage": "Dështoi përditësimi i anëtarit. Ju lutemi provoni përsëri.", + "memberText": "Anëtar", + "adminText": "Administrues", + "ownerText": "Pronar i Ekipit", + "addedText": "Shtuar", + "updatedText": "Përditësuar", + "noResultFound": "Shkruani një adresë email dhe shtypni Enter...", + "jobTitlesFetchError": "Dështoi marrja e titujve të punës", + "invitationResent": "Ftesa u dërgua sërish me sukses!" +} diff --git a/worklenz-backend/src/public/locales/alb/settings/teams.json b/worklenz-backend/src/public/locales/alb/settings/teams.json new file mode 100644 index 00000000..30f87d79 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "Ekipet", + "team": "Ekip", + "teams": "Ekipet", + "name": "Emri", + "created": "Krijuar", + "ownsBy": "I përket", + "edit": "Ndrysho", + "editTeam": "Ndrysho Ekipin", + "pinTooltip": "Kliko për ta fiksuar në menunë kryesore", + "editTeamName": "Ndrysho Emrin e Ekipit", + "updateName": "Përditëso Emrin", + "namePlaceholder": "Emri", + "nameRequired": "Ju lutem shkruani një Emër", + "updateFailed": "Ndryshimi i emrit të ekipit dështoi!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..75e1226a --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,29 @@ +{ + "details": { + "task-key": "Çelësi i Detyrës", + "phase": "Faza", + "assignees": "Përgjegjësit", + "due-date": "Data e Përfundimit", + "time-estimation": "Vlerësimi i Kohës", + "priority": "Prioriteti", + "labels": "Etiketa", + "billable": "Fakturueshme", + "notify": "Njofto", + "when-done-notify": "Kur të përfundojë, njofto", + "start-date": "Data e Fillimit", + "end-date": "Data e Përfundimit", + "hide-start-date": "Fshih Datën e Fillimit", + "show-start-date": "Shfaq Datën e Fillimit", + "hours": "Orë", + "minutes": "Minuta" + }, + "description": { + "title": "Përshkrimi", + "placeholder": "Shtoni një përshkrim më të detajuar..." + }, + "subTasks": { + "title": "Nën-Detyrat", + "add-sub-task": "+ Shto Nën-Detyrë", + "refresh-sub-tasks": "Rifresko Nën-Detyrat" + } +} diff --git a/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer.json new file mode 100644 index 00000000..9d6c022f --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "Shkruani Detyrën tuaj", + "deleteTask": "Fshi Detyrën" + }, + "taskInfoTab": { + "title": "Informacioni", + "details": { + "title": "Detajet", + "task-key": "Çelësi i Detyrës", + "phase": "Faza", + "assignees": "Të Caktuar", + "due-date": "Data e Përfundimit", + "time-estimation": "Vlerësimi i Kohës", + "priority": "Prioriteti", + "labels": "Etiketat", + "billable": "E Faturueshme", + "notify": "Njofto", + "when-done-notify": "Kur përfundon, njofto", + "start-date": "Data e Fillimit", + "end-date": "Data e Përfundimit", + "hide-start-date": "Fshih Datën e Fillimit", + "show-start-date": "Shfaq Datën e Fillimit", + "hours": "Orë", + "minutes": "Minuta", + "progressValue": "Vlera e Progresit", + "progressValueTooltip": "Vendosni përqindjen e progresit (0-100%)", + "progressValueRequired": "Ju lutemi vendosni një vlerë progresi", + "progressValueRange": "Progresi duhet të jetë midis 0 dhe 100", + "taskWeight": "Pesha e Detyrës", + "taskWeightTooltip": "Vendosni peshën e kësaj nëndetyre (përqindje)", + "taskWeightRequired": "Ju lutemi vendosni një peshë detyre", + "taskWeightRange": "Pesha duhet të jetë midis 0 dhe 100", + "recurring": "E Përsëritur" + }, + "labels": { + "labelInputPlaceholder": "Kërko ose krijo", + "labelsSelectorInputTip": "Shtyp Enter për të krijuar" + }, + "description": { + "title": "Përshkrimi", + "placeholder": "Shto një përshkrim më të detajuar..." + }, + "subTasks": { + "title": "Nëndetyrat", + "addSubTask": "Shto Nëndetyrë", + "addSubTaskInputPlaceholder": "Shkruani detyrën tuaj dhe shtypni enter", + "refreshSubTasks": "Rifresko Nëndetyrat", + "edit": "Modifiko", + "delete": "Fshi", + "confirmDeleteSubTask": "Jeni i sigurt që doni të fshini këtë nëndetyrë?", + "deleteSubTask": "Fshi Nëndetyrën" + }, + "dependencies": { + "title": "Varësitë", + "addDependency": "+ Shto varësi të re", + "blockedBy": "Bllokuar nga", + "searchTask": "Shkruani për të kërkuar detyrë", + "noTasksFound": "Nuk u gjetën detyra", + "confirmDeleteDependency": "Jeni i sigurt që doni të fshini?" + }, + "attachments": { + "title": "Bashkëngjitjet", + "chooseOrDropFileToUpload": "Zgjidhni ose hidhni skedar për të ngarkuar", + "uploading": "Duke ngarkuar..." + }, + "comments": { + "title": "Komentet", + "addComment": "+ Shto koment të ri", + "noComments": "Ende pa komente. Bëhu i pari që komenton!", + "delete": "Fshi", + "confirmDeleteComment": "Jeni i sigurt që doni të fshini këtë koment?", + "addCommentPlaceholder": "Shto një koment...", + "cancel": "Anulo", + "commentButton": "Komento", + "attachFiles": "Bashkëngjit skedarë", + "addMoreFiles": "Shto më shumë skedarë", + "selectedFiles": "Skedarët e Zgjedhur (Deri në 25MB, Maksimumi {count})", + "maxFilesError": "Mund të ngarkoni maksimum {count} skedarë", + "processFilesError": "Dështoi përpunimi i skedarëve", + "addCommentError": "Ju lutemi shtoni një koment ose bashkëngjitni skedarë", + "createdBy": "Krijuar {{time}} nga {{user}}", + "updatedTime": "Përditësuar {{time}}" + }, + "searchInputPlaceholder": "Kërko sipas emrit", + "pendingInvitation": "Ftesë në Pritje" + }, + "taskTimeLogTab": { + "title": "Regjistri i Kohës", + "addTimeLog": "Shto regjistrim të ri kohe", + "totalLogged": "Totali i Regjistruar", + "exportToExcel": "Eksporto në Excel", + "noTimeLogsFound": "Nuk u gjetën regjistra kohe", + "timeLogForm": { + "date": "Data", + "startTime": "Koha e Fillimit", + "endTime": "Koha e Përfundimit", + "workDescription": "Përshkrimi i Punës", + "descriptionPlaceholder": "Shto një përshkrim", + "logTime": "Regjistro kohën", + "updateTime": "Përditëso kohën", + "cancel": "Anulo", + "selectDateError": "Ju lutemi zgjidhni një datë", + "selectStartTimeError": "Ju lutemi zgjidhni kohën e fillimit", + "selectEndTimeError": "Ju lutemi zgjidhni kohën e përfundimit", + "endTimeAfterStartError": "Koha e përfundimit duhet të jetë pas kohës së fillimit" + } + }, + "taskActivityLogTab": { + "title": "Regjistri i Aktivitetit", + "add": "SHTO", + "remove": "HIQE", + "none": "Asnjë", + "weight": "Pesha", + "createdTask": "krijoi detyrën." + }, + "taskProgress": { + "markAsDoneTitle": "Shëno Detyrën si të Kryer?", + "confirmMarkAsDone": "Po, shëno si të kryer", + "cancelMarkAsDone": "Jo, mbaj statusin aktual", + "markAsDoneDescription": "Keni vendosur progresin në 100%. Doni të përditësoni statusin e detyrës në \"Kryer\"?" + } +} diff --git a/worklenz-backend/src/public/locales/alb/task-list-filters.json b/worklenz-backend/src/public/locales/alb/task-list-filters.json new file mode 100644 index 00000000..c3156498 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-list-filters.json @@ -0,0 +1,85 @@ +{ + "searchButton": "Kërko", + "resetButton": "Rivendos", + "searchInputPlaceholder": "Kërko sipas emrit", + + "sortText": "Rendit", + "statusText": "Statusi", + "phaseText": "Faza", + "memberText": "Anëtarët", + "assigneesText": "Përgjegjësit", + "priorityText": "Prioriteti", + "labelsText": "Etiketa", + "membersText": "Anëtarët", + "groupByText": "Grupo sipas", + "showArchivedText": "Shfaq të arkivuara", + "showFieldsText": "Shfaq fushat", + "keyText": "Çelësi", + "taskText": "Detyra", + "descriptionText": "Përshkrimi", + "phasesText": "Fazat", + "listText": "Listë", + "progressText": "Progresi", + "timeTrackingText": "Gjurmimi i Kohës", + "timetrackingText": "Gjurmimi i Kohës", + "estimationText": "Vlerësimi", + "startDateText": "Data e Fillimit", + "startdateText": "Data e Fillimit", + "endDateText": "Data e Përfundimit", + "dueDateText": "Afati", + "duedateText": "Afati", + "completedDateText": "Data e Përfundimit", + "completeddateText": "Data e Përfundimit", + "createdDateText": "Data e Krijimit", + "createddateText": "Data e Krijimit", + "lastUpdatedText": "Përditësuar Së Fundi", + "lastupdatedText": "Përditësuar Së Fundi", + "reporterText": "Raportuesi", + "dueTimeText": "Koha e Afatit", + "duetimeText": "Koha e Afatit", + + "lowText": "I ulët", + "mediumText": "I mesëm", + "highText": "I lartë", + + "createStatusButtonTooltip": "Cilësimet e statusit", + "configPhaseButtonTooltip": "Cilësimet e fazës", + "noLabelsFound": "Nuk u gjetën etiketa", + + "addStatusButton": "Shto Status", + "addPhaseButton": "Shto Fazë", + + "createStatus": "Krijo Status", + "name": "Emri", + "category": "Kategoria", + "selectCategory": "Zgjidh një kategori", + "pleaseEnterAName": "Ju lutemi vendosni një emër", + "pleaseSelectACategory": "Ju lutemi zgjidhni një kategori", + "create": "Krijo", + + "searchTasks": "Kërko detyrat...", + "searchPlaceholder": "Kërko...", + "fieldsText": "Fushat", + "loadingFilters": "Duke ngarkuar filtrat...", + "noOptionsFound": "Nuk u gjetën opsione", + "filtersActive": "filtra aktiv", + "filterActive": "filtër aktiv", + "clearAll": "Pastro të gjitha", + "clearing": "Duke pastruar...", + "cancel": "Anulo", + "search": "Kërko", + "groupedBy": "Grupuar sipas", + "manageStatuses": "Menaxho Statuset", + "managePhases": "Menaxho Fazat", + "dragToReorderStatuses": "Zvarrit statuset për t'i rirenditur. Çdo status mund të ketë një kategori të ndryshme.", + "enterNewStatusName": "Shkruani emrin e statusit të ri...", + "addStatus": "Shto Status", + "noStatusesFound": "Nuk u gjetën statuse. Krijoni statusin tuaj të parë më sipër.", + "deleteStatus": "Fshi Statusin", + "deleteStatusConfirm": "Jeni të sigurt që doni të fshini këtë status? Ky veprim nuk mund të zhbëhet.", + "rename": "Riemëro", + "delete": "Fshi", + "enterStatusName": "Shkruani emrin e statusit", + "selectCategory": "Zgjidh kategorinë", + "close": "Mbyll" +} diff --git a/worklenz-backend/src/public/locales/alb/task-list-table.json b/worklenz-backend/src/public/locales/alb/task-list-table.json new file mode 100644 index 00000000..7e3f83dd --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-list-table.json @@ -0,0 +1,136 @@ +{ + "keyColumn": "Çelësi", + "taskColumn": "Detyra", + "descriptionColumn": "Përshkrimi", + "progressColumn": "Progresi", + "membersColumn": "Anëtarët", + "assigneesColumn": "Përgjegjësit", + "labelsColumn": "Etiketa", + "phasesColumn": "Fazat", + "phaseColumn": "Faza", + "statusColumn": "Statusi", + "priorityColumn": "Prioriteti", + "timeTrackingColumn": "Gjurmimi i Kohës", + "timetrackingColumn": "Gjurmimi i Kohës", + "estimationColumn": "Vlerësimi", + "startDateColumn": "Data e Fillimit", + "startdateColumn": "Data e Fillimit", + "dueDateColumn": "Data e Afatit", + "duedateColumn": "Data e Afatit", + "completedDateColumn": "Data e Përfundimit", + "completeddateColumn": "Data e Përfundimit", + "createdDateColumn": "Data e Krijimit", + "createddateColumn": "Data e Krijimit", + "lastUpdatedColumn": "Përditësuar Së Fundi", + "lastupdatedColumn": "Përditësuar Së Fundi", + "reporterColumn": "Raportuesi", + "dueTimeColumn": "Koha e Afatit", + "todoSelectorText": "Për të Bërë", + "doingSelectorText": "Duke bërë", + "doneSelectorText": "E Përfunduar", + + "lowSelectorText": "I ulët", + "mediumSelectorText": "I mesëm", + "highSelectorText": "I lartë", + + "selectText": "Zgjidh", + "labelsSelectorInputTip": "Shtyp Enter për të krijuar!", + + "addTaskText": "Shto Detyrë", + "addSubTaskText": "+ Shto Nën-Detyrë", + "noTasksInGroup": "Nuk ka detyra në këtë grup", + "addTaskInputPlaceholder": "Shkruaj detyrën dhe shtyp Enter", + + "openButton": "Hap", + "okButton": "Në rregull", + + "noLabelsFound": "Nuk u gjetën etiketa", + "searchInputPlaceholder": "Kërko ose krijo", + "assigneeSelectorInviteButton": "Fto një anëtar të ri me email", + "labelInputPlaceholder": "Kërko ose krijo", + "searchLabelsPlaceholder": "Kërko etiketa...", + "createLabelButton": "Krijo \"{{name}}\"", + "manageLabelsPath": "Cilësimet → Etiketat", + + "pendingInvitation": "Ftesë në Pritje", + + "contextMenu": { + "assignToMe": "Cakto mua", + "moveTo": "Zhvendos në", + "unarchive": "Ç'arkivizo", + "archive": "Arkivizo", + "convertToSubTask": "Shndërro në Nën-Detyrë", + "convertToTask": "Shndërro në Detyrë", + "delete": "Fshi", + "searchByNameInputPlaceholder": "Kërko sipas emrit" + }, + "setDueDate": "Cakto datën e afatit", + "setStartDate": "Cakto datën e fillimit", + "clearDueDate": "Pastro datën e afatit", + "clearStartDate": "Pastro datën e fillimit", + "dueDatePlaceholder": "Data e afatit", + "startDatePlaceholder": "Data e fillimit", + + "emptyStates": { + "noTaskGroups": "Nuk u gjetën grupe detyrash", + "noTaskGroupsDescription": "Detyrat do të shfaqen këtu kur krijohen ose kur aplikohen filtra.", + "errorPrefix": "Gabim:", + "dragTaskFallback": "Detyrë" + }, + + "customColumns": { + "addCustomColumn": "Shto një kolonë të personalizuar", + "customColumnHeader": "Kolona e Personalizuar", + "customColumnSettings": "Cilësimet e kolonës së personalizuar", + "noCustomValue": "Asnjë vlerë", + "peopleField": "Fusha e njerëzve", + "noDate": "Asnjë datë", + "unsupportedField": "Lloj fushe i pambështetur", + + "modal": { + "addFieldTitle": "Shto fushë", + "editFieldTitle": "Redakto fushën", + "fieldTitle": "Titulli i fushës", + "fieldTitleRequired": "Titulli i fushës është i kërkuar", + "columnTitlePlaceholder": "Titulli i kolonës", + "type": "Lloji", + "deleteConfirmTitle": "Jeni i sigurt që doni të fshini këtë kolonë të personalizuar?", + "deleteConfirmDescription": "Kjo veprim nuk mund të zhbëhet. Të gjitha të dhënat e lidhura me këtë kolonë do të fshihen përgjithmonë.", + "deleteButton": "Fshi", + "cancelButton": "Anulo", + "createButton": "Krijo", + "updateButton": "Përditëso", + "createSuccessMessage": "Kolona e personalizuar u krijua me sukses", + "updateSuccessMessage": "Kolona e personalizuar u përditësua me sukses", + "deleteSuccessMessage": "Kolona e personalizuar u fshi me sukses", + "deleteErrorMessage": "Dështoi në fshirjen e kolonës së personalizuar", + "createErrorMessage": "Dështoi në krijimin e kolonës së personalizuar", + "updateErrorMessage": "Dështoi në përditësimin e kolonës së personalizuar" + }, + + "fieldTypes": { + "people": "Njerëz", + "number": "Numër", + "date": "Data", + "selection": "Zgjedhje", + "checkbox": "Kutia e kontrollit", + "labels": "Etiketat", + "key": "Çelësi", + "formula": "Formula" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} nën-detyrë", + "subtasks_plural": "{{count}} nën-detyra", + "comments": "{{count}} koment", + "comments_plural": "{{count}} komente", + "attachments": "{{count}} bashkëngjitje", + "attachments_plural": "{{count}} bashkëngjitje", + "subscribers": "Detyra ka pajtues", + "dependencies": "Detyra ka varësi", + "recurring": "Detyrë përsëritëse" + } + } +} diff --git a/worklenz-backend/src/public/locales/alb/task-management.json b/worklenz-backend/src/public/locales/alb/task-management.json new file mode 100644 index 00000000..a156ef3f --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-management.json @@ -0,0 +1,21 @@ +{ + "noTasksInGroup": "Nuk ka detyra në këtë grup", + "noTasksInGroupDescription": "Shtoni një detyrë për të filluar", + "addFirstTask": "Shtoni detyrën tuaj të parë", + "openTask": "Hap", + "subtask": "nën-detyrë", + "subtasks": "nën-detyra", + "comment": "koment", + "comments": "komente", + "attachment": "bashkëngjitje", + "attachments": "bashkëngjitje", + "enterSubtaskName": "Shkruani emrin e nën-detyrës...", + "add": "Shto", + "cancel": "Anulo", + "renameGroup": "Riemërto Grupin", + "renameStatus": "Riemërto Statusin", + "renamePhase": "Riemërto Fazën", + "changeCategory": "Ndrysho Kategorinë", + "clickToEditGroupName": "Kliko për të ndryshuar emrin e grupit", + "enterGroupName": "Shkruani emrin e grupit" +} diff --git a/worklenz-backend/src/public/locales/alb/task-template-drawer.json b/worklenz-backend/src/public/locales/alb/task-template-drawer.json new file mode 100644 index 00000000..034ac916 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/task-template-drawer.json @@ -0,0 +1,11 @@ +{ + "createTaskTemplate": "Krijo Shabllon Detyre", + "editTaskTemplate": "Modifiko Shabllon Detyre", + "cancelText": "Anulo", + "saveText": "Ruaj", + "templateNameText": "Emri i Shabllonit", + "selectedTasks": "Detyrat e Përzgjedhura", + "removeTask": "Hiq", + "cancelButton": "Anulo", + "saveButton": "Ruaj" +} diff --git a/worklenz-backend/src/public/locales/alb/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/alb/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..45980b24 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/tasks/task-table-bulk-actions.json @@ -0,0 +1,26 @@ +{ + "taskSelected": "detyrë e zgjedhur", + "tasksSelected": "detyra të zgjedhura", + "changeStatus": "Ndrysho Statusin/ Prioritetin/ Fazat", + "changeLabel": "Ndrysho Etiketën", + "assignToMe": "Cakto mua", + "changeAssignees": "Ndrysho Përgjegjësit", + "archive": "Arkivo", + "unarchive": "Ç'arkivo", + "delete": "Fshi", + "moreOptions": "Më shumë opsione", + "deselectAll": "Zgjidhja të gjitha", + "status": "Statusi", + "priority": "Prioriteti", + "phase": "Faza", + "member": "Anëtar", + "createTaskTemplate": "Krijo Shabllon Detyre", + "apply": "Apliko", + "createLabel": "+ Krijo Etiketë", + "searchOrCreateLabel": "Kërko ose krijo etiketë...", + "hitEnterToCreate": "Shtyp Enter për të krijuar", + "labelExists": "Etiketa ekziston tashmë", + "pendingInvitation": "Ftesë në Pritje", + "noMatchingLabels": "Asnjë etiketë që përputhet", + "noLabels": "Asnjë etiketë" +} diff --git a/worklenz-backend/src/public/locales/alb/template-drawer.json b/worklenz-backend/src/public/locales/alb/template-drawer.json new file mode 100644 index 00000000..e6174c10 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "Modifiko Shabllon Detyre", + "cancelText": "Anulo", + "saveText": "Ruaj", + "templateNameText": "Emri i Shabllonit", + "selectedTasks": "Detyrat e Përzgjedhura", + "removeTask": "Hiq", + "description": "Përshkrimi", + "phase": "Faza", + "statuses": "Statuset", + "priorities": "Prioritetet", + "labels": "Etiketa", + "tasks": "Detyrat", + "noTemplateSelected": "Asnjë shabllon i përzgjedhur", + "noDescription": "Pa përshkrim", + "worklenzTemplates": "Shabllonet Worklenz", + "yourTemplatesLibrary": "Biblioteka Juaj", + "searchTemplates": "Kërko Shabllone" +} diff --git a/worklenz-backend/src/public/locales/alb/templateDrawer.json b/worklenz-backend/src/public/locales/alb/templateDrawer.json new file mode 100644 index 00000000..6b2cd828 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "Gjurmimi i Gabimeve", + "construction": "Ndërtim", + "designCreative": "Dizajn & Kreativ", + "education": "Arsim", + "finance": "Financë", + "hrRecruiting": "Burime Njerëzore & Rekrutim", + "informationTechnology": "Teknologji Informacioni", + "legal": "Juridik", + "manufacturing": "Prodhim", + "marketing": "Marketing", + "nonprofit": "Jo-fitimprurës", + "personalUse": "Përdorim Personal", + "salesCRM": "Shitje & CRM", + "serviceConsulting": "Shërbime & Këshillim", + "softwareDevelopment": "Zhvillim Softueri", + "description": "Përshkrimi", + "phase": "Faza", + "statuses": "Statuset", + "priorities": "Prioritetet", + "labels": "Etiketa", + "tasks": "Detyrat" +} diff --git a/worklenz-backend/src/public/locales/alb/time-report.json b/worklenz-backend/src/public/locales/alb/time-report.json new file mode 100644 index 00000000..8a0bb69b --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/time-report.json @@ -0,0 +1,44 @@ +{ + "includeArchivedProjects": "Përfshij Projektet e Arkivuara", + "export": "Eksporto", + "timeSheet": "Fletë Kohore", + + "searchByName": "Kërko sipas emrit", + "selectAll": "Zgjidh të Gjitha", + "teams": "Ekipet", + + "searchByProject": "Kërko sipas emrit të projektit", + "projects": "Projektet", + + "searchByCategory": "Kërko sipas emrit të kategorisë", + "categories": "Kategoritë", + + "billable": "Fakturueshme", + "nonBillable": "Jo Fakturueshme", + + "total": "Total", + + "projectsTimeSheet": "Fletë Kohore e Projekteve", + + "loggedTime": "Koha e Regjistruar(orë)", + + "exportToExcel": "Eksporto në Excel", + "logged": "regjistruar", + "for": "për", + + "membersTimeSheet": "Fletë Kohore e Anëtarëve", + "member": "Anëtar", + + "estimatedVsActual": "Vlerësuar vs Aktual", + "workingDays": "Ditë Pune", + "manDays": "Ditë Njeri", + "days": "Ditë", + "estimatedDays": "Ditë të Vlerësuara", + "actualDays": "Ditë Aktuale", + + "noCategories": "Nuk u gjetën kategori", + "noCategory": "Pa Kategori", + "noProjects": "Nuk u gjetën projekte", + "noTeams": "Nuk u gjetën ekipe", + "noData": "Nuk u gjetën të dhëna" +} diff --git a/worklenz-backend/src/public/locales/alb/unauthorized.json b/worklenz-backend/src/public/locales/alb/unauthorized.json new file mode 100644 index 00000000..a731e676 --- /dev/null +++ b/worklenz-backend/src/public/locales/alb/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "E paautorizuar!", + "subtitle": "Nuk jeni të autorizuar të hyni në këtë faqe", + "button": "Kthehu në Faqen Kryesore" +} diff --git a/worklenz-backend/src/public/locales/de/404-page.json b/worklenz-backend/src/public/locales/de/404-page.json new file mode 100644 index 00000000..641a1847 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "Entschuldigung, die von Ihnen besuchte Seite existiert nicht.", + "backHomeButton": "Zurück zur Startseite" +} diff --git a/worklenz-backend/src/public/locales/de/account-setup.json b/worklenz-backend/src/public/locales/de/account-setup.json new file mode 100644 index 00000000..ddfb7b80 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/account-setup.json @@ -0,0 +1,31 @@ +{ + "continue": "Weiter", + + "setupYourAccount": "Richten Sie Ihr Worklenz-Konto ein.", + "organizationStepTitle": "Organisation benennen", + "organizationStepLabel": "Wählen Sie einen Namen für Ihr Worklenz-Konto.", + + "projectStepTitle": "Erstellen Sie Ihr erstes Projekt", + "projectStepLabel": "An welchem Projekt arbeiten Sie gerade?", + "projectStepPlaceholder": "z.B. Marketingplan", + + "tasksStepTitle": "Erstellen Sie Ihre ersten Aufgaben", + "tasksStepLabel": "Geben Sie einige Aufgaben ein, die Sie in", + "tasksStepAddAnother": "Weitere hinzufügen", + + "emailPlaceholder": "E-Mail-Adresse", + "invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein", + "or": "oder", + "templateButton": "Aus Vorlage importieren", + "goBack": "Zurück", + "cancel": "Abbrechen", + "create": "Erstellen", + "templateDrawerTitle": "Aus Vorlagen auswählen", + "step3InputLabel": "Per E-Mail einladen", + "addAnother": "Weitere hinzufügen", + "skipForNow": "Jetzt überspringen", + "formTitle": "Erstellen Sie Ihre erste Aufgabe.", + "step3Title": "Laden Sie Ihr Team zur Zusammenarbeit ein", + "maxMembers": " (Sie können bis zu 5 Mitglieder einladen)", + "maxTasks": " (Sie können bis zu 5 Aufgaben erstellen)" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/current-bill.json b/worklenz-backend/src/public/locales/de/admin-center/current-bill.json new file mode 100644 index 00000000..fcf2c636 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/current-bill.json @@ -0,0 +1,113 @@ +{ + "title": "Abrechnungen", + "currentBill": "Aktuelle Rechnung", + "configuration": "Konfiguration", + "currentPlanDetails": "Aktuelle Plan Details", + "upgradePlan": "Plan upgraden", + "cardBodyText01": "Kostenlose Testversion", + "cardBodyText02": "(Ihr Testplan läuft in 1 Monat 19 Tagen ab)", + "redeemCode": "Gutscheincode einlösen", + "accountStorage": "Kontospeicher", + "used": "Verwendet:", + "remaining": "Verbleibend:", + "charges": "Gebühren", + "tooltip": "Gebühren für den aktuellen Abrechnungszeitraum", + "description": "Beschreibung", + "billingPeriod": "Abrechnungszeitraum", + "billStatus": "Rechnungsstatus", + "perUserValue": "Pro Benutzer Wert", + "users": "Benutzer", + + "amount": "Betrag", + "invoices": "Rechnungen", + "transactionId": "Transaktions-ID", + "transactionDate": "Transaktionsdatum", + "paymentMethod": "Zahlungsmethode", + "status": "Status", + "ltdUsers": "Sie können bis zu {{ltd_users}} Benutzer hinzufügen.", + + "totalSeats": "Gesamte Plätze", + "availableSeats": "Verfügbare Plätze", + "addMoreSeats": "Weitere Plätze hinzufügen", + + "drawerTitle": "Gutscheincode einlösen", + "label": "Gutscheincode", + "drawerPlaceholder": "Geben Sie Ihren Gutscheincode ein", + "redeemSubmit": "Einreichen", + + "modalTitle": "Wählen Sie den besten Plan für Ihr Team", + "seatLabel": "Anzahl der Plätze", + "freePlan": "Kostenloser Plan", + "startup": "Startup", + "business": "Business", + "tag": "Am beliebtesten", + "enterprise": "Enterprise", + + "freeSubtitle": "kostenlos für immer", + "freeUsers": "Ideal für die persönliche Nutzung", + "freeText01": "100MB Speicher", + "freeText02": "3 Projekte", + "freeText03": "5 Teammitglieder", + + "startupSubtitle": "PAUSCHALPREIS / Monat", + "startupUsers": "Bis zu 15 Benutzer", + "startupText01": "25GB Speicher", + "startupText02": "Unbegrenzte aktive Projekte", + "startupText03": "Zeitplan", + "startupText04": "Berichterstattung", + "startupText05": "Projekte abonnieren", + + "businessSubtitle": "Benutzer / Monat", + "businessUsers": "16 - 200 Benutzer", + + "enterpriseUsers": "200 - 500+ Benutzer", + + "footerTitle": "Bitte geben Sie uns eine Kontaktnummer, unter der wir Sie erreichen können.", + "footerLabel": "Kontaktnummer", + "footerButton": "Kontaktieren Sie uns", + + "redeemCodePlaceHolder": "Geben Sie Ihren Gutscheincode ein", + "submit": "Einreichen", + + "trialPlan": "Kostenlose Testversion", + "trialExpireDate": "Gültig bis {{trial_expire_date}}", + "trialExpired": "Ihre kostenlose Testversion ist {{trial_expire_string}} abgelaufen", + "trialInProgress": "Ihre kostenlose Testversion läuft {{trial_expire_string}} ab", + + "required": "Dieses Feld ist erforderlich", + "invalidCode": "Ungültiger Code", + + "selectPlan": "Wählen Sie den besten Plan für Ihr Team", + "changeSubscriptionPlan": "Ändern Sie Ihren Abonnementplan", + "noOfSeats": "Anzahl der Plätze", + "annualPlan": "Pro - Jährlich", + "monthlyPlan": "Pro - Monatlich", + "freeForever": "Kostenlos für immer", + "bestForPersonalUse": "Ideal für die persönliche Nutzung", + "storage": "Speicher", + "projects": "Projekte", + "teamMembers": "Teammitglieder", + "unlimitedTeamMembers": "Unbegrenzte Teammitglieder", + "unlimitedActiveProjects": "Unbegrenzte aktive Projekte", + "schedule": "Zeitplan", + "reporting": "Berichterstattung", + "subscribeToProjects": "Projekte abonnieren", + "billedAnnually": "Jährlich abgerechnet", + "billedMonthly": "Monatlich abgerechnet", + + "pausePlan": "Plan pausieren", + "resumePlan": "Plan fortsetzen", + "changePlan": "Plan ändern", + "cancelPlan": "Plan kündigen", + + "perMonthPerUser": "pro Benutzer/Monat", + "viewInvoice": "Rechnung anzeigen", + "switchToFreePlan": "Wechsel zum kostenlosen Plan", + + "expirestoday": "heute", + "expirestomorrow": "morgen", + "expiredDaysAgo": "vor {{days}} Tagen", + + "continueWith": "Fortfahren mit {{plan}}", + "changeToPlan": "Wechseln zu {{plan}}" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/overview.json b/worklenz-backend/src/public/locales/de/admin-center/overview.json new file mode 100644 index 00000000..0330d788 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "Übersicht", + "name": "Organisationsname", + "owner": "Organisationsinhaber", + "admins": "Organisationsadministratoren", + "contactNumber": "Kontaktnummer hinzufügen", + "edit": "Bearbeiten" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/projects.json b/worklenz-backend/src/public/locales/de/admin-center/projects.json new file mode 100644 index 00000000..2d4f3534 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "Mitgliederanzahl", + "createdAt": "Erstellt am", + "projectName": "Projektname", + "teamName": "Teamname", + "refreshProjects": "Projekte aktualisieren", + "searchPlaceholder": "Nach Projektname suchen", + "deleteProject": "Sind Sie sicher, dass Sie dieses Projekt löschen möchten?", + "confirm": "Bestätigen", + "cancel": "Abbrechen", + "delete": "Projekt löschen" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/sidebar.json b/worklenz-backend/src/public/locales/de/admin-center/sidebar.json new file mode 100644 index 00000000..670595a3 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Übersicht", + "users": "Benutzer", + "teams": "Teams", + "billing": "Abrechnung", + "projects": "Projekte", + "adminCenter": "Admin-Center" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/teams.json b/worklenz-backend/src/public/locales/de/admin-center/teams.json new file mode 100644 index 00000000..7ab2831f --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/teams.json @@ -0,0 +1,33 @@ +{ + "title": "Teams", + "subtitle": "Teams", + "tooltip": "Teams aktualisieren", + "placeholder": "Nach Namen suchen", + "addTeam": "Team hinzufügen", + "team": "Team", + "membersCount": "Mitgliederanzahl", + "members": "Mitglieder", + "drawerTitle": "Neues Team erstellen", + "label": "Teamname", + "drawerPlaceholder": "Name", + "create": "Erstellen", + "delete": "Löschen", + "settings": "Einstellungen", + "popTitle": "Sind Sie sicher?", + "message": "Bitte geben Sie einen Namen ein", + "teamSettings": "Team-Einstellungen", + "teamName": "Teamname", + "teamDescription": "Teambeschreibung", + "teamMembers": "Teammitglieder", + "teamMembersCount": "Anzahl der Teammitglieder", + "teamMembersPlaceholder": "Nach Namen suchen", + "addMember": "Mitglied hinzufügen", + "add": "Hinzufügen", + "update": "Aktualisieren", + "teamNamePlaceholder": "Name des Teams", + "user": "Benutzer", + "role": "Rolle", + "owner": "Besitzer", + "admin": "Administrator", + "member": "Mitglied" +} diff --git a/worklenz-backend/src/public/locales/de/admin-center/users.json b/worklenz-backend/src/public/locales/de/admin-center/users.json new file mode 100644 index 00000000..47de9a59 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "Benutzer", + "subTitle": "Benutzer", + "placeholder": "Nach Namen suchen", + "user": "Benutzer", + "email": "E-Mail", + "lastActivity": "Letzte Aktivität", + "refresh": "Benutzer aktualisieren" +} diff --git a/worklenz-backend/src/public/locales/de/all-project-list.json b/worklenz-backend/src/public/locales/de/all-project-list.json new file mode 100644 index 00000000..89a9803d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "Name", + "client": "Kunde", + "category": "Kategorie", + "status": "Status", + "tasksProgress": "Aufgabenfortschritt", + "updated_at": "Zuletzt aktualisiert", + "members": "Mitglieder", + "setting": "Einstellungen", + "projects": "Projekte", + "refreshProjects": "Projekte aktualisieren", + "all": "Alle", + "favorites": "Favoriten", + "archived": "Archiviert", + "placeholder": "Nach Namen suchen", + "archive": "Archivieren", + "unarchive": "Dearchivieren", + "archiveConfirm": "Sind Sie sicher, dass Sie dieses Projekt archivieren möchten?", + "unarchiveConfirm": "Sind Sie sicher, dass Sie dieses Projekt dearchivieren möchten?", + "yes": "Ja", + "no": "Nein", + "clickToFilter": "Zum Filtern klicken nach", + "noProjects": "Keine Projekte gefunden", + "addToFavourites": "Zu Favoriten hinzufügen", + "list": "Liste", + "group": "Gruppe", + "listView": "Listenansicht", + "groupView": "Gruppenansicht", + "groupBy": { + "category": "Kategorie", + "client": "Kunde" + }, + "noPermission": "Sie haben keine Berechtigung, diese Aktion durchzuführen" +} diff --git a/worklenz-backend/src/public/locales/de/auth/auth-common.json b/worklenz-backend/src/public/locales/de/auth/auth-common.json new file mode 100644 index 00000000..dab26d10 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "Abmelden...", + "authenticating": "Authentifizierung läuft...", + "gettingThingsReady": "Bereite alles für Sie vor..." +} diff --git a/worklenz-backend/src/public/locales/de/auth/forgot-password.json b/worklenz-backend/src/public/locales/de/auth/forgot-password.json new file mode 100644 index 00000000..a94c7463 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "Passwort zurücksetzen", + "emailLabel": "E-Mail", + "emailPlaceholder": "Ihre E-Mail eingeben", + "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!", + "resetPasswordButton": "Passwort zurücksetzen", + "returnToLoginButton": "Zurück zum Login", + "passwordResetSuccessMessage": "Ein Link zum Zurücksetzen des Passworts wurde an Ihre E-Mail gesendet.", + "orText": "ODER", + "successTitle": "Anweisung zum Zurücksetzen gesendet!", + "successMessage": "Die Informationen zum Zurücksetzen wurden an Ihre E-Mail gesendet. Bitte überprüfen Sie Ihr E-Mail-Postfach." +} diff --git a/worklenz-backend/src/public/locales/de/auth/login.json b/worklenz-backend/src/public/locales/de/auth/login.json new file mode 100644 index 00000000..f42d0db9 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "Melden Sie sich an", + "emailLabel": "E-Mail", + "emailPlaceholder": "Ihre E-Mail-Adresse eingeben", + "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Ihr Passwort eingeben", + "passwordRequired": "Bitte geben Sie Ihr Passwort ein!", + "rememberMe": "Erinnere dich an mich", + "loginButton": "Anmelden", + "signupButton": "Registrieren", + "forgotPasswordButton": "Passwort vergessen?", + "signInWithGoogleButton": "Mit Google anmelden", + "dontHaveAccountText": "Noch kein Konto?", + "orText": "ODER", + "successMessage": "Sie haben sich erfolgreich angemeldet!", + "loginError": "Anmeldung fehlgeschlagen", + "googleLoginError": "Google-Anmeldung fehlgeschlagen", + "validationMessages": { + "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein", + "password": "Das Passwort muss mindestens 8 Zeichen lang sein" + }, + "errorMessages": { + "loginErrorTitle": "Anmeldung fehlgeschlagen", + "loginErrorMessage": "Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihr Passwort und versuchen Sie es erneut" + } +} diff --git a/worklenz-backend/src/public/locales/de/auth/signup.json b/worklenz-backend/src/public/locales/de/auth/signup.json new file mode 100644 index 00000000..55a63a23 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "Registrieren Sie sich, um loszulegen", + "nameLabel": "Vollständiger Name", + "namePlaceholder": "Ihren vollständigen Namen eingeben", + "nameRequired": "Bitte geben Sie Ihren vollständigen Namen ein!", + "nameMinCharacterRequired": "Der Name muss mindestens 4 Zeichen lang sein!", + "emailLabel": "E-Mail", + "emailPlaceholder": "Ihre E-Mail-Adresse eingeben", + "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Ihr Passwort eingeben", + "passwordRequired": "Bitte geben Sie Ihr Passwort ein!", + "passwordMinCharacterRequired": "Das Passwort muss mindestens 8 Zeichen lang sein!", + "passwordPatternRequired": "Das Passwort erfüllt nicht die Anforderungen!", + "strongPasswordPlaceholder": "Ein stärkeres Passwort eingeben", + "passwordValidationAltText": "Das Passwort muss mindestens 8 Zeichen enthalten, mit Groß- und Kleinbuchstaben, einer Zahl und einem Sonderzeichen.", + "signupSuccessMessage": "Sie haben sich erfolgreich registriert!", + "privacyPolicyLink": "Datenschutzrichtlinie", + "termsOfUseLink": "Nutzungsbedingungen", + "bySigningUpText": "Mit der Registrierung stimmen Sie unseren", + "andText": "und", + "signupButton": "Registrieren", + "signInWithGoogleButton": "Mit Google anmelden", + "alreadyHaveAccountText": "Sie haben bereits ein Konto?", + "loginButton": "Anmelden", + "orText": "ODER", + "reCAPTCHAVerificationError": "reCAPTCHA-Verifizierungsfehler", + "reCAPTCHAVerificationErrorMessage": "Wir konnten Ihre reCAPTCHA nicht verifizieren. Bitte versuchen Sie es erneut." +} diff --git a/worklenz-backend/src/public/locales/de/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/de/auth/verify-reset-email.json new file mode 100644 index 00000000..323c685f --- /dev/null +++ b/worklenz-backend/src/public/locales/de/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "E-Mail zurücksetzen bestätigen", + "description": "Geben Sie Ihr neues Passwort ein", + "placeholder": "Neues Passwort eingeben", + "confirmPasswordPlaceholder": "Neues Passwort bestätigen", + "passwordHint": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben, einer Zahl und einem Sonderzeichen.", + "resetPasswordButton": "Passwort zurücksetzen", + "orText": "Oder", + "resendResetEmail": "Zurücksetz-E-Mail erneut senden", + "passwordRequired": "Bitte geben Sie Ihr neues Passwort ein", + "returnToLoginButton": "Zurück zur Anmeldung", + "confirmPasswordRequired": "Bitte bestätigen Sie Ihr neues Passwort", + "passwordMismatch": "Die beiden Passwörter stimmen nicht überein" +} diff --git a/worklenz-backend/src/public/locales/de/common.json b/worklenz-backend/src/public/locales/de/common.json new file mode 100644 index 00000000..937ad4a9 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "Anmeldung erfolgreich!", + "login-failed": "Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut.", + "signup-success": "Registrierung erfolgreich! Willkommen an Bord.", + "signup-failed": "Registrierung fehlgeschlagen. Bitte füllen Sie alle erforderlichen Felder aus und versuchen Sie es erneut.", + "reconnecting": "Vom Server getrennt.", + "connection-lost": "Verbindung zum Server fehlgeschlagen. Bitte überprüfen Sie Ihre Internetverbindung.", + "connection-restored": "Erfolgreich mit dem Server verbunden" +} diff --git a/worklenz-backend/src/public/locales/de/create-first-project-form.json b/worklenz-backend/src/public/locales/de/create-first-project-form.json new file mode 100644 index 00000000..02ce495e --- /dev/null +++ b/worklenz-backend/src/public/locales/de/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "Erstellen Sie Ihr erstes Projekt", + "inputLabel": "An welchem Projekt arbeiten Sie gerade?", + "or": "oder", + "templateButton": "Aus Vorlage importieren", + "createFromTemplate": "Aus Vorlage erstellen", + "goBack": "Zurück", + "continue": "Weitermachen", + "cancel": "Abbrechen", + "create": "Erstellen", + "templateDrawerTitle": "Aus Vorlagen auswählen", + "createProject": "Projekt erstellen" +} diff --git a/worklenz-backend/src/public/locales/de/create-first-tasks.json b/worklenz-backend/src/public/locales/de/create-first-tasks.json new file mode 100644 index 00000000..ae7a4256 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "Erstellen Sie Ihre erste Aufgabe.", + "inputLabel": "Geben Sie einige Aufgaben ein, die Sie erledigen werden in", + "addAnother": "Einen weiteren hinzufügen", + "goBack": "Zurück", + "continue": "Weiter" +} diff --git a/worklenz-backend/src/public/locales/de/home.json b/worklenz-backend/src/public/locales/de/home.json new file mode 100644 index 00000000..cc868952 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/home.json @@ -0,0 +1,46 @@ +{ + "todoList": { + "title": "Aufgabenliste", + "refreshTasks": "Aufgaben aktualisieren", + "addTask": "+ Aufgabe hinzufügen", + "noTasks": "Keine Aufgaben", + "pressEnter": "Drücken Sie", + "toCreate": "zum Erstellen.", + "markAsDone": "Als erledigt markieren" + }, + "projects": { + "title": "Projekte", + "refreshProjects": "Projekte aktualisieren", + "noRecentProjects": "Sie sind aktuell keinem Projekt zugewiesen.", + "noFavouriteProjects": "Keine Projekte als Favoriten markiert.", + "recent": "Kürzlich", + "favourites": "Favoriten" + }, + "tasks": { + "assignedToMe": "Mir zugewiesen", + "assignedByMe": "Von mir zugewiesen", + "all": "Alle", + "today": "Heute", + "upcoming": "Bevorstehend", + "overdue": "Überfällig", + "noDueDate": "Kein Fälligkeitsdatum", + "noTasks": "Keine Aufgaben zum Anzeigen.", + "addTask": "+ Aufgabe hinzufügen", + "name": "Name", + "project": "Projekt", + "status": "Status", + "dueDate": "Fälligkeitsdatum", + "dueDatePlaceholder": "Fälligkeitsdatum festlegen", + "tomorrow": "Morgen", + "nextWeek": "Nächste Woche", + "nextMonth": "Nächster Monat", + "projectRequired": "Bitte wählen Sie ein Projekt aus", + "pressTabToSelectDueDateAndProject": "Drücken Sie Tab, um ein Fälligkeitsdatum und ein Projekt auszuwählen", + "dueOn": "Fällige Aufgaben am", + "taskRequired": "Bitte fügen Sie eine Aufgabe hinzu", + "list": "Liste", + "calendar": "Kalender", + "tasks": "Aufgaben", + "refresh": "Aktualisieren" + } +} diff --git a/worklenz-backend/src/public/locales/de/invite-initial-team-members.json b/worklenz-backend/src/public/locales/de/invite-initial-team-members.json new file mode 100644 index 00000000..e3ba64ae --- /dev/null +++ b/worklenz-backend/src/public/locales/de/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "Laden Sie Ihr Team zur Zusammenarbeit ein", + "inputLabel": "Per E-Mail einladen", + "addAnother": "Weitere hinzufügen", + "goBack": "Zurück", + "continue": "Weitermachen", + "skipForNow": "Vorerst überspringen" +} diff --git a/worklenz-backend/src/public/locales/de/kanban-board.json b/worklenz-backend/src/public/locales/de/kanban-board.json new file mode 100644 index 00000000..70e1f6ca --- /dev/null +++ b/worklenz-backend/src/public/locales/de/kanban-board.json @@ -0,0 +1,30 @@ +{ + "rename": "Umbenennen", + "delete": "Löschen", + "addTask": "Aufgabe hinzufügen", + "addSectionButton": "Abschnitt hinzufügen", + "changeCategory": "Kategorie ändern", + + "deleteTooltip": "Löschen", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + + "dueDate": "Fälligkeitsdatum", + "cancel": "Abbrechen", + + "today": "Heute", + "tomorrow": "Morgen", + "assignToMe": "Mir zuweisen", + "archive": "Archivieren", + + "newTaskNamePlaceholder": "Aufgabenname eingeben", + "newSubtaskNamePlaceholder": "Unteraufgabenname eingeben", + "untitledSection": "Unbenannter Abschnitt", + "unmapped": "Nicht zugeordnet", + "clickToChangeDate": "Klicken Sie, um das Datum zu ändern", + "noDueDate": "Kein Fälligkeitsdatum", + "save": "Speichern", + "clear": "Löschen", + "nextWeek": "Nächste Woche" +} diff --git a/worklenz-backend/src/public/locales/de/license-expired.json b/worklenz-backend/src/public/locales/de/license-expired.json new file mode 100644 index 00000000..437ddeb2 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "Ihre Worklenz-Testversion ist abgelaufen!", + "subtitle": "Bitte führen Sie jetzt ein Upgrade durch.", + "button": "Jetzt upgraden", + "checking": "Überprüfen des Abonnementstatus..." +} diff --git a/worklenz-backend/src/public/locales/de/navbar.json b/worklenz-backend/src/public/locales/de/navbar.json new file mode 100644 index 00000000..c84912e4 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Worklenz-Logo", + "home": "Startseite", + "projects": "Projekte", + "schedule": "Zeitplan", + "reporting": "Berichterstattung", + "clients": "Kunden", + "teams": "Teams", + "labels": "Labels", + "jobTitles": "Jobtitel", + "upgradePlan": "Plan upgraden", + "upgradePlanTooltip": "Plan upgraden", + "invite": "Einladen", + "inviteTooltip": "Teammitglieder zur Teilnahme einladen", + "switchTeamTooltip": "Team wechseln", + "help": "Hilfe", + "notificationTooltip": "Benachrichtigungen anzeigen", + "profileTooltip": "Profil anzeigen", + "adminCenter": "Admin-Center", + "settings": "Einstellungen", + "logOut": "Abmelden", + "notificationsDrawer": { + "read": "Gelesene Benachrichtigungen", + "unread": "Ungelesene Benachrichtigungen", + "markAsRead": "Als gelesen markieren", + "readAndJoin": "Lesen & Beitreten", + "accept": "Annehmen", + "acceptAndJoin": "Annehmen & Beitreten", + "noNotifications": "Keine Benachrichtigungen" + } +} diff --git a/worklenz-backend/src/public/locales/de/organization-name-form.json b/worklenz-backend/src/public/locales/de/organization-name-form.json new file mode 100644 index 00000000..06d3efcf --- /dev/null +++ b/worklenz-backend/src/public/locales/de/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "Benennen Sie Ihre Organisation.", + "worklenzAccountTitle": "Wählen Sie einen Namen für Ihr Worklenz-Konto.", + "continue": "Weiter" +} diff --git a/worklenz-backend/src/public/locales/de/phases-drawer.json b/worklenz-backend/src/public/locales/de/phases-drawer.json new file mode 100644 index 00000000..c9e41e09 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "Phasen konfigurieren", + "phaseLabel": "Phasenbezeichnung", + "enterPhaseName": "Namen für Phasenbezeichnung eingeben", + "addOption": "Option hinzufügen", + "phaseOptions": "Phasenoptionen:", + "dragToReorderPhases": "Ziehen Sie Phasen, um sie neu zu ordnen. Jede Phase kann eine andere Farbe haben.", + "enterNewPhaseName": "Neuen Phasennamen eingeben...", + "addPhase": "Phase hinzufügen", + "noPhasesFound": "Keine Phasen gefunden. Erstellen Sie Ihre erste Phase oben.", + "deletePhase": "Phase löschen", + "deletePhaseConfirm": "Sind Sie sicher, dass Sie diese Phase löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "rename": "Umbenennen", + "delete": "Löschen", + "enterPhaseName": "Phasennamen eingeben", + "selectColor": "Farbe auswählen", + "managePhases": "Phasen verwalten", + "close": "Schließen" +} diff --git a/worklenz-backend/src/public/locales/de/project-drawer.json b/worklenz-backend/src/public/locales/de/project-drawer.json new file mode 100644 index 00000000..d20f220b --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-drawer.json @@ -0,0 +1,42 @@ +{ + "createProject": "Projekt erstellen", + "editProject": "Projekt bearbeiten", + "enterCategoryName": "Namen für die Kategorie eingeben", + "hitEnterToCreate": "Enter drücken zum Erstellen!", + "enterNotes": "Notizen", + "youCanManageClientsUnderSettings": "Kunden können Sie unter Einstellungen verwalten", + "addCategory": "Kategorie zum Projekt hinzufügen", + "newCategory": "Neue Kategorie", + "notes": "Notizen", + "startDate": "Startdatum", + "endDate": "Enddatum", + "estimateWorkingDays": "Arbeitstage schätzen", + "estimateManDays": "Personentage schätzen", + "hoursPerDay": "Stunden pro Tag", + "create": "Erstellen", + "update": "Aktualisieren", + "delete": "Löschen", + "typeToSearchClients": "Kundensuche", + "projectColor": "Projektfarbe", + "pleaseEnterAName": "Bitte geben Sie einen Namen ein", + "enterProjectName": "Projektnamen eingeben", + "name": "Name", + "status": "Status", + "health": "Gesundheit", + "category": "Kategorie", + "projectManager": "Projektleiter", + "client": "Kunde", + "deleteConfirmation": "Sind Sie sicher, dass Sie löschen möchten?", + "deleteConfirmationDescription": "Dies entfernt alle zugehörigen Daten und kann nicht rückgängig gemacht werden.", + "yes": "Ja", + "no": "Nein", + "createdAt": "Erstellt am", + "updatedAt": "Aktualisiert am", + "by": "von", + "add": "Hinzufügen", + "asClient": "als Kunde", + "createClient": "Kunde erstellen", + "searchInputPlaceholder": "Nach Name oder E-Mail suchen", + "hoursPerDayValidationMessage": "Stunden pro Tag müssen zwischen 1 und 24", + "noPermission": "Keine Berechtigung" +} diff --git a/worklenz-backend/src/public/locales/de/project-view-files.json b/worklenz-backend/src/public/locales/de/project-view-files.json new file mode 100644 index 00000000..8408df16 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "Name", + "attachedTaskColumn": "Zugehörige Aufgabe", + "sizeColumn": "Größe", + "uploadedByColumn": "Hochgeladen von", + "uploadedAtColumn": "Hochgeladen am", + "fileIconAlt": "Dateisymbol", + "titleDescriptionText": "Alle Anhänge zu Aufgaben in diesem Projekt werden hier angezeigt.", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "segmentedTooltip": "Demnächst verfügbar! Wechseln zwischen Listenansicht und Miniaturansicht.", + "emptyText": "Es gibt keine Anhänge in diesem Projekt." +} diff --git a/worklenz-backend/src/public/locales/de/project-view-insights.json b/worklenz-backend/src/public/locales/de/project-view-insights.json new file mode 100644 index 00000000..5f11df54 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "Übersicht", + "statusOverview": "Statusübersicht", + "priorityOverview": "Prioritätenübersicht", + "lastUpdatedTasks": "Zuletzt aktualisierte Aufgaben" + }, + "members": { + "title": "Mitglieder", + "tooltip": "Mitglieder", + "tasksByMembers": "Aufgaben nach Mitgliedern", + "tasksByMembersTooltip": "Aufgaben nach Mitgliedern", + "name": "Name", + "taskCount": "Anzahl Aufgaben", + "contribution": "Beitrag", + "completed": "Abgeschlossen", + "incomplete": "Unvollständig", + "overdue": "Überfällig", + "progress": "Fortschritt" + }, + "tasks": { + "overdueTasks": "Überfällige Aufgaben", + "overLoggedTasks": "Aufgaben mit zu viel erfasster Zeit", + "tasksCompletedEarly": "Vorzeitig abgeschlossene Aufgaben", + "tasksCompletedLate": "Verspätet abgeschlossene Aufgaben", + "overLoggedTasksTooltip": "Aufgaben, bei denen mehr Zeit erfasst wurde als geschätzt", + "overdueTasksTooltip": "Aufgaben, deren Fälligkeitsdatum überschritten wurde" + }, + "common": { + "seeAll": "Alle anzeigen", + "totalLoggedHours": "Gesamterfasste Stunden", + "totalEstimation": "Gesamtschätzung", + "completedTasks": "Abgeschlossene Aufgaben", + "incompleteTasks": "Unvollständige Aufgaben", + "overdueTasks": "Überfällige Aufgaben", + "overdueTasksTooltip": "Aufgaben, deren Fälligkeitsdatum überschritten wurde", + "totalLoggedHoursTooltip": "Zeitschätzung und erfasste Zeit für Aufgaben.", + "includeArchivedTasks": "Archivierte Aufgaben einbeziehen", + "export": "Exportieren" + } +} diff --git a/worklenz-backend/src/public/locales/de/project-view-members.json b/worklenz-backend/src/public/locales/de/project-view-members.json new file mode 100644 index 00000000..eee5d0a1 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "Name", + "jobTitleColumn": "Jobtitel", + "emailColumn": "E-Mail", + "tasksColumn": "Aufgaben", + "taskProgressColumn": "Aufgabenfortschritt", + "accessColumn": "Zugriff", + "fileIconAlt": "Dateisymbol", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "refreshButtonTooltip": "Mitglieder aktualisieren", + "deleteButtonTooltip": "Aus Projekt entfernen", + "memberCount": "Mitglied", + "membersCountPlural": "Mitglieder", + "emptyText": "Es gibt keine Anhänge in diesem Projekt." +} diff --git a/worklenz-backend/src/public/locales/de/project-view-updates.json b/worklenz-backend/src/public/locales/de/project-view-updates.json new file mode 100644 index 00000000..d32cf352 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "Kommentar hinzufügen..", + "addButton": "Hinzufügen", + "cancelButton": "Abbrechen", + "deleteButton": "Löschen" +} diff --git a/worklenz-backend/src/public/locales/de/project-view.json b/worklenz-backend/src/public/locales/de/project-view.json new file mode 100644 index 00000000..448a7249 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "Aufgabenliste", + "board": "Kanban-Board", + "insights": "Insights", + "files": "Dateien", + "members": "Mitglieder", + "updates": "Aktualisierungen", + "projectView": "Projektansicht", + "loading": "Projekt wird geladen...", + "error": "Fehler beim Laden des Projekts", + "pinnedTab": "Als Standard-Registerkarte festgesetzt", + "pinTab": "Als Standard-Registerkarte festsetzen", + "unpinTab": "Standard-Registerkarte lösen" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/de/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/de/project-view/import-task-templates.json new file mode 100644 index 00000000..c5af50a0 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "Aufgabenvorlage importieren", + "templateName": "Vorlagenname", + "templateDescription": "Vorlagenbeschreibung", + "selectedTasks": "Ausgewählte Aufgaben", + "tasks": "Aufgaben", + "templates": "Vorlagen", + "remove": "Entfernen", + "cancel": "Abbrechen", + "import": "Importieren" +} diff --git a/worklenz-backend/src/public/locales/de/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/de/project-view/project-member-drawer.json new file mode 100644 index 00000000..cb391b2c --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "Projektmitglieder", + "searchLabel": "Mitglieder hinzufügen durch Eingabe von Name oder E-Mail", + "searchPlaceholder": "Name oder E-Mail eingeben", + "inviteAsAMember": "Als Mitglied einladen", + "inviteNewMemberByEmail": "Neues Mitglied per E-Mail einladen" +} diff --git a/worklenz-backend/src/public/locales/de/project-view/project-view-header.json b/worklenz-backend/src/public/locales/de/project-view/project-view-header.json new file mode 100644 index 00000000..c52c6052 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "Aufgaben importieren", + "importTask": "Aufgabe importieren", + "createTask": "Aufgabe erstellen", + "settings": "Einstellungen", + "subscribe": "Abonnieren", + "unsubscribe": "Abonnement beenden", + "deleteProject": "Projekt löschen", + "startDate": "Startdatum", + "endDate": "Enddatum", + "projectSettings": "Projekteinstellungen", + "projectSummary": "Projektzusammenfassung", + "receiveProjectSummary": "Erhalten Sie jeden Abend eine Projektzusammenfassung.", + "refreshProject": "Projekt aktualisieren", + "saveAsTemplate": "Als Vorlage speichern", + "invite": "Einladen", + "share": "Teilen", + "subscribeTooltip": "Projektbenachrichtigungen abonnieren", + "unsubscribeTooltip": "Projektbenachrichtigungen beenden", + "refreshTooltip": "Projektdaten aktualisieren", + "settingsTooltip": "Projekteinstellungen öffnen", + "saveAsTemplateTooltip": "Dieses Projekt als Vorlage speichern", + "inviteTooltip": "Teammitglieder zu diesem Projekt einladen", + "createTaskTooltip": "Neue Aufgabe erstellen", + "importTaskTooltip": "Aufgabe aus Vorlage importieren", + "navigateBackTooltip": "Zurück zur Projektliste", + "projectStatusTooltip": "Projektstatus", + "projectDatesInfo": "Informationen zum Projektzeitraum", + "projectCategoryTooltip": "Projektkategorie" +} diff --git a/worklenz-backend/src/public/locales/de/project-view/save-as-template.json b/worklenz-backend/src/public/locales/de/project-view/save-as-template.json new file mode 100644 index 00000000..7b732962 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "Als Vorlage speichern", + "templateName": "Vorlagenname", + "includes": "Was soll aus dem Projekt in die Vorlage aufgenommen werden?", + "includesOptions": { + "statuses": "Status", + "phases": "Phasen", + "labels": "Labels" + }, + "taskIncludes": "Was soll aus den Aufgaben in die Vorlage aufgenommen werden?", + "taskIncludesOptions": { + "statuses": "Status", + "phases": "Phasen", + "labels": "Labels", + "name": "Name", + "priority": "Priorität", + "status": "Status", + "phase": "Phase", + "label": "Label", + "timeEstimate": "Zeitschätzung", + "description": "Beschreibung", + "subTasks": "Unteraufgaben" + }, + "cancel": "Abbrechen", + "save": "Speichern", + "templateNamePlaceholder": "Vorlagennamen eingeben" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-members-drawer.json b/worklenz-backend/src/public/locales/de/reporting-members-drawer.json new file mode 100644 index 00000000..807f43c7 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-members-drawer.json @@ -0,0 +1,90 @@ +{ + "exportButton": "Exportieren", + "timeLogsButton": "Zeiterfassungen", + "activityLogsButton": "Aktivitätsprotokolle", + "tasksButton": "Aufgaben", + "searchByNameInputPlaceholder": "Nach Namen suchen", + + "overviewTab": "Übersicht", + "timeLogsTab": "Zeiterfassungen", + "activityLogsTab": "Aktivitätsprotokolle", + "tasksTab": "Aufgaben", + + "projectsText": "Projekte", + "totalTasksText": "Gesamtaufgaben", + "assignedTasksText": "Zugewiesene Aufgaben", + "completedTasksText": "Abgeschlossene Aufgaben", + "ongoingTasksText": "Laufende Aufgaben", + "overdueTasksText": "Überfällige Aufgaben", + "loggedHoursText": "Erfasste Stunden", + + "tasksText": "Aufgaben", + "allText": "Alle", + + "tasksByProjectsText": "Aufgaben nach Projekten", + "tasksByStatusText": "Aufgaben nach Status", + "tasksByPriorityText": "Aufgaben nach Priorität", + + "todoText": "Zu erledigen", + "doingText": "Tun", + "doneText": "Erledigt", + "lowText": "Niedrig", + "mediumText": "Mittel", + "highText": "Hoch", + + "billableButton": "Abrechenbar", + "billableText": "Abrechenbar", + "nonBillableText": "Nicht abrechenbar", + + "timeLogsEmptyPlaceholder": "Keine Zeiterfassungen vorhanden", + "loggedText": "Erfasst", + "forText": "für", + "inText": "in", + "updatedText": "Aktualisiert", + "fromText": "Von", + "toText": "bis", + "withinText": "innerhalb", + + "activityLogsEmptyPlaceholder": "Keine Aktivitätsprotokolle vorhanden", + + "filterByText": "Filtern nach:", + "selectProjectPlaceholder": "Projekt auswählen", + + "taskColumn": "Aufgabe", + "nameColumn": "Name", + "projectColumn": "Projekt", + "statusColumn": "Status", + "priorityColumn": "Priorität", + "dueDateColumn": "Fälligkeitsdatum", + "completedDateColumn": "Abschlussdatum", + "estimatedTimeColumn": "Geschätzte Zeit", + "loggedTimeColumn": "Erfasste Zeit", + "overloggedTimeColumn": "Übererfasste Zeit", + "daysLeftColumn": "Tage übrig/überfällig", + "startDateColumn": "Startdatum", + "endDateColumn": "Enddatum", + "actualTimeColumn": "Tatsächliche Zeit", + "projectHealthColumn": "Projektstatus", + "categoryColumn": "Kategorie", + "projectManagerColumn": "Projektleiter", + + "tasksStatsOverviewDrawerTitle": "Aufgaben von", + "projectsStatsOverviewDrawerTitle": "Projekte von", + + "cancelledText": "Abgebrochen", + "blockedText": "Blockiert", + "onHoldText": "Pausiert", + "proposedText": "Vorgeschlagen", + "inPlanningText": "In Planung", + "inProgressText": "In Bearbeitung", + "completedText": "Abgeschlossen", + "continuousText": "Kontinuierlich", + + "daysLeftText": "Tage übrig", + "daysOverdueText": "Tage überfällig", + + "notSetText": "Nicht festgelegt", + "needsAttentionText": "Benötigt Aufmerksamkeit", + "atRiskText": "Gefährdet", + "goodText": "Gut" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-members.json b/worklenz-backend/src/public/locales/de/reporting-members.json new file mode 100644 index 00000000..5454d2a8 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-members.json @@ -0,0 +1,35 @@ +{ + "yesterdayText": "Gestern", + "lastSevenDaysText": "Letzte 7 Tage", + "lastWeekText": "Letzte Woche", + "lastThirtyDaysText": "Letzte 30 Tage", + "lastMonthText": "Letzter Monat", + "lastThreeMonthsText": "Letzte 3 Monate", + "allTimeText": "Gesamter Zeitraum", + "customRangeText": "Benutzerdefinierter Bereich", + "startDateInputPlaceholder": "Startdatum", + "EndDateInputPlaceholder": "Enddatum", + "filterButton": "Filtern", + + "membersTitle": "Mitglieder", + "includeArchivedButton": "Archivierte Projekte einschließen", + "exportButton": "Exportieren", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "Nach Namen suchen", + + "memberColumn": "Mitglied", + "tasksProgressColumn": "Aufgabenfortschritt", + "tasksAssignedColumn": "Zugewiesene Aufgaben", + "completedTasksColumn": "Abgeschlossene Aufgaben", + "overdueTasksColumn": "Überfällige Aufgaben", + "ongoingTasksColumn": "Laufende Aufgaben", + + "tasksAssignedColumnTooltip": "Im ausgewählten Zeitraum zugewiesene Aufgaben", + "overdueTasksColumnTooltip": "Zum Ende des ausgewählten Zeitraums überfällige Aufgaben", + "completedTasksColumnTooltip": "Im ausgewählten Zeitraum abgeschlossene Aufgaben", + "ongoingTasksColumnTooltip": "Begonnene, aber noch nicht abgeschlossene Aufgaben", + + "todoText": "Zu erledigen", + "doingText": "Tun", + "doneText": "Erledigt" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/de/reporting-overview-drawer.json new file mode 100644 index 00000000..6bf4678a --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-overview-drawer.json @@ -0,0 +1,39 @@ +{ + "exportButton": "Exportieren", + "projectsButton": "Projekte", + "membersButton": "Mitglieder", + "searchByNameInputPlaceholder": "Nach Namen suchen", + + "overviewTab": "Übersicht", + "projectsTab": "Projekte", + "membersTab": "Mitglieder", + + "projectsByStatusText": "Projekte nach Status", + "projectsByCategoryText": "Projekte nach Kategorie", + "projectsByHealthText": "Projekte nach Gesundheit", + + "projectsText": "Projekte", + "allText": "Alle", + + "cancelledText": "Abgebrochen", + "blockedText": "Blockiert", + "onHoldText": "Pausiert", + "proposedText": "Vorgeschlagen", + "inPlanningText": "In Planung", + "inProgressText": "In Bearbeitung", + "completedText": "Abgeschlossen", + "continuousText": "Kontinuierlich", + + "notSetText": "Nicht festgelegt", + "needsAttentionText": "Benötigt Aufmerksamkeit", + "atRiskText": "Gefährdet", + "goodText": "Gut", + + "nameColumn": "Name", + "emailColumn": "E-Mail", + "projectsColumn": "Projekte", + "tasksColumn": "Aufgaben", + "overdueTasksColumn": "Überfällige Aufgaben", + "completedTasksColumn": "Abgeschlossene Aufgaben", + "ongoingTasksColumn": "Laufende Aufgaben" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-overview.json b/worklenz-backend/src/public/locales/de/reporting-overview.json new file mode 100644 index 00000000..411ec83a --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-overview.json @@ -0,0 +1,25 @@ +{ + "overviewTitle": "Übersicht", + "includeArchivedButton": "Archivierte Projekte einschließen", + + "teamCount": "Team", + "teamCountPlural": "Teams", + "projectCount": "Projekt", + "projectCountPlural": "Projekte", + "memberCount": "Mitglied", + "memberCountPlural": "Mitglieder", + "activeProjectCount": "Aktives Projekt", + "activeProjectCountPlural": "Aktive Projekte", + "overdueProjectCount": "Überfälliges Projekt", + "overdueProjectCountPlural": "Überfällige Projekte", + "unassignedMemberCount": "Nicht zugewiesenes Mitglied", + "unassignedMemberCountPlural": "Nicht zugewiesene Mitglieder", + "memberWithOverdueTaskCount": "Mitglied mit überfälliger Aufgabe", + "memberWithOverdueTaskCountPlural": "Mitglieder mit überfälligen Aufgaben", + + "teamsText": "Teams", + + "nameColumn": "Name", + "projectsColumn": "Projekte", + "membersColumn": "Mitglieder" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/de/reporting-projects-drawer.json new file mode 100644 index 00000000..3f335a6c --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-projects-drawer.json @@ -0,0 +1,59 @@ +{ + "exportButton": "Exportieren", + "membersButton": "Mitglieder", + "tasksButton": "Aufgaben", + "searchByNameInputPlaceholder": "Nach Namen suchen", + + "overviewTab": "Übersicht", + "membersTab": "Mitglieder", + "tasksTab": "Aufgaben", + + "completedTasksText": "Abgeschlossene Aufgaben", + "incompleteTasksText": "Unvollständige Aufgaben", + "overdueTasksText": "Überfällige Aufgaben", + "allocatedHoursText": "Zugewiesene Stunden", + "loggedHoursText": "Erfasste Stunden", + + "tasksText": "Aufgaben", + "allText": "Alle", + + "tasksByStatusText": "Aufgaben nach Status", + "tasksByPriorityText": "Aufgaben nach Priorität", + "tasksByDueDateText": "Aufgaben nach Fälligkeit", + + "todoText": "Zu erledigen", + "doingText": "Tun", + "doneText": "Erledigt", + "lowText": "Niedrig", + "mediumText": "Mittel", + "highText": "Hoch", + "completedText": "Abgeschlossen", + "upcomingText": "Bevorstehend", + "overdueText": "Überfällig", + "noDueDateText": "Kein Fälligkeitsdatum", + + "nameColumn": "Name", + "tasksCountColumn": "Anzahl Aufgaben", + "completedTasksColumn": "Abgeschlossene Aufgaben", + "incompleteTasksColumn": "Unvollständige Aufgaben", + "overdueTasksColumn": "Überfällige Aufgaben", + "contributionColumn": "Beitrag", + "progressColumn": "Fortschritt", + "loggedTimeColumn": "Erfasste Zeit", + "taskColumn": "Aufgabe", + "projectColumn": "Projekt", + "statusColumn": "Status", + "priorityColumn": "Priorität", + "phaseColumn": "Phase", + "dueDateColumn": "Fälligkeitsdatum", + "completedDateColumn": "Abschlussdatum", + "estimatedTimeColumn": "Geschätzte Zeit", + "overloggedTimeColumn": "Übererfasste Zeit", + "completedOnColumn": "Abgeschlossen am", + "daysOverdueColumn": "Tage überfällig", + + "groupByText": "Gruppieren nach:", + "statusText": "Status", + "priorityText": "Priorität", + "phaseText": "Phase" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-projects-filters.json b/worklenz-backend/src/public/locales/de/reporting-projects-filters.json new file mode 100644 index 00000000..c48fa256 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-projects-filters.json @@ -0,0 +1,35 @@ +{ + "searchByNamePlaceholder": "Nach Namen suchen", + "searchByCategoryPlaceholder": "Nach Kategorie suchen", + + "statusText": "Status", + "healthText": "Gesundheit", + "categoryText": "Kategorie", + "projectManagerText": "Projektleiter", + "showFieldsText": "Felder anzeigen", + + "cancelledText": "Abgebrochen", + "blockedText": "Blockiert", + "onHoldText": "Pausiert", + "proposedText": "Vorgeschlagen", + "inPlanningText": "In Planung", + "inProgressText": "In Bearbeitung", + "completedText": "Abgeschlossen", + "continuousText": "Kontinuierlich", + + "notSetText": "Nicht festgelegt", + "needsAttentionText": "Benötigt Aufmerksamkeit", + "atRiskText": "Gefährdet", + "goodText": "Gut", + + "nameText": "Projekt", + "estimatedVsActualText": "Geplant vs. Tatsächlich", + "tasksProgressText": "Aufgabenfortschritt", + "lastActivityText": "Letzte Aktivität", + "datesText": "Start-/Enddatum", + "daysLeftText": "Tage übrig/überfällig", + "projectHealthText": "Projektstatus", + "projectUpdateText": "Projektupdate", + "clientText": "Kunde", + "teamText": "Team" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-projects.json b/worklenz-backend/src/public/locales/de/reporting-projects.json new file mode 100644 index 00000000..0f63310b --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-projects.json @@ -0,0 +1,52 @@ +{ + "projectCount": "Projekt", + "projectCountPlural": "Projekte", + "includeArchivedButton": "Archivierte Projekte einschließen", + "exportButton": "Exportieren", + "excelButton": "Excel", + + "projectColumn": "Projekt", + "estimatedVsActualColumn": "Geschätzt vs. Tatsächlich", + "tasksProgressColumn": "Aufgabenfortschritt", + "lastActivityColumn": "Letzte Aktivität", + "statusColumn": "Status", + "datesColumn": "Start-/Enddatum", + "daysLeftColumn": "Tage übrig/überfällig", + "projectHealthColumn": "Projektzustand", + "categoryColumn": "Kategorie", + "projectUpdateColumn": "Projektupdate", + "clientColumn": "Kunde", + "teamColumn": "Team", + "projectManagerColumn": "Projektleiter", + + "openButton": "Öffnen", + + "estimatedText": "Geschätzt", + "actualText": "Tatsächlich", + + "todoText": "Zu erledigen", + "doingText": "Tun", + "doneText": "Erledigt", + + "cancelledText": "Abgebrochen", + "blockedText": "Blockiert", + "onHoldText": "Pausiert", + "proposedText": "Vorgeschlagen", + "inPlanningText": "In Planung", + "inProgressText": "In Bearbeitung", + "completedText": "Abgeschlossen", + "continuousText": "Kontinuierlich", + + "daysLeftText": "Tage übrig", + "dayLeftText": "Tag übrig", + "daysOverdueText": "Tage überfällig", + + "notSetText": "Nicht festgelegt", + "needsAttentionText": "Benötigt Aufmerksamkeit", + "atRiskText": "Gefährdet", + "goodText": "Gut", + + "setCategoryText": "Kategorie festlegen", + "searchByNameInputPlaceholder": "Nach Namen suchen", + "todayText": "Heute" +} diff --git a/worklenz-backend/src/public/locales/de/reporting-sidebar.json b/worklenz-backend/src/public/locales/de/reporting-sidebar.json new file mode 100644 index 00000000..74d6bfb9 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Übersicht", + "projects": "Projekte", + "members": "Mitglieder", + "timeReports": "Zeitberichte", + "estimateVsActual": "Schätzen vs. Tatsächlich", + "currentOrganizationTooltip": "Aktuelle Organisation" +} diff --git a/worklenz-backend/src/public/locales/de/schedule.json b/worklenz-backend/src/public/locales/de/schedule.json new file mode 100644 index 00000000..046c7bb0 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/schedule.json @@ -0,0 +1,39 @@ +{ + "today": "Heute", + "week": "Woche", + "month": "Monat", + + "settings": "Einstellungen", + "workingDays": "Arbeitstage", + "monday": "Montag", + "tuesday": "Dienstag", + "wednesday": "Mittwoch", + "thursday": "Donnerstag", + "friday": "Freitag", + "saturday": "Samstag", + "sunday": "Sonntag", + "workingHours": "Arbeitsstunden", + "hours": "Stunden", + "saveButton": "Speichern", + + "totalAllocation": "Gesamtzuteilung", + "timeLogged": "Zeiterfassung", + "remainingTime": "Verbleibende Zeit", + "total": "Gesamt", + "perDay": "Pro Tag", + "tasks": "Aufgaben", + "startDate": "Startdatum", + "endDate": "Enddatum", + + "hoursPerDay": "Stunden pro Tag", + "totalHours": "Gesamtstunden", + "deleteButton": "Löschen", + "cancelButton": "Abbrechen", + + "tabTitle": "Aufgaben ohne Start- & Enddatum", + + "allocatedTime": "Zugewiesene Zeit", + "totalLogged": "Gesamterfasst", + "loggedBillable": "Abrechenbar erfasst", + "loggedNonBillable": "Nicht abrechenbar erfasst" +} diff --git a/worklenz-backend/src/public/locales/de/settings/categories.json b/worklenz-backend/src/public/locales/de/settings/categories.json new file mode 100644 index 00000000..5694d11d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "Kategorie", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "associatedTaskColumn": "Zugehörige Projekte", + "searchPlaceholder": "Nach Namen suchen", + "emptyText": "Kategorien können beim Aktualisieren oder Erstellen von Projekten angelegt werden.", + "colorChangeTooltip": "Zum Farbwechsel klicken" +} diff --git a/worklenz-backend/src/public/locales/de/settings/change-password.json b/worklenz-backend/src/public/locales/de/settings/change-password.json new file mode 100644 index 00000000..6b65a8cf --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "Passwort ändern", + "currentPassword": "Aktuelles Passwort", + "newPassword": "Neues Passwort", + "confirmPassword": "Passwort bestätigen", + "currentPasswordPlaceholder": "Aktuelles Passwort eingeben", + "newPasswordPlaceholder": "Neues Passwort", + "confirmPasswordPlaceholder": "Passwort bestätigen", + "currentPasswordRequired": "Bitte geben Sie Ihr aktuelles Passwort ein!", + "newPasswordRequired": "Bitte geben Sie Ihr neues Passwort ein!", + "passwordValidationError": "Das Passwort muss mindestens 8 Zeichen lang sein und einen Großbuchstaben, eine Zahl und ein Sonderzeichen enthalten.", + "passwordMismatch": "Die Passwörter stimmen nicht überein!", + "passwordRequirements": "Das neue Passwort muss mindestens 8 Zeichen lang sein und einen Großbuchstaben, eine Zahl und ein Sonderzeichen enthalten.", + "updateButton": "Passwort aktualisieren" +} diff --git a/worklenz-backend/src/public/locales/de/settings/clients.json b/worklenz-backend/src/public/locales/de/settings/clients.json new file mode 100644 index 00000000..d2982bdb --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "Name", + "projectColumn": "Projekt", + "noProjectsAvailable": "Keine Projekte verfügbar", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "searchPlaceholder": "Nach Namen suchen", + "createClient": "Kunde anlegen", + "pinTooltip": "Zum Anheften an das Hauptmenü klicken", + "createClientDrawerTitle": "Kunde anlegen", + "updateClientDrawerTitle": "Kunde aktualisieren", + "nameLabel": "Name", + "namePlaceholder": "Name", + "nameRequiredError": "Bitte geben Sie einen Namen ein", + "createButton": "Anlegen", + "updateButton": "Aktualisieren", + "createClientSuccessMessage": "Kunde erfolgreich angelegt!", + "createClientErrorMessage": "Anlegen des Kunden fehlgeschlagen!", + "updateClientSuccessMessage": "Kunde erfolgreich aktualisiert!", + "updateClientErrorMessage": "Aktualisierung des Kunden fehlgeschlagen!" +} diff --git a/worklenz-backend/src/public/locales/de/settings/job-titles.json b/worklenz-backend/src/public/locales/de/settings/job-titles.json new file mode 100644 index 00000000..f4403ad1 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "Name", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "searchPlaceholder": "Nach Namen suchen", + "createJobTitleButton": "Jobtitel erstellen", + "pinTooltip": "Zum Anheften an das Hauptmenü klicken", + "createJobTitleDrawerTitle": "Jobtitel erstellen", + "updateJobTitleDrawerTitle": "Jobtitel aktualisieren", + "nameLabel": "Name", + "namePlaceholder": "Name", + "nameRequiredError": "Bitte geben Sie einen Namen ein", + "createButton": "Erstellen", + "updateButton": "Aktualisieren", + "createJobTitleSuccessMessage": "Jobtitel erfolgreich erstellt!", + "createJobTitleErrorMessage": "Erstellung des Jobtitels fehlgeschlagen!", + "updateJobTitleSuccessMessage": "Jobtitel erfolgreich aktualisiert!", + "updateJobTitleErrorMessage": "Aktualisierung des Jobtitels fehlgeschlagen!" +} diff --git a/worklenz-backend/src/public/locales/de/settings/labels.json b/worklenz-backend/src/public/locales/de/settings/labels.json new file mode 100644 index 00000000..18b6a021 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "Label", + "deleteConfirmationTitle": "Sind Sie sicher?", + "deleteConfirmationOk": "Ja", + "deleteConfirmationCancel": "Abbrechen", + "associatedTaskColumn": "Zugeordnete Aufgabenanzahl", + "searchPlaceholder": "Nach Name suchen", + "emptyText": "Labels können beim Aktualisieren oder Erstellen von Aufgaben erstellt werden.", + "pinTooltip": "Zum Anheften an das Hauptmenü klicken", + "colorChangeTooltip": "Zum Ändern der Farbe klicken" +} diff --git a/worklenz-backend/src/public/locales/de/settings/language.json b/worklenz-backend/src/public/locales/de/settings/language.json new file mode 100644 index 00000000..9e6bc27d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "Sprache", + "language_required": "Sprache ist erforderlich", + "time_zone": "Zeitzone", + "time_zone_required": "Zeitzone ist erforderlich", + "save_changes": "Änderungen speichern" +} diff --git a/worklenz-backend/src/public/locales/de/settings/notifications.json b/worklenz-backend/src/public/locales/de/settings/notifications.json new file mode 100644 index 00000000..272542a0 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/notifications.json @@ -0,0 +1,11 @@ +{ + "title": "Benachrichtigungseinstellungen", + "emailTitle": "E-Mail-Benachrichtigungen erhalten", + "emailDescription": "Dies beinhaltet neue Aufgaben-Zuweisungen", + "dailyDigestTitle": "Tägliche Übersicht erhalten", + "dailyDigestDescription": "Jeden Abend erhalten Sie eine Zusammenfassung der letzten Aktivitäten in Aufgaben.", + "popupTitle": "Popup-Benachrichtigungen auf meinem Computer anzeigen, wenn Worklenz geöffnet ist", + "popupDescription": "Popup-Benachrichtigungen können von Ihrem Browser blockiert werden. Ändern Sie Ihre Browser-Einstellungen, um diese zu erlauben.", + "unreadItemsTitle": "Anzahl ungelesener Elemente anzeigen", + "unreadItemsDescription": "Sie sehen Zähler für jede Benachrichtigung." +} diff --git a/worklenz-backend/src/public/locales/de/settings/profile.json b/worklenz-backend/src/public/locales/de/settings/profile.json new file mode 100644 index 00000000..4d7fc4cd --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "Sie können nur JPG/PNG-Dateien hochladen!", + "uploadSizeError": "Bilder müssen kleiner als 2MB sein!", + "upload": "Hochladen", + "nameLabel": "Name", + "nameRequiredError": "Name ist erforderlich", + "emailLabel": "E-Mail", + "emailRequiredError": "E-Mail ist erforderlich", + "saveChanges": "Änderungen speichern", + "profileJoinedText": "Vor einem Monat beigetreten", + "profileLastUpdatedText": "Vor einem Monat aktualisiert", + "avatarTooltip": "Klicken Sie zum Hochladen eines Avatars", + "title": "Profil-Einstellungen" +} diff --git a/worklenz-backend/src/public/locales/de/settings/project-templates.json b/worklenz-backend/src/public/locales/de/settings/project-templates.json new file mode 100644 index 00000000..6c6e23ca --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "Name", + "editToolTip": "Bearbeiten", + "deleteToolTip": "Löschen", + "confirmText": "Sind Sie sicher?", + "okText": "Ja", + "cancelText": "Abbrechen" +} diff --git a/worklenz-backend/src/public/locales/de/settings/sidebar.json b/worklenz-backend/src/public/locales/de/settings/sidebar.json new file mode 100644 index 00000000..d4d8754d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/sidebar.json @@ -0,0 +1,14 @@ +{ + "profile": "Profil", + "notifications": "Benachrichtigungen", + "clients": "Kunden", + "job-titles": "Jobbezeichnungen", + "labels": "Labels", + "categories": "Kategorien", + "project-templates": "Projektvorlagen", + "task-templates": "Aufgabenvorlagen", + "team-members": "Teammitglieder", + "teams": "Teams", + "change-password": "Passwort ändern", + "language-and-region": "Sprache und Region" +} diff --git a/worklenz-backend/src/public/locales/de/settings/task-templates.json b/worklenz-backend/src/public/locales/de/settings/task-templates.json new file mode 100644 index 00000000..ffe93318 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "Name", + "createdColumn": "Erstellt", + "editToolTip": "Bearbeiten", + "deleteToolTip": "Löschen", + "confirmText": "Sind Sie sicher?", + "okText": "Ja", + "cancelText": "Abbrechen" +} diff --git a/worklenz-backend/src/public/locales/de/settings/team-members.json b/worklenz-backend/src/public/locales/de/settings/team-members.json new file mode 100644 index 00000000..d223f08e --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "Teammitglieder", + "nameColumn": "Name", + "projectsColumn": "Projekte", + "emailColumn": "E-Mail", + "teamAccessColumn": "Team-Zugriff", + "memberCount": "Mitglied", + "membersCountPlural": "Mitglieder", + "searchPlaceholder": "Mitglieder nach Namen suchen", + "pinTooltip": "Mitgliederliste aktualisieren", + "addMemberButton": "Neues Mitglied hinzufügen", + "editTooltip": "Mitglied bearbeiten", + "deactivateTooltip": "Mitglied deaktivieren", + "activateTooltip": "Mitglied aktivieren", + "deleteTooltip": "Mitglied löschen", + "confirmDeleteTitle": "Sind Sie sicher, dass Sie dieses Mitglied löschen möchten?", + "confirmActivateTitle": "Sind Sie sicher, dass Sie den Status dieses Mitglieds ändern möchten?", + "okText": "Ja, fortfahren", + "cancelText": "Nein, abbrechen", + "deactivatedText": "(Aktuell deaktiviert)", + "pendingInvitationText": "(Einladung ausstehend)", + "addMemberDrawerTitle": "Neues Teammitglied hinzufügen", + "updateMemberDrawerTitle": "Teammitglied aktualisieren", + "addMemberEmailHint": "Mitglieder werden dem Team hinzugefügt, unabhängig vom Status der Einladungsannahme", + "memberEmailLabel": "E-Mail(s)", + "memberEmailPlaceholder": "E-Mail-Adresse des Teammitglieds eingeben", + "memberEmailRequiredError": "Bitte geben Sie eine gültige E-Mail-Adresse ein", + "jobTitleLabel": "Jobtitel", + "jobTitlePlaceholder": "Jobtitel auswählen oder suchen (optional)", + "memberAccessLabel": "Zugriffslevel", + "addToTeamButton": "Mitglied zum Team hinzufügen", + "updateButton": "Änderungen speichern", + "resendInvitationButton": "Einladungs-E-Mail erneut senden", + "invitationSentSuccessMessage": "Team-Einladung erfolgreich versendet!", + "createMemberSuccessMessage": "Neues Teammitglied erfolgreich hinzugefügt!", + "createMemberErrorMessage": "Hinzufügen des Teammitglieds fehlgeschlagen. Bitte versuchen Sie es erneut.", + "updateMemberSuccessMessage": "Teammitglied erfolgreich aktualisiert!", + "updateMemberErrorMessage": "Aktualisierung des Teammitglieds fehlgeschlagen. Bitte versuchen Sie es erneut.", + "memberText": "Mitglied", + "adminText": "Administrator", + "ownerText": "Team-Besitzer", + "addedText": "Hinzugefügt", + "updatedText": "Aktualisiert", + "noResultFound": "Geben Sie eine E-Mail-Adresse ein und drücken Sie Enter...", + "jobTitlesFetchError": "Fehler beim Abrufen der Jobtitel", + "invitationResent": "Einladung erfolgreich erneut gesendet!" +} diff --git a/worklenz-backend/src/public/locales/de/settings/teams.json b/worklenz-backend/src/public/locales/de/settings/teams.json new file mode 100644 index 00000000..bf39215d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "Teams", + "team": "Team", + "teams": "Teams", + "name": "Name", + "created": "Erstellt", + "ownsBy": "Gehört zu", + "edit": "Bearbeiten", + "editTeam": "Team bearbeiten", + "pinTooltip": "Klicken Sie hier, um dies im Hauptmenü zu fixieren", + "editTeamName": "Team-Name bearbeiten", + "updateName": "Name aktualisieren", + "namePlaceholder": "Name", + "nameRequired": "Bitte geben Sie einen Namen ein", + "updateFailed": "Änderung des Team-Namens fehlgeschlagen!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/de/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/de/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..aece79f0 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,29 @@ +{ + "details": { + "task-key": "Aufgabenschlüssel", + "phase": "Phase", + "assignees": "Zugewiesene", + "due-date": "Fälligkeitsdatum", + "time-estimation": "Zeitschätzung", + "priority": "Priorität", + "labels": "Labels", + "billable": "Abrechenbar", + "notify": "Benachrichtigen", + "when-done-notify": "Bei Fertigstellung benachrichtigen", + "start-date": "Startdatum", + "end-date": "Enddatum", + "hide-start-date": "Startdatum ausblenden", + "show-start-date": "Startdatum anzeigen", + "hours": "Stunden", + "minutes": "Minuten" + }, + "description": { + "title": "Beschreibung", + "placeholder": "Fügen Sie eine detailliertere Beschreibung hinzu..." + }, + "subTasks": { + "title": "Unteraufgaben", + "add-sub-task": "+ Unteraufgabe hinzufügen", + "refresh-sub-tasks": "Unteraufgaben aktualisieren" + } +} diff --git a/worklenz-backend/src/public/locales/de/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/de/task-drawer/task-drawer.json new file mode 100644 index 00000000..62e3f881 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "Geben Sie Ihre Aufgabe ein", + "deleteTask": "Aufgabe löschen" + }, + "taskInfoTab": { + "title": "Info", + "details": { + "title": "Details", + "task-key": "Aufgaben-Schlüssel", + "phase": "Phase", + "assignees": "Beauftragte", + "due-date": "Fälligkeitsdatum", + "time-estimation": "Zeitschätzung", + "priority": "Priorität", + "labels": "Labels", + "billable": "Abrechenbar", + "notify": "Benachrichtigen", + "when-done-notify": "Bei Abschluss benachrichtigen", + "start-date": "Startdatum", + "end-date": "Enddatum", + "hide-start-date": "Startdatum ausblenden", + "show-start-date": "Startdatum anzeigen", + "hours": "Stunden", + "minutes": "Minuten", + "progressValue": "Fortschrittswert", + "progressValueTooltip": "Fortschritt in Prozent einstellen (0-100%)", + "progressValueRequired": "Bitte geben Sie einen Fortschrittswert ein", + "progressValueRange": "Fortschritt muss zwischen 0 und 100 liegen", + "taskWeight": "Aufgabengewicht", + "taskWeightTooltip": "Gewicht dieser Teilaufgabe festlegen (Prozent)", + "taskWeightRequired": "Bitte geben Sie ein Aufgabengewicht ein", + "taskWeightRange": "Gewicht muss zwischen 0 und 100 liegen", + "recurring": "Wiederkehrend" + }, + "labels": { + "labelInputPlaceholder": "Suchen oder erstellen", + "labelsSelectorInputTip": "Enter drücken zum Erstellen" + }, + "description": { + "title": "Beschreibung", + "placeholder": "Detailliertere Beschreibung hinzufügen..." + }, + "subTasks": { + "title": "Teilaufgaben", + "addSubTask": "Teilaufgabe hinzufügen", + "addSubTaskInputPlaceholder": "Geben Sie Ihre Aufgabe ein und drücken Sie Enter", + "refreshSubTasks": "Teilaufgaben aktualisieren", + "edit": "Bearbeiten", + "delete": "Löschen", + "confirmDeleteSubTask": "Sind Sie sicher, dass Sie diese Teilaufgabe löschen möchten?", + "deleteSubTask": "Teilaufgabe löschen" + }, + "dependencies": { + "title": "Abhängigkeiten", + "addDependency": "+ Neue Abhängigkeit hinzufügen", + "blockedBy": "Blockiert von", + "searchTask": "Aufgabe suchen", + "noTasksFound": "Keine Aufgaben gefunden", + "confirmDeleteDependency": "Sind Sie sicher, dass Sie löschen möchten?" + }, + "attachments": { + "title": "Anhänge", + "chooseOrDropFileToUpload": "Datei zum Hochladen wählen oder ablegen", + "uploading": "Wird hochgeladen..." + }, + "comments": { + "title": "Kommentare", + "addComment": "+ Neuen Kommentar hinzufügen", + "noComments": "Noch keine Kommentare. Seien Sie der Erste!", + "delete": "Löschen", + "confirmDeleteComment": "Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?", + "addCommentPlaceholder": "Kommentar hinzufügen...", + "cancel": "Abbrechen", + "commentButton": "Kommentieren", + "attachFiles": "Dateien anhängen", + "addMoreFiles": "Weitere Dateien hinzufügen", + "selectedFiles": "Ausgewählte Dateien (Bis zu 25MB, Maximum {count})", + "maxFilesError": "Sie können maximal {count} Dateien hochladen", + "processFilesError": "Fehler beim Verarbeiten der Dateien", + "addCommentError": "Bitte fügen Sie einen Kommentar hinzu oder hängen Sie Dateien an", + "createdBy": "Erstellt {{time}} von {{user}}", + "updatedTime": "Aktualisiert {{time}}" + }, + "searchInputPlaceholder": "Nach Name suchen", + "pendingInvitation": "Ausstehende Einladung" + }, + "taskTimeLogTab": { + "title": "Zeiterfassung", + "addTimeLog": "Neuen Zeiteintrag hinzufügen", + "totalLogged": "Gesamt erfasst", + "exportToExcel": "Nach Excel exportieren", + "noTimeLogsFound": "Keine Zeiteinträge gefunden", + "timeLogForm": { + "date": "Datum", + "startTime": "Startzeit", + "endTime": "Endzeit", + "workDescription": "Arbeitsbeschreibung", + "descriptionPlaceholder": "Beschreibung hinzufügen", + "logTime": "Zeit erfassen", + "updateTime": "Zeit aktualisieren", + "cancel": "Abbrechen", + "selectDateError": "Bitte wählen Sie ein Datum", + "selectStartTimeError": "Bitte wählen Sie eine Startzeit", + "selectEndTimeError": "Bitte wählen Sie eine Endzeit", + "endTimeAfterStartError": "Endzeit muss nach der Startzeit liegen" + } + }, + "taskActivityLogTab": { + "title": "Aktivitätsprotokoll", + "add": "HINZUFÜGEN", + "remove": "ENTFERNEN", + "none": "Keine", + "weight": "Gewicht", + "createdTask": "hat die Aufgabe erstellt." + }, + "taskProgress": { + "markAsDoneTitle": "Aufgabe als erledigt markieren?", + "confirmMarkAsDone": "Ja, als erledigt markieren", + "cancelMarkAsDone": "Nein, aktuellen Status beibehalten", + "markAsDoneDescription": "Sie haben den Fortschritt auf 100% gesetzt. Möchten Sie den Aufgabenstatus auf \"Erledigt\" aktualisieren?" + } +} diff --git a/worklenz-backend/src/public/locales/de/task-list-filters.json b/worklenz-backend/src/public/locales/de/task-list-filters.json new file mode 100644 index 00000000..0854c34f --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-list-filters.json @@ -0,0 +1,85 @@ +{ + "searchButton": "Suchen", + "resetButton": "Zurücksetzen", + "searchInputPlaceholder": "Nach Namen suchen", + + "sortText": "Sortieren", + "statusText": "Status", + "phaseText": "Phase", + "memberText": "Mitglieder", + "assigneesText": "Zugewiesene", + "priorityText": "Priorität", + "labelsText": "Labels", + "membersText": "Mitglieder", + "groupByText": "Gruppieren nach", + "showArchivedText": "Archivierte anzeigen", + "showFieldsText": "Felder anzeigen", + "keyText": "Schlüssel", + "taskText": "Aufgabe", + "descriptionText": "Beschreibung", + "phasesText": "Phasen", + "listText": "Liste", + "progressText": "Fortschritt", + "timeTrackingText": "Zeiterfassung", + "timetrackingText": "Zeiterfassung", + "estimationText": "Schätzung", + "startDateText": "Startdatum", + "startdateText": "Startdatum", + "endDateText": "Enddatum", + "dueDateText": "Fälligkeitsdatum", + "duedateText": "Fälligkeitsdatum", + "completedDateText": "Abschlussdatum", + "completeddateText": "Abschlussdatum", + "createdDateText": "Erstellungsdatum", + "createddateText": "Erstellungsdatum", + "lastUpdatedText": "Zuletzt aktualisiert", + "lastupdatedText": "Zuletzt aktualisiert", + "reporterText": "Melder", + "dueTimeText": "Fällige Zeit", + "duetimeText": "Fällige Zeit", + + "lowText": "Niedrig", + "mediumText": "Mittel", + "highText": "Hoch", + + "createStatusButtonTooltip": "Status-Einstellungen", + "configPhaseButtonTooltip": "Phasen-Einstellungen", + "noLabelsFound": "Keine Labels gefunden", + + "addStatusButton": "Status hinzufügen", + "addPhaseButton": "Phase hinzufügen", + + "createStatus": "Status erstellen", + "name": "Name", + "category": "Kategorie", + "selectCategory": "Kategorie auswählen", + "pleaseEnterAName": "Bitte geben Sie einen Namen ein", + "pleaseSelectACategory": "Bitte wählen Sie eine Kategorie aus", + "create": "Erstellen", + + "searchTasks": "Aufgaben suchen...", + "searchPlaceholder": "Suchen...", + "fieldsText": "Felder", + "loadingFilters": "Filter werden geladen...", + "noOptionsFound": "Keine Optionen gefunden", + "filtersActive": "Filter aktiv", + "filterActive": "Filter aktiv", + "clearAll": "Alle löschen", + "clearing": "Wird gelöscht...", + "cancel": "Stornieren", + "search": "Suchen", + "groupedBy": "Gruppiert nach", + "manageStatuses": "Status verwalten", + "managePhases": "Phasen verwalten", + "dragToReorderStatuses": "Ziehen Sie Status, um sie neu zu ordnen. Jeder Status kann eine andere Kategorie haben.", + "enterNewStatusName": "Neuen Statusnamen eingeben...", + "addStatus": "Status hinzufügen", + "noStatusesFound": "Keine Status gefunden. Erstellen Sie Ihren ersten Status oben.", + "deleteStatus": "Status löschen", + "deleteStatusConfirm": "Sind Sie sicher, dass Sie diesen Status löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "rename": "Umbenennen", + "delete": "Löschen", + "enterStatusName": "Statusnamen eingeben", + "selectCategory": "Kategorie auswählen", + "close": "Schließen" +} diff --git a/worklenz-backend/src/public/locales/de/task-list-table.json b/worklenz-backend/src/public/locales/de/task-list-table.json new file mode 100644 index 00000000..9c2ff314 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-list-table.json @@ -0,0 +1,136 @@ +{ + "keyColumn": "Schlüssel", + "taskColumn": "Aufgabe", + "descriptionColumn": "Beschreibung", + "progressColumn": "Fortschritt", + "membersColumn": "Mitglieder", + "assigneesColumn": "Zugewiesene", + "labelsColumn": "Labels", + "phasesColumn": "Phasen", + "phaseColumn": "Phase", + "statusColumn": "Status", + "priorityColumn": "Priorität", + "timeTrackingColumn": "Zeiterfassung", + "timetrackingColumn": "Zeiterfassung", + "estimationColumn": "Schätzung", + "startDateColumn": "Startdatum", + "startdateColumn": "Startdatum", + "dueDateColumn": "Fälligkeitsdatum", + "duedateColumn": "Fälligkeitsdatum", + "completedDateColumn": "Abschlussdatum", + "completeddateColumn": "Abschlussdatum", + "createdDateColumn": "Erstellungsdatum", + "createddateColumn": "Erstellungsdatum", + "lastUpdatedColumn": "Zuletzt aktualisiert", + "lastupdatedColumn": "Zuletzt aktualisiert", + "reporterColumn": "Melder", + "dueTimeColumn": "Fällige Zeit", + "todoSelectorText": "Zu erledigen", + "doingSelectorText": "Tun", + "doneSelectorText": "Erledigt", + + "lowSelectorText": "Niedrig", + "mediumSelectorText": "Mittel", + "highSelectorText": "Hoch", + + "selectText": "Auswählen", + "labelsSelectorInputTip": "Enter drücken zum Erstellen!", + + "addTaskText": "Aufgabe hinzufügen", + "addSubTaskText": "+ Unteraufgabe hinzufügen", + "addTaskInputPlaceholder": "Aufgabe eingeben und Enter drücken", + "noTasksInGroup": "Keine Aufgaben in dieser Gruppe", + + "openButton": "Öffnen", + "okButton": "OK", + + "noLabelsFound": "Keine Labels gefunden", + "searchInputPlaceholder": "Suchen oder erstellen", + "assigneeSelectorInviteButton": "Neues Mitglied per E-Mail einladen", + "labelInputPlaceholder": "Suchen oder erstellen", + "searchLabelsPlaceholder": "Labels suchen...", + "createLabelButton": "\"{{name}}\" erstellen", + "manageLabelsPath": "Einstellungen → Labels", + + "pendingInvitation": "Einladung ausstehend", + + "contextMenu": { + "assignToMe": "Mir zuweisen", + "moveTo": "Verschieben nach", + "unarchive": "Dearchivieren", + "archive": "Archivieren", + "convertToSubTask": "In Unteraufgabe umwandeln", + "convertToTask": "In Aufgabe umwandeln", + "delete": "Löschen", + "searchByNameInputPlaceholder": "Nach Namen suchen" + }, + "setDueDate": "Fälligkeitsdatum festlegen", + "setStartDate": "Startdatum festlegen", + "clearDueDate": "Fälligkeitsdatum löschen", + "clearStartDate": "Startdatum löschen", + "dueDatePlaceholder": "Fälligkeitsdatum", + "startDatePlaceholder": "Startdatum", + + "emptyStates": { + "noTaskGroups": "Keine Aufgabengruppen gefunden", + "noTaskGroupsDescription": "Aufgaben werden hier angezeigt, wenn sie erstellt oder Filter angewendet werden.", + "errorPrefix": "Fehler:", + "dragTaskFallback": "Aufgabe" + }, + + "customColumns": { + "addCustomColumn": "Benutzerdefinierte Spalte hinzufügen", + "customColumnHeader": "Benutzerdefinierte Spalte", + "customColumnSettings": "Einstellungen für benutzerdefinierte Spalte", + "noCustomValue": "Kein Wert", + "peopleField": "Personenfeld", + "noDate": "Kein Datum", + "unsupportedField": "Nicht unterstützter Feldtyp", + + "modal": { + "addFieldTitle": "Feld hinzufügen", + "editFieldTitle": "Feld bearbeiten", + "fieldTitle": "Feldtitel", + "fieldTitleRequired": "Feldtitel ist erforderlich", + "columnTitlePlaceholder": "Spaltentitel", + "type": "Typ", + "deleteConfirmTitle": "Sind Sie sicher, dass Sie diese benutzerdefinierte Spalte löschen möchten?", + "deleteConfirmDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Alle mit dieser Spalte verbundenen Daten werden dauerhaft gelöscht.", + "deleteButton": "Löschen", + "cancelButton": "Abbrechen", + "createButton": "Erstellen", + "updateButton": "Aktualisieren", + "createSuccessMessage": "Benutzerdefinierte Spalte erfolgreich erstellt", + "updateSuccessMessage": "Benutzerdefinierte Spalte erfolgreich aktualisiert", + "deleteSuccessMessage": "Benutzerdefinierte Spalte erfolgreich gelöscht", + "deleteErrorMessage": "Fehler beim Löschen der benutzerdefinierten Spalte", + "createErrorMessage": "Fehler beim Erstellen der benutzerdefinierten Spalte", + "updateErrorMessage": "Fehler beim Aktualisieren der benutzerdefinierten Spalte" + }, + + "fieldTypes": { + "people": "Personen", + "number": "Zahl", + "date": "Datum", + "selection": "Auswahl", + "checkbox": "Kontrollkästchen", + "labels": "Etiketten", + "key": "Schlüssel", + "formula": "Formel" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} Unteraufgabe", + "subtasks_plural": "{{count}} Unteraufgaben", + "comments": "{{count}} Kommentar", + "comments_plural": "{{count}} Kommentare", + "attachments": "{{count}} Anhang", + "attachments_plural": "{{count}} Anhänge", + "subscribers": "Aufgabe hat Abonnenten", + "dependencies": "Aufgabe hat Abhängigkeiten", + "recurring": "Wiederkehrende Aufgabe" + } + } +} diff --git a/worklenz-backend/src/public/locales/de/task-management.json b/worklenz-backend/src/public/locales/de/task-management.json new file mode 100644 index 00000000..b20d94a4 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-management.json @@ -0,0 +1,21 @@ +{ + "noTasksInGroup": "Keine Aufgaben in dieser Gruppe", + "noTasksInGroupDescription": "Fügen Sie eine Aufgabe hinzu, um zu beginnen", + "addFirstTask": "Fügen Sie Ihre erste Aufgabe hinzu", + "openTask": "Öffnen", + "subtask": "Unteraufgabe", + "subtasks": "Unteraufgaben", + "comment": "Kommentar", + "comments": "Kommentare", + "attachment": "Anhang", + "attachments": "Anhänge", + "enterSubtaskName": "Unteraufgabenname eingeben...", + "add": "Hinzufügen", + "cancel": "Abbrechen", + "renameGroup": "Gruppe umbenennen", + "renameStatus": "Status umbenennen", + "renamePhase": "Phase umbenennen", + "changeCategory": "Kategorie ändern", + "clickToEditGroupName": "Klicken Sie, um den Gruppennamen zu bearbeiten", + "enterGroupName": "Gruppennamen eingeben" +} diff --git a/worklenz-backend/src/public/locales/de/task-template-drawer.json b/worklenz-backend/src/public/locales/de/task-template-drawer.json new file mode 100644 index 00000000..21dbe369 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/task-template-drawer.json @@ -0,0 +1,11 @@ +{ + "createTaskTemplate": "Aufgabenvorlage erstellen", + "editTaskTemplate": "Aufgabenvorlage bearbeiten", + "cancelText": "Abbrechen", + "saveText": "Speichern", + "templateNameText": "Vorlagenname", + "selectedTasks": "Ausgewählte Aufgaben", + "removeTask": "Entfernen", + "cancelButton": "Abbrechen", + "saveButton": "Speichern" +} diff --git a/worklenz-backend/src/public/locales/de/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/de/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..e8b039f2 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/tasks/task-table-bulk-actions.json @@ -0,0 +1,41 @@ +{ + "taskSelected": "Aufgabe ausgewählt", + "tasksSelected": "Aufgaben ausgewählt", + "changeStatus": "Status/Priorität/Phase ändern", + "changeLabel": "Label ändern", + "assignToMe": "Mir zuweisen", + "changeAssignees": "Zuständige ändern", + "archive": "Archivieren", + "unarchive": "Dearchivieren", + "delete": "Löschen", + "moreOptions": "Weitere Optionen", + "deselectAll": "Alle abwählen", + "status": "Status", + "priority": "Priorität", + "phase": "Phase", + "member": "Mitglied", + "createTaskTemplate": "Aufgabenvorlage erstellen", + "apply": "Anwenden", + "createLabel": "+ Label erstellen", + "searchOrCreateLabel": "Label suchen oder erstellen...", + "hitEnterToCreate": "Enter drücken zum Erstellen", + "labelExists": "Label existiert bereits", + "pendingInvitation": "Einladung ausstehend", + "noMatchingLabels": "Keine passenden Labels", + "noLabels": "Keine Labels", + "CHANGE_STATUS": "Status ändern", + "CHANGE_PRIORITY": "Priorität ändern", + "CHANGE_PHASE": "Phase ändern", + "ADD_LABELS": "Labels hinzufügen", + "ASSIGN_TO_ME": "Mir zuweisen", + "ASSIGN_MEMBERS": "Mitglieder zuweisen", + "ARCHIVE": "Archivieren", + "DELETE": "Löschen", + "CANCEL": "Abbrechen", + "CLEAR_SELECTION": "Auswahl löschen", + "TASKS_SELECTED": "{{count}} Aufgabe ausgewählt", + "TASKS_SELECTED_plural": "{{count}} Aufgaben ausgewählt", + "DELETE_TASKS_CONFIRM": "{{count}} Aufgabe löschen?", + "DELETE_TASKS_CONFIRM_plural": "{{count}} Aufgaben löschen?", + "DELETE_TASKS_WARNING": "Diese Aktion kann nicht rückgängig gemacht werden." +} diff --git a/worklenz-backend/src/public/locales/de/template-drawer.json b/worklenz-backend/src/public/locales/de/template-drawer.json new file mode 100644 index 00000000..8655504d --- /dev/null +++ b/worklenz-backend/src/public/locales/de/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "Aufgabenvorlage bearbeiten", + "cancelText": "Abbrechen", + "saveText": "Speichern", + "templateNameText": "Vorlagenname", + "selectedTasks": "Ausgewählte Aufgaben", + "removeTask": "Entfernen", + "description": "Beschreibung", + "phase": "Phase", + "statuses": "Status", + "priorities": "Prioritäten", + "labels": "Labels", + "tasks": "Aufgaben", + "noTemplateSelected": "Keine Vorlage ausgewählt", + "noDescription": "Keine Beschreibung", + "worklenzTemplates": "Worklenz-Vorlagen", + "yourTemplatesLibrary": "Ihre Bibliothek", + "searchTemplates": "Vorlagen durchsuchen" +} diff --git a/worklenz-backend/src/public/locales/de/templateDrawer.json b/worklenz-backend/src/public/locales/de/templateDrawer.json new file mode 100644 index 00000000..571ed15f --- /dev/null +++ b/worklenz-backend/src/public/locales/de/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "Fehlerverfolgung", + "construction": "Bauwesen", + "designCreative": "Design & Kreatives", + "education": "Bildung", + "finance": "Finanzen", + "hrRecruiting": "Personalwesen & Recruiting", + "informationTechnology": "Informationstechnologie", + "legal": "Rechtliches", + "manufacturing": "Produktion", + "marketing": "Marketing", + "nonprofit": "Gemeinnützig", + "personalUse": "Persönliche Nutzung", + "salesCRM": "Vertrieb & CRM", + "serviceConsulting": "Dienstleistungen & Beratung", + "softwareDevelopment": "Softwareentwicklung", + "description": "Beschreibung", + "phase": "Phase", + "statuses": "Status", + "priorities": "Prioritäten", + "labels": "Labels", + "tasks": "Aufgaben" +} diff --git a/worklenz-backend/src/public/locales/de/time-report.json b/worklenz-backend/src/public/locales/de/time-report.json new file mode 100644 index 00000000..efadbb8a --- /dev/null +++ b/worklenz-backend/src/public/locales/de/time-report.json @@ -0,0 +1,44 @@ +{ + "includeArchivedProjects": "Archivierte Projekte einschließen", + "export": "Exportieren", + "timeSheet": "Stundenzettel", + + "searchByName": "Nach Namen suchen", + "selectAll": "Alle auswählen", + "teams": "Teams", + + "searchByProject": "Nach Projektnamen suchen", + "projects": "Projekte", + + "searchByCategory": "Nach Kategorienamen suchen", + "categories": "Kategorien", + + "billable": "Abrechenbar", + "nonBillable": "Nicht abrechenbar", + + "total": "Gesamt", + + "projectsTimeSheet": "Projekt-Zeiterfassung", + + "loggedTime": "Erfasste Zeit (Stunden)", + + "exportToExcel": "Nach Excel exportieren", + "logged": "erfasst", + "for": "für", + + "membersTimeSheet": "Mitglieder-Zeiterfassung", + "member": "Mitglied", + + "estimatedVsActual": "Geschätzt vs. Tatsächlich", + "workingDays": "Arbeitstage", + "manDays": "Manntage", + "days": "Tage", + "estimatedDays": "Geschätzt Tage", + "actualDays": "Tatsächliche Tage", + + "noCategories": "Keine Kategorien gefunden", + "noCategory": "Keine Kategorie", + "noProjects": "Keine Projekte gefunden", + "noTeams": "Keine Teams gefunden", + "noData": "Keine Daten gefunden" +} diff --git a/worklenz-backend/src/public/locales/de/unauthorized.json b/worklenz-backend/src/public/locales/de/unauthorized.json new file mode 100644 index 00000000..4384ad80 --- /dev/null +++ b/worklenz-backend/src/public/locales/de/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "Unbefugt!", + "subtitle": "Sie sind nicht berechtigt, auf diese Seite zuzugreifen", + "button": "Zur Startseite" +} diff --git a/worklenz-backend/src/public/locales/en/404-page.json b/worklenz-backend/src/public/locales/en/404-page.json new file mode 100644 index 00000000..a93627f1 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "Sorry, the page you visited does not exist.", + "backHomeButton": "Back Home" +} diff --git a/worklenz-backend/src/public/locales/en/account-setup.json b/worklenz-backend/src/public/locales/en/account-setup.json new file mode 100644 index 00000000..5e71ca40 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/account-setup.json @@ -0,0 +1,31 @@ +{ + "continue": "Continue", + + "setupYourAccount": "Setup Your Worklenz Account.", + "organizationStepTitle": "Name Your Organization", + "organizationStepLabel": "Pick a name for your Worklenz account.", + + "projectStepTitle": "Create your first project", + "projectStepLabel": "What project are you working on right now?", + "projectStepPlaceholder": "e.g. Marketing Plan", + + "tasksStepTitle": "Create your first tasks", + "tasksStepLabel": "Type a few tasks that you are going to do in", + "tasksStepAddAnother": "Add another", + + "emailPlaceholder": "Email address", + "invalidEmail": "Please enter a valid email address", + "or": "or", + "templateButton": "Import from template", + "goBack": "Go Back", + "cancel": "Cancel", + "create": "Create", + "templateDrawerTitle": "Select from templates", + "step3InputLabel": "Invite with email", + "addAnother": "Add another", + "skipForNow": "Skip for now", + "formTitle": "Create your first task.", + "step3Title": "Invite your team to work with", + "maxMembers": " (You can invite up to 5 members)", + "maxTasks": " (You can create up to 5 tasks)" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/current-bill.json b/worklenz-backend/src/public/locales/en/admin-center/current-bill.json new file mode 100644 index 00000000..fe840789 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/current-bill.json @@ -0,0 +1,121 @@ +{ + "title": "Billings", + "currentBill": "Current Bill", + "configuration": "Configuration", + "currentPlanDetails": "Current Plan Details", + "upgradePlan": "Upgrade Plan", + "cardBodyText01": "Free trial", + "cardBodyText02": "(Your trial plan expires in 1 month 19 days)", + "redeemCode": "Redeem Code", + "accountStorage": "Account Storage", + "used": "Used:", + "remaining": "Remaining:", + "charges": "Charges", + "tooltip": "Charges for the current billing cycle", + "description": "Description", + "billingPeriod": "Billing Period", + "billStatus": "Bill Status", + "perUserValue": "Per User Value", + "users": "Users", + + "amount": "Amount", + "invoices": "Invoices", + "transactionId": "Transaction ID", + "transactionDate": "Transaction Date", + "paymentMethod": "Payment Method", + "status": "Status", + "ltdUsers": "You can add up to {{ltd_users}} users.", + + "totalSeats": "Total seats", + "availableSeats": "Available seats", + "addMoreSeats": "Add more seats", + + "drawerTitle": "Redeem Code", + "label": "Redeem Code", + "drawerPlaceholder": "Enter your redeem code", + "redeemSubmit": "Submit", + + "modalTitle": "Select the best plan for your team", + "seatLabel": "No of seats", + "freePlan": "Free Plan", + "startup": "Startup", + "business": "Business", + "tag": "Most Popular", + "enterprise": "Enterprise", + + "freeSubtitle": "free forever", + "freeUsers": "Best for personal use", + "freeText01": "100MB storage", + "freeText02": "3 projects", + "freeText03": "5 team members", + + "startupSubtitle": "FLAT RATE / month", + "startupUsers": "Upto 15 users", + "startupText01": "25GB storage", + "startupText02": "Unlimited active projects", + "startupText03": "Schedule", + "startupText04": "Reporting", + "startupText05": "Subscribe to projects", + + "businessSubtitle": "user / month", + "businessUsers": "16 - 200 users", + + "enterpriseUsers": "200 - 500+ users", + + "footerTitle": "Please provide us with a contact number we can use to reach you.", + "footerLabel": "Contact Number", + "footerButton": "Contact us", + + "redeemCodePlaceHolder": "Enter your redeem code", + "submit": "Submit", + + "trialPlan": "Free Trial", + "trialExpireDate": "Valid until {{trial_expire_date}}", + "trialExpired": "Your free trial expired {{trial_expire_string}}", + "trialInProgress": "Your free trial expires {{trial_expire_string}}", + + "required": "This field is required", + "invalidCode": "Invalid code", + + "selectPlan": "Select the best plan for your team", + "changeSubscriptionPlan": "Change your subscription plan", + "noOfSeats": "Number of seats", + "annualPlan": "Pro - Annual", + "monthlyPlan": "Pro - Monthly", + "freeForever": "Free Forever", + "bestForPersonalUse": "Best for personal use", + "storage": "Storage", + "projects": "Projects", + "teamMembers": "Team Members", + "unlimitedTeamMembers": "Unlimited Team Members", + "unlimitedActiveProjects": "Unlimited active projects", + "schedule": "Schedule", + "reporting": "Reporting", + "subscribeToProjects": "Subscribe to projects", + "billedAnnually": "Billed Annually", + "billedMonthly": "Billed Monthly", + + "pausePlan": "Pause Plan", + "resumePlan": "Resume Plan", + "changePlan": "Change Plan", + "cancelPlan": "Cancel Plan", + + "perMonthPerUser": "per user/month", + "viewInvoice": "View Invoice", + "switchToFreePlan": "Switch to Free Plan", + + "expirestoday": "today", + "expirestomorrow": "tomorrow", + "expiredDaysAgo": "{{days}} days ago", + + "continueWith": "Continue with {{plan}}", + "changeToPlan": "Change to {{plan}}", + "creditPlan": "Credit Plan", + "customPlan": "Custom Plan", + "planValidTill": "Your plan is valid till {{date}}", + "purchaseSeatsText": "To continue, you'll need to purchase additional seats.", + "currentSeatsText": "You currently have {{seats}} seats available.", + "selectSeatsText": "Please select the number of additional seats to purchase.", + "purchase": "Purchase", + "contactSales": "Contact sales" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/overview.json b/worklenz-backend/src/public/locales/en/admin-center/overview.json new file mode 100644 index 00000000..efc42855 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "Overview", + "name": "Organization Name", + "owner": "Organization Owner", + "admins": "Organization Admins", + "contactNumber": "Add Contact Number", + "edit": "Edit" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/projects.json b/worklenz-backend/src/public/locales/en/admin-center/projects.json new file mode 100644 index 00000000..4e491d73 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "Members Count", + "createdAt": "Created at", + "projectName": "Project Name", + "teamName": "Team Name", + "refreshProjects": "Refresh projects", + "searchPlaceholder": "Search by project name", + "deleteProject": "Are you sure you want to delete this project?", + "confirm": "Confirm", + "cancel": "Cancel", + "delete": "Delete Project" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/sidebar.json b/worklenz-backend/src/public/locales/en/admin-center/sidebar.json new file mode 100644 index 00000000..3b03d499 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Overview", + "users": "Users", + "teams": "Teams", + "billing": "Billing", + "projects": "Projects", + "adminCenter": "Admin Center" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/teams.json b/worklenz-backend/src/public/locales/en/admin-center/teams.json new file mode 100644 index 00000000..bf829a87 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/teams.json @@ -0,0 +1,35 @@ +{ + "title": "Teams", + "subtitle": "teams", + "tooltip": "Refresh teams", + "placeholder": "Search by name", + "addTeam": "Add Team", + "team": "Team", + "membersCount": "Members Count", + "members": "Members", + "drawerTitle": "Create New Team", + "label": "Team Name", + "drawerPlaceholder": "Name", + "create": "Create", + "delete": "Delete", + "settings": "Settings", + "popTitle": "Are you sure?", + "message": "Please enter a Name", + "teamSettings": "Team Settings", + "teamName": "Team Name", + "teamDescription": "Team Description", + "teamMembers": "Team Members", + "teamMembersCount": "Team Members Count", + "teamMembersPlaceholder": "Search by name", + "addMember": "Add Member", + "add": "Add", + "update": "Update", + "teamNamePlaceholder": "Name of the team", + "user": "User", + "role": "Role", + "owner": "Owner", + "admin": "Admin", + "member": "Member", + "cannotChangeOwnerRole": "Owner role cannot be changed", + "pendingInvitation": "Pending invitation" +} diff --git a/worklenz-backend/src/public/locales/en/admin-center/users.json b/worklenz-backend/src/public/locales/en/admin-center/users.json new file mode 100644 index 00000000..7e462ef6 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "Users", + "subTitle": "users", + "placeholder": "Search by name", + "user": "User", + "email": "Email", + "lastActivity": "Last Activity", + "refresh": "Refresh users" +} diff --git a/worklenz-backend/src/public/locales/en/all-project-list.json b/worklenz-backend/src/public/locales/en/all-project-list.json new file mode 100644 index 00000000..ab98cb6b --- /dev/null +++ b/worklenz-backend/src/public/locales/en/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "Name", + "client": "Client", + "category": "Category", + "status": "Status", + "tasksProgress": "Tasks Progress", + "updated_at": "Last Updated", + "members": "Members", + "setting": "Settings", + "projects": "Projects", + "refreshProjects": "Refresh projects", + "all": "All", + "favorites": "Favorites", + "archived": "Archived", + "placeholder": "Search by name", + "archive": "Archive", + "unarchive": "Unarchive", + "archiveConfirm": "Are you sure you want to archive this project?", + "unarchiveConfirm": "Are you sure you want to unarchive this project?", + "yes": "Yes", + "no": "No", + "clickToFilter": "Click to filter by", + "noProjects": "No projects found", + "addToFavourites": "Add to favourites", + "list": "List", + "group": "Group", + "listView": "List View", + "groupView": "Group View", + "groupBy": { + "category": "Category", + "client": "Client" + }, + "noPermission": "You don't have permission to perform this action" +} diff --git a/worklenz-backend/src/public/locales/en/auth/auth-common.json b/worklenz-backend/src/public/locales/en/auth/auth-common.json new file mode 100644 index 00000000..94803a12 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "Logging out...", + "authenticating": "Authenticating...", + "gettingThingsReady": "Getting things ready for you..." +} diff --git a/worklenz-backend/src/public/locales/en/auth/forgot-password.json b/worklenz-backend/src/public/locales/en/auth/forgot-password.json new file mode 100644 index 00000000..3534c388 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "Reset your password", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "emailRequired": "Please enter your Email!", + "resetPasswordButton": "Reset Password", + "returnToLoginButton": "Return to Login", + "passwordResetSuccessMessage": "A password reset link has been sent to your email.", + "orText": "OR", + "successTitle": "Reset instruction sent!", + "successMessage": "Reset information has been sent to your email. Please check your email." +} diff --git a/worklenz-backend/src/public/locales/en/auth/login.json b/worklenz-backend/src/public/locales/en/auth/login.json new file mode 100644 index 00000000..b77e7fba --- /dev/null +++ b/worklenz-backend/src/public/locales/en/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "Login to your account", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "emailRequired": "Please enter your Email!", + "passwordLabel": "Password", + "passwordPlaceholder": "Enter your password", + "passwordRequired": "Please enter your Password!", + "rememberMe": "Remember me", + "loginButton": "Log in", + "signupButton": "Sign up", + "forgotPasswordButton": "Forgot password?", + "signInWithGoogleButton": "Sign in with Google", + "dontHaveAccountText": "Don’t have an account?", + "orText": "OR", + "successMessage": "You have successfully logged in!", + "loginError": "Login failed", + "googleLoginError": "Google login failed", + "validationMessages": { + "email": "Please enter a valid email address", + "password": "Password must be at least 8 characters long" + }, + "errorMessages": { + "loginErrorTitle": "Login failed", + "loginErrorMessage": "Please check your email and password and try again" + } +} diff --git a/worklenz-backend/src/public/locales/en/auth/signup.json b/worklenz-backend/src/public/locales/en/auth/signup.json new file mode 100644 index 00000000..af4611ba --- /dev/null +++ b/worklenz-backend/src/public/locales/en/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "Sign up to get started", + "nameLabel": "Full Name", + "namePlaceholder": "Enter your full name", + "nameRequired": "Please enter your full name!", + "nameMinCharacterRequired": "Full name must be at least 4 characters!", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "emailRequired": "Please enter your Email!", + "passwordLabel": "Password", + "passwordPlaceholder": "Enter your password", + "passwordRequired": "Please enter your Password!", + "passwordMinCharacterRequired": "Password must be at least 8 characters!", + "passwordPatternRequired": "Password does not meet the requirements!", + "strongPasswordPlaceholder": "Enter a stronger password", + "passwordValidationAltText": "Password must include at least 8 characters with upper and lower case letters, a number, and a symbol.", + "signupSuccessMessage": "You have successfully signed up!", + "privacyPolicyLink": "Privacy Policy", + "termsOfUseLink": "Terms of Use", + "bySigningUpText": "By signing up, you agree to our", + "andText": "and", + "signupButton": "Sign up", + "signInWithGoogleButton": "Sign in with Google", + "alreadyHaveAccountText": "Already have an account?", + "loginButton": "Login", + "orText": "OR", + "reCAPTCHAVerificationError": "reCAPTCHA Verification Error", + "reCAPTCHAVerificationErrorMessage": "We were unable to verify your reCAPTCHA. Please try again." +} diff --git a/worklenz-backend/src/public/locales/en/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/en/auth/verify-reset-email.json new file mode 100644 index 00000000..e685e193 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "Verify Reset Email", + "description": "Enter your new password", + "placeholder": "Enter your new password", + "confirmPasswordPlaceholder": "Confirm your new password", + "passwordHint": "Minimum of 8 characters, with upper and lowercase and a number and a symbol.", + "resetPasswordButton": "Reset password", + "orText": "Or", + "resendResetEmail": "Resend reset email", + "passwordRequired": "Please enter your new password", + "returnToLoginButton": "Return to Login", + "confirmPasswordRequired": "Please confirm your new password", + "passwordMismatch": "The two passwords do not match" +} diff --git a/worklenz-backend/src/public/locales/en/common.json b/worklenz-backend/src/public/locales/en/common.json new file mode 100644 index 00000000..815560be --- /dev/null +++ b/worklenz-backend/src/public/locales/en/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "Login successful!", + "login-failed": "Login failed. Please check your credentials and try again.", + "signup-success": "Signup successful! Welcome aboard.", + "signup-failed": "Signup failed. Please ensure all required fields are filled and try again.", + "reconnecting": "Disconnected from server.", + "connection-lost": "Failed to connect to server. Please check your internet connection.", + "connection-restored": "Connected to server successfully" +} diff --git a/worklenz-backend/src/public/locales/en/create-first-project-form.json b/worklenz-backend/src/public/locales/en/create-first-project-form.json new file mode 100644 index 00000000..337f4a10 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "Create your first project", + "inputLabel": "What project are you working on right now?", + "or": "or", + "templateButton": "Import from template", + "createFromTemplate": "Create from template", + "goBack": "Go Back", + "continue": "Continue", + "cancel": "Cancel", + "create": "Create", + "templateDrawerTitle": "Select from templates", + "createProject": "Create Project" +} diff --git a/worklenz-backend/src/public/locales/en/create-first-tasks.json b/worklenz-backend/src/public/locales/en/create-first-tasks.json new file mode 100644 index 00000000..1447f355 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "Create your first task.", + "inputLable": "Type a few tasks that you are going to do in", + "addAnother": "Add another", + "goBack": "Go back", + "continue": "Continue" +} diff --git a/worklenz-backend/src/public/locales/en/home.json b/worklenz-backend/src/public/locales/en/home.json new file mode 100644 index 00000000..ccf40936 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/home.json @@ -0,0 +1,46 @@ +{ + "todoList": { + "title": "To do list", + "refreshTasks": "Refresh tasks", + "addTask": "+ Add Task", + "noTasks": "No tasks", + "pressEnter": "Press", + "toCreate": "to create.", + "markAsDone": "Mark as done" + }, + "projects": { + "title": "Projects", + "refreshProjects": "Refresh projects", + "noRecentProjects": "You are currently not assigned to any project.", + "noFavouriteProjects": "No projects have been marked as favorites.", + "recent": "Recent", + "favourites": "Favourites" + }, + "tasks": { + "assignedToMe": "Assigned to me", + "assignedByMe": "Assigned by me", + "all": "All", + "today": "Today", + "upcoming": "Upcoming", + "overdue": "Overdue", + "noDueDate": "No due date", + "noTasks": "No tasks to show.", + "addTask": "+ Add task", + "name": "Name", + "project": "Project", + "status": "Status", + "dueDate": "Due Date", + "dueDatePlaceholder": "Set Due Date", + "tomorrow": "Tomorrow", + "nextWeek": "Next Week", + "nextMonth": "Next Month", + "projectRequired": "Please select a project", + "pressTabToSelectDueDateAndProject": "Press Tab to select a due date and a project", + "dueOn": "Tasks due on", + "taskRequired": "Please add a task", + "list": "List", + "calendar": "Calendar", + "tasks": "Tasks", + "refresh": "Refresh" + } +} diff --git a/worklenz-backend/src/public/locales/en/invite-initial-team-members.json b/worklenz-backend/src/public/locales/en/invite-initial-team-members.json new file mode 100644 index 00000000..09f23e87 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "Invite your team to work with", + "inputLable": "Invite with email", + "addAnother": "Add another", + "goBack": "Go back", + "continue": "Continue", + "skipForNow": "Skip for now" +} diff --git a/worklenz-backend/src/public/locales/en/kanban-board.json b/worklenz-backend/src/public/locales/en/kanban-board.json new file mode 100644 index 00000000..e295a6c6 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/kanban-board.json @@ -0,0 +1,33 @@ +{ + "rename": "Rename", + "delete": "Delete", + "addTask": "Add Task", + "addSectionButton": "Add Section", + "changeCategory": "Change category", + + "deleteTooltip": "Delete", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + + "dueDate": "Due date", + "cancel": "Cancel", + + "today": "Today", + "tomorrow": "Tomorrow", + "assignToMe": "Assign to me", + "archive": "Archive", + + "newTaskNamePlaceholder": "Write a task Name", + "newSubtaskNamePlaceholder": "Write a subtask Name", + "untitledSection": "Untitled section", + "unmapped": "Unmapped", + "clickToChangeDate": "Click to change date", + "noDueDate": "No due date", + "save": "Save", + "clear": "Clear", + "nextWeek": "Next week", + "noSubtasks": "No subtasks", + "showSubtasks": "Show subtasks", + "hideSubtasks": "Hide subtasks" +} diff --git a/worklenz-backend/src/public/locales/en/license-expired.json b/worklenz-backend/src/public/locales/en/license-expired.json new file mode 100644 index 00000000..e4556064 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "Your Worklenz trial has expired!", + "subtitle": "Please upgrade now.", + "button": "Upgrade now", + "checking": "Checking subscription status..." +} diff --git a/worklenz-backend/src/public/locales/en/navbar.json b/worklenz-backend/src/public/locales/en/navbar.json new file mode 100644 index 00000000..e7e22cb3 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Worklenz Logo", + "home": "Home", + "projects": "Projects", + "schedule": "Schedule", + "reporting": "Reporting", + "clients": "Clients", + "teams": "Teams", + "labels": "Labels", + "jobTitles": "Job Titles", + "upgradePlan": "Upgrade Plan", + "upgradePlanTooltip": "Upgrade Plan", + "invite": "Invite", + "inviteTooltip": "Invite team members to join", + "switchTeamTooltip": "Switch team", + "help": "Help", + "notificationTooltip": "View notifications", + "profileTooltip": "View profile", + "adminCenter": "Admin Center", + "settings": "Settings", + "logOut": "Log Out", + "notificationsDrawer": { + "read": "Read notifications", + "unread": "Unread notifications", + "markAsRead": "Mark as read", + "readAndJoin": "Read & Join", + "accept": "Accept", + "acceptAndJoin": "Accept & Join", + "noNotifications": "No notifications" + } +} diff --git a/worklenz-backend/src/public/locales/en/organization-name-form.json b/worklenz-backend/src/public/locales/en/organization-name-form.json new file mode 100644 index 00000000..26ffa973 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "Name your organization.", + "worklenzAccountTitle": "Pick a name for your Worklenz account.", + "continue": "Continue" +} diff --git a/worklenz-backend/src/public/locales/en/phases-drawer.json b/worklenz-backend/src/public/locales/en/phases-drawer.json new file mode 100644 index 00000000..10ad78a4 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "Configure Phases", + "phaseLabel": "Phase Label", + "enterPhaseName": "Enter a name for phase label", + "addOption": "Add Option", + "phaseOptions": "Phase Options:", + "dragToReorderPhases": "Drag phases to reorder them. Each phase can have a different color.", + "enterNewPhaseName": "Enter new phase name...", + "addPhase": "Add Phase", + "noPhasesFound": "No phases found. Create your first phase above.", + "deletePhase": "Delete Phase", + "deletePhaseConfirm": "Are you sure you want to delete this phase? This action cannot be undone.", + "rename": "Rename", + "delete": "Delete", + "enterPhaseName": "Enter phase name", + "selectColor": "Select color", + "managePhases": "Manage Phases", + "close": "Close" +} diff --git a/worklenz-backend/src/public/locales/en/project-drawer.json b/worklenz-backend/src/public/locales/en/project-drawer.json new file mode 100644 index 00000000..be553a01 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-drawer.json @@ -0,0 +1,52 @@ +{ + "createProject": "Create Project", + "editProject": "Edit Project", + "enterCategoryName": "Enter a name for the category", + "hitEnterToCreate": "Hit enter to create!", + "enterNotes": "Notes", + "youCanManageClientsUnderSettings": "You can manage clients under Settings", + "addCategory": "Add a category to the project", + "newCategory": "New Category", + "notes": "Notes", + "startDate": "Start Date", + "endDate": "End Date", + "estimateWorkingDays": "Estimate working days", + "estimateManDays": "Estimate man days", + "hoursPerDay": "Hours per day", + "create": "Create", + "update": "Update", + "delete": "Delete", + "typeToSearchClients": "Type to search clients", + "projectColor": "Project Color", + "pleaseEnterAName": "Please enter a name", + "enterProjectName": "Enter project name", + "name": "Name", + "status": "Status", + "health": "Health", + "category": "Category", + "projectManager": "Project Manager", + "client": "Client", + "deleteConfirmation": "Are you sure you want to delete?", + "deleteConfirmationDescription": "This will remove all associated data and cannot be undone.", + "yes": "Yes", + "no": "No", + "createdAt": "Created", + "updatedAt": "Updated", + "by": "by", + "add": "Add", + "asClient": "as client", + "createClient": "Create client", + "searchInputPlaceholder": "Search by name or email", + "hoursPerDayValidationMessage": "Hours per day must be a number between 1 and 24", + "workingDaysValidationMessage": "Working days must be a positive number", + "manDaysValidationMessage": "Man days must be a positive number", + "noPermission": "No permission", + "progressSettings": "Progress Settings", + "manualProgress": "Manual Progress", + "manualProgressTooltip": "Allow manual progress updates for tasks without subtasks", + "weightedProgress": "Weighted Progress", + "weightedProgressTooltip": "Calculate progress based on subtask weights", + "timeProgress": "Time-based Progress", + "timeProgressTooltip": "Calculate progress based on estimated time", + "enterProjectKey": "Enter project key" +} diff --git a/worklenz-backend/src/public/locales/en/project-view-files.json b/worklenz-backend/src/public/locales/en/project-view-files.json new file mode 100644 index 00000000..12672620 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "Name", + "attachedTaskColumn": "Attached Task", + "sizeColumn": "Size", + "uploadedByColumn": "Uploaded By", + "uploadedAtColumn": "Uploaded At", + "fileIconAlt": "File icon", + "titleDescriptionText": "All attachments to tasks in this project will appear here.", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "segmentedTooltip": "Coming soon! Switch between list view and thumbnail view.", + "emptyText": "There are no attachments in the project." +} diff --git a/worklenz-backend/src/public/locales/en/project-view-insights.json b/worklenz-backend/src/public/locales/en/project-view-insights.json new file mode 100644 index 00000000..1b174a85 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "Overview", + "statusOverview": "Status Overview", + "priorityOverview": "Priority Overview", + "lastUpdatedTasks": "Last Updated Tasks" + }, + "members": { + "title": "Members", + "tooltip": "Members", + "tasksByMembers": "Tasks by members", + "tasksByMembersTooltip": "Tasks by members", + "name": "Name", + "taskCount": "Task Count", + "contribution": "Contribution", + "completed": "Completed", + "incomplete": "Incomplete", + "overdue": "Overdue", + "progress": "Progress" + }, + "tasks": { + "overdueTasks": "Overdue Tasks", + "overLoggedTasks": "Over logged Tasks", + "tasksCompletedEarly": "Tasks completed early", + "tasksCompletedLate": "Tasks completed late", + "overLoggedTasksTooltip": "Tasks that has time logged past their estimated time", + "overdueTasksTooltip": "Tasks that are past their due date" + }, + "common": { + "seeAll": "See all", + "totalLoggedHours": "Total logged hours", + "totalEstimation": "Total estimation", + "completedTasks": "Completed tasks", + "incompleteTasks": "Incomplete tasks", + "overdueTasks": "Overdue tasks", + "overdueTasksTooltip": "Tasks that are past their due date", + "totalLoggedHoursTooltip": "Task estimation and logged time for tasks.", + "includeArchivedTasks": "Include Archived Tasks", + "export": "Export" + } +} diff --git a/worklenz-backend/src/public/locales/en/project-view-members.json b/worklenz-backend/src/public/locales/en/project-view-members.json new file mode 100644 index 00000000..6ed8ddf0 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "Name", + "jobTitleColumn": "Job Title", + "emailColumn": "Email", + "tasksColumn": "Tasks", + "taskProgressColumn": "Task Progress", + "accessColumn": "Access", + "fileIconAlt": "File icon", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "refreshButtonTooltip": "Refresh members", + "deleteButtonTooltip": "Remove from project", + "memberCount": "Member", + "membersCountPlural": "Members", + "emptyText": "There are no attachments in the project." +} diff --git a/worklenz-backend/src/public/locales/en/project-view-updates.json b/worklenz-backend/src/public/locales/en/project-view-updates.json new file mode 100644 index 00000000..d7140ad8 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "Add a comment..", + "addButton": "Add", + "cancelButton": "Cancel", + "deleteButton": "Delete" +} diff --git a/worklenz-backend/src/public/locales/en/project-view.json b/worklenz-backend/src/public/locales/en/project-view.json new file mode 100644 index 00000000..82ab21f2 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "Task List", + "board": "Board", + "insights": "Insights", + "files": "Files", + "members": "Members", + "updates": "Updates", + "projectView": "Project View", + "loading": "Loading project...", + "error": "Error loading project", + "pinnedTab": "Pinned as default tab", + "pinTab": "Pin as default tab", + "unpinTab": "Unpin default tab" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/en/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/en/project-view/import-task-templates.json new file mode 100644 index 00000000..d732aa08 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "Import Task Template", + "templateName": "Template Name", + "templateDescription": "Template Description", + "selectedTasks": "Selected Tasks", + "tasks": "Tasks", + "templates": "Templates", + "remove": "Remove", + "cancel": "Cancel", + "import": "Import" +} diff --git a/worklenz-backend/src/public/locales/en/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/en/project-view/project-member-drawer.json new file mode 100644 index 00000000..ad2d60c8 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "Project Members", + "searchLabel": "Add members by adding their name or email", + "searchPlaceholder": "Type name or email", + "inviteAsAMember": "Invite as a member", + "inviteNewMemberByEmail": "Invite new member by email" +} diff --git a/worklenz-backend/src/public/locales/en/project-view/project-view-header.json b/worklenz-backend/src/public/locales/en/project-view/project-view-header.json new file mode 100644 index 00000000..1bbb6c15 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "Import tasks", + "importTask": "Import task", + "createTask": "Create task", + "settings": "Settings", + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe", + "deleteProject": "Delete project", + "startDate": "Start date", + "endDate": "End date", + "projectSettings": "Project settings", + "projectSummary": "Project summary", + "receiveProjectSummary": "Receive a project summary every evening.", + "refreshProject": "Refresh project", + "saveAsTemplate": "Save as template", + "invite": "Invite", + "share": "Share", + "subscribeTooltip": "Subscribe to project notifications", + "unsubscribeTooltip": "Unsubscribe from project notifications", + "refreshTooltip": "Refresh project data", + "settingsTooltip": "Open project settings", + "saveAsTemplateTooltip": "Save this project as a template", + "inviteTooltip": "Invite team members to this project", + "createTaskTooltip": "Create a new task", + "importTaskTooltip": "Import task from template", + "navigateBackTooltip": "Go back to projects list", + "projectStatusTooltip": "Project status", + "projectDatesInfo": "Project timeline information", + "projectCategoryTooltip": "Project category" +} diff --git a/worklenz-backend/src/public/locales/en/project-view/save-as-template.json b/worklenz-backend/src/public/locales/en/project-view/save-as-template.json new file mode 100644 index 00000000..2b3e7564 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "Save as Template", + "templateName": "Template Name", + "includes": "What should be included in the template from the project ?", + "includesOptions": { + "statuses": "Statuses", + "phases": "Phases", + "labels": "Labels" + }, + "taskIncludes": "What should be included in the template from the tasks ?", + "taskIncludesOptions": { + "statuses": "Statuses", + "phases": "Phases", + "labels": "Labels", + "name": "Name", + "priority": "Priority", + "status": "Status", + "phase": "Phase", + "label": "Label", + "timeEstimate": "Time Estimate", + "description": "Description", + "subTasks": "Sub Tasks" + }, + "cancel": "Cancel", + "save": "Save", + "templateNamePlaceholder": "Enter template name" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-members-drawer.json b/worklenz-backend/src/public/locales/en/reporting-members-drawer.json new file mode 100644 index 00000000..cca01177 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-members-drawer.json @@ -0,0 +1,90 @@ +{ + "exportButton": "Export", + "timeLogsButton": "TimeLogs", + "activityLogsButton": "Activity Logs", + "tasksButton": "Tasks", + "searchByNameInputPlaceholder": "Search by name", + + "overviewTab": "Overview", + "timeLogsTab": "Time Logs", + "activityLogsTab": "Activity Logs", + "tasksTab": "Tasks", + + "projectsText": "Projects", + "totalTasksText": "Total Tasks", + "assignedTasksText": "Assigned Tasks", + "completedTasksText": "Completed Tasks", + "ongoingTasksText": "Ongoing Tasks", + "overdueTasksText": "Overdue Tasks", + "loggedHoursText": "Logged Hours", + + "tasksText": "Tasks", + "allText": "All", + + "tasksByProjectsText": "Tasks By Projects", + "tasksByStatusText": "Tasks By Status", + "tasksByPriorityText": "Tasks By Priority", + + "todoText": "To Do", + "doingText": "Doing", + "doneText": "Done", + "lowText": "Low", + "mediumText": "Medium", + "highText": "High", + + "billableButton": "Billable", + "billableText": "Billable", + "nonBillableText": "Non Billable", + + "timeLogsEmptyPlaceholder": "No time logs to show", + "loggedText": "Logged", + "forText": "for", + "inText": "in", + "updatedText": "Updated", + "fromText": "From", + "toText": "to", + "withinText": "within", + + "activityLogsEmptyPlaceholder": "No activity logs to show", + + "filterByText": "Filter by:", + "selectProjectPlaceholder": "Select Project", + + "taskColumn": "Task", + "nameColumn": "Name", + "projectColumn": "Project", + "statusColumn": "Status", + "priorityColumn": "Priority", + "dueDateColumn": "Due Date", + "completedDateColumn": "Completed Date", + "estimatedTimeColumn": "Estimated Time", + "loggedTimeColumn": "Logged Time", + "overloggedTimeColumn": "Overlogged Time", + "daysLeftColumn": "Days Left/Overdue", + "startDateColumn": "Start Date", + "endDateColumn": "End Date", + "actualTimeColumn": "Actual Time", + "projectHealthColumn": "Project Health", + "categoryColumn": "Category", + "projectManagerColumn": "Project Manager", + + "tasksStatsOverviewDrawerTitle": "'s Tasks", + "projectsStatsOverviewDrawerTitle": "'s Projects", + + "cancelledText": "Cancelled", + "blockedText": "Blocked", + "onHoldText": "On Hold", + "proposedText": "Proposed", + "inPlanningText": "In Planning", + "inProgressText": "In Progress", + "completedText": "Completed", + "continuousText": "Continuous", + + "daysLeftText": "days left", + "daysOverdueText": "days overdue", + + "notSetText": "NotSet", + "needsAttentionText": "Needs Attention", + "atRiskText": "At Risk", + "goodText": "Good" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-members.json b/worklenz-backend/src/public/locales/en/reporting-members.json new file mode 100644 index 00000000..a8035dcd --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-members.json @@ -0,0 +1,35 @@ +{ + "yesterdayText": "Yesterday", + "lastSevenDaysText": "Last 7 Days", + "lastWeekText": "Last Week", + "lastThirtyDaysText": "Last 30 Days", + "lastMonthText": "Last Month", + "lastThreeMonthsText": "Last 3 Months", + "allTimeText": "All Time", + "customRangeText": "Custom range", + "startDateInputPlaceholder": "Start date", + "EndDateInputPlaceholder": "End date", + "filterButton": "Filter", + + "membersTitle": "Members", + "includeArchivedButton": "Include Archived Projects", + "exportButton": "Export", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "Search by name", + + "memberColumn": "Member", + "tasksProgressColumn": "Tasks Progress", + "tasksAssignedColumn": "Tasks Assigned", + "completedTasksColumn": "Completed Tasks", + "overdueTasksColumn": "Overdue Tasks", + "ongoingTasksColumn": "Ongoing Tasks", + + "tasksAssignedColumnTooltip": "Tasks assigned on selected date range", + "overdueTasksColumnTooltip": "Tasks overdue for end of the selected date range", + "completedTasksColumnTooltip": "Tasks completed on selected date range", + "ongoingTasksColumnTooltip": "Started tasks not completed yet", + + "todoText": "To Do", + "doingText": "Doing", + "doneText": "Done" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/en/reporting-overview-drawer.json new file mode 100644 index 00000000..84fab1b8 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-overview-drawer.json @@ -0,0 +1,39 @@ +{ + "exportButton": "Export", + "projectsButton": "Projects", + "membersButton": "Members", + "searchByNameInputPlaceholder": "Search by name", + + "overviewTab": "Overview", + "projectsTab": "Projects", + "membersTab": "Members", + + "projectsByStatusText": "Projects By Status", + "projectsByCategoryText": "Projects By Category", + "projectsByHealthText": "Projects By Health", + + "projectsText": "Projects", + "allText": "All", + + "cancelledText": "Cancelled", + "blockedText": "Blocked", + "onHoldText": "On Hold", + "proposedText": "Proposed", + "inPlanningText": "In Planning", + "inProgressText": "In Progress", + "completedText": "Completed", + "continuousText": "Continuous", + + "notSetText": "Not Set", + "needsAttentionText": "Needs Attention", + "atRiskText": "At Risk", + "goodText": "Good", + + "nameColumn": "Name", + "emailColumn": "Email", + "projectsColumn": "Projects", + "tasksColumn": "Tasks", + "overdueTasksColumn": "Overdue Tasks", + "completedTasksColumn": "Completed Tasks", + "ongoingTasksColumn": "Ongoing Tasks" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-overview.json b/worklenz-backend/src/public/locales/en/reporting-overview.json new file mode 100644 index 00000000..73faffd3 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-overview.json @@ -0,0 +1,25 @@ +{ + "overviewTitle": "Overview", + "includeArchivedButton": "Include Archived Projects", + + "teamCount": "Team", + "teamCountPlural": "Teams", + "projectCount": "Project", + "projectCountPlural": "Projects", + "memberCount": "Member", + "memberCountPlural": "Members", + "activeProjectCount": "Active Project", + "activeProjectCountPlural": "Active Projects", + "overdueProjectCount": "Overdue Project", + "overdueProjectCountPlural": "Overdue Projects", + "unassignedMemberCount": "Unassigned Member", + "unassignedMemberCountPlural": "Unassigned Members", + "memberWithOverdueTaskCount": "Member With Overdue Task", + "memberWithOverdueTaskCountPlural": "Member With Overdue Tasks", + + "teamsText": "Teams", + + "nameColumn": "Name", + "projectsColumn": "Projects", + "membersColumn": "Members" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/en/reporting-projects-drawer.json new file mode 100644 index 00000000..243bb411 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-projects-drawer.json @@ -0,0 +1,59 @@ +{ + "exportButton": "Export", + "membersButton": "Members", + "tasksButton": "Tasks", + "searchByNameInputPlaceholder": "Search by name", + + "overviewTab": "Overview", + "membersTab": "Members", + "tasksTab": "Tasks", + + "completedTasksText": "Completed Tasks", + "incompleteTasksText": "Incomplete Tasks", + "overdueTasksText": "Overdue Tasks", + "allocatedHoursText": "Allocated Hours", + "loggedHoursText": "Logged Hours", + + "tasksText": "Tasks", + "allText": "All", + + "tasksByStatusText": "Tasks By Status", + "tasksByPriorityText": "Tasks By Priority", + "tasksByDueDateText": "Tasks By Due Date", + + "todoText": "To Do", + "doingText": "Doing", + "doneText": "Done", + "lowText": "Low", + "mediumText": "Medium", + "highText": "High", + "completedText": "Completed", + "upcomingText": "Upcoming", + "overdueText": "Overdue", + "noDueDateText": "No Due Date", + + "nameColumn": "Name", + "tasksCountColumn": "Tasks Count", + "completedTasksColumn": "Completed Tasks", + "incompleteTasksColumn": "Incomplete Tasks", + "overdueTasksColumn": "Overdue Tasks", + "contributionColumn": "Contribution", + "progressColumn": "Progress", + "loggedTimeColumn": "Logged Time", + "taskColumn": "Task", + "projectColumn": "Project", + "statusColumn": "Status", + "priorityColumn": "Priority", + "phaseColumn": "Phase", + "dueDateColumn": "Due Date", + "completedDateColumn": "Completed Date", + "estimatedTimeColumn": "Estimated Time", + "overloggedTimeColumn": "Overlogged Time", + "completedOnColumn": "Completed On", + "daysOverdueColumn": "Days overdue", + + "groupByText": "Group By:", + "statusText": "Status", + "priorityText": "Priority", + "phaseText": "Phase" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-projects-filters.json b/worklenz-backend/src/public/locales/en/reporting-projects-filters.json new file mode 100644 index 00000000..7d9afccd --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-projects-filters.json @@ -0,0 +1,35 @@ +{ + "searchByNamePlaceholder": "Search by name", + "searchByCategoryPlaceholder": "Search by category", + + "statusText": "Status", + "healthText": "Health", + "categoryText": "Category", + "projectManagerText": "Project Manager", + "showFieldsText": "Show fields", + + "cancelledText": "Cancelled", + "blockedText": "Blocked", + "onHoldText": "On Hold", + "proposedText": "Proposed", + "inPlanningText": "In Planning", + "inProgressText": "In Progress", + "completedText": "Completed", + "continuousText": "Continuous", + + "notSetText": "NotSet", + "needsAttentionText": "Needs Attention", + "atRiskText": "At Risk", + "goodText": "Good", + + "nameText": "Project", + "estimatedVsActualText": "Estimated Vs Actual", + "tasksProgressText": "Tasks Progress", + "lastActivityText": "Last Activity", + "datesText": "Start/End Dates", + "daysLeftText": "Days Left/Overdue", + "projectHealthText": "Project Health", + "projectUpdateText": "Project Update", + "clientText": "Client", + "teamText": "Team" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-projects.json b/worklenz-backend/src/public/locales/en/reporting-projects.json new file mode 100644 index 00000000..8dd472c4 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-projects.json @@ -0,0 +1,52 @@ +{ + "projectCount": "Project", + "projectCountPlural": "Projects", + "includeArchivedButton": "Include Archived Projects", + "exportButton": "Export", + "excelButton": "Excel", + + "projectColumn": "Project", + "estimatedVsActualColumn": "Estimated Vs Actual", + "tasksProgressColumn": "Tasks Progress", + "lastActivityColumn": "Last Activity", + "statusColumn": "Status", + "datesColumn": "Start/End Dates", + "daysLeftColumn": "Days Left/Overdue", + "projectHealthColumn": "Project Health", + "categoryColumn": "Category", + "projectUpdateColumn": "Project Update", + "clientColumn": "Client", + "teamColumn": "Team", + "projectManagerColumn": "Project Manager", + + "openButton": "Open", + + "estimatedText": "Estimated", + "actualText": "Actual", + + "todoText": "To Do", + "doingText": "Doing", + "doneText": "Done", + + "cancelledText": "Cancelled", + "blockedText": "Blocked", + "onHoldText": "On Hold", + "proposedText": "Proposed", + "inPlanningText": "In Planning", + "inProgressText": "In Progress", + "completedText": "Completed", + "continuousText": "Continuous", + + "daysLeftText": "days left", + "dayLeftText": "day left", + "daysOverdueText": "days overdue", + + "notSetText": "Not Set", + "needsAttentionText": "Needs Attention", + "atRiskText": "At Risk", + "goodText": "Good", + + "setCategoryText": "Set Category", + "searchByNameInputPlaceholder": "Search by name", + "todayText": "Today" +} diff --git a/worklenz-backend/src/public/locales/en/reporting-sidebar.json b/worklenz-backend/src/public/locales/en/reporting-sidebar.json new file mode 100644 index 00000000..8e82224d --- /dev/null +++ b/worklenz-backend/src/public/locales/en/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Overview", + "projects": "Projects", + "members": "Members", + "timeReports": "Time Reports", + "estimateVsActual": "Estimate Vs Actual", + "currentOrganizationTooltip": "Current organization" +} diff --git a/worklenz-backend/src/public/locales/en/schedule.json b/worklenz-backend/src/public/locales/en/schedule.json new file mode 100644 index 00000000..9e30c04b --- /dev/null +++ b/worklenz-backend/src/public/locales/en/schedule.json @@ -0,0 +1,39 @@ +{ + "today": "Today", + "week": "Week", + "month": "Month", + + "settings": "Settings", + "workingDays": "Working days", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday", + "workingHours": "Working hours", + "hours": "hours", + "saveButton": "Save", + + "totalAllocation": "Total Allocation", + "timeLogged": "Time Logged", + "remainingTime": "Remaining Time", + "total": "Total", + "perDay": "Per Day", + "tasks": "tasks", + "startDate": "Start Date", + "endDate": "End Date", + + "hoursPerDay": "Hours Per Day", + "totalHours": "Total Hours", + "deleteButton": "Delete", + "cancelButton": "Cancel", + + "tabTitle": "Task without Start & End dates", + + "allocatedTime": "Allocated time", + "totalLogged": "Total Logged", + "loggedBillable": "Logged Billable", + "loggedNonBillable": "Logged Non Billable" +} diff --git a/worklenz-backend/src/public/locales/en/settings/appearance.json b/worklenz-backend/src/public/locales/en/settings/appearance.json new file mode 100644 index 00000000..9ce8de64 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/appearance.json @@ -0,0 +1,5 @@ +{ + "title": "Appearance", + "darkMode": "Dark Mode", + "darkModeDescription": "Switch between light and dark mode to customize your viewing experience." +} diff --git a/worklenz-backend/src/public/locales/en/settings/categories.json b/worklenz-backend/src/public/locales/en/settings/categories.json new file mode 100644 index 00000000..716cb5c3 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "Category", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "associatedTaskColumn": "Associated Projects", + "searchPlaceholder": "Search by name", + "emptyText": "Categories can be created while updating or creating projects.", + "colorChangeTooltip": "Click to change color" +} diff --git a/worklenz-backend/src/public/locales/en/settings/change-password.json b/worklenz-backend/src/public/locales/en/settings/change-password.json new file mode 100644 index 00000000..ad39088b --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "Change Password", + "currentPassword": "Current Password", + "newPassword": "New Password", + "confirmPassword": "Confirm Password", + "currentPasswordPlaceholder": "Enter your current password", + "newPasswordPlaceholder": "New Password", + "confirmPasswordPlaceholder": "Confirm Password", + "currentPasswordRequired": "Please input your current password!", + "newPasswordRequired": "Please input your new password!", + "passwordValidationError": "Password must be at least 8 characters with an uppercase letter, a number, and a symbol.", + "passwordMismatch": "Passwords do not match!", + "passwordRequirements": "New password should be a minimum of 8 characters, with an uppercase letter, a number, and a symbol.", + "updateButton": "Update Password" +} diff --git a/worklenz-backend/src/public/locales/en/settings/clients.json b/worklenz-backend/src/public/locales/en/settings/clients.json new file mode 100644 index 00000000..b7fa4dac --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "Name", + "projectColumn": "Project", + "noProjectsAvailable": "No projects available", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "searchPlaceholder": "Search by name", + "createClient": "Create Client", + "pinTooltip": "Click to pin this into the main menu", + "createClientDrawerTitle": "Create Client", + "updateClientDrawerTitle": "Update Client", + "nameLabel": "Name", + "namePlaceholder": "Name", + "nameRequiredError": "Please enter a Name", + "createButton": "Create", + "updateButton": "Update", + "createClientSuccessMessage": "Create client success!", + "createClientErrorMessage": "Create client failed!", + "updateClientSuccessMessage": "Update client success!", + "updateClientErrorMessage": "Update client failed!" +} diff --git a/worklenz-backend/src/public/locales/en/settings/job-titles.json b/worklenz-backend/src/public/locales/en/settings/job-titles.json new file mode 100644 index 00000000..9ec54f98 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "Name", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "searchPlaceholder": "Search by name", + "createJobTitleButton": "Create Job Title", + "pinTooltip": "Click to pin this into the main menu", + "createJobTitleDrawerTitle": "Create Job Title", + "updateJobTitleDrawerTitle": "Update Job Title", + "nameLabel": "Name", + "namePlaceholder": "Name", + "nameRequiredError": "Please enter a Name", + "createButton": "Create", + "updateButton": "Update", + "createJobTitleSuccessMessage": "Create job title success!", + "createJobTitleErrorMessage": "Create job title failed!", + "updateJobTitleSuccessMessage": "Update job title success!", + "updateJobTitleErrorMessage": "Update job title failed!" +} diff --git a/worklenz-backend/src/public/locales/en/settings/labels.json b/worklenz-backend/src/public/locales/en/settings/labels.json new file mode 100644 index 00000000..5c3d2479 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "Label", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "associatedTaskColumn": "Associated Task Count", + "searchPlaceholder": "Search by name", + "emptyText": "Labels can be created while updating or creating tasks.", + "pinTooltip": "Click to pin this into the main menu", + "colorChangeTooltip": "Click to change color" +} diff --git a/worklenz-backend/src/public/locales/en/settings/language.json b/worklenz-backend/src/public/locales/en/settings/language.json new file mode 100644 index 00000000..331cb7df --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "Language", + "language_required": "Language is required", + "time_zone": "Time zone", + "time_zone_required": "Time zone is required", + "save_changes": "Save Changes" +} diff --git a/worklenz-backend/src/public/locales/en/settings/notifications.json b/worklenz-backend/src/public/locales/en/settings/notifications.json new file mode 100644 index 00000000..7cc1eb47 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/notifications.json @@ -0,0 +1,11 @@ +{ + "title": "Notifications Settings", + "emailTitle": "Send me email notifications", + "emailDescription": "This includes new task assignments", + "dailyDigestTitle": "Send me a daily digest", + "dailyDigestDescription": "Every evening, you will receive a summary of recent activity in tasks.", + "popupTitle": "Pop up notifications on my computer when Worklenz is open", + "popupDescription": "Pop up notifications can be disabled by your browser. Change your browser settings to allow them.", + "unreadItemsTitle": "Show the number of unread items", + "unreadItemsDescription": "You'll see counts for each notification." +} diff --git a/worklenz-backend/src/public/locales/en/settings/profile.json b/worklenz-backend/src/public/locales/en/settings/profile.json new file mode 100644 index 00000000..43ce2f41 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "You can only upload JPG/PNG file!", + "uploadSizeError": "Image must be smaller than 2MB!", + "upload": "Upload", + "nameLabel": "Name", + "nameRequiredError": "Name is required", + "emailLabel": "Email", + "emailRequiredError": "Email is required", + "saveChanges": "Save Changes", + "profileJoinedText": "Joined a month ago", + "profileLastUpdatedText": "Last updated a month ago", + "avatarTooltip": "Click to upload an avatar", + "title": "Profile Settings" +} diff --git a/worklenz-backend/src/public/locales/en/settings/project-templates.json b/worklenz-backend/src/public/locales/en/settings/project-templates.json new file mode 100644 index 00000000..802e017b --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "Name", + "editToolTip": "Edit", + "deleteToolTip": "Delete", + "confirmText": "Are you sure?", + "okText": "Yes", + "cancelText": "Cancel" +} diff --git a/worklenz-backend/src/public/locales/en/settings/sidebar.json b/worklenz-backend/src/public/locales/en/settings/sidebar.json new file mode 100644 index 00000000..d0b64829 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/sidebar.json @@ -0,0 +1,15 @@ +{ + "profile": "Profile", + "notifications": "Notifications", + "clients": "Clients", + "job-titles": "Job Titles", + "labels": "Labels", + "categories": "Categories", + "project-templates": "Project Templates", + "task-templates": "Task Templates", + "team-members": "Team Members", + "teams": "Teams", + "change-password": "Change Password", + "language-and-region": "Language and Region", + "appearance": "Appearance" +} diff --git a/worklenz-backend/src/public/locales/en/settings/task-templates.json b/worklenz-backend/src/public/locales/en/settings/task-templates.json new file mode 100644 index 00000000..b40bed2d --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "Name", + "createdColumn": "Created", + "editToolTip": "Edit", + "deleteToolTip": "Delete", + "confirmText": "Are you sure?", + "okText": "Yes", + "cancelText": "Cancel" +} diff --git a/worklenz-backend/src/public/locales/en/settings/team-members.json b/worklenz-backend/src/public/locales/en/settings/team-members.json new file mode 100644 index 00000000..36918b90 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "Team Members", + "nameColumn": "Name", + "projectsColumn": "Projects", + "emailColumn": "Email", + "teamAccessColumn": "Team Access", + "memberCount": "Member", + "membersCountPlural": "Members", + "searchPlaceholder": "Search members by name", + "pinTooltip": "Refresh member list", + "addMemberButton": "Add New Member", + "editTooltip": "Edit member", + "deactivateTooltip": "Deactivate member", + "activateTooltip": "Activate member", + "deleteTooltip": "Delete member", + "confirmDeleteTitle": "Are you sure you want to delete this member?", + "confirmActivateTitle": "Are you sure you want to change this member's status?", + "okText": "Yes, proceed", + "cancelText": "No, cancel", + "deactivatedText": "(Currently deactivated)", + "pendingInvitationText": "(Invitation pending)", + "addMemberDrawerTitle": "Add New Team Member", + "updateMemberDrawerTitle": "Update Team Member", + "addMemberEmailHint": "Members will be added to the team regardless of invitation acceptance status", + "memberEmailLabel": "Email(s)", + "memberEmailPlaceholder": "Enter team member email address", + "memberEmailRequiredError": "Please enter a valid email address", + "jobTitleLabel": "Job Title", + "jobTitlePlaceholder": "Select or search job title (Optional)", + "memberAccessLabel": "Access Level", + "addToTeamButton": "Add Member to Team", + "updateButton": "Save Changes", + "resendInvitationButton": "Resend Invitation Email", + "invitationSentSuccessMessage": "Team invitation sent successfully!", + "createMemberSuccessMessage": "New team member added successfully!", + "createMemberErrorMessage": "Failed to add team member. Please try again.", + "updateMemberSuccessMessage": "Team member updated successfully!", + "updateMemberErrorMessage": "Failed to update team member. Please try again.", + "memberText": "Member", + "adminText": "Admin", + "ownerText": "Team Owner", + "addedText": "Added", + "updatedText": "Updated", + "noResultFound": "Type an email address and hit enter...", + "jobTitlesFetchError": "Failed to fetch job titles", + "invitationResent": "Invitation resent successfully!" +} diff --git a/worklenz-backend/src/public/locales/en/settings/teams.json b/worklenz-backend/src/public/locales/en/settings/teams.json new file mode 100644 index 00000000..57a1df51 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "Teams", + "team": "Team", + "teams": "Teams", + "name": "Name", + "created": "Created", + "ownsBy": "Owns By", + "edit": "Edit", + "editTeam": "Edit Team", + "pinTooltip": "Click to pin this into the main menu", + "editTeamName": "Edit Team Name", + "updateName": "Update Name", + "namePlaceholder": "Name", + "nameRequired": "Please enter a Name", + "updateFailed": "Team name change failed!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..f88ecde9 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,30 @@ +{ + "details": { + "task-key": "Task Key", + "phase": "Phase", + "assignees": "Assignees", + "due-date": "Due Date", + "time-estimation": "Time Estimation", + "priority": "Priority", + "labels": "Labels", + "billable": "Billable", + "notify": "Notify", + "when-done-notify": "When done, notify", + "start-date": "Start Date", + "end-date": "End Date", + "hide-start-date": "Hide Start Date", + "show-start-date": "Show Start Date", + "hours": "Hours", + "minutes": "Minutes", + "recurring": "Recurring" + }, + "description": { + "title": "Description", + "placeholder": "Add a more detailed description..." + }, + "subTasks": { + "title": "Sub Tasks", + "add-sub-task": "Add Sub Task", + "refresh-sub-tasks": "Refresh Sub Tasks" + } +} diff --git a/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-recurring-config.json b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-recurring-config.json new file mode 100644 index 00000000..1d22e41b --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer-recurring-config.json @@ -0,0 +1,34 @@ +{ + "recurring": "Recurring", + "recurringTaskConfiguration": "Recurring task configuration", + "repeats": "Repeats", + "daily": "Daily", + "weekly": "Weekly", + "everyXDays": "Every X Days", + "everyXWeeks": "Every X Weeks", + "everyXMonths": "Every X Months", + "monthly": "Monthly", + "selectDaysOfWeek": "Select Days of the Week", + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun", + "monthlyRepeatType": "Monthly repeat type", + "onSpecificDate": "On a specific date", + "onSpecificDay": "On a specific day", + "dateOfMonth": "Date of the month", + "weekOfMonth": "Week of the month", + "dayOfWeek": "Day of the week", + "first": "First", + "second": "Second", + "third": "Third", + "fourth": "Fourth", + "last": "Last", + "intervalDays": "Interval (days)", + "intervalWeeks": "Interval (weeks)", + "intervalMonths": "Interval (months)", + "saveChanges": "Save Changes" +} diff --git a/worklenz-backend/src/public/locales/en/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer.json new file mode 100644 index 00000000..b5147324 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "Type your Task", + "deleteTask": "Delete Task" + }, + "taskInfoTab": { + "title": "Info", + "details": { + "title": "Details", + "task-key": "Task Key", + "phase": "Phase", + "assignees": "Assignees", + "due-date": "Due Date", + "time-estimation": "Time Estimation", + "priority": "Priority", + "labels": "Labels", + "billable": "Billable", + "notify": "Notify", + "when-done-notify": "When done, notify", + "start-date": "Start Date", + "end-date": "End Date", + "hide-start-date": "Hide Start Date", + "show-start-date": "Show Start Date", + "hours": "Hours", + "minutes": "Minutes", + "progressValue": "Progress Value", + "progressValueTooltip": "Set the progress percentage (0-100%)", + "progressValueRequired": "Please enter a progress value", + "progressValueRange": "Progress must be between 0 and 100", + "taskWeight": "Task Weight", + "taskWeightTooltip": "Set the weight of this subtask (percentage)", + "taskWeightRequired": "Please enter a task weight", + "taskWeightRange": "Weight must be between 0 and 100", + "recurring": "Recurring" + }, + "labels": { + "labelInputPlaceholder": "Search or create", + "labelsSelectorInputTip": "Hit Enter to create" + }, + "description": { + "title": "Description", + "placeholder": "Add a more detailed description..." + }, + "subTasks": { + "title": "Sub Tasks", + "addSubTask": "Add Sub Task", + "addSubTaskInputPlaceholder": "Type your task and hit enter", + "refreshSubTasks": "Refresh Sub Tasks", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteSubTask": "Are you sure you want to delete this subtask?", + "deleteSubTask": "Delete Sub Task" + }, + "dependencies": { + "title": "Dependencies", + "addDependency": "+ Add new dependency", + "blockedBy": "Blocked By", + "searchTask": "Type to search task", + "noTasksFound": "No tasks found", + "confirmDeleteDependency": "Are you sure you want to delete?" + }, + "attachments": { + "title": "Attachments", + "chooseOrDropFileToUpload": "Choose or drop file to upload", + "uploading": "Uploading..." + }, + "comments": { + "title": "Comments", + "addComment": "+ Add new comment", + "noComments": "No comments yet. Be the first to comment!", + "delete": "Delete", + "confirmDeleteComment": "Are you sure you want to delete this comment?", + "addCommentPlaceholder": "Add a comment...", + "cancel": "Cancel", + "commentButton": "Comment", + "attachFiles": "Attach files", + "addMoreFiles": "Add more files", + "selectedFiles": "Selected Files (Up to 25MB, Maximum of {count})", + "maxFilesError": "You can only upload a maximum of {count} files", + "processFilesError": "Failed to process files", + "addCommentError": "Please add a comment or attach files", + "createdBy": "Created {{time}} by {{user}}", + "updatedTime": "Updated {{time}}" + }, + "searchInputPlaceholder": "Search by name", + "pendingInvitation": "Pending Invitation" + }, + "taskTimeLogTab": { + "title": "Time Log", + "addTimeLog": "Add new time log", + "totalLogged": "Total Logged", + "exportToExcel": "Export to Excel", + "noTimeLogsFound": "No time logs found", + "timeLogForm": { + "date": "Date", + "startTime": "Start Time", + "endTime": "End Time", + "workDescription": "Work Description", + "descriptionPlaceholder": "Add a description", + "logTime": "Log time", + "updateTime": "Update time", + "cancel": "Cancel", + "selectDateError": "Please select a date", + "selectStartTimeError": "Please select start time", + "selectEndTimeError": "Please select end time", + "endTimeAfterStartError": "End time must be after start time" + } + }, + "taskActivityLogTab": { + "title": "Activity Log", + "add": "ADD", + "remove": "REMOVE", + "none": "None", + "weight": "Weight", + "createdTask": "created the task." + }, + "taskProgress": { + "markAsDoneTitle": "Mark Task as Done?", + "confirmMarkAsDone": "Yes, mark as done", + "cancelMarkAsDone": "No, keep current status", + "markAsDoneDescription": "You've set the progress to 100%. Would you like to update the task status to \"Done\"?" + } +} diff --git a/worklenz-backend/src/public/locales/en/task-list-filters.json b/worklenz-backend/src/public/locales/en/task-list-filters.json new file mode 100644 index 00000000..a38356c6 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-list-filters.json @@ -0,0 +1,85 @@ +{ + "searchButton": "Search", + "resetButton": "Reset", + "searchInputPlaceholder": "Search by name", + + "sortText": "Sort", + "statusText": "Status", + "phaseText": "Phase", + "memberText": "Members", + "assigneesText": "Assignees", + "priorityText": "Priority", + "labelsText": "Labels", + "membersText": "Members", + "groupByText": "Group by", + "showArchivedText": "Show archived", + "showFieldsText": "Show fields", + "keyText": "Key", + "taskText": "Task", + "descriptionText": "Description", + "phasesText": "Phases", + "listText": "List", + "progressText": "Progress", + "timeTrackingText": "Time Tracking", + "timetrackingText": "Time Tracking", + "estimationText": "Estimation", + "startDateText": "Start Date", + "startdateText": "Start Date", + "endDateText": "End Date", + "dueDateText": "Due Date", + "duedateText": "Due Date", + "completedDateText": "Completed Date", + "completeddateText": "Completed Date", + "createdDateText": "Created Date", + "createddateText": "Created Date", + "lastUpdatedText": "Last Updated", + "lastupdatedText": "Last Updated", + "reporterText": "Reporter", + "dueTimeText": "Due Time", + "duetimeText": "Due Time", + + "lowText": "Low", + "mediumText": "Medium", + "highText": "High", + + "createStatusButtonTooltip": "Status settings", + "configPhaseButtonTooltip": "Phase settings", + "noLabelsFound": "No labels found", + + "addStatusButton": "Add Status", + "addPhaseButton": "Add Phase", + + "createStatus": "Create Status", + "name": "Name", + "category": "Category", + "selectCategory": "Select a category", + "pleaseEnterAName": "Please enter a name", + "pleaseSelectACategory": "Please select a category", + "create": "Create", + + "searchTasks": "Search tasks...", + "searchPlaceholder": "Search...", + "fieldsText": "Fields", + "loadingFilters": "Loading filters...", + "noOptionsFound": "No options found", + "filtersActive": "filters active", + "filterActive": "filter active", + "clearAll": "Clear all", + "clearing": "Clearing...", + "cancel": "Cancel", + "search": "Search", + "groupedBy": "Grouped by", + "manageStatuses": "Manage Statuses", + "managePhases": "Manage Phases", + "dragToReorderStatuses": "Drag statuses to reorder them. Each status can have a different category.", + "enterNewStatusName": "Enter new status name...", + "addStatus": "Add Status", + "noStatusesFound": "No statuses found. Create your first status above.", + "deleteStatus": "Delete Status", + "deleteStatusConfirm": "Are you sure you want to delete this status? This action cannot be undone.", + "rename": "Rename", + "delete": "Delete", + "enterStatusName": "Enter status name", + "selectCategory": "Select category", + "close": "Close" +} diff --git a/worklenz-backend/src/public/locales/en/task-list-table.json b/worklenz-backend/src/public/locales/en/task-list-table.json new file mode 100644 index 00000000..5c03f203 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-list-table.json @@ -0,0 +1,136 @@ +{ + "keyColumn": "Key", + "taskColumn": "Task", + "descriptionColumn": "Description", + "progressColumn": "Progress", + "membersColumn": "Members", + "assigneesColumn": "Assignees", + "labelsColumn": "Labels", + "phasesColumn": "Phases", + "phaseColumn": "Phase", + "statusColumn": "Status", + "priorityColumn": "Priority", + "timeTrackingColumn": "Time Tracking", + "timetrackingColumn": "Time Tracking", + "estimationColumn": "Estimation", + "startDateColumn": "Start Date", + "startdateColumn": "Start Date", + "dueDateColumn": "Due Date", + "duedateColumn": "Due Date", + "completedDateColumn": "Completed Date", + "completeddateColumn": "Completed Date", + "createdDateColumn": "Created Date", + "createddateColumn": "Created Date", + "lastUpdatedColumn": "Last Updated", + "lastupdatedColumn": "Last Updated", + "reporterColumn": "Reporter", + "dueTimeColumn": "Due Time", + "todoSelectorText": "To Do", + "doingSelectorText": "Doing", + "doneSelectorText": "Done", + + "lowSelectorText": "Low", + "mediumSelectorText": "Medium", + "highSelectorText": "High", + + "selectText": "Select", + "labelsSelectorInputTip": "Hit enter to create!", + + "addTaskText": "Add Task", + "addSubTaskText": "Add Sub Task", + "addTaskInputPlaceholder": "Type your task and hit enter", + "noTasksInGroup": "No tasks in this group", + + "openButton": "Open", + "okButton": "Ok", + + "noLabelsFound": "No labels found", + "searchInputPlaceholder": "Search or create", + "assigneeSelectorInviteButton": "Invite a new member by email", + "labelInputPlaceholder": "Search or create", + "searchLabelsPlaceholder": "Search labels...", + "createLabelButton": "Create \"{{name}}\"", + "manageLabelsPath": "Settings → Labels", + + "pendingInvitation": "Pending Invitation", + + "contextMenu": { + "assignToMe": "Assign to me", + "moveTo": "Move to", + "unarchive": "Unarchive", + "archive": "Archive", + "convertToSubTask": "Convert to Sub task", + "convertToTask": "Convert to Task", + "delete": "Delete", + "searchByNameInputPlaceholder": "Search by name" + }, + "setDueDate": "Set due date", + "setStartDate": "Set start date", + "clearDueDate": "Clear due date", + "clearStartDate": "Clear start date", + "dueDatePlaceholder": "Due Date", + "startDatePlaceholder": "Start Date", + + "emptyStates": { + "noTaskGroups": "No task groups found", + "noTaskGroupsDescription": "Tasks will appear here when they are created or when filters are applied.", + "errorPrefix": "Error:", + "dragTaskFallback": "Task" + }, + + "customColumns": { + "addCustomColumn": "Add a custom column", + "customColumnHeader": "Custom Column", + "customColumnSettings": "Custom column settings", + "noCustomValue": "No value", + "peopleField": "People field", + "noDate": "No date", + "unsupportedField": "Unsupported field type", + + "modal": { + "addFieldTitle": "Add field", + "editFieldTitle": "Edit field", + "fieldTitle": "Field title", + "fieldTitleRequired": "Field title is required", + "columnTitlePlaceholder": "Column title", + "type": "Type", + "deleteConfirmTitle": "Are you sure you want to delete this custom column?", + "deleteConfirmDescription": "This action cannot be undone. All data associated with this column will be permanently deleted.", + "deleteButton": "Delete", + "cancelButton": "Cancel", + "createButton": "Create", + "updateButton": "Update", + "createSuccessMessage": "Custom column created successfully", + "updateSuccessMessage": "Custom column updated successfully", + "deleteSuccessMessage": "Custom column deleted successfully", + "deleteErrorMessage": "Failed to delete custom column", + "createErrorMessage": "Failed to create custom column", + "updateErrorMessage": "Failed to update custom column" + }, + + "fieldTypes": { + "people": "People", + "number": "Number", + "date": "Date", + "selection": "Selection", + "checkbox": "Checkbox", + "labels": "Labels", + "key": "Key", + "formula": "Formula" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} subtask", + "subtasks_plural": "{{count}} subtasks", + "comments": "{{count}} comment", + "comments_plural": "{{count}} comments", + "attachments": "{{count}} attachment", + "attachments_plural": "{{count}} attachments", + "subscribers": "Task has subscribers", + "dependencies": "Task has dependencies", + "recurring": "Recurring task" + } + } +} diff --git a/worklenz-backend/src/public/locales/en/task-management.json b/worklenz-backend/src/public/locales/en/task-management.json new file mode 100644 index 00000000..2d21c746 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-management.json @@ -0,0 +1,35 @@ +{ + "noTasksInGroup": "No tasks in this group", + "noTasksInGroupDescription": "Add a task to get started", + "addFirstTask": "Add your first task", + "openTask": "Open", + "subtask": "subtask", + "subtasks": "subtasks", + "comment": "comment", + "comments": "comments", + "attachment": "attachment", + "attachments": "attachments", + "enterSubtaskName": "Enter subtask name...", + "add": "Add", + "cancel": "Cancel", + "renameGroup": "Rename Group", + "renameStatus": "Rename Status", + "renamePhase": "Rename Phase", + "changeCategory": "Change Category", + "clickToEditGroupName": "Click to edit group name", + "enterGroupName": "Enter group name", + + "indicators": { + "tooltips": { + "subtasks": "{{count}} subtask", + "subtasks_plural": "{{count}} subtasks", + "comments": "{{count}} comment", + "comments_plural": "{{count}} comments", + "attachments": "{{count}} attachment", + "attachments_plural": "{{count}} attachments", + "subscribers": "Task has subscribers", + "dependencies": "Task has dependencies", + "recurring": "Recurring task" + } + } +} diff --git a/worklenz-backend/src/public/locales/en/task-template-drawer.json b/worklenz-backend/src/public/locales/en/task-template-drawer.json new file mode 100644 index 00000000..9bc59126 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/task-template-drawer.json @@ -0,0 +1,12 @@ +{ + "createTaskTemplate": "Create Task Template", + "editTaskTemplate": "Edit Task Template", + "cancelText": "Cancel", + "saveText": "Save", + "templateNameText": "Template Name", + "templateNameRequired": "Template name is required", + "selectedTasks": "Selected Tasks", + "removeTask": "Remove", + "cancelButton": "Cancel", + "saveButton": "Save" +} diff --git a/worklenz-backend/src/public/locales/en/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/en/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..42fcc024 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/tasks/task-table-bulk-actions.json @@ -0,0 +1,41 @@ +{ + "taskSelected": "task selected", + "tasksSelected": "tasks selected", + "changeStatus": "Change Status/ Prioriy/ Phases", + "changeLabel": "Change Label", + "assignToMe": "Assign to me", + "changeAssignees": "Change Assignees", + "archive": "Archive", + "unarchive": "Unarchive", + "delete": "Delete", + "moreOptions": "More options", + "deselectAll": "Deselect all", + "status": "Status", + "priority": "Priority", + "phase": "Phase", + "member": "Member", + "createTaskTemplate": "Create Task Template", + "apply": "Apply", + "createLabel": "+ Create Label", + "searchOrCreateLabel": "Search or create label...", + "hitEnterToCreate": "Press Enter to create", + "labelExists": "Label already exists", + "pendingInvitation": "Pending Invitation", + "noMatchingLabels": "No matching labels", + "noLabels": "No labels", + "CHANGE_STATUS": "Change Status", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_PHASE": "Change Phase", + "ADD_LABELS": "Add Labels", + "ASSIGN_TO_ME": "Assign to Me", + "ASSIGN_MEMBERS": "Assign Members", + "ARCHIVE": "Archive", + "DELETE": "Delete", + "CANCEL": "Cancel", + "CLEAR_SELECTION": "Clear Selection", + "TASKS_SELECTED": "{{count}} task selected", + "TASKS_SELECTED_plural": "{{count}} tasks selected", + "DELETE_TASKS_CONFIRM": "Delete {{count}} task?", + "DELETE_TASKS_CONFIRM_plural": "Delete {{count}} tasks?", + "DELETE_TASKS_WARNING": "This action cannot be undone." +} diff --git a/worklenz-backend/src/public/locales/en/template-drawer.json b/worklenz-backend/src/public/locales/en/template-drawer.json new file mode 100644 index 00000000..55364835 --- /dev/null +++ b/worklenz-backend/src/public/locales/en/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "Edit Task Template", + "cancelText": "Cancel", + "saveText": "Save", + "templateNameText": "Template Name", + "selectedTasks": "Selected Tasks", + "removeTask": "Remove", + "description": "Description", + "phase": "Phase", + "statuses": "Statuses", + "priorities": "Priorities", + "labels": "Labels", + "tasks": "Tasks", + "noTemplateSelected": "No template selected", + "noDescription": "No description", + "worklenzTemplates": "Worklenz Templates", + "yourTemplatesLibrary": "Your Library", + "searchTemplates": "Search Templates" +} diff --git a/worklenz-backend/src/public/locales/en/templateDrawer.json b/worklenz-backend/src/public/locales/en/templateDrawer.json new file mode 100644 index 00000000..70bf2b0c --- /dev/null +++ b/worklenz-backend/src/public/locales/en/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "Bug Tracking", + "construction": "Construction", + "designCreative": "Design & Creative", + "education": "Education", + "finance": "Finance", + "hrRecruiting": "HR & Recruiting", + "informationTechnology": "Information Technology", + "legal": "Legal", + "manufacturing": "Manufacturing", + "marketing": "Marketing", + "nonprofit": "Nonprofit", + "personalUse": "Personal use", + "salesCRM": "Sales & CRM", + "serviceConsulting": "Service & Consulting", + "softwareDevelopment": "Software Development", + "description": "Description", + "phase": "Phase", + "statuses": "Statuses", + "priorities": "Priorities", + "labels": "Labels", + "tasks": "Tasks" +} diff --git a/worklenz-backend/src/public/locales/en/time-report.json b/worklenz-backend/src/public/locales/en/time-report.json new file mode 100644 index 00000000..00aa3c7f --- /dev/null +++ b/worklenz-backend/src/public/locales/en/time-report.json @@ -0,0 +1,57 @@ +{ + "includeArchivedProjects": "Include Archived Projects", + "export": "Export", + "timeSheet": "Time Sheet", + + "searchByName": "Search by name", + "selectAll": "Select All", + "teams": "Teams", + + "searchByProject": "Search by project name", + "projects": "Projects", + + "searchByCategory": "Search by category name", + "categories": "Categories", + + "billable": "Billable", + "nonBillable": "Non Billable", + + "total": "Total", + + "projectsTimeSheet": "Projects Time Sheet", + + "loggedTime": "Logged Time(hours)", + + "exportToExcel": "Export to Excel", + "logged": "logged", + "for": "for", + + "membersTimeSheet": "Members Time Sheet", + "member": "Member", + + "estimatedVsActual": "Estimated vs Actual", + "workingDays": "Working Days", + "manDays": "Man Days", + "days": "Days", + "estimatedDays": "Estimated Days", + "actualDays": "Actual Days", + + "noCategories": "No categories found", + "noCategory": "No Category", + "noProjects": "No projects found", + "noTeams": "No teams found", + "noData": "No data found", + + "groupBy": "Group by", + "groupByCategory": "Category", + "groupByTeam": "Team", + "groupByStatus": "Status", + "groupByNone": "None", + "clearSearch": "Clear search", + "selectedProjects": "Selected Projects", + "projectsSelected": "projects selected", + "showSelected": "Show Selected Only", + "expandAll": "Expand All", + "collapseAll": "Collapse All", + "ungrouped": "Ungrouped" +} diff --git a/worklenz-backend/src/public/locales/en/unauthorized.json b/worklenz-backend/src/public/locales/en/unauthorized.json new file mode 100644 index 00000000..5233250a --- /dev/null +++ b/worklenz-backend/src/public/locales/en/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "Unauthorized!", + "subtitle": "You are not authorized to access this page", + "button": "Go to Home" +} diff --git a/worklenz-backend/src/public/locales/es/404-page.json b/worklenz-backend/src/public/locales/es/404-page.json new file mode 100644 index 00000000..9413ae9e --- /dev/null +++ b/worklenz-backend/src/public/locales/es/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "Lo sentimos, la página que visitaste no existe.", + "backHomeButton": "Volver al inicio" +} diff --git a/worklenz-backend/src/public/locales/es/account-setup.json b/worklenz-backend/src/public/locales/es/account-setup.json new file mode 100644 index 00000000..3f7b013e --- /dev/null +++ b/worklenz-backend/src/public/locales/es/account-setup.json @@ -0,0 +1,32 @@ +{ + "continue": "Continuar", + + "setupYourAccount": "Configura tu cuenta.", + "organizationStepTitle": "Nombra tu organización", + "organizationStepLabel": "Elige un nombre para tu cuenta de Worklenz.", + + "projectStepTitle": "Crea tu primer proyecto", + "projectStepLabel": "¿En qué proyecto estás trabajando ahora?", + "projectStepPlaceholder": "e.g. Plan de Marketing", + + "step2Title": "Crea tus primeras tareas", + "step2InputLabel": "Escribe algunas tareas que vas a hacer en", + "step2AddAnother": "Agregar otro", + + "emailPlaceholder": "Dirección de correo electrónico", + "invalidEmail": "Por favor, introduce una dirección de correo electrónico válida", + "or": "o", + "templateButton": "Importar desde plantilla", + "goBack": "Volver", + "cancel": "Cancelar", + "create": "Crear", + "templateDrawerTitle": "Seleccionar de plantillas", + "step3InputLabel": "Invitar por correo electrónico", + "addAnother": "Agregar otro", + "skipForNow": "Omitir por ahora", + "formTitle": "Crea tu primera tarea.", + "step3Title": "Invita a tu equipo a trabajar", + + "maxMembers": " (Puedes invitar hasta 5 miembros)", + "maxTasks": " (Puedes crear hasta 5 tareas)" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/current-bill.json b/worklenz-backend/src/public/locales/es/admin-center/current-bill.json new file mode 100644 index 00000000..52a4bdbb --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/current-bill.json @@ -0,0 +1,113 @@ +{ + "title": "Facturación", + "currentBill": "Factura Actual", + "configuration": "Configuración", + "currentPlanDetails": "Detalles del Plan Actual", + "upgradePlan": "Actualizar Plan", + "cardBodyText01": "Prueba gratuita", + "cardBodyText02": "(Tu plan de prueba expira en 1 mes 19 días)", + "redeemCode": "Canjear Código", + "accountStorage": "Almacenamiento de la Cuenta", + "used": "Usado:", + "remaining": "Restante:", + "charges": "Cargos", + "tooltip": "Cargos para el ciclo de facturación actual", + "description": "Descripción", + "billingPeriod": "Periodo de Facturación", + "billStatus": "Estado de la Factura", + "perUserValue": "Valor por Usuario", + "users": "Usuarios", + "amount": "Cantidad", + "invoices": "Facturas", + "transactionId": "ID de Transacción", + "transactionDate": "Fecha de Transacción", + "paymentMethod": "Método de Pago", + "status": "Estado", + "ltdUsers": "Puedes agregar hasta {{ltd_users}} usuarios.", + + "drawerTitle": "Canjear Código", + "label": "Canjear Código", + "drawerPlaceholder": "Ingrese su código de canje", + "redeemSubmit": "Enviar", + + "modalTitle": "Seleccione el mejor plan para su equipo", + "seatLabel": "Número de asientos", + "freePlan": "Plan Gratuito", + "startup": "Startup", + "business": "Negocio", + "tag": "Más Popular", + "enterprise": "Empresa", + + "freeSubtitle": "gratis para siempre", + "freeUsers": "Mejor para uso personal", + "freeText01": "100MB de almacenamiento", + "freeText02": "3 proyectos", + "freeText03": "5 miembros del equipo", + + "startupSubtitle": "TARIFA PLANa / mes", + "startupUsers": "Hasta 15 usuarios", + "startupText01": "25GB de almacenamiento", + "startupText02": "Proyectos activos ilimitados", + "startupText03": "Programación", + "startupText04": "Informes", + "startupText05": "Suscribirse a proyectos", + + "businessSubtitle": "usuario / mes", + "businessUsers": "16 - 200 usuarios", + + "enterpriseUsers": "200 - 500+ usuarios", + + "footerTitle": "Por favor, proporciónenos un número de teléfono que podamos usar para contactarte.", + "footerLabel": "Número de Teléfono", + "footerButton": "Contactarnos", + + "redeemCodePlaceHolder": "Ingrese su código de canje", + "submit": "Enviar", + + "trialPlan": "Plan de Prueba", + "trialExpireDate": "Válido hasta {{trial_expire_date}}", + "trialExpired": "Su prueba gratuita expiró {{trial_expire_string}}", + "trialInProgress": "Su prueba gratuita expira {{trial_expire_string}}", + + "required": "Este campo es requerido", + "invalidCode": "Código inválido", + + "selectPlan": "Seleccione el mejor plan para su equipo", + "changeSubscriptionPlan": "Cambie su plan de suscripción", + "noOfSeats": "Número de asientos", + "annualPlan": "Pro - Anual", + "monthlyPlan": "Pro - Mensual", + "freeForever": "Gratis para siempre", + "bestForPersonalUse": "Mejor para uso personal", + "storage": "Almacenamiento", + "projects": "Proyectos", + "teamMembers": "Miembros del equipo", + "unlimitedTeamMembers": "Miembros del equipo ilimitados", + "unlimitedActiveProjects": "Proyectos activos ilimitados", + "schedule": "Programación", + "reporting": "Informes", + "subscribeToProjects": "Suscribirse a proyectos", + "billedAnnually": "Facturado Anualmente", + "billedMonthly": "Facturado Mensualmente", + + "pausePlan": "Pausar Plan", + "resumePlan": "Reanudar Plan", + "changePlan": "Cambiar Plan", + "cancelPlan": "Cancelar Plan", + + "perMonthPerUser": "por usuario / mes", + "viewInvoice": "Ver Factura", + "switchToFreePlan": "Cambiar a Plan Gratuito", + + "expirestoday": "hoy", + "expirestomorrow": "mañana", + "expiredDaysAgo": "hace {{days}} días", + "creditPlan": "Plan de Crédito", + "customPlan": "Plan Personalizado", + "planValidTill": "Su plan es válido hasta {{date}}", + "purchaseSeatsText": "Para continuar, deberá comprar asientos adicionales.", + "currentSeatsText": "Actualmente tiene {{seats}} asientos disponibles.", + "selectSeatsText": "Seleccione el número de asientos adicionales a comprar.", + "purchase": "Comprar", + "contactSales": "Contactar ventas" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/overview.json b/worklenz-backend/src/public/locales/es/admin-center/overview.json new file mode 100644 index 00000000..f88dbdf6 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "Resumen", + "name": "Nombre de la Organización", + "owner": "Propietario de la Organización", + "admins": "Administradores de la Organización", + "contactNumber": "Agregar Número de Contacto", + "edit": "Editar" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/projects.json b/worklenz-backend/src/public/locales/es/admin-center/projects.json new file mode 100644 index 00000000..ab28374f --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "Cantidad de miembros", + "createdAt": "Creado en", + "projectName": "Nombre del proyecto", + "teamName": "Nombre del equipo", + "refreshProjects": "Refrescar proyectos", + "searchPlaceholder": "Buscar por nombre de proyecto", + "deleteProject": "¿Estás seguro de que deseas eliminar este proyecto?", + "confirm": "Confirmar", + "cancel": "Cancelar", + "delete": "Eliminar proyecto" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/sidebar.json b/worklenz-backend/src/public/locales/es/admin-center/sidebar.json new file mode 100644 index 00000000..7626302c --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Resumen", + "users": "Usuarios", + "teams": "Equipos", + "billing": "Facturación", + "projects": "Proyectos", + "adminCenter": "Centro de Administración" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/teams.json b/worklenz-backend/src/public/locales/es/admin-center/teams.json new file mode 100644 index 00000000..13453656 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/teams.json @@ -0,0 +1,35 @@ +{ + "title": "Equipos", + "subtitle": "equipos", + "tooltip": "Actualizar equipos", + "placeholder": "Buscar por nombre", + "addTeam": "Agregar Equipo", + "team": "Equipo", + "membersCount": "Cantidad de Miembros", + "members": "Miembros", + "drawerTitle": "Crear Nuevo Equipo", + "label": "Nombre del Equipo", + "drawerPlaceholder": "Nombre", + "create": "Crear", + "delete": "Eliminar", + "settings": "Configuración", + "popTitle": "¿Está seguro?", + "message": "Por favor ingrese un nombre", + "teamSettings": "Configuración del Equipo", + "teamName": "Nombre del Equipo", + "teamDescription": "Descripción del Equipo", + "teamMembers": "Miembros del Equipo", + "teamMembersCount": "Cantidad de Miembros del Equipo", + "teamMembersPlaceholder": "Buscar por nombre", + "addMember": "Agregar Miembro", + "add": "Agregar", + "update": "Actualizar", + "teamNamePlaceholder": "Nombre del Equipo", + "user": "Usuario", + "role": "Rol", + "owner": "Propietario", + "admin": "Administrador", + "member": "Miembro", + "cannotChangeOwnerRole": "El rol de Propietario no puede ser cambiado", + "pendingInvitation": "Invitación pendiente" +} diff --git a/worklenz-backend/src/public/locales/es/admin-center/users.json b/worklenz-backend/src/public/locales/es/admin-center/users.json new file mode 100644 index 00000000..05626c3b --- /dev/null +++ b/worklenz-backend/src/public/locales/es/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "Usuarios", + "subTitle": "usuarios", + "placeholder": "Buscar por nombre", + "user": "Usuario", + "email": "Correo electrónico", + "lastActivity": "Última actividad", + "refresh": "Actualizar usuarios" +} diff --git a/worklenz-backend/src/public/locales/es/all-project-list.json b/worklenz-backend/src/public/locales/es/all-project-list.json new file mode 100644 index 00000000..4a72d9c7 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "Nombre", + "client": "Cliente", + "category": "Categoría", + "status": "Estado", + "tasksProgress": "Progreso de Tareas", + "updated_at": "Última Actualización", + "members": "Miembros", + "setting": "Configuración", + "projects": "Proyectos", + "refreshProjects": "Actualizar proyectos", + "all": "Todos", + "favorites": "Favoritos", + "archived": "Archivados", + "placeholder": "Buscar por nombre", + "archive": "Archivar", + "unarchive": "Desarchivar", + "archiveConfirm": "¿Está seguro de que desea archivar este proyecto?", + "unarchiveConfirm": "¿Está seguro de que desea desarchivar este proyecto?", + "yes": "Sí", + "no": "No", + "clickToFilter": "Haga clic para filtrar por", + "noProjects": "No se encontraron proyectos", + "addToFavourites": "Agregar a favoritos", + "list": "Lista", + "group": "Grupo", + "listView": "Vista de Lista", + "groupView": "Vista de Grupo", + "groupBy": { + "category": "Categoría", + "client": "Cliente" + }, + "noPermission": "No tienes permiso para realizar esta acción" +} diff --git a/worklenz-backend/src/public/locales/es/auth/auth-common.json b/worklenz-backend/src/public/locales/es/auth/auth-common.json new file mode 100644 index 00000000..6539ec51 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "Cerrando sesión...", + "authenticating": "Autenticando...", + "gettingThingsReady": "Preparando todo para ti..." +} diff --git a/worklenz-backend/src/public/locales/es/auth/forgot-password.json b/worklenz-backend/src/public/locales/es/auth/forgot-password.json new file mode 100644 index 00000000..5ba75336 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "Restablecer tu contraseña", + "emailLabel": "Correo electrónico", + "emailPlaceholder": "Ingresa tu correo electrónico", + "emailRequired": "¡Por favor ingresa tu correo electrónico!", + "resetPasswordButton": "Restablecer Contraseña", + "returnToLoginButton": "Volver al Inicio de Sesión", + "passwordResetSuccessMessage": "Se ha enviado un enlace para restablecer la contraseña a tu correo electrónico.", + "orText": "O", + "successTitle": "¡Instrucciones de restablecimiento enviadas!", + "successMessage": "La información de restablecimiento se ha enviado a tu correo electrónico. Por favor, verifica tu correo." +} diff --git a/worklenz-backend/src/public/locales/es/auth/login.json b/worklenz-backend/src/public/locales/es/auth/login.json new file mode 100644 index 00000000..8c1697f8 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "Inicia sesión en tu cuenta", + "emailLabel": "Correo electrónico", + "emailPlaceholder": "Ingresa tu correo electrónico", + "emailRequired": "¡Por favor ingresa tu correo electrónico!", + "passwordLabel": "Contraseña", + "passwordPlaceholder": "Ingresa tu contraseña", + "passwordRequired": "¡Por favor ingresa tu contraseña!", + "rememberMe": "Recordarme", + "loginButton": "Iniciar sesión", + "signupButton": "Registrarse", + "forgotPasswordButton": "¿Olvidaste tu contraseña?", + "signInWithGoogleButton": "Iniciar sesión con Google", + "successMessage": "¡Has iniciado sesión exitosamente!", + "dontHaveAccountText": "¿No tienes una cuenta?", + "orText": "O", + "loginError": "Iniciar sesión falló", + "googleLoginError": "Iniciar sesión con Google falló", + "validationMessages": { + "password": "La contraseña debe tener al menos 8 caracteres", + "email": "Por favor ingresa una dirección de correo electrónico válida" + }, + "errorMessages": { + "loginErrorTitle": "Iniciar sesión falló", + "loginErrorMessage": "Por favor verifica tu correo electrónico y contraseña y vuelve a intentarlo" + } +} diff --git a/worklenz-backend/src/public/locales/es/auth/signup.json b/worklenz-backend/src/public/locales/es/auth/signup.json new file mode 100644 index 00000000..465ff287 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "Regístrate para comenzar", + "nameLabel": "Nombre completo", + "namePlaceholder": "Ingresa tu nombre completo", + "nameRequired": "¡Por favor ingresa tu nombre completo!", + "nameMinCharacterRequired": "¡El nombre completo debe tener al menos 4 caracteres!", + "emailLabel": "Correo electrónico", + "emailPlaceholder": "Ingresa tu correo electrónico", + "emailRequired": "¡Por favor ingresa tu correo electrónico!", + "passwordLabel": "Contraseña", + "passwordPlaceholder": "Ingresa tu contraseña", + "passwordRequired": "¡Por favor ingresa tu contraseña!", + "passwordMinCharacterRequired": "¡La contraseña debe tener al menos 8 caracteres!", + "passwordPatternRequired": "¡La contraseña no cumple con los requisitos!", + "strongPasswordPlaceholder": "Ingresa una contraseña más segura", + "passwordValidationAltText": "La contraseña debe incluir al menos 8 caracteres con letras mayúsculas y minúsculas, un número y un símbolo.", + "signupSuccessMessage": "¡Te has registrado exitosamente!", + "privacyPolicyLink": "Política de Privacidad", + "termsOfUseLink": "Términos de Uso", + "bySigningUpText": "Al registrarte, aceptas nuestra", + "andText": "y", + "signupButton": "Registrarse", + "signInWithGoogleButton": "Iniciar sesión con Google", + "alreadyHaveAccountText": "¿Ya tienes una cuenta?", + "loginButton": "Iniciar sesión", + "orText": "O", + "reCAPTCHAVerificationError": "Error de verificación de reCAPTCHA", + "reCAPTCHAVerificationErrorMessage": "No pudimos verificar tu reCAPTCHA. Por favor, inténtalo de nuevo." +} diff --git a/worklenz-backend/src/public/locales/es/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/es/auth/verify-reset-email.json new file mode 100644 index 00000000..1058bc1c --- /dev/null +++ b/worklenz-backend/src/public/locales/es/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "Verificar correo de restablecimiento", + "description": "Ingresa tu nueva contraseña", + "placeholder": "Ingresa tu nueva contraseña", + "confirmPasswordPlaceholder": "Confirma tu nueva contraseña", + "passwordHint": "Mínimo 8 caracteres, con mayúsculas y minúsculas, un número y un símbolo.", + "resetPasswordButton": "Restablecer contraseña", + "orText": "O", + "resendResetEmail": "Reenviar correo de restablecimiento", + "passwordRequired": "Por favor ingresa tu nueva contraseña", + "returnToLoginButton": "Volver al inicio de sesión", + "confirmPasswordRequired": "Por favor confirma tu nueva contraseña", + "passwordMismatch": "Las contraseñas no coinciden" +} diff --git a/worklenz-backend/src/public/locales/es/common.json b/worklenz-backend/src/public/locales/es/common.json new file mode 100644 index 00000000..583e8670 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "¡Inicio de sesión exitoso!", + "login-failed": "Error al iniciar sesión. Por favor verifica tus credenciales e intenta nuevamente.", + "signup-success": "¡Registro exitoso! Bienvenido a bordo.", + "signup-failed": "Error al registrarse. Por favor asegúrate de llenar todos los campos requeridos e intenta nuevamente.", + "reconnecting": "Reconectando al servidor...", + "connection-lost": "Conexión perdida. Intentando reconectarse...", + "connection-restored": "Conexión restaurada. Reconectando al servidor..." +} diff --git a/worklenz-backend/src/public/locales/es/create-first-project-form.json b/worklenz-backend/src/public/locales/es/create-first-project-form.json new file mode 100644 index 00000000..4382cda5 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "Crea tu primer proyecto", + "inputLabel": "¿En qué proyecto estás trabajando ahora?", + "or": "o", + "templateButton": "Importar desde plantilla", + "createFromTemplate": "Crear desde plantilla", + "goBack": "Volver", + "continue": "Continuar", + "cancel": "Cancelar", + "create": "Crear", + "templateDrawerTitle": "Seleccionar de plantillas", + "createProject": "Crear proyecto" +} diff --git a/worklenz-backend/src/public/locales/es/create-first-tasks.json b/worklenz-backend/src/public/locales/es/create-first-tasks.json new file mode 100644 index 00000000..adca7366 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "Crea tu primera tarea.", + "inputLable": "Escribe algunas tareas que vas a hacer en", + "addAnother": "Agregar otra", + "goBack": "Volver", + "continue": "Continuar" +} diff --git a/worklenz-backend/src/public/locales/es/home.json b/worklenz-backend/src/public/locales/es/home.json new file mode 100644 index 00000000..cfd238f9 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/home.json @@ -0,0 +1,45 @@ +{ + "todoList": { + "title": "Lista de tareas", + "refreshTasks": "Actualizar tareas", + "addTask": "+ Agregar tarea", + "noTasks": "Sin tareas", + "pressEnter": "Presiona", + "toCreate": "para crear.", + "markAsDone": "Marcar como hecho" + }, + "projects": { + "title": "Proyectos", + "refreshProjects": "Actualizar proyectos", + "noRecentProjects": "Actualmente no estás asignado a ningún proyecto.", + "noFavouriteProjects": "No hay proyectos marcados como favoritos.", + "recent": "Recientes", + "favourites": "Favoritos" + }, + "tasks": { + "assignedToMe": "Asignadas a mí", + "assignedByMe": "Asignadas por mí", + "all": "Todas", + "today": "Hoy", + "upcoming": "Próximas", + "overdue": "Vencidas", + "noDueDate": "Sin fecha de vencimiento", + "noTasks": "No hay tareas para mostrar.", + "addTask": "+ Agregar tarea", + "name": "Nombre", + "project": "Proyecto", + "status": "Estado", + "dueDate": "Fecha de vencimiento", + "dueDatePlaceholder": "Establecer fecha de vencimiento", + "tomorrow": "Mañana", + "nextWeek": "La semana que viene", + "nextMonth": "El próximo mes", + "projectRequired": "Por favor selecciona un proyecto", + "dueOn": "Tareas vencidas el", + "taskRequired": "Por favor agrega una tarea", + "list": "Lista", + "calendar": "Calendario", + "tasks": "Tareas", + "refresh": "Actualizar" + } +} diff --git a/worklenz-backend/src/public/locales/es/invite-initial-team-members.json b/worklenz-backend/src/public/locales/es/invite-initial-team-members.json new file mode 100644 index 00000000..87fb006c --- /dev/null +++ b/worklenz-backend/src/public/locales/es/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "Invita a tu equipo a trabajar", + "inputLable": "Invitar por correo electrónico", + "addAnother": "Agregar otro", + "goBack": "Volver", + "continue": "Continuar", + "skipForNow": "Omitir por ahora" +} diff --git a/worklenz-backend/src/public/locales/es/kanban-board.json b/worklenz-backend/src/public/locales/es/kanban-board.json new file mode 100644 index 00000000..6e8d5975 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/kanban-board.json @@ -0,0 +1,30 @@ +{ + "rename": "Renombrar", + "delete": "Eliminar", + "addTask": "Agregar tarea", + "addSectionButton": "Agregar sección", + "changeCategory": "Cambiar categoría", + + "deleteTooltip": "Eliminar", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + + "dueDate": "Fecha de vencimiento", + "cancel": "Cancelar", + + "today": "Hoy", + "tomorrow": "Mañana", + "assignToMe": "Asignarme", + "archive": "Archivar", + + "newTaskNamePlaceholder": "Escribe un nombre de tarea", + "newSubtaskNamePlaceholder": "Escribe un nombre de subtarea", + "untitledSection": "Sección sin título", + "unmapped": "Sin asignar", + "clickToChangeDate": "Haz clic para cambiar la fecha", + "noDueDate": "Sin fecha de vencimiento", + "save": "Guardar", + "clear": "Limpiar", + "nextWeek": "Próxima semana" +} diff --git a/worklenz-backend/src/public/locales/es/license-expired.json b/worklenz-backend/src/public/locales/es/license-expired.json new file mode 100644 index 00000000..3cd0de2d --- /dev/null +++ b/worklenz-backend/src/public/locales/es/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "¡Tu prueba de Worklenz ha expirado!", + "subtitle": "Por favor actualiza ahora.", + "button": "Actualizar ahora", + "checking": "Verificando estado de la suscripción..." +} diff --git a/worklenz-backend/src/public/locales/es/navbar.json b/worklenz-backend/src/public/locales/es/navbar.json new file mode 100644 index 00000000..97c79d50 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Logo de Worklenz", + "home": "Inicio", + "projects": "Proyectos", + "schedule": "Calendario", + "reporting": "Informes", + "clients": "Clientes", + "teams": "Equipos", + "labels": "Etiquetas", + "jobTitles": "Cargos", + "upgradePlan": "Actualizar Plan", + "upgradePlanTooltip": "Actualizar Plan", + "invite": "Invitar", + "inviteTooltip": "Invitar miembros al equipo", + "switchTeamTooltip": "Cambiar equipo", + "help": "Ayuda", + "notificationTooltip": "Ver notificaciones", + "profileTooltip": "Ver perfil", + "adminCenter": "Centro de administración", + "settings": "Configuración", + "logOut": "Cerrar sesión", + "notificationsDrawer": { + "read": "Notificaciones leídas", + "unread": "Notificaciones no leídas", + "markAsRead": "Marcar como leído", + "readAndJoin": "Leer y unirse", + "accept": "Aceptar", + "acceptAndJoin": "Aceptar y unirse", + "noNotifications": "Sin notificaciones" + } +} diff --git a/worklenz-backend/src/public/locales/es/organization-name-form.json b/worklenz-backend/src/public/locales/es/organization-name-form.json new file mode 100644 index 00000000..efd60ed7 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "Nombra tu organización.", + "worklenzAccountTitle": "Elige un nombre para tu cuenta de Worklenz.", + "continue": "Continuar" +} diff --git a/worklenz-backend/src/public/locales/es/phases-drawer.json b/worklenz-backend/src/public/locales/es/phases-drawer.json new file mode 100644 index 00000000..e961b068 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "Configurar fases", + "phaseLabel": "Etiqueta de fase", + "enterPhaseName": "Ingrese un nombre para la etiqueta de fase", + "addOption": "Agregar opción", + "phaseOptions": "Opciones de fase:", + "dragToReorderPhases": "Arrastra las fases para reordenarlas. Cada fase puede tener un color diferente.", + "enterNewPhaseName": "Introducir nuevo nombre de fase...", + "addPhase": "Añadir Fase", + "noPhasesFound": "No se encontraron fases. Crea tu primera fase arriba.", + "deletePhase": "Eliminar Fase", + "deletePhaseConfirm": "¿Estás seguro de que quieres eliminar esta fase? Esta acción no se puede deshacer.", + "rename": "Renombrar", + "delete": "Eliminar", + "enterPhaseName": "Introducir nombre de la fase", + "selectColor": "Seleccionar color", + "managePhases": "Gestionar Fases", + "close": "Cerrar" +} diff --git a/worklenz-backend/src/public/locales/es/project-drawer.json b/worklenz-backend/src/public/locales/es/project-drawer.json new file mode 100644 index 00000000..447ad4f1 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-drawer.json @@ -0,0 +1,52 @@ +{ + "createProject": "Crear Proyecto", + "editProject": "Editar Proyecto", + "enterCategoryName": "Ingrese un nombre para la categoría", + "hitEnterToCreate": "¡Presiona enter para crear!", + "enterNotes": "Notas", + "youCanManageClientsUnderSettings": "Puedes gestionar clientes en Configuración", + "addCategory": "Agregar una categoría al proyecto", + "newCategory": "Nueva Categoría", + "notes": "Notas", + "startDate": "Fecha de Inicio", + "endDate": "Fecha de Finalización", + "estimateWorkingDays": "Estimar días de trabajo", + "estimateManDays": "Estimar días de trabajo", + "hoursPerDay": "Horas por día", + "create": "Crear", + "update": "Actualizar", + "delete": "Eliminar", + "typeToSearchClients": "Escribe para buscar clientes", + "projectColor": "Color del Proyecto", + "pleaseEnterAName": "Por favor ingresa un nombre", + "enterProjectName": "Ingresa el nombre del proyecto", + "name": "Nombre", + "status": "Estado", + "health": "Salud", + "category": "Categoría", + "projectManager": "Gerente de Proyecto", + "client": "Cliente", + "deleteConfirmation": "¿Estás seguro de que quieres eliminar?", + "deleteConfirmationDescription": "Esto eliminará todos los datos asociados y no se puede deshacer.", + "yes": "Sí", + "no": "No", + "createdAt": "Creado", + "updatedAt": "Actualizado", + "by": "por", + "add": "Agregar", + "asClient": "como cliente", + "createClient": "Crear cliente", + "searchInputPlaceholder": "Busca por nombre o email", + "hoursPerDayValidationMessage": "Las horas por día deben ser un número entre 1 y 24", + "workingDaysValidationMessage": "Los días de trabajo deben ser un número positivo", + "manDaysValidationMessage": "Los días hombre deben ser un número positivo", + "noPermission": "Sin permiso", + "progressSettings": "Configuración de Progreso", + "manualProgress": "Progreso Manual", + "manualProgressTooltip": "Permitir actualizaciones manuales de progreso para tareas sin subtareas", + "weightedProgress": "Progreso Ponderado", + "weightedProgressTooltip": "Calcular el progreso basado en los pesos de las subtareas", + "timeProgress": "Progreso Basado en Tiempo", + "timeProgressTooltip": "Calcular el progreso basado en el tiempo estimado", + "enterProjectKey": "Ingresa la clave del proyecto" +} diff --git a/worklenz-backend/src/public/locales/es/project-view-files.json b/worklenz-backend/src/public/locales/es/project-view-files.json new file mode 100644 index 00000000..13071a2a --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "Nombre", + "attachedTaskColumn": "Tarea Adjunta", + "sizeColumn": "Tamaño", + "uploadedByColumn": "Subido Por", + "uploadedAtColumn": "Subido El", + "fileIconAlt": "Icono de archivo", + "titleDescriptionText": "Todos los archivos adjuntos a las tareas en este proyecto aparecerán aquí.", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + "segmentedTooltip": "¡Próximamente! Cambiar entre vista de lista y vista de miniaturas.", + "emptyText": "No hay archivos adjuntos en el proyecto." +} diff --git a/worklenz-backend/src/public/locales/es/project-view-insights.json b/worklenz-backend/src/public/locales/es/project-view-insights.json new file mode 100644 index 00000000..bd60b58e --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "Resumen", + "statusOverview": "Resumen de Estado", + "priorityOverview": "Resumen de Prioridad", + "lastUpdatedTasks": "Últimas Tareas Actualizadas" + }, + "members": { + "title": "Miembros", + "tooltip": "Miembros", + "tasksByMembers": "Tareas por miembros", + "tasksByMembersTooltip": "Tareas por miembros", + "name": "Nombre", + "taskCount": "Cantidad de Tareas", + "contribution": "Contribución", + "completed": "Completadas", + "incomplete": "Incompletas", + "overdue": "Atrasadas", + "progress": "Progreso" + }, + "tasks": { + "overdueTasks": "Tareas Atrasadas", + "overLoggedTasks": "Tareas con Exceso de Tiempo", + "tasksCompletedEarly": "Tareas completadas antes de tiempo", + "tasksCompletedLate": "Tareas completadas tarde", + "overLoggedTasksTooltip": "Tareas que tienen tiempo registrado más allá de su tiempo estimado", + "overdueTasksTooltip": "Tareas que están más allá de su fecha límite" + }, + "common": { + "seeAll": "Ver todo", + "totalLoggedHours": "Total de horas registradas", + "totalEstimation": "Estimación total", + "completedTasks": "Tareas completadas", + "incompleteTasks": "Tareas incompletas", + "overdueTasks": "Tareas atrasadas", + "overdueTasksTooltip": "Tareas que están más allá de su fecha límite", + "totalLoggedHoursTooltip": "Estimación de tareas y tiempo registrado para las tareas.", + "includeArchivedTasks": "Incluir Tareas Archivadas", + "export": "Exportar" + } +} diff --git a/worklenz-backend/src/public/locales/es/project-view-members.json b/worklenz-backend/src/public/locales/es/project-view-members.json new file mode 100644 index 00000000..95a8d943 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "Nombre", + "jobTitleColumn": "Cargo", + "emailColumn": "Correo", + "tasksColumn": "Tareas", + "taskProgressColumn": "Progreso de Tareas", + "accessColumn": "Acceso", + "fileIconAlt": "Icono de archivo", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + "refreshButtonTooltip": "Actualizar miembros", + "deleteButtonTooltip": "Eliminar del proyecto", + "memberCount": "Miembro", + "membersCountPlural": "Miembros", + "emptyText": "No hay archivos adjuntos en el proyecto." +} diff --git a/worklenz-backend/src/public/locales/es/project-view-updates.json b/worklenz-backend/src/public/locales/es/project-view-updates.json new file mode 100644 index 00000000..d565fcfc --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "Agregar un comentario..", + "addButton": "Agregar", + "cancelButton": "Cancelar", + "deleteButton": "Eliminar" +} diff --git a/worklenz-backend/src/public/locales/es/project-view.json b/worklenz-backend/src/public/locales/es/project-view.json new file mode 100644 index 00000000..a4c12d9f --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "Lista de Tareas", + "board": "Tablero Kanban", + "insights": "Análisis", + "files": "Archivos", + "members": "Miembros", + "updates": "Actualizaciones", + "projectView": "Vista del Proyecto", + "loading": "Cargando proyecto...", + "error": "Error al cargar el proyecto", + "pinnedTab": "Fijado como pestaña predeterminada", + "pinTab": "Fijar como pestaña predeterminada", + "unpinTab": "Desfijar pestaña predeterminada" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/es/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/es/project-view/import-task-templates.json new file mode 100644 index 00000000..7be1539b --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "Importar plantilla de tarea", + "templateName": "Nombre de la plantilla", + "templateDescription": "Descripción de la plantilla", + "selectedTasks": "Tareas seleccionadas", + "tasks": "Tareas", + "templates": "Plantillas", + "remove": "Eliminar", + "cancel": "Cancelar", + "import": "Importar" +} diff --git a/worklenz-backend/src/public/locales/es/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/es/project-view/project-member-drawer.json new file mode 100644 index 00000000..ab7570fd --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "Miembros del Proyecto", + "searchLabel": "Agregar miembros ingresando su nombre o correo electrónico", + "searchPlaceholder": "Escriba nombre o correo electrónico", + "inviteAsAMember": "Invitar como miembro", + "inviteNewMemberByEmail": "Invitar nuevo miembro por correo electrónico" +} diff --git a/worklenz-backend/src/public/locales/es/project-view/project-view-header.json b/worklenz-backend/src/public/locales/es/project-view/project-view-header.json new file mode 100644 index 00000000..0215b89c --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "Importar tareas", + "importTask": "Importar tarea", + "createTask": "Crear tarea", + "settings": "Configuración", + "subscribe": "Suscribirse", + "unsubscribe": "Cancelar suscripción", + "deleteProject": "Eliminar proyecto", + "startDate": "Fecha de inicio", + "endDate": "Fecha de finalización", + "projectSettings": "Configuración del proyecto", + "projectSummary": "Resumen del proyecto", + "receiveProjectSummary": "Recibe un resumen del proyecto cada noche.", + "refreshProject": "Actualizar proyecto", + "saveAsTemplate": "Guardar como plantilla", + "invite": "Invitar", + "share": "Compartir", + "subscribeTooltip": "Suscribirse a notificaciones del proyecto", + "unsubscribeTooltip": "Cancelar suscripción a notificaciones del proyecto", + "refreshTooltip": "Actualizar datos del proyecto", + "settingsTooltip": "Abrir configuración del proyecto", + "saveAsTemplateTooltip": "Guardar este proyecto como plantilla", + "inviteTooltip": "Invitar miembros del equipo a este proyecto", + "createTaskTooltip": "Crear una nueva tarea", + "importTaskTooltip": "Importar tarea desde plantilla", + "navigateBackTooltip": "Volver a la lista de proyectos", + "projectStatusTooltip": "Estado del proyecto", + "projectDatesInfo": "Información de cronograma del proyecto", + "projectCategoryTooltip": "Categoría del proyecto" +} diff --git a/worklenz-backend/src/public/locales/es/project-view/save-as-template.json b/worklenz-backend/src/public/locales/es/project-view/save-as-template.json new file mode 100644 index 00000000..4d7e9354 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "Guardar como Plantilla", + "templateName": "Nombre de la Plantilla", + "includes": "¿Qué se debe incluir en la plantilla del proyecto?", + "includesOptions": { + "statuses": "Estados", + "phases": "Fases", + "labels": "Etiquetas" + }, + "taskIncludes": "¿Qué se debe incluir en la plantilla de las tareas?", + "taskIncludesOptions": { + "statuses": "Estados", + "phases": "Fases", + "labels": "Etiquetas", + "name": "Nombre", + "priority": "Prioridad", + "status": "Estado", + "phase": "Fase", + "label": "Etiqueta", + "timeEstimate": "Estimación de Tiempo", + "description": "Descripción", + "subTasks": "Sub Tasks" + }, + "cancel": "Cancel", + "save": "Save", + "templateNamePlaceholder": "Enter template name" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-members-drawer.json b/worklenz-backend/src/public/locales/es/reporting-members-drawer.json new file mode 100644 index 00000000..fb8ecf20 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-members-drawer.json @@ -0,0 +1,90 @@ +{ + "exportButton": "Exportar", + "timeLogsButton": "Registros de Tiempo", + "activityLogsButton": "Registros de Actividad", + "tasksButton": "Tareas", + "searchByNameInputPlaceholder": "Buscar por nombre", + + "overviewTab": "Resumen", + "timeLogsTab": "Registros de Tiempo", + "activityLogsTab": "Registros de Actividad", + "tasksTab": "Tareas", + + "projectsText": "Proyectos", + "totalTasksText": "Total de Tareas", + "assignedTasksText": "Tareas Asignadas", + "completedTasksText": "Tareas Completadas", + "ongoingTasksText": "Tareas en Curso", + "overdueTasksText": "Tareas Atrasadas", + "loggedHoursText": "Horas Registradas", + + "tasksText": "Tareas", + "allText": "Todo", + + "tasksByProjectsText": "Tareas por Proyectos", + "tasksByStatusText": "Tareas por Estado", + "tasksByPriorityText": "Tareas por Prioridad", + + "todoText": "Por Hacer", + "doingText": "Haciendo", + "doneText": "Hecho", + "lowText": "Baja", + "mediumText": "Media", + "highText": "Alta", + + "billableButton": "Facturable", + "billableText": "Facturable", + "nonBillableText": "No Facturable", + + "timeLogsEmptyPlaceholder": "No hay registros de tiempo para mostrar", + "loggedText": "Registrado", + "forText": "para", + "inText": "en", + "updatedText": "Actualizado", + "fromText": "Desde", + "toText": "hasta", + "withinText": "dentro de", + + "activityLogsEmptyPlaceholder": "No hay registros de actividad para mostrar", + + "filterByText": "Filtrar por:", + "selectProjectPlaceholder": "Seleccionar Proyecto", + + "taskColumn": "Tarea", + "nameColumn": "Nombre", + "projectColumn": "Proyecto", + "statusColumn": "Estado", + "priorityColumn": "Prioridad", + "dueDateColumn": "Fecha de Vencimiento", + "completedDateColumn": "Fecha de Finalización", + "estimatedTimeColumn": "Tiempo Estimado", + "loggedTimeColumn": "Tiempo Registrado", + "overloggedTimeColumn": "Tiempo Excedido", + "daysLeftColumn": "Días Restantes/Atrasados", + "startDateColumn": "Fecha de Inicio", + "endDateColumn": "Fecha de Fin", + "actualTimeColumn": "Tiempo Real", + "projectHealthColumn": "Salud del Proyecto", + "categoryColumn": "Categoría", + "projectManagerColumn": "Gerente de Proyecto", + + "tasksStatsOverviewDrawerTitle": "Tareas de", + "projectsStatsOverviewDrawerTitle": "Proyectos de", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "En Espera", + "proposedText": "Propuesto", + "inPlanningText": "En Planificación", + "inProgressText": "En Progreso", + "completedText": "Completado", + "continuousText": "Continuo", + + "daysLeftText": "días restantes", + "daysOverdueText": "días de retraso", + + "notSetText": "No Establecido", + "needsAttentionText": "Necesita Atención", + "atRiskText": "En Riesgo", + "goodText": "Bien" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-members.json b/worklenz-backend/src/public/locales/es/reporting-members.json new file mode 100644 index 00000000..d87cafb8 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-members.json @@ -0,0 +1,35 @@ +{ + "yesterdayText": "Ayer", + "lastSevenDaysText": "Últimos 7 Días", + "lastWeekText": "Última Semana", + "lastThirtyDaysText": "Últimos 30 Días", + "lastMonthText": "Último Mes", + "lastThreeMonthsText": "Últimos 3 Meses", + "allTimeText": "Todo el Tiempo", + "customRangeText": "Rango personalizado", + "startDateInputPlaceholder": "Fecha de inicio", + "EndDateInputPlaceholder": "Fecha final", + "filterButton": "Filtrar", + + "membersTitle": "Miembros", + "includeArchivedButton": "Incluir Proyectos Archivados", + "exportButton": "Exportar", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "Buscar por nombre", + + "memberColumn": "Miembro", + "tasksProgressColumn": "Progreso de Tareas", + "tasksAssignedColumn": "Tareas Asignadas", + "completedTasksColumn": "Tareas Completadas", + "overdueTasksColumn": "Tareas Atrasadas", + "ongoingTasksColumn": "Tareas en Curso", + + "tasksAssignedColumnTooltip": "Tareas asignadas en el rango de fechas seleccionado", + "overdueTasksColumnTooltip": "Tareas atrasadas al final del rango de fechas seleccionado", + "completedTasksColumnTooltip": "Tareas completadas en el rango de fechas seleccionado", + "ongoingTasksColumnTooltip": "Tareas iniciadas aún no completadas", + + "todoText": "Por Hacer", + "doingText": "Haciendo", + "doneText": "Hecho" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/es/reporting-overview-drawer.json new file mode 100644 index 00000000..fce8e554 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-overview-drawer.json @@ -0,0 +1,39 @@ +{ + "exportButton": "Exportar", + "projectsButton": "Proyectos", + "membersButton": "Miembros", + "searchByNameInputPlaceholder": "Buscar por nombre", + + "overviewTab": "Resumen", + "projectsTab": "Proyectos", + "membersTab": "Miembros", + + "projectsByStatusText": "Proyectos por Estado", + "projectsByCategoryText": "Proyectos por Categoría", + "projectsByHealthText": "Proyectos por Salud", + + "projectsText": "Proyectos", + "allText": "Todo", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "En Espera", + "proposedText": "Propuesto", + "inPlanningText": "En Planificación", + "inProgressText": "En Progreso", + "completedText": "Completado", + "continuousText": "Continuo", + + "notSetText": "No Establecido", + "needsAttentionText": "Necesita Atención", + "atRiskText": "En Riesgo", + "goodText": "Bien", + + "nameColumn": "Nombre", + "emailColumn": "Correo", + "projectsColumn": "Proyectos", + "tasksColumn": "Tareas", + "overdueTasksColumn": "Tareas Atrasadas", + "completedTasksColumn": "Tareas Completadas", + "ongoingTasksColumn": "Tareas en Curso" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-overview.json b/worklenz-backend/src/public/locales/es/reporting-overview.json new file mode 100644 index 00000000..3f18fbed --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-overview.json @@ -0,0 +1,25 @@ +{ + "overviewTitle": "Resumen", + "includeArchivedButton": "Incluir Proyectos Archivados", + + "teamCount": "Equipo", + "teamCountPlural": "Equipos", + "projectCount": "Proyecto", + "projectCountPlural": "Proyectos", + "memberCount": "Miembro", + "memberCountPlural": "Miembros", + "activeProjectCount": "Proyecto Activo", + "activeProjectCountPlural": "Proyectos Activos", + "overdueProjectCount": "Proyecto Atrasado", + "overdueProjectCountPlural": "Proyectos Atrasados", + "unassignedMemberCount": "Miembro Sin Asignar", + "unassignedMemberCountPlural": "Miembros Sin Asignar", + "memberWithOverdueTaskCount": "Miembro Con Tarea Atrasada", + "memberWithOverdueTaskCountPlural": "Miembros Con Tareas Atrasadas", + + "teamsText": "Equipos", + + "nameColumn": "Nombre", + "projectsColumn": "Proyectos", + "membersColumn": "Miembros" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/es/reporting-projects-drawer.json new file mode 100644 index 00000000..1e056a29 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-projects-drawer.json @@ -0,0 +1,59 @@ +{ + "exportButton": "Exportar", + "membersButton": "Miembros", + "tasksButton": "Tareas", + "searchByNameInputPlaceholder": "Buscar por nombre", + + "overviewTab": "Resumen", + "membersTab": "Miembros", + "tasksTab": "Tareas", + + "completedTasksText": "Tareas Completadas", + "incompleteTasksText": "Tareas Incompletas", + "overdueTasksText": "Tareas Atrasadas", + "allocatedHoursText": "Horas Asignadas", + "loggedHoursText": "Horas Registradas", + + "tasksText": "Tareas", + "allText": "Todos", + + "tasksByStatusText": "Tareas por Estado", + "tasksByPriorityText": "Tareas por Prioridad", + "tasksByDueDateText": "Tareas por Fecha de Vencimiento", + + "todoText": "Por Hacer", + "doingText": "En Proceso", + "doneText": "Hecho", + "lowText": "Baja", + "mediumText": "Media", + "highText": "Alta", + "completedText": "Completado", + "upcomingText": "Próximo", + "overdueText": "Atrasado", + "noDueDateText": "Sin Fecha de Vencimiento", + + "nameColumn": "Nombre", + "tasksCountColumn": "Cantidad de Tareas", + "completedTasksColumn": "Tareas Completadas", + "incompleteTasksColumn": "Tareas Incompletas", + "overdueTasksColumn": "Tareas Atrasadas", + "contributionColumn": "Contribución", + "progressColumn": "Progreso", + "loggedTimeColumn": "Tiempo Registrado", + "taskColumn": "Tarea", + "projectColumn": "Proyecto", + "statusColumn": "Estado", + "priorityColumn": "Prioridad", + "phaseColumn": "Fase", + "dueDateColumn": "Fecha de Vencimiento", + "completedDateColumn": "Fecha de Finalización", + "estimatedTimeColumn": "Tiempo Estimado", + "overloggedTimeColumn": "Tiempo Excedido", + "completedOnColumn": "Completado El", + "daysOverdueColumn": "Días de Retraso", + + "groupByText": "Agrupar Por:", + "statusText": "Estado", + "priorityText": "Prioridad", + "phaseText": "Fase" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-projects-filters.json b/worklenz-backend/src/public/locales/es/reporting-projects-filters.json new file mode 100644 index 00000000..1a4df4af --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-projects-filters.json @@ -0,0 +1,35 @@ +{ + "searchByNamePlaceholder": "Buscar por nombre", + "searchByCategoryPlaceholder": "Buscar por categoría", + + "statusText": "Estado", + "healthText": "Salud", + "categoryText": "Categoría", + "projectManagerText": "Gerente de Proyecto", + "showFieldsText": "Mostrar campos", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "En Espera", + "proposedText": "Propuesto", + "inPlanningText": "En Planificación", + "inProgressText": "En Progreso", + "completedText": "Completado", + "continuousText": "Continuo", + + "notSetText": "No Establecido", + "needsAttentionText": "Necesita Atención", + "atRiskText": "En Riesgo", + "goodText": "Bien", + + "nameText": "Proyecto", + "estimatedVsActualText": "Estimado vs Real", + "tasksProgressText": "Progreso de Tareas", + "lastActivityText": "Última Actividad", + "datesText": "Fechas de Inicio/Fin", + "daysLeftText": "Días Restantes/Atrasados", + "projectHealthText": "Salud del Proyecto", + "projectUpdateText": "Actualización del Proyecto", + "clientText": "Cliente", + "teamText": "Equipo" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-projects.json b/worklenz-backend/src/public/locales/es/reporting-projects.json new file mode 100644 index 00000000..fbd9283f --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-projects.json @@ -0,0 +1,52 @@ +{ + "projectCount": "Proyecto", + "projectCountPlural": "Proyectos", + "includeArchivedButton": "Incluir Proyectos Archivados", + "exportButton": "Exportar", + "excelButton": "Excel", + + "projectColumn": "Proyecto", + "estimatedVsActualColumn": "Estimado vs Real", + "tasksProgressColumn": "Progreso de Tareas", + "lastActivityColumn": "Última Actividad", + "statusColumn": "Estado", + "datesColumn": "Fechas Inicio/Fin", + "daysLeftColumn": "Días Restantes/Atrasados", + "projectHealthColumn": "Salud del Proyecto", + "categoryColumn": "Categoría", + "projectUpdateColumn": "Actualización del Proyecto", + "clientColumn": "Cliente", + "teamColumn": "Equipo", + "projectManagerColumn": "Gerente de Proyecto", + + "openButton": "Abrir", + + "estimatedText": "Estimado", + "actualText": "Real", + + "todoText": "Por Hacer", + "doingText": "En Proceso", + "doneText": "Terminado", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "En Espera", + "proposedText": "Propuesto", + "inPlanningText": "En Planificación", + "inProgressText": "En Progreso", + "completedText": "Completado", + "continuousText": "Continuo", + + "daysLeftText": "días restantes", + "dayLeftText": "día restante", + "daysOverdueText": "días de retraso", + + "notSetText": "No Establecido", + "needsAttentionText": "Necesita Atención", + "atRiskText": "En Riesgo", + "goodText": "Bien", + + "setCategoryText": "Establecer Categoría", + "searchByNameInputPlaceholder": "Buscar por nombre", + "todayText": "Hoy" +} diff --git a/worklenz-backend/src/public/locales/es/reporting-sidebar.json b/worklenz-backend/src/public/locales/es/reporting-sidebar.json new file mode 100644 index 00000000..d5e89788 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overviewText": "Resumen", + "projectsText": "Proyectos", + "membersText": "Miembros", + "timeReportsText": "Informes de Tiempo", + "estimateVsActualText": "Estimado vs Real", + "currentOrganizationTooltip": "Organización actual" +} diff --git a/worklenz-backend/src/public/locales/es/schedule.json b/worklenz-backend/src/public/locales/es/schedule.json new file mode 100644 index 00000000..5b24c1f4 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/schedule.json @@ -0,0 +1,39 @@ +{ + "today": "Hoy", + "week": "Semana", + "month": "Mes", + + "settings": "Configuración", + "workingDays": "Días laborables", + "monday": "Lunes", + "tuesday": "Martes", + "wednesday": "Miércoles", + "thursday": "Jueves", + "friday": "Viernes", + "saturday": "Sábado", + "sunday": "Domingo", + "workingHours": "Horas laborables", + "hours": "horas", + "saveButton": "Guardar", + + "totalAllocation": "Asignación Total", + "timeLogged": "Tiempo Registrado", + "remainingTime": "Tiempo Restante", + "total": "Total", + "perDay": "Por Día", + "tasks": "tareas", + "startDate": "Fecha de Inicio", + "endDate": "Fecha de Fin", + + "hoursPerDay": "Horas Por Día", + "totalHours": "Horas Totales", + "deleteButton": "Eliminar", + "cancelButton": "Cancelar", + + "tabTitle": "Tarea sin Fechas de Inicio y Fin", + + "allocatedTime": "Tiempo Asignado", + "totalLogged": "Total Registrado", + "loggedBillable": "Registrado Facturable", + "loggedNonBillable": "Registrado No Facturable" +} diff --git a/worklenz-backend/src/public/locales/es/settings/appearance.json b/worklenz-backend/src/public/locales/es/settings/appearance.json new file mode 100644 index 00000000..d6b196da --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/appearance.json @@ -0,0 +1,5 @@ +{ + "title": "Apariencia", + "darkMode": "Modo Oscuro", + "darkModeDescription": "Cambia entre el modo claro y oscuro para personalizar tu experiencia visual." +} diff --git a/worklenz-backend/src/public/locales/es/settings/categories.json b/worklenz-backend/src/public/locales/es/settings/categories.json new file mode 100644 index 00000000..417e17dd --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "Category", + "deleteConfirmationTitle": "Are you sure?", + "deleteConfirmationOk": "Yes", + "deleteConfirmationCancel": "Cancel", + "associatedTaskColumn": "Associated Task", + "searchPlaceholder": "Search by name", + "emptyText": "Categories can be created while updating or creating projects.", + "colorChangeTooltip": "Click to change color" +} diff --git a/worklenz-backend/src/public/locales/es/settings/change-password.json b/worklenz-backend/src/public/locales/es/settings/change-password.json new file mode 100644 index 00000000..e52b9aef --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "Cambiar Contraseña", + "currentPassword": "Contraseña Actual", + "newPassword": "Nueva Contraseña", + "confirmPassword": "Confirmar Contraseña", + "currentPasswordPlaceholder": "Introduce tu contraseña actual", + "newPasswordPlaceholder": "Nueva Contraseña", + "confirmPasswordPlaceholder": "Confirmar Contraseña", + "currentPasswordRequired": "¡Por favor, introduce tu contraseña actual!", + "newPasswordRequired": "¡Por favor, introduce tu nueva contraseña!", + "passwordValidationError": "La contraseña debe tener al menos 8 caracteres con una letra mayúscula, un número y un símbolo.", + "passwordMismatch": "¡Las contraseñas no coinciden!", + "passwordRequirements": "La nueva contraseña debe tener un mínimo de 8 caracteres, con una letra mayúscula, un número y un símbolo.", + "updateButton": "Actualizar Contraseña" +} diff --git a/worklenz-backend/src/public/locales/es/settings/clients.json b/worklenz-backend/src/public/locales/es/settings/clients.json new file mode 100644 index 00000000..ca206be1 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "Nombre", + "projectColumn": "Proyecto", + "noProjectsAvailable": "No hay proyectos disponibles", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + "searchPlaceholder": "Buscar por nombre", + "createClient": "Crear Cliente", + "pinTooltip": "Haz clic para fijar esto en el menú principal", + "createClientDrawerTitle": "Crear Cliente", + "updateClientDrawerTitle": "Actualizar Cliente", + "nameLabel": "Nombre", + "namePlaceholder": "Nombre", + "nameRequiredError": "Por favor ingresa un nombre", + "createButton": "Crear", + "updateButton": "Actualizar", + "createClientSuccessMessage": "¡Cliente creado exitosamente!", + "createClientErrorMessage": "¡Error al crear el cliente!", + "updateClientSuccessMessage": "¡Cliente actualizado exitosamente!", + "updateClientErrorMessage": "¡Error al actualizar el cliente!" +} diff --git a/worklenz-backend/src/public/locales/es/settings/job-titles.json b/worklenz-backend/src/public/locales/es/settings/job-titles.json new file mode 100644 index 00000000..1b892d72 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "Nombre", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + "searchPlaceholder": "Buscar por nombre", + "createJobTitleButton": "Crear Cargo", + "pinTooltip": "Haz clic para fijar esto en el menú principal", + "createJobTitleDrawerTitle": "Crear Cargo", + "updateJobTitleDrawerTitle": "Actualizar Cargo", + "nameLabel": "Nombre", + "namePlaceholder": "Nombre", + "nameRequiredError": "Por favor ingresa un nombre", + "createButton": "Crear", + "updateButton": "Actualizar", + "createJobTitleSuccessMessage": "¡Cargo creado exitosamente!", + "createJobTitleErrorMessage": "¡Error al crear el cargo!", + "updateJobTitleSuccessMessage": "¡Cargo actualizado exitosamente!", + "updateJobTitleErrorMessage": "¡Error al actualizar el cargo!" +} diff --git a/worklenz-backend/src/public/locales/es/settings/labels.json b/worklenz-backend/src/public/locales/es/settings/labels.json new file mode 100644 index 00000000..22cd9532 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "Etiqueta", + "deleteConfirmationTitle": "¿Estás seguro?", + "deleteConfirmationOk": "Sí", + "deleteConfirmationCancel": "Cancelar", + "associatedTaskColumn": "Cantidad de Tareas Asociadas", + "searchPlaceholder": "Buscar por nombre", + "emptyText": "Las etiquetas se pueden crear al actualizar o crear tareas.", + "pinTooltip": "Haz clic para fijar esto en el menú principal", + "colorChangeTooltip": "Haz clic para cambiar el color" +} diff --git a/worklenz-backend/src/public/locales/es/settings/language.json b/worklenz-backend/src/public/locales/es/settings/language.json new file mode 100644 index 00000000..e07fd933 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "Idioma", + "language_required": "El idioma es requerido", + "time_zone": "Zona horaria", + "time_zone_required": "La zona horaria es requerida", + "save_changes": "Guardar cambios" +} diff --git a/worklenz-backend/src/public/locales/es/settings/notifications.json b/worklenz-backend/src/public/locales/es/settings/notifications.json new file mode 100644 index 00000000..c7a5af22 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/notifications.json @@ -0,0 +1,10 @@ +{ + "emailTitle": "Enviarme notificaciones por correo electrónico", + "emailDescription": "Esto incluye nuevas asignaciones de tareas", + "dailyDigestTitle": "Enviarme un resumen diario", + "dailyDigestDescription": "Cada tarde, recibirás un resumen de la actividad reciente en las tareas.", + "popupTitle": "Mostrar notificaciones emergentes en mi computadora cuando Worklenz esté abierto", + "popupDescription": "Las notificaciones emergentes pueden ser desactivadas por tu navegador. Cambia la configuración de tu navegador para permitirlas.", + "unreadItemsTitle": "Mostrar el número de elementos no leídos", + "unreadItemsDescription": "Verás contadores para cada notificación." +} diff --git a/worklenz-backend/src/public/locales/es/settings/profile.json b/worklenz-backend/src/public/locales/es/settings/profile.json new file mode 100644 index 00000000..1a1698c8 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "¡Solo puedes subir archivos JPG/PNG!", + "uploadSizeError": "¡La imagen debe ser menor de 2MB!", + "upload": "Subir", + "nameLabel": "Nombre", + "nameRequiredError": "El nombre es obligatorio", + "emailLabel": "Correo electrónico", + "emailRequiredError": "El correo electrónico es obligatorio", + "saveChanges": "Guardar cambios", + "profileJoinedText": "Se unió hace un mes", + "profileLastUpdatedText": "Última actualización hace un mes", + "avatarTooltip": "Haz clic para subir un avatar", + "title": "Configuración del Perfil" +} diff --git a/worklenz-backend/src/public/locales/es/settings/project-templates.json b/worklenz-backend/src/public/locales/es/settings/project-templates.json new file mode 100644 index 00000000..045f2240 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "Nombre", + "editToolTip": "Editar", + "deleteToolTip": "Eliminar", + "confirmText": "¿Estás seguro?", + "okText": "Sí", + "cancelText": "Cancelar" +} diff --git a/worklenz-backend/src/public/locales/es/settings/sidebar.json b/worklenz-backend/src/public/locales/es/settings/sidebar.json new file mode 100644 index 00000000..3793e77f --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/sidebar.json @@ -0,0 +1,15 @@ +{ + "profile": "Perfil", + "notifications": "Notificaciones", + "clients": "Clientes", + "job-titles": "Títulos de trabajo", + "labels": "Etiquetas", + "categories": "Categorías", + "project-templates": "Plantillas de proyectos", + "task-templates": "Plantillas de tareas", + "team-members": "Miembros del equipo", + "teams": "Equipos", + "change-password": "Cambiar contraseña", + "language-and-region": "Idioma y región", + "appearance": "Apariencia" +} diff --git a/worklenz-backend/src/public/locales/es/settings/task-templates.json b/worklenz-backend/src/public/locales/es/settings/task-templates.json new file mode 100644 index 00000000..fbdc3c81 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "Nombre", + "createdColumn": "Creado", + "editToolTip": "Editar", + "deleteToolTip": "Eliminar", + "confirmText": "¿Estás seguro?", + "okText": "Sí", + "cancelText": "Cancelar" +} diff --git a/worklenz-backend/src/public/locales/es/settings/team-members.json b/worklenz-backend/src/public/locales/es/settings/team-members.json new file mode 100644 index 00000000..1000bf98 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "Miembros del Equipo", + "nameColumn": "Nombre", + "projectsColumn": "Proyectos", + "emailColumn": "Correo electrónico", + "teamAccessColumn": "Acceso al equipo", + "memberCount": "Miembro", + "membersCountPlural": "Miembros", + "searchPlaceholder": "Buscar miembros por nombre", + "pinTooltip": "Actualizar lista de miembros", + "addMemberButton": "Agregar nuevo miembro", + "editTooltip": "Editar miembro", + "deactivateTooltip": "Desactivar miembro", + "activateTooltip": "Activar miembro", + "deleteTooltip": "Eliminar miembro", + "confirmDeleteTitle": "¿Está seguro de que desea eliminar este miembro?", + "confirmActivateTitle": "¿Está seguro de que desea cambiar el estado de este miembro?", + "okText": "Sí, continuar", + "cancelText": "No, cancelar", + "deactivatedText": "(Actualmente desactivado)", + "pendingInvitationText": "(Invitación pendiente)", + "addMemberDrawerTitle": "Agregar nuevo miembro del equipo", + "updateMemberDrawerTitle": "Actualizar miembro del equipo", + "addMemberEmailHint": "Los miembros se agregarán al equipo independientemente del estado de aceptación de la invitación", + "memberEmailLabel": "Dirección(es) de correo electrónico", + "memberEmailPlaceholder": "Ingrese la dirección de correo electrónico del miembro del equipo", + "memberEmailRequiredError": "Por favor, ingrese una dirección de correo electrónico válida", + "jobTitleLabel": "Cargo", + "jobTitlePlaceholder": "Seleccione o busque cargo (Opcional)", + "memberAccessLabel": "Nivel de acceso", + "addToTeamButton": "Agregar miembro al equipo", + "updateButton": "Guardar cambios", + "resendInvitationButton": "Reenviar correo de invitación", + "invitationSentSuccessMessage": "¡Invitación al equipo enviada exitosamente!", + "createMemberSuccessMessage": "¡Nuevo miembro del equipo agregado exitosamente!", + "createMemberErrorMessage": "Error al agregar miembro del equipo. Por favor, intente nuevamente.", + "updateMemberSuccessMessage": "¡Miembro del equipo actualizado exitosamente!", + "updateMemberErrorMessage": "Error al actualizar miembro del equipo. Por favor, intente nuevamente.", + "memberText": "Miembro del equipo", + "adminText": "Administrador", + "ownerText": "Propietario del equipo", + "addedText": "Agregado", + "updatedText": "Actualizado", + "noResultFound": "Escriba una dirección de correo electrónico y presione enter...", + "jobTitlesFetchError": "Error al obtener los cargos", + "invitationResent": "¡Invitación reenviada exitosamente!" +} diff --git a/worklenz-backend/src/public/locales/es/settings/teams.json b/worklenz-backend/src/public/locales/es/settings/teams.json new file mode 100644 index 00000000..808c1b78 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "Equipos", + "team": "Equipo", + "teams": "Equipos", + "name": "Nombre", + "created": "Creado", + "ownsBy": "Pertenece a", + "edit": "Editar", + "editTeam": "Editar Equipo", + "pinTooltip": "Haz clic para fijar esto en el menú principal", + "editTeamName": "Editar Nombre del Equipo", + "updateName": "Actualizar Nombre", + "namePlaceholder": "Nombre", + "nameRequired": "Por favor ingresa un Nombre", + "updateFailed": "¡Falló el cambio de nombre del equipo!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..02b3038a --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,30 @@ +{ + "details": { + "task-key": "Clave de tarea", + "phase": "Fase", + "assignees": "Asignados", + "due-date": "Fecha de vencimiento", + "time-estimation": "Estimación de tiempo", + "priority": "Prioridad", + "labels": "Etiquetas", + "billable": "Facturable", + "notify": "Notificar", + "when-done-notify": "Al terminar, notificar", + "start-date": "Fecha de inicio", + "end-date": "Fecha de finalización", + "hide-start-date": "Ocultar fecha de inicio", + "show-start-date": "Mostrar fecha de inicio", + "hours": "Horas", + "minutes": "Minutos", + "recurring": "Recurrente" + }, + "description": { + "title": "Descripción", + "placeholder": "Añadir una descripción más detallada..." + }, + "subTasks": { + "title": "Subtareas", + "add-sub-task": "+ Añadir subtarea", + "refresh-sub-tasks": "Actualizar subtareas" + } +} diff --git a/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-recurring-config.json b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-recurring-config.json new file mode 100644 index 00000000..c1ef9e83 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer-recurring-config.json @@ -0,0 +1,34 @@ +{ + "recurring": "Recurrente", + "recurringTaskConfiguration": "Configuración de tarea recurrente", + "repeats": "Repeticiones", + "daily": "Diario", + "weekly": "Semanal", + "everyXDays": "Cada X días", + "everyXWeeks": "Cada X semanas", + "everyXMonths": "Cada X meses", + "monthly": "Mensual", + "selectDaysOfWeek": "Seleccionar días de la semana", + "mon": "Lun", + "tue": "Mar", + "wed": "Mié", + "thu": "Jue", + "fri": "Vie", + "sat": "Sáb", + "sun": "Dom", + "monthlyRepeatType": "Tipo de repetición mensual", + "onSpecificDate": "En una fecha específica", + "onSpecificDay": "En un día específico", + "dateOfMonth": "Fecha del mes", + "weekOfMonth": "Semana del mes", + "dayOfWeek": "Día de la semana", + "first": "Primero", + "second": "Segundo", + "third": "Tercero", + "fourth": "Cuarto", + "last": "Último", + "intervalDays": "Intervalo (días)", + "intervalWeeks": "Intervalo (semanas)", + "intervalMonths": "Intervalo (meses)", + "saveChanges": "Guardar cambios" +} diff --git a/worklenz-backend/src/public/locales/es/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer.json new file mode 100644 index 00000000..8e438716 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "Escriba su Tarea", + "deleteTask": "Eliminar Tarea" + }, + "taskInfoTab": { + "title": "Información", + "details": { + "title": "Detalles", + "task-key": "Clave de Tarea", + "phase": "Fase", + "assignees": "Asignados", + "due-date": "Fecha de Vencimiento", + "time-estimation": "Estimación de Tiempo", + "priority": "Prioridad", + "labels": "Etiquetas", + "billable": "Facturable", + "notify": "Notificar", + "when-done-notify": "Al terminar, notificar", + "start-date": "Fecha de Inicio", + "end-date": "Fecha de Fin", + "hide-start-date": "Ocultar Fecha de Inicio", + "show-start-date": "Mostrar Fecha de Inicio", + "hours": "Horas", + "minutes": "Minutos", + "progressValue": "Valor de Progreso", + "progressValueTooltip": "Establecer el porcentaje de progreso (0-100%)", + "progressValueRequired": "Por favor, introduzca un valor de progreso", + "progressValueRange": "El progreso debe estar entre 0 y 100", + "taskWeight": "Peso de la Tarea", + "taskWeightTooltip": "Establecer el peso de esta subtarea (porcentaje)", + "taskWeightRequired": "Por favor, introduzca un peso de tarea", + "taskWeightRange": "El peso debe estar entre 0 y 100", + "recurring": "Recurrente" + }, + "labels": { + "labelInputPlaceholder": "Buscar o crear", + "labelsSelectorInputTip": "Presiona Enter para crear" + }, + "description": { + "title": "Descripción", + "placeholder": "Añadir una descripción más detallada..." + }, + "subTasks": { + "title": "Sub Tareas", + "addSubTask": "Agregar Sub Tarea", + "addSubTaskInputPlaceholder": "Escriba su tarea y presione enter", + "refreshSubTasks": "Actualizar Sub Tareas", + "edit": "Editar", + "delete": "Eliminar", + "confirmDeleteSubTask": "¿Está seguro de que desea eliminar esta subtarea?", + "deleteSubTask": "Eliminar Sub Tarea" + }, + "dependencies": { + "title": "Dependencias", + "addDependency": "+ Agregar nueva dependencia", + "blockedBy": "Bloqueado por", + "searchTask": "Escribir para buscar tarea", + "noTasksFound": "No se encontraron tareas", + "confirmDeleteDependency": "¿Está seguro de que desea eliminar?" + }, + "attachments": { + "title": "Adjuntos", + "chooseOrDropFileToUpload": "Elija o arrastre un archivo para subir", + "uploading": "Subiendo..." + }, + "comments": { + "title": "Comentarios", + "addComment": "+ Agregar nuevo comentario", + "noComments": "Aún no hay comentarios. ¡Sé el primero en comentar!", + "delete": "Eliminar", + "confirmDeleteComment": "¿Está seguro de que desea eliminar este comentario?", + "addCommentPlaceholder": "Agregar un comentario...", + "cancel": "Cancelar", + "commentButton": "Comentar", + "attachFiles": "Adjuntar archivos", + "addMoreFiles": "Agregar más archivos", + "selectedFiles": "Archivos Seleccionados (Hasta 25MB, Máximo {count})", + "maxFilesError": "Solo puede subir un máximo de {count} archivos", + "processFilesError": "Error al procesar archivos", + "addCommentError": "Por favor agregue un comentario o adjunte archivos", + "createdBy": "Creado {{time}} por {{user}}", + "updatedTime": "Actualizado {{time}}" + }, + "searchInputPlaceholder": "Buscar por nombre", + "pendingInvitation": "Invitación Pendiente" + }, + "taskTimeLogTab": { + "title": "Registro de Tiempo", + "addTimeLog": "Añadir nuevo registro de tiempo", + "totalLogged": "Total Registrado", + "exportToExcel": "Exportar a Excel", + "noTimeLogsFound": "No se encontraron registros de tiempo", + "timeLogForm": { + "date": "Fecha", + "startTime": "Hora de Inicio", + "endTime": "Hora de Fin", + "workDescription": "Descripción del Trabajo", + "descriptionPlaceholder": "Agregar una descripción", + "logTime": "Registrar tiempo", + "updateTime": "Actualizar tiempo", + "cancel": "Cancelar", + "selectDateError": "Por favor seleccione una fecha", + "selectStartTimeError": "Por favor seleccione la hora de inicio", + "selectEndTimeError": "Por favor seleccione la hora de fin", + "endTimeAfterStartError": "La hora de fin debe ser posterior a la hora de inicio" + } + }, + "taskActivityLogTab": { + "title": "Registro de Actividad", + "add": "AGREGAR", + "remove": "QUITAR", + "none": "Ninguno", + "weight": "Peso", + "createdTask": "creó la tarea." + }, + "taskProgress": { + "markAsDoneTitle": "¿Marcar Tarea como Completada?", + "confirmMarkAsDone": "Sí, marcar como completada", + "cancelMarkAsDone": "No, mantener estado actual", + "markAsDoneDescription": "Ha establecido el progreso al 100%. ¿Le gustaría actualizar el estado de la tarea a \"Completada\"?" + } +} diff --git a/worklenz-backend/src/public/locales/es/task-list-filters.json b/worklenz-backend/src/public/locales/es/task-list-filters.json new file mode 100644 index 00000000..465368f0 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-list-filters.json @@ -0,0 +1,81 @@ +{ + "searchButton": "Buscar", + "resetButton": "Restablecer", + "searchInputPlaceholder": "Buscar por nombre", + + "sortText": "Ordenar", + "statusText": "Estado", + "phaseText": "Fase", + "priorityText": "Prioridad", + "labelsText": "Etiquetas", + "membersText": "Miembros", + "groupByText": "Agrupar por", + "showArchivedText": "Mostrar archivados", + "showFieldsText": "Mostrar campos", + "keyText": "Clave", + "taskText": "Tarea", + "descriptionText": "Descripción", + "phasesText": "Fases", + "progressText": "Progreso", + "timeTrackingText": "Seguimiento de tiempo", + "estimationText": "Estimación", + "startDateText": "Fecha de inicio", + "endDateText": "Fecha de fin", + "dueDateText": "Fecha de vencimiento", + "completedDateText": "Fecha de finalización", + "createdDateText": "Fecha de creación", + "lastUpdatedText": "Última actualización", + "reporterText": "Reportero", + "dueTimeText": "Hora de vencimiento", + "lowText": "Baja", + "mediumText": "Media", + "highText": "Alta", + "assigneesText": "Asignados", + "timetrackingText": "Seguimiento de tiempo", + "startdateText": "Fecha de inicio", + "duedateText": "Fecha de vencimiento", + "completeddateText": "Fecha de finalización", + "createddateText": "Fecha de creación", + "lastupdatedText": "Última actualización", + "duetimeText": "Hora de vencimiento", + "createStatusButtonTooltip": "Configuración de estados", + "configPhaseButtonTooltip": "Configuración de fases", + "noLabelsFound": "No se encontraron etiquetas", + + "addStatusButton": "Agregar estado", + "addPhaseButton": "Agregar fase", + + "createStatus": "Crear estado", + "name": "Nombre", + "category": "Categoría", + "selectCategory": "Seleccionar una categoría", + "pleaseEnterAName": "Por favor, ingrese un nombre", + "pleaseSelectACategory": "Por favor, seleccione una categoría", + "create": "Crear", + + "searchTasks": "Buscar tareas...", + "searchPlaceholder": "Buscar...", + "fieldsText": "Campos", + "loadingFilters": "Cargando filtros...", + "noOptionsFound": "No se encontraron opciones", + "filtersActive": "filtros activos", + "filterActive": "filtro activo", + "clearAll": "Limpiar todo", + "clearing": "Limpiando...", + "cancel": "Cancelar", + "search": "Buscar", + "groupedBy": "Agrupado por", + "manageStatuses": "Gestionar Estados", + "managePhases": "Gestionar Fases", + "dragToReorderStatuses": "Arrastra los estados para reordenarlos. Cada estado puede tener una categoría diferente.", + "enterNewStatusName": "Introducir nuevo nombre de estado...", + "addStatus": "Añadir Estado", + "noStatusesFound": "No se encontraron estados. Crea tu primer estado arriba.", + "deleteStatus": "Eliminar Estado", + "deleteStatusConfirm": "¿Estás seguro de que quieres eliminar este estado? Esta acción no se puede deshacer.", + "rename": "Renombrar", + "delete": "Eliminar", + "enterStatusName": "Introducir nombre del estado", + "selectCategory": "Seleccionar categoría", + "close": "Cerrar" +} diff --git a/worklenz-backend/src/public/locales/es/task-list-table.json b/worklenz-backend/src/public/locales/es/task-list-table.json new file mode 100644 index 00000000..0648c2ff --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-list-table.json @@ -0,0 +1,136 @@ +{ + "keyColumn": "Clave", + "taskColumn": "Tarea", + "descriptionColumn": "Descripción", + "progressColumn": "Progreso", + "membersColumn": "Miembros", + "assigneesColumn": "Asignados", + "labelsColumn": "Etiquetas", + "phasesColumn": "Fases", + "phaseColumn": "Fase", + "statusColumn": "Estado", + "priorityColumn": "Prioridad", + "timeTrackingColumn": "Seguimiento de tiempo", + "timetrackingColumn": "Seguimiento de tiempo", + "estimationColumn": "Estimación", + "startDateColumn": "Fecha de inicio", + "startdateColumn": "Fecha de inicio", + "dueDateColumn": "Fecha de vencimiento", + "duedateColumn": "Fecha de vencimiento", + "completedDateColumn": "Fecha de completado", + "completeddateColumn": "Fecha de completado", + "createdDateColumn": "Fecha de creación", + "createddateColumn": "Fecha de creación", + "lastUpdatedColumn": "Última actualización", + "lastupdatedColumn": "Última actualización", + "reporterColumn": "Reportador", + "dueTimeColumn": "Hora de vencimiento", + "todoSelectorText": "Por hacer", + "doingSelectorText": "En progreso", + "doneSelectorText": "Completado", + + "lowSelectorText": "Baja", + "mediumSelectorText": "Media", + "highSelectorText": "Alta", + + "selectText": "Seleccionar", + "labelsSelectorInputTip": "¡Presiona enter para crear!", + + "addTaskText": "Agregar tarea", + "addSubTaskText": "Agregar subtarea", + "noTasksInGroup": "No hay tareas en este grupo", + "addTaskInputPlaceholder": "Escribe tu tarea y presiona enter", + + "openButton": "Abrir", + "okButton": "Aceptar", + + "noLabelsFound": "No se encontraron etiquetas", + "searchInputPlaceholder": "Buscar o crear", + "assigneeSelectorInviteButton": "Invitar a un nuevo miembro por correo", + "labelInputPlaceholder": "Buscar o crear", + "searchLabelsPlaceholder": "Buscar etiquetas...", + "createLabelButton": "Crear \"{{name}}\"", + "manageLabelsPath": "Configuración → Etiquetas", + + "pendingInvitation": "Invitación pendiente", + + "contextMenu": { + "assignToMe": "Asignar a mí", + "moveTo": "Mover a", + "unarchive": "Desarchivar", + "archive": "Archivar", + "convertToSubTask": "Convertir en subtarea", + "convertToTask": "Convertir en tarea", + "delete": "Eliminar", + "searchByNameInputPlaceholder": "Buscar por nombre" + }, + "setDueDate": "Establecer fecha de vencimiento", + "setStartDate": "Establecer fecha de inicio", + "clearDueDate": "Limpiar fecha de vencimiento", + "clearStartDate": "Limpiar fecha de inicio", + "dueDatePlaceholder": "Fecha de vencimiento", + "startDatePlaceholder": "Fecha de inicio", + + "emptyStates": { + "noTaskGroups": "No se encontraron grupos de tareas", + "noTaskGroupsDescription": "Las tareas aparecerán aquí cuando se creen o cuando se apliquen filtros.", + "errorPrefix": "Error:", + "dragTaskFallback": "Tarea" + }, + + "customColumns": { + "addCustomColumn": "Agregar una columna personalizada", + "customColumnHeader": "Columna Personalizada", + "customColumnSettings": "Configuración de columna personalizada", + "noCustomValue": "Sin valor", + "peopleField": "Campo de personas", + "noDate": "Sin fecha", + "unsupportedField": "Tipo de campo no compatible", + + "modal": { + "addFieldTitle": "Agregar campo", + "editFieldTitle": "Editar campo", + "fieldTitle": "Título del campo", + "fieldTitleRequired": "El título del campo es obligatorio", + "columnTitlePlaceholder": "Título de la columna", + "type": "Tipo", + "deleteConfirmTitle": "¿Está seguro de que desea eliminar esta columna personalizada?", + "deleteConfirmDescription": "Esta acción no se puede deshacer. Todos los datos asociados con esta columna se eliminarán permanentemente.", + "deleteButton": "Eliminar", + "cancelButton": "Cancelar", + "createButton": "Crear", + "updateButton": "Actualizar", + "createSuccessMessage": "Columna personalizada creada exitosamente", + "updateSuccessMessage": "Columna personalizada actualizada exitosamente", + "deleteSuccessMessage": "Columna personalizada eliminada exitosamente", + "deleteErrorMessage": "Error al eliminar la columna personalizada", + "createErrorMessage": "Error al crear la columna personalizada", + "updateErrorMessage": "Error al actualizar la columna personalizada" + }, + + "fieldTypes": { + "people": "Personas", + "number": "Número", + "date": "Fecha", + "selection": "Selección", + "checkbox": "Casilla de verificación", + "labels": "Etiquetas", + "key": "Clave", + "formula": "Fórmula" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} subtarea", + "subtasks_plural": "{{count}} subtareas", + "comments": "{{count}} comentario", + "comments_plural": "{{count}} comentarios", + "attachments": "{{count}} archivo adjunto", + "attachments_plural": "{{count}} archivos adjuntos", + "subscribers": "La tarea tiene suscriptores", + "dependencies": "La tarea tiene dependencias", + "recurring": "Tarea recurrente" + } + } +} diff --git a/worklenz-backend/src/public/locales/es/task-management.json b/worklenz-backend/src/public/locales/es/task-management.json new file mode 100644 index 00000000..1c80304c --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-management.json @@ -0,0 +1,21 @@ +{ + "noTasksInGroup": "No hay tareas en este grupo", + "noTasksInGroupDescription": "Añade una tarea para comenzar", + "addFirstTask": "Añade tu primera tarea", + "openTask": "Abrir", + "subtask": "subtarea", + "subtasks": "subtareas", + "comment": "comentario", + "comments": "comentarios", + "attachment": "adjunto", + "attachments": "adjuntos", + "enterSubtaskName": "Ingresa el nombre de la subtarea...", + "add": "Añadir", + "cancel": "Cancelar", + "renameGroup": "Renombrar Grupo", + "renameStatus": "Renombrar Estado", + "renamePhase": "Renombrar Fase", + "changeCategory": "Cambiar Categoría", + "clickToEditGroupName": "Haz clic para editar el nombre del grupo", + "enterGroupName": "Ingresa el nombre del grupo" +} diff --git a/worklenz-backend/src/public/locales/es/task-template-drawer.json b/worklenz-backend/src/public/locales/es/task-template-drawer.json new file mode 100644 index 00000000..a3bfc45b --- /dev/null +++ b/worklenz-backend/src/public/locales/es/task-template-drawer.json @@ -0,0 +1,11 @@ +{ + "createTaskTemplate": "Crear Plantilla de Tarea", + "editTaskTemplate": "Editar Plantilla de Tarea", + "cancelText": "Cancelar", + "saveText": "Guardar", + "templateNameText": "Nombre de la Plantilla", + "selectedTasks": "Tareas Seleccionadas", + "removeTask": "Eliminar", + "cancelButton": "Cancelar", + "saveButton": "Guardar" +} diff --git a/worklenz-backend/src/public/locales/es/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/es/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..0f98b1a5 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/tasks/task-table-bulk-actions.json @@ -0,0 +1,41 @@ +{ + "taskSelected": "Tarea seleccionada", + "tasksSelected": "Tareas seleccionadas", + "changeStatus": "Cambiar estado/ prioridad/ fases", + "changeLabel": "Cambiar etiqueta", + "assignToMe": "Asignar a mí", + "changeAssignees": "Cambiar asignados", + "archive": "Archivar", + "unarchive": "Desarchivar", + "delete": "Eliminar", + "moreOptions": "Más opciones", + "deselectAll": "Deseleccionar todo", + "status": "Estado", + "priority": "Prioridad", + "phase": "Fase", + "member": "Miembro", + "createTaskTemplate": "Crear plantilla de tarea", + "apply": "Aplicar", + "createLabel": "+ Crear etiqueta", + "searchOrCreateLabel": "Buscar o crear etiqueta...", + "hitEnterToCreate": "Presione Enter para crear", + "labelExists": "La etiqueta ya existe", + "pendingInvitation": "Invitación Pendiente", + "noMatchingLabels": "No hay etiquetas coincidentes", + "noLabels": "Sin etiquetas", + "CHANGE_STATUS": "Cambiar Estado", + "CHANGE_PRIORITY": "Cambiar Prioridad", + "CHANGE_PHASE": "Cambiar Fase", + "ADD_LABELS": "Agregar Etiquetas", + "ASSIGN_TO_ME": "Asignar a Mí", + "ASSIGN_MEMBERS": "Asignar Miembros", + "ARCHIVE": "Archivar", + "DELETE": "Eliminar", + "CANCEL": "Cancelar", + "CLEAR_SELECTION": "Limpiar Selección", + "TASKS_SELECTED": "{{count}} tarea seleccionada", + "TASKS_SELECTED_plural": "{{count}} tareas seleccionadas", + "DELETE_TASKS_CONFIRM": "¿Eliminar {{count}} tarea?", + "DELETE_TASKS_CONFIRM_plural": "¿Eliminar {{count}} tareas?", + "DELETE_TASKS_WARNING": "Esta acción no se puede deshacer." +} diff --git a/worklenz-backend/src/public/locales/es/template-drawer.json b/worklenz-backend/src/public/locales/es/template-drawer.json new file mode 100644 index 00000000..7c6c7f3d --- /dev/null +++ b/worklenz-backend/src/public/locales/es/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "Editar Plantilla de Tarea", + "cancelText": "Cancelar", + "saveText": "Guardar", + "templateNameText": "Nombre de la Plantilla", + "selectedTasks": "Tareas Seleccionadas", + "removeTask": "Eliminar", + "description": "Descripción", + "phase": "Fase", + "statuses": "Estados", + "priorities": "Prioridades", + "labels": "Etiquetas", + "tasks": "Tareas", + "noTemplateSelected": "No hay plantilla seleccionada", + "noDescription": "Sin descripción", + "worklenzTemplates": "Plantillas de Worklenz", + "yourTemplatesLibrary": "Tu Biblioteca", + "searchTemplates": "Buscar Plantillas" +} diff --git a/worklenz-backend/src/public/locales/es/templateDrawer.json b/worklenz-backend/src/public/locales/es/templateDrawer.json new file mode 100644 index 00000000..8028f0cd --- /dev/null +++ b/worklenz-backend/src/public/locales/es/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "Seguimiento de Errores", + "construction": "Construcción", + "designCreative": "Diseño y Creatividad", + "education": "Educación", + "finance": "Finanzas", + "hrRecruiting": "RRHH y Reclutamiento", + "informationTechnology": "Tecnología de la Información", + "legal": "Legal", + "manufacturing": "Fabricación", + "marketing": "Marketing", + "nonprofit": "Sin fines de lucro", + "personalUse": "Uso personal", + "salesCRM": "Ventas y CRM", + "serviceConsulting": "Servicios y Consultoría", + "softwareDevelopment": "Desarrollo de Software", + "description": "Descripción", + "phase": "Fase", + "statuses": "Estados", + "priorities": "Prioridades", + "labels": "Etiquetas", + "tasks": "Tareas" +} diff --git a/worklenz-backend/src/public/locales/es/time-report.json b/worklenz-backend/src/public/locales/es/time-report.json new file mode 100644 index 00000000..2646520f --- /dev/null +++ b/worklenz-backend/src/public/locales/es/time-report.json @@ -0,0 +1,57 @@ +{ + "includeArchivedProjects": "Incluir Proyectos Archivados", + "export": "Exportar", + "timeSheet": "Hoja de Tiempo", + + "searchByName": "Buscar por nombre", + "selectAll": "Seleccionar Todo", + "teams": "Equipos", + + "searchByProject": "Buscar por nombre del proyecto", + "projects": "Proyectos", + + "searchByCategory": "Buscar por nombre de categoría", + "categories": "Categorías", + + "billable": "Facturable", + "nonBillable": "No Facturable", + + "total": "Total", + + "projectsTimeSheet": "Hoja de Tiempo de Proyectos", + + "loggedTime": "Tiempo Registrado(horas)", + + "exportToExcel": "Exportar a Excel", + "logged": "registrado", + "for": "para", + + "membersTimeSheet": "Hoja de Tiempo de Miembros", + "member": "Miembro", + + "estimatedVsActual": "Estimado vs Real", + "workingDays": "Días Laborables", + "manDays": "Días Hombre", + "days": "Días", + "estimatedDays": "Días Estimados", + "actualDays": "Días Reales", + + "noCategories": "No se encontraron categorías", + "noCategory": "Sin Categoría", + "noProjects": "No se encontraron proyectos", + "noTeams": "No se encontraron equipos", + "noData": "No se encontraron datos", + + "groupBy": "Agrupar por", + "groupByCategory": "Categoría", + "groupByTeam": "Equipo", + "groupByStatus": "Estado", + "groupByNone": "Ninguno", + "clearSearch": "Limpiar búsqueda", + "selectedProjects": "Proyectos Seleccionados", + "projectsSelected": "proyectos seleccionados", + "showSelected": "Mostrar Solo Seleccionados", + "expandAll": "Expandir Todo", + "collapseAll": "Contraer Todo", + "ungrouped": "Sin Agrupar" +} diff --git a/worklenz-backend/src/public/locales/es/unauthorized.json b/worklenz-backend/src/public/locales/es/unauthorized.json new file mode 100644 index 00000000..e28ce8f4 --- /dev/null +++ b/worklenz-backend/src/public/locales/es/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "¡No autorizado!", + "subtitle": "No tienes permisos para acceder a esta página", + "button": "Ir a Inicio" +} diff --git a/worklenz-backend/src/public/locales/pt/404-page.json b/worklenz-backend/src/public/locales/pt/404-page.json new file mode 100644 index 00000000..638d30b3 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "Desculpe, a página que você visitou não existe.", + "backHomeButton": "Voltar ao Início" +} diff --git a/worklenz-backend/src/public/locales/pt/account-setup.json b/worklenz-backend/src/public/locales/pt/account-setup.json new file mode 100644 index 00000000..1d8a8cba --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/account-setup.json @@ -0,0 +1,32 @@ +{ + "continue": "Continuar", + + "setupYourAccount": "Configure sua conta.", + "organizationStepTitle": "Nomeie sua organização", + "organizationStepLabel": "Escolha um nome para sua conta Worklenz.", + + "projectStepTitle": "Crie seu primeiro projeto", + "projectStepLabel": "Em qual projeto você está trabalhando agora?", + "projectStepPlaceholder": "ex. Plano de Marketing", + + "step2Title": "Crie suas primeiras tarefas", + "step2InputLabel": "Digite algumas tarefas que você vai fazer em", + "step2AddAnother": "Adicionar outro", + + "emailPlaceholder": "Endereço de e-mail", + "invalidEmail": "Por favor, insira um endereço de e-mail válido", + "or": "ou", + "templateButton": "Importar do modelo", + "goBack": "Voltar", + "cancel": "Cancelar", + "create": "Criar", + "templateDrawerTitle": "Selecionar dos modelos", + "step3InputLabel": "Convidar por email", + "addAnother": "Adicionar outro", + "skipForNow": "Pular por enquanto", + "formTitle": "Crie sua primeira tarefa.", + "step3Title": "Convide sua equipe para trabalhar", + + "maxMembers": " (Você pode convidar até 5 membros)", + "maxTasks": " (Você pode criar até 5 tarefas)" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/current-bill.json b/worklenz-backend/src/public/locales/pt/admin-center/current-bill.json new file mode 100644 index 00000000..2e4b41d7 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/current-bill.json @@ -0,0 +1,113 @@ +{ + "title": "Cobranças", + "currentBill": "Fatura Atual", + "configuration": "Configuração", + "currentPlanDetails": "Detalhes do Plano Atual", + "upgradePlan": "Atualizar Plano", + "cardBodyText01": "Teste gratuito", + "cardBodyText02": "(Seu plano de teste expira em 1 mês e 19 dias)", + "redeemCode": "Resgatar Código", + "accountStorage": "Armazenamento da Conta", + "used": "Usado:", + "remaining": "Restante:", + "charges": "Cobranças", + "tooltip": "Cobranças para o ciclo de faturamento atual", + "description": "Descrição", + "billingPeriod": "Período de Faturamento", + "billStatus": "Status da Fatura", + "perUserValue": "Valor por Usuário", + "users": "Usuários", + "amount": "Valor", + "invoices": "Faturas", + "transactionId": "ID da Transação", + "transactionDate": "Data da Transação", + "paymentMethod": "Método de Pagamento", + "status": "Status", + "ltdUsers": "Puedes agregar hasta {{ltd_users}} usuarios.", + + "drawerTitle": "Resgatar Código", + "label": "Resgatar Código", + "drawerPlaceholder": "Digite seu código de resgate", + "redeemSubmit": "Enviar", + + "modalTitle": "Selecione o melhor plano para sua equipe", + "seatLabel": "Número de assentos", + "freePlan": "Plano Gratuito", + "startup": "Startup", + "business": "Empresarial", + "tag": "Mais Popular", + "enterprise": "Enterprise", + + "freeSubtitle": "gratuito para sempre", + "freeUsers": "Melhor para uso pessoal", + "freeText01": "100MB de armazenamento", + "freeText02": "3 projetos", + "freeText03": "5 membros na equipe", + + "startupSubtitle": "TAXA FIXA / mês", + "startupUsers": "Até 15 usuários", + "startupText01": "25GB de armazenamento", + "startupText02": "Projetos ativos ilimitados", + "startupText03": "Agendamento", + "startupText04": "Relatórios", + "startupText05": "Inscrever-se em projetos", + + "businessSubtitle": "usuário / mês", + "businessUsers": "16 - 200 usuários", + + "enterpriseUsers": "200 - 500+ usuários", + + "footerTitle": "Por favor, forneça um número de contato para que possamos entrar em contato com você.", + "footerLabel": "Número de Contato", + "footerButton": "Contate-nos", + + "redeemCodePlaceHolder": "Digite seu código de resgate", + "submit": "Enviar", + + "trialPlan": "Plano de Teste", + "trialExpireDate": "Válido até {{trial_expire_date}}", + "trialExpired": "Sua prova gratuita expirou {{trial_expire_string}}", + "trialInProgress": "Sua prova gratuita expira {{trial_expire_string}}", + + "required": "Este campo é obrigatório", + "invalidCode": "Código inválido", + + "selectPlan": "Selecione o melhor plano para sua equipe", + "changeSubscriptionPlan": "Mude seu plano de assinatura", + "noOfSeats": "Número de assentos", + "annualPlan": "Pro - Anual", + "monthlyPlan": "Pro - Mensal", + "freeForever": "Gratis para sempre", + "bestForPersonalUse": "Melhor para uso pessoal", + "storage": "Armazenamento", + "projects": "Projetos", + "teamMembers": "Membros da equipe", + "unlimitedTeamMembers": "Membros da equipe ilimitados", + "unlimitedActiveProjects": "Projetos ativos ilimitados", + "schedule": "Agendamento", + "reporting": "Relatórios", + "subscribeToProjects": "Inscreva-se em projetos", + "billedAnnually": "Faturado Anualmente", + "billedMonthly": "Faturado Mensalmente", + + "pausePlan": "Pausar Plano", + "resumePlan": "Reanudar Plano", + "changePlan": "Mudar Plano", + "cancelPlan": "Cancelar Plano", + + "perMonthPerUser": "por usuário / mês", + "viewInvoice": "Ver Fatura", + "switchToFreePlan": "Mudar para Plano Gratuito", + + "expirestoday": "hoje", + "expirestomorrow": "amanhã", + "expiredDaysAgo": "há {{days}} dias", + "creditPlan": "Plano de Crédito", + "customPlan": "Plano Personalizado", + "planValidTill": "Seu plano é válido até {{date}}", + "purchaseSeatsText": "Para continuar, você precisará comprar assentos adicionais.", + "currentSeatsText": "Atualmente você tem {{seats}} assentos disponíveis.", + "selectSeatsText": "Selecione o número de assentos adicionais para comprar.", + "purchase": "Comprar", + "contactSales": "Fale com vendas" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/overview.json b/worklenz-backend/src/public/locales/pt/admin-center/overview.json new file mode 100644 index 00000000..7cce8587 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "Visão Geral", + "name": "Nome da Organização", + "owner": "Proprietário da Organização", + "admins": "Administradores da Organização", + "contactNumber": "Adicione o Número de Contato", + "edit": "Editar" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/projects.json b/worklenz-backend/src/public/locales/pt/admin-center/projects.json new file mode 100644 index 00000000..02fdc0bb --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "Contagem de Membros", + "createdAt": "Criado em", + "projectName": "Nome do Projeto", + "teamName": "Nome do Time", + "refreshProjects": "Atualizar Projetos", + "searchPlaceholder": "Pesquisar por nome do projeto", + "deleteProject": "Tem a certeza de que deseja deletar este projeto?", + "confirm": "Confirmar", + "cancel": "Cancelar", + "delete": "Deletar Projeto" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/sidebar.json b/worklenz-backend/src/public/locales/pt/admin-center/sidebar.json new file mode 100644 index 00000000..253b77e4 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "Visão Geral", + "users": "Usuários", + "teams": "Equipes", + "billing": "Faturamento", + "projects": "Projetos", + "adminCenter": "Central Administrativa" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/teams.json b/worklenz-backend/src/public/locales/pt/admin-center/teams.json new file mode 100644 index 00000000..6a71b491 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/teams.json @@ -0,0 +1,35 @@ +{ + "title": "Equipes", + "subtitle": "equipes", + "tooltip": "Atualizar equipes", + "placeholder": "Pesquisar por nome", + "addTeam": "Adicionar Equipe", + "team": "Equipe", + "membersCount": "Contagem de Membros", + "members": "Membros", + "drawerTitle": "Criar Nova Equipe", + "label": "Nome da Equipe", + "drawerPlaceholder": "Nome", + "create": "Criar", + "delete": "Deletar", + "settings": "Configurações", + "popTitle": "Tem a certeza?", + "message": "Por favor, insira um Nome", + "teamSettings": "Configurações da Equipe", + "teamName": "Nome da Equipe", + "teamDescription": "Descrição da Equipe", + "teamMembers": "Membros da Equipe", + "teamMembersCount": "Quantidade de Membros da Equipe", + "teamMembersPlaceholder": "Buscar por nome", + "addMember": "Adicionar Membro", + "add": "Adicionar", + "update": "Atualizar", + "teamNamePlaceholder": "Nome da Equipe", + "user": "Usuário", + "role": "Rol", + "owner": "Propietario", + "admin": "Administrador", + "member": "Miembro", + "cannotChangeOwnerRole": "A função de Proprietário não pode ser alterada", + "pendingInvitation": "Convite pendente" +} diff --git a/worklenz-backend/src/public/locales/pt/admin-center/users.json b/worklenz-backend/src/public/locales/pt/admin-center/users.json new file mode 100644 index 00000000..9826c548 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "Usuários", + "subTitle": "usuários", + "placeholder": "Pesquisar por nome", + "user": "Usuário", + "email": "Email", + "lastActivity": "Última Atividade", + "refresh": "Atualizar usuários" +} diff --git a/worklenz-backend/src/public/locales/pt/all-project-list.json b/worklenz-backend/src/public/locales/pt/all-project-list.json new file mode 100644 index 00000000..482132eb --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "Nome", + "client": "Cliente", + "category": "Categoria", + "status": "Status", + "tasksProgress": "Progresso das Tarefas", + "updated_at": "Última Atualização", + "members": "Membros", + "setting": "Configurações", + "projects": "Projetos", + "refreshProjects": "Atualizar projetos", + "all": "Todos", + "favorites": "Favoritos", + "archived": "Arquivados", + "placeholder": "Pesquisar por nome", + "archive": "Arquivar", + "unarchive": "Desarquivar", + "archiveConfirm": "Tem certeza de que deseja arquivar este projeto?", + "unarchiveConfirm": "Tem certeza de que deseja desarquivar este projeto?", + "yes": "Sim", + "no": "Não", + "clickToFilter": "Clique para filtrar por", + "noProjects": "Nenhum projeto encontrado", + "addToFavourites": "Adicionar aos favoritos", + "list": "Lista", + "group": "Grupo", + "listView": "Visualização em Lista", + "groupView": "Visualização em Grupo", + "groupBy": { + "category": "Categoria", + "client": "Cliente" + }, + "noPermission": "Você não tem permissão para realizar esta ação" +} diff --git a/worklenz-backend/src/public/locales/pt/auth/auth-common.json b/worklenz-backend/src/public/locales/pt/auth/auth-common.json new file mode 100644 index 00000000..e828bddf --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "Deslogando...", + "authenticating": "Autenticando...", + "gettingThingsReady": "Preparando coisas para você..." +} diff --git a/worklenz-backend/src/public/locales/pt/auth/forgot-password.json b/worklenz-backend/src/public/locales/pt/auth/forgot-password.json new file mode 100644 index 00000000..5e9c89e0 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "Redefina sua senha", + "emailLabel": "Email", + "emailPlaceholder": "Digite seu email", + "emailRequired": "Por favor, digite seu email!", + "resetPasswordButton": "Redefinir Senha", + "returnToLoginButton": "Voltar para Login", + "passwordResetSuccessMessage": "Um link de redefinição de senha foi enviado para seu email.", + "orText": "OU", + "successTitle": "Instruções de redefinição enviadas!", + "successMessage": "A informação de redefinição foi enviada para seu email. Por favor, verifique seu email." +} diff --git a/worklenz-backend/src/public/locales/pt/auth/login.json b/worklenz-backend/src/public/locales/pt/auth/login.json new file mode 100644 index 00000000..2ce79115 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "Faça login na sua conta", + "emailLabel": "Email", + "emailPlaceholder": "Digite seu email", + "emailRequired": "Por favor, digite seu email!", + "passwordLabel": "Senha", + "passwordPlaceholder": "Digite sua senha", + "passwordRequired": "Por favor, digite sua Senha!", + "rememberMe": "Lembre de mim", + "loginButton": "Entrar", + "signupButton": "Inscrever-se", + "forgotPasswordButton": "Esqueceu sua senha?", + "signInWithGoogleButton": "Entrar com Google", + "successMessage": "Você entrou com sucesso!", + "dontHaveAccountText": "Não tem uma conta?", + "orText": "OU", + "loginError": "Login falhou", + "googleLoginError": "Login com Google falhou", + "validationMessages": { + "password": "A senha deve ter pelo menos 8 caracteres", + "email": "Por favor, insira um endereço de e-mail válido" + }, + "errorMessages": { + "loginErrorTitle": "Login falhou", + "loginErrorMessage": "Por favor, verifique seu e-mail e senha e tente novamente" + } +} diff --git a/worklenz-backend/src/public/locales/pt/auth/signup.json b/worklenz-backend/src/public/locales/pt/auth/signup.json new file mode 100644 index 00000000..cd994d4a --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "Inscreva-se para começar", + "nameLabel": "Nome Completo", + "namePlaceholder": "Insira seu nome completo", + "nameRequired": "Por favor, insira seu nome completo!", + "nameMinCharacterRequired": "Nome completo deve ter pelo menos 4 caracteres!", + "emailLabel": "Email", + "emailPlaceholder": "Insira seu email", + "emailRequired": "Por favor, insira seu Email!", + "passwordLabel": "Senha", + "passwordPlaceholder": "Insira sua senha", + "passwordRequired": "Por favor, insira sua Senha!", + "passwordMinCharacterRequired": "Senha deve ter pelo menos 8 caracteres!", + "passwordPatternRequired": "Senha não atende aos requisitos!", + "strongPasswordPlaceholder": "Insira uma senha mais forte", + "passwordValidationAltText": "Senha deve incluir pelo menos 8 caracteres com letras maiúsculas e minúsculas, um número e um símbolo.", + "signupSuccessMessage": "Você se inscreveu com sucesso!", + "privacyPolicyLink": "Política de Privacidade", + "termsOfUseLink": "Termos de Uso", + "bySigningUpText": "Ao se inscrever, você concorda com nossos", + "andText": "e", + "signupButton": "Inscrever-se", + "signInWithGoogleButton": "Entrar com Google", + "alreadyHaveAccountText": "Já tem uma conta?", + "loginButton": "Entrar", + "orText": "OU", + "reCAPTCHAVerificationError": "Erro de verificação do reCAPTCHA", + "reCAPTCHAVerificationErrorMessage": "Não pudemos verificar seu reCAPTCHA. Por favor, tente novamente." +} diff --git a/worklenz-backend/src/public/locales/pt/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/pt/auth/verify-reset-email.json new file mode 100644 index 00000000..189a6d51 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "Verificar E-mail de Redefinição", + "description": "Digite sua nova senha", + "placeholder": "Digite sua nova senha", + "confirmPasswordPlaceholder": "Confirme sua nova senha", + "passwordHint": "Mínimo de 8 caracteres, com maiúsculas e minúsculas, um número e um símbolo.", + "resetPasswordButton": "Redefinir senha", + "orText": "Ou", + "resendResetEmail": "Reenviar e-mail de redefinição", + "passwordRequired": "Por favor, digite sua nova senha", + "returnToLoginButton": "Voltar ao Login", + "confirmPasswordRequired": "Por favor, confirme sua nova senha", + "passwordMismatch": "As senhas não coincidem" +} diff --git a/worklenz-backend/src/public/locales/pt/common.json b/worklenz-backend/src/public/locales/pt/common.json new file mode 100644 index 00000000..ce540a28 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "Login realizado com sucesso!", + "login-failed": "Falha no login. Por favor, verifique suas credenciais e tente novamente.", + "signup-success": "Cadastro realizado com sucesso! Bem-vindo a bordo.", + "signup-failed": "Falha no cadastro. Por favor, certifique-se de que todos os campos obrigatórios estão preenchidos e tente novamente.", + "reconnecting": "Reconectando ao servidor...", + "connection-lost": "Conexão perdida. Tentando reconectar...", + "connection-restored": "Conexão restaurada. Reconectando ao servidor..." +} diff --git a/worklenz-backend/src/public/locales/pt/create-first-project-form.json b/worklenz-backend/src/public/locales/pt/create-first-project-form.json new file mode 100644 index 00000000..ec3ec300 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "Crie seu primeiro projeto", + "inputLabel": "Em qual projeto você está trabalhando agora?", + "or": "ou", + "templateButton": "Importar do modelo", + "createFromTemplate": "Criar do modelo", + "goBack": "Voltar", + "continue": "Continuar", + "cancel": "Cancelar", + "create": "Criar", + "templateDrawerTitle": "Selecione um modelo", + "createProject": "Criar projeto" +} diff --git a/worklenz-backend/src/public/locales/pt/create-first-tasks.json b/worklenz-backend/src/public/locales/pt/create-first-tasks.json new file mode 100644 index 00000000..06c1ae87 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "Crie sua primeira tarefa.", + "inputLable": "Digite algumas tarefas que você vai fazer em", + "addAnother": "Adicionar outro", + "goBack": "Voltar", + "continue": "Continuar" +} diff --git a/worklenz-backend/src/public/locales/pt/home.json b/worklenz-backend/src/public/locales/pt/home.json new file mode 100644 index 00000000..b19ece5f --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/home.json @@ -0,0 +1,45 @@ +{ + "todoList": { + "title": "Lista de tarefas", + "refreshTasks": "Atualizar tarefas", + "addTask": "+ Adicionar tarefa", + "noTasks": "Nenhuma tarefa", + "pressEnter": "Pressione", + "toCreate": "para criar.", + "markAsDone": "Marcar como feito" + }, + "projects": { + "title": "Projetos", + "refreshProjects": "Atualizar projetos", + "noRecentProjects": "Você não está atribuído a nenhum projeto.", + "noFavouriteProjects": "Nenhum projeto foi marcado como favorito.", + "recent": "Recentes", + "favourites": "Favoritos" + }, + "tasks": { + "assignedToMe": "Atribuído a mim", + "assignedByMe": "Atribuído por mim", + "all": "Todas", + "today": "Hoje", + "upcoming": "Próximas", + "overdue": "Vencidas", + "noDueDate": "Sem data de vencimento", + "noTasks": "Nenhuma tarefa para mostrar.", + "addTask": "+ Adicionar tarefa", + "name": "Nome", + "project": "Projeto", + "status": "Status", + "dueDate": "Data de vencimento", + "dueDatePlaceholder": "Definir data de vencimento", + "tomorrow": "Amanhã", + "nextWeek": "Semana que vem", + "nextMonth": "Próximo mês", + "projectRequired": "Por favor selecione um projeto", + "dueOn": "Tarefas vencidas em", + "taskRequired": "Por favor adicione uma tarefa", + "list": "Lista", + "calendar": "Calendário", + "tasks": "Tarefas", + "refresh": "Atualizar" + } +} diff --git a/worklenz-backend/src/public/locales/pt/invite-initial-team-members.json b/worklenz-backend/src/public/locales/pt/invite-initial-team-members.json new file mode 100644 index 00000000..39808ab2 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "Convide sua equipe para trabalhar com", + "inputLable": "Convidar com email", + "addAnother": "Adicionar outro", + "goBack": "Voltar", + "continue": "Continuar", + "skipForNow": "Pular por enquanto" +} diff --git a/worklenz-backend/src/public/locales/pt/kanban-board.json b/worklenz-backend/src/public/locales/pt/kanban-board.json new file mode 100644 index 00000000..a2034daa --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/kanban-board.json @@ -0,0 +1,30 @@ +{ + "rename": "Renomear", + "delete": "Excluir", + "addTask": "Adicionar Tarefa", + "addSectionButton": "Adicionar Seção", + "changeCategory": "Alterar categoria", + + "deleteTooltip": "Excluir", + "deleteConfirmationTitle": "Tem certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + + "dueDate": "Data de vencimento", + "cancel": "Cancelar", + + "today": "Hoje", + "tomorrow": "Amanhã", + "assignToMe": "Atribuir a mim", + "archive": "Arquivar", + + "newTaskNamePlaceholder": "Escreva um nome de tarefa", + "newSubtaskNamePlaceholder": "Escreva um nome de subtarefa", + "untitledSection": "Seção sem título", + "unmapped": "Não mapeado", + "clickToChangeDate": "Clique para alterar a data", + "noDueDate": "Sem data de vencimento", + "save": "Salvar", + "clear": "Limpar", + "nextWeek": "Próxima semana" +} diff --git a/worklenz-backend/src/public/locales/pt/license-expired.json b/worklenz-backend/src/public/locales/pt/license-expired.json new file mode 100644 index 00000000..aa7ae88b --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "Seu teste do Worklenz expirou!", + "subtitle": "Por favor, atualize agora.", + "button": "Atualizar agora", + "checking": "Verificando status da assinatura..." +} diff --git a/worklenz-backend/src/public/locales/pt/navbar.json b/worklenz-backend/src/public/locales/pt/navbar.json new file mode 100644 index 00000000..be0f3a63 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Logotipo Worklenz", + "home": "Início", + "projects": "Projetos", + "schedule": "Agendamento", + "reporting": "Relatórios", + "clients": "Clientes", + "teams": "Equipes", + "labels": "Rótulos", + "jobTitles": "Títulos de Emprego", + "upgradePlan": "Plano de Upgrade", + "upgradePlanTooltip": "Plano de Upgrade", + "invite": "Convidar", + "inviteTooltip": "Convidar membros da equipe a se juntar", + "switchTeamTooltip": "Trocar equipe", + "help": "Ajuda", + "notificationTooltip": "Ver notificações", + "profileTooltip": "Ver perfil", + "adminCenter": "Centro de administração", + "settings": "Configurações", + "logOut": "Sair", + "notificationsDrawer": { + "read": "Notificações lidas", + "unread": "Notificações não lidas", + "markAsRead": "Marcar como lido", + "readAndJoin": "Ler e participar", + "accept": "Aceitar", + "acceptAndJoin": "Aceitar e participar", + "noNotifications": "Sem notificações" + } +} diff --git a/worklenz-backend/src/public/locales/pt/organization-name-form.json b/worklenz-backend/src/public/locales/pt/organization-name-form.json new file mode 100644 index 00000000..c165b8cb --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "Nomeie sua organização.", + "worklenzAccountTitle": "Escolha um nome para sua conta Worklenz.", + "continue": "Continuar" +} diff --git a/worklenz-backend/src/public/locales/pt/phases-drawer.json b/worklenz-backend/src/public/locales/pt/phases-drawer.json new file mode 100644 index 00000000..080b13df --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "Configurar fases", + "phaseLabel": "Etiqueta de fase", + "enterPhaseName": "Digite um nome para o rótulo da fase", + "addOption": "Adicionar Opção", + "phaseOptions": "Opções de Fase:", + "dragToReorderPhases": "Arraste as fases para reordená-las. Cada fase pode ter uma cor diferente.", + "enterNewPhaseName": "Digite o novo nome da fase...", + "addPhase": "Adicionar Fase", + "noPhasesFound": "Nenhuma fase encontrada. Crie sua primeira fase acima.", + "deletePhase": "Excluir Fase", + "deletePhaseConfirm": "Tem certeza de que deseja excluir esta fase? Esta ação não pode ser desfeita.", + "rename": "Renomear", + "delete": "Excluir", + "enterPhaseName": "Digite o nome da fase", + "selectColor": "Selecionar cor", + "managePhases": "Gerenciar Fases", + "close": "Fechar" +} diff --git a/worklenz-backend/src/public/locales/pt/project-drawer.json b/worklenz-backend/src/public/locales/pt/project-drawer.json new file mode 100644 index 00000000..92e11964 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-drawer.json @@ -0,0 +1,52 @@ +{ + "createProject": "Criar Projeto", + "editProject": "Editar Projeto", + "enterCategoryName": "Insira um nome para a categoria", + "hitEnterToCreate": "Pressione enter para criar!", + "enterNotes": "Notas", + "youCanManageClientsUnderSettings": "Você pode gerenciar clientes em Configurações", + "addCategory": "Adicione uma categoria ao projeto", + "newCategory": "Nova Categoria", + "notes": "Notas", + "startDate": "Data de Início", + "endDate": "Data de Fim", + "estimateWorkingDays": "Estime os dias de trabalho", + "estimateManDays": "Estime os dias de trabalho", + "hoursPerDay": "Horas por dia", + "create": "Criar", + "update": "Atualizar", + "delete": "Excluir", + "typeToSearchClients": "Digite para buscar clientes", + "projectColor": "Cor do Projeto", + "pleaseEnterAName": "Por favor, insira um nome", + "enterProjectName": "Insira o nome do projeto", + "name": "Nome", + "status": "Estado", + "health": "Saúde", + "category": "Categoria", + "projectManager": "Gerente de Projeto", + "client": "Cliente", + "deleteConfirmation": "Tem a certeza de que deseja excluir?", + "deleteConfirmationDescription": "Isso removerá todos os dados associados e não pode ser desfeito.", + "yes": "Sim", + "no": "Não", + "createdAt": "Criado", + "updatedAt": "Atualizado", + "by": "por", + "add": "Adicionar", + "asClient": "como cliente", + "createClient": "Criar cliente", + "searchInputPlaceholder": "Pesquise por nome ou email", + "hoursPerDayValidationMessage": "As horas por dia devem ser um número entre 1 e 24", + "workingDaysValidationMessage": "Os dias de trabalho devem ser um número positivo", + "manDaysValidationMessage": "Os dias de homem devem ser um número positivo", + "noPermission": "Sem permissão", + "progressSettings": "Configurações de Progresso", + "manualProgress": "Progresso Manual", + "manualProgressTooltip": "Permitir atualizações manuais de progresso para tarefas sem subtarefas", + "weightedProgress": "Progresso Ponderado", + "weightedProgressTooltip": "Calcular o progresso com base nos pesos das subtarefas", + "timeProgress": "Progresso Baseado em Tempo", + "timeProgressTooltip": "Calcular o progresso com base no tempo estimado", + "enterProjectKey": "Insira a chave do projeto" +} diff --git a/worklenz-backend/src/public/locales/pt/project-view-files.json b/worklenz-backend/src/public/locales/pt/project-view-files.json new file mode 100644 index 00000000..61f1cb59 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "Nome", + "attachedTaskColumn": "Tarefa Anexada", + "sizeColumn": "Tamanho", + "uploadedByColumn": "Enviado Por", + "uploadedAtColumn": "Enviado Em", + "fileIconAlt": "Ícone do Arquivo", + "titleDescriptionText": "Todos os anexos das tarefas neste projeto aparecerão aqui.", + "deleteConfirmationTitle": "Tem certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "segmentedTooltip": "Em breve! Alterne entre a visualização em lista e a visualização em miniatura.", + "emptyText": "Não há anexos no projeto." +} diff --git a/worklenz-backend/src/public/locales/pt/project-view-insights.json b/worklenz-backend/src/public/locales/pt/project-view-insights.json new file mode 100644 index 00000000..2ad6ee92 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "Visão Geral", + "statusOverview": "Visão Geral do Status", + "priorityOverview": "Visão Geral da Prioridade", + "lastUpdatedTasks": "Últimas Tarefas Atualizadas" + }, + "members": { + "title": "Membros", + "tooltip": "Membros", + "tasksByMembers": "Tarefas por membros", + "tasksByMembersTooltip": "Tarefas por membros", + "name": "Nome", + "taskCount": "Contagem de Tarefas", + "contribution": "Contribuição", + "completed": "Concluído", + "incomplete": "Incompleto", + "overdue": "Atrasado", + "progress": "Progresso" + }, + "tasks": { + "overdueTasks": "Tarefas Atrasadas", + "overLoggedTasks": "Tarefas com excesso de tempo registrado", + "tasksCompletedEarly": "Tarefas concluídas cedo", + "tasksCompletedLate": "Tarefas concluídas tarde", + "overLoggedTasksTooltip": "Tarefas que têm tempo registrado além do tempo estimado", + "overdueTasksTooltip": "Tarefas que estão atrasadas" + }, + "common": { + "seeAll": "Ver tudo", + "totalLoggedHours": "Total de horas registradas", + "totalEstimation": "Total de estimativa", + "completedTasks": "Tarefas concluídas", + "incompleteTasks": "Tarefas incompletas", + "overdueTasks": "Tarefas atrasadas", + "overdueTasksTooltip": "Tarefas que estão atrasadas", + "totalLoggedHoursTooltip": "Estimativa de tarefas e tempo registrado.", + "includeArchivedTasks": "Incluir Tarefas Arquivadas", + "export": "Exportar" + } +} diff --git a/worklenz-backend/src/public/locales/pt/project-view-members.json b/worklenz-backend/src/public/locales/pt/project-view-members.json new file mode 100644 index 00000000..72524807 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "Nome", + "jobTitleColumn": "Título do Cargo", + "emailColumn": "Email", + "tasksColumn": "Tarefas", + "taskProgressColumn": "Progresso da Tarefa", + "accessColumn": "Acesso", + "fileIconAlt": "Ícone do Arquivo", + "deleteConfirmationTitle": "Tem a certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "refreshButtonTooltip": "Atualizar membros", + "deleteButtonTooltip": "Remover do projeto", + "memberCount": "Membro", + "membersCountPlural": "Membros", + "emptyText": "Não há anexos no projeto." +} diff --git a/worklenz-backend/src/public/locales/pt/project-view-updates.json b/worklenz-backend/src/public/locales/pt/project-view-updates.json new file mode 100644 index 00000000..93a48950 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "Adicione um comentário..", + "addButton": "Adicionar", + "cancelButton": "Cancelar", + "deleteButton": "Deletar" +} diff --git a/worklenz-backend/src/public/locales/pt/project-view.json b/worklenz-backend/src/public/locales/pt/project-view.json new file mode 100644 index 00000000..c58337da --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "Lista de Tarefas", + "board": "Quadro Kanban", + "insights": "Insights", + "files": "Arquivos", + "members": "Membros", + "updates": "Atualizações", + "projectView": "Visualização do Projeto", + "loading": "Carregando projeto...", + "error": "Erro ao carregar projeto", + "pinnedTab": "Fixada como aba padrão", + "pinTab": "Fixar como aba padrão", + "unpinTab": "Desfixar aba padrão" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/pt/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/pt/project-view/import-task-templates.json new file mode 100644 index 00000000..81a64607 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "Importar modelo de tarefa", + "templateName": "Nome do modelo", + "templateDescription": "Descrição do modelo", + "selectedTasks": "Tarefas selecionadas", + "tasks": "Tarefas", + "templates": "Modelos", + "remove": "Remover", + "cancel": "Cancelar", + "import": "Importar" +} diff --git a/worklenz-backend/src/public/locales/pt/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/pt/project-view/project-member-drawer.json new file mode 100644 index 00000000..0afe3d87 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "Membros do Projeto", + "searchLabel": "Adicionar membros inserindo nome ou e-mail", + "searchPlaceholder": "Digite nome ou e-mail", + "inviteAsAMember": "Convidar como membro", + "inviteNewMemberByEmail": "Convidar novo membro por e-mail" +} diff --git a/worklenz-backend/src/public/locales/pt/project-view/project-view-header.json b/worklenz-backend/src/public/locales/pt/project-view/project-view-header.json new file mode 100644 index 00000000..4649b768 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "Importar tarefas", + "importTask": "Importar tarefa", + "createTask": "Criar tarefa", + "settings": "Configurações", + "subscribe": "Inscrever-se", + "unsubscribe": "Cancelar inscrição", + "deleteProject": "Excluir projeto", + "startDate": "Data de início", + "endDate": "Data de término", + "projectSettings": "Configurações do projeto", + "projectSummary": "Resumo do projeto", + "receiveProjectSummary": "Receba um resumo do projeto todas as noites.", + "refreshProject": "Atualizar projeto", + "saveAsTemplate": "Salvar como modelo", + "invite": "Convidar", + "share": "Compartilhar", + "subscribeTooltip": "Inscrever-se nas notificações do projeto", + "unsubscribeTooltip": "Cancelar inscrição nas notificações do projeto", + "refreshTooltip": "Atualizar dados do projeto", + "settingsTooltip": "Abrir configurações do projeto", + "saveAsTemplateTooltip": "Salvar este projeto como modelo", + "inviteTooltip": "Convidar membros da equipe para este projeto", + "createTaskTooltip": "Criar uma nova tarefa", + "importTaskTooltip": "Importar tarefa de modelo", + "navigateBackTooltip": "Voltar para lista de projetos", + "projectStatusTooltip": "Status do projeto", + "projectDatesInfo": "Informações do cronograma do projeto", + "projectCategoryTooltip": "Categoria do projeto" +} diff --git a/worklenz-backend/src/public/locales/pt/project-view/save-as-template.json b/worklenz-backend/src/public/locales/pt/project-view/save-as-template.json new file mode 100644 index 00000000..c67eb20e --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "Salvar como Modelo", + "templateName": "Nome do Modelo", + "includes": "O que deve ser incluído no modelo do projeto?", + "includesOptions": { + "statuses": "Status", + "phases": "Fases", + "labels": "Etiquetas" + }, + "taskIncludes": "O que deve ser incluído no modelo das tarefas?", + "taskIncludesOptions": { + "statuses": "Status", + "phases": "Fases", + "labels": "Etiquetas", + "name": "Nome", + "priority": "Prioridade", + "status": "Status", + "phase": "Fase", + "label": "Etiqueta", + "timeEstimate": "Estimativa de Tempo", + "description": "Descrição", + "subTasks": "Subtarefas" + }, + "cancel": "Cancelar", + "save": "Salvar", + "templateNamePlaceholder": "Digite o nome do modelo" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-members-drawer.json b/worklenz-backend/src/public/locales/pt/reporting-members-drawer.json new file mode 100644 index 00000000..49d0008b --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-members-drawer.json @@ -0,0 +1,90 @@ +{ + "exportButton": "Exportar", + "timeLogsButton": "Registros de Tempo", + "activityLogsButton": "Registros de Atividade", + "tasksButton": "Tarefas", + "searchByNameInputPlaceholder": "Pesquisar por nome", + + "overviewTab": "Visão Geral", + "timeLogsTab": "Registros de Tempo", + "activityLogsTab": "Registros de Atividade", + "tasksTab": "Tarefas", + + "projectsText": "Projetos", + "totalTasksText": "Total de Tarefas", + "assignedTasksText": "Tarefas Atribuídas", + "completedTasksText": "Tarefas Concluídas", + "ongoingTasksText": "Tarefas em Andamento", + "overdueTasksText": "Tarefas Atrasadas", + "loggedHoursText": "Horas Registradas", + + "tasksText": "Tarefas", + "allText": "Todas", + + "tasksByProjectsText": "Tarefas Por Projetos", + "tasksByStatusText": "Tarefas Por Status", + "tasksByPriorityText": "Tarefas Por Prioridade", + + "todoText": "A Fazer", + "doingText": "Fazendo", + "doneText": "Feita", + "lowText": "Baixa", + "mediumText": "Média", + "highText": "Alta", + + "billableButton": "Cobrável", + "billableText": "Cobrável", + "nonBillableText": "Não Cobrável", + + "timeLogsEmptyPlaceholder": "Nenhum registro de tempo para mostrar", + "loggedText": "Registrado", + "forText": "para", + "inText": "em", + "updatedText": "Atualizado", + "fromText": "De", + "toText": "até", + "withinText": "dentro de", + + "activityLogsEmptyPlaceholder": "Nenhum registro de atividade para mostrar", + + "filterByText": "Filtrar por:", + "selectProjectPlaceholder": "Selecione o Projeto", + + "taskColumn": "Tarefa", + "nameColumn": "Nome", + "projectColumn": "Projeto", + "statusColumn": "Status", + "priorityColumn": "Prioridade", + "dueDateColumn": "Data de Vencimento", + "completedDateColumn": "Data de Conclusão", + "estimatedTimeColumn": "Tempo Estimado", + "loggedTimeColumn": "Tempo Registrado", + "overloggedTimeColumn": "Tempo Excedido", + "daysLeftColumn": "Dias Restantes/Atrasados", + "startDateColumn": "Data de Início", + "endDateColumn": "Data de Fim", + "actualTimeColumn": "Tempo Real", + "projectHealthColumn": "Saúde do Projeto", + "categoryColumn": "Categoria", + "projectManagerColumn": "Gerente do Projeto", + + "tasksStatsOverviewDrawerTitle": "Tarefas de", + "projectsStatsOverviewDrawerTitle": "Projetos de", + + "cancelledText": "Cancelada", + "blockedText": "Bloqueada", + "onHoldText": "Em Espera", + "proposedText": "Proposta", + "inPlanningText": "Em Planejamento", + "inProgressText": "Em Progresso", + "completedText": "Concluída", + "continuousText": "Contínua", + + "daysLeftText": "dias restantes", + "daysOverdueText": "dias atrasados", + + "notSetText": "Não Definido", + "needsAttentionText": "Precisa de Atenção", + "atRiskText": "Em Risco", + "goodText": "Bom" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-members.json b/worklenz-backend/src/public/locales/pt/reporting-members.json new file mode 100644 index 00000000..a8035dcd --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-members.json @@ -0,0 +1,35 @@ +{ + "yesterdayText": "Yesterday", + "lastSevenDaysText": "Last 7 Days", + "lastWeekText": "Last Week", + "lastThirtyDaysText": "Last 30 Days", + "lastMonthText": "Last Month", + "lastThreeMonthsText": "Last 3 Months", + "allTimeText": "All Time", + "customRangeText": "Custom range", + "startDateInputPlaceholder": "Start date", + "EndDateInputPlaceholder": "End date", + "filterButton": "Filter", + + "membersTitle": "Members", + "includeArchivedButton": "Include Archived Projects", + "exportButton": "Export", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "Search by name", + + "memberColumn": "Member", + "tasksProgressColumn": "Tasks Progress", + "tasksAssignedColumn": "Tasks Assigned", + "completedTasksColumn": "Completed Tasks", + "overdueTasksColumn": "Overdue Tasks", + "ongoingTasksColumn": "Ongoing Tasks", + + "tasksAssignedColumnTooltip": "Tasks assigned on selected date range", + "overdueTasksColumnTooltip": "Tasks overdue for end of the selected date range", + "completedTasksColumnTooltip": "Tasks completed on selected date range", + "ongoingTasksColumnTooltip": "Started tasks not completed yet", + + "todoText": "To Do", + "doingText": "Doing", + "doneText": "Done" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/pt/reporting-overview-drawer.json new file mode 100644 index 00000000..af8b06ee --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-overview-drawer.json @@ -0,0 +1,39 @@ +{ + "exportButton": "Exportar", + "projectsButton": "Projetos", + "membersButton": "Membros", + "searchByNameInputPlaceholder": "Pesquisar por nome", + + "overviewTab": "Visão Geral", + "projectsTab": "Projetos", + "membersTab": "Membros", + + "projectsByStatusText": "Projetos Por Status", + "projectsByCategoryText": "Projetos Por Categoria", + "projectsByHealthText": "Projetos Por Saúde", + + "projectsText": "Projetos", + "allText": "Todos", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "Em Espera", + "proposedText": "Proposto", + "inPlanningText": "Em Planejamento", + "inProgressText": "Em Andamento", + "completedText": "Concluído", + "continuousText": "Contínuo", + + "notSetText": "Não Definido", + "needsAttentionText": "Necessita de Atenção", + "atRiskText": "Em Risco", + "goodText": "Bom", + + "nameColumn": "Nome", + "emailColumn": "Email", + "projectsColumn": "Projetos", + "tasksColumn": "Tarefas", + "overdueTasksColumn": "Tarefas Atrasadas", + "completedTasksColumn": "Tarefas Concluídas", + "ongoingTasksColumn": "Tarefas em Andamento" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-overview.json b/worklenz-backend/src/public/locales/pt/reporting-overview.json new file mode 100644 index 00000000..01681d1a --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-overview.json @@ -0,0 +1,25 @@ +{ + "overviewTitle": "Visão Geral", + "includeArchivedButton": "Incluir Projetos Arquivados", + + "teamCount": "Equipe", + "teamCountPlural": "Equipes", + "projectCount": "Projeto", + "projectCountPlural": "Projetos", + "memberCount": "Membro", + "memberCountPlural": "Membros", + "activeProjectCount": "Projeto Ativo", + "activeProjectCountPlural": "Projetos Ativos", + "overdueProjectCount": "Projeto Atrasado", + "overdueProjectCountPlural": "Projetos Atrasados", + "unassignedMemberCount": "Membro Não Atribuído", + "unassignedMemberCountPlural": "Membros Não Atribuídos", + "memberWithOverdueTaskCount": "Membro Com Tarefa Atrasada", + "memberWithOverdueTaskCountPlural": "Membros Com Tarefas Atrasadas", + + "teamsText": "Equipes", + + "nameColumn": "Nome", + "projectsColumn": "Projetos", + "membersColumn": "Membros" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/pt/reporting-projects-drawer.json new file mode 100644 index 00000000..14bcfaca --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-projects-drawer.json @@ -0,0 +1,59 @@ +{ + "exportButton": "Exportar", + "membersButton": "Membros", + "tasksButton": "Tarefas", + "searchByNameInputPlaceholder": "Pesquisar por nome", + + "overviewTab": "Visão Geral", + "membersTab": "Membros", + "tasksTab": "Tarefas", + + "completedTasksText": "Tarefas Concluídas", + "incompleteTasksText": "Tarefas Incompletas", + "overdueTasksText": "Tarefas Atrasadas", + "allocatedHoursText": "Horas Alocadas", + "loggedHoursText": "Horas Registradas", + + "tasksText": "Tarefas", + "allText": "Todas", + + "tasksByStatusText": "Tarefas Por Status", + "tasksByPriorityText": "Tarefas Por Prioridade", + "tasksByDueDateText": "Tarefas Por Data de Vencimento", + + "todoText": "A Fazer", + "doingText": "Fazendo", + "doneText": "Feita", + "lowText": "Baixa", + "mediumText": "Média", + "highText": "Alta", + "completedText": "Concluída", + "upcomingText": "Próxima", + "overdueText": "Atrasada", + "noDueDateText": "Sem Data de Vencimento", + + "nameColumn": "Nome", + "tasksCountColumn": "Contagem de Tarefas", + "completedTasksColumn": "Tarefas Concluídas", + "incompleteTasksColumn": "Tarefas Incompletas", + "overdueTasksColumn": "Tarefas Atrasadas", + "contributionColumn": "Contribuição", + "progressColumn": "Progresso", + "loggedTimeColumn": "Tempo Registrado", + "taskColumn": "Tarefa", + "projectColumn": "Projeto", + "statusColumn": "Status", + "priorityColumn": "Prioridade", + "phaseColumn": "Fase", + "dueDateColumn": "Data de Vencimento", + "completedDateColumn": "Data de Conclusão", + "estimatedTimeColumn": "Tempo Estimado", + "overloggedTimeColumn": "Tempo Excedido", + "completedOnColumn": "Concluído Em", + "daysOverdueColumn": "Dias Atrasados", + + "groupByText": "Agrupar Por:", + "statusText": "Status", + "priorityText": "Prioridade", + "phaseText": "Fase" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-projects-filters.json b/worklenz-backend/src/public/locales/pt/reporting-projects-filters.json new file mode 100644 index 00000000..5d47d282 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-projects-filters.json @@ -0,0 +1,35 @@ +{ + "searchByNamePlaceholder": "Pesquisar por nome", + "searchByCategoryPlaceholder": "Pesquisar por categoria", + + "statusText": "Status", + "healthText": "Saúde", + "categoryText": "Categoria", + "projectManagerText": "Gerente de Projeto", + "showFieldsText": "Mostrar campos", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "Em Espera", + "proposedText": "Proposto", + "inPlanningText": "Em Planejamento", + "inProgressText": "Em Andamento", + "completedText": "Concluído", + "continuousText": "Contínuo", + + "notSetText": "Não Definido", + "needsAttentionText": "Precisa de Atenção", + "atRiskText": "Em Risco", + "goodText": "Bom", + + "nameText": "Projeto", + "estimatedVsActualText": "Estimado Vs Real", + "tasksProgressText": "Progresso das Tarefas", + "lastActivityText": "Última Atividade", + "datesText": "Datas de Início/Fim", + "daysLeftText": "Dias Restantes/Atrasados", + "projectHealthText": "Saúde do Projeto", + "projectUpdateText": "Atualização do Projeto", + "clientText": "Cliente", + "teamText": "Equipe" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-projects.json b/worklenz-backend/src/public/locales/pt/reporting-projects.json new file mode 100644 index 00000000..c5035b54 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-projects.json @@ -0,0 +1,52 @@ +{ + "projectCount": "Projeto", + "projectCountPlural": "Projetos", + "includeArchivedButton": "Incluir Projetos Arquivados", + "exportButton": "Exportar", + "excelButton": "Excel", + + "projectColumn": "Projeto", + "estimatedVsActualColumn": "Estimado Vs Real", + "tasksProgressColumn": "Progresso das Tarefas", + "lastActivityColumn": "Última Atividade", + "statusColumn": "Status", + "datesColumn": "Datas de Início/Fim", + "daysLeftColumn": "Dias Restantes/Atrasados", + "projectHealthColumn": "Saúde do Projeto", + "categoryColumn": "Categoria", + "projectUpdateColumn": "Atualização do Projeto", + "clientColumn": "Cliente", + "teamColumn": "Equipe", + "projectManagerColumn": "Gerente de Projeto", + + "openButton": "Abrir", + + "estimatedText": "Estimado", + "actualText": "Real", + + "todoText": "A Fazer", + "doingText": "Fazendo", + "doneText": "Feito", + + "cancelledText": "Cancelado", + "blockedText": "Bloqueado", + "onHoldText": "Em Espera", + "proposedText": "Proposto", + "inPlanningText": "Em Planejamento", + "inProgressText": "Em Andamento", + "completedText": "Concluído", + "continuousText": "Contínuo", + + "daysLeftText": "dias restantes", + "dayLeftText": "dia restante", + "daysOverdueText": "dias atrasados", + + "notSetText": "Não Definido", + "needsAttentionText": "Precisa de Atenção", + "atRiskText": "Em Risco", + "goodText": "Bom", + + "setCategoryText": "Definir Categoria", + "searchByNameInputPlaceholder": "Pesquisar por nome", + "todayText": "Hoje" +} diff --git a/worklenz-backend/src/public/locales/pt/reporting-sidebar.json b/worklenz-backend/src/public/locales/pt/reporting-sidebar.json new file mode 100644 index 00000000..e09940f3 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overviewText": "Visão Geral", + "projectsText": "Projetos", + "membersText": "Membros", + "timeReportsText": "Relatórios de Tempo", + "estimateVsActualText": "Estimado Vs Real", + "currentOrganizationTooltip": "Organização Atual" +} diff --git a/worklenz-backend/src/public/locales/pt/schedule.json b/worklenz-backend/src/public/locales/pt/schedule.json new file mode 100644 index 00000000..c2d9fed6 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/schedule.json @@ -0,0 +1,39 @@ +{ + "today": "Hoje", + "week": "Semana", + "month": "Mês", + + "settings": "Configurações", + "workingDays": "Dias de Trabalho", + "monday": "Segunda-feira", + "tuesday": "Terça-feira", + "wednesday": "Quarta-feira", + "thursday": "Quinta-feira", + "friday": "Sexta-feira", + "saturday": "Sábado", + "sunday": "Domingo", + "workingHours": "Horas de Trabalho", + "hours": "horas", + "saveButton": "Salvar", + + "totalAllocation": "Alocação Total", + "timeLogged": "Tempo Registrado", + "remainingTime": "Tempo Restante", + "total": "Total", + "perDay": "Por Dia", + "tasks": "tarefas", + "startDate": "Data de Início", + "endDate": "Data de Fim", + + "hoursPerDay": "Horas Por Dia", + "totalHours": "Horas Totais", + "deleteButton": "Excluir", + "cancelButton": "Cancelar", + + "tabTitle": "Tarefa sem Data de Início & Fim", + + "allocatedTime": "Tempo Alocado", + "totalLogged": "Total Registrado", + "loggedBillable": "Registrado Faturável", + "loggedNonBillable": "Registrado Não Faturável" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/appearance.json b/worklenz-backend/src/public/locales/pt/settings/appearance.json new file mode 100644 index 00000000..13e5a1e6 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/appearance.json @@ -0,0 +1,5 @@ +{ + "title": "Aparência", + "darkMode": "Modo Escuro", + "darkModeDescription": "Alterne entre o modo claro e escuro para personalizar sua experiência de visualização." +} diff --git a/worklenz-backend/src/public/locales/pt/settings/categories.json b/worklenz-backend/src/public/locales/pt/settings/categories.json new file mode 100644 index 00000000..9972d2a9 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "Categoria", + "deleteConfirmationTitle": "Tem a certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "associatedTaskColumn": "Tarefa Associada", + "searchPlaceholder": "Pesquisar por nome", + "emptyText": "As categorias podem ser criadas ao atualizar ou criar projetos.", + "colorChangeTooltip": "Clique para mudar a cor" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/change-password.json b/worklenz-backend/src/public/locales/pt/settings/change-password.json new file mode 100644 index 00000000..07b993dd --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "Alterar Senha", + "currentPassword": "Senha Atual", + "newPassword": "Nova Senha", + "confirmPassword": "Confirmar Senha", + "currentPasswordPlaceholder": "Digite sua senha atual", + "newPasswordPlaceholder": "Nova Senha", + "confirmPasswordPlaceholder": "Confirmar Senha", + "currentPasswordRequired": "Por favor, digite sua senha atual!", + "newPasswordRequired": "Por favor, digite sua nova senha!", + "passwordValidationError": "A senha deve ter pelo menos 8 caracteres com uma letra maiúscula, um número e um símbolo.", + "passwordMismatch": "As senhas não coincidem!", + "passwordRequirements": "A nova senha deve ter no mínimo 8 caracteres, com uma letra maiúscula, um número e um símbolo.", + "updateButton": "Atualizar Senha" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/clients.json b/worklenz-backend/src/public/locales/pt/settings/clients.json new file mode 100644 index 00000000..932a7f5e --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "Nome", + "projectColumn": "Projeto", + "noProjectsAvailable": "Nenhum projeto disponível", + "deleteConfirmationTitle": "Tem a certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "searchPlaceholder": "Pesquisar por nome", + "createClient": "Criar Cliente", + "pinTooltip": "Clique para fixar isso no menu principal", + "createClientDrawerTitle": "Criar Cliente", + "updateClientDrawerTitle": "Atualizar Cliente", + "nameLabel": "Nome", + "namePlaceholder": "Nome", + "nameRequiredError": "Por favor, insira um Nome", + "createButton": "Criar", + "updateButton": "Atualizar", + "createClientSuccessMessage": "Criar cliente sucesso!", + "createClientErrorMessage": "Criar cliente falhou!", + "updateClientSuccessMessage": "Atualizar cliente sucesso!", + "updateClientErrorMessage": "Atualizar cliente falhou!" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/job-titles.json b/worklenz-backend/src/public/locales/pt/settings/job-titles.json new file mode 100644 index 00000000..379ddc03 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "Nome", + "deleteConfirmationTitle": "Tem a certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "searchPlaceholder": "Pesquisar por nome", + "createJobTitleButton": "Criar Título de Emprego", + "pinTooltip": "Clique para fixar isso no menu principal", + "createJobTitleDrawerTitle": "Criar Título de Emprego", + "updateJobTitleDrawerTitle": "Atualizar Título de Emprego", + "nameLabel": "Nome", + "namePlaceholder": "Nome", + "nameRequiredError": "Por favor, insira um Nome", + "createButton": "Criar", + "updateButton": "Atualizar", + "createJobTitleSuccessMessage": "Criar título de emprego com sucesso!", + "createJobTitleErrorMessage": "Falha ao criar título de emprego!", + "updateJobTitleSuccessMessage": "Atualizar título de emprego com sucesso!", + "updateJobTitleErrorMessage": "Falha ao atualizar título de emprego!" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/labels.json b/worklenz-backend/src/public/locales/pt/settings/labels.json new file mode 100644 index 00000000..737dccef --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "Rótulo", + "deleteConfirmationTitle": "Tem a certeza?", + "deleteConfirmationOk": "Sim", + "deleteConfirmationCancel": "Cancelar", + "associatedTaskColumn": "Contagem de Tarefas Associadas", + "searchPlaceholder": "Pesquisar por nome", + "emptyText": "Os rótulos podem ser criados ao atualizar ou criar tarefas.", + "pinTooltip": "Clique para fixar isso no menu principal", + "colorChangeTooltip": "Clique para mudar a cor" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/language.json b/worklenz-backend/src/public/locales/pt/settings/language.json new file mode 100644 index 00000000..f4494ff3 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "Idioma", + "language_required": "O idioma é obrigatório", + "time_zone": "Fuso horário", + "time_zone_required": "O fuso horário é obrigatório", + "save_changes": "Salvar alterações" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/notifications.json b/worklenz-backend/src/public/locales/pt/settings/notifications.json new file mode 100644 index 00000000..5a61cdf0 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/notifications.json @@ -0,0 +1,10 @@ +{ + "emailTitle": "Envie-me notificações por email", + "emailDescription": "Isso inclui novas atribuições de tarefas", + "dailyDigestTitle": "Envie-me um resumo diário", + "dailyDigestDescription": "Toda noite, você receberá um resumo da atividade recente nas tarefas.", + "popupTitle": "Notificações pop-up no meu computador quando o Worklenz está aberto", + "popupDescription": "As notificações pop-up podem ser desativadas pelo seu navegador. Altere as configurações do seu navegador para permiti-las.", + "unreadItemsTitle": "Mostrar o número de itens não lidos", + "unreadItemsDescription": "Você verá contagens para cada notificação." +} diff --git a/worklenz-backend/src/public/locales/pt/settings/profile.json b/worklenz-backend/src/public/locales/pt/settings/profile.json new file mode 100644 index 00000000..3a4a8447 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "Você só pode fazer upload de arquivos JPG/PNG!", + "uploadSizeError": "A imagem deve ser menor que 2MB!", + "upload": "Carregar", + "nameLabel": "Nome", + "nameRequiredError": "Nome é obrigatório", + "emailLabel": "Email", + "emailRequiredError": "Email é obrigatório", + "saveChanges": "Salvar Alterações", + "profileJoinedText": "Entrou há um mês", + "profileLastUpdatedText": "Última atualização há um mês", + "avatarTooltip": "Clique para carregar um avatar", + "title": "Configurações do Perfil" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/project-templates.json b/worklenz-backend/src/public/locales/pt/settings/project-templates.json new file mode 100644 index 00000000..55546630 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "Nome", + "editToolTip": "Editar", + "deleteToolTip": "Excluir", + "confirmText": "Tem a certeza?", + "okText": "Sim", + "cancelText": "Cancelar" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/sidebar.json b/worklenz-backend/src/public/locales/pt/settings/sidebar.json new file mode 100644 index 00000000..0cb663f1 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/sidebar.json @@ -0,0 +1,15 @@ +{ + "profile": "Perfil", + "notifications": "Notificações", + "clients": "Clientes", + "job-titles": "Títulos de Emprego", + "labels": "Rótulos", + "categories": "Categorias", + "project-templates": "Modelos de Projeto", + "task-templates": "Modelos de Tarefa", + "team-members": "Membros da Equipe", + "teams": "Equipes", + "change-password": "Alterar Senha", + "language-and-region": "Idioma e Região", + "appearance": "Aparência" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/task-templates.json b/worklenz-backend/src/public/locales/pt/settings/task-templates.json new file mode 100644 index 00000000..fb501000 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "Nome", + "createdColumn": "Criado", + "editToolTip": "Editar", + "deleteToolTip": "Excluir", + "confirmText": "Tem a certeza?", + "okText": "Sim", + "cancelText": "Cancelar" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/team-members.json b/worklenz-backend/src/public/locales/pt/settings/team-members.json new file mode 100644 index 00000000..9ace1764 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "Membros da Equipe", + "nameColumn": "Nome", + "projectsColumn": "Projetos", + "emailColumn": "Email", + "teamAccessColumn": "Acesso à Equipe", + "memberCount": "Membro", + "membersCountPlural": "Membros", + "searchPlaceholder": "Pesquisar membros pelo nome", + "pinTooltip": "Atualizar lista de membros", + "addMemberButton": "Adicionar Novo Membro", + "editTooltip": "Editar membro", + "deactivateTooltip": "Desativar membro", + "activateTooltip": "Ativar membro", + "deleteTooltip": "Deletar membro", + "confirmDeleteTitle": "Tem a certeza de que deseja deletar este membro?", + "confirmActivateTitle": "Tem a certeza de que deseja alterar o status deste membro?", + "okText": "Sim, proceder", + "cancelText": "Não, cancelar", + "deactivatedText": "(Atualmente desativado)", + "pendingInvitationText": "(Convite pendente)", + "addMemberDrawerTitle": "Adicionar Novo Membro da Equipe", + "updateMemberDrawerTitle": "Atualizar Membro da Equipe", + "addMemberEmailHint": "Os membros serão adicionados à equipe independentemente do status de aceitação do convite", + "memberEmailLabel": "Endereço(s) de Email", + "memberEmailPlaceholder": "Insira o endereço de email do membro da equipe", + "memberEmailRequiredError": "Por favor, insira um email válido", + "jobTitleLabel": "Título do Emprego", + "jobTitlePlaceholder": "Selecione ou pesquise o título do emprego (Opcional)", + "memberAccessLabel": "Nível de Acesso", + "addToTeamButton": "Adicionar Membro à Equipe", + "updateButton": "Salvar Alterações", + "resendInvitationButton": "Redirecionar Email de Convite", + "invitationSentSuccessMessage": "Convite para a equipe enviado com sucesso!", + "createMemberSuccessMessage": "Novo membro da equipe adicionado com sucesso!", + "createMemberErrorMessage": "Falha ao adicionar membro da equipe. Por favor, tente novamente.", + "updateMemberSuccessMessage": "Membro da equipe atualizado com sucesso!", + "updateMemberErrorMessage": "Falha ao atualizar membro da equipe. Por favor, tente novamente.", + "memberText": "Membro da Equipe", + "adminText": "Administrador", + "ownerText": "Dono da Equipe", + "addedText": "Adicionado", + "updatedText": "Atualizado", + "noResultFound": "Digite um endereço de email e pressione enter...", + "jobTitlesFetchError": "Falha ao buscar cargos", + "invitationResent": "Convite reenviado com sucesso!" +} diff --git a/worklenz-backend/src/public/locales/pt/settings/teams.json b/worklenz-backend/src/public/locales/pt/settings/teams.json new file mode 100644 index 00000000..e460318f --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "Equipes", + "team": "Equipe", + "teams": "Equipes", + "name": "Nome", + "created": "Criado", + "ownsBy": "Pertence a", + "edit": "Editar", + "editTeam": "Editar Equipe", + "pinTooltip": "Clique para fixar isso no menu principal", + "editTeamName": "Editar Nome da Equipe", + "updateName": "Atualizar Nome", + "namePlaceholder": "Nome", + "nameRequired": "Por favor digite um Nome", + "updateFailed": "Falha na alteração do nome da equipe!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..cf26b1a3 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,30 @@ +{ + "details": { + "task-key": "Chave da tarefa", + "phase": "Fase", + "assignees": "Responsáveis", + "due-date": "Data de vencimento", + "time-estimation": "Estimativa de tempo", + "priority": "Prioridade", + "labels": "Etiquetas", + "billable": "Faturável", + "notify": "Notificar", + "when-done-notify": "Quando concluída, notificar", + "start-date": "Data de início", + "end-date": "Data de término", + "hide-start-date": "Ocultar data de início", + "show-start-date": "Mostrar data de início", + "hours": "Horas", + "minutes": "Minutos", + "recurring": "Recorrente" + }, + "description": { + "title": "Descrição", + "placeholder": "Adicionar uma descrição mais detalhada..." + }, + "subTasks": { + "title": "Subtarefas", + "add-sub-task": "+ Adicionar subtarefa", + "refresh-sub-tasks": "Atualizar subtarefas" + } +} diff --git a/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-recurring-config.json b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-recurring-config.json new file mode 100644 index 00000000..5592d897 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer-recurring-config.json @@ -0,0 +1,34 @@ +{ + "recurring": "Recorrente", + "recurringTaskConfiguration": "Configuração de tarefa recorrente", + "repeats": "Repete", + "daily": "Diário", + "weekly": "Semanal", + "everyXDays": "A cada X dias", + "everyXWeeks": "A cada X semanas", + "everyXMonths": "A cada X meses", + "monthly": "Mensal", + "selectDaysOfWeek": "Selecionar dias da semana", + "mon": "Seg", + "tue": "Ter", + "wed": "Qua", + "thu": "Qui", + "fri": "Sex", + "sat": "Sáb", + "sun": "Dom", + "monthlyRepeatType": "Tipo de repetição mensal", + "onSpecificDate": "Em uma data específica", + "onSpecificDay": "Em um dia específico", + "dateOfMonth": "Data do mês", + "weekOfMonth": "Semana do mês", + "dayOfWeek": "Dia da semana", + "first": "Primeira", + "second": "Segunda", + "third": "Terceira", + "fourth": "Quarta", + "last": "Última", + "intervalDays": "Intervalo (dias)", + "intervalWeeks": "Intervalo (semanas)", + "intervalMonths": "Intervalo (meses)", + "saveChanges": "Salvar alterações" +} diff --git a/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer.json new file mode 100644 index 00000000..c24e943e --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "Digite sua Tarefa", + "deleteTask": "Deletar Tarefa" + }, + "taskInfoTab": { + "title": "Informações", + "details": { + "title": "Detalhes", + "task-key": "Chave da Tarefa", + "phase": "Fase", + "assignees": "Responsáveis", + "due-date": "Data de Vencimento", + "time-estimation": "Estimativa de Tempo", + "priority": "Prioridade", + "labels": "Etiquetas", + "billable": "Faturável", + "notify": "Notificar", + "when-done-notify": "Quando concluído, notificar", + "start-date": "Data de Início", + "end-date": "Data de Fim", + "hide-start-date": "Ocultar Data de Início", + "show-start-date": "Mostrar Data de Início", + "hours": "Horas", + "minutes": "Minutos", + "progressValue": "Valor do Progresso", + "progressValueTooltip": "Definir a porcentagem de progresso (0-100%)", + "progressValueRequired": "Por favor, insira um valor de progresso", + "progressValueRange": "O progresso deve estar entre 0 e 100", + "taskWeight": "Peso da Tarefa", + "taskWeightTooltip": "Definir o peso desta subtarefa (porcentagem)", + "taskWeightRequired": "Por favor, insira um peso da tarefa", + "taskWeightRange": "O peso deve estar entre 0 e 100", + "recurring": "Recorrente" + }, + "labels": { + "labelInputPlaceholder": "Pesquisar ou criar", + "labelsSelectorInputTip": "Pressione Enter para criar" + }, + "description": { + "title": "Descrição", + "placeholder": "Adicionar uma descrição mais detalhada..." + }, + "subTasks": { + "title": "Sub Tarefas", + "addSubTask": "Adicionar Sub Tarefa", + "addSubTaskInputPlaceholder": "Digite sua tarefa e pressione enter", + "refreshSubTasks": "Atualizar Sub Tarefas", + "edit": "Editar", + "delete": "Deletar", + "confirmDeleteSubTask": "Tem certeza de que deseja deletar esta subtarefa?", + "deleteSubTask": "Deletar Sub Tarefa" + }, + "dependencies": { + "title": "Dependências", + "addDependency": "+ Adicionar nova dependência", + "blockedBy": "Bloqueado por", + "searchTask": "Digite para pesquisar tarefa", + "noTasksFound": "Nenhuma tarefa encontrada", + "confirmDeleteDependency": "Tem certeza de que deseja deletar?" + }, + "attachments": { + "title": "Anexos", + "chooseOrDropFileToUpload": "Escolha ou arraste um arquivo para upload", + "uploading": "Enviando..." + }, + "comments": { + "title": "Comentários", + "addComment": "+ Adicionar novo comentário", + "noComments": "Ainda não há comentários. Seja o primeiro a comentar!", + "delete": "Deletar", + "confirmDeleteComment": "Tem certeza de que deseja deletar este comentário?", + "addCommentPlaceholder": "Adicionar um comentário...", + "cancel": "Cancelar", + "commentButton": "Comentar", + "attachFiles": "Anexar arquivos", + "addMoreFiles": "Adicionar mais arquivos", + "selectedFiles": "Arquivos Selecionados (Até 25MB, Máximo {count})", + "maxFilesError": "Você pode fazer upload de no máximo {count} arquivos", + "processFilesError": "Falha ao processar arquivos", + "addCommentError": "Por favor adicione um comentário ou anexe arquivos", + "createdBy": "Criado {{time}} por {{user}}", + "updatedTime": "Atualizado {{time}}" + }, + "searchInputPlaceholder": "Pesquisar por nome", + "pendingInvitation": "Convite Pendente" + }, + "taskTimeLogTab": { + "title": "Registro de Tempo", + "addTimeLog": "Adicionar novo registro de tempo", + "totalLogged": "Total Registrado", + "exportToExcel": "Exportar para Excel", + "noTimeLogsFound": "Nenhum registro de tempo encontrado", + "timeLogForm": { + "date": "Data", + "startTime": "Hora de Início", + "endTime": "Hora de Fim", + "workDescription": "Descrição do Trabalho", + "descriptionPlaceholder": "Adicionar uma descrição", + "logTime": "Registrar tempo", + "updateTime": "Atualizar tempo", + "cancel": "Cancelar", + "selectDateError": "Por favor selecione uma data", + "selectStartTimeError": "Por favor selecione a hora de início", + "selectEndTimeError": "Por favor selecione a hora de fim", + "endTimeAfterStartError": "A hora de fim deve ser posterior à hora de início" + } + }, + "taskActivityLogTab": { + "title": "Registro de Atividade", + "add": "ADICIONAR", + "remove": "REMOVER", + "none": "Nenhum", + "weight": "Peso", + "createdTask": "criou a tarefa." + }, + "taskProgress": { + "markAsDoneTitle": "Marcar Tarefa como Concluída?", + "confirmMarkAsDone": "Sim, marcar como concluída", + "cancelMarkAsDone": "Não, manter status atual", + "markAsDoneDescription": "Você definiu o progresso para 100%. Gostaria de atualizar o status da tarefa para \"Concluída\"?" + } +} diff --git a/worklenz-backend/src/public/locales/pt/task-list-filters.json b/worklenz-backend/src/public/locales/pt/task-list-filters.json new file mode 100644 index 00000000..21e8806b --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-list-filters.json @@ -0,0 +1,82 @@ +{ + "searchButton": "Pesquisar", + "resetButton": "Redefinir", + "searchInputPlaceholder": "Pesquisar por nome", + + "sortText": "Ordenar", + "statusText": "Status", + "phaseText": "Fase", + "priorityText": "Prioridade", + "labelsText": "Rótulos", + "membersText": "Membros", + "groupByText": "Agrupar por", + "showArchivedText": "Mostrar arquivados", + "showFieldsText": "Mostrar campos", + "keyText": "Chave", + "taskText": "Tarefa", + "descriptionText": "Descrição", + "phasesText": "Fases", + "progressText": "Progresso", + "timeTrackingText": "Rastreamento de Tempo", + "estimationText": "Estimativa", + "startDateText": "Data de Início", + "endDateText": "Data de Fim", + "dueDateText": "Data de Vencimento", + "completedDateText": "Data de Conclusão", + "createdDateText": "Data de Criação", + "lastUpdatedText": "Última Atualização", + "reporterText": "Relator", + "dueTimeText": "Hora de Vencimento", + "assigneesText": "Atribuições", + "timetrackingText": "Rastreamento de Tempo", + "startdateText": "Data de Início", + "duedateText": "Data de Vencimento", + "completeddateText": "Data de Conclusão", + "createddateText": "Data de Criação", + "lastupdatedText": "Última Atualização", + + "lowText": "Baixa", + "mediumText": "Média", + "highText": "Alta", + + "createStatusButtonTooltip": "Configurações de Status", + "configPhaseButtonTooltip": "Configurações de Fase", + "noLabelsFound": "Nenhum rótulo encontrado", + + "addStatusButton": "Adicionar Status", + "addPhaseButton": "Adicionar Fase", + + "createStatus": "Criar Status", + "name": "Nome", + "category": "Categoria", + "selectCategory": "Selecionar uma categoria", + "pleaseEnterAName": "Por favor, insira um nome", + "pleaseSelectACategory": "Por favor, selecione uma categoria", + "create": "Criar", + + "searchTasks": "Pesquisar tarefas...", + "searchPlaceholder": "Pesquisar...", + "fieldsText": "Campos", + "loadingFilters": "Carregando filtros...", + "noOptionsFound": "Nenhuma opção encontrada", + "filtersActive": "filtros ativos", + "filterActive": "filtro ativo", + "clearAll": "Limpar tudo", + "clearing": "Limpando...", + "cancel": "Cancelar", + "search": "Pesquisar", + "groupedBy": "Agrupado por", + "manageStatuses": "Gerenciar Status", + "managePhases": "Gerenciar Fases", + "dragToReorderStatuses": "Arraste os status para reordená-los. Cada status pode ter uma categoria diferente.", + "enterNewStatusName": "Digite o novo nome do status...", + "addStatus": "Adicionar Status", + "noStatusesFound": "Nenhum status encontrado. Crie seu primeiro status acima.", + "deleteStatus": "Excluir Status", + "deleteStatusConfirm": "Tem certeza de que deseja excluir este status? Esta ação não pode ser desfeita.", + "rename": "Renomear", + "delete": "Excluir", + "enterStatusName": "Digite o nome do status", + "selectCategory": "Selecionar categoria", + "close": "Fechar" +} diff --git a/worklenz-backend/src/public/locales/pt/task-list-table.json b/worklenz-backend/src/public/locales/pt/task-list-table.json new file mode 100644 index 00000000..f53d834f --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-list-table.json @@ -0,0 +1,136 @@ +{ + "keyColumn": "Chave", + "taskColumn": "Tarefa", + "descriptionColumn": "Descrição", + "progressColumn": "Progresso", + "membersColumn": "Membros", + "assigneesColumn": "Atribuídos", + "labelsColumn": "Etiquetas", + "phasesColumn": "Fases", + "phaseColumn": "Fase", + "statusColumn": "Status", + "priorityColumn": "Prioridade", + "timeTrackingColumn": "Acompanhamento de Tempo", + "timetrackingColumn": "Acompanhamento de Tempo", + "estimationColumn": "Estimativa", + "startDateColumn": "Data de Início", + "startdateColumn": "Data de Início", + "dueDateColumn": "Data de Vencimento", + "duedateColumn": "Data de Vencimento", + "completedDateColumn": "Data de Conclusão", + "completeddateColumn": "Data de Conclusão", + "createdDateColumn": "Data de Criação", + "createddateColumn": "Data de Criação", + "lastUpdatedColumn": "Última Atualização", + "lastupdatedColumn": "Última Atualização", + "reporterColumn": "Reportador", + "dueTimeColumn": "Hora de Vencimento", + "todoSelectorText": "A Fazer", + "doingSelectorText": "Fazendo", + "doneSelectorText": "Feito", + + "lowSelectorText": "Baixo", + "mediumSelectorText": "Médio", + "highSelectorText": "Alto", + + "selectText": "Selecionar", + "labelsSelectorInputTip": "Pressione enter para criar!", + + "addTaskText": "Adicionar Tarefa", + "addSubTaskText": "+ Adicionar Subtarefa", + "noTasksInGroup": "Nenhuma tarefa neste grupo", + "addTaskInputPlaceholder": "Digite sua tarefa e pressione enter", + + "openButton": "Abrir", + "okButton": "Ok", + + "noLabelsFound": "Nenhuma etiqueta encontrada", + "searchInputPlaceholder": "Buscar ou criar", + "assigneeSelectorInviteButton": "Convide um novo membro por e-mail", + "labelInputPlaceholder": "Buscar ou criar", + "searchLabelsPlaceholder": "Buscar etiquetas...", + "createLabelButton": "Criar \"{{name}}\"", + "manageLabelsPath": "Configurações → Etiquetas", + + "pendingInvitation": "Convite Pendente", + + "contextMenu": { + "assignToMe": "Atribuir a mim", + "moveTo": "Mover para", + "unarchive": "Desarquivar", + "archive": "Arquivar", + "convertToSubTask": "Converter em Subtarefa", + "convertToTask": "Converter em Tarefa", + "delete": "Excluir", + "searchByNameInputPlaceholder": "Buscar por nome" + }, + "setDueDate": "Definir data de vencimento", + "setStartDate": "Definir data de início", + "clearDueDate": "Limpar data de vencimento", + "clearStartDate": "Limpar data de início", + "dueDatePlaceholder": "Data de vencimento", + "startDatePlaceholder": "Data de início", + + "emptyStates": { + "noTaskGroups": "Nenhum grupo de tarefas encontrado", + "noTaskGroupsDescription": "As tarefas aparecerão aqui quando forem criadas ou quando filtros forem aplicados.", + "errorPrefix": "Erro:", + "dragTaskFallback": "Tarefa" + }, + + "customColumns": { + "addCustomColumn": "Adicionar uma coluna personalizada", + "customColumnHeader": "Coluna Personalizada", + "customColumnSettings": "Configurações da coluna personalizada", + "noCustomValue": "Sem valor", + "peopleField": "Campo de pessoas", + "noDate": "Sem data", + "unsupportedField": "Tipo de campo não suportado", + + "modal": { + "addFieldTitle": "Adicionar campo", + "editFieldTitle": "Editar campo", + "fieldTitle": "Título do campo", + "fieldTitleRequired": "O título do campo é obrigatório", + "columnTitlePlaceholder": "Título da coluna", + "type": "Tipo", + "deleteConfirmTitle": "Tem certeza de que deseja excluir esta coluna personalizada?", + "deleteConfirmDescription": "Esta ação não pode ser desfeita. Todos os dados associados a esta coluna serão excluídos permanentemente.", + "deleteButton": "Excluir", + "cancelButton": "Cancelar", + "createButton": "Criar", + "updateButton": "Atualizar", + "createSuccessMessage": "Coluna personalizada criada com sucesso", + "updateSuccessMessage": "Coluna personalizada atualizada com sucesso", + "deleteSuccessMessage": "Coluna personalizada excluída com sucesso", + "deleteErrorMessage": "Falha ao excluir a coluna personalizada", + "createErrorMessage": "Falha ao criar a coluna personalizada", + "updateErrorMessage": "Falha ao atualizar a coluna personalizada" + }, + + "fieldTypes": { + "people": "Pessoas", + "number": "Número", + "date": "Data", + "selection": "Seleção", + "checkbox": "Caixa de seleção", + "labels": "Etiquetas", + "key": "Chave", + "formula": "Fórmula" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} subtarefa", + "subtasks_plural": "{{count}} subtarefas", + "comments": "{{count}} comentário", + "comments_plural": "{{count}} comentários", + "attachments": "{{count}} anexo", + "attachments_plural": "{{count}} anexos", + "subscribers": "A tarefa tem assinantes", + "dependencies": "A tarefa tem dependências", + "recurring": "Tarefa recorrente" + } + } +} diff --git a/worklenz-backend/src/public/locales/pt/task-management.json b/worklenz-backend/src/public/locales/pt/task-management.json new file mode 100644 index 00000000..946b3162 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-management.json @@ -0,0 +1,21 @@ +{ + "noTasksInGroup": "Nenhuma tarefa neste grupo", + "noTasksInGroupDescription": "Adicione uma tarefa para começar", + "addFirstTask": "Adicione sua primeira tarefa", + "openTask": "Abrir", + "subtask": "subtarefa", + "subtasks": "subtarefas", + "comment": "comentário", + "comments": "comentários", + "attachment": "anexo", + "attachments": "anexos", + "enterSubtaskName": "Digite o nome da subtarefa...", + "add": "Adicionar", + "cancel": "Cancelar", + "renameGroup": "Renomear Grupo", + "renameStatus": "Renomear Status", + "renamePhase": "Renomear Fase", + "changeCategory": "Alterar Categoria", + "clickToEditGroupName": "Clique para editar o nome do grupo", + "enterGroupName": "Digite o nome do grupo" +} diff --git a/worklenz-backend/src/public/locales/pt/task-template-drawer.json b/worklenz-backend/src/public/locales/pt/task-template-drawer.json new file mode 100644 index 00000000..f1358349 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/task-template-drawer.json @@ -0,0 +1,11 @@ +{ + "createTaskTemplate": "Criar Template de Tarefa", + "editTaskTemplate": "Editar Template de Tarefa", + "cancelText": "Cancelar", + "saveText": "Salvar", + "templateNameText": "Nome do Template", + "selectedTasks": "Tarefas Selecionadas", + "removeTask": "Remover", + "cancelButton": "Cancelar", + "saveButton": "Salvar" +} diff --git a/worklenz-backend/src/public/locales/pt/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/pt/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..f4a3a10e --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/tasks/task-table-bulk-actions.json @@ -0,0 +1,41 @@ +{ + "taskSelected": "Tarefa selecionada", + "tasksSelected": "Tarefas selecionadas", + "changeStatus": "Alterar Status/ Prioridade/ Fases", + "changeLabel": "Alterar Etiqueta", + "assignToMe": "Atribuir a mim", + "changeAssignees": "Alterar Assignados", + "archive": "Arquivar", + "unarchive": "Desarquivar", + "delete": "Deletar", + "moreOptions": "Mais opções", + "deselectAll": "Desmarcar todas", + "status": "Status", + "priority": "Prioridade", + "phase": "Fase", + "member": "Membro", + "createTaskTemplate": "Criar Modelo de Tarefa", + "apply": "Aplicar", + "createLabel": "+ Criar etiqueta", + "searchOrCreateLabel": "Pesquisar ou criar etiqueta...", + "hitEnterToCreate": "Pressione Enter para criar", + "labelExists": "A etiqueta já existe", + "pendingInvitation": "Convite Pendente", + "noMatchingLabels": "Nenhuma etiqueta correspondente", + "noLabels": "Sem etiquetas", + "CHANGE_STATUS": "Alterar Status", + "CHANGE_PRIORITY": "Alterar Prioridade", + "CHANGE_PHASE": "Alterar Fase", + "ADD_LABELS": "Adicionar Etiquetas", + "ASSIGN_TO_ME": "Atribuir a Mim", + "ASSIGN_MEMBERS": "Atribuir Membros", + "ARCHIVE": "Arquivar", + "DELETE": "Deletar", + "CANCEL": "Cancelar", + "CLEAR_SELECTION": "Limpar Seleção", + "TASKS_SELECTED": "{{count}} tarefa selecionada", + "TASKS_SELECTED_plural": "{{count}} tarefas selecionadas", + "DELETE_TASKS_CONFIRM": "Deletar {{count}} tarefa?", + "DELETE_TASKS_CONFIRM_plural": "Deletar {{count}} tarefas?", + "DELETE_TASKS_WARNING": "Esta ação não pode ser desfeita." +} diff --git a/worklenz-backend/src/public/locales/pt/template-drawer.json b/worklenz-backend/src/public/locales/pt/template-drawer.json new file mode 100644 index 00000000..cb79d2bf --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "Editar Template de Tarefa", + "cancelText": "Cancelar", + "saveText": "Salvar", + "templateNameText": "Nome do Template", + "selectedTasks": "Tarefas Selecionadas", + "removeTask": "Remover", + "description": "Descrição", + "phase": "Fase", + "statuses": "Status", + "priorities": "Prioridades", + "labels": "Rótulos", + "tasks": "Tarefas", + "noTemplateSelected": "Nenhum template selecionado", + "noDescription": "Sem descrição", + "worklenzTemplates": "Templates de Worklenz", + "yourTemplatesLibrary": "Sua Biblioteca", + "searchTemplates": "Pesquisar Templates" +} diff --git a/worklenz-backend/src/public/locales/pt/templateDrawer.json b/worklenz-backend/src/public/locales/pt/templateDrawer.json new file mode 100644 index 00000000..c4d970c6 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "Rastreamento de Bugs", + "construction": "Construção", + "designCreative": "Design e Criatividade", + "education": "Educação", + "finance": "Finanças", + "hrRecruiting": "RH e Recrutamento", + "informationTechnology": "Tecnologia da Informação", + "legal": "Jurídico", + "manufacturing": "Manufatura", + "marketing": "Marketing", + "nonprofit": "Sem Fins Lucrativos", + "personalUse": "Uso Pessoal", + "salesCRM": "Vendas e CRM", + "serviceConsulting": "Serviço e Consultoria", + "softwareDevelopment": "Desenvolvimento de Software", + "description": "Descrição", + "phase": "Fase", + "statuses": "Status", + "priorities": "Prioridades", + "labels": "Rótulos", + "tasks": "Tarefas" +} diff --git a/worklenz-backend/src/public/locales/pt/time-report.json b/worklenz-backend/src/public/locales/pt/time-report.json new file mode 100644 index 00000000..b40546e9 --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/time-report.json @@ -0,0 +1,57 @@ +{ + "includeArchivedProjects": "Incluir Projetos Arquivados", + "export": "Exportar", + "timeSheet": "Folha de Tempo", + + "searchByName": "Pesquisar por nome", + "selectAll": "Selecionar Tudo", + "teams": "Equipes", + + "searchByProject": "Pesquisar por nome do projeto", + "projects": "Projetos", + + "searchByCategory": "Pesquisar por nome da categoria", + "categories": "Categorias", + + "billable": "Faturável", + "nonBillable": "Não Faturável", + + "total": "Total", + + "projectsTimeSheet": "Folha de Tempo de Projetos", + + "loggedTime": "Tempo Registrado(horas)", + + "exportToExcel": "Exportar para Excel", + "logged": "registrado", + "for": "para", + + "membersTimeSheet": "Folha de Tempo de Membros", + "member": "Membro", + + "estimatedVsActual": "Estimado vs Real", + "workingDays": "Dias Úteis", + "manDays": "Dias Homem", + "days": "Dias", + "estimatedDays": "Dias Estimados", + "actualDays": "Dias Reais", + + "noCategories": "Nenhuma categoria encontrada", + "noCategory": "Sem Categoria", + "noProjects": "Nenhum projeto encontrado", + "noTeams": "Nenhuma equipe encontrada", + "noData": "Nenhum dado encontrado", + + "groupBy": "Agrupar por", + "groupByCategory": "Categoria", + "groupByTeam": "Equipe", + "groupByStatus": "Status", + "groupByNone": "Nenhum", + "clearSearch": "Limpar pesquisa", + "selectedProjects": "Projetos Selecionados", + "projectsSelected": "projetos selecionados", + "showSelected": "Mostrar Apenas Selecionados", + "expandAll": "Expandir Tudo", + "collapseAll": "Recolher Tudo", + "ungrouped": "Não Agrupado" +} diff --git a/worklenz-backend/src/public/locales/pt/unauthorized.json b/worklenz-backend/src/public/locales/pt/unauthorized.json new file mode 100644 index 00000000..e67e0ffd --- /dev/null +++ b/worklenz-backend/src/public/locales/pt/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "¡Não autorizado!", + "subtitle": "Você não tem permissão para acessar esta página", + "button": "Ir para Início" +} diff --git a/worklenz-backend/src/public/locales/zh/404-page.json b/worklenz-backend/src/public/locales/zh/404-page.json new file mode 100644 index 00000000..24a74b3e --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/404-page.json @@ -0,0 +1,4 @@ +{ + "doesNotExistText": "抱歉,您访问的页面不存在。", + "backHomeButton": "返回首页" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/account-setup.json b/worklenz-backend/src/public/locales/zh/account-setup.json new file mode 100644 index 00000000..51cac1eb --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/account-setup.json @@ -0,0 +1,27 @@ +{ + "continue": "继续", + "setupYourAccount": "设置您的Worklenz账户。", + "organizationStepTitle": "命名您的组织", + "organizationStepLabel": "为您的Worklenz账户选择一个名称。", + "projectStepTitle": "创建您的第一个项目", + "projectStepLabel": "您现在正在做什么项目?", + "projectStepPlaceholder": "例如:营销计划", + "tasksStepTitle": "创建您的第一个任务", + "tasksStepLabel": "输入您将在其中完成的几个任务", + "tasksStepAddAnother": "添加另一个", + "emailPlaceholder": "电子邮件地址", + "invalidEmail": "请输入有效的电子邮件地址", + "or": "或", + "templateButton": "从模板导入", + "goBack": "返回", + "cancel": "取消", + "create": "创建", + "templateDrawerTitle": "从模板中选择", + "step3InputLabel": "通过电子邮件邀请", + "addAnother": "添加另一个", + "skipForNow": "暂时跳过", + "formTitle": "创建您的第一个任务。", + "step3Title": "邀请您的团队一起工作", + "maxMembers": "(您最多可以邀请5名成员)", + "maxTasks": "(您最多可以创建5个任务)" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/current-bill.json b/worklenz-backend/src/public/locales/zh/admin-center/current-bill.json new file mode 100644 index 00000000..e18e8761 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/current-bill.json @@ -0,0 +1,96 @@ +{ + "title": "账单", + "currentBill": "当前账单", + "configuration": "配置", + "currentPlanDetails": "当前计划详情", + "upgradePlan": "升级计划", + "cardBodyText01": "免费试用", + "cardBodyText02": "(您的试用计划将在1个月19天后到期)", + "redeemCode": "兑换码", + "accountStorage": "账户存储", + "used": "已用:", + "remaining": "剩余:", + "charges": "费用", + "tooltip": "当前账单周期的费用", + "description": "描述", + "billingPeriod": "账单周期", + "billStatus": "账单状态", + "perUserValue": "每用户费用", + "users": "用户", + "amount": "金额", + "invoices": "发票", + "transactionId": "交易ID", + "transactionDate": "交易日期", + "paymentMethod": "支付方式", + "status": "状态", + "ltdUsers": "您最多可以添加{{ltd_users}}名用户。", + "totalSeats": "总席位", + "availableSeats": "可用席位", + "addMoreSeats": "添加更多席位", + "drawerTitle": "兑换码", + "label": "兑换码", + "drawerPlaceholder": "输入您的兑换码", + "redeemSubmit": "提交", + "modalTitle": "为您的团队选择最佳计划", + "seatLabel": "席位数量", + "freePlan": "免费计划", + "startup": "初创", + "business": "商业", + "tag": "最受欢迎", + "enterprise": "企业", + "freeSubtitle": "永远免费", + "freeUsers": "最适合个人使用", + "freeText01": "100MB存储", + "freeText02": "3个项目", + "freeText03": "5名团队成员", + "startupSubtitle": "固定费率/月", + "startupUsers": "最多15名用户", + "startupText01": "25GB存储", + "startupText02": "无限活跃项目", + "startupText03": "日程", + "startupText04": "报告", + "startupText05": "订阅项目", + "businessSubtitle": "每用户/月", + "businessUsers": "16 - 200名用户", + "enterpriseUsers": "200 - 500+名用户", + "footerTitle": "请提供一个我们可以联系您的电话号码。", + "footerLabel": "联系电话", + "footerButton": "联系我们", + "redeemCodePlaceHolder": "输入您的兑换码", + "submit": "提交", + "trialPlan": "免费试用", + "trialExpireDate": "有效期至{{trial_expire_date}}", + "trialExpired": "您的免费试用已于{{trial_expire_string}}到期", + "trialInProgress": "您的免费试用将在{{trial_expire_string}}到期", + "required": "此字段为必填项", + "invalidCode": "无效的代码", + "selectPlan": "为您的团队选择最佳计划", + "changeSubscriptionPlan": "更改您的订阅计划", + "noOfSeats": "席位数量", + "annualPlan": "专业 - 年度", + "monthlyPlan": "专业 - 月度", + "freeForever": "永远免费", + "bestForPersonalUse": "最适合个人使用", + "storage": "存储", + "projects": "项目", + "teamMembers": "团队成员", + "unlimitedTeamMembers": "无限团队成员", + "unlimitedActiveProjects": "无限活跃项目", + "schedule": "日程", + "reporting": "报告", + "subscribeToProjects": "订阅项目", + "billedAnnually": "按年计费", + "billedMonthly": "按月计费", + "pausePlan": "暂停计划", + "resumePlan": "恢复计划", + "changePlan": "更改计划", + "cancelPlan": "取消计划", + "perMonthPerUser": "每用户/月", + "viewInvoice": "查看发票", + "switchToFreePlan": "切换到免费计划", + "expirestoday": "今天", + "expirestomorrow": "明天", + "expiredDaysAgo": "{{days}}天前", + "continueWith": "继续使用{{plan}}", + "changeToPlan": "更改为{{plan}}" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/overview.json b/worklenz-backend/src/public/locales/zh/admin-center/overview.json new file mode 100644 index 00000000..9c70093f --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/overview.json @@ -0,0 +1,8 @@ +{ + "overview": "概览", + "name": "组织名称", + "owner": "组织所有者", + "admins": "组织管理员", + "contactNumber": "添加联系电话", + "edit": "编辑" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/projects.json b/worklenz-backend/src/public/locales/zh/admin-center/projects.json new file mode 100644 index 00000000..ca2eded2 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/projects.json @@ -0,0 +1,12 @@ +{ + "membersCount": "成员数量", + "createdAt": "创建于", + "projectName": "项目名称", + "teamName": "团队名称", + "refreshProjects": "刷新项目", + "searchPlaceholder": "按项目名称搜索", + "deleteProject": "您确定要删除此项目吗?", + "confirm": "确认", + "cancel": "取消", + "delete": "删除项目" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/sidebar.json b/worklenz-backend/src/public/locales/zh/admin-center/sidebar.json new file mode 100644 index 00000000..ab8808c3 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "概览", + "users": "用户", + "teams": "团队", + "billing": "账单", + "projects": "项目", + "adminCenter": "管理中心" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/teams.json b/worklenz-backend/src/public/locales/zh/admin-center/teams.json new file mode 100644 index 00000000..4244d848 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/teams.json @@ -0,0 +1,33 @@ +{ + "title": "团队", + "subtitle": "团队", + "tooltip": "刷新团队", + "placeholder": "按名称搜索", + "addTeam": "添加团队", + "team": "团队", + "membersCount": "成员数量", + "members": "成员", + "drawerTitle": "创建新团队", + "label": "团队名称", + "drawerPlaceholder": "名称", + "create": "创建", + "delete": "删除", + "settings": "设置", + "popTitle": "您确定吗?", + "message": "请输入名称", + "teamSettings": "团队设置", + "teamName": "团队名称", + "teamDescription": "团队描述", + "teamMembers": "团队成员", + "teamMembersCount": "团队成员数量", + "teamMembersPlaceholder": "按名称搜索", + "addMember": "添加成员", + "add": "添加", + "update": "更新", + "teamNamePlaceholder": "团队名称", + "user": "用户", + "role": "角色", + "owner": "所有者", + "admin": "管理员", + "member": "成员" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/admin-center/users.json b/worklenz-backend/src/public/locales/zh/admin-center/users.json new file mode 100644 index 00000000..83800c09 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/admin-center/users.json @@ -0,0 +1,9 @@ +{ + "title": "用户", + "subTitle": "用户", + "placeholder": "按名称搜索", + "user": "用户", + "email": "电子邮件", + "lastActivity": "最后活动", + "refresh": "刷新用户" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/all-project-list.json b/worklenz-backend/src/public/locales/zh/all-project-list.json new file mode 100644 index 00000000..a6c72c06 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/all-project-list.json @@ -0,0 +1,34 @@ +{ + "name": "名称", + "client": "客户", + "category": "类别", + "status": "状态", + "tasksProgress": "任务进度", + "updated_at": "最后更新", + "members": "成员", + "setting": "设置", + "projects": "项目", + "refreshProjects": "刷新项目", + "all": "全部", + "favorites": "收藏", + "archived": "已归档", + "placeholder": "按名称搜索", + "archive": "归档", + "unarchive": "取消归档", + "archiveConfirm": "您确定要归档此项目吗?", + "unarchiveConfirm": "您确定要取消归档此项目吗?", + "yes": "是", + "no": "否", + "clickToFilter": "点击筛选", + "noProjects": "未找到项目", + "addToFavourites": "添加到收藏", + "list": "列表", + "group": "分组", + "listView": "列表视图", + "groupView": "分组视图", + "groupBy": { + "category": "类别", + "client": "客户" + }, + "noPermission": "您没有权限执行此操作" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/auth/auth-common.json b/worklenz-backend/src/public/locales/zh/auth/auth-common.json new file mode 100644 index 00000000..df57a70d --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/auth/auth-common.json @@ -0,0 +1,5 @@ +{ + "loggingOut": "正在登出...", + "authenticating": "正在认证...", + "gettingThingsReady": "正在为您准备..." +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/auth/forgot-password.json b/worklenz-backend/src/public/locales/zh/auth/forgot-password.json new file mode 100644 index 00000000..de1529a4 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/auth/forgot-password.json @@ -0,0 +1,12 @@ +{ + "headerDescription": "重置您的密码", + "emailLabel": "电子邮件", + "emailPlaceholder": "输入您的电子邮件", + "emailRequired": "请输入您的电子邮件!", + "resetPasswordButton": "重置密码", + "returnToLoginButton": "返回登录", + "passwordResetSuccessMessage": "密码重置链接已发送到您的电子邮件。", + "orText": "或", + "successTitle": "重置指令已发送!", + "successMessage": "重置信息已发送到您的电子邮件。请检查您的电子邮件。" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/auth/login.json b/worklenz-backend/src/public/locales/zh/auth/login.json new file mode 100644 index 00000000..e53d5fc5 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/auth/login.json @@ -0,0 +1,27 @@ +{ + "headerDescription": "登录到您的账户", + "emailLabel": "电子邮件", + "emailPlaceholder": "输入您的电子邮件", + "emailRequired": "请输入您的电子邮件!", + "passwordLabel": "密码", + "passwordPlaceholder": "输入您的密码", + "passwordRequired": "请输入您的密码!", + "rememberMe": "记住我", + "loginButton": "登录", + "signupButton": "注册", + "forgotPasswordButton": "忘记密码?", + "signInWithGoogleButton": "使用Google登录", + "dontHaveAccountText": "没有账户?", + "orText": "或", + "successMessage": "您已成功登录!", + "loginError": "登录失败", + "googleLoginError": "Google登录失败", + "validationMessages": { + "email": "请输入有效的电子邮件地址", + "password": "密码必须至少包含8个字符" + }, + "errorMessages": { + "loginErrorTitle": "登录失败", + "loginErrorMessage": "请检查您的电子邮件和密码并重试" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/auth/signup.json b/worklenz-backend/src/public/locales/zh/auth/signup.json new file mode 100644 index 00000000..a2b34e57 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/auth/signup.json @@ -0,0 +1,29 @@ +{ + "headerDescription": "注册以开始使用", + "nameLabel": "全名", + "namePlaceholder": "输入您的全名", + "nameRequired": "请输入您的全名!", + "nameMinCharacterRequired": "全名必须至少包含4个字符!", + "emailLabel": "电子邮件", + "emailPlaceholder": "输入您的电子邮件", + "emailRequired": "请输入您的电子邮件!", + "passwordLabel": "密码", + "passwordPlaceholder": "输入您的密码", + "passwordRequired": "请输入您的密码!", + "passwordMinCharacterRequired": "密码必须至少包含8个字符!", + "passwordPatternRequired": "密码不符合要求!", + "strongPasswordPlaceholder": "输入更强的密码", + "passwordValidationAltText": "密码必须至少包含8个字符,包括大小写字母、一个数字和一个符号。", + "signupSuccessMessage": "您已成功注册!", + "privacyPolicyLink": "隐私政策", + "termsOfUseLink": "使用条款", + "bySigningUpText": "通过注册,您同意我们的", + "andText": "和", + "signupButton": "注册", + "signInWithGoogleButton": "使用Google登录", + "alreadyHaveAccountText": "已经有账户了?", + "loginButton": "登录", + "orText": "或", + "reCAPTCHAVerificationError": "reCAPTCHA验证错误", + "reCAPTCHAVerificationErrorMessage": "我们无法验证您的reCAPTCHA。请重试。" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/auth/verify-reset-email.json b/worklenz-backend/src/public/locales/zh/auth/verify-reset-email.json new file mode 100644 index 00000000..11222523 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/auth/verify-reset-email.json @@ -0,0 +1,14 @@ +{ + "title": "验证重置电子邮件", + "description": "输入您的新密码", + "placeholder": "输入您的新密码", + "confirmPasswordPlaceholder": "确认您的新密码", + "passwordHint": "至少8个字符,包括大小写字母、一个数字和一个符号。", + "resetPasswordButton": "重置密码", + "orText": "或", + "resendResetEmail": "重新发送重置电子邮件", + "passwordRequired": "请输入您的新密码", + "returnToLoginButton": "返回登录", + "confirmPasswordRequired": "请确认您的新密码", + "passwordMismatch": "两次输入的密码不匹配" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/common.json b/worklenz-backend/src/public/locales/zh/common.json new file mode 100644 index 00000000..520ee5e2 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/common.json @@ -0,0 +1,9 @@ +{ + "login-success": "登录成功!", + "login-failed": "登录失败。请检查您的凭据并重试。", + "signup-success": "注册成功!欢迎加入。", + "signup-failed": "注册失败。请确保填写所有必填字段并重试。", + "reconnecting": "与服务器断开连接。", + "connection-lost": "无法连接到服务器。请检查您的互联网连接。", + "connection-restored": "成功连接到服务器" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/create-first-project-form.json b/worklenz-backend/src/public/locales/zh/create-first-project-form.json new file mode 100644 index 00000000..95ea4099 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/create-first-project-form.json @@ -0,0 +1,13 @@ +{ + "formTitle": "创建您的第一个项目", + "inputLabel": "您现在正在做什么项目?", + "or": "或", + "templateButton": "从模板导入", + "createFromTemplate": "从模板创建", + "goBack": "返回", + "continue": "继续", + "cancel": "取消", + "create": "创建", + "templateDrawerTitle": "从模板中选择", + "createProject": "创建项目" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/create-first-tasks.json b/worklenz-backend/src/public/locales/zh/create-first-tasks.json new file mode 100644 index 00000000..810d5aff --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/create-first-tasks.json @@ -0,0 +1,7 @@ +{ + "formTitle": "创建您的第一个任务。", + "inputLable": "输入您将在其中完成的几个任务", + "addAnother": "添加另一个", + "goBack": "返回", + "continue": "继续" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/home.json b/worklenz-backend/src/public/locales/zh/home.json new file mode 100644 index 00000000..184b4f1a --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/home.json @@ -0,0 +1,46 @@ +{ + "todoList": { + "title": "待办事项列表", + "refreshTasks": "刷新任务", + "addTask": "+ 添加任务", + "noTasks": "没有任务", + "pressEnter": "按", + "toCreate": "创建。", + "markAsDone": "标记为完成" + }, + "projects": { + "title": "项目", + "refreshProjects": "刷新项目", + "noRecentProjects": "您当前未被分配到任何项目。", + "noFavouriteProjects": "没有项目被标记为收藏。", + "recent": "最近", + "favourites": "收藏" + }, + "tasks": { + "assignedToMe": "分配给我", + "assignedByMe": "由我分配", + "all": "全部", + "today": "今天", + "upcoming": "即将到来", + "overdue": "逾期", + "noDueDate": "没有截止日期", + "noTasks": "没有任务可显示。", + "addTask": "+ 添加任务", + "name": "名称", + "project": "项目", + "status": "状态", + "dueDate": "截止日期", + "dueDatePlaceholder": "设置截止日期", + "tomorrow": "明天", + "nextWeek": "下周", + "nextMonth": "下个月", + "projectRequired": "请选择一个项目", + "pressTabToSelectDueDateAndProject": "按Tab键选择截止日期和项目", + "dueOn": "任务截止于", + "taskRequired": "请添加一个任务", + "list": "列表", + "calendar": "日历", + "tasks": "任务", + "refresh": "刷新" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/invite-initial-team-members.json b/worklenz-backend/src/public/locales/zh/invite-initial-team-members.json new file mode 100644 index 00000000..6ebb9fbf --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/invite-initial-team-members.json @@ -0,0 +1,8 @@ +{ + "formTitle": "邀请您的团队一起工作", + "inputLable": "通过电子邮件邀请", + "addAnother": "添加另一个", + "goBack": "返回", + "continue": "继续", + "skipForNow": "暂时跳过" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/kanban-board.json b/worklenz-backend/src/public/locales/zh/kanban-board.json new file mode 100644 index 00000000..7b72c5d5 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/kanban-board.json @@ -0,0 +1,19 @@ +{ + "rename": "重命名", + "delete": "删除", + "addTask": "添加任务", + "addSectionButton": "添加部分", + "changeCategory": "更改类别", + "deleteTooltip": "删除", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "dueDate": "截止日期", + "cancel": "取消", + "today": "今天", + "tomorrow": "明天", + "assignToMe": "分配给我", + "archive": "归档", + "newTaskNamePlaceholder": "写一个任务名称", + "newSubtaskNamePlaceholder": "写一个子任务名称" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/license-expired.json b/worklenz-backend/src/public/locales/zh/license-expired.json new file mode 100644 index 00000000..838125c2 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/license-expired.json @@ -0,0 +1,6 @@ +{ + "title": "您的Worklenz试用已过期!", + "subtitle": "请立即升级。", + "button": "立即升级", + "checking": "正在检查订阅状态..." +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/navbar.json b/worklenz-backend/src/public/locales/zh/navbar.json new file mode 100644 index 00000000..c4ed67ab --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/navbar.json @@ -0,0 +1,31 @@ +{ + "logoAlt": "Worklenz Logo", + "home": "首页", + "projects": "项目", + "schedule": "日程", + "reporting": "报告", + "clients": "客户", + "teams": "团队", + "labels": "标签", + "jobTitles": "职位", + "upgradePlan": "升级计划", + "upgradePlanTooltip": "升级计划", + "invite": "邀请", + "inviteTooltip": "邀请团队成员加入", + "switchTeamTooltip": "切换团队", + "help": "帮助", + "notificationTooltip": "查看通知", + "profileTooltip": "查看个人资料", + "adminCenter": "管理中心", + "settings": "设置", + "logOut": "登出", + "notificationsDrawer": { + "read": "已读通知", + "unread": "未读通知", + "markAsRead": "标记为已读", + "readAndJoin": "阅读并加入", + "accept": "接受", + "acceptAndJoin": "接受并加入", + "noNotifications": "没有通知" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/organization-name-form.json b/worklenz-backend/src/public/locales/zh/organization-name-form.json new file mode 100644 index 00000000..df8727d8 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/organization-name-form.json @@ -0,0 +1,5 @@ +{ + "nameYourOrganization": "命名您的组织。", + "worklenzAccountTitle": "为您的Worklenz账户选择一个名称。", + "continue": "继续" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/phases-drawer.json b/worklenz-backend/src/public/locales/zh/phases-drawer.json new file mode 100644 index 00000000..24d21b38 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/phases-drawer.json @@ -0,0 +1,19 @@ +{ + "configurePhases": "配置阶段", + "phaseLabel": "阶段标签", + "enterPhaseName": "输入阶段标签名称", + "addOption": "添加选项", + "phaseOptions": "阶段选项:", + "dragToReorderPhases": "拖拽阶段以重新排序。每个阶段可以有不同的颜色。", + "enterNewPhaseName": "输入新阶段名称...", + "addPhase": "添加阶段", + "noPhasesFound": "未找到阶段。请在上面创建您的第一个阶段。", + "deletePhase": "删除阶段", + "deletePhaseConfirm": "您确定要删除此阶段吗?此操作无法撤销。", + "rename": "重命名", + "delete": "删除", + "enterPhaseName": "输入阶段名称", + "selectColor": "选择颜色", + "managePhases": "管理阶段", + "close": "关闭" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-drawer.json b/worklenz-backend/src/public/locales/zh/project-drawer.json new file mode 100644 index 00000000..1649dfde --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-drawer.json @@ -0,0 +1,42 @@ +{ + "createProject": "创建项目", + "editProject": "编辑项目", + "enterCategoryName": "输入类别名称", + "hitEnterToCreate": "按回车键创建!", + "enterNotes": "备注", + "youCanManageClientsUnderSettings": "您可以在设置中管理客户", + "addCategory": "向项目添加类别", + "newCategory": "新类别", + "notes": "备注", + "startDate": "开始日期", + "endDate": "结束日期", + "estimateWorkingDays": "估算工作日", + "estimateManDays": "估算人天", + "hoursPerDay": "每天小时数", + "create": "创建", + "update": "更新", + "delete": "删除", + "typeToSearchClients": "输入以搜索客户", + "projectColor": "项目颜色", + "pleaseEnterAName": "请输入名称", + "enterProjectName": "输入项目名称", + "name": "名称", + "status": "状态", + "health": "健康状况", + "category": "类别", + "projectManager": "项目经理", + "client": "客户", + "deleteConfirmation": "您确定要删除吗?", + "deleteConfirmationDescription": "这将删除所有相关数据且无法撤销。", + "yes": "是", + "no": "否", + "createdAt": "创建于", + "updatedAt": "更新于", + "by": "由", + "add": "添加", + "asClient": "作为客户", + "createClient": "创建客户", + "searchInputPlaceholder": "按名称或电子邮件搜索", + "hoursPerDayValidationMessage": "每天小时数必须是1到24之间的数字", + "noPermission": "无权限" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view-files.json b/worklenz-backend/src/public/locales/zh/project-view-files.json new file mode 100644 index 00000000..9cbf8ef6 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view-files.json @@ -0,0 +1,14 @@ +{ + "nameColumn": "名称", + "attachedTaskColumn": "附加任务", + "sizeColumn": "大小", + "uploadedByColumn": "上传者", + "uploadedAtColumn": "上传时间", + "fileIconAlt": "文件图标", + "titleDescriptionText": "此项目中任务的所有附件将显示在这里。", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "segmentedTooltip": "即将推出!在列表视图和缩略图视图之间切换。", + "emptyText": "项目中没有附件。" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view-insights.json b/worklenz-backend/src/public/locales/zh/project-view-insights.json new file mode 100644 index 00000000..903d73d2 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view-insights.json @@ -0,0 +1,41 @@ +{ + "overview": { + "title": "概览", + "statusOverview": "状态概览", + "priorityOverview": "优先级概览", + "lastUpdatedTasks": "最近更新的任务" + }, + "members": { + "title": "成员", + "tooltip": "成员", + "tasksByMembers": "按成员分类任务", + "tasksByMembersTooltip": "按成员分类任务", + "name": "名称", + "taskCount": "任务计数", + "contribution": "贡献", + "completed": "已完成", + "incomplete": "未完成", + "overdue": "逾期", + "progress": "进度" + }, + "tasks": { + "overdueTasks": "逾期任务", + "overLoggedTasks": "超额记录任务", + "tasksCompletedEarly": "提前完成的任务", + "tasksCompletedLate": "延迟完成的任务", + "overLoggedTasksTooltip": "记录时间超过预计时间的任务", + "overdueTasksTooltip": "超过截止日期的任务" + }, + "common": { + "seeAll": "查看全部", + "totalLoggedHours": "总记录小时数", + "totalEstimation": "总估算", + "completedTasks": "已完成任务", + "incompleteTasks": "未完成任务", + "overdueTasks": "逾期任务", + "overdueTasksTooltip": "超过截止日期的任务", + "totalLoggedHoursTooltip": "任务估算和任务记录时间。", + "includeArchivedTasks": "包含已归档任务", + "export": "导出" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view-members.json b/worklenz-backend/src/public/locales/zh/project-view-members.json new file mode 100644 index 00000000..3d217694 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view-members.json @@ -0,0 +1,17 @@ +{ + "nameColumn": "名称", + "jobTitleColumn": "职位", + "emailColumn": "电子邮件", + "tasksColumn": "任务", + "taskProgressColumn": "任务进度", + "accessColumn": "访问权限", + "fileIconAlt": "文件图标", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "refreshButtonTooltip": "刷新成员", + "deleteButtonTooltip": "从项目中移除", + "memberCount": "成员", + "membersCountPlural": "成员", + "emptyText": "项目中没有附件。" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view-updates.json b/worklenz-backend/src/public/locales/zh/project-view-updates.json new file mode 100644 index 00000000..b34c71ea --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view-updates.json @@ -0,0 +1,6 @@ +{ + "inputPlaceholder": "添加评论", + "addButton": "添加", + "cancelButton": "取消", + "deleteButton": "删除" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view.json b/worklenz-backend/src/public/locales/zh/project-view.json new file mode 100644 index 00000000..ff756ea5 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view.json @@ -0,0 +1,14 @@ +{ + "taskList": "任务列表", + "board": "看板", + "insights": "数据洞察", + "files": "文件", + "members": "成员", + "updates": "动态更新", + "projectView": "项目视图", + "loading": "正在加载项目...", + "error": "加载项目时出错", + "pinnedTab": "已固定为默认标签页", + "pinTab": "固定为默认标签页", + "unpinTab": "取消固定默认标签页" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view/import-task-templates.json b/worklenz-backend/src/public/locales/zh/project-view/import-task-templates.json new file mode 100644 index 00000000..3dae9403 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view/import-task-templates.json @@ -0,0 +1,11 @@ +{ + "importTaskTemplate": "导入任务模板", + "templateName": "模板名称", + "templateDescription": "模板描述", + "selectedTasks": "已选任务", + "tasks": "任务", + "templates": "模板", + "remove": "移除", + "cancel": "取消", + "import": "导入" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view/project-member-drawer.json b/worklenz-backend/src/public/locales/zh/project-view/project-member-drawer.json new file mode 100644 index 00000000..f412f22b --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view/project-member-drawer.json @@ -0,0 +1,7 @@ +{ + "title": "项目成员", + "searchLabel": "通过添加名称或电子邮件添加成员", + "searchPlaceholder": "输入名称或电子邮件", + "inviteAsAMember": "邀请为成员", + "inviteNewMemberByEmail": "通过电子邮件邀请新成员" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view/project-view-header.json b/worklenz-backend/src/public/locales/zh/project-view/project-view-header.json new file mode 100644 index 00000000..9f8ca8ed --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view/project-view-header.json @@ -0,0 +1,30 @@ +{ + "importTasks": "导入任务", + "importTask": "导入任务", + "createTask": "创建任务", + "settings": "设置", + "subscribe": "订阅", + "unsubscribe": "取消订阅", + "deleteProject": "删除项目", + "startDate": "开始日期", + "endDate": "结束日期", + "projectSettings": "项目设置", + "projectSummary": "项目摘要", + "receiveProjectSummary": "每晚接收项目摘要。", + "refreshProject": "刷新项目", + "saveAsTemplate": "保存为模板", + "invite": "邀请", + "share": "分享", + "subscribeTooltip": "订阅项目通知", + "unsubscribeTooltip": "取消订阅项目通知", + "refreshTooltip": "刷新项目数据", + "settingsTooltip": "打开项目设置", + "saveAsTemplateTooltip": "将此项目保存为模板", + "inviteTooltip": "邀请团队成员加入此项目", + "createTaskTooltip": "创建新任务", + "importTaskTooltip": "从模板导入任务", + "navigateBackTooltip": "返回项目列表", + "projectStatusTooltip": "项目状态", + "projectDatesInfo": "项目时间安排信息", + "projectCategoryTooltip": "项目类别" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/project-view/save-as-template.json b/worklenz-backend/src/public/locales/zh/project-view/save-as-template.json new file mode 100644 index 00000000..d1d3dfa8 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/project-view/save-as-template.json @@ -0,0 +1,27 @@ +{ + "title": "保存为模板", + "templateName": "模板名称", + "includes": "项目中应包含哪些内容到模板中?", + "includesOptions": { + "statuses": "状态", + "phases": "阶段", + "labels": "标签" + }, + "taskIncludes": "任务中应包含哪些内容到模板中?", + "taskIncludesOptions": { + "statuses": "状态", + "phases": "阶段", + "labels": "标签", + "name": "名称", + "priority": "优先级", + "status": "状态", + "phase": "阶段", + "label": "标签", + "timeEstimate": "预计用时", + "description": "描述", + "subTasks": "子任务" + }, + "cancel": "取消", + "save": "保存", + "templateNamePlaceholder": "输入模板名称" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-members-drawer.json b/worklenz-backend/src/public/locales/zh/reporting-members-drawer.json new file mode 100644 index 00000000..db42a74b --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-members-drawer.json @@ -0,0 +1,76 @@ +{ + "exportButton": "导出", + "timeLogsButton": "时间日志", + "activityLogsButton": "活动日志", + "tasksButton": "任务", + "searchByNameInputPlaceholder": "按名称搜索", + "overviewTab": "概览", + "timeLogsTab": "时间日志", + "activityLogsTab": "活动日志", + "tasksTab": "任务", + "projectsText": "项目", + "totalTasksText": "任务总数", + "assignedTasksText": "已分配任务", + "completedTasksText": "已完成任务", + "ongoingTasksText": "进行中任务", + "overdueTasksText": "逾期任务", + "loggedHoursText": "记录小时数", + "tasksText": "任务", + "allText": "全部", + "tasksByProjectsText": "按项目分类任务", + "tasksByStatusText": "按状态分类任务", + "tasksByPriorityText": "按优先级分类任务", + "todoText": "待办", + "doingText": "进行中", + "doneText": "已完成", + "lowText": "低", + "mediumText": "中", + "highText": "高", + "billableButton": "可计费", + "billableText": "可计费", + "nonBillableText": "不可计费", + "timeLogsEmptyPlaceholder": "没有时间日志可显示", + "loggedText": "记录", + "forText": "为", + "inText": "在", + "updatedText": "更新", + "fromText": "从", + "toText": "到", + "withinText": "在...之内", + "activityLogsEmptyPlaceholder": "没有活动日志可显示", + "filterByText": "筛选依据:", + "selectProjectPlaceholder": "选择项目", + "taskColumn": "任务", + "nameColumn": "名称", + "projectColumn": "项目", + "statusColumn": "状态", + "priorityColumn": "优先级", + "dueDateColumn": "截止日期", + "completedDateColumn": "完成日期", + "estimatedTimeColumn": "预计用时", + "loggedTimeColumn": "记录时间", + "overloggedTimeColumn": "超额记录时间", + "daysLeftColumn": "剩余天数/逾期", + "startDateColumn": "开始日期", + "endDateColumn": "结束日期", + "actualTimeColumn": "实际时间", + "projectHealthColumn": "项目健康状况", + "categoryColumn": "类别", + "projectManagerColumn": "项目经理", + "tasksStatsOverviewDrawerTitle": "的任务", + "projectsStatsOverviewDrawerTitle": "的项目", + "cancelledText": "已取消", + "blockedText": "已阻塞", + "onHoldText": "暂停", + "proposedText": "提议", + "inPlanningText": "规划中", + "inProgressText": "进行中", + "completedText": "已完成", + "continuousText": "持续", + "daysLeftText": "天剩余", + "daysOverdueText": "天逾期", + "notSetText": "未设置", + "needsAttentionText": "需要关注", + "atRiskText": "有风险", + "goodText": "良好" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-members.json b/worklenz-backend/src/public/locales/zh/reporting-members.json new file mode 100644 index 00000000..de4c23bb --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-members.json @@ -0,0 +1,31 @@ +{ + "yesterdayText": "昨天", + "lastSevenDaysText": "过去7天", + "lastWeekText": "上周", + "lastThirtyDaysText": "过去30天", + "lastMonthText": "上个月", + "lastThreeMonthsText": "过去3个月", + "allTimeText": "所有时间", + "customRangeText": "自定义范围", + "startDateInputPlaceholder": "开始日期", + "EndDateInputPlaceholder": "结束日期", + "filterButton": "筛选", + "membersTitle": "成员", + "includeArchivedButton": "包含已归档项目", + "exportButton": "导出", + "excelButton": "Excel", + "searchByNameInputPlaceholder": "按名称搜索", + "memberColumn": "成员", + "tasksProgressColumn": "任务进度", + "tasksAssignedColumn": "分配任务", + "completedTasksColumn": "已完成任务", + "overdueTasksColumn": "逾期任务", + "ongoingTasksColumn": "进行中任务", + "tasksAssignedColumnTooltip": "在选定日期范围内分配的任务", + "overdueTasksColumnTooltip": "在选定日期范围结束时逾期的任务", + "completedTasksColumnTooltip": "在选定日期范围内完成的任务", + "ongoingTasksColumnTooltip": "已开始但尚未完成的任务", + "todoText": "待办", + "doingText": "进行中", + "doneText": "已完成" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-overview-drawer.json b/worklenz-backend/src/public/locales/zh/reporting-overview-drawer.json new file mode 100644 index 00000000..a02b318f --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-overview-drawer.json @@ -0,0 +1,33 @@ +{ + "exportButton": "导出", + "projectsButton": "项目", + "membersButton": "成员", + "searchByNameInputPlaceholder": "按名称搜索", + "overviewTab": "概览", + "projectsTab": "项目", + "membersTab": "成员", + "projectsByStatusText": "按状态分类项目", + "projectsByCategoryText": "按类别分类项目", + "projectsByHealthText": "按健康状况分类项目", + "projectsText": "项目", + "allText": "全部", + "cancelledText": "已取消", + "blockedText": "已阻塞", + "onHoldText": "暂停", + "proposedText": "提议", + "inPlanningText": "规划中", + "inProgressText": "进行中", + "completedText": "已完成", + "continuousText": "持续", + "notSetText": "未设置", + "needsAttentionText": "需要关注", + "atRiskText": "有风险", + "goodText": "良好", + "nameColumn": "名称", + "emailColumn": "电子邮件", + "projectsColumn": "项目", + "tasksColumn": "任务", + "overdueTasksColumn": "逾期任务", + "completedTasksColumn": "已完成任务", + "ongoingTasksColumn": "进行中任务" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-overview.json b/worklenz-backend/src/public/locales/zh/reporting-overview.json new file mode 100644 index 00000000..fb172817 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-overview.json @@ -0,0 +1,22 @@ +{ + "overviewTitle": "概览", + "includeArchivedButton": "包含已归档项目", + "teamCount": "团队", + "teamCountPlural": "团队", + "projectCount": "项目", + "projectCountPlural": "项目", + "memberCount": "成员", + "memberCountPlural": "成员", + "activeProjectCount": "活跃项目", + "activeProjectCountPlural": "活跃项目", + "overdueProjectCount": "逾期项目", + "overdueProjectCountPlural": "逾期项目", + "unassignedMemberCount": "未分配成员", + "unassignedMemberCountPlural": "未分配成员", + "memberWithOverdueTaskCount": "有逾期任务的成员", + "memberWithOverdueTaskCountPlural": "有逾期任务的成员", + "teamsText": "团队", + "nameColumn": "名称", + "projectsColumn": "项目", + "membersColumn": "成员" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-projects-drawer.json b/worklenz-backend/src/public/locales/zh/reporting-projects-drawer.json new file mode 100644 index 00000000..d2f2f6ef --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-projects-drawer.json @@ -0,0 +1,52 @@ +{ + "exportButton": "导出", + "membersButton": "成员", + "tasksButton": "任务", + "searchByNameInputPlaceholder": "按名称搜索", + "overviewTab": "概览", + "membersTab": "成员", + "tasksTab": "任务", + "completedTasksText": "已完成任务", + "incompleteTasksText": "未完成任务", + "overdueTasksText": "逾期任务", + "allocatedHoursText": "已分配小时数", + "loggedHoursText": "已记录小时数", + "tasksText": "任务", + "allText": "全部", + "tasksByStatusText": "按状态分类任务", + "tasksByPriorityText": "按优先级分类任务", + "tasksByDueDateText": "按截止日期分类任务", + "todoText": "待办", + "doingText": "进行中", + "doneText": "已完成", + "lowText": "低", + "mediumText": "中", + "highText": "高", + "completedText": "已完成", + "upcomingText": "即将到来", + "overdueText": "逾期", + "noDueDateText": "无截止日期", + "nameColumn": "名称", + "tasksCountColumn": "任务计数", + "completedTasksColumn": "已完成任务", + "incompleteTasksColumn": "未完成任务", + "overdueTasksColumn": "逾期任务", + "contributionColumn": "贡献", + "progressColumn": "进度", + "loggedTimeColumn": "记录时间", + "taskColumn": "任务", + "projectColumn": "项目", + "statusColumn": "状态", + "priorityColumn": "优先级", + "phaseColumn": "阶段", + "dueDateColumn": "截止日期", + "completedDateColumn": "完成日期", + "estimatedTimeColumn": "预计用时", + "overloggedTimeColumn": "超额记录时间", + "completedOnColumn": "完成于", + "daysOverdueColumn": "逾期天数", + "groupByText": "分组依据:", + "statusText": "状态", + "priorityText": "优先级", + "phaseText": "阶段" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-projects-filters.json b/worklenz-backend/src/public/locales/zh/reporting-projects-filters.json new file mode 100644 index 00000000..ddfbe104 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-projects-filters.json @@ -0,0 +1,31 @@ +{ + "searchByNamePlaceholder": "按名称搜索", + "searchByCategoryPlaceholder": "按类别搜索", + "statusText": "状态", + "healthText": "健康状况", + "categoryText": "类别", + "projectManagerText": "项目经理", + "showFieldsText": "显示字段", + "cancelledText": "已取消", + "blockedText": "已阻塞", + "onHoldText": "暂停", + "proposedText": "提议", + "inPlanningText": "规划中", + "inProgressText": "进行中", + "completedText": "已完成", + "continuousText": "持续", + "notSetText": "未设置", + "needsAttentionText": "需要关注", + "atRiskText": "有风险", + "goodText": "良好", + "nameText": "项目", + "estimatedVsActualText": "预计用时 vs 实际用时", + "tasksProgressText": "任务进度", + "lastActivityText": "最后活动", + "datesText": "开始/结束日期", + "daysLeftText": "剩余天数/逾期", + "projectHealthText": "项目健康状况", + "projectUpdateText": "项目更新", + "clientText": "客户", + "teamText": "团队" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-projects.json b/worklenz-backend/src/public/locales/zh/reporting-projects.json new file mode 100644 index 00000000..0ff7d415 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-projects.json @@ -0,0 +1,44 @@ +{ + "projectCount": "项目", + "projectCountPlural": "项目", + "includeArchivedButton": "包含已归档项目", + "exportButton": "导出", + "excelButton": "Excel", + "projectColumn": "项目", + "estimatedVsActualColumn": "预计用时 vs 实际用时", + "tasksProgressColumn": "任务进度", + "lastActivityColumn": "最后活动", + "statusColumn": "状态", + "datesColumn": "开始/结束日期", + "daysLeftColumn": "剩余天数/逾期", + "projectHealthColumn": "项目健康状况", + "categoryColumn": "类别", + "projectUpdateColumn": "项目更新", + "clientColumn": "客户", + "teamColumn": "团队", + "projectManagerColumn": "项目经理", + "openButton": "打开", + "estimatedText": "预计", + "actualText": "实际", + "todoText": "待办", + "doingText": "进行中", + "doneText": "已完成", + "cancelledText": "已取消", + "blockedText": "已阻塞", + "onHoldText": "暂停", + "proposedText": "提议", + "inPlanningText": "规划中", + "inProgressText": "进行中", + "completedText": "已完成", + "continuousText": "持续", + "daysLeftText": "天剩余", + "dayLeftText": "天剩余", + "daysOverdueText": "天逾期", + "notSetText": "未设置", + "needsAttentionText": "需要关注", + "atRiskText": "有风险", + "goodText": "良好", + "setCategoryText": "设置类别", + "searchByNameInputPlaceholder": "按名称搜索", + "todayText": "今天" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/reporting-sidebar.json b/worklenz-backend/src/public/locales/zh/reporting-sidebar.json new file mode 100644 index 00000000..8a8206fb --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/reporting-sidebar.json @@ -0,0 +1,8 @@ +{ + "overview": "概览", + "projects": "项目", + "members": "成员", + "timeReports": "用时报告", + "estimateVsActual": "预计用时 vs 实际用时", + "currentOrganizationTooltip": "当前的组织" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/schedule.json b/worklenz-backend/src/public/locales/zh/schedule.json new file mode 100644 index 00000000..53fa8a97 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/schedule.json @@ -0,0 +1,34 @@ +{ + "today": "今天", + "week": "周", + "month": "月", + "settings": "设置", + "workingDays": "工作日", + "monday": "星期一", + "tuesday": "星期二", + "wednesday": "星期三", + "thursday": "星期四", + "friday": "星期五", + "saturday": "星期六", + "sunday": "星期日", + "workingHours": "工作时间", + "hours": "小时", + "saveButton": "保存", + "totalAllocation": "总分配", + "timeLogged": "记录时间", + "remainingTime": "剩余时间", + "total": "总计", + "perDay": "每天", + "tasks": "任务", + "startDate": "开始日期", + "endDate": "结束日期", + "hoursPerDay": "每天小时数", + "totalHours": "总小时数", + "deleteButton": "删除", + "cancelButton": "取消", + "tabTitle": "没有开始和结束日期的任务", + "allocatedTime": "分配时间", + "totalLogged": "总记录", + "loggedBillable": "已记录可计费", + "loggedNonBillable": "已记录不可计费" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/categories.json b/worklenz-backend/src/public/locales/zh/settings/categories.json new file mode 100644 index 00000000..00027081 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/categories.json @@ -0,0 +1,10 @@ +{ + "categoryColumn": "类别", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "associatedTaskColumn": "关联项目", + "searchPlaceholder": "按名称搜索", + "emptyText": "在更新或创建项目时可以创建类别。", + "colorChangeTooltip": "点击更改颜色" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/change-password.json b/worklenz-backend/src/public/locales/zh/settings/change-password.json new file mode 100644 index 00000000..30cec581 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/change-password.json @@ -0,0 +1,15 @@ +{ + "title": "更改密码", + "currentPassword": "当前密码", + "newPassword": "新密码", + "confirmPassword": "确认密码", + "currentPasswordPlaceholder": "输入您的当前密码", + "newPasswordPlaceholder": "新密码", + "confirmPasswordPlaceholder": "确认密码", + "currentPasswordRequired": "请输入您的当前密码!", + "newPasswordRequired": "请输入您的新密码!", + "passwordValidationError": "密码必须至少包含8个字符,包括一个大写字母、一个数字和一个符号。", + "passwordMismatch": "密码不匹配!", + "passwordRequirements": "新密码应至少包含8个字符,包括一个大写字母、一个数字和一个符号。", + "updateButton": "更新密码" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/clients.json b/worklenz-backend/src/public/locales/zh/settings/clients.json new file mode 100644 index 00000000..c06b1adc --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/clients.json @@ -0,0 +1,22 @@ +{ + "nameColumn": "名称", + "projectColumn": "项目", + "noProjectsAvailable": "没有可用的项目", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "searchPlaceholder": "按名称搜索", + "createClient": "创建客户", + "pinTooltip": "点击将其固定到主菜单", + "createClientDrawerTitle": "创建客户", + "updateClientDrawerTitle": "更新客户", + "nameLabel": "名称", + "namePlaceholder": "名称", + "nameRequiredError": "请输入名称", + "createButton": "创建", + "updateButton": "更新", + "createClientSuccessMessage": "客户创建成功!", + "createClientErrorMessage": "客户创建失败!", + "updateClientSuccessMessage": "客户更新成功!", + "updateClientErrorMessage": "客户更新失败!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/job-titles.json b/worklenz-backend/src/public/locales/zh/settings/job-titles.json new file mode 100644 index 00000000..c0458bb6 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/job-titles.json @@ -0,0 +1,20 @@ +{ + "nameColumn": "名称", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "searchPlaceholder": "按名称搜索", + "createJobTitleButton": "创建职位", + "pinTooltip": "点击将其固定到主菜单", + "createJobTitleDrawerTitle": "创建职位", + "updateJobTitleDrawerTitle": "更新职位", + "nameLabel": "名称", + "namePlaceholder": "名称", + "nameRequiredError": "请输入名称", + "createButton": "创建", + "updateButton": "更新", + "createJobTitleSuccessMessage": "职位创建成功!", + "createJobTitleErrorMessage": "职位创建失败!", + "updateJobTitleSuccessMessage": "职位更新成功!", + "updateJobTitleErrorMessage": "职位更新失败!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/labels.json b/worklenz-backend/src/public/locales/zh/settings/labels.json new file mode 100644 index 00000000..ab0d01cd --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/labels.json @@ -0,0 +1,11 @@ +{ + "labelColumn": "标签", + "deleteConfirmationTitle": "您确定吗?", + "deleteConfirmationOk": "是", + "deleteConfirmationCancel": "取消", + "associatedTaskColumn": "关联任务计数", + "searchPlaceholder": "按名称搜索", + "emptyText": "标签可以在更新或创建任务时创建。", + "pinTooltip": "点击将其固定到主菜单", + "colorChangeTooltip": "点击更改颜色" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/language.json b/worklenz-backend/src/public/locales/zh/settings/language.json new file mode 100644 index 00000000..631eac11 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/language.json @@ -0,0 +1,7 @@ +{ + "language": "语言", + "language_required": "语言是必需的", + "time_zone": "时区", + "time_zone_required": "时区是必需的", + "save_changes": "保存更改" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/notifications.json b/worklenz-backend/src/public/locales/zh/settings/notifications.json new file mode 100644 index 00000000..f15784bf --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/notifications.json @@ -0,0 +1,11 @@ +{ + "title": "通知设置", + "emailTitle": "向我发送电子邮件通知", + "emailDescription": "包括新的任务分配", + "dailyDigestTitle": "向我发送每日摘要", + "dailyDigestDescription": "每天晚上,您将收到任务中最近活动的摘要。", + "popupTitle": "当Worklenz打开时,在我的电脑上弹出通知", + "popupDescription": "弹出通知可能会被您的浏览器禁用。更改您的浏览器设置以允许它们。", + "unreadItemsTitle": "显示未读项目的数量", + "unreadItemsDescription": "您将看到每个通知的计数。" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/profile.json b/worklenz-backend/src/public/locales/zh/settings/profile.json new file mode 100644 index 00000000..cfafeb12 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/profile.json @@ -0,0 +1,14 @@ +{ + "uploadError": "您只能上传JPG/PNG文件!", + "uploadSizeError": "图片必须小于2MB!", + "upload": "上传", + "nameLabel": "名称", + "nameRequiredError": "名称是必需的", + "emailLabel": "电子邮件", + "emailRequiredError": "电子邮件是必需的", + "saveChanges": "保存更改", + "profileJoinedText": "一个月前加入", + "profileLastUpdatedText": "一个月前更新", + "avatarTooltip": "点击上传头像", + "title": "个人资料设置" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/project-templates.json b/worklenz-backend/src/public/locales/zh/settings/project-templates.json new file mode 100644 index 00000000..5dcc866c --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/project-templates.json @@ -0,0 +1,8 @@ +{ + "nameColumn": "名称", + "editToolTip": "编辑", + "deleteToolTip": "删除", + "confirmText": "您确定吗?", + "okText": "是", + "cancelText": "取消" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/sidebar.json b/worklenz-backend/src/public/locales/zh/settings/sidebar.json new file mode 100644 index 00000000..b9f74709 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/sidebar.json @@ -0,0 +1,15 @@ +{ + "profile": "个人资料", + "appearance": "外观", + "notifications": "通知", + "clients": "客户", + "job-titles": "职位", + "labels": "标签", + "categories": "类别", + "project-templates": "项目模板", + "task-templates": "任务模板", + "team-members": "团队成员", + "teams": "团队", + "change-password": "更改密码", + "language-and-region": "语言和地区" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/task-templates.json b/worklenz-backend/src/public/locales/zh/settings/task-templates.json new file mode 100644 index 00000000..3fd9124a --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/task-templates.json @@ -0,0 +1,9 @@ +{ + "nameColumn": "名称", + "createdColumn": "创建时间", + "editToolTip": "编辑", + "deleteToolTip": "删除", + "confirmText": "您确定吗?", + "okText": "是", + "cancelText": "取消" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/team-members.json b/worklenz-backend/src/public/locales/zh/settings/team-members.json new file mode 100644 index 00000000..8b39483c --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/team-members.json @@ -0,0 +1,47 @@ +{ + "title": "团队成员", + "nameColumn": "名称", + "projectsColumn": "项目", + "emailColumn": "电子邮件", + "teamAccessColumn": "团队访问", + "memberCount": "成员", + "membersCountPlural": "成员", + "searchPlaceholder": "按名称搜索成员", + "pinTooltip": "刷新成员列表", + "addMemberButton": "添加新成员", + "editTooltip": "编辑成员", + "deactivateTooltip": "停用成员", + "activateTooltip": "激活成员", + "deleteTooltip": "删除成员", + "confirmDeleteTitle": "您确定要删除此成员吗?", + "confirmActivateTitle": "您确定要更改此成员的状态吗?", + "okText": "是,继续", + "cancelText": "否,取消", + "deactivatedText": "(当前已停用)", + "pendingInvitationText": "(邀请待处理)", + "addMemberDrawerTitle": "添加新团队成员", + "updateMemberDrawerTitle": "更新团队成员", + "addMemberEmailHint": "无论是否接受邀请,成员都将被添加到团队中", + "memberEmailLabel": "电子邮件", + "memberEmailPlaceholder": "输入团队成员的电子邮件地址", + "memberEmailRequiredError": "请输入有效的电子邮件地址", + "jobTitleLabel": "职位", + "jobTitlePlaceholder": "选择或搜索职位(可选)", + "memberAccessLabel": "访问级别", + "addToTeamButton": "将成员添加到团队", + "updateButton": "保存更改", + "resendInvitationButton": "重新发送邀请邮件", + "invitationSentSuccessMessage": "团队邀请已成功发送!", + "createMemberSuccessMessage": "新团队成员已成功添加!", + "createMemberErrorMessage": "添加团队成员失败。请重试。", + "updateMemberSuccessMessage": "团队成员已成功更新!", + "updateMemberErrorMessage": "更新团队成员失败。请重试。", + "memberText": "成员", + "adminText": "管理员", + "ownerText": "团队所有者", + "addedText": "已添加", + "updatedText": "已更新", + "noResultFound": "输入电子邮件地址并按回车键...", + "jobTitlesFetchError": "获取职位失败", + "invitationResent": "邀请重新发送成功!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/settings/teams.json b/worklenz-backend/src/public/locales/zh/settings/teams.json new file mode 100644 index 00000000..af2064ae --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/settings/teams.json @@ -0,0 +1,16 @@ +{ + "title": "团队", + "team": "团队", + "teams": "团队", + "name": "名称", + "created": "创建时间", + "ownsBy": "所有者", + "edit": "编辑", + "editTeam": "编辑团队", + "pinTooltip": "点击将此项固定到主菜单", + "editTeamName": "编辑团队名称", + "updateName": "更新名称", + "namePlaceholder": "名称", + "nameRequired": "请输入名称", + "updateFailed": "团队名称更改失败!" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer-info-tab.json b/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer-info-tab.json new file mode 100644 index 00000000..b0b36689 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer-info-tab.json @@ -0,0 +1,29 @@ +{ + "details": { + "task-key": "任务ID", + "phase": "阶段", + "assignees": "受托人", + "due-date": "截止日期", + "time-estimation": "估计时间", + "priority": "优先级", + "labels": "标签", + "billable": "可计费", + "notify": "通知", + "when-done-notify": "完成时通知", + "start-date": "开始日期", + "end-date": "结束日期", + "hide-start-date": "隐藏开始日期", + "show-start-date": "显示开始日期", + "hours": "小时", + "minutes": "分钟" + }, + "description": { + "title": "描述", + "placeholder": "添加更详细的描述..." + }, + "subTasks": { + "title": "子任务", + "add-sub-task": "+ 添加子任务", + "refresh-sub-tasks": "刷新子任务" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer.json b/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer.json new file mode 100644 index 00000000..dfe304fe --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-drawer/task-drawer.json @@ -0,0 +1,123 @@ +{ + "taskHeader": { + "taskNamePlaceholder": "输入您的任务", + "deleteTask": "删除任务" + }, + "taskInfoTab": { + "title": "信息", + "details": { + "title": "详情", + "task-key": "任务键", + "phase": "阶段", + "assignees": "受让人", + "due-date": "截止日期", + "time-estimation": "时间估算", + "priority": "优先级", + "labels": "标签", + "billable": "可计费", + "notify": "通知", + "when-done-notify": "完成时,通知", + "start-date": "开始日期", + "end-date": "结束日期", + "hide-start-date": "隐藏开始日期", + "show-start-date": "显示开始日期", + "hours": "小时", + "minutes": "分钟", + "progressValue": "进度值", + "progressValueTooltip": "设置进度百分比(0-100%)", + "progressValueRequired": "请输入进度值", + "progressValueRange": "进度必须在0到100之间", + "taskWeight": "任务权重", + "taskWeightTooltip": "设置此子任务的权重(百分比)", + "taskWeightRequired": "请输入任务权重", + "taskWeightRange": "权重必须在0到100之间", + "recurring": "重复" + }, + "labels": { + "labelInputPlaceholder": "搜索或创建", + "labelsSelectorInputTip": "按回车创建" + }, + "description": { + "title": "描述", + "placeholder": "添加更详细的描述..." + }, + "subTasks": { + "title": "子任务", + "addSubTask": "添加子任务", + "addSubTaskInputPlaceholder": "输入您的任务并按回车", + "refreshSubTasks": "刷新子任务", + "edit": "编辑", + "delete": "删除", + "confirmDeleteSubTask": "您确定要删除此子任务吗?", + "deleteSubTask": "删除子任务" + }, + "dependencies": { + "title": "依赖关系", + "addDependency": "+ 添加新依赖", + "blockedBy": "被阻止", + "searchTask": "输入搜索任务", + "noTasksFound": "未找到任务", + "confirmDeleteDependency": "您确定要删除吗?" + }, + "attachments": { + "title": "附件", + "chooseOrDropFileToUpload": "选择或拖放文件上传", + "uploading": "上传中..." + }, + "comments": { + "title": "评论", + "addComment": "+ 添加新评论", + "noComments": "还没有评论。成为第一个评论的人!", + "delete": "删除", + "confirmDeleteComment": "您确定要删除此评论吗?", + "addCommentPlaceholder": "添加评论...", + "cancel": "取消", + "commentButton": "评论", + "attachFiles": "附加文件", + "addMoreFiles": "添加更多文件", + "selectedFiles": "已选择的文件(最多25MB,最大{count}个)", + "maxFilesError": "您最多只能上传{count}个文件", + "processFilesError": "处理文件失败", + "addCommentError": "请添加评论或附加文件", + "createdBy": "{{time}}由{{user}}创建", + "updatedTime": "更新于{{time}}" + }, + "searchInputPlaceholder": "按名称搜索", + "pendingInvitation": "待处理邀请" + }, + "taskTimeLogTab": { + "title": "时间日志", + "addTimeLog": "添加新时间日志", + "totalLogged": "总记录时间", + "exportToExcel": "导出到Excel", + "noTimeLogsFound": "未找到时间日志", + "timeLogForm": { + "date": "日期", + "startTime": "开始时间", + "endTime": "结束时间", + "workDescription": "工作描述", + "descriptionPlaceholder": "添加描述", + "logTime": "记录时间", + "updateTime": "更新时间", + "cancel": "取消", + "selectDateError": "请选择日期", + "selectStartTimeError": "请选择开始时间", + "selectEndTimeError": "请选择结束时间", + "endTimeAfterStartError": "结束时间必须在开始时间之后" + } + }, + "taskActivityLogTab": { + "title": "活动日志", + "add": "添加", + "remove": "移除", + "none": "无", + "weight": "权重", + "createdTask": "创建了任务。" + }, + "taskProgress": { + "markAsDoneTitle": "将任务标记为完成?", + "confirmMarkAsDone": "是的,标记为完成", + "cancelMarkAsDone": "不,保持当前状态", + "markAsDoneDescription": "您已将进度设置为100%。您想将任务状态更新为\"完成\"吗?" + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-list-filters.json b/worklenz-backend/src/public/locales/zh/task-list-filters.json new file mode 100644 index 00000000..84387509 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-list-filters.json @@ -0,0 +1,79 @@ +{ + "searchButton": "搜索", + "resetButton": "重置", + "searchInputPlaceholder": "按名称搜索", + "sortText": "排序", + "statusText": "状态", + "phaseText": "阶段", + "memberText": "成员", + "assigneesText": "受托人", + "priorityText": "优先级", + "labelsText": "标签", + "membersText": "成员", + "groupByText": "分组依据", + "showArchivedText": "显示已归档的任务", + "showFieldsText": "显示字段", + "keyText": "ID", + "taskText": "任务", + "descriptionText": "描述", + "phasesText": "阶段", + "listText": "列表", + "progressText": "进度", + "timeTrackingText": "时间跟踪", + "timetrackingText": "时间跟踪", + "estimationText": "估计", + "startDateText": "开始日期", + "startdateText": "开始日期", + "endDateText": "结束日期", + "dueDateText": "截止日期", + "duedateText": "截止日期", + "completedDateText": "完成日期", + "completeddateText": "完成日期", + "createdDateText": "创建日期", + "createddateText": "创建日期", + "lastUpdatedText": "最后更新", + "lastupdatedText": "最后更新", + "reporterText": "报告人", + "dueTimeText": "截止时间", + "duetimeText": "截止时间", + "lowText": "低", + "mediumText": "中", + "highText": "高", + "createStatusButtonTooltip": "状态设置", + "configPhaseButtonTooltip": "阶段设置", + "noLabelsFound": "未找到标签", + "addStatusButton": "添加状态", + "addPhaseButton": "添加阶段", + "createStatus": "创建状态", + "name": "名称", + "category": "类别", + "selectCategory": "选择类别", + "pleaseEnterAName": "请输入名称", + "pleaseSelectACategory": "请选择类别", + "create": "创建", + "searchTasks": "搜索任务...", + "searchPlaceholder": "搜索...", + "fieldsText": "字段", + "loadingFilters": "加载筛选器...", + "noOptionsFound": "未找到选项", + "filtersActive": "个筛选器已激活", + "filterActive": "个筛选器已激活", + "clearAll": "清除全部", + "clearing": "清除中...", + "cancel": "取消", + "search": "搜索", + "groupedBy": "分组依据", + "manageStatuses": "管理状态", + "managePhases": "管理阶段", + "dragToReorderStatuses": "拖拽状态以重新排序。每个状态可以有不同的类别。", + "enterNewStatusName": "输入新状态名称...", + "addStatus": "添加状态", + "noStatusesFound": "未找到状态。请在上面创建您的第一个状态。", + "deleteStatus": "删除状态", + "deleteStatusConfirm": "您确定要删除此状态吗?此操作无法撤销。", + "rename": "重命名", + "delete": "删除", + "enterStatusName": "输入状态名称", + "selectCategory": "选择类别", + "close": "关闭" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-list-table.json b/worklenz-backend/src/public/locales/zh/task-list-table.json new file mode 100644 index 00000000..f3ec040f --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-list-table.json @@ -0,0 +1,129 @@ +{ + "keyColumn": "ID", + "taskColumn": "任务", + "descriptionColumn": "描述", + "progressColumn": "进度", + "membersColumn": "成员", + "assigneesColumn": "受托人", + "labelsColumn": "标签", + "phasesColumn": "阶段", + "phaseColumn": "阶段", + "statusColumn": "状态", + "priorityColumn": "优先级", + "timeTrackingColumn": "时间追踪", + "timetrackingColumn": "时间追踪", + "estimationColumn": "估算", + "startDateColumn": "开始日期", + "startdateColumn": "开始日期", + "dueDateColumn": "截止日期", + "duedateColumn": "截止日期", + "completedDateColumn": "完成日期", + "completeddateColumn": "完成日期", + "createdDateColumn": "创建日期", + "createddateColumn": "创建日期", + "lastUpdatedColumn": "最后更新", + "lastupdatedColumn": "最后更新", + "reporterColumn": "报告人", + "dueTimeColumn": "截止时间", + "todoSelectorText": "待办", + "doingSelectorText": "进行中", + "doneSelectorText": "已完成", + "lowSelectorText": "低", + "mediumSelectorText": "中", + "highSelectorText": "高", + "selectText": "选择", + "labelsSelectorInputTip": "按回车键创建!", + "addTaskText": "+ 添加任务", + "addSubTaskText": "+ 添加子任务", + "addTaskInputPlaceholder": "输入任务并按回车键", + "noTasksInGroup": "此组中没有任务", + "openButton": "打开", + "okButton": "确定", + "noLabelsFound": "未找到标签", + "searchInputPlaceholder": "搜索或创建", + "assigneeSelectorInviteButton": "通过电子邮件邀请新成员", + "labelInputPlaceholder": "搜索或创建", + "searchLabelsPlaceholder": "搜索标签...", + "createLabelButton": "创建 \"{{name}}\"", + "manageLabelsPath": "设置 → 标签", + "pendingInvitation": "待处理邀请", + "contextMenu": { + "assignToMe": "分配给我", + "moveTo": "移动到", + "unarchive": "取消归档", + "archive": "归档", + "convertToSubTask": "转换为子任务", + "convertToTask": "转换为任务", + "delete": "删除", + "searchByNameInputPlaceholder": "按名称搜索" + }, + "setDueDate": "设置截止日期", + "setStartDate": "设置开始日期", + "clearDueDate": "清除截止日期", + "clearStartDate": "清除开始日期", + "dueDatePlaceholder": "截止日期", + "startDatePlaceholder": "开始日期", + + "emptyStates": { + "noTaskGroups": "未找到任务组", + "noTaskGroupsDescription": "创建任务或应用筛选器后,任务将显示在此处。", + "errorPrefix": "错误:", + "dragTaskFallback": "任务" + }, + + "customColumns": { + "addCustomColumn": "添加自定义列", + "customColumnHeader": "自定义列", + "customColumnSettings": "自定义列设置", + "noCustomValue": "无值", + "peopleField": "人员字段", + "noDate": "无日期", + "unsupportedField": "不支持的字段类型", + + "modal": { + "addFieldTitle": "添加字段", + "editFieldTitle": "编辑字段", + "fieldTitle": "字段标题", + "fieldTitleRequired": "字段标题为必填项", + "columnTitlePlaceholder": "列标题", + "type": "类型", + "deleteConfirmTitle": "确定要删除此自定义列吗?", + "deleteConfirmDescription": "此操作无法撤销。与此列关联的所有数据将被永久删除。", + "deleteButton": "删除", + "cancelButton": "取消", + "createButton": "创建", + "updateButton": "更新", + "createSuccessMessage": "自定义列创建成功", + "updateSuccessMessage": "自定义列更新成功", + "deleteSuccessMessage": "自定义列删除成功", + "deleteErrorMessage": "删除自定义列失败", + "createErrorMessage": "创建自定义列失败", + "updateErrorMessage": "更新自定义列失败" + }, + + "fieldTypes": { + "people": "人员", + "number": "数字", + "date": "日期", + "selection": "选择", + "checkbox": "复选框", + "labels": "标签", + "key": "键", + "formula": "公式" + } + }, + + "indicators": { + "tooltips": { + "subtasks": "{{count}} 个子任务", + "subtasks_plural": "{{count}} 个子任务", + "comments": "{{count}} 条评论", + "comments_plural": "{{count}} 条评论", + "attachments": "{{count}} 个附件", + "attachments_plural": "{{count}} 个附件", + "subscribers": "任务有订阅者", + "dependencies": "任务有依赖项", + "recurring": "重复任务" + } + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-management.json b/worklenz-backend/src/public/locales/zh/task-management.json new file mode 100644 index 00000000..341ecc64 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-management.json @@ -0,0 +1,35 @@ +{ + "noTasksInGroup": "此组中没有任务", + "noTasksInGroupDescription": "添加任务开始使用", + "addFirstTask": "添加你的第一个任务", + "openTask": "打开", + "subtask": "子任务", + "subtasks": "子任务", + "comment": "评论", + "comments": "评论", + "attachment": "附件", + "attachments": "附件", + "enterSubtaskName": "输入子任务名称...", + "add": "添加", + "cancel": "取消", + "renameGroup": "重命名组", + "renameStatus": "重命名状态", + "renamePhase": "重命名阶段", + "changeCategory": "更改类别", + "clickToEditGroupName": "点击编辑组名称", + "enterGroupName": "输入组名称", + + "indicators": { + "tooltips": { + "subtasks": "{{count}} 个子任务", + "subtasks_plural": "{{count}} 个子任务", + "comments": "{{count}} 条评论", + "comments_plural": "{{count}} 条评论", + "attachments": "{{count}} 个附件", + "attachments_plural": "{{count}} 个附件", + "subscribers": "任务有订阅者", + "dependencies": "任务有依赖项", + "recurring": "重复任务" + } + } +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/task-template-drawer.json b/worklenz-backend/src/public/locales/zh/task-template-drawer.json new file mode 100644 index 00000000..53e99119 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/task-template-drawer.json @@ -0,0 +1,11 @@ +{ + "createTaskTemplate": "创建任务模板", + "editTaskTemplate": "编辑任务模板", + "cancelText": "取消", + "saveText": "保存", + "templateNameText": "模板名称", + "selectedTasks": "已选任务", + "removeTask": "移除", + "cancelButton": "取消", + "saveButton": "保存" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/tasks/task-table-bulk-actions.json b/worklenz-backend/src/public/locales/zh/tasks/task-table-bulk-actions.json new file mode 100644 index 00000000..2a4c89d6 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/tasks/task-table-bulk-actions.json @@ -0,0 +1,24 @@ +{ + "taskSelected": "任务已选择", + "tasksSelected": "任务已选择", + "changeStatus": "更改状态/优先级/阶段", + "changeLabel": "更改标签", + "assignToMe": "分配给我", + "changeAssignees": "更改受托人", + "archive": "归档", + "unarchive": "取消归档", + "delete": "删除", + "moreOptions": "更多选项", + "deselectAll": "取消全选", + "status": "状态", + "priority": "优先级", + "phase": "阶段", + "member": "成员", + "createTaskTemplate": "创建任务模板", + "apply": "应用", + "createLabel": "+ 创建标签", + "hitEnterToCreate": "按回车键创建", + "pendingInvitation": "待处理邀请", + "noMatchingLabels": "没有匹配的标签", + "noLabels": "没有标签" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/template-drawer.json b/worklenz-backend/src/public/locales/zh/template-drawer.json new file mode 100644 index 00000000..64fd242f --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/template-drawer.json @@ -0,0 +1,19 @@ +{ + "title": "编辑任务模板", + "cancelText": "取消", + "saveText": "保存", + "templateNameText": "模板名称", + "selectedTasks": "已选任务", + "removeTask": "移除", + "description": "描述", + "phase": "阶段", + "statuses": "状态", + "priorities": "优先级", + "labels": "标签", + "tasks": "任务", + "noTemplateSelected": "未选择模板", + "noDescription": "无描述", + "worklenzTemplates": "Worklenz模板", + "yourTemplatesLibrary": "您的模板库", + "searchTemplates": "搜索模板" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/templateDrawer.json b/worklenz-backend/src/public/locales/zh/templateDrawer.json new file mode 100644 index 00000000..8405f8ab --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/templateDrawer.json @@ -0,0 +1,23 @@ +{ + "bugTracking": "错误跟踪", + "construction": "建筑与施工", + "designCreative": "设计与创意", + "education": "教育", + "finance": "金融", + "hrRecruiting": "人力资源与招聘", + "informationTechnology": "信息技术", + "legal": "法律", + "manufacturing": "制造业", + "marketing": "市场营销", + "nonprofit": "非营利", + "personalUse": "个人使用", + "salesCRM": "销售与客户关系管理", + "serviceConsulting": "服务与咨询", + "softwareDevelopment": "软件开发", + "description": "描述", + "phase": "阶段", + "statuses": "状态", + "priorities": "优先级", + "labels": "标签", + "tasks": "任务" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/time-report.json b/worklenz-backend/src/public/locales/zh/time-report.json new file mode 100644 index 00000000..c376954a --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/time-report.json @@ -0,0 +1,33 @@ +{ + "includeArchivedProjects": "包含已归档项目", + "export": "导出", + "timeSheet": "时间表", + "searchByName": "按名称搜索", + "selectAll": "全选", + "teams": "团队", + "searchByProject": "按项目名称搜索", + "projects": "项目", + "searchByCategory": "按类别名称搜索", + "categories": "类别", + "billable": "可计费", + "nonBillable": "不可计费", + "total": "总计", + "projectsTimeSheet": "项目时间表", + "loggedTime": "已记录时间(小时)", + "exportToExcel": "导出到Excel", + "logged": "已记录", + "for": "为", + "membersTimeSheet": "成员时间表", + "member": "成员", + "estimatedVsActual": "预计用时 vs 实际用时", + "workingDays": "工作日", + "manDays": "人天", + "days": "天", + "estimatedDays": "预计天数", + "actualDays": "实际天数", + "noCategories": "未找到类别", + "noCategory": "无类别", + "noProjects": "未找到项目", + "noTeams": "未找到团队", + "noData": "未找到数据" +} \ No newline at end of file diff --git a/worklenz-backend/src/public/locales/zh/unauthorized.json b/worklenz-backend/src/public/locales/zh/unauthorized.json new file mode 100644 index 00000000..985b1d08 --- /dev/null +++ b/worklenz-backend/src/public/locales/zh/unauthorized.json @@ -0,0 +1,5 @@ +{ + "title": "未授权!", + "subtitle": "您无权访问此页面", + "button": "返回首页" +} \ No newline at end of file diff --git a/worklenz-frontend/src/components/task-management/optimized-bulk-action-bar.tsx b/worklenz-frontend/src/components/task-management/optimized-bulk-action-bar.tsx index cab31efa..0797783f 100644 --- a/worklenz-frontend/src/components/task-management/optimized-bulk-action-bar.tsx +++ b/worklenz-frontend/src/components/task-management/optimized-bulk-action-bar.tsx @@ -18,7 +18,7 @@ import { RootState } from '@/app/store'; import { useAppSelector } from '@/hooks/useAppSelector'; import { selectTasks } from '@/features/projects/bulkActions/bulkActionSlice'; import { IProjectTask } from '@/types/project/projectTasksViewModel.types'; -import { useBulkActionTranslations } from '@/hooks/useTranslationPreloader'; +import { useTranslation } from 'react-i18next'; import LabelsDropdown from '@/components/taskListCommon/task-list-bulk-actions-bar/components/LabelsDropdown'; import AssigneesDropdown from '@/components/taskListCommon/task-list-bulk-actions-bar/components/AssigneesDropdown'; import { ITaskLabel } from '@/types/tasks/taskLabel.types'; @@ -165,7 +165,7 @@ const OptimizedBulkActionBarContent: React.FC = Rea onBulkExport, onBulkSetDueDate, }) => { - const { t, ready, isLoading } = useBulkActionTranslations(); + const { t } = useTranslation(['tasks/task-table-bulk-actions', 'task-management']); const dispatch = useDispatch(); const isDarkMode = useSelector((state: RootState) => state.themeReducer?.mode === 'dark'); @@ -549,10 +549,7 @@ const OptimizedBulkActionBarContent: React.FC = Rea [isDarkMode] ); - // Don't render until translations are ready to prevent Suspense - if (!ready || isLoading) { - return null; - } + // Remove translation loading check since we're using simple load-as-you-go approach if (!totalSelected || Number(totalSelected) < 1) { return null; diff --git a/worklenz-frontend/src/components/task-management/task-list-board.tsx b/worklenz-frontend/src/components/task-management/task-list-board.tsx index f6ea1721..ad2421f6 100644 --- a/worklenz-frontend/src/components/task-management/task-list-board.tsx +++ b/worklenz-frontend/src/components/task-management/task-list-board.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState, useMemo, useCallback, useRef } from 'react'; import { useSelector, useDispatch } from 'react-redux'; -import { useTaskManagementTranslations } from '@/hooks/useTranslationPreloader'; +import { useTranslation } from 'react-i18next'; import { DndContext, DragOverlay, @@ -123,7 +123,7 @@ const throttle = void>(func: T, delay: number): T const TaskListBoard: React.FC = ({ projectId, className = '' }) => { const dispatch = useDispatch(); - const { t, ready, isLoading } = useTaskManagementTranslations(); + const { t } = useTranslation(['task-management', 'task-list-table']); const { trackMixpanelEvent } = useMixpanelTracking(); const [dragState, setDragState] = useState({ activeTask: null, @@ -757,16 +757,7 @@ const TaskListBoard: React.FC = ({ projectId, className = '' }; }, []); - // Don't render until translations are ready to prevent Suspense - if (!ready || isLoading) { - return ( - -
- -
-
- ); - } + // Remove translation loading check since we're using simple load-as-you-go approach if (error) { return ( diff --git a/worklenz-frontend/src/hooks/useTranslationPreloader.ts b/worklenz-frontend/src/hooks/useTranslationPreloader.ts deleted file mode 100644 index 226953c8..00000000 --- a/worklenz-frontend/src/hooks/useTranslationPreloader.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { - ensureTranslationsLoaded, - preloadPageTranslations, - getPerformanceMetrics, - changeLanguageOptimized -} from '../i18n'; -import logger from '../utils/errorLogger'; - -// Cache for preloaded translation states -const preloadCache = new Map(); -const loadingStates = new Map(); - -interface TranslationHookOptions { - preload?: boolean; - priority?: number; - fallbackReady?: boolean; -} - -interface TranslationHookReturn { - t: (key: string, defaultValue?: string) => string; - ready: boolean; - isLoading: boolean; - error: Error | null; - retryLoad: () => Promise; - performanceMetrics: any; -} - -// Enhanced translation hook with better performance -export const useOptimizedTranslation = ( - namespace: string | string[], - options: TranslationHookOptions = {} -): TranslationHookReturn => { - const { preload = true, priority = 5, fallbackReady = true } = options; - - const namespaces = Array.isArray(namespace) ? namespace : [namespace]; - const namespaceKey = namespaces.join(','); - - const [ready, setReady] = useState(fallbackReady); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - - const hasInitialized = useRef(false); - const loadingPromise = useRef | null>(null); - - const { t, i18n } = useTranslation(namespaces); - - // Memoized preload function - const preloadTranslations = useCallback(async () => { - const cacheKey = `${i18n.language}:${namespaceKey}`; - - // Skip if already preloaded or currently loading - if (preloadCache.get(cacheKey) || loadingStates.get(cacheKey)) { - return; - } - - try { - setIsLoading(true); - setError(null); - loadingStates.set(cacheKey, true); - - const startTime = performance.now(); - - // Use the optimized preload function - await preloadPageTranslations(namespaces); - - const endTime = performance.now(); - const loadTime = endTime - startTime; - - if (process.env.NODE_ENV === 'development') { - console.log( - `✅ Preloaded translations for ${namespaceKey} in ${loadTime.toFixed(2)}ms` - ); - } - - preloadCache.set(cacheKey, true); - setReady(true); - } catch (err) { - const error = err instanceof Error ? err : new Error('Failed to preload translations'); - setError(error); - logger.error(`Failed to preload translations for ${namespaceKey}:`, error); - - // Fallback to ready state even on error to prevent blocking UI - if (fallbackReady) { - setReady(true); - } - } finally { - setIsLoading(false); - loadingStates.set(cacheKey, false); - } - }, [namespaces, namespaceKey, i18n.language, fallbackReady]); - - // Initialize preloading - useEffect(() => { - if (!hasInitialized.current && preload) { - hasInitialized.current = true; - - if (!loadingPromise.current) { - loadingPromise.current = preloadTranslations(); - } - } - }, [preload, preloadTranslations]); - - // Handle language changes - useEffect(() => { - const handleLanguageChange = () => { - const cacheKey = `${i18n.language}:${namespaceKey}`; - if (!preloadCache.get(cacheKey) && preload) { - setReady(false); - preloadTranslations(); - } - }; - - i18n.on('languageChanged', handleLanguageChange); - return () => { - i18n.off('languageChanged', handleLanguageChange); - }; - }, [i18n, namespaceKey, preload, preloadTranslations]); - - // Retry function - const retryLoad = useCallback(async () => { - const cacheKey = `${i18n.language}:${namespaceKey}`; - preloadCache.delete(cacheKey); - loadingStates.delete(cacheKey); - await preloadTranslations(); - }, [namespaceKey, i18n.language, preloadTranslations]); - - // Get performance metrics - const performanceMetrics = useMemo(() => getPerformanceMetrics(), [ready]); - - // Enhanced t function with better error handling - const enhancedT = useCallback((key: string, defaultValue?: string) => { - try { - const translation = t(key, { defaultValue }); - - // Return the translation if it's not the key itself (indicating it was found) - if (translation !== key) { - return translation; - } - - // If we have a default value, use it - if (defaultValue) { - return defaultValue; - } - - // Fallback to the key - return key; - } catch (err) { - logger.error(`Translation error for key ${key}:`, err); - return defaultValue || key; - } - }, [t]); - - return { - t: enhancedT, - ready, - isLoading, - error, - retryLoad, - performanceMetrics, - }; -}; - -// Specialized hooks for commonly used namespaces -export const useTaskManagementTranslations = (options?: TranslationHookOptions) => { - return useOptimizedTranslation(['task-management', 'task-list-table'], { - priority: 8, - ...options, - }); -}; - -export const useBulkActionTranslations = (options?: TranslationHookOptions) => { - return useOptimizedTranslation(['tasks/task-table-bulk-actions', 'task-management'], { - priority: 6, - ...options, - }); -}; - -export const useTaskDrawerTranslations = (options?: TranslationHookOptions) => { - return useOptimizedTranslation(['task-drawer/task-drawer', 'task-list-table'], { - priority: 7, - ...options, - }); -}; - -export const useProjectTranslations = (options?: TranslationHookOptions) => { - return useOptimizedTranslation(['project-drawer', 'common'], { - priority: 7, - ...options, - }); -}; - -export const useSettingsTranslations = (options?: TranslationHookOptions) => { - return useOptimizedTranslation(['settings', 'common'], { - priority: 4, - ...options, - }); -}; - -// Utility function to preload multiple namespaces -export const preloadMultipleNamespaces = async ( - namespaces: string[], - priority: number = 5 -): Promise => { - try { - await Promise.all( - namespaces.map(ns => preloadPageTranslations([ns])) - ); - return true; - } catch (error) { - logger.error('Failed to preload multiple namespaces:', error); - return false; - } -}; - -// Hook for pages that need multiple translation namespaces -export const usePageTranslations = ( - namespaces: string[], - options?: TranslationHookOptions -) => { - const { ready, isLoading, error } = useOptimizedTranslation(namespaces, options); - - // Create individual translation functions for each namespace - const translations = useMemo(() => { - const result: Record = {}; - - namespaces.forEach(ns => { - const { t } = useTranslation(ns); - result[ns] = t; - }); - - return result; - }, [namespaces, ready]); - - return { - ...translations, - ready, - isLoading, - error, - }; -}; - -// Language switching utilities -export const useLanguageSwitcher = () => { - const [switching, setSwitching] = useState(false); - - const switchLanguage = useCallback(async (language: string) => { - try { - setSwitching(true); - await changeLanguageOptimized(language); - - // Clear preload cache for new language - preloadCache.clear(); - loadingStates.clear(); - - } catch (error) { - logger.error('Failed to switch language:', error); - } finally { - setSwitching(false); - } - }, []); - - return { - switchLanguage, - switching, - }; -}; - -// Performance monitoring hook -export const useTranslationPerformance = () => { - const [metrics, setMetrics] = useState(getPerformanceMetrics()); - - useEffect(() => { - const interval = setInterval(() => { - setMetrics(getPerformanceMetrics()); - }, 5000); // Update every 5 seconds - - return () => clearInterval(interval); - }, []); - - return metrics; -}; diff --git a/worklenz-frontend/src/i18n.ts b/worklenz-frontend/src/i18n.ts index 444dd60d..c7337343 100644 --- a/worklenz-frontend/src/i18n.ts +++ b/worklenz-frontend/src/i18n.ts @@ -1,379 +1,34 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; -import HttpApi from 'i18next-http-backend'; import LanguageDetector from 'i18next-browser-languagedetector'; -import LocalStorageBackend from 'i18next-localstorage-backend'; -import logger from './utils/errorLogger'; - -// Essential namespaces that should be preloaded to prevent Suspense -const ESSENTIAL_NAMESPACES = [ - 'common', - 'auth/login', - 'navbar', -]; - -// Secondary namespaces that can be loaded on demand -const SECONDARY_NAMESPACES = [ - 'tasks/task-table-bulk-actions', - 'task-management', - 'settings', - 'home', - 'project-drawer', -]; - -// Tertiary namespaces that can be loaded even later -const TERTIARY_NAMESPACES = [ - 'task-drawer/task-drawer', - 'task-list-table', - 'phases-drawer', - 'schedule', - 'reporting', - 'admin-center/current-bill', -]; - -// Cache to track loaded translations and prevent duplicate requests -const loadedTranslations = new Set(); -const loadingPromises = new Map>(); - -// Background loading queue for non-essential translations -let backgroundLoadingQueue: Array<{ lang: string; ns: string; priority: number }> = []; -let isBackgroundLoading = false; - -// Performance monitoring -const performanceMetrics = { - totalLoadTime: 0, - translationsLoaded: 0, - cacheHits: 0, - cacheMisses: 0, -}; - -// Enhanced caching configuration -const CACHE_CONFIG = { - EXPIRATION_TIME: 7 * 24 * 60 * 60 * 1000, // 7 days - MAX_CACHE_SIZE: 50, // Maximum number of namespaces to cache - CLEANUP_INTERVAL: 24 * 60 * 60 * 1000, // Clean cache daily -}; +import HttpApi from 'i18next-http-backend'; i18n - .use(LocalStorageBackend) // Cache translations to localStorage - .use(LanguageDetector) // Detect user language - .use(HttpApi) // Fetch translations if not in cache + .use(HttpApi) + .use(LanguageDetector) .use(initReactI18next) .init({ fallbackLng: 'en', - backend: { - loadPath: '/locales/{{lng}}/{{ns}}.json', - addPath: '/locales/add/{{lng}}/{{ns}}', - // Enhanced LocalStorage caching options - backendOptions: [{ - expirationTime: CACHE_CONFIG.EXPIRATION_TIME, - // Store translations more efficiently - store: { - setItem: (key: string, value: string) => { - try { - // Compress large translation objects - const compressedValue = value.length > 1000 ? - JSON.stringify(JSON.parse(value)) : value; - localStorage.setItem(key, compressedValue); - performanceMetrics.cacheHits++; - } catch (error) { - logger.error('Failed to store translation in cache:', error); - } - }, - getItem: (key: string) => { - try { - const value = localStorage.getItem(key); - if (value) { - performanceMetrics.cacheHits++; - return value; - } - performanceMetrics.cacheMisses++; - return null; - } catch (error) { - logger.error('Failed to retrieve translation from cache:', error); - performanceMetrics.cacheMisses++; - return null; - } - } - } - }, { - loadPath: '/locales/{{lng}}/{{ns}}.json', - // Add request timeout and retry logic - requestOptions: { - cache: 'force-cache', // Use browser cache when possible - }, - parse: (data: string) => { - try { - return JSON.parse(data); - } catch (error) { - logger.error('Failed to parse translation data:', error); - return {}; - } - } - }], - }, defaultNS: 'common', - ns: ESSENTIAL_NAMESPACES, + interpolation: { escapeValue: false, }, - preload: [], - load: 'languageOnly', - initImmediate: false, + detection: { - order: ['localStorage', 'navigator'], // Check localStorage first, then browser language + order: ['localStorage', 'navigator'], caches: ['localStorage'], - // Cache the detected language for faster subsequent loads - cookieMinutes: 60 * 24 * 7, // 1 week }, - // Reduce debug output in production + debug: process.env.NODE_ENV === 'development', - // Performance optimizations - cleanCode: true, // Remove code characters - keySeparator: false, // Disable key separator for better performance - nsSeparator: false, // Disable namespace separator for better performance - pluralSeparator: '_', // Use underscore for plural separation + + backend: { + loadPath: '/locales/{{lng}}/{{ns}}.json', + }, + react: { - useSuspense: false, // Disable suspense for better control - bindI18n: 'languageChanged loaded', // Only bind necessary events - bindI18nStore: false, // Disable store binding for better performance + useSuspense: false, }, }); -// Optimized function to ensure translations are loaded with priority support -export const ensureTranslationsLoaded = async ( - namespaces: string[] = ESSENTIAL_NAMESPACES, - languages: string[] = [i18n.language || 'en'], - priority: number = 0 -) => { - const startTime = performance.now(); - - try { - const loadPromises: Promise[] = []; - - for (const lang of languages) { - for (const ns of namespaces) { - const key = `${lang}:${ns}`; - - // Skip if already loaded - if (loadedTranslations.has(key)) { - continue; - } - - // Check if already loading - if (loadingPromises.has(key)) { - loadPromises.push(loadingPromises.get(key)!); - continue; - } - - // Create loading promise with enhanced error handling - const loadingPromise = new Promise((resolve, reject) => { - const currentLang = i18n.language; - const shouldSwitchLang = currentLang !== lang; - - const loadForLanguage = async () => { - try { - if (shouldSwitchLang) { - await i18n.changeLanguage(lang); - } - - await i18n.loadNamespaces(ns); - - if (shouldSwitchLang && currentLang) { - await i18n.changeLanguage(currentLang); - } - - loadedTranslations.add(key); - performanceMetrics.translationsLoaded++; - resolve(); - } catch (error) { - logger.error(`Failed to load namespace: ${ns} for language: ${lang}`, error); - // Don't reject completely, just log and continue - resolve(); // Still resolve to prevent blocking other translations - } finally { - loadingPromises.delete(key); - } - }; - - loadForLanguage(); - }); - - loadingPromises.set(key, loadingPromise); - loadPromises.push(loadingPromise); - } - } - - await Promise.all(loadPromises); - - const endTime = performance.now(); - performanceMetrics.totalLoadTime += (endTime - startTime); - - return true; - } catch (error) { - logger.error('Failed to load translations:', error); - return false; - } -}; - -// Enhanced background loading function with priority queue -const processBackgroundQueue = async () => { - if (isBackgroundLoading || backgroundLoadingQueue.length === 0) return; - - isBackgroundLoading = true; - - try { - // Sort by priority (higher priority first) - backgroundLoadingQueue.sort((a, b) => b.priority - a.priority); - - // Process queue in smaller batches to avoid overwhelming the network - const batchSize = 2; // Reduced batch size for better performance - while (backgroundLoadingQueue.length > 0) { - const batch = backgroundLoadingQueue.splice(0, batchSize); - const batchPromises = batch.map(({ lang, ns }) => - ensureTranslationsLoaded([ns], [lang], 0).catch(error => { - logger.error(`Background loading failed for ${lang}:${ns}`, error); - }) - ); - - await Promise.all(batchPromises); - - // Add delay between batches to prevent blocking main thread - if (backgroundLoadingQueue.length > 0) { - await new Promise(resolve => setTimeout(resolve, 200)); // Increased delay - } - - // Break if we've been loading for too long (prevent infinite loops) - if (performance.now() - performanceMetrics.totalLoadTime > 30000) { // 30 seconds max - logger.error('Background translation loading taking too long, stopping'); - break; - } - } - } finally { - isBackgroundLoading = false; - } -}; - -// Enhanced queueing with priority support -const queueTranslations = (language: string, namespaces: string[], priority: number = 0) => { - namespaces.forEach(ns => { - const key = `${language}:${ns}`; - if (!loadedTranslations.has(key)) { - // Remove existing entry if it exists with lower priority - const existingIndex = backgroundLoadingQueue.findIndex(item => - item.lang === language && item.ns === ns); - if (existingIndex >= 0) { - if (backgroundLoadingQueue[existingIndex].priority < priority) { - backgroundLoadingQueue.splice(existingIndex, 1); - } else { - return; // Don't add duplicate with lower or equal priority - } - } - - backgroundLoadingQueue.push({ lang: language, ns, priority }); - } - }); - - // Start background loading with appropriate delay based on priority - const delay = priority > 5 ? 1000 : priority > 2 ? 2000 : 3000; - setTimeout(processBackgroundQueue, delay); -}; - -// Initialize only essential translations for current language -const initializeTranslations = async () => { - try { - const currentLang = i18n.language || 'en'; - - // Load only essential namespaces immediately - await ensureTranslationsLoaded(ESSENTIAL_NAMESPACES, [currentLang], 10); - - // Queue secondary translations with medium priority - queueTranslations(currentLang, SECONDARY_NAMESPACES, 5); - - // Queue tertiary translations with low priority - queueTranslations(currentLang, TERTIARY_NAMESPACES, 1); - - return true; - } catch (error) { - logger.error('Failed to initialize translations:', error); - return false; - } -}; - -// Enhanced language change handler with better prioritization -export const changeLanguageOptimized = async (language: string) => { - try { - // Change language first - await i18n.changeLanguage(language); - - // Load essential namespaces immediately with high priority - await ensureTranslationsLoaded(ESSENTIAL_NAMESPACES, [language], 10); - - // Queue secondary translations with medium priority - queueTranslations(language, SECONDARY_NAMESPACES, 5); - - // Queue tertiary translations with low priority - queueTranslations(language, TERTIARY_NAMESPACES, 1); - - return true; - } catch (error) { - logger.error(`Failed to change language to ${language}:`, error); - return false; - } -}; - -// Cache cleanup functionality -const cleanupCache = () => { - try { - const keys = Object.keys(localStorage).filter(key => - key.startsWith('i18next_res_') - ); - - if (keys.length > CACHE_CONFIG.MAX_CACHE_SIZE) { - // Remove oldest entries - const entriesToRemove = keys.slice(0, keys.length - CACHE_CONFIG.MAX_CACHE_SIZE); - entriesToRemove.forEach(key => { - try { - localStorage.removeItem(key); - } catch (error) { - logger.error('Failed to remove cache entry:', error); - } - }); - } - } catch (error) { - logger.error('Failed to cleanup translation cache:', error); - } -}; - -// Performance monitoring functions -export const getPerformanceMetrics = () => ({ - ...performanceMetrics, - cacheEfficiency: performanceMetrics.cacheHits / - (performanceMetrics.cacheHits + performanceMetrics.cacheMisses) * 100, - averageLoadTime: performanceMetrics.totalLoadTime / performanceMetrics.translationsLoaded, -}); - -export const resetPerformanceMetrics = () => { - performanceMetrics.totalLoadTime = 0; - performanceMetrics.translationsLoaded = 0; - performanceMetrics.cacheHits = 0; - performanceMetrics.cacheMisses = 0; -}; - -// Utility function to preload translations for a specific page/component -export const preloadPageTranslations = async (pageNamespaces: string[]) => { - const currentLang = i18n.language || 'en'; - return ensureTranslationsLoaded(pageNamespaces, [currentLang], 8); -}; - -// Set up periodic cache cleanup -if (typeof window !== 'undefined') { - setInterval(cleanupCache, CACHE_CONFIG.CLEANUP_INTERVAL); - - // Cleanup on page unload - window.addEventListener('beforeunload', cleanupCache); -} - -// Initialize translations on app startup -initializeTranslations(); - export default i18n; diff --git a/worklenz-frontend/src/pages/projects/projectView/project-view.tsx b/worklenz-frontend/src/pages/projects/projectView/project-view.tsx index c0228007..15dd1b2d 100644 --- a/worklenz-frontend/src/pages/projects/projectView/project-view.tsx +++ b/worklenz-frontend/src/pages/projects/projectView/project-view.tsx @@ -39,7 +39,7 @@ import { resetState as resetEnhancedKanbanState } from '@/features/enhanced-kanb import { setProjectId as setInsightsProjectId } from '@/features/projects/insights/project-insights.slice'; import { SuspenseFallback } from '@/components/suspense-fallback/suspense-fallback'; import { useTranslation } from 'react-i18next'; -import { ensureTranslationsLoaded } from '@/i18n'; + // Import critical components synchronously to avoid suspense interruptions import TaskDrawer from '@components/task-drawer/task-drawer'; @@ -96,21 +96,10 @@ const ProjectView = React.memo(() => { setTaskId(urlParams.taskId); }, [urlParams]); - // Ensure translations are loaded for project-view namespace + // Remove translation preloading since we're using simple load-as-you-go approach useEffect(() => { - const loadTranslations = async () => { - try { - await ensureTranslationsLoaded(['project-view'], [i18n.language]); - updateTabLabels(); - setTranslationsReady(true); - } catch (error) { - console.error('Failed to load project-view translations:', error); - // Set ready to true anyway to prevent infinite loading - setTranslationsReady(true); - } - }; - - loadTranslations(); + updateTabLabels(); + setTranslationsReady(true); }, [i18n.language]); // Update tab labels when language changes diff --git a/worklenz-frontend/vite.config.ts b/worklenz-frontend/vite.config.ts index 6bca483d..d1c4687a 100644 --- a/worklenz-frontend/vite.config.ts +++ b/worklenz-frontend/vite.config.ts @@ -25,6 +25,7 @@ export default defineConfig(({ command, mode }) => { { find: '@shared', replacement: path.resolve(__dirname, './src/shared') }, { find: '@layouts', replacement: path.resolve(__dirname, './src/layouts') }, { find: '@services', replacement: path.resolve(__dirname, './src/services') }, + ], // **Ensure single React instance** dedupe: ['react', 'react-dom'],