Livrare Lot 3 (Frontend): aplicație web, aplicație mobilă Android, extensie browser

- Surse complete web (React/Vite) + mobil (React Native/Expo) + extensie (MV3)
- Documentație de livrare: ghid utilizare, matrice trasabilitate cerințe, raport testare furnizor
- Artefacte binare: imagine Docker didi-frontend:lot3-1.0, APK, extensie v3.2.6 + SHA256SUMS
- Configurare adresă platformă externalizată (build args / .env / config.js)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Top Clossers 2026-07-17 12:33:59 +03:00
commit cec967f953
321 changed files with 80506 additions and 0 deletions

View file

@ -0,0 +1,343 @@
const en = {
// Common
back: 'Back',
cancel: 'Cancel',
delete: 'Delete',
error: 'Error',
loading: 'Loading...',
goBack: 'Go Back',
settings: 'Settings',
signOut: 'Sign Out',
signIn: 'Sign In',
createAccount: 'Create Account',
analyze: 'Analyze',
confirm: 'Confirm',
// Main / Auth
appName: 'didi',
appSubtitle: 'Content Analysis Tool',
authenticating: 'Authenticating...',
redirectingToLogin: 'Redirecting to login...',
authError: 'Authentication Error',
authDenied: 'Authorization was denied. Please try again.',
securityError: 'Security Error',
invalidAuthResponse: 'Invalid authentication response. Please try again.',
noAuthCode: 'No authorization code received',
authFailed: 'Authentication Failed',
authFailedMessage: 'Could not complete login. Please try again.',
changePassword: 'Change Password',
redirecting: 'Redirecting...',
// Dashboard
analysis: 'Analysis',
fullPipelineAnalysis: 'Full pipeline analysis',
skills: 'Skills',
individualComponents: 'Individual analysis components',
history: 'History',
pastAnalyses: 'Past analyses',
accountPreferences: 'Account & preferences',
signOutConfirm: 'Are you sure you want to sign out?',
signOutSubtitle: 'Sign out of your account on this device',
// Pipeline
fullAnalysis: 'Full Analysis',
runAllComponents: 'Run all components at once',
textToAnalyze: 'Text to Analyze',
enterTextHint: 'Enter text, article, or paste content',
pasteTextPlaceholder: 'Paste text content here...',
characters: 'characters',
urlToAnalyze: 'URL to Analyze',
enterUrlHint: 'Enter a webpage URL',
urlPlaceholder: 'https://example.com/article',
imageToAnalyze: 'Image to Analyze',
takePhotoOrSelect: 'Take a photo or select from gallery',
gallery: 'Gallery',
camera: 'Camera',
audioToAnalyze: 'Audio to Analyze',
selectAudioHint: 'Select an audio file for analysis',
selectAudio: 'Select Audio',
videoToAnalyze: 'Video to Analyze',
selectVideoHint: 'Select a video file for analysis',
selectVideo: 'Select Video',
runFullAnalysis: 'Run Full Analysis',
submitting: 'Submitting...',
uploadingMedia: 'Uploading media...',
startingAnalysis: 'Starting analysis...',
invalidFile: 'Invalid File',
permissionRequired: 'Permission required',
cameraPermission: 'Camera access is needed to take photos.',
analysisError: 'Analysis Error',
failedToStartAnalysis: 'Failed to start analysis.',
contentUnavailable: 'Content Unavailable',
contentNotExtracted: 'Content could not be extracted from this URL.',
uploadManually: 'Upload Manually',
// Tabs
tabText: 'Text',
tabImage: 'Image',
tabAudio: 'Audio',
tabVideo: 'Video',
tabUrl: 'URL',
// Pipeline Results
analysisResults: 'Analysis Results',
processingMedia: 'Processing media...',
generatingVerdict: 'Generating verdict...',
processingProgress: 'Processing ({done}/{total})...',
percentComplete: '{percent}% complete',
analyzing: 'Analyzing...',
noResults: 'No results available',
analysisTimedOut: 'Analysis timed out. Please try again.',
connectionLost: 'Connection lost. Please check your network and try again.',
serverError: 'Analysis server error. Please try again later.',
sessionNotFound: 'Analysis session not found.',
// Component Labels
manipulationTechniques: 'Manipulation Techniques',
claimsVerification: 'Claims Verification',
aiDetection: 'AI Detection',
sourceAssessment: 'Source Assessment',
contextAnalysis: 'Context Analysis',
// Skills Screen
analyzeIndividualAspects: 'Analyze individual aspects',
detectManipulation: 'Detect persuasion and manipulation tactics',
evaluateSource: 'Evaluate source credibility and trustworthiness',
aiTamperDetection: 'AI Tamper Detection',
detectAiContent: 'Detect AI-generated or manipulated content',
claimsAnalysis: 'Claims Analysis',
verifyClaims: 'Verify claims and check credibility',
enterTextToAnalyze: 'Enter text content to analyze',
// History
noAnalysesYet: 'No analyses yet',
runFirstAnalysis: 'Run your first analysis to see it here',
justNow: 'Just now',
minutesAgo: '{min}m ago',
hoursAgo: '{hr}h ago',
daysAgo: '{day}d ago',
mediaAnalysis: '(media analysis)',
deleteAnalysis: 'Delete Analysis',
deleteConfirm: 'Are you sure you want to delete this analysis?',
failedToLoadHistory: 'Failed to load history',
failedToLoadDetails: 'Failed to load details',
failedToDelete: 'Failed to delete',
// Verdict Card
verdict: 'Verdict',
riskScore: 'Risk Score',
confidence: 'Confidence',
recommendedAction: 'Recommended Action',
// Component Scores
componentScores: 'Component Scores',
scoreManipulation: 'Manipulation',
scoreClaims: 'Claims',
scoreAiGenerated: 'AI Generated',
scoreSource: 'Source',
scoreContext: 'Context',
// Claims Card
credibilityScore: 'Credibility Score',
total: 'Total',
trueLabel: 'True',
falseLabel: 'False',
unverified: 'Unverified',
sources: 'Sources',
stance: 'Stance',
// Claim Status Labels
claimVerifiedTrue: 'Verified True',
claimVerifiedFalse: 'Verified False',
claimLikelyFalse: 'Likely False',
claimLikelyTrue: 'Likely True',
claimPartiallyVerified: 'Partially Verified',
claimUnverified: 'Unverified',
claimNotVerifiable: 'Not Verifiable',
claimOpinion: 'Opinion',
// Claim Type Labels
claimFactual: 'Factual',
claimCausal: 'Causal',
claimPredictive: 'Predictive',
claimQuote: 'Quote',
claimStatistical: 'Statistical',
claimOpinionType: 'Opinion',
claimOpinionAsFact: 'Opinion as Fact',
claimHistorical: 'Historical',
claimAttribution: 'Attribution',
claimRE: 'RE',
// AI Detection Card
aiProbability: 'AI Probability',
verdictLikelyAi: 'LIKELY AI',
verdictPossiblyAi: 'POSSIBLY AI',
verdictMixed: 'MIXED',
verdictLikelyHuman: 'LIKELY HUMAN',
verdictUnknown: 'UNKNOWN',
aiDisclosureFound: 'AI Disclosure Found',
indicators: 'Indicators',
// Domain Card
domainAnalysis: 'Domain Analysis',
trustScore: 'Trust Score',
domainAge: 'Domain Age',
days: 'days',
ssl: 'SSL',
sslValid: 'Valid',
sslInvalid: 'Invalid',
blacklisted: 'Blacklisted',
yes: 'Yes',
no: 'No',
registrar: 'Registrar',
organization: 'Organization',
country: 'Country',
redFlags: 'Red Flags',
warnings: 'Warnings',
// Source Assessment Card
risk: 'Risk',
publication: 'Publication',
author: 'Author',
platform: 'Platform',
domain: 'Domain',
confirmed: 'Confirmed',
unconfirmed: 'Unconfirmed',
scoreBreakdown: 'Score Breakdown',
// Techniques Card
manipulationScore: 'Manipulation Score',
techniquesDetected: '{count} techniques detected',
noTechniquesDetected: 'No manipulation techniques detected',
tapForDetails: 'Tap for details',
tapToCollapse: 'Tap to collapse',
severity: 'Severity',
description: 'Description',
// Virality Card
viralityPotential: 'Virality Potential',
showFactors: 'Show {count} factors',
hideFactors: 'Hide factors',
// Did You Know Card
didYouKnow: 'Did you know?',
// Settings
profile: 'Profile',
username: 'Username',
firstName: 'First Name',
lastName: 'Last Name',
email: 'Email',
updatePassword: 'Update your account password',
subscriptionCredits: 'Subscription & Credits',
active: 'Active',
inactive: 'Inactive',
credits: 'Credits',
remaining: 'Remaining',
spent: 'Spent',
planLimits: 'Plan Limits',
creditsCycle: 'Credits/cycle',
maxImages: 'Max images',
videoMinutes: 'Video minutes',
storage: 'Storage',
language: 'Language',
languageSubtitle: 'Choose your preferred language',
english: 'English',
romanian: 'Română',
// Social Share
socialShare: 'Social Share',
socialShareDesc: 'When enabled, URLs shared from these platforms will be automatically analyzed. When disabled, the URL will be pre-filled but you must tap Analyze manually.',
facebook: 'Facebook',
autoAnalyzeFacebook: 'Auto-analyze shared Facebook links',
xTwitter: 'X (Twitter)',
autoAnalyzeX: 'Auto-analyze shared X/Twitter links',
tiktok: 'TikTok',
autoAnalyzeTiktok: 'Auto-analyze shared TikTok links',
socialShareNote: 'Share a URL from any social app and didi will appear in your device\'s share menu. Requires an EAS build — not available in Expo Go.',
// User Profile Widget
creditsLabel: '{count} credits',
perMonth: '/mo',
// Notifications
analysisComplete: 'Analysis Complete',
notifRiskScore: 'Risk: {score}/100 ({category})',
tapToViewResults: 'Tap to view results',
// Validation
valMinChars: 'Minimum 20 characters ({len}/20)',
valMaxChars: 'Maximum 50,000 characters exceeded',
valUrlTooLong: 'URL too long',
valUrlMustStart: 'URL must start with http://, https://, or www.',
valInvalidUrl: 'Invalid URL format',
valUrlHostname: 'URL must contain a hostname',
valUrlNotAllowed: 'URL not allowed',
valUrlValidDomain: 'URL must contain a valid domain',
valUrlTld: 'URL must have a valid top-level domain',
valUrlInvalidHost: 'URL contains an invalid hostname segment',
valInvalidDomain: 'Invalid domain format',
valFileEmpty: 'File is empty',
valFileTooLarge: 'File too large ({size}). Maximum: {maxSize}',
valFileTypeNotAllowed: 'File type .{ext} is not allowed',
valAcceptedFormats: 'Accepted {category} formats: {formats}',
valAudioTooLong: 'Audio too long ({duration}s). Maximum: {max}s',
valVideoTooLong: 'Video too long ({duration}s). Maximum: {max}s',
// Share Action
analyzeUrl: 'Analyze URL',
analyzeText: 'Analyze Text',
analyzeImage: 'Analyze Image',
chooseAnalysisType: 'Choose analysis type',
url: 'URL',
sharedTextLabel: 'Shared text',
sharedImageLabel: 'Shared image',
domainAnalysisSkill: 'Domain Analysis',
checkDomainReputation: 'Check website trust and domain reputation',
// Upload consent
uploadConsentTitle: 'Consent to media upload',
uploadConsentBody: 'To analyze this file, it will be uploaded to the DiDi analysis servers. The file is used exclusively to run the requested analysis, is processed confidentially and is not shared with third parties. You can delete the analysis (and the associated content) at any time from History.',
uploadConsentCheckbox: 'I agree that my file will be uploaded and processed for analysis, as described in the privacy note above.',
uploadConsentAccept: 'I agree, continue',
uploadConsentReminder: 'By submitting, your file is uploaded for analysis according to your previously given consent.',
// Dimension Names
dimContentPackaging: 'Content & Packaging',
dimSourceAttribution: 'Source & Attribution',
dimMediaSynthetic: 'Media & Synthetic',
dimEmotionalPsych: 'Emotional & Psychological',
dimSocialNetwork: 'Social & Network',
dimPlatformTech: 'Platform & Technical',
dimTemporalContext: 'Temporal & Context',
dimTargetingVuln: 'Targeting & Vulnerability',
// Editorial layout
inputLabel: 'Content ({type})',
inputAnalyzed: 'Analyzed input',
riskAnalyzed: 'Risk analyzed',
topIssue: 'Top issue',
otherSignals: 'Other signals',
technicalDetails: 'Technical details',
doNotShare: 'Do not share',
readCritically: 'Read critically',
doNotShareHeadline: 'Do not share this article',
readCarefullyHeadline: 'Read carefully',
noteHeadline: 'Note',
showMore: 'Show more',
hide: 'Hide',
showOtherSignals: 'Show {count} more {plural}',
hideOtherSignals: 'Hide other signals',
cleanContent: 'Clean content',
noManipulationDetected: 'No manipulation techniques detected',
noClaimsToVerify: 'No verifiable claims found',
trustedSourceLabel: 'Trusted',
neutralSourceLabel: 'Neutral',
suspiciousSourceLabel: 'Suspicious',
untrustedSourceLabel: 'Untrusted',
withAiDisclosure: 'with AI disclosure',
withoutAiDisclosure: 'without AI disclosure',
};
export type TranslationKeys = keyof typeof en;
export default en;