mirror of
https://github.com/nimbold/Firelink.git
synced 2026-07-26 12:08:27 +00:00
756 lines
35 KiB
TypeScript
756 lines
35 KiB
TypeScript
const common = {
|
|
navigation: {
|
|
library: 'Library',
|
|
filters: {
|
|
all: 'All',
|
|
active: 'Active',
|
|
completed: 'Completed',
|
|
unfinished: 'Unfinished',
|
|
},
|
|
categories: {
|
|
musics: 'Music',
|
|
movies: 'Movies',
|
|
compressed: 'Compressed',
|
|
documents: 'Documents',
|
|
pictures: 'Pictures',
|
|
applications: 'Applications',
|
|
other: 'Other',
|
|
},
|
|
folders: 'Folders',
|
|
queues: 'Queues',
|
|
tools: 'Tools',
|
|
scheduler: 'Scheduler',
|
|
speedLimiter: 'Speed Limiter',
|
|
logs: 'Logs',
|
|
settings: 'Settings',
|
|
},
|
|
actions: {
|
|
hideSidebar: 'Hide Sidebar',
|
|
showSidebar: 'Show Sidebar',
|
|
resizeSidebar: 'Resize Sidebar',
|
|
cancel: 'Cancel',
|
|
continue: 'Continue',
|
|
dismissNotification: 'Dismiss notification',
|
|
queueName: 'Queue name',
|
|
addNewQueue: 'Add new queue',
|
|
startQueue: 'Start Queue',
|
|
pauseQueue: 'Pause Queue',
|
|
renameQueue: 'Rename Queue',
|
|
deleteQueue: 'Delete Queue',
|
|
},
|
|
dialogs: {
|
|
errorBoundary: {
|
|
title: 'Something went wrong.',
|
|
description: 'A critical error occurred in the React component tree. The error details below can help identify the root cause.',
|
|
reload: 'Reload App',
|
|
},
|
|
duplicateDownloads: {
|
|
title: 'Duplicate Downloads Detected',
|
|
description: 'Some of the downloads you are adding already exist in the queue or on disk. Please choose how to resolve these conflicts.',
|
|
rename: 'Rename',
|
|
replace: 'Replace',
|
|
skip: 'Skip',
|
|
},
|
|
removeDownload: {
|
|
title: 'Remove Download',
|
|
confirmationSingle: 'Are you sure you want to remove this item from the list? You can also choose to delete the underlying file from your hard drive.',
|
|
confirmationMultiple: 'Are you sure you want to remove these {{count}} items from the list? You can also choose to delete the underlying files from your hard drive.',
|
|
errorSummary: '{{succeeded}} removed, {{failed}} failed: {{detail}}',
|
|
remove: 'Remove',
|
|
deleteFile: 'Delete file',
|
|
},
|
|
},
|
|
window: {
|
|
controls: 'Window controls',
|
|
close: 'Close',
|
|
minimize: 'Minimize',
|
|
maximize: 'Maximize',
|
|
},
|
|
downloads: {
|
|
actions: {
|
|
moveUp: 'Move Up',
|
|
moveDown: 'Move Down',
|
|
pause: 'Pause',
|
|
start: 'Start',
|
|
resume: 'Resume',
|
|
options: 'Options',
|
|
},
|
|
size: {
|
|
downloadedOf: '{{downloaded}} downloaded of {{total}} {{unit}}',
|
|
downloadedOfApproximate: '{{downloaded}} downloaded of approximately {{total}} {{unit}}',
|
|
},
|
|
status: {
|
|
ready: 'Ready',
|
|
staged: 'In queue',
|
|
queued: 'Queued',
|
|
downloading: 'Downloading',
|
|
processing: 'Processing',
|
|
paused: 'Paused',
|
|
completed: 'Completed',
|
|
failed: 'Failed',
|
|
retrying: 'Retrying',
|
|
},
|
|
values: {
|
|
processing: 'Processing...',
|
|
muxing: 'Muxing...',
|
|
},
|
|
},
|
|
speedLimiter: {
|
|
title: 'Speed Limiter',
|
|
unlimited: 'Unlimited',
|
|
saveLimit: 'Save Limit',
|
|
globalSpeedLimit: 'Global Speed Limit',
|
|
description: 'Applies to new and active aria2 transfers and new yt-dlp media downloads. Explicit per-download limits remain attached to those transfers.',
|
|
quickPresets: 'Quick Presets',
|
|
removePreset: 'Remove {{value}} {{unit}} preset',
|
|
customPresetIn: 'Custom preset in {{unit}}',
|
|
addQuickPreset: 'Add quick preset',
|
|
globalLimitSaved: 'Global limit saved at {{value}} {{unit}}',
|
|
globalLimitDisabled: 'Global speed limit disabled',
|
|
saveFailed: 'Could not save global speed limit: {{detail}}',
|
|
presetAlreadyExists: '{{value}} {{unit}} is already in quick presets',
|
|
presetAdded: 'Added {{value}} {{unit}} quick preset',
|
|
presetRemoved: 'Removed {{value}} {{unit}} quick preset',
|
|
},
|
|
logs: {
|
|
title: 'Logs',
|
|
entries: '({{count}} entries)',
|
|
collecting: 'Collecting',
|
|
off: 'Off',
|
|
allLevels: 'All Levels',
|
|
levels: {
|
|
error: 'Error',
|
|
warn: 'Warn',
|
|
info: 'Info',
|
|
debug: 'Debug',
|
|
trace: 'Trace',
|
|
},
|
|
pauseLogging: 'Pause diagnostic logging',
|
|
enableLogging: 'Enable diagnostic logging',
|
|
clearDisplayed: 'Clear displayed logs',
|
|
export: 'Export logs',
|
|
exportButton: 'Export Logs',
|
|
logFiles: 'Log Files',
|
|
localDiagnostics: 'Local diagnostics:',
|
|
diagnosticsDescription: 'Diagnostic collection is opt-in, bounded, and local. Common secrets, URL queries, and home-directory paths are redacted during display and export. Nothing is uploaded automatically.',
|
|
noEntries: 'No persisted log entries are available yet.',
|
|
disabledDescription: 'Diagnostic logging is off. Existing support logs will appear here when available.',
|
|
copy: 'Copy',
|
|
copied: 'Copied to clipboard',
|
|
copyFailed: 'Failed to copy to clipboard',
|
|
exported: 'Support logs exported',
|
|
exportFailed: 'Could not export logs: {{detail}}',
|
|
cleared: 'Logs cleared',
|
|
clearFailed: 'Could not clear logs: {{detail}}',
|
|
enabled: 'Diagnostic logging enabled',
|
|
disabled: 'Diagnostic logging disabled',
|
|
updateFailed: 'Could not update diagnostic logging: {{detail}}',
|
|
},
|
|
scheduler: {
|
|
title: 'Scheduler',
|
|
running: 'Running',
|
|
disabled: 'Scheduler is disabled',
|
|
noScheduledDay: 'No scheduled day selected',
|
|
unsavedChanges: 'Unsaved changes',
|
|
runNow: 'Run Now',
|
|
pause: 'Pause',
|
|
saveSettings: 'Save Settings',
|
|
timing: 'Timing',
|
|
startTime: 'Start Time',
|
|
stopTime: 'Stop Time',
|
|
timingDescription: 'If Firelink is asleep at the start time, it starts the selected queues when it returns later that day, unless the stop time has already passed.',
|
|
runEveryDay: 'Run Every Day',
|
|
queuesToSchedule: 'Queues to Schedule',
|
|
defaultQueue: 'Default queue',
|
|
afterCompletion: 'After Completion',
|
|
afterCompletionDescription: 'Choose what happens after downloads started by the scheduler finish.',
|
|
actionWarning: 'This action can interrupt other work on the computer. Firelink invokes it immediately after the scheduled queue finishes.',
|
|
systemPermissions: 'System Permissions',
|
|
macPermissionDescription: 'Sleep, restart, and shut down require macOS Automation permission for System Events.',
|
|
permissionGranted: 'Automation permission granted',
|
|
permissionChecking: 'Checking Automation permission...',
|
|
permissionMissing: 'Automation permission missing',
|
|
revokePermission: 'Revoke permission',
|
|
grantPermission: 'Grant permission',
|
|
permissionAvailable: 'Automation permission is available.',
|
|
permissionMissingDetails: 'Automation permission is missing. Enable Firelink under Automation for System Events in System Settings.',
|
|
revokePermissionDetails: 'macOS does not allow Firelink to revoke Automation permission directly. Revoke System Events access in System Settings, then return to Firelink.',
|
|
requestingPermission: 'Requesting Automation permission...',
|
|
enablePermissionDetails: 'Enable Firelink under Automation for System Events in System Settings, then return to Firelink.',
|
|
systemActions: 'System Actions',
|
|
windowsActionsDescription: 'Sleep, restart, and shut down use Windows system privileges. Firelink reports any rejected action when it runs; no permanent permission is claimed in advance.',
|
|
linuxActionsDescription: 'Sleep, restart, and shut down use your Linux desktop and system policy. Firelink reports any rejected action when it runs; no permanent permission is claimed in advance.',
|
|
validationDay: 'Select at least one day for the scheduler',
|
|
validationQueue: 'Select at least one queue for the scheduler',
|
|
validationStopTime: 'Stop time must be later than start time',
|
|
saved: 'Scheduler settings saved',
|
|
trackingOne: 'Tracking 1 scheduled download',
|
|
trackingMany: 'Tracking {{count}} scheduled downloads',
|
|
noStartableDownloads: 'No downloads in the selected queues can be started',
|
|
pausedOne: 'Paused 1 active download',
|
|
pausedMany: 'Paused {{count}} active downloads',
|
|
noActiveDownloads: 'No active downloads',
|
|
days: {
|
|
su: 'Su',
|
|
mo: 'Mo',
|
|
tu: 'Tu',
|
|
we: 'We',
|
|
th: 'Th',
|
|
fr: 'Fr',
|
|
sa: 'Sa',
|
|
},
|
|
postActions: {
|
|
none: 'Do nothing',
|
|
sleep: 'Sleep',
|
|
restart: 'Restart',
|
|
shutdown: 'Shut down',
|
|
},
|
|
},
|
|
properties: {
|
|
progress: 'Progress',
|
|
size: 'Size',
|
|
speed: 'Speed',
|
|
eta: 'ETA',
|
|
connections: 'Connections',
|
|
connectionCount: '{{active}}/{{total}}',
|
|
connectionCountUnknown: '—/{{total}}',
|
|
connectionsUnavailable: '—',
|
|
speedCap: 'Speed cap',
|
|
category: 'Category',
|
|
lastTry: 'Last try',
|
|
dateAdded: 'Date added',
|
|
destination: 'Destination',
|
|
lastError: 'Last error',
|
|
saved: ' (saved)',
|
|
defaultValue: ' (default)',
|
|
savedTooltip: 'Saved for this download; Settings changes apply to new downloads.',
|
|
defaultTooltip: 'Using the current default for new downloads.',
|
|
identityReadOnly: 'File identity is read-only. Transfer settings are saved for redownload.',
|
|
transferSettings: 'Transfer settings can be changed after stopping or pausing. Current transfers keep their existing backend options.',
|
|
download: 'Download',
|
|
url: 'URL',
|
|
fileName: 'File name',
|
|
saveLocation: 'Save location',
|
|
select: 'Select',
|
|
perFile: 'per file',
|
|
useCurrentDefault: 'Use current default ({{count}})',
|
|
savedPerDownload: 'Saved per download. The Settings default applies to new downloads.',
|
|
limit: 'Limit',
|
|
siteLogin: 'Site Login',
|
|
siteLoginRedownload: 'Site Login for Redownload',
|
|
matchingSiteLogin: 'Matching site login',
|
|
customCredentials: 'Custom credentials',
|
|
noLogin: 'No login',
|
|
useSavedLogin: 'Will use saved login if available.',
|
|
advancedTransfer: 'Advanced Transfer',
|
|
advancedTransferRedownload: 'Advanced Transfer for Redownload',
|
|
checksum: 'Checksum',
|
|
verify: 'Verify',
|
|
algorithm: 'Algorithm',
|
|
digest: 'Digest',
|
|
expectedDigest: 'Expected digest',
|
|
cookies: 'Cookies',
|
|
headers: 'Headers',
|
|
mirrors: 'Mirrors',
|
|
username: 'Username',
|
|
password: 'Password',
|
|
enterValidUrl: 'Enter a valid URL.',
|
|
fileNameEmpty: 'File name cannot be empty.',
|
|
cancel: 'Cancel',
|
|
save: 'Save',
|
|
},
|
|
keychain: {
|
|
title: 'Credential Storage Access Needed',
|
|
stores: {
|
|
portable: 'the portable Firelink data folder',
|
|
windows: 'Windows Credential Manager',
|
|
linux: 'your Linux credential store',
|
|
macos: 'macOS Keychain',
|
|
system: "this system's credential store",
|
|
siteCredentials: "the system's credential store",
|
|
},
|
|
grantLabelPortable: 'Continue',
|
|
grantLabelMacos: 'Grant Access',
|
|
grantLabelDefault: 'Enable Secure Storage',
|
|
description: 'Firelink uses the browser extension to capture downloads. To keep the extension paired after restarts, Firelink stores its pairing token in {{pairingStore}}. Optional site credentials are stored in {{siteCredentialStore}}.',
|
|
portableExplanation: 'The pairing token is portable with this folder. Site credentials remain in the system credential store; a system prompt may appear after you grant access.',
|
|
macosExplanation: 'macOS may show a Keychain prompt after you grant access.',
|
|
defaultExplanation: 'This usually completes silently. If the credential service is unavailable, Firelink will show the error here and the extension will stay paired for this session only.',
|
|
note: 'Note:',
|
|
portableNote: 'Portable mode stores only the pairing token in this folder. It does not copy site passwords or browser credentials.',
|
|
defaultNote: 'Firelink only writes its own dedicated credential entry. It cannot access other saved passwords or credential items on your system.',
|
|
hint: 'Hint:',
|
|
portableHint: 'The portable pairing token is already stored with this folder; you can enable it here or select Later.',
|
|
defaultHint: 'If you select Later, the extension will only work for this session.',
|
|
enableFromSettings: 'You can enable storage anytime from Settings > Integrations.',
|
|
later: 'Later',
|
|
enabling: 'Enabling...',
|
|
timeout: 'Credential storage request timed out. You can select Later and try again.',
|
|
unavailable: '{{store}} is unavailable.',
|
|
accessRequired: 'Grant credential-store access before regenerating the pairing token.',
|
|
storeUnavailable: 'Credential store access is unavailable.',
|
|
},
|
|
app: {
|
|
loading: 'Loading…',
|
|
settingsSaveFailed: 'Could not save settings. Check storage permissions and try again.',
|
|
systemActionCountdown: '{{action}} in 10 seconds.',
|
|
systemActionCancelled: 'System action cancelled because another download is active or queued.',
|
|
systemActionFailed: 'Scheduled system action failed: {{detail}}',
|
|
downloadCompleteTitle: 'Download Complete',
|
|
downloadCompleteBody: '{{fileName}} has finished downloading.',
|
|
unknownFile: 'A file',
|
|
downloadFailedTitle: 'Download Failed',
|
|
downloadFailedBody: '{{fileName}} failed to download.',
|
|
initializeDownloadsFailed: 'Could not initialize saved downloads: {{detail}}',
|
|
extensionDisconnected: 'Browser extension disconnected because its pairing token changed.',
|
|
copyToken: 'Copy token',
|
|
integrations: 'Integrations',
|
|
copyTokenFailed: 'Could not copy pairing token: {{detail}}',
|
|
credentialPersistenceFailed: 'Secure credential persistence is unavailable. Browser pairing works for this session only: {{detail}}',
|
|
resumeDownloadsFailed: 'Could not resume saved downloads: {{detail}}',
|
|
updateAvailable: 'Firelink {{version}} is available.',
|
|
viewRelease: 'View release',
|
|
sleepPreventionFailed: 'Could not update sleep prevention: {{detail}}',
|
|
schedulerNoQueues: 'Scheduler has no valid queues selected. Update Scheduler settings.',
|
|
schedulerPauseOneFailed: 'Scheduler could not pause 1 download.',
|
|
schedulerPauseManyFailed: 'Scheduler could not pause {{count}} downloads.',
|
|
scheduledIncomplete: 'Scheduled downloads did not all complete. The post-queue system action was skipped.',
|
|
scheduledActionSkippedActive: 'Scheduled system action skipped because another download is active or queued.',
|
|
notificationsDisabled: 'System notifications are disabled for Firelink.',
|
|
notificationsFailed: 'Could not configure notifications: {{detail}}',
|
|
},
|
|
sidebar: {
|
|
deleteQueueConfirm: 'Delete queue "{{name}}"? Its unfinished downloads will move to Main Queue.',
|
|
deleteQueueFailed: 'Could not delete queue: {{detail}}',
|
|
queueNameEmpty: 'Queue name cannot be empty',
|
|
queueNameExists: 'A queue with this name already exists',
|
|
startQueueFailed: 'Could not start queue: {{detail}}',
|
|
pauseQueueFailed: 'Could not pause queue: {{detail}}',
|
|
},
|
|
downloadTable: {
|
|
unknownQueue: 'Unknown Queue',
|
|
allDownloads: 'All Downloads',
|
|
active: 'Active',
|
|
completed: 'Completed',
|
|
unfinished: 'Unfinished',
|
|
headers: {
|
|
fileName: 'File Name',
|
|
size: 'Size',
|
|
status: 'Status',
|
|
speed: 'Speed',
|
|
eta: 'ETA',
|
|
dateAdded: 'Date Added',
|
|
},
|
|
columnOptions: {
|
|
open: 'Column options for {{column}}',
|
|
dragToReorder: 'Drag to reorder columns',
|
|
alignContent: 'Align content position',
|
|
left: 'Left',
|
|
center: 'Center',
|
|
right: 'Right',
|
|
resetLayout: 'Reset column layout',
|
|
},
|
|
addDownload: 'Add Download',
|
|
resumeAll: 'Resume All',
|
|
pauseAll: 'Pause All',
|
|
queueEmpty: 'Queue is empty',
|
|
noCompletedDownloads: 'No Completed Downloads',
|
|
noDownloads: 'No Downloads',
|
|
queueEmptyDescription: 'Add downloads to this queue from an item menu or the Add window.',
|
|
completedDescription: 'Completed downloads will appear here.',
|
|
clickToAdd: 'Click',
|
|
addButtonOr: 'button or',
|
|
toAddDownloads: 'to add downloads',
|
|
nonResumableOne: '1 download does not support resuming. If you pause it, you will have to start over again later. Are you sure you want to pause?',
|
|
nonResumableMany: '{{count}} downloads do not support resuming. If you pause them, you will have to start over again later. Are you sure you want to pause?',
|
|
interactionError: '{{message}}: {{detail}}',
|
|
openFileFailed: 'Could not open downloaded file',
|
|
revealFileFailed: 'Could not show download in Finder',
|
|
pauseFailed: 'Could not pause download',
|
|
resumeFailed: 'Could not resume {{fileName}}',
|
|
moveManyFailed: 'Could not move downloads to queue',
|
|
moveOneFailed: 'Could not move download to queue',
|
|
copyAddressesFailed: 'Could not copy addresses',
|
|
copyAddressFailed: 'Could not copy address',
|
|
copyPathFailed: 'Could not copy file path',
|
|
missingFileName: 'File name is missing',
|
|
redownloadFailed: 'Redownload failed',
|
|
startResume: 'Start/Resume',
|
|
addToQueue: 'Add to Queue',
|
|
copyAddress: 'Copy Address',
|
|
remove: 'Remove',
|
|
open: 'Open',
|
|
showInFolder: 'Show in Folder',
|
|
pause: 'Pause',
|
|
start: 'Start',
|
|
resume: 'Resume',
|
|
redownload: 'Redownload',
|
|
copyFilePath: 'Copy File Path',
|
|
properties: 'Properties',
|
|
backendRejectedStart: 'The backend rejected the start/resume request.',
|
|
transferActive: 'Cannot change properties while transfer is active. Pause it first.',
|
|
redownloadNotFound: 'Cannot redownload: download was not found.',
|
|
redownloadActive: 'Cannot redownload a {{status}} download. Pause or wait for it to finish first.',
|
|
originalUrlMissing: 'Cannot redownload: original URL is missing.',
|
|
pauseBeforeMove: 'Pause {{file}} before moving it to another queue.',
|
|
},
|
|
addDownloads: {
|
|
unknownSize: 'Unknown size',
|
|
unknown: 'Unknown',
|
|
discardSetup: 'Discard this download setup?',
|
|
speedInvalid: 'Speed limit must be greater than zero',
|
|
duplicateResolveFailed: 'Could not resolve duplicate downloads: {{detail}}',
|
|
addedWithFailures: '{{added}} added, {{failed}} failed. {{detail}}',
|
|
addedOne: '1 download added',
|
|
addedMany: '{{count}} downloads added',
|
|
updatedOne: '1 download updated',
|
|
updatedMany: '{{count}} downloads updated',
|
|
urlAlreadyQueued: 'URL already in queue',
|
|
destinationConflict: 'Another selected download uses this destination',
|
|
existingDownloadDestination: 'Existing Firelink download uses this destination',
|
|
matchingDownloadFilename: 'An unfinished download already has this filename',
|
|
fileExistsOnDisk: 'File exists on disk; rename or skip to avoid deleting unrelated data',
|
|
backendRejectedStart: 'Backend rejected download start.',
|
|
playlistNoEntries: 'Playlist contains no downloadable entries',
|
|
invalidMediaMetadata: 'Invalid media metadata or no formats found',
|
|
noAvailableName: 'Could not find an available name for {{file}}.',
|
|
pauseBeforeReplace: 'Pause {{file}} before replacing it.',
|
|
cannotReplace: 'Cannot replace {{file}}: file is not owned by a Firelink download.',
|
|
downloadLinks: 'Download Links',
|
|
pastePlaceholder: 'Paste HTTP, HTTPS, FTP, or SFTP URLs here...\n\nFor media downloads, paste links from YouTube, X, TikTok, Instagram, Reddit, etc.',
|
|
playlistSummary: 'Playlist “{{title}}”: {{loaded}}{{total}} entries loaded{{truncated}}{{skipped}}',
|
|
safeEntryLimit: ' (safe entry limit reached)',
|
|
selectedSummary: '{{ready}} selected ready, {{fallback}} fallback, {{mediaRetry}} media retry, {{blocked}} blocked',
|
|
clearSelection: 'Clear selection',
|
|
selectAll: 'Select all',
|
|
refreshMetadata: 'Refresh Metadata',
|
|
files: 'Files',
|
|
required: 'Required',
|
|
free: 'Free',
|
|
preview: 'Preview',
|
|
file: 'File',
|
|
size: 'Size',
|
|
status: 'Status',
|
|
downloadPreview: 'Download preview',
|
|
noLinks: 'No links added yet.',
|
|
selectItem: 'Select {{file}}',
|
|
fetchingPlaylist: 'Fetching playlist...',
|
|
fetching: 'Fetching...',
|
|
unsafeUrl: 'Unsafe URL',
|
|
playlistFailed: 'Playlist failed',
|
|
metadataFailed: 'Metadata failed',
|
|
fallback: 'Fallback',
|
|
invalid: 'Invalid',
|
|
ready: 'Ready',
|
|
mediaFormat: 'Media Format',
|
|
playlistItem: 'Playlist item {{index}}',
|
|
fetchingMediaStreams: 'Fetching media streams...',
|
|
availableStreams: 'Available Streams',
|
|
availableMediaStreams: 'Available media streams',
|
|
metadataUnavailable: 'Metadata unavailable. Refresh metadata before adding this media.',
|
|
saveLocation: 'Save Location',
|
|
browse: 'Browse',
|
|
categoryFolders: 'Files will be organized into category folders.',
|
|
sharedFolder: 'All selected downloads will use this folder.',
|
|
dedicatedFolder: 'Save in a new folder',
|
|
dedicatedFolderName: 'Folder name',
|
|
dedicatedFolderDescription: 'Creates this folder inside each automatic category folder.',
|
|
dedicatedFolderManualDescription: 'Creates this folder inside the selected save location.',
|
|
saveFolderName: 'Save folder name',
|
|
dedicatedFolderNameRequired: 'Enter a folder name before saving.',
|
|
transferSettings: 'Transfer Settings',
|
|
connectionsPerFile: 'Connections per File',
|
|
connectionsPerFileAria: 'Connections per file',
|
|
limitSpeedPerFile: 'Limit speed per file',
|
|
speedLimitPerFileAria: 'Speed limit per file',
|
|
authorization: 'Authorization',
|
|
useAuthorization: 'Use authorization',
|
|
username: 'Username',
|
|
password: 'Password',
|
|
advancedTransfer: 'Advanced Transfer',
|
|
verifyChecksum: 'Verify Checksum',
|
|
checksumAlgorithm: 'Checksum algorithm',
|
|
expectedDigest: 'Expected digest',
|
|
headers: 'Headers',
|
|
requestHeaders: 'Request headers',
|
|
cookies: 'Cookies',
|
|
cookiePlaceholder: 'name=value; other=value',
|
|
mirrors: 'Mirrors',
|
|
cancel: 'Cancel',
|
|
startDownloads: 'Start Downloads',
|
|
addToQueue: 'Add to queue',
|
|
pasteOneOrMore: 'Paste one or more links.',
|
|
selectAtLeastOne: 'Select at least one download.',
|
|
correctInvalidOne: 'Correct or remove {{count}} invalid URL before continuing.',
|
|
correctInvalidFew: 'Correct or remove {{count}} invalid URLs before continuing.',
|
|
correctInvalidMany: 'Correct or remove {{count}} invalid URLs before continuing.',
|
|
waitingForMetadataOne: 'Waiting for metadata for {{count}} download.',
|
|
waitingForMetadataFew: 'Waiting for metadata for {{count}} downloads.',
|
|
waitingForMetadataMany: 'Waiting for metadata for {{count}} downloads.',
|
|
removeUnsafeOne: 'Remove {{count}} unsafe URL before continuing.',
|
|
removeUnsafeFew: 'Remove {{count}} unsafe URLs before continuing.',
|
|
removeUnsafeMany: 'Remove {{count}} unsafe URLs before continuing.',
|
|
mediaMetadataUnavailableSummaryOne: 'Media metadata is unavailable for {{count}} item. Refresh metadata before adding.',
|
|
mediaMetadataUnavailableSummaryFew: 'Media metadata is unavailable for {{count}} items. Refresh metadata before adding.',
|
|
mediaMetadataUnavailableSummaryMany: 'Media metadata is unavailable for {{count}} items. Refresh metadata before adding.',
|
|
metadataUnavailableFallback: 'Metadata is unavailable. Downloads can still be added using fallback details.',
|
|
fallbackReadyOne: '{{ready}} download ready; {{failed}} will use fallback filename and unknown size.',
|
|
fallbackReadyFew: '{{ready}} downloads ready; {{failed}} will use fallback filename and unknown size.',
|
|
fallbackReadyMany: '{{ready}} downloads ready; {{failed}} will use fallback filename and unknown size.',
|
|
readyToAddOne: 'Ready to add {{count}} download.',
|
|
readyToAddFew: 'Ready to add {{count}} downloads.',
|
|
readyToAddMany: 'Ready to add {{count}} downloads.',
|
|
},
|
|
settings: {
|
|
tabs: {
|
|
downloads: 'Downloads',
|
|
lookAndFeel: 'Look and feel',
|
|
network: 'Network',
|
|
locations: 'Locations',
|
|
siteLogins: 'Site Logins',
|
|
power: 'Power',
|
|
engine: 'Engine',
|
|
integrations: 'Integrations',
|
|
about: 'About',
|
|
},
|
|
common: {
|
|
thisOs: 'this OS',
|
|
checking: 'Checking...',
|
|
ready: 'Ready',
|
|
errorMissing: 'Error / Missing',
|
|
hideTechnicalDetails: 'Hide technical details',
|
|
showTechnicalDetails: 'Show technical details',
|
|
binary: 'Binary',
|
|
expected: 'Expected',
|
|
error: 'Error',
|
|
tip: 'Tip',
|
|
stderr: 'stderr',
|
|
daemonProcessAlive: 'Daemon process alive',
|
|
rpcReady: 'RPC ready',
|
|
rpcPort: 'RPC port',
|
|
daemonStderr: 'daemon stderr',
|
|
packaging: 'Packaging: PyInstaller onedir (_internal required)',
|
|
internalDirectoryFound: '_internal directory found',
|
|
pythonRuntimeFound: 'Python runtime found',
|
|
externalOpenFailed: 'Could not open {{label}}: {{detail}}',
|
|
updateUnexpectedResponse: 'The update check returned an unexpected response.',
|
|
updateUntrustedReleaseUrl: 'The update check returned an untrusted release URL.',
|
|
updateFailed: 'Update check failed: {{detail}}',
|
|
},
|
|
downloads: {
|
|
defaultConnections: 'Default connections:',
|
|
defaultConnectionsDescription: 'New downloads; existing items keep their saved value',
|
|
parallelDownloads: 'Parallel downloads:',
|
|
parallelDownloadsDescription: 'Max simultaneous active files',
|
|
automaticRetries: 'Automatic retries:',
|
|
automaticRetriesDescription: 'If a connection fails',
|
|
systemNotification: 'Show system notification when download completes',
|
|
systemNotificationDescription: 'Uses your operating system notification settings',
|
|
completionChime: 'Play in-app completion chime',
|
|
completionChimeDescription: 'Optional Firelink sound, independent of system notifications',
|
|
clipboardLinks: 'Add clipboard links when Firelink becomes active',
|
|
clipboardLinksDescription: 'Opens supported copied links in the Add window. Off by default.',
|
|
},
|
|
lookAndFeel: {
|
|
language: 'Language',
|
|
languageDescription: 'Choose the Firelink interface language.',
|
|
sidebarPosition: 'Sidebar position',
|
|
sidebarPositionDescription: 'Choose where the sidebar appears. Automatic follows the interface direction.',
|
|
sidebarPositionAutomatic: 'Automatic (recommended)',
|
|
sidebarPositionLeft: 'Left',
|
|
sidebarPositionRight: 'Right',
|
|
languageSystem: 'System default',
|
|
languageEnglish: 'English',
|
|
languageChinese: 'Simplified Chinese',
|
|
languageHebrew: 'Hebrew',
|
|
languagePersian: 'Persian',
|
|
languageUkrainian: 'Ukrainian',
|
|
languageRussian: 'Russian',
|
|
appTheme: 'App Theme',
|
|
theme: 'Theme',
|
|
ariaLabel: 'App theme',
|
|
system: 'System',
|
|
light: 'Light',
|
|
dark: 'Dark',
|
|
dracula: 'Dracula',
|
|
nord: 'Nord',
|
|
systemAppearance: 'System follows the current {{platform}} light or dark appearance.',
|
|
display: 'Display',
|
|
fontSize: 'Font size',
|
|
fontSizeDescription: 'Scales the download list and compact controls.',
|
|
small: 'Small',
|
|
standard: 'Standard',
|
|
large: 'Large',
|
|
listDensity: 'List density',
|
|
listDensityDescription: 'Changes row height, spacing, and progress bar scale.',
|
|
compact: 'Compact',
|
|
comfortable: 'Comfortable',
|
|
relaxed: 'Relaxed',
|
|
osIntegration: 'OS Integration',
|
|
dockBadge: 'Show badge on Dock icon',
|
|
dockBadgeDescription: 'Displays active download count on Firelink Dock icon.',
|
|
menuBarIcon: 'Show menu bar icon',
|
|
statusIndicatorIcon: 'Show status indicator icon',
|
|
systemTrayIcon: 'Show system tray icon',
|
|
macosTrayDescription: 'Provides quick access from the macOS menu bar.',
|
|
windowsTrayDescription: 'Provides quick access from the Windows notification area.',
|
|
linuxTrayDescription: 'Provides quick access from the desktop tray or status area when available.',
|
|
defaultTrayDescription: 'Provides quick access from the OS tray area when available.',
|
|
},
|
|
network: {
|
|
proxy: 'Proxy',
|
|
mode: 'Mode',
|
|
modeDescription: 'Controls proxy use for new download requests.',
|
|
noProxy: 'No Proxy',
|
|
systemProxy: 'System Proxy',
|
|
customProxy: 'Custom Proxy',
|
|
proxyHost: 'Proxy host',
|
|
proxyHostDescription: 'Host name, IP address, or HTTP proxy URL.',
|
|
proxyHostPlaceholder: '127.0.0.1 or http://127.0.0.1',
|
|
proxyPort: 'Proxy port',
|
|
proxyPortDescription: 'Valid range is 1 to 65535.',
|
|
noProxyDescription: 'Downloads ignore configured proxies.',
|
|
systemProxyDescription: 'Downloads use the detected {{platform}} system proxy. Normal file downloads require an HTTP or HTTPS proxy endpoint; media downloads can use SOCKS.',
|
|
customProxyDescription: 'Downloads use the configured HTTP proxy endpoint for metadata and download engines.',
|
|
invalidCustomProxy: 'Enter a valid HTTP proxy host and port to enable the custom proxy.',
|
|
incompleteCustomProxy: 'Enter a proxy host and port to enable the custom proxy.',
|
|
checkingSystemProxy: 'Checking system proxy configuration…',
|
|
detectedSystemProxy: 'A system proxy was detected. Normal file downloads require an HTTP or HTTPS endpoint; media downloads can use SOCKS.',
|
|
noSystemProxy: 'No usable system proxy was detected. Downloads will use no proxy.',
|
|
systemProxyReadFailed: 'System proxy configuration could not be read. Choose No Proxy or try again when it is available.',
|
|
identity: 'Identity',
|
|
customUserAgent: 'Custom User-Agent',
|
|
userAgentDescription: 'Applied to metadata fetches and download engines.',
|
|
userAgentPlaceholder: 'Leave blank for Firelink default',
|
|
userAgentOverrides: 'Overrides the outbound User-Agent header. Leave blank for Firelink defaults.',
|
|
chromeWindows: 'Chrome (Windows)',
|
|
chromeMacos: 'Chrome (macOS)',
|
|
edgeWindows: 'Edge (Windows)',
|
|
firefoxWindows: 'Firefox (Windows)',
|
|
firefoxMacos: 'Firefox (macOS)',
|
|
safariMacos: 'Safari (macOS)',
|
|
windowsDesktop: 'Windows desktop',
|
|
macosDesktop: 'macOS desktop',
|
|
},
|
|
locations: {
|
|
baseDownloadFolder: 'Base Download Folder',
|
|
baseDownloadFolderDescription: 'Automatic category folders are created inside this folder.',
|
|
browse: 'Browse',
|
|
baseFolderCreateFailed: 'Base folder saved, but category folders could not be created: {{detail}}',
|
|
baseFolderUpdated: 'Base download folder updated',
|
|
askWhereToSave: 'Ask where to save when adding downloads',
|
|
rememberLastUsedDownloadDirectory: 'Remember the last used download directory',
|
|
rememberLastUsedDownloadDirectoryDescription: 'Use the last folder selected in the Add window for the next download until the app restarts.',
|
|
automaticCategorySubfolders: 'Automatically save files to category subfolders',
|
|
automaticCategorySubfoldersDescription: 'When off, automatic downloads use the base folder.',
|
|
categorySubfolders: 'Category Subfolders',
|
|
relativeToBase: 'Relative to the base folder',
|
|
disabled: 'Disabled',
|
|
categorySubfolder: '{{category}} subfolder',
|
|
customFolder: 'Custom folder',
|
|
useAutomatic: 'Use automatic',
|
|
resetDefaults: 'Reset Defaults',
|
|
resetToast: 'Reset category locations to default',
|
|
},
|
|
siteLogins: {
|
|
title: 'Site Credentials',
|
|
noSavedLogins: 'No saved logins.',
|
|
user: 'User: {{username}}',
|
|
deleteCredential: 'Delete credential',
|
|
deletedCredential: 'Deleted credential',
|
|
deleteFailed: 'Could not delete credential: {{detail}}',
|
|
addTitle: 'Add Site Credentials',
|
|
urlPattern: 'URL Pattern:',
|
|
urlPatternPlaceholder: 'e.g. *.example.com or example.com/downloads',
|
|
username: 'Username:',
|
|
password: 'Password:',
|
|
usernamePlaceholder: 'Username',
|
|
passwordPlaceholder: 'Password',
|
|
saving: 'Saving…',
|
|
addLogin: 'Add Login',
|
|
urlPatternRequired: 'URL pattern is required.',
|
|
urlPatternWhitespace: 'URL pattern cannot contain whitespace.',
|
|
usernameRequired: 'Username is required.',
|
|
passwordRequired: 'Password is required.',
|
|
accessBeforeSave: 'Grant credential-store access before saving a site login.',
|
|
saveFailed: 'Failed to save site credential securely.',
|
|
addedCredential: 'Added site credential',
|
|
},
|
|
power: {
|
|
title: 'Power Management',
|
|
preventSleep: 'Prevent system sleep while downloads are active',
|
|
preventSleepDescription: 'The display may still turn off. Firelink only keeps the device awake enough to complete active transfers.',
|
|
},
|
|
engine: {
|
|
title: 'Media Downloader & Engines',
|
|
description: 'Successful results are reused for this app session. Recheck runs real validation again.',
|
|
recheck: 'Recheck engines',
|
|
coreDownloader: 'Core Downloader (aria2)',
|
|
version: 'Version:',
|
|
status: 'Status:',
|
|
mediaExtractors: 'Media Extractors',
|
|
browserCookiesSource: 'Browser Cookies Source:',
|
|
cookieDescription: 'yt-dlp reads browser cookies to bypass video download limits or access restricted media. Firelink does not save browser cookies.',
|
|
none: 'None',
|
|
},
|
|
integrations: {
|
|
title: 'Connect Browser Extension',
|
|
description: 'Capture downloads directly from your browser in three easy steps.',
|
|
portablePairingEnabled: 'Portable Pairing Enabled',
|
|
pairingTokenPersisted: 'Pairing Token Persisted',
|
|
portablePersistedDescription: 'Your pairing token is stored with this portable Firelink folder and will persist when the folder is moved. Treat the folder as sensitive.',
|
|
systemPersistedDescription: 'Your pairing token is stored in the system credential store and will persist across restarts.',
|
|
portablePairingAvailable: 'Portable Pairing Available',
|
|
credentialStorageNeeded: 'Credential Storage Needed',
|
|
portableAvailableDescription: 'Your pairing token is stored with this portable Firelink folder and will persist across restarts. Enable it here to review the portable-storage warning.',
|
|
credentialStorageDescription: "Firelink needs access to this system's credential store to securely save your pairing token across app restarts. Currently, your extension will only stay connected for this session.",
|
|
reviewPortablePairing: 'Review Portable Pairing',
|
|
grantCredentialAccess: 'Grant Credential Access',
|
|
copyToken: 'Copy Token',
|
|
tokenDescription: 'This secure token authorizes your browser extension.',
|
|
tokenCopied: 'Token copied to clipboard!',
|
|
tokenCopyFailed: 'Could not copy token: {{detail}}',
|
|
pairingTokenRegenerated: 'Pairing token regenerated',
|
|
regenerateFailed: 'Could not regenerate pairing token: {{detail}}',
|
|
getExtension: 'Get Extension',
|
|
extensionDescription: 'Install Firelink Companion for Firefox or Chromium browsers.',
|
|
firefoxAddons: 'Firefox Add-ons',
|
|
chromiumZip: 'Chromium ZIP',
|
|
pasteConnect: 'Paste & Connect',
|
|
pasteConnectDescription: "Click the Firelink icon in your browser's toolbar and paste the copied token.",
|
|
extensionServerStatus: 'Extension Server Status:',
|
|
listening: '● Listening on 127.0.0.1:{{port}}',
|
|
unavailable: '● Server unavailable',
|
|
},
|
|
about: {
|
|
firelinkIcon: 'Firelink Icon',
|
|
unknown: 'Unknown',
|
|
version: 'Version {{version}}',
|
|
description: 'Cross-platform download manager for macOS, Windows, and Linux.',
|
|
sourceCode: 'Source Code',
|
|
source: 'Source',
|
|
upToDate: 'Firelink {{version}} is up to date.',
|
|
updateAvailable: 'Firelink {{version}} is available.',
|
|
viewRelease: 'View release',
|
|
updates: 'Updates',
|
|
checkForUpdates: 'Check for Updates',
|
|
updateDescription: 'Firelink checks GitHub Releases for new versions.',
|
|
checking: 'Checking...',
|
|
checkNow: 'Check Now',
|
|
automaticUpdates: 'Automatically check for updates',
|
|
createdBy: 'Created by NimBold',
|
|
mitLicense: 'MIT License',
|
|
credits: 'Credits: aria2, yt-dlp, FFmpeg, and Deno.',
|
|
copyright: 'Copyright © 2026 NimBold. All rights reserved.',
|
|
},
|
|
},
|
|
status: {
|
|
ready: 'Ready',
|
|
active: '{{count}} active',
|
|
queued: '{{count}} queued',
|
|
done: '{{count}} done',
|
|
},
|
|
} as const;
|
|
|
|
export default common;
|