mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 15:25:46 +00:00
2409a1fec8
Each src/locales/<lang>.ts (~1800 LOC) becomes a folder src/locales/<lang>/ with one module per i18n namespace (44 each) plus an index.ts barrel that reassembles <lang>Translation in the original key order. Mechanical, script-driven split with a JSON round-trip check: every locale object is byte-identical to its pre-split form. i18n.ts is unchanged — './locales/<lang>' now resolves to the folder index. The per-namespace settings.ts files land ~440-460 LOC; a single i18n namespace is the natural, non-arbitrary split unit for a flat string table, so they are intentionally left whole.
81 lines
3.7 KiB
TypeScript
81 lines
3.7 KiB
TypeScript
export const deviceSync = {
|
|
title: 'Device Sync',
|
|
targetFolder: 'Target Folder',
|
|
noFolderChosen: 'No folder chosen',
|
|
selectDrive: 'Select a drive…',
|
|
refreshDrives: 'Refresh drives',
|
|
noDrivesDetected: 'No removable drives detected',
|
|
browseManual: 'Browse manually…',
|
|
free: 'free',
|
|
notMountedVolume: 'Target is not on a mounted volume. The drive may have been disconnected.',
|
|
chooseFolder: 'Choose…',
|
|
targetDevice: 'Target Device',
|
|
schemaLabel: 'Naming scheme',
|
|
schemaHint: 'Fixed scheme for reliable cross-OS sync. Playlists are written as .m3u8 that reference the album tracks — no duplicates on the device.',
|
|
migrateButton: 'Reorganize existing files…',
|
|
migrateTooltip: 'Rename existing files on the device into the new scheme (from the old filename template).',
|
|
migrateTitle: 'Reorganize existing files',
|
|
migrateLoading: 'Analyzing existing files…',
|
|
migrateNothingToDo: 'All existing files already match the new scheme — nothing to do.',
|
|
migrateNoTemplate: 'No legacy filename template found on the device. Migration only applies when the stick was synced with a Psysonic version that supported custom templates.',
|
|
migrateFilesToRename: 'files will be renamed',
|
|
migrateUnchanged: '{{n}} files are already at the correct path',
|
|
migrateCollisions: '{{n}} files cannot be renamed automatically (multiple tracks map to the same target). They will be left untouched — the next sync re-downloads them into the correct location.',
|
|
migratePreviewNote: 'Old template: {{tpl}}',
|
|
migrateExecuting: 'Renaming files…',
|
|
migrateSuccess: '{{n}} files renamed successfully',
|
|
migrateFailed: '{{n}} renames failed',
|
|
migrateShowErrors: 'Show errors',
|
|
migrateStart: 'Start renaming',
|
|
onDevice: 'Device Manager',
|
|
addSources: 'Add…',
|
|
colName: 'Name',
|
|
colType: 'Type',
|
|
colStatus: 'Status',
|
|
syncResult: '{{done}} transferred, {{skipped}} already up to date ({{total}} total)',
|
|
deleteFromDevice: 'Mark for deletion ({{count}})',
|
|
confirmDelete: 'Delete {{count}} item(s) from the device: {{names}}?',
|
|
deleteComplete: '{{count}} item(s) removed from device.',
|
|
manifestImported: 'Imported {{count}} source(s) from device manifest.',
|
|
selectedSources: 'Selected Sources',
|
|
noSourcesSelected: 'No sources selected. Click items in the browser to add them.',
|
|
clearAll: 'Clear all',
|
|
tabPlaylists: 'Playlists',
|
|
tabAlbums: 'Albums',
|
|
tabArtists: 'Artists',
|
|
searchPlaceholder: 'Search…',
|
|
syncButton: 'Sync to Device',
|
|
actionTransfer: 'Transfer to Device',
|
|
actionDelete: 'Delete from Device',
|
|
actionApplyAll: 'Apply All Changes',
|
|
cancel: 'Cancel',
|
|
noTargetDir: 'Please choose a target folder first.',
|
|
noSources: 'Please select at least one source.',
|
|
noTracks: 'No tracks found in the selected sources.',
|
|
fetchError: 'Failed to fetch tracks from server.',
|
|
syncComplete: 'Sync complete.',
|
|
dismiss: 'Dismiss',
|
|
cancelSync: 'Cancel',
|
|
syncCancelled: 'Sync cancelled ({{done}} / {{total}} transferred).',
|
|
statusSynced: 'Synced',
|
|
statusPending: 'Pending',
|
|
statusDeletion: 'Deletion',
|
|
markForDeletion: 'Mark for deletion',
|
|
undoDeletion: 'Undo deletion',
|
|
removeSource: 'Remove',
|
|
syncInBackground: 'Sync started in background — you can navigate away.',
|
|
syncInProgress: '{{done}} / {{total}} tracks…',
|
|
scanningDevice: 'Scanning device…',
|
|
syncSummary: 'Sync Summary',
|
|
calculating: 'Calculating required payload…',
|
|
filesToAdd: 'Files to Add:',
|
|
filesToDelete: 'Files to Delete:',
|
|
netChange: 'Net Change:',
|
|
availableSpace: 'Available Disk Space:',
|
|
spaceWarning: 'Warning: Target device does not have enough reported space.',
|
|
proceed: 'Proceed with Sync',
|
|
notEnoughSpace: 'Not enough physical disk space detected!',
|
|
liveSearch: 'Live',
|
|
randomAlbumsLabel: 'Random Albums',
|
|
};
|