chore: add i18n

This commit is contained in:
2026-09-16 22:41:59 +02:00
parent f68c4e50e8
commit 13b14abb12
39 changed files with 906 additions and 411 deletions
+366
View File
@@ -0,0 +1,366 @@
{
"common": {
"appName": "PolyLAN Submitter",
"back": "Back",
"apiDocs": "API docs",
"adminPanel": "Admin panel",
"admin": "Admin",
"staffBadge": "admin",
"notLoggedIn": "Not logged in",
"close": "Close",
"cancel": "Cancel",
"download": "Download",
"retry": "Retry",
"view": "View",
"player": "Player",
"rank": "Rank",
"you": "You",
"pts": "pts",
"points": "Points",
"pointsUnit": "points",
"cost": "Cost",
"cycles": "Cycles",
"area": "Area",
"puzzle": "Puzzle",
"files": "Files",
"date": "Date",
"notes": "Notes",
"actions": "Actions",
"noRankYet": "No rank yet",
"noResultsYet": "No results available yet.",
"noSubmissionsYet": "No submissions yet",
"yourRanking": "Your Ranking",
"currentRank": "Current Rank",
"clearCache": "Clear Cache",
"cacheClearedSuccess": "Cache cleared successfully!",
"cacheClearError": "Error clearing cache. Please try again.",
"pleaseTryAgain": "Please try again.",
"submitSolution": "Submit Solution",
"selectedFiles": "Selected Files:",
"chooseFiles": "Choose Files",
"submitting": "Submitting...",
"submit": "Submit",
"maxFileSize": "Maximum file size: 256 MB per file",
"notesOptional": "Notes (Optional)",
"selectPuzzlePlaceholder": "Select puzzle...",
"pointsCoefficients": "Points Coefficients",
"idLabel": "ID: {id}",
"copy": "Copy",
"copied": "Copied!",
"processing": "Processing...",
"pending": "Pending",
"unknownError": "Unknown error",
"fetchResultsError": "Failed to fetch results",
"fileWord": "file | files",
"fileCount": "{n} file | {n} files",
"marketStatus": {
"draft": "draft",
"open": "open",
"closed": "closed",
"resolved": "resolved"
}
},
"home": {
"title": "PolyLAN Submitter",
"subtitle": "Choose a game and submit your best solutions",
"marketCard": {
"title": "Market",
"description": "Place your bets and compete",
"cta": "Place bets"
},
"submitResults": "Submit results",
"footer": "Select a game above to begin submitting"
},
"market": {
"pageTitle": "Market",
"header": "Market",
"subtitle": "Place your bets on upcoming events",
"myBets": "My Bets",
"allMarkets": "All Markets",
"createMarket": "Create Market",
"noMarkets": "No markets available"
},
"noita": {
"pageTitle": "Noita Submitter",
"header": "Noita Submitter",
"totalScore": "Total Score",
"objectivesCompleted": "Objectives Completed",
"deaths": "Deaths",
"globalLeaderboard": "Global Leaderboard",
"score": "Score",
"objectivesColumn": "Objectives",
"objectives": "Objectives",
"submitYourRun": "Submit Your Run",
"uploadPrompt": "Click to upload or drag and drop",
"logFileLabel": "The log file",
"submitRun": "Submit Run",
"noObjectivesYet": "No objectives completed yet",
"noObjectivesHint": "Submit your runs to unlock objectives!",
"searchPlaceholder": "Search objectives...",
"showingResults": "Showing {shown} of {total} objectives",
"noObjectivesMatch": "No objectives match your search",
"runSubmittedSuccess": "Run submitted successfully!",
"runSubmitError": "Error submitting run. Please try again.",
"columns": {
"objectiveId": "Objective ID",
"yourPoints": "Your points",
"firstSeen": "First seen",
"seed": "Seed"
}
},
"opusMagnum": {
"pageTitle": "Opus Magnum Puzzle Submitter",
"header": "Opus Magnum Puzzle Submitter",
"autoReload": "Auto reload page in {seconds} seconds ...",
"loadingPuzzles": "Loading puzzles...",
"errorLoadingData": "Error Loading Data",
"tournamentClosed": "Tournament Closed",
"tournamentClosedMessage": "This tournament is no longer accepting new submissions.",
"noPuzzlesTitle": "No Puzzles Available",
"noPuzzlesMessage": "Check back later for new puzzle collections!"
},
"submissions": {
"pageTitle": "{game} Submissions — {scope}",
"live": "Live",
"offline": "Offline",
"submittingForMatch": "Submitting for match:",
"submitResultsTitle": "Submit Results",
"uploadPrompt": "Click to upload, drag and drop, or paste",
"uploadHint": "Any file type supported • Images from clipboard welcome",
"uploadLimitExceeded": "Maximum {max} files allowed. You can add {count} more {unit}.",
"filesSelectedSuffix": "files selected",
"notesPlaceholder": "Add any notes special for this upload",
"thisFileType": "this file type",
"copyFailed": "Failed to copy",
"guidelines": {
"title": "Submission Guidelines",
"fileUpload": {
"title": "File Upload",
"body": "Upload your results as screenshots, logs, or any other file format. You can upload multiple files at once."
},
"notes": {
"title": "Add Notes",
"body": "Include any additional context about your submission. This helps reviewers understand your results."
},
"verification": {
"title": "Verification",
"body": "Your submission will be reviewed and verified. You'll receive confirmation once it's been processed."
}
},
"yourSubmissions": "Your Submissions",
"noSubmissionsHint": "Upload your first submission above to get started",
"fileStatus": "File Status",
"ocrStatus": "OCR Status",
"previewNotAvailableFor": "Preview not available for {type}",
"fileSizeLabel": "File size: {size}",
"processOcr": "Process OCR",
"filePreview": "File Preview",
"textPreviewUnavailable": "Text content preview not available. Download file to view.",
"previewNotAvailable": "Preview not available",
"ocrData": "OCR Data",
"extractedText": "File - Extracted Text:",
"ocrProcessing": "OCR is being processed...",
"ocrFailed": "OCR processing failed",
"ocrWaiting": "Waiting for OCR processing...",
"cropOcrResults": "Crop OCR Results ({count}):",
"cropLabelFallback": "Crop ({x}, {y})",
"cropProcessingFailed": "Processing failed",
"cropsData": "Crops Data",
"cropDrawHint": "Drag on image to create crop (blue) or existing crops (green)",
"cropLabelOptional": "Crop Label (optional)",
"cropLabelPlaceholder": "e.g., Top-left corner",
"saveCrop": "Save Crop",
"creatingCrop": "Creating...",
"cropsCount": "Crops ({count}):",
"deleteCropTooltip": "Delete crop",
"noCropsYet": "No crops yet",
"deleteCropConfirm": "Delete this crop?",
"submitSuccess": "Submission successful!",
"submitError": "Error submitting: {message}",
"createCropError": "Error creating crop: {message}",
"deleteCropError": "Error deleting crop: {message}",
"processOcrError": "Error processing OCR: {message}"
},
"submissionsSelect": {
"title": "Select your match",
"description": "You're assigned to multiple matches for {game}. Pick which one you want to submit for."
},
"errorPage": {
"notFound": {
"title": "Page not found",
"message": "The page you're looking for doesn't exist or has been moved."
},
"serverError": {
"title": "Server error",
"message": "Something went wrong on our end. Please try again later."
},
"generic": {
"title": "Something went wrong",
"message": "An unexpected error occurred."
},
"goHome": "Go home",
"goBack": "Go back"
},
"components": {
"adminPanel": {
"title": "Admin Panel",
"totalSubmissions": "Total Submissions",
"totalResponses": "Total Responses",
"needValidation": "Need Validation",
"validationRate": "Validation Rate",
"autoValidateAll": "Auto validation for all responses",
"responsesNeedingValidation": "Responses Needing Validation",
"confidence": "Confidence",
"costLabel": "Cost: {value}",
"cyclesLabel": "Cycles: {value}",
"areaLabel": "Area: {value}",
"validate": "Validate",
"autoValidation": "Auto Validation",
"allValidated": "All responses validated!",
"noValidationNeeded": "No responses currently need manual validation.",
"validateResponseTitle": "Validate Response",
"reviewHint": "Review and correct the OCR data below",
"enterCost": "Enter cost",
"enterCycles": "Enter cycles",
"enterArea": "Enter area",
"validating": "Validating...",
"validationFailed": "Validation failed: {error}",
"validationFailedGeneric": "Validation failed"
},
"fileUpload": {
"title": "Upload Solution Files",
"hint": "Images or GIFs only",
"dropHint": "Drop your files here or",
"supportedFormats": "Supported formats: JPG, PNG, GIF (max 256MB each)",
"extracting": "Extracting puzzle data...",
"ocrComplete": "✓ OCR Complete",
"overallConfidence": "Overall confidence: {pct}%",
"retryOcr": "Retry OCR",
"puzzleLabel": "Puzzle:",
"puzzleConfidence": "Puzzle confidence: {pct}%",
"costLabel": "Cost:",
"costConfidence": "Cost confidence: {pct}%",
"cyclesLabel": "Cycles:",
"cyclesConfidence": "Cycles confidence: {pct}%",
"areaLabel": "Area:",
"areaConfidence": "Area confidence: {pct}%",
"lowConfidence": "Low OCR Confidence",
"selectManually": "Please select the correct puzzle manually",
"extractPuzzleData": "Extract Puzzle Data",
"addMoreFiles": "Add More Files",
"invalidFileType": "{name} is not a valid image file",
"fileTooLarge": "{name} is too large (max 256MB)",
"processFailed": "Failed to process {name}"
},
"marketCard": {
"untilClose": "until close",
"closeMarket": "Close Market",
"resolveMarketButton": "Resolve Market",
"resolveModalTitle": "Resolve Market - Select Winner",
"resolveAndDistribute": "Resolve & Distribute Points",
"pool": "Pool: {n} pts",
"multiplierLabel": "Multiplier: {x}x",
"yourBet": "Your bet: {n} pts",
"potential": "Potential: {n} pts",
"increaseBetLabel": "Increase bet (current: {n} pts)",
"pointsToBet": "Points to bet",
"increaseByPlaceholder": "Enter amount to increase by",
"enterPointsPlaceholder": "Enter points",
"increaseBet": "Increase Bet",
"placeBet": "Place Bet",
"yourBetTitle": "Your Bet",
"optionLabel": "Option: {text}",
"amountLabel": "Amount: {n} pts",
"won": "✓ You Won!",
"lost": "✗ You Lost",
"resolved": "Resolved",
"winnerLabel": "Winner: {text}",
"errorClosing": "Error closing market",
"selectWinnerRequired": "Please select a winning option",
"errorResolving": "Error resolving market",
"failedToPlaceBet": "Failed to place bet",
"errorPlacingBet": "Error placing bet",
"ended": "Ended"
},
"puzzleCard": {
"byAuthor": "by {author}",
"moreTags": "+{n} more",
"viewOnSteam": "View on Steam Workshop",
"solutionsCount": "Solutions ({n})",
"needsManualValidation": "Needs manual validation",
"noSolutionsYet": "No solutions yet",
"uploadHint": "Upload solutions using the submit button"
},
"puzzleResults": {
"title": "Results by Puzzle",
"winningSolutions": "🏆 Winning Solutions",
"columns": {
"pos": "Pos",
"user": "User",
"totalPts": "Total Pts",
"totalCoef": "Total Coef",
"gif": "GIF"
}
},
"results": {
"totalPoints": "Total Points",
"puzzlesSolved": "Puzzles Solved",
"generalResults": "General Results",
"clearCacheError": "Error clearing cache: {detail}",
"tabs": {
"overall": "Overall Ranking",
"byPuzzle": "By Puzzle"
},
"submissionsCount": "{n} submissions",
"podium": {
"first": "🏆 1st Place",
"second": "🥈 2nd Place",
"third": "🥉 3rd Place"
},
"totalWithCoef": "Total (with coef.)"
},
"topUsersLeaderboard": {
"title": "Top 10 Users"
},
"userBets": {
"empty": "You haven't placed any bets yet",
"totalBets": "Total Bets",
"active": "Active",
"waitingForResult": "Waiting for result",
"won": "Won",
"wonPointsLabel": "+{n} points",
"lost": "Lost",
"betterLuck": "Better luck next time",
"activeBets": "Active Bets ({n})",
"betOn": "Bet on: {option}",
"statusLabel": "Status:",
"wonBets": "Won Bets ({n})",
"correctBetOn": "Correct! You bet on: {option}",
"lostBets": "Lost Bets ({n})",
"youBetOn": "You bet on: {option}",
"winnerLabel": "Winner: {option}"
},
"winners": {
"title": "Top Submissions",
"fetchError": "Failed to fetch submissions",
"columns": {
"puzzle": "Puzzle",
"user": "User",
"totalPts": "Total Pts",
"totalCoef": "Total Coef",
"gif": "GIF"
}
},
"submissionForm": {
"detectedPuzzles": "Detected Puzzles ({n})",
"manualSelectionRequired": "Manual Puzzle Selection Required",
"manualSelectionBody": "{n} file(s) have low OCR confidence for puzzle names. Please select the correct puzzle for each file before submitting.",
"retryOcr": "Retry OCR on low confidence puzzle",
"notesPlaceholder": "Add any notes about your solution, approach, or interesting findings...",
"requestManualValidation": "Request manual validation",
"manualValidationHint": "Check this if you want an admin to manually review your submission, even if OCR confidence is high.",
"manualValidationNote": "Note: This will be automatically checked if any OCR confidence is below 80%.",
"selectPuzzlesRemaining": "Select Puzzles ({n} remaining)"
}
}
}