{{ t('systemUpdate.subtitle') }}
{{ t('common.version') }}
v{{ currentVersion }}
{{ t('systemUpdate.lastChecked') }}
{{ lastCheckDisplay }}
{{ t('common.status') }}
{{ statusLabel }}
Version {{ updateInfo.version }} — {{ updateInfo.release_date }}
Served by {{ manifestMirrorLabel }}
{{ t('systemUpdate.componentsToUpdate', { count: updateInfo.components }) }}
{{ t('systemUpdate.gitMethodHint') }}
{{ t('systemUpdate.upToDateMessage') }}
{{ downloadStalled ? t('systemUpdate.downloadStalled') : downloadFinishing ? t('systemUpdate.finishingDownload') : t('systemUpdate.percentComplete', { percent: downloadPercentFormatted }) }}
{{ t('systemUpdate.applyWarning') }}
{{ t('systemUpdate.subtitle') }}
Servers this node checks for updates. The primary is tried first; if it's slow or unreachable, the next one in the list is tried automatically. Downloads always come from the mirror that served the manifest — switching primary switches where files come from.
{{ m.label || `Mirror ${i + 1}` }}
PRIMARY{{ m.url }}
{{ t('systemUpdate.overlayTarget', { version: installTargetVersion }) }}
{{ installElapsedLabel }}
The URL should point directly at a manifest.json served by a Gitea mirror or equivalent. It's added to the end of the list; use "Make primary" to change order.
{{ confirmAction === 'rollback' ? t('systemUpdate.rollbackMessage') : confirmAction === 'git-apply' ? t('systemUpdate.gitApplyMessage') : confirmAction === 'cancel-download' ? t('systemUpdate.cancelDownloadConfirm') : t('systemUpdate.applyMessage') }}