Added language selection and translation files
This commit is contained in:
9
frontend/src/i18n/i18n.d.ts
vendored
Normal file
9
frontend/src/i18n/i18n.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import 'i18next';
|
||||
import { resources, defaultNS } from './index';
|
||||
|
||||
declare module 'i18next' {
|
||||
interface CustomTypeOptions {
|
||||
defaultNS: typeof defaultNS;
|
||||
resources: typeof resources['en'];
|
||||
}
|
||||
}
|
||||
96
frontend/src/i18n/index.ts
Normal file
96
frontend/src/i18n/index.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
import i18n from 'i18next';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||
|
||||
// Import English translations
|
||||
import enCommon from './locales/en/common.json';
|
||||
import enNavbar from './locales/en/navbar.json';
|
||||
import enHome from './locales/en/home.json';
|
||||
import enDashboard from './locales/en/dashboard.json';
|
||||
import enRequirements from './locales/en/requirements.json';
|
||||
import enRequirementDetail from './locales/en/requirementDetail.json';
|
||||
import enAdmin from './locales/en/admin.json';
|
||||
import enValidation from './locales/en/validation.json';
|
||||
import enErrors from './locales/en/errors.json';
|
||||
|
||||
// Import Portuguese translations
|
||||
import ptCommon from './locales/pt/common.json';
|
||||
import ptNavbar from './locales/pt/navbar.json';
|
||||
import ptHome from './locales/pt/home.json';
|
||||
import ptDashboard from './locales/pt/dashboard.json';
|
||||
import ptRequirements from './locales/pt/requirements.json';
|
||||
import ptRequirementDetail from './locales/pt/requirementDetail.json';
|
||||
import ptAdmin from './locales/pt/admin.json';
|
||||
import ptValidation from './locales/pt/validation.json';
|
||||
import ptErrors from './locales/pt/errors.json';
|
||||
|
||||
// Define available languages for the language selector
|
||||
export const LANGUAGES = [
|
||||
{ code: 'en', label: 'English', flag: '🇺🇸' },
|
||||
{ code: 'pt', label: 'Português', flag: '🇧🇷' },
|
||||
] as const;
|
||||
|
||||
export type LanguageCode = typeof LANGUAGES[number]['code'];
|
||||
|
||||
// Define resources with all namespaces
|
||||
export const resources = {
|
||||
en: {
|
||||
common: enCommon,
|
||||
navbar: enNavbar,
|
||||
home: enHome,
|
||||
dashboard: enDashboard,
|
||||
requirements: enRequirements,
|
||||
requirementDetail: enRequirementDetail,
|
||||
admin: enAdmin,
|
||||
validation: enValidation,
|
||||
errors: enErrors,
|
||||
},
|
||||
pt: {
|
||||
common: ptCommon,
|
||||
navbar: ptNavbar,
|
||||
home: ptHome,
|
||||
dashboard: ptDashboard,
|
||||
requirements: ptRequirements,
|
||||
requirementDetail: ptRequirementDetail,
|
||||
admin: ptAdmin,
|
||||
validation: ptValidation,
|
||||
errors: ptErrors,
|
||||
},
|
||||
} as const;
|
||||
|
||||
// Define default namespace
|
||||
export const defaultNS = 'common';
|
||||
|
||||
i18n
|
||||
// Detect user language from localStorage, navigator, etc.
|
||||
.use(LanguageDetector)
|
||||
// Pass i18n instance to react-i18next
|
||||
.use(initReactI18next)
|
||||
// Initialize i18next
|
||||
.init({
|
||||
resources,
|
||||
fallbackLng: 'en',
|
||||
defaultNS,
|
||||
|
||||
// Language detection options
|
||||
detection: {
|
||||
// Order of language detection methods
|
||||
order: ['localStorage', 'navigator', 'htmlTag'],
|
||||
// Cache user language preference in localStorage
|
||||
caches: ['localStorage'],
|
||||
// Key name in localStorage
|
||||
lookupLocalStorage: 'i18nextLng',
|
||||
},
|
||||
|
||||
interpolation: {
|
||||
// React already escapes values, so we don't need i18next to do it
|
||||
escapeValue: false,
|
||||
},
|
||||
|
||||
// React Suspense support (for future lazy loading)
|
||||
react: {
|
||||
useSuspense: false,
|
||||
},
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
68
frontend/src/i18n/locales/en/admin.json
Normal file
68
frontend/src/i18n/locales/en/admin.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"pageTitle": "Admin Panel",
|
||||
"managing": "Managing:",
|
||||
"tabs": {
|
||||
"projectSettings": "Project Settings",
|
||||
"memberRoles": "Member Roles",
|
||||
"relationshipTypes": "Relationship Types"
|
||||
},
|
||||
"backToDashboard": "Back to Dashboard",
|
||||
"noProject": {
|
||||
"title": "No Project Selected",
|
||||
"message": "Please select a project from the dashboard first.",
|
||||
"goToDashboard": "Go to Dashboard"
|
||||
},
|
||||
"projectSettings": {
|
||||
"title": "Project Settings",
|
||||
"projectName": "Project Name",
|
||||
"description": "Description",
|
||||
"saveButton": "Save Changes",
|
||||
"successMessage": "Project updated successfully!",
|
||||
"errorUpdating": "Failed to update project"
|
||||
},
|
||||
"memberRoles": {
|
||||
"title": "Member Roles",
|
||||
"loadingMembers": "Loading members...",
|
||||
"noMembers": "No members found",
|
||||
"tableHeaders": {
|
||||
"user": "User",
|
||||
"role": "Role",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"youBadge": "You",
|
||||
"cannotDemoteSelf": "You cannot demote yourself. Ask another admin to change your role.",
|
||||
"errorUpdating": "Failed to update member role"
|
||||
},
|
||||
"relationshipTypes": {
|
||||
"title": "Relationship Types",
|
||||
"addButton": "+ Add Type",
|
||||
"loadingTypes": "Loading relationship types...",
|
||||
"noTypes": "No relationship types defined yet. Create one to link requirements.",
|
||||
"inverse": "Inverse:",
|
||||
"editButton": "Edit",
|
||||
"deleteButton": "Delete"
|
||||
},
|
||||
"createRelTypeModal": {
|
||||
"title": "Create Relationship Type",
|
||||
"typeName": "Type Name",
|
||||
"typeNamePlaceholder": "e.g., Depends On",
|
||||
"inverseName": "Inverse Name",
|
||||
"inverseNamePlaceholder": "e.g., Depended By",
|
||||
"inverseNameHint": "Optional. The name shown when viewing from the target requirement.",
|
||||
"description": "Description",
|
||||
"createButton": "Create",
|
||||
"errorCreating": "Failed to create relationship type"
|
||||
},
|
||||
"editRelTypeModal": {
|
||||
"title": "Edit Relationship Type",
|
||||
"saveButton": "Save Changes",
|
||||
"errorUpdating": "Failed to update relationship type"
|
||||
},
|
||||
"deleteRelTypeModal": {
|
||||
"title": "Delete Relationship Type",
|
||||
"confirmMessage": "Are you sure you want to delete the relationship type",
|
||||
"warningMessage": "⚠️ This will also delete all requirement links using this type.",
|
||||
"deleteButton": "Delete",
|
||||
"errorDeleting": "Failed to delete relationship type"
|
||||
}
|
||||
}
|
||||
49
frontend/src/i18n/locales/en/common.json
Normal file
49
frontend/src/i18n/locales/en/common.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"save": "Save",
|
||||
"saveChanges": "Save Changes",
|
||||
"saving": "Saving...",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete",
|
||||
"deleting": "Deleting...",
|
||||
"edit": "Edit",
|
||||
"close": "Close",
|
||||
"loading": "Loading...",
|
||||
"retry": "Retry",
|
||||
"search": "Search",
|
||||
"clear": "Clear",
|
||||
"filter": "Filter",
|
||||
"create": "Create",
|
||||
"creating": "Creating...",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"none": "None",
|
||||
"unknown": "Unknown",
|
||||
"noResults": "No results found",
|
||||
"required": "Required",
|
||||
"optional": "Optional",
|
||||
"version": "Version",
|
||||
"priority": "Priority",
|
||||
"status": "Status",
|
||||
"date": "Date",
|
||||
"name": "Name",
|
||||
"description": "Description",
|
||||
"actions": "Actions",
|
||||
"details": "Details",
|
||||
"user": "User",
|
||||
"role": "Role",
|
||||
"by": "by",
|
||||
"on": "on",
|
||||
"more": "more",
|
||||
"empty": "Empty",
|
||||
"old": "Old",
|
||||
"new": "New",
|
||||
"total": "Total",
|
||||
"all": "All",
|
||||
"you": "You",
|
||||
"projects": "Projects",
|
||||
"project": "Project",
|
||||
"selectLanguage": "Select language",
|
||||
"logout": "Logout"
|
||||
}
|
||||
67
frontend/src/i18n/locales/en/dashboard.json
Normal file
67
frontend/src/i18n/locales/en/dashboard.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"sidebar": {
|
||||
"title": "Digital Twin",
|
||||
"subtitle": "Requirements Tool",
|
||||
"createRequirement": "Create Requirement",
|
||||
"navigation": "Navigation",
|
||||
"searchRequirements": "Search Requirements",
|
||||
"myRequirements": "My Requirements",
|
||||
"generateReport": "Generate Report",
|
||||
"projectSummary": "Project Summary",
|
||||
"total": "Total",
|
||||
"validated": "Validated"
|
||||
},
|
||||
"header": {
|
||||
"projects": "Projects",
|
||||
"admin": "Admin"
|
||||
},
|
||||
"projectDropdown": {
|
||||
"loading": "Loading...",
|
||||
"noProjectSelected": "No project selected",
|
||||
"noProjectsAvailable": "No projects available",
|
||||
"createNewProject": "+ Create New Project"
|
||||
},
|
||||
"noProjectWarning": {
|
||||
"title": "No Project Selected",
|
||||
"messagePart1": "Please select a project from the dropdown above or",
|
||||
"createProject": "create a new project",
|
||||
"messagePart2": "to get started."
|
||||
},
|
||||
"quickFilters": {
|
||||
"title": "Quick Search Filters",
|
||||
"subtitle": "Click a category to filter requirements",
|
||||
"noGroupsFound": "No groups found",
|
||||
"total": "total"
|
||||
},
|
||||
"needsAttention": {
|
||||
"title": "Needs Attention",
|
||||
"subtitle": "Requirements with denied or partial validation",
|
||||
"viewAll": "View All",
|
||||
"moreRequirements": "more requirements need attention",
|
||||
"by": "by"
|
||||
},
|
||||
"needsRevalidation": {
|
||||
"title": "Needs Revalidation",
|
||||
"subtitle": "Requirements updated since last validation",
|
||||
"viewAll": "View All",
|
||||
"moreRequirements": "more requirements need revalidation",
|
||||
"versionBehind": "version behind",
|
||||
"versionsBehind": "versions behind",
|
||||
"lastValidatedBy": "Last validated by",
|
||||
"by": "by"
|
||||
},
|
||||
"allClear": {
|
||||
"title": "All Clear!",
|
||||
"message": "No requirements need attention. All validations are either approved or pending review."
|
||||
},
|
||||
"createProject": {
|
||||
"title": "Create New Project",
|
||||
"projectName": "Project Name",
|
||||
"projectNamePlaceholder": "Enter project name",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Enter project description (optional)",
|
||||
"createButton": "Create Project",
|
||||
"creating": "Creating...",
|
||||
"errorCreating": "Failed to create project. Please try again."
|
||||
}
|
||||
}
|
||||
11
frontend/src/i18n/locales/en/errors.json
Normal file
11
frontend/src/i18n/locales/en/errors.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"generic": "An error occurred. Please try again.",
|
||||
"loadFailed": "Failed to load data. Please try again.",
|
||||
"saveFailed": "Failed to save. Please try again.",
|
||||
"deleteFailed": "Failed to delete. Please try again.",
|
||||
"createFailed": "Failed to create. Please try again.",
|
||||
"unauthorized": "You are not authorized to perform this action.",
|
||||
"notFound": "The requested resource was not found.",
|
||||
"networkError": "Network error. Please check your connection.",
|
||||
"sessionExpired": "Your session has expired. Please log in again."
|
||||
}
|
||||
5
frontend/src/i18n/locales/en/home.json
Normal file
5
frontend/src/i18n/locales/en/home.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"title": "Requirements Periodic Table",
|
||||
"subtitle": "Manage and track your project requirements.",
|
||||
"goToDashboard": "Go to Dashboard"
|
||||
}
|
||||
7
frontend/src/i18n/locales/en/navbar.json
Normal file
7
frontend/src/i18n/locales/en/navbar.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"brand": "Requirements Periodic Table",
|
||||
"dashboard": "Dashboard",
|
||||
"hello": "Hello",
|
||||
"logout": "Logout",
|
||||
"login": "Login"
|
||||
}
|
||||
155
frontend/src/i18n/locales/en/requirementDetail.json
Normal file
155
frontend/src/i18n/locales/en/requirementDetail.json
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"pageTitle": "Digital Twin Requirements Tool",
|
||||
"breadcrumb": {
|
||||
"search": "Search",
|
||||
"details": "Details"
|
||||
},
|
||||
"loadingRequirement": "Loading requirement...",
|
||||
"requirementNotFound": "Requirement not found",
|
||||
"noRequirementId": "No requirement ID provided",
|
||||
"backToRequirements": "Back to Requirements",
|
||||
"errorLoading": "Failed to load requirement. Please try again.",
|
||||
"draft": {
|
||||
"badge": "Draft - Not Finalized",
|
||||
"title": "Draft Requirement",
|
||||
"message": "This requirement is still in draft status and is not finalized. It may be subject to changes."
|
||||
},
|
||||
"tabs": {
|
||||
"description": "Description",
|
||||
"relationships": "Relationships",
|
||||
"acceptanceCriteria": "Acceptance Criteria",
|
||||
"sharedComments": "Shared Comments",
|
||||
"validate": "Validate",
|
||||
"history": "History"
|
||||
},
|
||||
"description": {
|
||||
"title": "Description",
|
||||
"version": "Version:",
|
||||
"status": "Status:",
|
||||
"validationStatus": "Validation Status:",
|
||||
"author": "Author:",
|
||||
"lastEditedBy": "Last Edited By:",
|
||||
"created": "Created:",
|
||||
"lastUpdated": "Last Updated:",
|
||||
"noDescription": "No description provided.",
|
||||
"editButton": "Edit"
|
||||
},
|
||||
"relationships": {
|
||||
"title": "Relationships",
|
||||
"addButton": "Add Relationship",
|
||||
"noTypesWarning": "No relationship types have been defined for this project. Contact an administrator to set up relationship types.",
|
||||
"loadingRelationships": "Loading relationships...",
|
||||
"noRelationships": "No relationships defined yet.",
|
||||
"tableHeaders": {
|
||||
"direction": "Direction",
|
||||
"type": "Type",
|
||||
"linkedRequirement": "Linked Requirement",
|
||||
"createdBy": "Created By",
|
||||
"date": "Date",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"outgoing": "→ Outgoing",
|
||||
"incoming": "← Incoming"
|
||||
},
|
||||
"acceptanceCriteria": {
|
||||
"title": "Acceptance Criteria",
|
||||
"noCriteria": "No acceptance criteria defined yet.",
|
||||
"addButton": "Add Criterion"
|
||||
},
|
||||
"comments": {
|
||||
"title": "Shared Comments",
|
||||
"placeholder": "Add a comment...",
|
||||
"postButton": "Post Comment",
|
||||
"posting": "Posting...",
|
||||
"noComments": "No comments yet. Be the first to comment!",
|
||||
"loadingComments": "Loading comments...",
|
||||
"reply": "Reply",
|
||||
"cancelReply": "Cancel Reply",
|
||||
"replyPlaceholder": "Write a reply...",
|
||||
"postReply": "Post Reply",
|
||||
"errorPosting": "Failed to post comment. Please try again.",
|
||||
"errorPostingReply": "Failed to post reply. Please try again.",
|
||||
"roles": {
|
||||
"editor": "Editor",
|
||||
"auditor": "Auditor",
|
||||
"admin": "Project Admin",
|
||||
"user": "User"
|
||||
}
|
||||
},
|
||||
"validate": {
|
||||
"title": "Validate Requirement",
|
||||
"currentStatus": "Current Status:",
|
||||
"requirementVersion": "Requirement Version:",
|
||||
"lastValidatedBy": "Last validated by",
|
||||
"staleWarning": "This requirement was modified after the last validation (validated at version {{validationVersion}}, current version {{currentVersion}}).",
|
||||
"submitTitle": "Submit Validation",
|
||||
"statusLabel": "Validation Status",
|
||||
"selectStatus": "Select a status...",
|
||||
"commentLabel": "Comment",
|
||||
"commentPlaceholder": "Add a comment explaining your decision (optional but recommended)",
|
||||
"submitButton": "Submit Validation",
|
||||
"submitting": "Submitting...",
|
||||
"errorSubmitting": "Failed to submit validation. Please try again.",
|
||||
"historyTitle": "Validation History",
|
||||
"loadingHistory": "Loading history...",
|
||||
"noHistory": "No validation history yet.",
|
||||
"tableHeaders": {
|
||||
"date": "Date",
|
||||
"status": "Status",
|
||||
"version": "Version",
|
||||
"validator": "Validator",
|
||||
"comment": "Comment"
|
||||
},
|
||||
"noComment": "No comment"
|
||||
},
|
||||
"history": {
|
||||
"title": "Version History",
|
||||
"originalAuthor": "Original Author:",
|
||||
"loadingHistory": "Loading history...",
|
||||
"noHistory": "No history yet. History is recorded when the requirement is edited or relationships change.",
|
||||
"requirementEdited": "Requirement edited",
|
||||
"linkCreated": "Link Created",
|
||||
"linkRemoved": "Link Removed",
|
||||
"groupAdded": "Group Added",
|
||||
"groupRemoved": "Group Removed",
|
||||
"noChangesDetected": "No visible changes detected (may be a group-only change).",
|
||||
"showLess": "Show less",
|
||||
"showFullDiff": "Show full diff",
|
||||
"deletedRequirement": "Deleted Requirement",
|
||||
"unknownGroup": "Unknown Group"
|
||||
},
|
||||
"addRelationshipModal": {
|
||||
"title": "Add Relationship",
|
||||
"relationshipType": "Relationship Type",
|
||||
"selectType": "Select a relationship type...",
|
||||
"targetRequirement": "Target Requirement",
|
||||
"searchPlaceholder": "Search by tag code or name...",
|
||||
"selected": "Selected:",
|
||||
"createButton": "Create Relationship",
|
||||
"errorCreating": "Failed to create link. Please try again."
|
||||
},
|
||||
"editModal": {
|
||||
"title": "Edit Requirement",
|
||||
"loadingOptions": "Loading options...",
|
||||
"name": "Name",
|
||||
"tag": "Tag",
|
||||
"selectTag": "Select a tag...",
|
||||
"priority": "Priority",
|
||||
"noPriority": "No priority",
|
||||
"status": "Status",
|
||||
"draftNote": "Draft requirements are not finalized and marked with a visual indicator.",
|
||||
"description": "Description",
|
||||
"groups": "Groups",
|
||||
"noGroupsAvailable": "No groups available",
|
||||
"errorSaving": "Failed to save changes. Please try again.",
|
||||
"nameTagRequired": "Name and Tag are required"
|
||||
},
|
||||
"deleteModal": {
|
||||
"deleteComment": "Delete Comment",
|
||||
"deleteReply": "Delete Reply",
|
||||
"deleteRelationship": "Delete Relationship",
|
||||
"confirmDeleteComment": "Are you sure you want to delete this comment? This will also hide all replies.",
|
||||
"confirmDeleteReply": "Are you sure you want to delete this reply?",
|
||||
"confirmDeleteRelationship": "Are you sure you want to delete this relationship? This action cannot be undone."
|
||||
}
|
||||
}
|
||||
87
frontend/src/i18n/locales/en/requirements.json
Normal file
87
frontend/src/i18n/locales/en/requirements.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"header": {
|
||||
"title": "Digital Twin Requirements Tool"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"projects": "Projects",
|
||||
"searchRequirements": "Search Requirements"
|
||||
},
|
||||
"noProjectSelected": {
|
||||
"title": "No Project Selected",
|
||||
"message": "Please select a project from the dashboard to view requirements.",
|
||||
"goToDashboard": "Go to Dashboard"
|
||||
},
|
||||
"loadingRequirements": "Loading requirements...",
|
||||
"newRequirement": "New Requirement",
|
||||
"deleted": "Deleted",
|
||||
"searchPlaceholder": "Search for a requirement tag or title",
|
||||
"noRequirementsFound": "No requirements found matching your criteria.",
|
||||
"filters": {
|
||||
"filterGroup": "Filter Group",
|
||||
"filterValidationStatus": "Filter Validation Status",
|
||||
"showingNeedsRevalidation": "Showing: Needs Revalidation",
|
||||
"showingNeedsAttention": "Showing: Needs Attention",
|
||||
"needsRevalidation": "Needs Revalidation",
|
||||
"statuses": {
|
||||
"approved": "Approved",
|
||||
"denied": "Denied",
|
||||
"partiallyApproved": "Partially Approved",
|
||||
"notValidated": "Not Validated"
|
||||
}
|
||||
},
|
||||
"orderBy": {
|
||||
"label": "Order by",
|
||||
"date": "Date",
|
||||
"priority": "Priority",
|
||||
"name": "Name"
|
||||
},
|
||||
"caption": {
|
||||
"title": "Tag Caption",
|
||||
"viewCaptions": "View tag captions"
|
||||
},
|
||||
"requirement": {
|
||||
"draft": "Draft",
|
||||
"draftTooltip": "This requirement is still in draft and not finalized",
|
||||
"noGroups": "No groups",
|
||||
"more": "more",
|
||||
"stale": "Stale",
|
||||
"staleTooltip": "Requirement was modified after validation",
|
||||
"by": "by",
|
||||
"priority": "Priority",
|
||||
"version": "Version"
|
||||
},
|
||||
"deletedPanel": {
|
||||
"title": "Deleted Requirements",
|
||||
"noDeleted": "No deleted requirements found.",
|
||||
"deletedWillAppear": "Deleted requirements will appear here.",
|
||||
"unnamed": "Unnamed Requirement",
|
||||
"originalId": "Original ID",
|
||||
"deletedAt": "Deleted",
|
||||
"deletedBy": "Deleted by",
|
||||
"footerNote": "Deleted requirements are preserved in history for auditing purposes."
|
||||
},
|
||||
"deleteModal": {
|
||||
"title": "Delete Requirement",
|
||||
"confirmMessage": "Are you sure you want to delete the requirement",
|
||||
"explanation": "This action will move the requirement to the deleted items. You can view deleted requirements from the \"Deleted\" panel.",
|
||||
"deleting": "Deleting..."
|
||||
},
|
||||
"createModal": {
|
||||
"title": "New Requirement",
|
||||
"tag": "Tag",
|
||||
"selectTag": "Select a tag...",
|
||||
"name": "Name",
|
||||
"namePlaceholder": "Enter requirement name",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Enter requirement description (optional)",
|
||||
"priority": "Priority",
|
||||
"selectPriority": "Select a priority (optional)...",
|
||||
"groups": "Groups",
|
||||
"createButton": "Create Requirement",
|
||||
"creating": "Creating...",
|
||||
"errorCreating": "Failed to create requirement. Please try again.",
|
||||
"noProjectSelected": "No project selected",
|
||||
"nameRequired": "Requirement name is required",
|
||||
"tagRequired": "Please select a tag"
|
||||
}
|
||||
}
|
||||
7
frontend/src/i18n/locales/en/validation.json
Normal file
7
frontend/src/i18n/locales/en/validation.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"approved": "Approved",
|
||||
"denied": "Denied",
|
||||
"partial": "Partial",
|
||||
"partiallyApproved": "Partially Approved",
|
||||
"notValidated": "Not Validated"
|
||||
}
|
||||
68
frontend/src/i18n/locales/pt/admin.json
Normal file
68
frontend/src/i18n/locales/pt/admin.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"pageTitle": "Painel de Administração",
|
||||
"managing": "Gerenciando:",
|
||||
"tabs": {
|
||||
"projectSettings": "Configurações do Projeto",
|
||||
"memberRoles": "Funções dos Membros",
|
||||
"relationshipTypes": "Tipos de Relacionamento"
|
||||
},
|
||||
"backToDashboard": "Voltar ao Painel",
|
||||
"noProject": {
|
||||
"title": "Nenhum Projeto Selecionado",
|
||||
"message": "Por favor, selecione um projeto no painel primeiro.",
|
||||
"goToDashboard": "Ir para o Painel"
|
||||
},
|
||||
"projectSettings": {
|
||||
"title": "Configurações do Projeto",
|
||||
"projectName": "Nome do Projeto",
|
||||
"description": "Descrição",
|
||||
"saveButton": "Salvar Alterações",
|
||||
"successMessage": "Projeto atualizado com sucesso!",
|
||||
"errorUpdating": "Falha ao atualizar projeto"
|
||||
},
|
||||
"memberRoles": {
|
||||
"title": "Funções dos Membros",
|
||||
"loadingMembers": "Carregando membros...",
|
||||
"noMembers": "Nenhum membro encontrado",
|
||||
"tableHeaders": {
|
||||
"user": "Usuário",
|
||||
"role": "Função",
|
||||
"actions": "Ações"
|
||||
},
|
||||
"youBadge": "Você",
|
||||
"cannotDemoteSelf": "Você não pode rebaixar a si mesmo. Peça a outro administrador para alterar sua função.",
|
||||
"errorUpdating": "Falha ao atualizar função do membro"
|
||||
},
|
||||
"relationshipTypes": {
|
||||
"title": "Tipos de Relacionamento",
|
||||
"addButton": "+ Adicionar Tipo",
|
||||
"loadingTypes": "Carregando tipos de relacionamento...",
|
||||
"noTypes": "Nenhum tipo de relacionamento definido ainda. Crie um para vincular requisitos.",
|
||||
"inverse": "Inverso:",
|
||||
"editButton": "Editar",
|
||||
"deleteButton": "Excluir"
|
||||
},
|
||||
"createRelTypeModal": {
|
||||
"title": "Criar Tipo de Relacionamento",
|
||||
"typeName": "Nome do Tipo",
|
||||
"typeNamePlaceholder": "ex.: Depende De",
|
||||
"inverseName": "Nome Inverso",
|
||||
"inverseNamePlaceholder": "ex.: É Dependência De",
|
||||
"inverseNameHint": "Opcional. O nome mostrado ao visualizar do requisito de destino.",
|
||||
"description": "Descrição",
|
||||
"createButton": "Criar",
|
||||
"errorCreating": "Falha ao criar tipo de relacionamento"
|
||||
},
|
||||
"editRelTypeModal": {
|
||||
"title": "Editar Tipo de Relacionamento",
|
||||
"saveButton": "Salvar Alterações",
|
||||
"errorUpdating": "Falha ao atualizar tipo de relacionamento"
|
||||
},
|
||||
"deleteRelTypeModal": {
|
||||
"title": "Excluir Tipo de Relacionamento",
|
||||
"confirmMessage": "Tem certeza de que deseja excluir o tipo de relacionamento",
|
||||
"warningMessage": "⚠️ Isso também excluirá todos os links de requisitos usando este tipo.",
|
||||
"deleteButton": "Excluir",
|
||||
"errorDeleting": "Falha ao excluir tipo de relacionamento"
|
||||
}
|
||||
}
|
||||
49
frontend/src/i18n/locales/pt/common.json
Normal file
49
frontend/src/i18n/locales/pt/common.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"save": "Salvar",
|
||||
"saveChanges": "Salvar Alterações",
|
||||
"saving": "Salvando...",
|
||||
"cancel": "Cancelar",
|
||||
"delete": "Excluir",
|
||||
"deleting": "Excluindo...",
|
||||
"edit": "Editar",
|
||||
"close": "Fechar",
|
||||
"loading": "Carregando...",
|
||||
"retry": "Tentar Novamente",
|
||||
"search": "Buscar",
|
||||
"clear": "Limpar",
|
||||
"filter": "Filtrar",
|
||||
"create": "Criar",
|
||||
"creating": "Criando...",
|
||||
"add": "Adicionar",
|
||||
"remove": "Remover",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"none": "Nenhum",
|
||||
"unknown": "Desconhecido",
|
||||
"noResults": "Nenhum resultado encontrado",
|
||||
"required": "Obrigatório",
|
||||
"optional": "Opcional",
|
||||
"version": "Versão",
|
||||
"priority": "Prioridade",
|
||||
"status": "Status",
|
||||
"date": "Data",
|
||||
"name": "Nome",
|
||||
"description": "Descrição",
|
||||
"actions": "Ações",
|
||||
"details": "Detalhes",
|
||||
"user": "Usuário",
|
||||
"role": "Função",
|
||||
"by": "por",
|
||||
"on": "em",
|
||||
"more": "mais",
|
||||
"empty": "Vazio",
|
||||
"old": "Antigo",
|
||||
"new": "Novo",
|
||||
"total": "Total",
|
||||
"all": "Todos",
|
||||
"you": "Você",
|
||||
"projects": "Projetos",
|
||||
"project": "Projeto",
|
||||
"selectLanguage": "Selecionar idioma",
|
||||
"logout": "Sair"
|
||||
}
|
||||
67
frontend/src/i18n/locales/pt/dashboard.json
Normal file
67
frontend/src/i18n/locales/pt/dashboard.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"sidebar": {
|
||||
"title": "Digital Twin",
|
||||
"subtitle": "Ferramenta de Requisitos",
|
||||
"createRequirement": "Criar Requisito",
|
||||
"navigation": "Navegação",
|
||||
"searchRequirements": "Buscar Requisitos",
|
||||
"myRequirements": "Meus Requisitos",
|
||||
"generateReport": "Gerar Relatório",
|
||||
"projectSummary": "Resumo do Projeto",
|
||||
"total": "Total",
|
||||
"validated": "Validados"
|
||||
},
|
||||
"header": {
|
||||
"projects": "Projetos",
|
||||
"admin": "Admin"
|
||||
},
|
||||
"projectDropdown": {
|
||||
"loading": "Carregando...",
|
||||
"noProjectSelected": "Nenhum projeto selecionado",
|
||||
"noProjectsAvailable": "Nenhum projeto disponível",
|
||||
"createNewProject": "+ Criar Novo Projeto"
|
||||
},
|
||||
"noProjectWarning": {
|
||||
"title": "Nenhum Projeto Selecionado",
|
||||
"messagePart1": "Por favor, selecione um projeto no menu acima ou",
|
||||
"createProject": "crie um novo projeto",
|
||||
"messagePart2": "para começar."
|
||||
},
|
||||
"quickFilters": {
|
||||
"title": "Filtros Rápidos de Busca",
|
||||
"subtitle": "Clique em uma categoria para filtrar requisitos",
|
||||
"noGroupsFound": "Nenhum grupo encontrado",
|
||||
"total": "total"
|
||||
},
|
||||
"needsAttention": {
|
||||
"title": "Precisa de Atenção",
|
||||
"subtitle": "Requisitos com validação negada ou parcial",
|
||||
"viewAll": "Ver Todos",
|
||||
"moreRequirements": "mais requisitos precisam de atenção",
|
||||
"by": "por"
|
||||
},
|
||||
"needsRevalidation": {
|
||||
"title": "Precisa de Revalidação",
|
||||
"subtitle": "Requisitos atualizados desde a última validação",
|
||||
"viewAll": "Ver Todos",
|
||||
"moreRequirements": "mais requisitos precisam de revalidação",
|
||||
"versionBehind": "versão atrás",
|
||||
"versionsBehind": "versões atrás",
|
||||
"lastValidatedBy": "Última validação por",
|
||||
"by": "por"
|
||||
},
|
||||
"allClear": {
|
||||
"title": "Tudo Certo!",
|
||||
"message": "Nenhum requisito precisa de atenção. Todas as validações estão aprovadas ou pendentes de revisão."
|
||||
},
|
||||
"createProject": {
|
||||
"title": "Criar Novo Projeto",
|
||||
"projectName": "Nome do Projeto",
|
||||
"projectNamePlaceholder": "Digite o nome do projeto",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "Digite a descrição do projeto (opcional)",
|
||||
"createButton": "Criar Projeto",
|
||||
"creating": "Criando...",
|
||||
"errorCreating": "Falha ao criar projeto. Por favor, tente novamente."
|
||||
}
|
||||
}
|
||||
11
frontend/src/i18n/locales/pt/errors.json
Normal file
11
frontend/src/i18n/locales/pt/errors.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"generic": "Ocorreu um erro. Por favor, tente novamente.",
|
||||
"loadFailed": "Falha ao carregar dados. Por favor, tente novamente.",
|
||||
"saveFailed": "Falha ao salvar. Por favor, tente novamente.",
|
||||
"deleteFailed": "Falha ao excluir. Por favor, tente novamente.",
|
||||
"createFailed": "Falha ao criar. Por favor, tente novamente.",
|
||||
"unauthorized": "Você não está autorizado a realizar esta ação.",
|
||||
"notFound": "O recurso solicitado não foi encontrado.",
|
||||
"networkError": "Erro de rede. Por favor, verifique sua conexão.",
|
||||
"sessionExpired": "Sua sessão expirou. Por favor, faça login novamente."
|
||||
}
|
||||
5
frontend/src/i18n/locales/pt/home.json
Normal file
5
frontend/src/i18n/locales/pt/home.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"title": "Tabela Periódica de Requisitos",
|
||||
"subtitle": "Gerencie e acompanhe os requisitos do seu projeto.",
|
||||
"goToDashboard": "Ir para o Painel"
|
||||
}
|
||||
7
frontend/src/i18n/locales/pt/navbar.json
Normal file
7
frontend/src/i18n/locales/pt/navbar.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"brand": "Tabela Periódica de Requisitos",
|
||||
"dashboard": "Painel",
|
||||
"hello": "Olá",
|
||||
"logout": "Sair",
|
||||
"login": "Entrar"
|
||||
}
|
||||
155
frontend/src/i18n/locales/pt/requirementDetail.json
Normal file
155
frontend/src/i18n/locales/pt/requirementDetail.json
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"pageTitle": "Ferramenta de Requisitos Digital Twin",
|
||||
"breadcrumb": {
|
||||
"search": "Buscar",
|
||||
"details": "Detalhes"
|
||||
},
|
||||
"loadingRequirement": "Carregando requisito...",
|
||||
"requirementNotFound": "Requisito não encontrado",
|
||||
"noRequirementId": "Nenhum ID de requisito fornecido",
|
||||
"backToRequirements": "Voltar aos Requisitos",
|
||||
"errorLoading": "Falha ao carregar requisito. Por favor, tente novamente.",
|
||||
"draft": {
|
||||
"badge": "Rascunho - Não Finalizado",
|
||||
"title": "Requisito em Rascunho",
|
||||
"message": "Este requisito ainda está em status de rascunho e não foi finalizado. Pode estar sujeito a alterações."
|
||||
},
|
||||
"tabs": {
|
||||
"description": "Descrição",
|
||||
"relationships": "Relacionamentos",
|
||||
"acceptanceCriteria": "Critérios de Aceitação",
|
||||
"sharedComments": "Comentários Compartilhados",
|
||||
"validate": "Validar",
|
||||
"history": "Histórico"
|
||||
},
|
||||
"description": {
|
||||
"title": "Descrição",
|
||||
"version": "Versão:",
|
||||
"status": "Status:",
|
||||
"validationStatus": "Status de Validação:",
|
||||
"author": "Autor:",
|
||||
"lastEditedBy": "Última Edição Por:",
|
||||
"created": "Criado:",
|
||||
"lastUpdated": "Última Atualização:",
|
||||
"noDescription": "Nenhuma descrição fornecida.",
|
||||
"editButton": "Editar"
|
||||
},
|
||||
"relationships": {
|
||||
"title": "Relacionamentos",
|
||||
"addButton": "Adicionar Relacionamento",
|
||||
"noTypesWarning": "Nenhum tipo de relacionamento foi definido para este projeto. Contate um administrador para configurar os tipos de relacionamento.",
|
||||
"loadingRelationships": "Carregando relacionamentos...",
|
||||
"noRelationships": "Nenhum relacionamento definido ainda.",
|
||||
"tableHeaders": {
|
||||
"direction": "Direção",
|
||||
"type": "Tipo",
|
||||
"linkedRequirement": "Requisito Vinculado",
|
||||
"createdBy": "Criado Por",
|
||||
"date": "Data",
|
||||
"actions": "Ações"
|
||||
},
|
||||
"outgoing": "→ Saída",
|
||||
"incoming": "← Entrada"
|
||||
},
|
||||
"acceptanceCriteria": {
|
||||
"title": "Critérios de Aceitação",
|
||||
"noCriteria": "Nenhum critério de aceitação definido ainda.",
|
||||
"addButton": "Adicionar Critério"
|
||||
},
|
||||
"comments": {
|
||||
"title": "Comentários Compartilhados",
|
||||
"placeholder": "Adicionar um comentário...",
|
||||
"postButton": "Publicar Comentário",
|
||||
"posting": "Publicando...",
|
||||
"noComments": "Nenhum comentário ainda. Seja o primeiro a comentar!",
|
||||
"loadingComments": "Carregando comentários...",
|
||||
"reply": "Responder",
|
||||
"cancelReply": "Cancelar Resposta",
|
||||
"replyPlaceholder": "Escreva uma resposta...",
|
||||
"postReply": "Publicar Resposta",
|
||||
"errorPosting": "Falha ao publicar comentário. Por favor, tente novamente.",
|
||||
"errorPostingReply": "Falha ao publicar resposta. Por favor, tente novamente.",
|
||||
"roles": {
|
||||
"editor": "Editor",
|
||||
"auditor": "Auditor",
|
||||
"admin": "Admin do Projeto",
|
||||
"user": "Usuário"
|
||||
}
|
||||
},
|
||||
"validate": {
|
||||
"title": "Validar Requisito",
|
||||
"currentStatus": "Status Atual:",
|
||||
"requirementVersion": "Versão do Requisito:",
|
||||
"lastValidatedBy": "Última validação por",
|
||||
"staleWarning": "Este requisito foi modificado após a última validação (validado na versão {{validationVersion}}, versão atual {{currentVersion}}).",
|
||||
"submitTitle": "Enviar Validação",
|
||||
"statusLabel": "Status de Validação",
|
||||
"selectStatus": "Selecione um status...",
|
||||
"commentLabel": "Comentário",
|
||||
"commentPlaceholder": "Adicione um comentário explicando sua decisão (opcional, mas recomendado)",
|
||||
"submitButton": "Enviar Validação",
|
||||
"submitting": "Enviando...",
|
||||
"errorSubmitting": "Falha ao enviar validação. Por favor, tente novamente.",
|
||||
"historyTitle": "Histórico de Validação",
|
||||
"loadingHistory": "Carregando histórico...",
|
||||
"noHistory": "Nenhum histórico de validação ainda.",
|
||||
"tableHeaders": {
|
||||
"date": "Data",
|
||||
"status": "Status",
|
||||
"version": "Versão",
|
||||
"validator": "Validador",
|
||||
"comment": "Comentário"
|
||||
},
|
||||
"noComment": "Sem comentário"
|
||||
},
|
||||
"history": {
|
||||
"title": "Histórico de Versões",
|
||||
"originalAuthor": "Autor Original:",
|
||||
"loadingHistory": "Carregando histórico...",
|
||||
"noHistory": "Nenhum histórico ainda. O histórico é registrado quando o requisito é editado ou os relacionamentos mudam.",
|
||||
"requirementEdited": "Requisito editado",
|
||||
"linkCreated": "Link Criado",
|
||||
"linkRemoved": "Link Removido",
|
||||
"groupAdded": "Grupo Adicionado",
|
||||
"groupRemoved": "Grupo Removido",
|
||||
"noChangesDetected": "Nenhuma alteração visível detectada (pode ser uma alteração apenas de grupo).",
|
||||
"showLess": "Mostrar menos",
|
||||
"showFullDiff": "Mostrar diferença completa",
|
||||
"deletedRequirement": "Requisito Excluído",
|
||||
"unknownGroup": "Grupo Desconhecido"
|
||||
},
|
||||
"addRelationshipModal": {
|
||||
"title": "Adicionar Relacionamento",
|
||||
"relationshipType": "Tipo de Relacionamento",
|
||||
"selectType": "Selecione um tipo de relacionamento...",
|
||||
"targetRequirement": "Requisito de Destino",
|
||||
"searchPlaceholder": "Buscar por código de tag ou nome...",
|
||||
"selected": "Selecionado:",
|
||||
"createButton": "Criar Relacionamento",
|
||||
"errorCreating": "Falha ao criar link. Por favor, tente novamente."
|
||||
},
|
||||
"editModal": {
|
||||
"title": "Editar Requisito",
|
||||
"loadingOptions": "Carregando opções...",
|
||||
"name": "Nome",
|
||||
"tag": "Tag",
|
||||
"selectTag": "Selecione uma tag...",
|
||||
"priority": "Prioridade",
|
||||
"noPriority": "Sem prioridade",
|
||||
"status": "Status",
|
||||
"draftNote": "Requisitos em rascunho não estão finalizados e são marcados com um indicador visual.",
|
||||
"description": "Descrição",
|
||||
"groups": "Grupos",
|
||||
"noGroupsAvailable": "Nenhum grupo disponível",
|
||||
"errorSaving": "Falha ao salvar alterações. Por favor, tente novamente.",
|
||||
"nameTagRequired": "Nome e Tag são obrigatórios"
|
||||
},
|
||||
"deleteModal": {
|
||||
"deleteComment": "Excluir Comentário",
|
||||
"deleteReply": "Excluir Resposta",
|
||||
"deleteRelationship": "Excluir Relacionamento",
|
||||
"confirmDeleteComment": "Tem certeza de que deseja excluir este comentário? Isso também ocultará todas as respostas.",
|
||||
"confirmDeleteReply": "Tem certeza de que deseja excluir esta resposta?",
|
||||
"confirmDeleteRelationship": "Tem certeza de que deseja excluir este relacionamento? Esta ação não pode ser desfeita."
|
||||
}
|
||||
}
|
||||
87
frontend/src/i18n/locales/pt/requirements.json
Normal file
87
frontend/src/i18n/locales/pt/requirements.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"header": {
|
||||
"title": "Ferramenta de Requisitos Digital Twin"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"projects": "Projetos",
|
||||
"searchRequirements": "Buscar Requisitos"
|
||||
},
|
||||
"noProjectSelected": {
|
||||
"title": "Nenhum Projeto Selecionado",
|
||||
"message": "Por favor, selecione um projeto no painel para visualizar os requisitos.",
|
||||
"goToDashboard": "Ir para o Painel"
|
||||
},
|
||||
"loadingRequirements": "Carregando requisitos...",
|
||||
"newRequirement": "Novo Requisito",
|
||||
"deleted": "Excluídos",
|
||||
"searchPlaceholder": "Buscar por código de tag ou título do requisito",
|
||||
"noRequirementsFound": "Nenhum requisito encontrado com os critérios selecionados.",
|
||||
"filters": {
|
||||
"filterGroup": "Filtrar Grupo",
|
||||
"filterValidationStatus": "Filtrar Status de Validação",
|
||||
"showingNeedsRevalidation": "Mostrando: Precisa de Revalidação",
|
||||
"showingNeedsAttention": "Mostrando: Precisa de Atenção",
|
||||
"needsRevalidation": "Precisa de Revalidação",
|
||||
"statuses": {
|
||||
"approved": "Aprovado",
|
||||
"denied": "Negado",
|
||||
"partiallyApproved": "Parcialmente Aprovado",
|
||||
"notValidated": "Não Validado"
|
||||
}
|
||||
},
|
||||
"orderBy": {
|
||||
"label": "Ordenar por",
|
||||
"date": "Data",
|
||||
"priority": "Prioridade",
|
||||
"name": "Nome"
|
||||
},
|
||||
"caption": {
|
||||
"title": "Legenda das Tags",
|
||||
"viewCaptions": "Ver legendas das tags"
|
||||
},
|
||||
"requirement": {
|
||||
"draft": "Rascunho",
|
||||
"draftTooltip": "Este requisito ainda está em rascunho e não foi finalizado",
|
||||
"noGroups": "Sem grupos",
|
||||
"more": "mais",
|
||||
"stale": "Desatualizado",
|
||||
"staleTooltip": "O requisito foi modificado após a validação",
|
||||
"by": "por",
|
||||
"priority": "Prioridade",
|
||||
"version": "Versão"
|
||||
},
|
||||
"deletedPanel": {
|
||||
"title": "Requisitos Excluídos",
|
||||
"noDeleted": "Nenhum requisito excluído encontrado.",
|
||||
"deletedWillAppear": "Requisitos excluídos aparecerão aqui.",
|
||||
"unnamed": "Requisito sem nome",
|
||||
"originalId": "ID Original",
|
||||
"deletedAt": "Excluído",
|
||||
"deletedBy": "Excluído por",
|
||||
"footerNote": "Requisitos excluídos são preservados no histórico para fins de auditoria."
|
||||
},
|
||||
"deleteModal": {
|
||||
"title": "Excluir Requisito",
|
||||
"confirmMessage": "Tem certeza de que deseja excluir o requisito",
|
||||
"explanation": "Esta ação moverá o requisito para os itens excluídos. Você pode visualizar os requisitos excluídos no painel \"Excluídos\".",
|
||||
"deleting": "Excluindo..."
|
||||
},
|
||||
"createModal": {
|
||||
"title": "Novo Requisito",
|
||||
"tag": "Tag",
|
||||
"selectTag": "Selecione uma tag...",
|
||||
"name": "Nome",
|
||||
"namePlaceholder": "Digite o nome do requisito",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "Digite a descrição do requisito (opcional)",
|
||||
"priority": "Prioridade",
|
||||
"selectPriority": "Selecione uma prioridade (opcional)...",
|
||||
"groups": "Grupos",
|
||||
"createButton": "Criar Requisito",
|
||||
"creating": "Criando...",
|
||||
"errorCreating": "Falha ao criar requisito. Por favor, tente novamente.",
|
||||
"noProjectSelected": "Nenhum projeto selecionado",
|
||||
"nameRequired": "O nome do requisito é obrigatório",
|
||||
"tagRequired": "Por favor, selecione uma tag"
|
||||
}
|
||||
}
|
||||
7
frontend/src/i18n/locales/pt/validation.json
Normal file
7
frontend/src/i18n/locales/pt/validation.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"approved": "Aprovado",
|
||||
"denied": "Negado",
|
||||
"partial": "Parcial",
|
||||
"partiallyApproved": "Parcialmente Aprovado",
|
||||
"notValidated": "Não Validado"
|
||||
}
|
||||
Reference in New Issue
Block a user