Wires electrobun's Updater to the /dl download host. The packaged app checks https://miniscp.com/dl on launch + every 6h; when a newer build exists, an accent-colored "update tool" appears next to Connections in the tab bar. It announces the update, becomes its own inline progress bar while downloading, then flips to "Restart to apply" (two-step: download, then user-triggered relaunch). - electrobun.config.ts: release.baseUrl = https://miniscp.com/dl (baked into version.json at build; miniscp.com fronted by an external proxy for TLS). - rpc.ts: checkForUpdate/downloadUpdate/applyUpdate requests + updateStatus push. - rpc-handlers.ts + index.ts: call Updater; poll on launch+6h; stream onStatusChange progress. checkForUpdate self-guards the dev channel. - rpc.service.ts + new updater.service.ts: signal-based state (available -> downloading -> ready, ready derived from downloadUpdate ok). - tab-bar.ts: single bg-primary pill; progress fills the pill itself. - icons.ts: register mynaDownload. i18n: tabBar + menu keys across all locales. - menu.ts + app.ts: "Check for Updates…" app-menu item -> UpdaterService.check(). - docs: build-and-release + architecture updated. Unsigned builds still update (applyUpdate strips the macOS quarantine xattr). Verified: tsc --noEmit (exit 0) + build:ui AOT (exit 0). Live pill + full download/apply flow require a two-build test on the host. Co-Authored-By: Claude <noreply@anthropic.com>
307 lines
11 KiB
TypeScript
307 lines
11 KiB
TypeScript
// Basque (Euskara) translations. Fall back to English for missing keys.
|
|
// TODO(i18n): AI draft — REQUIRES native-speaker review (Basque is error-prone
|
|
// for machine/AI translation; treat every string as provisional).
|
|
export const eu = {
|
|
common: {
|
|
cancel: "Utzi",
|
|
save: "Gorde",
|
|
close: "Itxi",
|
|
delete: "Ezabatu",
|
|
rename: "Berrizendatu",
|
|
create: "Sortu",
|
|
apply: "Aplikatu",
|
|
choose: "Aukeratu…",
|
|
connect: "Konektatu",
|
|
local: "Lokala",
|
|
},
|
|
app: {
|
|
notConnectedTitle: "Ez dago aplikaziora konektatuta",
|
|
notConnectedBody: "Orri hau nabigatzaile arrunt batean exekutatzen ari da. Ireki mahaigaineko aplikazioa erabiltzeko.",
|
|
managerOpen: "Konexio-kudeatzailea irekita dago.",
|
|
showConnections: "Erakutsi konexioak",
|
|
},
|
|
tabBar: {
|
|
connections: "Konexioak",
|
|
manageConnections: "Kudeatu konexioak",
|
|
newTab: "Fitxa berria ({mod}T)",
|
|
closeTab: "Itxi fitxa ({mod}W)",
|
|
options: "Aukerak",
|
|
update: "Eguneratzea eskuragarri",
|
|
updating: "Eguneratzen",
|
|
restartToUpdate: "Berrabiarazi aplikatzeko",
|
|
updateTooltip: "Eguneratzea eskuragarri: miniSCP {version}",
|
|
},
|
|
options: {
|
|
title: "Aukerak",
|
|
language: "Hizkuntza",
|
|
system: "Sistema",
|
|
theme: { label: "Gaia", system: "Sistema", light: "Argia", dark: "Iluna" },
|
|
tone: { label: "Tonua", dark: "Iluna", darker: "Ilunagoa" },
|
|
accent: { label: "Azentua" },
|
|
accentNames: {
|
|
graphite: "Grafitoa",
|
|
blue: "Urdina",
|
|
indigo: "Indigoa",
|
|
purple: "Morea",
|
|
rose: "Arrosa",
|
|
orange: "Laranja",
|
|
green: "Berdea",
|
|
teal: "Turkesa",
|
|
},
|
|
fileIcons: { label: "Fitxategi-ikonoak", plain: "Soila", multi: "Koloretsua" },
|
|
interface: { label: "Interfazea", compact: "Trinkoa", default: "Lehenetsia", large: "Handia" },
|
|
speedUnit: { label: "Abiadura-unitatea" },
|
|
transfers: { label: "Transferentziak", single: "Banaka", multi: "Anitz" },
|
|
atOnce: "Aldi berean",
|
|
editor: { label: "Editorea", builtin: "Barnekoa", custom: "Pertsonalizatua" },
|
|
systemDefault: "Sistemaren lehenetsia",
|
|
resetDefault: "Berrezarri lehenetsira",
|
|
finishedTransfers: { label: "Amaitutako transferentziak", autoClear: "Garbitu", keep: "Mantendu" },
|
|
},
|
|
kinds: {
|
|
folder: "Karpeta",
|
|
symlink: "Esteka sinbolikoa",
|
|
file: "Fitxategia",
|
|
image: "Irudia",
|
|
audio: "Audioa",
|
|
video: "Bideoa",
|
|
archive: "Artxiboa",
|
|
code: "Kodea",
|
|
document: "Dokumentua",
|
|
},
|
|
columns: {
|
|
name: "Izena",
|
|
size: "Tamaina",
|
|
mtime: "Aldatze-data",
|
|
kind: "Mota",
|
|
rights: "Baimenak",
|
|
owner: "Jabea",
|
|
group: "Taldea",
|
|
},
|
|
panel: {
|
|
choosePanel: "Aukeratu panel honek zer erakusten duen",
|
|
copy: "Kopiatu",
|
|
copyToRight: "Kopiatu eskuineko panelera (F5)",
|
|
copyToLeft: "Kopiatu ezkerreko panelera (F5)",
|
|
edit: "Editatu",
|
|
editFile: "Editatu fitxategia (F4)",
|
|
rename: "Berrizendatu (F2)",
|
|
newFolder: "Karpeta berria (F7)",
|
|
newFile: "Fitxategi berria",
|
|
permissions: "Baimenak",
|
|
delete: "Ezabatu",
|
|
deleteHint: "Ezabatu (F8 / Del)",
|
|
parentDir: "Karpeta gurasoa (Atzera-tekla)",
|
|
refresh: "Freskatu",
|
|
clearFilter: "Garbitu iragazkia (Esc)",
|
|
sshConfig: "~/.ssh/config",
|
|
connectingTo: "{name}(e)ra konektatzen…",
|
|
emptyDir: "Karpeta hutsa",
|
|
noMatches: "Bat-etortzerik ez",
|
|
matches: { one: "bat-etortze {count} · Esc", other: "{count} bat-etortze · Esc" },
|
|
},
|
|
connMgr: {
|
|
title: "Konexioak",
|
|
importWinscp: "Inportatu WinSCPtik…",
|
|
importWinscpHint: "Inportatu saioak WinSCP.ini esportazio batetik",
|
|
newConnection: "Konexioa",
|
|
newConnectionHint: "Konexio berria",
|
|
newStack: "Taldea",
|
|
newStackHint: "Talde berria",
|
|
expand: "Zabaldu",
|
|
collapse: "Tolestu",
|
|
renameStack: "Berrizendatu taldea",
|
|
deleteStack: "Ezabatu taldea",
|
|
openStack: "Ireki taldea fitxetan",
|
|
empty: "hutsik",
|
|
connectionsHeader: "Konexioak",
|
|
noneTitle: "Oraindik ez dago gordetako konexiorik.",
|
|
noneBody: "Sortu bat edo inportatu zure WinSCP saioak.",
|
|
name: "Izena",
|
|
namePlaceholder: "nire zerbitzaria",
|
|
host: "Ostalaria",
|
|
port: "Ataka",
|
|
stack: "Taldea",
|
|
stackNone: "(bat ere ez)",
|
|
username: "Erabiltzailea",
|
|
remotePath: "Urruneko bidea (aukerakoa)",
|
|
remotePathPlaceholder: "hasierako karpeta",
|
|
auth: "Autentifikazioa",
|
|
authPassword: "Pasahitza",
|
|
authKey: "Gako pribatua",
|
|
password: "Pasahitza",
|
|
privateKeyFile: "Gako pribatuaren fitxategia",
|
|
passphrase: "Pasaesaldia (aukerakoa)",
|
|
localDir: "Karpeta lokala (aukerakoa)",
|
|
localDirPlaceholder: "~/proiektuak/nire-zerbitzaria",
|
|
localDirHint: "Beste panela hemen irekiko da Lokalean dagoenean eta nabigatu ez denean.",
|
|
more: "Gehiago…",
|
|
less: "Gutxiago…",
|
|
selectPrompt: "Hautatu konexio bat edo sortu berri bat.",
|
|
newStackTitle: "Talde berria",
|
|
newStackPrompt: "taldearen izena",
|
|
renameStackTitle: "Berrizendatu taldea",
|
|
deleteStackTitle: "Ezabatu taldea",
|
|
deleteStackBody: 'Ezabatu "{name}" taldea? Bere konexioak mantendu egingo dira, taldekatu gabe.',
|
|
deleteConnectionTitle: "Ezabatu konexioa",
|
|
deleteConnectionBody: 'Ezabatu "{name}"?',
|
|
},
|
|
editor: {
|
|
noFileTitle: "Ez dago editatzeko fitxategirik",
|
|
noFileBody: "Leiho hau editore-testuingururik gabe ireki da. Ireki fitxategiak aplikaziotik.",
|
|
wrap: "Doitu",
|
|
wrapHint: "Doitu lerro luzeak — lerro-zenbakiak ezkutatzen ditu ({alt}Z)",
|
|
findHint: "Bilatu ({mod}F)",
|
|
findPlaceholder: "Bilatu fitxategian",
|
|
prevMatch: "Aurreko bat-etortzea (⇧↵)",
|
|
nextMatch: "Hurrengo bat-etortzea (↵)",
|
|
closeHint: "Itxi (Esc)",
|
|
disconnected: "{name}(e)tik deskonektatuta — gordetzeak huts egingo du, baina zure testua leiho honetan gordeta dago.",
|
|
cantOpen: "Ezin da {name} ireki",
|
|
closeWindow: "Itxi leihoa",
|
|
shortcuts: "{mod}S gorde · {mod}F bilatu · {mod}W itxi",
|
|
lines: { one: "lerro {count}", other: "{count} lerro" },
|
|
close: "Itxi",
|
|
save: "Gorde",
|
|
saveChangesTitle: 'Gorde "{name}"(r)en aldaketak?',
|
|
saveChangesBody: "Zure aldaketak galduko dira gordetzen ez badituzu.",
|
|
dontSave: "Ez gorde",
|
|
countLabel: "{total}(e)tik {current}",
|
|
noMatches: "Bat-etortzerik ez",
|
|
},
|
|
transfer: {
|
|
summary: "{active} aktibo · {finished} amaituta",
|
|
clearFinished: "Garbitu amaituak",
|
|
cancel: "Utzi",
|
|
dismiss: "Baztertu",
|
|
showDetails: "Erakutsi transferentzien xehetasunak",
|
|
copying: "{name} kopiatzen · %{percent}{speed}",
|
|
queued: "{count} ilaran",
|
|
failed: { one: "transferentzia {count}(e)k huts egin du", other: "{count} transferentziak huts egin dute" },
|
|
finished: "Transferentziak amaituta",
|
|
ready: "Prest",
|
|
items: "{count} elementu",
|
|
selected: "{count} hautatuta",
|
|
queuedState: "Ilaran",
|
|
scanning: "Aztertzen…",
|
|
failedState: "Huts egin du",
|
|
cancelled: "Bertan behera utzita",
|
|
completedFiles: { one: "fitxategi {count} · {size}", other: "{count} fitxategi · {size}" },
|
|
left: "{eta} geratzen da",
|
|
},
|
|
dialogs: {
|
|
chmodTitle: "Baimenak",
|
|
chmodItems: "{count} elementu",
|
|
read: "Irakurri",
|
|
write: "Idatzi",
|
|
execute: "Exekutatu",
|
|
roleOwner: "Jabea",
|
|
roleGroup: "Taldea",
|
|
roleOthers: "Besteak",
|
|
octal: "Zortzitarra",
|
|
mergeFolder: "Batu karpeta",
|
|
replace: "Ordeztu",
|
|
merge: "Batu",
|
|
mergeAll: "Batu guztiak",
|
|
replaceAll: "Ordeztu guztiak",
|
|
skip: "Saltatu",
|
|
skipAll: "Saltatu guztiak",
|
|
ofTotal: "{total}(e)tik {index}",
|
|
overwriteDirBody: "Helmugan izen bereko karpeta bat dago jada. Batzeak barneko fitxategiak ordeztu ditzake.",
|
|
overwriteFileBody: "Helmugan izen bereko fitxategi bat dago jada.",
|
|
source: "Iturburua",
|
|
destination: "Helmuga",
|
|
newer: "berriagoa",
|
|
},
|
|
toasts: {
|
|
movedToTrash: '"{name}" zakarrontzira eraman da',
|
|
editingExternal: "{name} editatzen — gordetzean automatikoki igotzen da",
|
|
nothingToCopy: "Ez dago kopiatzeko ezer (esteka sinbolikoak saltatu egiten dira)",
|
|
nothingToCopyAllSkipped: "Ez dago kopiatzeko ezer — gatazkan zeuden elementu guztiak saltatu dira",
|
|
sameFolder: "Bi panelek karpeta bera erakusten dute",
|
|
sameFile: '"{name}" saltatu da — fitxategi bera da',
|
|
typeMismatch: '"{name}" saltatu da — beste mota bateko elementu bat dago bidean',
|
|
transferFailed: '"{name}" transferentziak huts egin du: {error}',
|
|
unknownError: "errore ezezaguna",
|
|
saved: "{name} gorde da",
|
|
disconnectedReason: "{title}: deskonektatuta ({reason})",
|
|
imported: { one: "konexio {count} inportatu da", other: "{count} konexio inportatu dira" },
|
|
importedIntoStacks: { one: " talde berri {count}ean", other: " {count} talde berritan" },
|
|
importedSkipped: " ({skipped} saltatuta)",
|
|
leftoverTitle: "Geratutako editatutako fitxategiak",
|
|
leftoverMore: ", +{count} gehiago",
|
|
leftoverBody: {
|
|
one: "Aurreko saio batek editatutako aldi baterako fitxategi {count} utzi zuen ({names}). Garbitu?",
|
|
other: "Aurreko saio batek editatutako aldi baterako {count} fitxategi utzi zituen ({names}). Garbitu?",
|
|
},
|
|
leftoverClear: "Garbitu",
|
|
},
|
|
fileActions: {
|
|
deleteTitle: "Ezabatu",
|
|
deleteBody: "Ezabatu {what}? Karpetak errekurtsiboki ezabatzen dira. Ezin da desegin.",
|
|
deleteConfirm: "Ezabatu",
|
|
renameTitle: 'Berrizendatu "{name}"',
|
|
renameConfirm: "Berrizendatu",
|
|
newFolderTitle: "Karpeta berria",
|
|
newFolderPlaceholder: "karpetaren izena",
|
|
newFileTitle: "Fitxategi berria",
|
|
newFilePlaceholder: "fitxategiaren izena",
|
|
createConfirm: "Sortu",
|
|
itemsCount: "{count} elementu",
|
|
},
|
|
menu: {
|
|
about: "{app} (r)i buruz",
|
|
checkForUpdates: "Bilatu eguneratzeak…",
|
|
quit: "Irten",
|
|
file: "Fitxategia",
|
|
newTab: "Fitxa berria",
|
|
closeTab: "Itxi fitxa",
|
|
newFolder: "Karpeta berria",
|
|
newFile: "Fitxategi berria",
|
|
editFile: "Editatu fitxategia",
|
|
connect: "Konektatu",
|
|
connectionManager: "Konexio-kudeatzailea…",
|
|
edit: "Editatu",
|
|
view: "Ikusi",
|
|
refresh: "Freskatu",
|
|
window: "Leihoa",
|
|
},
|
|
ctx: {
|
|
size: "Tamaina",
|
|
modified: "Aldatze-data",
|
|
kind: "Mota",
|
|
rights: "Baimenak",
|
|
owner: "Jabea",
|
|
group: "Taldea",
|
|
revealFinder: "Erakutsi Finder-en",
|
|
revealExplorer: "Erakutsi Explorer-en",
|
|
revealFileManager: "Erakutsi fitxategi-kudeatzailean",
|
|
moveToTrash: "Eraman zakarrontzira",
|
|
moveToRecycleBin: "Eraman birziklatze-ontzira",
|
|
newFolder: "Karpeta berria",
|
|
newFile: "Fitxategi berria",
|
|
refresh: "Freskatu",
|
|
open: "Ireki",
|
|
openDefault: "Ireki lehenetsitako aplikazioarekin",
|
|
edit: "Editatu",
|
|
copyToOther: "Kopiatu beste panelera",
|
|
rename: "Berrizendatu",
|
|
permissions: "Baimenak",
|
|
copyPath: "Kopiatu bidea",
|
|
delete: "Ezabatu",
|
|
columns: "Zutabeak",
|
|
trashTooltip: "Finder-en «Jarri berriro» ez dago erabilgarri hemendik zakarrontzira botatako elementuentzat",
|
|
},
|
|
errors: {
|
|
sshAgentUnavailable: "ssh-agent ez dago erabilgarri (SSH_AUTH_SOCK ez dago ezarrita)",
|
|
identityFileNotFound: "identitate-fitxategia ez da aurkitu: {path}",
|
|
sessionNotConnected: '"{id}" saioa ez dago konektatuta',
|
|
localCannotDisconnect: "Saio lokala ezin da deskonektatu",
|
|
notADirectory: '"{path}" badago eta ez da karpeta bat',
|
|
sameFileTransfer: '"{name}": iturburua eta helmuga fitxategi bera dira',
|
|
sameFileNoName: "Iturburua eta helmuga fitxategi bera dira",
|
|
folderOntoItself: "Ezin da karpeta bat bere gainean kopiatu",
|
|
folderIntoItself: "Ezin da karpeta bat bere barnean kopiatu",
|
|
},
|
|
} as const;
|