Files
Firelink/src/i18n/catalogs/en.ts
T

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;