From f477cb554e02055604a3df3150e7acfb551318f2 Mon Sep 17 00:00:00 2001 From: worksofliam Date: Wed, 1 May 2024 14:26:33 -0400 Subject: [PATCH 01/16] Convert locale files to JSON instead of TS Signed-off-by: worksofliam --- src/locale/ids/da.json | 399 ++++++++++++++++++++++++++++++++++++++++ src/locale/ids/da.ts | 402 ----------------------------------------- src/locale/ids/en.json | 399 ++++++++++++++++++++++++++++++++++++++++ src/locale/ids/en.ts | 402 ----------------------------------------- src/locale/ids/fr.json | 399 ++++++++++++++++++++++++++++++++++++++++ src/locale/ids/fr.ts | 402 ----------------------------------------- src/locale/index.ts | 6 +- tsconfig.json | 1 + 8 files changed, 1201 insertions(+), 1209 deletions(-) create mode 100644 src/locale/ids/da.json delete mode 100644 src/locale/ids/da.ts create mode 100644 src/locale/ids/en.json delete mode 100644 src/locale/ids/en.ts create mode 100644 src/locale/ids/fr.json delete mode 100644 src/locale/ids/fr.ts diff --git a/src/locale/ids/da.json b/src/locale/ids/da.json new file mode 100644 index 000000000..f373c22c4 --- /dev/null +++ b/src/locale/ids/da.json @@ -0,0 +1,399 @@ +{ + "Yes": "Ja", + "No": "Nej", + "Cancel": "Afbryd", + "Retry": "Prøv igen", + "Continue": "Fortsæt", + "directory": "mappe", + "shortcut": "genvej", + "streamfile": "fil", + "error": "fejl", + "errors": "fejl", + "clearList": "$(trash) Nulstil liste", + "clearedList": "Nulstillede liste.", + "currentLibrary": "(aktuelle bibliotek)", + "current": "aktuelle", + "duplicate": "Kopier", + "save": "Gem", + "delete": "Slet", + "cancel": "Afbryd", + "not.connected": "Ikke forbundet til en IBM i", + "text": "Tekst", + "members": "Members", + "length": "Længde", + "CCSID": "CCSID", + "lines": "Linier", + "created": "Oprettet", + "changed": "Ændret", + "size": "Størrelse", + "modified": "Ændret", + "owner": "Ejer", + "type": "Type", + "attribute": "Attribut", + "created_by": "Oprettet af", + "overwrite": "Erstat", + "overwrite_all": "Erstat alle", + "ask.overwrite": "{0} eksisterer allerede.\nVil du erstatte?", + "skip": "Spring over", + "skip_all": "Spring alle over", + "password": "Kodeord", + "privateKey": "Privat nøgle", + "username": "Brugernavn", + "stored": "gemt", + "offline": "Offline", + "online": "Online", + "status": "Status", + "job": "Job", + "start": "Start", + "restart": "Genstart", + "stop": "Stop", + "listening.on.port": "Lytter på port", + "listening.on.ports": "Lytter på porte", + "overview": "Overblik", + "JOB_NAME_SHORT": "Job navn", + "JOB_USER": "Job bruger", + "JOB_NUMBER": "Job nummer", + "SUBSYSTEM": "Subsystem", + "AUTHORIZATION_NAME": "Aktuelle bruger", + "JOB_STATUS": "Job status", + "MEMORY_POOL": "Memory pulje", + "START_TIME": "Start tid", + "JAVA_HOME": "Java Home", + "USER_DIRECTORY": "Bruger mappe", + "CURRENT_HEAP_SIZE": "Nuværende memory", + "MAX_HEAP_SIZE": "Maksimalt tilladt memory", + + "sandbox.input.user.title": "Bruger for server", + "sandbox.input.user.prompt": "Indtast brugernavn for {0}", + "sandbox.input.password.title": "Kodeord for server", + "sandbox.input.password.prompt": "Indtast kodeord for {0}@{1}", + "sandbox.failedToConnect.text": "Fejl ved forbindelse til {0} som {1}", + "sandbox.failedToConnect.title": "Fejl ved forbindelse", + "sandbox.noPassword": "Forbindelse til {0} afsluttet da intet kodeord blev angivet.", + "sandbox.alreadyConnected": "Denne Visual Studio Code instans er allerede forbundet til en server.", + "sandbox.connected.modal.title": "Tak for at afprøve Code for IBM i Sandbox!", + "sandbox.connected.modal.detail": "Du bruger dette system på egen risiko. Del ingen følsomme eller private informationer.", + "sandbox.noconnection.modal.title": "Åh nej! \"Sandkassen\" er ikke tilgængelig.", + "sandbox.noconnection.modal.detail": "Desværre, men \"Sandkassen\" er ikke tilgængelig lige nu. Prøv igen lidt senere.", + + "connectionBrowser.connectTo.lastConnection": "Seneste forbindelse", + "connectionBrowser.connectTo.lastUsed": "Senest brugt: {0}", + "connectionBrowser.connectTo.title": "Seneste IBM i forbindelser", + "connectionBrowser.connectTo.error": "Brug Servere vinduet til at vælge hvilket system, der skal forbindes til.", + "connectionBrowser.renameConnection.prompt": "Omdøb forbindelsen \"{0}\"", + "connectionBrowser.renameConnection.alreadyExists": "Forbindelsen \"{0}\" findes allerede.", + "connectionBrowser.renameConnection.invalid.input": "Nyt forbindelses navn skal være forskelligt fra det nuværende navn", + "connectionBrowser.renameConnection.noConnectionFound": "Ingen forbindelse med navnet \"{0}\" blev fundet", + "connectionBrowser.renameConnection.noConnParmsFound": "Ingen parametre til forbindelsen \"{0}\" blev fundet", + "connectionBrowser.renameConnection.error": "Fejl ved omdøbning af forbindelsen \"{0}\"! {1}", + "connectionBrowser.deleteConnection.warning": "Er du sikker på at du vil slette forbindelsen \"{0}\"?", + "connectionBrowser.deleteConnection.multiple.warning": "Er du sikker på at du vil slette disse {0} forbindelser?", + "connectionBrowser.ServerItem.tooltip": " (forrige forbindelse)", + "connectionBrowser.ServerItem.title": "Forbind", + "connectionBrowser.copyConnection.prompt": "Kopier forbindelsen \"{0}\"", + "connectionBrowser.copyConnection.placeholder": "Navn på ny forbindelse", + "connectionBrowser.copyConnection.already.exists": "Forbindelsen \"{0}\" eksisterer allerede", + "connectionBrowser.copyConnection.select.settings": "Vælg indstillingerne, der skal kopieres fra \"{0}\" til \"{1}\"", + "connectionBrowser.copyConnection.select.home.directory": "Aktuelle mappe", + "connectionBrowser.copyConnection.select.library.list": "Biblioteks listen", + "connectionBrowser.copyConnection.select.object.filters": "Objekt filtre", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS genveje", + "connectionBrowser.copyConnection.select.custom.variables": "Bruger variable", + "connectionBrowser.copyConnection.select.command.profiles": "Kommando profiler", + "connectionBrowser.copyConnection.select.connection.profiles": "Forbindelses profiler", + + "login.title.create": "Forbind til IBM i", + "login.title.edit": "Login Indstillinger: \"{0}\"", + "login.host": "Værtsnavn eller IP adresse", + "login.port": "Port (SSH)", + "login.authDecision": "Angiv enten kodeord eller privat nøgle - ikke begge dele.", + "login.removeAuth": "Fjern kodeord+nøgle", + "login.authRemoved": "Kodeord og privat nøgle er fjernet for \"{0}\".", + "login.password.label": "Angiv kun et kodeord hvis du ønsker at ændre det gemte eller oprette et nyt.", + "login.password.updated": "Kodeord er opdateret og bruges for \"{0}\".", + "login.savePassword": "Gem kodeord", + "login.privateKey.label": "Angiv kun en privat nøgle hvis du ønsker at opdatere den aktuelle eller indstille en ny.", + "login.privateKey.support": "OpenSSH, RFC4716 og PPK formater understøttes.", + "login.privateKey.updated": "Privat nøgle er opdateret og bruges for \"{0}\".", + + "helpView.getStarted": "Dokumentation", + "helpView.officialForum": "Forum", + "helpView.reviewIssues": "Se fejlrapporter", + "helpView.reportIssue": "Opret en fejlrapport", + + "ifsBrowser.changeWorkingDirectory.prompt": "Skifter aktuelle mappe", + "ifsBrowser.changeWorkingDirectory.message": "Aktuelle mappe er skiftet til {0}.", + "ifsBrowser.addIFSShortcut.prompt": "Sti til IFS mappe", + "ifsBrowser.addIFSShortcut.error": "{0} er ikke en mappe.", + "ifsBrowser.addIFSShortcut.errorMessage": "Fejl ved oprettelse af IFS genvej! {0}", + "ifsBrowser.removeIFSShortcut.placeHolder": "Vælg IFS genvej til sletning", + "ifsBrowser.createDirectory.prompt": "Sti til ny mappe", + "ifsBrowser.createDirectory.errorMessage": "Fejl ved oprettelse af ny mappe! {0}", + "ifsBrowser.createStreamfile.prompt": "Navn på ny streamfile", + "ifsBrowser.createStreamfile.infoMessage": "Opretter streamfile {0}.", + "ifsBrowser.createStreamfile.errorMessage": "Fejl ved oprettelse af ny streamfile! {0}", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload er udført.", + "ifsBrowser.uploadStreamfile.errorMessage": "Fejl ved upload af filer! {0}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "Ingen filer eller mapper er valgt til upload.", + "ifsBrowser.uploadStreamfile.process.uploading": "Upload", + "ifsBrowser.uploadStreamfile.process.uploading.files": "sender {0} file(r)...", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "sender {0} mappe(r)...", + "ifsBrowser.uploadStreamfile.ask": "Vil du kopiere eller flytte det valgte til {0}?", + "ifsBrowser.uploadStreamfile.copy": "Kopier", + "ifsBrowser.uploadStreamfile.move": "Flyt", + "ifsBrowser.uploadStreamfile.copy.failed": "Fejl ved kopiering af det valgte til {0}: {1}", + "ifsBrowser.uploadStreamfile.move.failed": "Fejl ved flytning af det valgte til {0}: {1}", + "ifsBrowser.uploadStreamfile.select.type.folders": "Mapper", + "ifsBrowser.uploadStreamfile.select.type.files": "Filer", + "ifsBrowser.uploadStreamfile.select.type.title": "Hvad ønsker du at uploade?", + "ifsBrowser.deleteIFS.dirNotAllowed": "Ikke tilladt at slette valgte mapper fra IFS Browser.\n{0}", + "ifsBrowser.deleteIFS.warningMessage": "Er du sikker på at du vil slette {0}?", + "ifsBrowser.deleteIFS.multi.warningMessage": "Er du sikker på at du vil slette de {0} valgte filer?", + "ifsBrowser.deleteIFS.deletionPrompt": "Når du har slettet mappen, kan den ikke retableres.\nVenligst tast \"{0}\" for at bekræfte sletning.", + "ifsBrowser.deleteIFS.deletionPrompt2": " (Tryk \"Escape\" for at afbryde)", + "ifsBrowser.deleteIFS.progress": "Sletning af {0} element(er)...", + "ifsBrowser.deleteIFS.errorMessage": "Fejl ved sletning af streamfile! {0}", + "ifsBrowser.deleteIFS.cancelled": "Sletning afbrudt.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} var den aktuelle mappe; det er nu {1}.", + "ifsBrowser.moveIFS.prompt": "Nyt navn", + "ifsBrowser.moveIFS.errorMessage": "Fejl ved flytning/omdøbning af {0}! {1}", + "ifsBrowser.moveIFS.renamed": "{0} blev omdøbt til {1}.", + "ifsBrowser.moveIFS.moved": "{0} blev flyttet til {1}.", + "ifsBrowser.copyIFS.prompt": "Nyt navn", + "ifsBrowser.copyIFS.infoMessage": "{0} blev kopieret til {1}.", + "ifsBrowser.copyIFS.errorMessage": "Fejl ved kopiering af {0}! {1}", + "ifsBrowser.searchIFS.prompt": "Indtast IFS mappe for søgning", + "ifsBrowser.searchIFS.title": "Søg mappe", + "ifsBrowser.searchIFS.previousSearches": "Forrige søgninger", + "ifsBrowser.searchIFS.placeholder": "Indtast søgetekst eller vælg en af de tidligere søgninger.", + "ifsBrowser.searchIFS.placeholder2": "Indtast søgetekst.", + "ifsBrowser.searchIFS.title2": "Søg i {0}", + "ifsBrowser.searchIFS.noGrep": "\"grep\" skal være installeret på systemet for IFS søgning.", + "ifsBrowser.downloadStreamfile.downloading": "Henter", + "ifsBrowser.downloadStreamfile.complete": "Hentning gennemført.", + "ifsBrowser.downloadStreamfile.errorMessage": "Fejl under hentning: {0}", + "ifsBrowser.getChildren.errorMessage": "Fejl ved læsning af objekter.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} opstod ved visning af filer.", + "ifsBrowser.doSearchInStreamfiles.title": "Søger", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" i {1}.", + "ifsBrowser.doSearchInStreamfiles.noResults": "Ingen resultater blev fundet ved søgning efter \"{0}\" i {1}.", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Fejl ved søgning i filer.", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) kopieret til streamfile(s) i {1}.", + "ifsBrowser.copyToStreamfile.failed": "Fejl ved kopiering af member(s) til {0}: {1}", + + "LibraryListView.changeCurrentLibrary.currentlyActive": "Nuværende", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Tidligere", + "LibraryListView.changeCurrentLibrary.placeholder": "Filter eller nyt bibliotek til at sætte som aktuelle", + "LibraryListView.changeCurrentLibrary.title": "Skift aktuelle bibliotek", + "LibraryListView.changeCurrentLibrary.changedCurrent": "Skiftede aktuelle bibliotek til {0}.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} er allerede det aktuelle bibliotek.", + "LibraryListView.changeUserLibraryList.prompt": "Skift biblioteksliste (du kan bruge \"*reset\")", + "LibraryListView.changeUserLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", + "LibraryListView.addToLibraryList.prompt": "Tilføj bibliotek", + "LibraryListView.addToLibraryList.tooLong": "Bibioteksnavn er for langt.", + "LibraryListView.addToLibraryList.alreadyInList": "Bibliotek {0} er allerede i bibliotekslisten.", + "LibraryListView.addToLibraryList.invalidLib": "Bibliotek {0} findes ikke.", + "LibraryListView.addToLibraryList.addedLib": "Bibliotek {0} blev tilføjet til bibliotekslisten.", + "LibraryListView.addToLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", + "LibraryListView.removeFromLibraryList.removedLib": "Bibliotek {0} blev fjernet fra bibliotekslisten.", + "LibraryListView.cleanupLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", + "LibraryListView.cleanupLibraryList.validated": "Bibliotekslisten blev valideret uden fejl.", + "LibraryListView.setCurrentLibrary.failed": "Fejl ved skift til {0} som aktuelt bibliotek: {1}", + + "objectBrowser.delete.confirm": "Er du sikker på at du vil slette {0}?", + "objectBrowser.delete.multiple.confirm": "Er du sikker på at du vil slette de {0} valgte elementer?", + "objectBrowser.delete.progress": "Sletter", + "objectBrowser.createMember.prompt": "Navn på nyt member (member.ext)", + "objectBrowser.createMember.progressTitle": "Opretter member {0}...", + "objectBrowser.createMember.errorMessage": "Fejl ved oprettelse af member {0}: {1}", + "objectBrowser.copyMember.prompt": "Ny sti til kopiering af source member", + "objectBrowser.copyMember.errorMessage": "Kan ikke kopiere et member til sig selv!", + "objectBrowser.copyMember.progressTitle": "Opretter member {0}...", + "objectBrowser.copyMember.overwrite": "Vil du overskrive member {0}?", + "objectBrowser.copyMember.errorMessage2": "Member {0} eksisterer allerede!", + "objectBrowser.copyMember.errorMessage3": "Fejl ved oprettelse af member {0}: {1}", + "objectBrowser.deleteMember.errorMessage": "Fejl ved sletning af member! {0}", + "objectBrowser.updateMemberText.prompt": "Opdater beskrivelse af member {0}, *BLANK for ingen beskrivelse", + "objectBrowser.updateMemberText.errorMessage": "Fejl ved ændring af member beskrivelse! {0}", + "objectBrowser.renameMember.prompt": "Omdøb member {0}", + "objectBrowser.renameMember.errorMessage": "Fejl ved omdøbning af member! {0}", + "objectBrowser.renameMember.invalid.input": "Nyt member navn skal være forskelligt fra det nuværende navn", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Fil blev sendt til member.", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Fejl ved afsendelse af fil! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", + "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", + "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", + "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", + "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", + "objectBrowser.searchSourceFile.prompt": "Indtast LIB/SPF/member.ext til søgning (member.ext er valgfrit og kan indeholde mønstertegn)", + "objectBrowser.searchSourceFile.title": "Søg source fil", + "objectBrowser.searchSourceFile.invalidForm": "Venligst indtast værdi på formatet LIB/SPF/member.ext", + "objectBrowser.searchSourceFile.aspText": "(i ASP {0})", + "objectBrowser.searchSourceFile.previousSearches": "Forrige søgninger", + "objectBrowser.searchSourceFile.placeholder": "Indtast søgetekst eller vælg en af de tidligere søgninger.", + "objectBrowser.searchSourceFile.placeholder2": "Indtast søgetekst.", + "objectBrowser.searchSourceFile.title2": "Søg i {0} {1}", + "objectBrowser.searchSourceFile.errorMessage": "Kan ikke søge med *ALL.", + "objectBrowser.createFilter": "Opret nyt filter", + "objectBrowser.createLibrary.prompt": "Navn på nyt bibliotek", + "objectBrowser.createLibrary.errorMessage": "Kan ikke oprette bibliotek \"{0}\": {1}", + "objectBrowser.createLibrary.infoMessage": "Vil du tilføje det nyt bibliotek til bibliotekslisten?", + "objectBrowser.createLibrary.errorMessage2": "Biblioteksnavn er for langt.", + "objectBrowser.createSourceFile.prompt": "Navn på ny source fil", + "objectBrowser.createSourceFile.infoMessage": "Opretter source fil {0}.", + "objectBrowser.createSourceFile.errorMessage": "Fejl ved oprettelse af source fil! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Source filnavn må være 10 tegn eller mindre.", + "objectBrowser.changeObjectDesc.prompt": "Opdater objekt beskrivelse for {0}, *BLANK for ingen beskrivelse", + "objectBrowser.changeObjectDesc.errorMessage": "Objekt beskrivelse må være 50 tegn eller mindre.", + "objectBrowser.changeObjectDesc.infoMessage": "Ændrede objekt beskrivelsen for {0} {1}.", + "objectBrowser.changeObjectDesc.errorMessage2": "Fejl ved ændring af objekt beskrivelse for {0}! {1}", + "objectBrowser.copyObject.prompt": "Kopier objekt til new bibliotek/objekt", + "objectBrowser.copyObject.errorMessage": "Forkert sti: {0}. Brug formatet LIB/OBJ", + "objectBrowser.copyObject.errorMessage2": "Biblioteksnavn må være 10 tegn eller mindre.", + "objectBrowser.copyObject.errorMessage3": "Objektnavn må være 10 tegn eller mindre.", + "objectBrowser.copyObject.infoMessage": "Kopierede objekt {0} {1} til {2}.", + "objectBrowser.copyObject.infoMessage2": "Kopierede objekt {0} {1} til {2}. Opfrisk object browser.", + "objectBrowser.copyObject.errorMessage4": "Fejl ved kopiering af objekt {0}! {1}", + "objectBrowser.deleteObject.errorMessage": "Fejl ved sletning af objekt! {0}", + "objectBrowser.renameObject.prompt": "Omdøb objekt", + "objectBrowser.renameObject.errorMessage": "Objektnavn må være 10 tegn eller mindre.", + "objectBrowser.renameObject.infoMessage": "Omdøbte objekt {0} {1} til {2}.", + "objectBrowser.renameObject.errorMessage2": "Fejl ved omdøbning af objekt {0}! {1}", + "objectBrowser.renameObject.progress": "Omdøber objekt {0} {1} til {2}...", + "objectBrowser.moveObject.prompt": "Flyt objekt", + "objectBrowser.moveObject.errorMessage": "Objekt navn må være 10 tegn eller mindre.", + "objectBrowser.moveObject.infoMessage": "Flyttede objekt {0} {1} til {2}.", + "objectBrowser.moveObject.infoMessage2": "Flyttede objekt {0} {1} til {2}. Opfrisk object browser.", + "objectBrowser.moveObject.errorMessage2": "Fejl ved flytning af objekt {0}! {1}", + "objectBrowser.moveObject.progress": "Flytter objekt {0} {1} til {2}...", + "objectBrowser.doSearchInSourceFile.title": "Søgning", + "objectBrowser.doSearchInSourceFile.progressMessage": "Henter member liste for {0}.", + "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" i {1}.", + "objectBrowser.doSearchInSourceFile.searchMessage2": "Dette kan tage noget tid da der er {0} members. Søger stadig efter \"{1}\" i {2}.", + "objectBrowser.doSearchInSourceFile.searchMessage3": "Hvad er egentligt så specielt med \"{0}\"?", + "objectBrowser.doSearchInSourceFile.searchMessage4": "Søger stadig efter \"{0}\" i {1}...", + "objectBrowser.doSearchInSourceFile.searchMessage5": "Hvad med at hente en kop kaffe mens du venter?", + "objectBrowser.doSearchInSourceFile.searchMessage6": "Uha, dette tager virkelig lang tid. Lad os håbe du får det ønskede resultat.", + "objectBrowser.doSearchInSourceFile.searchMessage7": "Der er 10 slags mennesker - dem der forstår binært og dem, der ikke gør!", + "objectBrowser.doSearchInSourceFile.searchMessage8": "Hvordan i alverden ender man med {0} members?", + "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" i {1}.", + "objectBrowser.doSearchInSourceFile.notFound": "Søgning efter \"{0}\" i {1} gav intet resultat.", + "objectBrowser.doSearchInSourceFile.noMembers": "Der er ingen members at søge i.", + "objectBrowser.doSearchInSourceFile.errorMessage": "Fejl ved søgning i members: {0}", + + "ProfilesView.saveConnectionProfile.prompt": "Navn på profil", + "ProfilesView.saveConnectionProfile.infoMessage": "Gemte aktuelle indstillinger til profil \"{0}\".", + "ProfilesView.deleteConnectionProfile.warningMessage": "Er du sikker på at du vil slette profilen \"{0}\"?", + "ProfilesView.loadConnectionProfile.infoMessage": "Skiftede til profilen \"{0}\".", + "ProfilesView.loadCommandProfile.infoMessage": "Skiftede til profilen \"{0}\".", + "ProfilesView.loadCommandProfile.warningMessage": "Fejl ved at hente bibliotekslisten fra kommando. Feature er ikke installeret.", + "ProfilesView.loadCommandProfile.errorMessage": "Fejl ved at hente bibliotekslisten fra kommando: {0}", + "ProfilesView.setToDefault.infoMessage": "Nulstil til standard", + "ProfilesView.setToDefault.detail": "Dette vil nulstille bibliotekslisten, aktuelle mappe og Bruger Variable.", + + "actions.CURLIB": "Aktuelle bibliotek (sættes i Library List)", + "actions.USERNAME": "Brugernavn for forbindelsen", + "actions.WORKDIR": "Aktuel arbejdsmappe, kan ændres i IFS Browser", + "actions.HOST": "Host navn eller IP adresse fra den aktuelle forbindelse", + "actions.BRANCH": "Nuværende git-gren", + "actions.BRANCHLIB": "Bibliotek for den nuværende Git-gren", + "actions.BUILDLIB": "Det samme som &CURLIB", + "actions.LIBLC": "Liste af biblioteker adskilt af komma", + "actions.LIBLS": "Liste af biblioteker adskilt af mellemrum", + "actions.OPENLIB": "Biblioteksnavn med source member (&OPENLIBL for små bogstaver)", + "actions.OPENSPF": "Source fil navn med source member (&OPENSPFL for små bogstaver)", + "actions.OPENMBR": "Navn på source member (&OPENMBRL for små bogstaver)", + "actions.member.EXT": "Type af source member (&EXTL for små bogstaver)", + "actions.FULLPATH": "Fulde sti på filen på fjernsystemet", + "actions.FILEDIR": "Katalog over filen på fjernsystemet", + "actions.RELATIVEPATH": "Relativ sti til streamfilen fra arbejdsbiblioteket eller arbejdsområdet", + "actions.PARENT": "Navn på forrige mappe eller source fil", + "actions.BASENAME": "Navn på filen, inklusive filtypen", + "actions.streamfile.NAME": "Navn på filen (&NAMEL for små bogstaver)", + "actions.streamfile.EXT": "Filtypen (&EXTL for små bogstaver)", + "actions.LIBRARY": "Biblioteksnavn med objektet (&LIBRARYL for små bogstaver)", + "actions.NAME": "Navn på objektet (&NAMEL for små bogstaver)", + "actions.NAMEL": "Navn på objektet med små bogstaver", + "actions.object.TYPE": "Typen af objektet (&TYPEL for små bogstaver)", + "actions.object.EXT": "Objektets attribut (&EXTL for små bogstaver)", + "actions.EXT": "Filtypen", + "actions.EXTL": "Filtypen med små bogstaver", + "actions.mainMenu.workWithActions": "Arbejd med Aktioner", + "actions.mainMenu.createOrMaintain": "Opret eller revider Aktioner. Aktioner er grupperede efter typen på de vedrørte filer/objekter.", + "actions.mainMenu.newAction": "Opret", + "actions.duplicate.select": "Vælg en aktion til kopiering", + "actions.workAction.create.title": "Opret aktion", + "actions.workAction.edit.title": "Revider aktion \"{0}\"", + "actions.workAction.duplicate.title": "Kopier aktion \"{0}\"", + "actions.workAction.name": "Aktionsnavn", + "actions.workAction.command": "Kommandoer", + "actions.workAction.command.description": "Nedenfor er de tilgængelige variable, baseret på objekt typen. Du kan angive forskellige kommandoer på hver linie. Hver kommando er \"stateless\" og afvikles i eget job.", + "actions.workAction.extensions": "Typer", + "actions.workAction.extensions.description": "En komma-separeret liste af typer for denne aktion. Dette kan være en member type, en streamfile filtype, en objekt type eller en objekt attribut.", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "Typer understøttet af denne aktion.", + "actions.workAction.types.member": "Member", + "actions.workAction.types.member.description": "Source members i QSYS filsystemet", + "actions.workAction.types.streamfile": "Streamfile", + "actions.workAction.types.streamfile.description": "Filer i det integrerede filsystem (IFS)", + "actions.workAction.types.object": "Objekt", + "actions.workAction.types.object.description": "Objekter i QSYS filsystemet", + "actions.workAction.types.file": "Lokal fil (workspace)", + "actions.workAction.types.file.description": "Aktioner for lokale filer i VS Code Workspace.", + "actions.workAction.environment": "Miljø", + "actions.workAction.environment.description": "Miljø som kommandoerne skal afvikles i.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Afvikles som ILE kommando", + "actions.workAction.environment.qsh": "QSHELL", + "actions.workAction.environment.qsh.description": "Afvikles som kommando i QSHELL", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Afvikles som kommando i PASE", + "actions.workAction.delete.confirm": "Er du sikker på du vil slette \"{0}\"?", + "actions.workAction.refresh": "Opfrisk", + "actions.workAction.refresh.description": "Liste niveauet for opfriskning efter aktion er udført.", + "actions.workAction.refresh.no": "Ingen", + "actions.workAction.refresh.no.description": "Ingen opfriskning", + "actions.workAction.refresh.parent": "Container", + "actions.workAction.refresh.parent.description": "Den aktuelle container bliver opfrisket", + "actions.workAction.refresh.filter": "Filter", + "actions.workAction.refresh.filter.description": "Det aktuelle filter bliver opfrisket", + "actions.workAction.refresh.browser": "Vindue", + "actions.workAction.refresh.browser.description": "Hele vinduet bliver opfrisket", + "actions.workAction.runOnProtected": "Må afvikles på sikret/skrive-beskyttet", + "actions.workAction.runOnProtected.description": "Tillader afvikling af denne aktion på sikrede eller skrive-beskyttede mål", + + "debugger.status": "Debugger {0} status", + "loading.debugger.info": "Henter debugger information...", + "debug.server": "Debug Server", + "debug.service": "Debug Service", + "active.job": "Aktive job", + "jvm.info": "JVM information", + "debug.service.certificate": "Debug Service certifikat", + "service.certificate.exists": "Remote service certifikat eksisterer", + "local.certificate": "Lokalt certifikat", + "certificates.match": "Lokalt certifikat matcher værtens", + "generate.certificate": "Generer service certifikat", + "download.certificate": "Hent certifikat", + "not.found.in": "Ikke fundet i {0}", + "strdbgsvr.succeeded": "Debug server er startet.", + "strdbgsvr.failed": "Fejl ved start af debug server: {0}", + "enddbgsvr.succeeded": "Debug server er stoppet.", + "enddbgsvr.failed": "Fejl ved stop af debug server: {0}", + "start.debug.service.task": "Starter debug service...", + "start.debug.service.succeeded": "Debug service er startet.", + "start.debug.service.failed": "Fejl ved start af debug service: {0}", + "stop.debug.service.task": "Stopper debug service...", + "stop.debug.service.succeeded": "Debug service er stoppet.", + "stop.debug.service.failed": "Fejl ved stop af debug service: {0}", + "open.service.configuration": "Åbn konfiguration", + "detail.reading.error": "Fejl ved læsning af debug service detail fil {0}: {1}", + "start.debug.server.task": "Starter debug server...", + "stop.debug.server.task": "Stopper debug server...", + "remote.certificate.not.found": "Værtens certifikat er ikke fundet", + "remote.certificate.not.found.detail": "{0} er ikke fundet under {1}", + "local.certificate.not.found": "Lokalt certifikat er ikke fundet", + "local.dont.match.remote": "Lokalt certifikat matcher ikke værtens", + "debug.service.submit.options":"Debug Service submit options", + "debug.service.submit.options.prompt":"Valid parameters for SBMJOB" +} \ No newline at end of file diff --git a/src/locale/ids/da.ts b/src/locale/ids/da.ts deleted file mode 100644 index a8b5493a6..000000000 --- a/src/locale/ids/da.ts +++ /dev/null @@ -1,402 +0,0 @@ -import { Locale } from ".."; - -export const da: Locale = { - // Common words and texts: - 'Yes': `Ja`, - 'No': `Nej`, - 'Cancel': `Afbryd`, - 'Retry': `Prøv igen`, - 'Continue': `Fortsæt`, - 'directory': `mappe`, - 'shortcut': `genvej`, - 'streamfile': `fil`, - 'error': `fejl`, - 'errors': `fejl`, - 'clearList': `$(trash) Nulstil liste`, - 'clearedList': `Nulstillede liste.`, - 'currentLibrary': `(aktuelle bibliotek)`, - 'current': `aktuelle`, - 'duplicate': 'Kopier', - 'save': 'Gem', - 'delete': 'Slet', - 'cancel': 'Afbryd', - 'not.connected': 'Ikke forbundet til en IBM i', - 'text': 'Tekst', - 'members': 'Members', - 'length': 'Længde', - 'CCSID': 'CCSID', - 'lines': 'Linier', - 'created': 'Oprettet', - 'changed': 'Ændret', - 'size': 'Størrelse', - 'modified': 'Ændret', - 'owner': 'Ejer', - 'type': 'Type', - 'attribute': 'Attribut', - 'created_by': 'Oprettet af', - 'overwrite': 'Erstat', - 'overwrite_all': 'Erstat alle', - 'ask.overwrite': '{0} eksisterer allerede.\nVil du erstatte?', - 'skip': 'Spring over', - 'skip_all': 'Spring alle over', - 'password': 'Kodeord', - 'privateKey': 'Privat nøgle', - 'username': 'Brugernavn', - 'stored': `gemt`, - 'offline': 'Offline', - 'online': 'Online', - 'status': 'Status', - 'job': 'Job', - 'start': 'Start', - 'restart': 'Genstart', - 'stop': 'Stop', - 'listening.on.port': 'Lytter på port', - 'listening.on.ports': 'Lytter på porte', - 'overview': 'Overblik', - 'JOB_NAME_SHORT': 'Job navn', - 'JOB_USER': 'Job bruger', - 'JOB_NUMBER': 'Job nummer', - 'SUBSYSTEM': 'Subsystem', - 'AUTHORIZATION_NAME': 'Aktuelle bruger', - 'JOB_STATUS': 'Job status', - 'MEMORY_POOL': 'Memory pulje', - 'START_TIME': 'Start tid', - 'JAVA_HOME': 'Java Home', - 'USER_DIRECTORY': 'Bruger mappe', - 'CURRENT_HEAP_SIZE': 'Nuværende memory', - 'MAX_HEAP_SIZE': 'Maksimalt tilladt memory', - // Sandbox: - 'sandbox.input.user.title': `Bruger for server`, - 'sandbox.input.user.prompt': `Indtast brugernavn for {0}`, - 'sandbox.input.password.title': `Kodeord for server`, - 'sandbox.input.password.prompt': `Indtast kodeord for {0}@{1}`, - 'sandbox.failedToConnect.text': 'Fejl ved forbindelse til {0} som {1}', - 'sandbox.failedToConnect.title': `Fejl ved forbindelse`, - 'sandbox.noPassword': `Forbindelse til {0} afsluttet da intet kodeord blev angivet.`, - 'sandbox.alreadyConnected': `Denne Visual Studio Code instans er allerede forbundet til en server.`, - 'sandbox.connected.modal.title': `Tak for at afprøve Code for IBM i Sandbox!`, - 'sandbox.connected.modal.detail': `Du bruger dette system på egen risiko. Del ingen følsomme eller private informationer.`, - 'sandbox.noconnection.modal.title': `Åh nej! "Sandkassen" er ikke tilgængelig.`, - 'sandbox.noconnection.modal.detail': `Desværre, men "Sandkassen" er ikke tilgængelig lige nu. Prøv igen lidt senere.`, - // ConnectionBrowser: - 'connectionBrowser.connectTo.lastConnection': `Seneste forbindelse`, - 'connectionBrowser.connectTo.lastUsed': `Senest brugt: {0}`, - 'connectionBrowser.connectTo.title': `Seneste IBM i forbindelser`, - 'connectionBrowser.connectTo.error': `Brug Servere vinduet til at vælge hvilket system, der skal forbindes til.`, - 'connectionBrowser.renameConnection.prompt': `Omdøb forbindelsen '{0}'`, - 'connectionBrowser.renameConnection.alreadyExists': `Forbindelsen '{0}' findes allerede.`, - 'connectionBrowser.renameConnection.invalid.input': `Nyt forbindelses navn skal være forskelligt fra det nuværende navn`, - 'connectionBrowser.renameConnection.noConnectionFound': `Ingen forbindelse med navnet '{0}' blev fundet`, - 'connectionBrowser.renameConnection.noConnParmsFound': `Ingen parametre til forbindelsen '{0}' blev fundet`, - 'connectionBrowser.renameConnection.error': `Fejl ved omdøbning af forbindelsen '{0}'! {1}`, - 'connectionBrowser.deleteConnection.warning': `Er du sikker på at du vil slette forbindelsen '{0}'?`, - 'connectionBrowser.deleteConnection.multiple.warning': `Er du sikker på at du vil slette disse {0} forbindelser?`, - 'connectionBrowser.ServerItem.tooltip': ` (forrige forbindelse)`, - 'connectionBrowser.ServerItem.title': `Forbind`, - 'connectionBrowser.copyConnection.prompt': `Kopier forbindelsen '{0}'`, - 'connectionBrowser.copyConnection.placeholder': `Navn på ny forbindelse`, - 'connectionBrowser.copyConnection.already.exists': `Forbindelsen '{0}' eksisterer allerede`, - 'connectionBrowser.copyConnection.select.settings': `Vælg indstillingerne, der skal kopieres fra '{0}' til '{1}'`, - 'connectionBrowser.copyConnection.select.home.directory': `Aktuelle mappe`, - 'connectionBrowser.copyConnection.select.library.list': `Biblioteks listen`, - 'connectionBrowser.copyConnection.select.object.filters': `Objekt filtre`, - 'connectionBrowser.copyConnection.select.ifs.shortcuts': `IFS genveje`, - 'connectionBrowser.copyConnection.select.custom.variables': `Bruger variable`, - 'connectionBrowser.copyConnection.select.command.profiles': `Kommando profiler`, - 'connectionBrowser.copyConnection.select.connection.profiles': `Forbindelses profiler`, - // Login page: - 'login.title.create': `Forbind til IBM i`, - 'login.title.edit': `Login Indstillinger: '{0}'`, - 'login.host': `Værtsnavn eller IP adresse`, - 'login.port': `Port (SSH)`, - 'login.authDecision': `Angiv enten kodeord eller privat nøgle - ikke begge dele.`, - 'login.removeAuth': `Fjern kodeord+nøgle`, - 'login.authRemoved': `Kodeord og privat nøgle er fjernet for '{0}'.`, - 'login.password.label': 'Angiv kun et kodeord hvis du ønsker at ændre det gemte eller oprette et nyt.', - 'login.password.updated': `Kodeord er opdateret og bruges for '{0}'.`, - 'login.savePassword': `Gem kodeord`, - 'login.privateKey.label': `Angiv kun en privat nøgle hvis du ønsker at opdatere den aktuelle eller indstille en ny.`, - 'login.privateKey.support': 'OpenSSH, RFC4716 og PPK formater understøttes.', - 'login.privateKey.updated': `Privat nøgle er opdateret og bruges for '{0}'.`, - // helpView: - 'helpView.getStarted': `Dokumentation`, - 'helpView.officialForum': `Forum`, - 'helpView.reviewIssues': `Se fejlrapporter`, - 'helpView.reportIssue': `Opret en fejlrapport`, - // ifsBrowser: - 'ifsBrowser.changeWorkingDirectory.prompt': `Skifter aktuelle mappe`, - 'ifsBrowser.changeWorkingDirectory.message': `Aktuelle mappe er skiftet til {0}.`, - 'ifsBrowser.addIFSShortcut.prompt': `Sti til IFS mappe`, - 'ifsBrowser.addIFSShortcut.error': `{0} er ikke en mappe.`, - 'ifsBrowser.addIFSShortcut.errorMessage': `Fejl ved oprettelse af IFS genvej! {0}`, - 'ifsBrowser.removeIFSShortcut.placeHolder': `Vælg IFS genvej til sletning`, - 'ifsBrowser.createDirectory.prompt': `Sti til ny mappe`, - 'ifsBrowser.createDirectory.errorMessage': `Fejl ved oprettelse af ny mappe! {0}`, - 'ifsBrowser.createStreamfile.prompt': `Navn på ny streamfile`, - 'ifsBrowser.createStreamfile.infoMessage': `Opretter streamfile {0}.`, - 'ifsBrowser.createStreamfile.errorMessage': `Fejl ved oprettelse af ny streamfile! {0}`, - 'ifsBrowser.uploadStreamfile.uploadedFiles': `Upload er udført.`, - 'ifsBrowser.uploadStreamfile.errorMessage': `Fejl ved upload af filer! {0}`, - 'ifsBrowser.uploadStreamfile.noFilesSelected': `Ingen filer eller mapper er valgt til upload.`, - 'ifsBrowser.uploadStreamfile.process.uploading': `Upload`, - 'ifsBrowser.uploadStreamfile.process.uploading.files': `sender {0} file(r)...`, - 'ifsBrowser.uploadStreamfile.process.uploading.directory': 'sender {0} mappe(r)...', - 'ifsBrowser.uploadStreamfile.ask': 'Vil du kopiere eller flytte det valgte til {0}?', - 'ifsBrowser.uploadStreamfile.copy': 'Kopier', - 'ifsBrowser.uploadStreamfile.move': 'Flyt', - 'ifsBrowser.uploadStreamfile.copy.failed': 'Fejl ved kopiering af det valgte til {0}: {1}', - 'ifsBrowser.uploadStreamfile.move.failed': 'Fejl ved flytning af det valgte til {0}: {1}', - 'ifsBrowser.uploadStreamfile.select.type.folders': 'Mapper', - 'ifsBrowser.uploadStreamfile.select.type.files': 'Filer', - 'ifsBrowser.uploadStreamfile.select.type.title': 'Hvad ønsker du at uploade?', - 'ifsBrowser.deleteIFS.dirNotAllowed': `Ikke tilladt at slette valgte mapper fra IFS Browser.\n{0}`, - 'ifsBrowser.deleteIFS.warningMessage': `Er du sikker på at du vil slette {0}?`, - 'ifsBrowser.deleteIFS.multi.warningMessage': `Er du sikker på at du vil slette de {0} valgte filer?`, - 'ifsBrowser.deleteIFS.deletionPrompt': `Når du har slettet mappen, kan den ikke retableres.\nVenligst tast \"{0}\" for at bekræfte sletning.`, - 'ifsBrowser.deleteIFS.deletionPrompt2': ` (Tryk \'Escape\' for at afbryde)`, - 'ifsBrowser.deleteIFS.progress': `Sletning af {0} element(er)...`, - 'ifsBrowser.deleteIFS.errorMessage': `Fejl ved sletning af streamfile! {0}`, - 'ifsBrowser.deleteIFS.cancelled': `Sletning afbrudt.`, - 'ifsBrowser.deleteIFS.default.home.dir': '{0} var den aktuelle mappe; det er nu {1}.', - 'ifsBrowser.moveIFS.prompt': `Nyt navn`, - 'ifsBrowser.moveIFS.errorMessage': `Fejl ved flytning/omdøbning af {0}! {1}`, - 'ifsBrowser.moveIFS.renamed': `{0} blev omdøbt til {1}.`, - 'ifsBrowser.moveIFS.moved': `{0} blev flyttet til {1}.`, - 'ifsBrowser.copyIFS.prompt': `Nyt navn`, - 'ifsBrowser.copyIFS.infoMessage': `{0} blev kopieret til {1}.`, - 'ifsBrowser.copyIFS.errorMessage': `Fejl ved kopiering af {0}! {1}`, - 'ifsBrowser.searchIFS.prompt': `Indtast IFS mappe for søgning`, - 'ifsBrowser.searchIFS.title': `Søg mappe`, - 'ifsBrowser.searchIFS.previousSearches': `Forrige søgninger`, - 'ifsBrowser.searchIFS.placeholder': `Indtast søgetekst eller vælg en af de tidligere søgninger.`, - 'ifsBrowser.searchIFS.placeholder2': `Indtast søgetekst.`, - 'ifsBrowser.searchIFS.title2': `Søg i {0}`, - 'ifsBrowser.searchIFS.noGrep': `'grep' skal være installeret på systemet for IFS søgning.`, - 'ifsBrowser.downloadStreamfile.downloading': 'Henter', - 'ifsBrowser.downloadStreamfile.complete': `Hentning gennemført.`, - 'ifsBrowser.downloadStreamfile.errorMessage': `Fejl under hentning: {0}`, - 'ifsBrowser.getChildren.errorMessage': `Fejl ved læsning af objekter.`, - 'ifsBrowser.handleFileListErrors.errorMessage': `{0} {1} opstod ved visning af filer.`, - 'ifsBrowser.doSearchInStreamfiles.title': `Søger`, - 'ifsBrowser.doSearchInStreamfiles.progressMessage': `'{0}' i {1}.`, - 'ifsBrowser.doSearchInStreamfiles.noResults': `Ingen resultater blev fundet ved søgning efter '{0}' i {1}.`, - 'ifsBrowser.doSearchInStreamfiles.errorMessage': `Fejl ved søgning i filer.`, - 'ifsBrowser.copyToStreamfile.infoMessage': `{0} member(s) kopieret til streamfile(s) i {1}.`, - 'ifsBrowser.copyToStreamfile.failed': `Fejl ved kopiering af member(s) til {0}: {1}`, - // LibraryListView: - 'LibraryListView.changeCurrentLibrary.currentlyActive': `Nuværende`, - 'LibraryListView.changeCurrentLibrary.recentlyUsed': `Tidligere`, - 'LibraryListView.changeCurrentLibrary.placeholder': `Filter eller nyt bibliotek til at sætte som aktuelle`, - 'LibraryListView.changeCurrentLibrary.title': `Skift aktuelle bibliotek`, - 'LibraryListView.changeCurrentLibrary.changedCurrent': `Skiftede aktuelle bibliotek til {0}.`, - 'LibraryListView.changeCurrentLibrary.alreadyCurrent': `{0} er allerede det aktuelle bibliotek.`, - 'LibraryListView.changeUserLibraryList.prompt': `Skift biblioteksliste (du kan bruge '*reset')`, - 'LibraryListView.changeUserLibraryList.removedLibs': `De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}`, - 'LibraryListView.addToLibraryList.prompt': `Tilføj bibliotek`, - 'LibraryListView.addToLibraryList.tooLong': `Bibioteksnavn er for langt.`, - 'LibraryListView.addToLibraryList.alreadyInList': `Bibliotek {0} er allerede i bibliotekslisten.`, - 'LibraryListView.addToLibraryList.invalidLib': `Bibliotek {0} findes ikke.`, - 'LibraryListView.addToLibraryList.addedLib': `Bibliotek {0} blev tilføjet til bibliotekslisten.`, - 'LibraryListView.addToLibraryList.removedLibs': `De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}`, - 'LibraryListView.removeFromLibraryList.removedLib': `Bibliotek {0} blev fjernet fra bibliotekslisten.`, - 'LibraryListView.cleanupLibraryList.removedLibs': `De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}`, - 'LibraryListView.cleanupLibraryList.validated': `Bibliotekslisten blev valideret uden fejl.`, - 'LibraryListView.setCurrentLibrary.failed': 'Fejl ved skift til {0} som aktuelt bibliotek: {1}', - // objectBrowser: - 'objectBrowser.delete.confirm': 'Er du sikker på at du vil slette {0}?', - 'objectBrowser.delete.multiple.confirm': 'Er du sikker på at du vil slette de {0} valgte elementer?', - 'objectBrowser.delete.progress': 'Sletter', - 'objectBrowser.createMember.prompt': `Navn på nyt member (member.ext)`, - 'objectBrowser.createMember.progressTitle': `Opretter member {0}...`, - 'objectBrowser.createMember.errorMessage': `Fejl ved oprettelse af member {0}: {1}`, - 'objectBrowser.copyMember.prompt': `Ny sti til kopiering af source member`, - 'objectBrowser.copyMember.errorMessage': `Kan ikke kopiere et member til sig selv!`, - 'objectBrowser.copyMember.progressTitle': `Opretter member {0}...`, - 'objectBrowser.copyMember.overwrite': `Vil du overskrive member {0}?`, - 'objectBrowser.copyMember.errorMessage2': `Member {0} eksisterer allerede!`, - 'objectBrowser.copyMember.errorMessage3': `Fejl ved oprettelse af member {0}: {1}`, - 'objectBrowser.deleteMember.errorMessage': `Fejl ved sletning af member! {0}`, - 'objectBrowser.updateMemberText.prompt': `Opdater beskrivelse af member {0}, *BLANK for ingen beskrivelse`, - 'objectBrowser.updateMemberText.errorMessage': `Fejl ved ændring af member beskrivelse! {0}`, - 'objectBrowser.renameMember.prompt': `Omdøb member {0}`, - 'objectBrowser.renameMember.errorMessage': `Fejl ved omdøbning af member! {0}`, - 'objectBrowser.renameMember.invalid.input': `Nyt member navn skal være forskelligt fra det nuværende navn`, - 'objectBrowser.uploadAndReplaceMemberAsFile.infoMessage': `Fil blev sendt til member.`, - 'objectBrowser.uploadAndReplaceMemberAsFile.errorMessage': `Fejl ved afsendelse af fil! {0}`, - 'objectBrowser.downloadMemberContent.infoMessage': `Members download complete.`, - 'objectBrowser.downloadMemberContent.errorMessage': `Error downloading member(s)! {0}`, - 'objectBrowser.downloadMemberContent.cancel': `Members download cancelled.`, - 'objectBrowser.downloadMemberContent.download.progress': 'Downloading {0} members', - 'objectBrowser.downloadMemberContent.download.cpytostmf': 'copying to streamfiles', - 'objectBrowser.downloadMemberContent.download.streamfiles': 'getting streamfiles', - 'objectBrowser.searchSourceFile.prompt': `Indtast LIB/SPF/member.ext til søgning (member.ext er valgfrit og kan indeholde mønstertegn)`, - 'objectBrowser.searchSourceFile.title': `Søg source fil`, - 'objectBrowser.searchSourceFile.invalidForm': `Venligst indtast værdi på formatet LIB/SPF/member.ext`, - 'objectBrowser.searchSourceFile.aspText': `(i ASP {0})`, - 'objectBrowser.searchSourceFile.previousSearches': `Forrige søgninger`, - 'objectBrowser.searchSourceFile.placeholder': `Indtast søgetekst eller vælg en af de tidligere søgninger.`, - 'objectBrowser.searchSourceFile.placeholder2': `Indtast søgetekst.`, - 'objectBrowser.searchSourceFile.title2': `Søg i {0} {1}`, - 'objectBrowser.searchSourceFile.errorMessage': `Kan ikke søge med *ALL.`, - 'objectBrowser.createFilter': `Opret nyt filter`, - 'objectBrowser.createLibrary.prompt': `Navn på nyt bibliotek`, - 'objectBrowser.createLibrary.errorMessage': `Kan ikke oprette bibliotek "{0}": {1}`, - 'objectBrowser.createLibrary.infoMessage': `Vil du tilføje det nyt bibliotek til bibliotekslisten?`, - 'objectBrowser.createLibrary.errorMessage2': `Biblioteksnavn er for langt.`, - 'objectBrowser.createSourceFile.prompt': `Navn på ny source fil`, - 'objectBrowser.createSourceFile.infoMessage': `Opretter source fil {0}.`, - 'objectBrowser.createSourceFile.errorMessage': `Fejl ved oprettelse af source fil! {0}`, - 'objectBrowser.createSourceFile.errorMessage2': `Source filnavn må være 10 tegn eller mindre.`, - 'objectBrowser.changeObjectDesc.prompt': `Opdater objekt beskrivelse for {0}, *BLANK for ingen beskrivelse`, - 'objectBrowser.changeObjectDesc.errorMessage': `Objekt beskrivelse må være 50 tegn eller mindre.`, - 'objectBrowser.changeObjectDesc.infoMessage': `Ændrede objekt beskrivelsen for {0} {1}.`, - 'objectBrowser.changeObjectDesc.errorMessage2': `Fejl ved ændring af objekt beskrivelse for {0}! {1}`, - 'objectBrowser.copyObject.prompt': `Kopier objekt til new bibliotek/objekt`, - 'objectBrowser.copyObject.errorMessage': `Forkert sti: {0}. Brug formatet LIB/OBJ`, - 'objectBrowser.copyObject.errorMessage2': `Biblioteksnavn må være 10 tegn eller mindre.`, - 'objectBrowser.copyObject.errorMessage3': `Objektnavn må være 10 tegn eller mindre.`, - 'objectBrowser.copyObject.infoMessage': `Kopierede objekt {0} {1} til {2}.`, - 'objectBrowser.copyObject.infoMessage2': `Kopierede objekt {0} {1} til {2}. Opfrisk object browser.`, - 'objectBrowser.copyObject.errorMessage4': `Fejl ved kopiering af objekt {0}! {1}`, - 'objectBrowser.deleteObject.errorMessage': `Fejl ved sletning af objekt! {0}`, - 'objectBrowser.renameObject.prompt': `Omdøb objekt`, - 'objectBrowser.renameObject.errorMessage': `Objektnavn må være 10 tegn eller mindre.`, - 'objectBrowser.renameObject.infoMessage': `Omdøbte objekt {0} {1} til {2}.`, - 'objectBrowser.renameObject.errorMessage2': `Fejl ved omdøbning af objekt {0}! {1}`, - 'objectBrowser.renameObject.progress': `Omdøber objekt {0} {1} til {2}...`, - 'objectBrowser.moveObject.prompt': `Flyt objekt`, - 'objectBrowser.moveObject.errorMessage': `Objekt navn må være 10 tegn eller mindre.`, - 'objectBrowser.moveObject.infoMessage': `Flyttede objekt {0} {1} til {2}.`, - 'objectBrowser.moveObject.infoMessage2': `Flyttede objekt {0} {1} til {2}. Opfrisk object browser.`, - 'objectBrowser.moveObject.errorMessage2': `Fejl ved flytning af objekt {0}! {1}`, - 'objectBrowser.moveObject.progress': `Flytter objekt {0} {1} til {2}...`, - 'objectBrowser.doSearchInSourceFile.title': `Søgning`, - 'objectBrowser.doSearchInSourceFile.progressMessage': `Henter member liste for {0}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage1': `'{0}' i {1}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage2': `Dette kan tage noget tid da der er {0} members. Søger stadig efter '{1}' i {2}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage3': `Hvad er egentligt så specielt med '{0}'?`, - 'objectBrowser.doSearchInSourceFile.searchMessage4': `Søger stadig efter '{0}' i {1}...`, - 'objectBrowser.doSearchInSourceFile.searchMessage5': `Hvad med at hente en kop kaffe mens du venter?`, - 'objectBrowser.doSearchInSourceFile.searchMessage6': `Uha, dette tager virkelig lang tid. Lad os håbe du får det ønskede resultat.`, - 'objectBrowser.doSearchInSourceFile.searchMessage7': `Der er 10 slags mennesker - dem der forstår binært og dem, der ikke gør!`, - 'objectBrowser.doSearchInSourceFile.searchMessage8': `Hvordan i alverden ender man med {0} members?`, - 'objectBrowser.doSearchInSourceFile.searchMessage9': `'{0}' i {1}.`, - 'objectBrowser.doSearchInSourceFile.notFound': `Søgning efter '{0}' i {1} gav intet resultat.`, - 'objectBrowser.doSearchInSourceFile.noMembers': `Der er ingen members at søge i.`, - 'objectBrowser.doSearchInSourceFile.errorMessage': `Fejl ved søgning i members: {0}`, - // ProfilesView: - 'ProfilesView.saveConnectionProfile.prompt': `Navn på profil`, - 'ProfilesView.saveConnectionProfile.infoMessage': `Gemte aktuelle indstillinger til profil '{0}'.`, - 'ProfilesView.deleteConnectionProfile.warningMessage': `Er du sikker på at du vil slette profilen '{0}'?`, - 'ProfilesView.loadConnectionProfile.infoMessage': `Skiftede til profilen '{0}'.`, - 'ProfilesView.loadCommandProfile.infoMessage': `Skiftede til profilen '{0}'.`, - 'ProfilesView.loadCommandProfile.warningMessage': `Fejl ved at hente bibliotekslisten fra kommando. Feature er ikke installeret.`, - 'ProfilesView.loadCommandProfile.errorMessage': `Fejl ved at hente bibliotekslisten fra kommando: {0}`, - 'ProfilesView.setToDefault.infoMessage': `Nulstil til standard`, - 'ProfilesView.setToDefault.detail': `Dette vil nulstille bibliotekslisten, aktuelle mappe og Bruger Variable.`, - //Actions - 'actions.CURLIB': 'Aktuelle bibliotek (sættes i Library List)', - 'actions.USERNAME': `Brugernavn for forbindelsen`, - 'actions.WORKDIR': `Aktuel arbejdsmappe, kan ændres i IFS Browser`, - 'actions.HOST': `Host navn eller IP adresse fra den aktuelle forbindelse`, - 'actions.BRANCH': `Nuværende git-gren`, - 'actions.BRANCHLIB': `Bibliotek for den nuværende Git-gren`, - 'actions.BUILDLIB': `Det samme som &CURLIB`, - 'actions.LIBLC': `Liste af biblioteker adskilt af komma`, - 'actions.LIBLS': `Liste af biblioteker adskilt af mellemrum`, - 'actions.OPENLIB': `Biblioteksnavn med source member (&OPENLIBL for små bogstaver)`, - 'actions.OPENSPF': `Source fil navn med source member (&OPENSPFL for små bogstaver)`, - 'actions.OPENMBR': `Navn på source member (&OPENMBRL for små bogstaver)`, - 'actions.member.EXT': `Type af source member (&EXTL for små bogstaver)`, - 'actions.FULLPATH': `Fulde sti på filen på fjernsystemet`, - 'actions.FILEDIR': `Katalog over filen på fjernsystemet`, - 'actions.RELATIVEPATH': `Relativ sti til streamfilen fra arbejdsbiblioteket eller arbejdsområdet`, - 'actions.PARENT': `Navn på forrige mappe eller source fil`, - 'actions.BASENAME': `Navn på filen, inklusive filtypen`, - 'actions.streamfile.NAME': `Navn på filen (&NAMEL for små bogstaver)`, - 'actions.streamfile.EXT': `Filtypen (&EXTL for små bogstaver)`, - 'actions.LIBRARY': `Biblioteksnavn med objektet (&LIBRARYL for små bogstaver)`, - 'actions.NAME': `Navn på objektet (&NAMEL for små bogstaver)`, - 'actions.NAMEL': `Navn på objektet med små bogstaver`, - 'actions.object.TYPE': `Typen af objektet (&TYPEL for små bogstaver)`, - 'actions.object.EXT': `Objektets attribut (&EXTL for små bogstaver)`, - 'actions.EXT': `Filtypen`, - 'actions.EXTL': `Filtypen med små bogstaver`, - 'actions.mainMenu.workWithActions': `Arbejd med Aktioner`, - 'actions.mainMenu.createOrMaintain': `Opret eller revider Aktioner. Aktioner er grupperede efter typen på de vedrørte filer/objekter.`, - 'actions.mainMenu.newAction': `Opret`, - 'actions.duplicate.select': `Vælg en aktion til kopiering`, - 'actions.workAction.create.title': `Opret aktion`, - 'actions.workAction.edit.title': `Revider aktion "{0}"`, - 'actions.workAction.duplicate.title': `Kopier aktion "{0}"`, - 'actions.workAction.name': `Aktionsnavn`, - 'actions.workAction.command': `Kommandoer`, - 'actions.workAction.command.description': `Nedenfor er de tilgængelige variable, baseret på objekt typen. Du kan angive forskellige kommandoer på hver linie. Hver kommando er "stateless" og afvikles i eget job.`, - 'actions.workAction.extensions': `Typer`, - 'actions.workAction.extensions.description': `En komma-separeret liste af typer for denne aktion. Dette kan være en member type, en streamfile filtype, en objekt type eller en objekt attribut.`, - 'actions.workAction.types': `Type`, - 'actions.workAction.types.description': `Typer understøttet af denne aktion.`, - 'actions.workAction.types.member': `Member`, - 'actions.workAction.types.member.description': `Source members i QSYS filsystemet`, - 'actions.workAction.types.streamfile': `Streamfile`, - 'actions.workAction.types.streamfile.description': `Filer i det integrerede filsystem (IFS)`, - 'actions.workAction.types.object': `Objekt`, - 'actions.workAction.types.object.description': `Objekter i QSYS filsystemet`, - 'actions.workAction.types.file': `Lokal fil (workspace)`, - 'actions.workAction.types.file.description': `Aktioner for lokale filer i VS Code Workspace.`, - 'actions.workAction.environment': `Miljø`, - 'actions.workAction.environment.description': `Miljø som kommandoerne skal afvikles i.`, - 'actions.workAction.environment.ile': `ILE`, - 'actions.workAction.environment.ile.description': `Afvikles som ILE kommando`, - 'actions.workAction.environment.qsh': `QSHELL`, - 'actions.workAction.environment.qsh.description': `Afvikles som kommando i QSHELL`, - 'actions.workAction.environment.pase': `PASE`, - 'actions.workAction.environment.pase.description': `Afvikles som kommando i PASE`, - 'actions.workAction.delete.confirm': `Er du sikker på du vil slette "{0}"?`, - 'actions.workAction.refresh': 'Opfrisk', - 'actions.workAction.refresh.description': 'Liste niveauet for opfriskning efter aktion er udført.', - 'actions.workAction.refresh.no': 'Ingen', - 'actions.workAction.refresh.no.description': 'Ingen opfriskning', - 'actions.workAction.refresh.parent': 'Container', - 'actions.workAction.refresh.parent.description': 'Den aktuelle container bliver opfrisket', - 'actions.workAction.refresh.filter': 'Filter', - 'actions.workAction.refresh.filter.description': 'Det aktuelle filter bliver opfrisket', - 'actions.workAction.refresh.browser': 'Vindue', - 'actions.workAction.refresh.browser.description': 'Hele vinduet bliver opfrisket', - 'actions.workAction.runOnProtected': 'Må afvikles på sikret/skrive-beskyttet', - 'actions.workAction.runOnProtected.description': 'Tillader afvikling af denne aktion på sikrede eller skrive-beskyttede mål', - //Debugger - 'debugger.status': 'Debugger {0} status', - 'loading.debugger.info': 'Henter debugger information...', - 'debug.server': 'Debug Server', - 'debug.service': 'Debug Service', - 'active.job': 'Aktive job', - 'jvm.info': 'JVM information', - 'debug.service.certificate': 'Debug Service certifikat', - 'service.certificate.exists': 'Remote service certifikat eksisterer', - 'local.certificate': 'Lokalt certifikat', - 'certificates.match': 'Lokalt certifikat matcher værtens', - 'generate.certificate': 'Generer service certifikat', - 'download.certificate': 'Hent certifikat', - 'not.found.in': 'Ikke fundet i {0}', - 'strdbgsvr.succeeded': 'Debug server er startet.', - 'strdbgsvr.failed': 'Fejl ved start af debug server: {0}', - 'enddbgsvr.succeeded': 'Debug server er stoppet.', - 'enddbgsvr.failed': 'Fejl ved stop af debug server: {0}', - 'start.debug.service.task': 'Starter debug service...', - 'start.debug.service.succeeded': 'Debug service er startet.', - 'start.debug.service.failed': 'Fejl ved start af debug service: {0}', - 'stop.debug.service.task': 'Stopper debug service...', - 'stop.debug.service.succeeded': 'Debug service er stoppet.', - 'stop.debug.service.failed': 'Fejl ved stop af debug service: {0}', - 'open.service.configuration': 'Åbn konfiguration', - 'detail.reading.error': 'Fejl ved læsning af debug service detail fil {0}: {1}', - 'start.debug.server.task': 'Starter debug server...', - 'stop.debug.server.task': 'Stopper debug server...', - 'remote.certificate.not.found': 'Værtens certifikat er ikke fundet', - 'remote.certificate.not.found.detail': '{0} er ikke fundet under {1}', - 'local.certificate.not.found': 'Lokalt certifikat er ikke fundet', - 'local.dont.match.remote': 'Lokalt certifikat matcher ikke værtens', - 'debug.service.submit.options':'Debug Service submit options', - 'debug.service.submit.options.prompt':'Valid parameters for SBMJOB' -}; \ No newline at end of file diff --git a/src/locale/ids/en.json b/src/locale/ids/en.json new file mode 100644 index 000000000..fcc080b33 --- /dev/null +++ b/src/locale/ids/en.json @@ -0,0 +1,399 @@ + { + "Yes": "Yes", + "No": "No", + "Cancel": "Cancel", + "Retry": "Retry", + "Continue": "Continue", + "directory": "directory", + "shortcut": "shortcut", + "streamfile": "streamfile", + "error": "error", + "errors": "errors", + "clearList": "$(trash) Clear list", + "clearedList": "Cleared list.", + "currentLibrary": "(current library)", + "current": "current", + "duplicate": "Duplicate", + "save": "Save", + "delete": "Delete", + "cancel": "Cancel", + "not.connected": "Not connected to an IBM i", + "text": "Text", + "members": "Members", + "length": "Length", + "CCSID": "CCSID", + "lines": "Lines", + "created": "Created", + "changed": "Changed", + "size": "Size", + "modified": "Modified", + "owner": "Owner", + "type": "Type", + "attribute": "Attribute", + "created_by": "Created by", + "overwrite": "Overwrite", + "overwrite_all": "Overwrite all", + "ask.overwrite": "{0} already exists.\nDo you want to replace it?", + "skip": "Skip", + "skip_all": "Skip all", + "password": "Password", + "privateKey": "Private Key", + "username": "Username", + "stored": "stored", + "offline": "Offline", + "online": "Online", + "status": "Status", + "job": "Job", + "start": "Start", + "restart": "Restart", + "stop": "Stop", + "listening.on.port": "Listening on port", + "listening.on.ports": "Listening on ports", + "overview": "Overview", + "JOB_NAME_SHORT": "Job name", + "JOB_USER": "Job user", + "JOB_NUMBER": "Job number", + "SUBSYSTEM": "Subsystem", + "AUTHORIZATION_NAME": "Current user", + "JOB_STATUS": "Job status", + "MEMORY_POOL": "Memory pool", + "START_TIME": "Start time", + "JAVA_HOME": "Java Home", + "USER_DIRECTORY": "User directory", + "CURRENT_HEAP_SIZE": "Current memory", + "MAX_HEAP_SIZE": "Maximum allowed memory", + + "sandbox.input.user.title": "User for server", + "sandbox.input.user.prompt": "Enter username for {0}", + "sandbox.input.password.title": "Password for server", + "sandbox.input.password.prompt": "Enter password for {0}@{1}", + "sandbox.failedToConnect.text": "Failed to connect to {0} as {1}", + "sandbox.failedToConnect.title": "Failed to connect", + "sandbox.noPassword": "Connection to {0} ended as no password was provided.", + "sandbox.alreadyConnected": "This Visual Studio Code instance is already connected to a server.", + "sandbox.connected.modal.title": "Thanks for trying the Code for IBM i Sandbox!", + "sandbox.connected.modal.detail": "You are using this system at your own risk. Do not share any sensitive or private information.", + "sandbox.noconnection.modal.title": "Oh no! The sandbox is down.", + "sandbox.noconnection.modal.detail": "Sorry, but the sandbox is offline right now. Try again another time.", + + "connectionBrowser.connectTo.lastConnection": "Last connection", + "connectionBrowser.connectTo.lastUsed": "Last used: {0}", + "connectionBrowser.connectTo.title": "Last IBM i connections", + "connectionBrowser.connectTo.error": "Use the Server Browser to select which system to connect to.", + "connectionBrowser.renameConnection.prompt": "Rename connection \"{0}\"", + "connectionBrowser.renameConnection.alreadyExists": "Connection \"{0}\" already exists.", + "connectionBrowser.renameConnection.invalid.input": "New connection name must be different from its current name", + "connectionBrowser.renameConnection.noConnectionFound": "No connection named \"{0}\" was found", + "connectionBrowser.renameConnection.noConnParmsFound": "No parameters for connection \"{0}\" was found", + "connectionBrowser.renameConnection.error": "Error renaming connection \"{0}\"! {1}", + "connectionBrowser.deleteConnection.warning": "Are you sure you want to delete the connection \"{0}\"?", + "connectionBrowser.deleteConnection.multiple.warning": "Are you sure you want to delete these {0} connections?", + "connectionBrowser.ServerItem.tooltip": " (previous connection)", + "connectionBrowser.ServerItem.title": "Connect", + "connectionBrowser.copyConnection.prompt": "Copy connection \"{0}\"", + "connectionBrowser.copyConnection.placeholder": "New connection name", + "connectionBrowser.copyConnection.already.exists": "Connection \"{0}\" already exists", + "connectionBrowser.copyConnection.select.settings": "Select the settings to copy from \"{0}\" to \"{1}\"", + "connectionBrowser.copyConnection.select.home.directory": "Home directory", + "connectionBrowser.copyConnection.select.library.list": "Library list", + "connectionBrowser.copyConnection.select.object.filters": "Object filters", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS shortcuts", + "connectionBrowser.copyConnection.select.custom.variables": "Custom variables", + "connectionBrowser.copyConnection.select.command.profiles": "Command profiles", + "connectionBrowser.copyConnection.select.connection.profiles": "Connection profiles", + + "login.title.create": "Connect to IBM i", + "login.title.edit": "Login Settings: \"{0}\"", + "login.host": "Host or IP Address", + "login.port": "Port (SSH)", + "login.authDecision": "Only provide either the password or a private key - not both.", + "login.removeAuth": "Remove auth methods", + "login.authRemoved": "Authentication methods removed for \"{0}\".", + "login.password.label": "Only provide a password if you want to update an existing one or set a new one.", + "login.password.updated": "Password updated and will be used for \"{0}\".", + "login.savePassword": "Save Password", + "login.privateKey.label": "Only provide a private key if you want to update from the existing one or set one.", + "login.privateKey.support": "OpenSSH, RFC4716 and PPK formats are supported.", + "login.privateKey.updated": "Private key updated and will be used for \"{0}\".", + + "helpView.getStarted": "Get started", + "helpView.officialForum": "Open official Forum", + "helpView.reviewIssues": "Review Issues", + "helpView.reportIssue": "Report an Issue", + + "ifsBrowser.changeWorkingDirectory.prompt": "Changing working directory", + "ifsBrowser.changeWorkingDirectory.message": "Working directory changed to {0}.", + "ifsBrowser.addIFSShortcut.prompt": "Path to IFS directory", + "ifsBrowser.addIFSShortcut.error": "{0} is not a directory.", + "ifsBrowser.addIFSShortcut.errorMessage": "Error creating IFS shortcut! {0}", + "ifsBrowser.removeIFSShortcut.placeHolder": "Select IFS shortcut to remove", + "ifsBrowser.createDirectory.prompt": "Path of new folder", + "ifsBrowser.createDirectory.errorMessage": "Error creating new directory! {0}", + "ifsBrowser.createStreamfile.prompt": "Name of new streamfile", + "ifsBrowser.createStreamfile.infoMessage": "Creating streamfile {0}.", + "ifsBrowser.createStreamfile.errorMessage": "Error creating new streamfile! {0}", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload completed.", + "ifsBrowser.uploadStreamfile.errorMessage": "Error uploading files! {0}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "No files or folders selected for upload.", + "ifsBrowser.uploadStreamfile.process.uploading": "Upload", + "ifsBrowser.uploadStreamfile.process.uploading.files": "sending {0} file(s)...", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "sending {0} directory...", + "ifsBrowser.uploadStreamfile.ask": "Do you want to copy or move the selection to {0}?", + "ifsBrowser.uploadStreamfile.copy": "Copy", + "ifsBrowser.uploadStreamfile.move": "Move", + "ifsBrowser.uploadStreamfile.copy.failed": "Failed to copy selection to {0}: {1}", + "ifsBrowser.uploadStreamfile.move.failed": "Failed to move selection to {0}: {1}", + "ifsBrowser.uploadStreamfile.select.type.folders": "Folders", + "ifsBrowser.uploadStreamfile.select.type.files": "Files", + "ifsBrowser.uploadStreamfile.select.type.title": "What do you want to upload?", + "ifsBrowser.deleteIFS.dirNotAllowed": "Unable to delete protected directories from the IFS Browser!\n{0}", + "ifsBrowser.deleteIFS.warningMessage": "Are you sure you want to delete {0}?", + "ifsBrowser.deleteIFS.multi.warningMessage": "Are you sure you want to delete the {0} selected files?", + "ifsBrowser.deleteIFS.deletionPrompt": "Once you delete the directory, it cannot be restored.\nPlease type \"{0}\" to confirm deletion.", + "ifsBrowser.deleteIFS.deletionPrompt2": " (Press \"Escape\" to cancel)", + "ifsBrowser.deleteIFS.progress": "Deleting {0} element(s)...", + "ifsBrowser.deleteIFS.errorMessage": "Error deleting streamfile! {0}", + "ifsBrowser.deleteIFS.cancelled": "Deletion canceled.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} was the working directory; it is now {1}.", + "ifsBrowser.moveIFS.prompt": "Name of new path", + "ifsBrowser.moveIFS.errorMessage": "Error renaming/moving {0}! {1}", + "ifsBrowser.moveIFS.renamed": "{0} was renamed to {1}.", + "ifsBrowser.moveIFS.moved": "{0} was moved to {1}.", + "ifsBrowser.copyIFS.prompt": "Name of new path", + "ifsBrowser.copyIFS.infoMessage": "{0} was copied to {1}.", + "ifsBrowser.copyIFS.errorMessage": "Error copying {0}! {1}", + "ifsBrowser.searchIFS.prompt": "Enter IFS directory to search", + "ifsBrowser.searchIFS.title": "Search directory", + "ifsBrowser.searchIFS.title2": "Search {0}", + "ifsBrowser.searchIFS.previousSearches": "Previous search terms", + "ifsBrowser.searchIFS.placeholder": "Enter search term or select one of the previous search terms.", + "ifsBrowser.searchIFS.placeholder2": "Enter search term.", + "ifsBrowser.searchIFS.noGrep": "grep must be installed on the remote system for the IFS search.", + "ifsBrowser.downloadStreamfile.downloading": "Downloading", + "ifsBrowser.downloadStreamfile.complete": "Download complete", + "ifsBrowser.downloadStreamfile.errorMessage": "Error downloading file(s): {0}", + "ifsBrowser.getChildren.errorMessage": "Error loading objects.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} occurred while listing files.", + "ifsBrowser.doSearchInStreamfiles.title": "Searching", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" in {1}.", + "ifsBrowser.doSearchInStreamfiles.noResults": "No results found searching for \"{0}\" in {1}.", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Error searching streamfiles.", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", + "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", + + "LibraryListView.changeCurrentLibrary.currentlyActive": "Currently active", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Recently used", + "LibraryListView.changeCurrentLibrary.placeholder": "Filter or new library to set as current library", + "LibraryListView.changeCurrentLibrary.title": "Change current library", + "LibraryListView.changeCurrentLibrary.changedCurrent": "Changed current library to {0}.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} is already current library.", + "LibraryListView.changeUserLibraryList.prompt": "Changing library list (can use \"*reset\")", + "LibraryListView.changeUserLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", + "LibraryListView.addToLibraryList.prompt": "Library to add", + "LibraryListView.addToLibraryList.tooLong": "Library is too long.", + "LibraryListView.addToLibraryList.alreadyInList": "Library {0} was already in the library list.", + "LibraryListView.addToLibraryList.invalidLib": "Library {0} does not exist.", + "LibraryListView.addToLibraryList.addedLib": "Library {0} was added to the library list.", + "LibraryListView.addToLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", + "LibraryListView.removeFromLibraryList.removedLib": "Library {0} was removed from the library list.", + "LibraryListView.cleanupLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", + "LibraryListView.cleanupLibraryList.validated": "Library list were validated without any errors.", + "LibraryListView.setCurrentLibrary.failed": "Failed to set {0} as current library: {1}", + + "objectBrowser.delete.confirm": "Are you sure you want to delete {0}?", + "objectBrowser.delete.multiple.confirm": "Are you sure you want to delete these {0} elements?", + "objectBrowser.delete.progress": "Deleting", + "objectBrowser.createMember.prompt": "Name of new source member (member.ext)", + "objectBrowser.createMember.progressTitle": "Creating member {0}...", + "objectBrowser.createMember.errorMessage": "Error creating member {0}: {1}", + "objectBrowser.copyMember.prompt": "New path for copy of source member", + "objectBrowser.copyMember.errorMessage": "Cannot copy member to itself!", + "objectBrowser.copyMember.progressTitle": "Creating member {0}...", + "objectBrowser.copyMember.overwrite": "Are you sure you want overwrite member {0}?", + "objectBrowser.copyMember.errorMessage2": "Member {0} already exists!", + "objectBrowser.copyMember.errorMessage3": "Error creating member {0}: {1}", + "objectBrowser.deleteMember.errorMessage": "Error deleting member! {0}", + "objectBrowser.updateMemberText.prompt": "Change member description for {0}, *BLANK for no description", + "objectBrowser.updateMemberText.errorMessage": "Error changing member description! {0}", + "objectBrowser.renameMember.prompt": "Rename {0}", + "objectBrowser.renameMember.errorMessage": "Error renaming member! {0}", + "objectBrowser.renameMember.invalid.input": "New member name must be different from it's current name", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Member was uploaded.", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Error uploading content to member! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", + "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", + "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", + "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", + "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", + "objectBrowser.searchSourceFile.prompt": "Enter LIB/SPF/member.ext to search (member.ext is optional and can contain wildcards)", + "objectBrowser.searchSourceFile.title": "Search source file", + "objectBrowser.searchSourceFile.invalidForm": "Please enter value in form LIB/SPF/member.ext", + "objectBrowser.searchSourceFile.aspText": "(in ASP {0})", + "objectBrowser.searchSourceFile.previousSearches": "Previous search terms", + "objectBrowser.searchSourceFile.placeholder": "Enter search term or select one of the previous search terms.", + "objectBrowser.searchSourceFile.placeholder2": "Enter search term.", + "objectBrowser.searchSourceFile.title2": "Search {0} {1}", + "objectBrowser.searchSourceFile.errorMessage": "Cannot search listings using *ALL.", + "objectBrowser.createFilter": "Create new filter", + "objectBrowser.createLibrary.prompt": "Name of new library", + "objectBrowser.createLibrary.errorMessage": "Cannot create library \"{0}\": {1}", + "objectBrowser.createLibrary.infoMessage": "Would you like to add the new library to the library list?", + "objectBrowser.createLibrary.errorMessage2": "Library name too long.", + "objectBrowser.createSourceFile.prompt": "Name of new source file", + "objectBrowser.createSourceFile.infoMessage": "Creating source file {0}.", + "objectBrowser.createSourceFile.errorMessage": "Error creating source file! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Source filename must be 10 chars or less.", + "objectBrowser.changeObjectDesc.prompt": "Change object description for {0}, *BLANK for no description", + "objectBrowser.changeObjectDesc.errorMessage": "Object description must be 50 chars or less.", + "objectBrowser.changeObjectDesc.infoMessage": "Changed object description for {0} {1}.", + "objectBrowser.changeObjectDesc.errorMessage2": "Error changing description for {0}! {1}", + "objectBrowser.copyObject.prompt": "Create duplicate object to new library/object", + "objectBrowser.copyObject.errorMessage": "Invalid path: {0}. Use format LIB/OBJ", + "objectBrowser.copyObject.errorMessage2": "Library must be 10 chars or less.", + "objectBrowser.copyObject.errorMessage3": "Object name must be 10 chars or less.", + "objectBrowser.copyObject.infoMessage": "Copied object {0} {1} to {2}.", + "objectBrowser.copyObject.infoMessage2": "Copied object {0} {1} to {2}. Refresh object browser.", + "objectBrowser.copyObject.errorMessage4": "Error copying object {0}! {1}", + "objectBrowser.deleteObject.errorMessage": "Error deleting object! {0}", + "objectBrowser.renameObject.prompt": "Rename object", + "objectBrowser.renameObject.errorMessage": "Object name must be 10 chars or less.", + "objectBrowser.renameObject.infoMessage": "Renamed object {0} {1} to {2}.", + "objectBrowser.renameObject.errorMessage2": "Error renaming object {0}! {1}", + "objectBrowser.renameObject.progress": "Renaming object {0} {1} to {2}...", + "objectBrowser.moveObject.prompt": "Move object", + "objectBrowser.moveObject.errorMessage": "Object name must be 10 chars or less.", + "objectBrowser.moveObject.infoMessage": "Moved object {0} {1} to {2}.", + "objectBrowser.moveObject.infoMessage2": "Moved object {0} {1} to {2}. Refresh object browser.", + "objectBrowser.moveObject.errorMessage2": "Error moving object {0}! {1}", + "objectBrowser.moveObject.progress": "Moving object {0} {1} to {2}...", + "objectBrowser.doSearchInSourceFile.title": "Searching", + "objectBrowser.doSearchInSourceFile.progressMessage": "Fetching member list for {0}.", + "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" in {1}.", + "objectBrowser.doSearchInSourceFile.searchMessage2": "This is taking a while because there are {0} members. Searching \"{1}\" in {2} still.", + "objectBrowser.doSearchInSourceFile.searchMessage3": "What's so special about \"{0}\" anyway?", + "objectBrowser.doSearchInSourceFile.searchMessage4": "Still searching \"{0}\" in {1}...", + "objectBrowser.doSearchInSourceFile.searchMessage5": "While you wait, why not make some tea?", + "objectBrowser.doSearchInSourceFile.searchMessage6": "Wow. This really is taking a while. Let's hope you get the result you want.", + "objectBrowser.doSearchInSourceFile.searchMessage7": "Why was six afraid of seven?", + "objectBrowser.doSearchInSourceFile.searchMessage8": "How does one end up with {0} members?", + "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" in {1}.", + "objectBrowser.doSearchInSourceFile.notFound": "No results found searching for \"{0}\" in {1}.", + "objectBrowser.doSearchInSourceFile.noMembers": "No members to search.", + "objectBrowser.doSearchInSourceFile.errorMessage": "Error searching source members: {0}", + + "ProfilesView.saveConnectionProfile.prompt": "Name of profile", + "ProfilesView.saveConnectionProfile.infoMessage": "Saved current settings to profile \"{0}\".", + "ProfilesView.deleteConnectionProfile.warningMessage": "Are you sure you want to delete the \"{0}\" profile?", + "ProfilesView.loadConnectionProfile.infoMessage": "Switched to profile \"{0}\".", + "ProfilesView.loadCommandProfile.infoMessage": "Switched to profile \"{0}\".", + "ProfilesView.loadCommandProfile.warningMessage": "Failed to get library list from command. Feature not installed.", + "ProfilesView.loadCommandProfile.errorMessage": "Failed to get library list from command: {0}", + "ProfilesView.setToDefault.infoMessage": "Reset to default", + "ProfilesView.setToDefault.detail": "This will reset the User Library List, working directory and Custom Variables back to the defaults.", + + "actions.CURLIB": "Current library, changeable in Library List", + "actions.USERNAME": "Username for connection", + "actions.WORKDIR": "Current working directory, changeable in IFS Browser", + "actions.HOST": "Hostname or IP address from the current connection", + "actions.BRANCH": "Current Git branch", + "actions.BRANCHLIB": "Branch library, based on the current branch", + "actions.BUILDLIB": "The same as &CURLIB", + "actions.LIBLC": "Library list delimited by comma", + "actions.LIBLS": "Library list delimited by space", + "actions.OPENLIB": "Library name where the source member lives (&OPENLIBL for lowercase)", + "actions.OPENSPF": "Source file name where the source member lives (&OPENSPFL for lowercase)", + "actions.OPENMBR": "Name of the source member (&OPENMBRL for lowercase)", + "actions.member.EXT": "Extension of the source member (&EXTL for lowercase)", + "actions.FULLPATH": "Full path of the file on the remote system", + "actions.FILEDIR": "Directory of the file on the remote system", + "actions.RELATIVEPATH": "Relative path of the streamfile from the working directory or workspace", + "actions.PARENT": "Name of the parent directory or source file", + "actions.BASENAME": "Name of the file, including the extension", + "actions.streamfile.NAME": "Name of the file (&NAMEL for lowercase)", + "actions.streamfile.EXT": "Extension of the file (&EXTL for lowercase)", + "actions.LIBRARY": "Library name where the object lives (&LIBRARYL for lowercase)", + "actions.NAME": "Name of the object (&NAMEL for lowercase)", + "actions.NAMEL": "Lowercase name of the object", + "actions.object.TYPE": "Type of the object (&TYPEL for lowercase)", + "actions.object.EXT": "Extension/attribute of the object (&EXTL for lowercase)", + "actions.EXT": "Filte type", + "actions.EXTL": "Lowercase file type", + "actions.mainMenu.workWithActions": "Work with Actions", + "actions.mainMenu.createOrMaintain": "Create or maintain Actions. Actions are grouped by the type of file/object they target.", + "actions.mainMenu.newAction": "New Action", + "actions.duplicate.select": "Select an action to duplicate", + "actions.workAction.create.title": "Create action", + "actions.workAction.edit.title": "Edit action \"{0}\"", + "actions.workAction.duplicate.title": "Duplicate action \"{0}\"", + "actions.workAction.name": "Action name", + "actions.workAction.command": "Command(s) to run", + "actions.workAction.command.description": "Below are available variables based on the Type you have select below. You can specify different commands on each line. Each command run is stateless and run in their own job.", + "actions.workAction.extensions": "Extensions", + "actions.workAction.extensions.description": "A comma delimited list of extensions for this action. This can be a member extension, a streamfile extension, an object type or an object attribute", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "The types of files this action can support.", + "actions.workAction.types.member": "Member", + "actions.workAction.types.member.description": "Source members in the QSYS file system", + "actions.workAction.types.streamfile": "Streamfile", + "actions.workAction.types.streamfile.description": "Streamfiles in the IFS", + "actions.workAction.types.object": "Object", + "actions.workAction.types.object.description": "Objects in the QSYS file system", + "actions.workAction.types.file": "Local File (Workspace)", + "actions.workAction.types.file.description": "Actions for local files in the VS Code Workspace.", + "actions.workAction.environment": "Environment", + "actions.workAction.environment.description": "Environment for command to be executed in.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Runs as an ILE command", + "actions.workAction.environment.qsh": "QShell", + "actions.workAction.environment.qsh.description": "Runs the command through QShell", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Runs the command in the PASE environment", + "actions.workAction.delete.confirm": "Are you sure you want to delete the action \"{0}\"?", + "actions.workAction.refresh": "Refresh", + "actions.workAction.refresh.description": "The browser level to refresh after the action is done", + "actions.workAction.refresh.no": "No", + "actions.workAction.refresh.no.description": "No refresh", + "actions.workAction.refresh.parent": "Parent", + "actions.workAction.refresh.parent.description": "The parent container is refreshed", + "actions.workAction.refresh.filter": "Filter", + "actions.workAction.refresh.filter.description": "The parent filter is refreshed", + "actions.workAction.refresh.browser": "Browser", + "actions.workAction.refresh.browser.description": "The entire browser is refreshed", + "actions.workAction.runOnProtected": "Run on protected/read only", + "actions.workAction.runOnProtected.description": "Allows the execution of this Action on protected or read only targets", + + "debugger.status": "Debugger {0} Status", + "loading.debugger.info": "Loading debugger information...", + "debug.server": "Debug Server", + "debug.service": "Debug Service", + "active.job": "Active job", + "jvm.info": "JVM information", + "debug.service.certificate": "Debug Service Certificate", + "service.certificate.exists": "Remote service certificate exists", + "local.certificate": "Local certificate", + "certificates.match": "Local certificate matches remote", + "generate.certificate": "Generate service certificate", + "download.certificate": "Download certificate", + "not.found.in": "Not found in {0}", + "strdbgsvr.succeeded": "Debug server started.", + "strdbgsvr.failed": "Failed to start debug server: {0}", + "enddbgsvr.succeeded": "Debug server stopped.", + "enddbgsvr.failed": "Failed to stop debug server: {0}", + "start.debug.service.task": "Starting debug service...", + "start.debug.service.succeeded": "Debug service started.", + "start.debug.service.failed": "Failed to start debug service: {0}", + "stop.debug.service.task": "Stopping debug service...", + "stop.debug.service.succeeded": "Debug service stopped.", + "stop.debug.service.failed": "Failed to stop debug service: {0}", + "open.service.configuration": "Open configuration", + "detail.reading.error": "Failed to read debug service detail file {0}: {1}", + "start.debug.server.task": "Starting debug server...", + "stop.debug.server.task": "Stopping debug server...", + "remote.certificate.not.found": "Remote certificate not found", + "remote.certificate.not.found.detail": "{0} not found under {1}", + "local.certificate.not.found": "Local certificate not found", + "local.dont.match.remote": "Local certificate doesn\"t match remote", + "debug.service.submit.options":"Debug Service submit options", + "debug.service.submit.options.prompt":"Valid parameters for SBMJOB" +} \ No newline at end of file diff --git a/src/locale/ids/en.ts b/src/locale/ids/en.ts deleted file mode 100644 index 26b6b3098..000000000 --- a/src/locale/ids/en.ts +++ /dev/null @@ -1,402 +0,0 @@ -import { Locale } from ".."; - -export const en: Locale = { - // Common words and texts: - 'Yes': `Yes`, - 'No': `No`, - 'Cancel': `Cancel`, - 'Retry': `Retry`, - 'Continue': `Continue`, - 'directory': `directory`, - 'shortcut': `shortcut`, - 'streamfile': `streamfile`, - 'error': `error`, - 'errors': `errors`, - 'clearList': `$(trash) Clear list`, - 'clearedList': `Cleared list.`, - 'currentLibrary': `(current library)`, - 'current': `current`, - 'duplicate': 'Duplicate', - 'save': 'Save', - 'delete': 'Delete', - 'cancel': 'Cancel', - 'not.connected': 'Not connected to an IBM i', - 'text': 'Text', - 'members': 'Members', - 'length': 'Length', - 'CCSID': 'CCSID', - 'lines': 'Lines', - 'created': 'Created', - 'changed': 'Changed', - 'size': 'Size', - 'modified': 'Modified', - 'owner': 'Owner', - 'type': 'Type', - 'attribute': 'Attribute', - 'created_by': 'Created by', - 'overwrite': 'Overwrite', - 'overwrite_all': 'Overwrite all', - 'ask.overwrite': '{0} already exists.\nDo you want to replace it?', - 'skip': 'Skip', - 'skip_all': 'Skip all', - 'password': 'Password', - 'privateKey': 'Private Key', - 'username': 'Username', - 'stored': `stored`, - 'offline': 'Offline', - 'online': 'Online', - 'status': 'Status', - 'job': 'Job', - 'start': 'Start', - 'restart': 'Restart', - 'stop': 'Stop', - 'listening.on.port': 'Listening on port', - 'listening.on.ports': 'Listening on ports', - 'overview': 'Overview', - 'JOB_NAME_SHORT': 'Job name', - 'JOB_USER': 'Job user', - 'JOB_NUMBER': 'Job number', - 'SUBSYSTEM': 'Subsystem', - 'AUTHORIZATION_NAME': 'Current user', - 'JOB_STATUS': 'Job status', - 'MEMORY_POOL': 'Memory pool', - 'START_TIME': 'Start time', - 'JAVA_HOME': 'Java Home', - 'USER_DIRECTORY': 'User directory', - 'CURRENT_HEAP_SIZE': 'Current memory', - 'MAX_HEAP_SIZE': 'Maximum allowed memory', - // Sandbox: - 'sandbox.input.user.title': `User for server`, - 'sandbox.input.user.prompt': `Enter username for {0}`, - 'sandbox.input.password.title': `Password for server`, - 'sandbox.input.password.prompt': `Enter password for {0}@{1}`, - 'sandbox.failedToConnect.text': 'Failed to connect to {0} as {1}', - 'sandbox.failedToConnect.title': `Failed to connect`, - 'sandbox.noPassword': `Connection to {0} ended as no password was provided.`, - 'sandbox.alreadyConnected': `This Visual Studio Code instance is already connected to a server.`, - 'sandbox.connected.modal.title': `Thanks for trying the Code for IBM i Sandbox!`, - 'sandbox.connected.modal.detail': `You are using this system at your own risk. Do not share any sensitive or private information.`, - 'sandbox.noconnection.modal.title': `Oh no! The sandbox is down.`, - 'sandbox.noconnection.modal.detail': `Sorry, but the sandbox is offline right now. Try again another time.`, - // ConnectionBrowser: - 'connectionBrowser.connectTo.lastConnection': `Last connection`, - 'connectionBrowser.connectTo.lastUsed': `Last used: {0}`, - 'connectionBrowser.connectTo.title': `Last IBM i connections`, - 'connectionBrowser.connectTo.error': `Use the Server Browser to select which system to connect to.`, - 'connectionBrowser.renameConnection.prompt': `Rename connection '{0}'`, - 'connectionBrowser.renameConnection.alreadyExists': `Connection '{0}' already exists.`, - 'connectionBrowser.renameConnection.invalid.input': `New connection name must be different from its current name`, - 'connectionBrowser.renameConnection.noConnectionFound': `No connection named '{0}' was found`, - 'connectionBrowser.renameConnection.noConnParmsFound': `No parameters for connection '{0}' was found`, - 'connectionBrowser.renameConnection.error': `Error renaming connection '{0}'! {1}`, - 'connectionBrowser.deleteConnection.warning': `Are you sure you want to delete the connection '{0}'?`, - 'connectionBrowser.deleteConnection.multiple.warning': `Are you sure you want to delete these {0} connections?`, - 'connectionBrowser.ServerItem.tooltip': ` (previous connection)`, - 'connectionBrowser.ServerItem.title': `Connect`, - 'connectionBrowser.copyConnection.prompt': `Copy connection '{0}'`, - 'connectionBrowser.copyConnection.placeholder': `New connection name`, - 'connectionBrowser.copyConnection.already.exists': `Connection '{0}' already exists`, - 'connectionBrowser.copyConnection.select.settings': `Select the settings to copy from '{0}' to '{1}'`, - 'connectionBrowser.copyConnection.select.home.directory': `Home directory`, - 'connectionBrowser.copyConnection.select.library.list': `Library list`, - 'connectionBrowser.copyConnection.select.object.filters': `Object filters`, - 'connectionBrowser.copyConnection.select.ifs.shortcuts': `IFS shortcuts`, - 'connectionBrowser.copyConnection.select.custom.variables': `Custom variables`, - 'connectionBrowser.copyConnection.select.command.profiles': `Command profiles`, - 'connectionBrowser.copyConnection.select.connection.profiles': `Connection profiles`, - // Login page: - 'login.title.create': `Connect to IBM i`, - 'login.title.edit': `Login Settings: '{0}'`, - 'login.host': `Host or IP Address`, - 'login.port': `Port (SSH)`, - 'login.authDecision': `Only provide either the password or a private key - not both.`, - 'login.removeAuth': `Remove auth methods`, - 'login.authRemoved': `Authentication methods removed for '{0}'.`, - 'login.password.label': 'Only provide a password if you want to update an existing one or set a new one.', - 'login.password.updated': `Password updated and will be used for '{0}'.`, - 'login.savePassword': `Save Password`, - 'login.privateKey.label': `Only provide a private key if you want to update from the existing one or set one.`, - 'login.privateKey.support': 'OpenSSH, RFC4716 and PPK formats are supported.', - 'login.privateKey.updated': `Private key updated and will be used for '{0}'.`, - // helpView: - 'helpView.getStarted': `Get started`, - 'helpView.officialForum': `Open official Forum`, - 'helpView.reviewIssues': `Review Issues`, - 'helpView.reportIssue': `Report an Issue`, - // ifsBrowser: - 'ifsBrowser.changeWorkingDirectory.prompt': `Changing working directory`, - 'ifsBrowser.changeWorkingDirectory.message': `Working directory changed to {0}.`, - 'ifsBrowser.addIFSShortcut.prompt': `Path to IFS directory`, - 'ifsBrowser.addIFSShortcut.error': `{0} is not a directory.`, - 'ifsBrowser.addIFSShortcut.errorMessage': `Error creating IFS shortcut! {0}`, - 'ifsBrowser.removeIFSShortcut.placeHolder': `Select IFS shortcut to remove`, - 'ifsBrowser.createDirectory.prompt': `Path of new folder`, - 'ifsBrowser.createDirectory.errorMessage': `Error creating new directory! {0}`, - 'ifsBrowser.createStreamfile.prompt': `Name of new streamfile`, - 'ifsBrowser.createStreamfile.infoMessage': `Creating streamfile {0}.`, - 'ifsBrowser.createStreamfile.errorMessage': `Error creating new streamfile! {0}`, - 'ifsBrowser.uploadStreamfile.uploadedFiles': `Upload completed.`, - 'ifsBrowser.uploadStreamfile.errorMessage': `Error uploading files! {0}`, - 'ifsBrowser.uploadStreamfile.noFilesSelected': `No files or folders selected for upload.`, - 'ifsBrowser.uploadStreamfile.process.uploading': `Upload`, - 'ifsBrowser.uploadStreamfile.process.uploading.files': `sending {0} file(s)...`, - 'ifsBrowser.uploadStreamfile.process.uploading.directory': 'sending {0} directory...', - 'ifsBrowser.uploadStreamfile.ask': 'Do you want to copy or move the selection to {0}?', - 'ifsBrowser.uploadStreamfile.copy': 'Copy', - 'ifsBrowser.uploadStreamfile.move': 'Move', - 'ifsBrowser.uploadStreamfile.copy.failed': 'Failed to copy selection to {0}: {1}', - 'ifsBrowser.uploadStreamfile.move.failed': 'Failed to move selection to {0}: {1}', - 'ifsBrowser.uploadStreamfile.select.type.folders': 'Folders', - 'ifsBrowser.uploadStreamfile.select.type.files': 'Files', - 'ifsBrowser.uploadStreamfile.select.type.title': 'What do you want to upload?', - 'ifsBrowser.deleteIFS.dirNotAllowed': `Unable to delete protected directories from the IFS Browser!\n{0}`, - 'ifsBrowser.deleteIFS.warningMessage': `Are you sure you want to delete {0}?`, - 'ifsBrowser.deleteIFS.multi.warningMessage': `Are you sure you want to delete the {0} selected files?`, - 'ifsBrowser.deleteIFS.deletionPrompt': `Once you delete the directory, it cannot be restored.\nPlease type \"{0}\" to confirm deletion.`, - 'ifsBrowser.deleteIFS.deletionPrompt2': ` (Press \'Escape\' to cancel)`, - 'ifsBrowser.deleteIFS.progress': `Deleting {0} element(s)...`, - 'ifsBrowser.deleteIFS.errorMessage': `Error deleting streamfile! {0}`, - 'ifsBrowser.deleteIFS.cancelled': `Deletion canceled.`, - 'ifsBrowser.deleteIFS.default.home.dir': '{0} was the working directory; it is now {1}.', - 'ifsBrowser.moveIFS.prompt': `Name of new path`, - 'ifsBrowser.moveIFS.errorMessage': `Error renaming/moving {0}! {1}`, - 'ifsBrowser.moveIFS.renamed': `{0} was renamed to {1}.`, - 'ifsBrowser.moveIFS.moved': `{0} was moved to {1}.`, - 'ifsBrowser.copyIFS.prompt': `Name of new path`, - 'ifsBrowser.copyIFS.infoMessage': `{0} was copied to {1}.`, - 'ifsBrowser.copyIFS.errorMessage': `Error copying {0}! {1}`, - 'ifsBrowser.searchIFS.prompt': `Enter IFS directory to search`, - 'ifsBrowser.searchIFS.title': `Search directory`, - 'ifsBrowser.searchIFS.title2': `Search {0}`, - 'ifsBrowser.searchIFS.previousSearches': `Previous search terms`, - 'ifsBrowser.searchIFS.placeholder': `Enter search term or select one of the previous search terms.`, - 'ifsBrowser.searchIFS.placeholder2': `Enter search term.`, - 'ifsBrowser.searchIFS.noGrep': `grep must be installed on the remote system for the IFS search.`, - 'ifsBrowser.downloadStreamfile.downloading': 'Downloading', - 'ifsBrowser.downloadStreamfile.complete': `Download complete`, - 'ifsBrowser.downloadStreamfile.errorMessage': `Error downloading file(s): {0}`, - 'ifsBrowser.getChildren.errorMessage': `Error loading objects.`, - 'ifsBrowser.handleFileListErrors.errorMessage': `{0} {1} occurred while listing files.`, - 'ifsBrowser.doSearchInStreamfiles.title': `Searching`, - 'ifsBrowser.doSearchInStreamfiles.progressMessage': `'{0}' in {1}.`, - 'ifsBrowser.doSearchInStreamfiles.noResults': `No results found searching for '{0}' in {1}.`, - 'ifsBrowser.doSearchInStreamfiles.errorMessage': `Error searching streamfiles.`, - 'ifsBrowser.copyToStreamfile.infoMessage': `{0} member(s) copied to streamfile(s) in {1}.`, - 'ifsBrowser.copyToStreamfile.failed': `Error copying member(s) to {0}: {1}`, - // LibraryListView: - 'LibraryListView.changeCurrentLibrary.currentlyActive': `Currently active`, - 'LibraryListView.changeCurrentLibrary.recentlyUsed': `Recently used`, - 'LibraryListView.changeCurrentLibrary.placeholder': `Filter or new library to set as current library`, - 'LibraryListView.changeCurrentLibrary.title': `Change current library`, - 'LibraryListView.changeCurrentLibrary.changedCurrent': `Changed current library to {0}.`, - 'LibraryListView.changeCurrentLibrary.alreadyCurrent': `{0} is already current library.`, - 'LibraryListView.changeUserLibraryList.prompt': `Changing library list (can use '*reset')`, - 'LibraryListView.changeUserLibraryList.removedLibs': `The following libraries were removed from the updated library list as they are invalid: {0}`, - 'LibraryListView.addToLibraryList.prompt': `Library to add`, - 'LibraryListView.addToLibraryList.tooLong': `Library is too long.`, - 'LibraryListView.addToLibraryList.alreadyInList': `Library {0} was already in the library list.`, - 'LibraryListView.addToLibraryList.invalidLib': `Library {0} does not exist.`, - 'LibraryListView.addToLibraryList.addedLib': `Library {0} was added to the library list.`, - 'LibraryListView.addToLibraryList.removedLibs': `The following libraries were removed from the updated library list as they are invalid: {0}`, - 'LibraryListView.removeFromLibraryList.removedLib': `Library {0} was removed from the library list.`, - 'LibraryListView.cleanupLibraryList.removedLibs': `The following libraries were removed from the updated library list as they are invalid: {0}`, - 'LibraryListView.cleanupLibraryList.validated': `Library list were validated without any errors.`, - 'LibraryListView.setCurrentLibrary.failed': 'Failed to set {0} as current library: {1}', - // objectBrowser: - 'objectBrowser.delete.confirm': 'Are you sure you want to delete {0}?', - 'objectBrowser.delete.multiple.confirm': 'Are you sure you want to delete these {0} elements?', - 'objectBrowser.delete.progress': 'Deleting', - 'objectBrowser.createMember.prompt': `Name of new source member (member.ext)`, - 'objectBrowser.createMember.progressTitle': `Creating member {0}...`, - 'objectBrowser.createMember.errorMessage': `Error creating member {0}: {1}`, - 'objectBrowser.copyMember.prompt': `New path for copy of source member`, - 'objectBrowser.copyMember.errorMessage': `Cannot copy member to itself!`, - 'objectBrowser.copyMember.progressTitle': `Creating member {0}...`, - 'objectBrowser.copyMember.overwrite': `Are you sure you want overwrite member {0}?`, - 'objectBrowser.copyMember.errorMessage2': `Member {0} already exists!`, - 'objectBrowser.copyMember.errorMessage3': `Error creating member {0}: {1}`, - 'objectBrowser.deleteMember.errorMessage': `Error deleting member! {0}`, - 'objectBrowser.updateMemberText.prompt': `Change member description for {0}, *BLANK for no description`, - 'objectBrowser.updateMemberText.errorMessage': `Error changing member description! {0}`, - 'objectBrowser.renameMember.prompt': `Rename {0}`, - 'objectBrowser.renameMember.errorMessage': `Error renaming member! {0}`, - 'objectBrowser.renameMember.invalid.input': `New member name must be different from it's current name`, - 'objectBrowser.uploadAndReplaceMemberAsFile.infoMessage': `Member was uploaded.`, - 'objectBrowser.uploadAndReplaceMemberAsFile.errorMessage': `Error uploading content to member! {0}`, - 'objectBrowser.downloadMemberContent.infoMessage': `Members download complete.`, - 'objectBrowser.downloadMemberContent.errorMessage': `Error downloading member(s)! {0}`, - 'objectBrowser.downloadMemberContent.cancel': `Members download cancelled.`, - 'objectBrowser.downloadMemberContent.download.progress': 'Downloading {0} members', - 'objectBrowser.downloadMemberContent.download.cpytostmf': 'copying to streamfiles', - 'objectBrowser.downloadMemberContent.download.streamfiles': 'getting streamfiles', - 'objectBrowser.searchSourceFile.prompt': `Enter LIB/SPF/member.ext to search (member.ext is optional and can contain wildcards)`, - 'objectBrowser.searchSourceFile.title': `Search source file`, - 'objectBrowser.searchSourceFile.invalidForm': `Please enter value in form LIB/SPF/member.ext`, - 'objectBrowser.searchSourceFile.aspText': `(in ASP {0})`, - 'objectBrowser.searchSourceFile.previousSearches': `Previous search terms`, - 'objectBrowser.searchSourceFile.placeholder': `Enter search term or select one of the previous search terms.`, - 'objectBrowser.searchSourceFile.placeholder2': `Enter search term.`, - 'objectBrowser.searchSourceFile.title2': `Search {0} {1}`, - 'objectBrowser.searchSourceFile.errorMessage': `Cannot search listings using *ALL.`, - 'objectBrowser.createFilter': `Create new filter`, - 'objectBrowser.createLibrary.prompt': `Name of new library`, - 'objectBrowser.createLibrary.errorMessage': `Cannot create library "{0}": {1}`, - 'objectBrowser.createLibrary.infoMessage': `Would you like to add the new library to the library list?`, - 'objectBrowser.createLibrary.errorMessage2': `Library name too long.`, - 'objectBrowser.createSourceFile.prompt': `Name of new source file`, - 'objectBrowser.createSourceFile.infoMessage': `Creating source file {0}.`, - 'objectBrowser.createSourceFile.errorMessage': `Error creating source file! {0}`, - 'objectBrowser.createSourceFile.errorMessage2': `Source filename must be 10 chars or less.`, - 'objectBrowser.changeObjectDesc.prompt': `Change object description for {0}, *BLANK for no description`, - 'objectBrowser.changeObjectDesc.errorMessage': `Object description must be 50 chars or less.`, - 'objectBrowser.changeObjectDesc.infoMessage': `Changed object description for {0} {1}.`, - 'objectBrowser.changeObjectDesc.errorMessage2': `Error changing description for {0}! {1}`, - 'objectBrowser.copyObject.prompt': `Create duplicate object to new library/object`, - 'objectBrowser.copyObject.errorMessage': `Invalid path: {0}. Use format LIB/OBJ`, - 'objectBrowser.copyObject.errorMessage2': `Library must be 10 chars or less.`, - 'objectBrowser.copyObject.errorMessage3': `Object name must be 10 chars or less.`, - 'objectBrowser.copyObject.infoMessage': `Copied object {0} {1} to {2}.`, - 'objectBrowser.copyObject.infoMessage2': `Copied object {0} {1} to {2}. Refresh object browser.`, - 'objectBrowser.copyObject.errorMessage4': `Error copying object {0}! {1}`, - 'objectBrowser.deleteObject.errorMessage': `Error deleting object! {0}`, - 'objectBrowser.renameObject.prompt': `Rename object`, - 'objectBrowser.renameObject.errorMessage': `Object name must be 10 chars or less.`, - 'objectBrowser.renameObject.infoMessage': `Renamed object {0} {1} to {2}.`, - 'objectBrowser.renameObject.errorMessage2': `Error renaming object {0}! {1}`, - 'objectBrowser.renameObject.progress': `Renaming object {0} {1} to {2}...`, - 'objectBrowser.moveObject.prompt': `Move object`, - 'objectBrowser.moveObject.errorMessage': `Object name must be 10 chars or less.`, - 'objectBrowser.moveObject.infoMessage': `Moved object {0} {1} to {2}.`, - 'objectBrowser.moveObject.infoMessage2': `Moved object {0} {1} to {2}. Refresh object browser.`, - 'objectBrowser.moveObject.errorMessage2': `Error moving object {0}! {1}`, - 'objectBrowser.moveObject.progress': `Moving object {0} {1} to {2}...`, - 'objectBrowser.doSearchInSourceFile.title': `Searching`, - 'objectBrowser.doSearchInSourceFile.progressMessage': `Fetching member list for {0}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage1': `'{0}' in {1}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage2': `This is taking a while because there are {0} members. Searching '{1}' in {2} still.`, - 'objectBrowser.doSearchInSourceFile.searchMessage3': `What's so special about '{0}' anyway?`, - 'objectBrowser.doSearchInSourceFile.searchMessage4': `Still searching '{0}' in {1}...`, - 'objectBrowser.doSearchInSourceFile.searchMessage5': `While you wait, why not make some tea?`, - 'objectBrowser.doSearchInSourceFile.searchMessage6': `Wow. This really is taking a while. Let's hope you get the result you want.`, - 'objectBrowser.doSearchInSourceFile.searchMessage7': `Why was six afraid of seven?`, - 'objectBrowser.doSearchInSourceFile.searchMessage8': `How does one end up with {0} members?`, - 'objectBrowser.doSearchInSourceFile.searchMessage9': `'{0}' in {1}.`, - 'objectBrowser.doSearchInSourceFile.notFound': `No results found searching for '{0}' in {1}.`, - 'objectBrowser.doSearchInSourceFile.noMembers': `No members to search.`, - 'objectBrowser.doSearchInSourceFile.errorMessage': `Error searching source members: {0}`, - // ProfilesView: - 'ProfilesView.saveConnectionProfile.prompt': `Name of profile`, - 'ProfilesView.saveConnectionProfile.infoMessage': `Saved current settings to profile '{0}'.`, - 'ProfilesView.deleteConnectionProfile.warningMessage': `Are you sure you want to delete the '{0}' profile?`, - 'ProfilesView.loadConnectionProfile.infoMessage': `Switched to profile '{0}'.`, - 'ProfilesView.loadCommandProfile.infoMessage': `Switched to profile '{0}'.`, - 'ProfilesView.loadCommandProfile.warningMessage': `Failed to get library list from command. Feature not installed.`, - 'ProfilesView.loadCommandProfile.errorMessage': `Failed to get library list from command: {0}`, - 'ProfilesView.setToDefault.infoMessage': `Reset to default`, - 'ProfilesView.setToDefault.detail': `This will reset the User Library List, working directory and Custom Variables back to the defaults.`, - //Actions - 'actions.CURLIB': 'Current library, changeable in Library List', - 'actions.USERNAME': `Username for connection`, - 'actions.WORKDIR': `Current working directory, changeable in IFS Browser`, - 'actions.HOST': `Hostname or IP address from the current connection`, - 'actions.BRANCH': `Current Git branch`, - 'actions.BRANCHLIB': `Branch library, based on the current branch`, - 'actions.BUILDLIB': `The same as &CURLIB`, - 'actions.LIBLC': `Library list delimited by comma`, - 'actions.LIBLS': `Library list delimited by space`, - 'actions.OPENLIB': `Library name where the source member lives (&OPENLIBL for lowercase)`, - 'actions.OPENSPF': `Source file name where the source member lives (&OPENSPFL for lowercase)`, - 'actions.OPENMBR': `Name of the source member (&OPENMBRL for lowercase)`, - 'actions.member.EXT': `Extension of the source member (&EXTL for lowercase)`, - 'actions.FULLPATH': `Full path of the file on the remote system`, - 'actions.FILEDIR': `Directory of the file on the remote system`, - 'actions.RELATIVEPATH': `Relative path of the streamfile from the working directory or workspace`, - 'actions.PARENT': `Name of the parent directory or source file`, - 'actions.BASENAME': `Name of the file, including the extension`, - 'actions.streamfile.NAME': `Name of the file (&NAMEL for lowercase)`, - 'actions.streamfile.EXT': `Extension of the file (&EXTL for lowercase)`, - 'actions.LIBRARY': `Library name where the object lives (&LIBRARYL for lowercase)`, - 'actions.NAME': `Name of the object (&NAMEL for lowercase)`, - 'actions.NAMEL': `Lowercase name of the object`, - 'actions.object.TYPE': `Type of the object (&TYPEL for lowercase)`, - 'actions.object.EXT': `Extension/attribute of the object (&EXTL for lowercase)`, - 'actions.EXT': `Filte type`, - 'actions.EXTL': `Lowercase file type`, - 'actions.mainMenu.workWithActions': `Work with Actions`, - 'actions.mainMenu.createOrMaintain': `Create or maintain Actions. Actions are grouped by the type of file/object they target.`, - 'actions.mainMenu.newAction': `New Action`, - 'actions.duplicate.select': `Select an action to duplicate`, - 'actions.workAction.create.title': `Create action`, - 'actions.workAction.edit.title': `Edit action "{0}"`, - 'actions.workAction.duplicate.title': `Duplicate action "{0}"`, - 'actions.workAction.name': `Action name`, - 'actions.workAction.command': `Command(s) to run`, - 'actions.workAction.command.description': `Below are available variables based on the Type you have select below. You can specify different commands on each line. Each command run is stateless and run in their own job.`, - 'actions.workAction.extensions': `Extensions`, - 'actions.workAction.extensions.description': `A comma delimited list of extensions for this action. This can be a member extension, a streamfile extension, an object type or an object attribute`, - 'actions.workAction.types': `Type`, - 'actions.workAction.types.description': `The types of files this action can support.`, - 'actions.workAction.types.member': `Member`, - 'actions.workAction.types.member.description': `Source members in the QSYS file system`, - 'actions.workAction.types.streamfile': `Streamfile`, - 'actions.workAction.types.streamfile.description': `Streamfiles in the IFS`, - 'actions.workAction.types.object': `Object`, - 'actions.workAction.types.object.description': `Objects in the QSYS file system`, - 'actions.workAction.types.file': `Local File (Workspace)`, - 'actions.workAction.types.file.description': `Actions for local files in the VS Code Workspace.`, - 'actions.workAction.environment': `Environment`, - 'actions.workAction.environment.description': `Environment for command to be executed in.`, - 'actions.workAction.environment.ile': `ILE`, - 'actions.workAction.environment.ile.description': `Runs as an ILE command`, - 'actions.workAction.environment.qsh': `QShell`, - 'actions.workAction.environment.qsh.description': `Runs the command through QShell`, - 'actions.workAction.environment.pase': `PASE`, - 'actions.workAction.environment.pase.description': `Runs the command in the PASE environment`, - 'actions.workAction.delete.confirm': `Are you sure you want to delete the action "{0}"?`, - 'actions.workAction.refresh': 'Refresh', - 'actions.workAction.refresh.description': 'The browser level to refresh after the action is done', - 'actions.workAction.refresh.no': 'No', - 'actions.workAction.refresh.no.description': 'No refresh', - 'actions.workAction.refresh.parent': 'Parent', - 'actions.workAction.refresh.parent.description': 'The parent container is refreshed', - 'actions.workAction.refresh.filter': 'Filter', - 'actions.workAction.refresh.filter.description': 'The parent filter is refreshed', - 'actions.workAction.refresh.browser': 'Browser', - 'actions.workAction.refresh.browser.description': 'The entire browser is refreshed', - 'actions.workAction.runOnProtected': 'Run on protected/read only', - 'actions.workAction.runOnProtected.description': 'Allows the execution of this Action on protected or read only targets', - //Debugger - 'debugger.status': 'Debugger {0} Status', - 'loading.debugger.info': 'Loading debugger information...', - 'debug.server': 'Debug Server', - 'debug.service': 'Debug Service', - 'active.job': 'Active job', - 'jvm.info': 'JVM information', - 'debug.service.certificate': 'Debug Service Certificate', - 'service.certificate.exists': 'Remote service certificate exists', - 'local.certificate': 'Local certificate', - 'certificates.match': 'Local certificate matches remote', - 'generate.certificate': 'Generate service certificate', - 'download.certificate': 'Download certificate', - 'not.found.in': 'Not found in {0}', - 'strdbgsvr.succeeded': 'Debug server started.', - 'strdbgsvr.failed': 'Failed to start debug server: {0}', - 'enddbgsvr.succeeded': 'Debug server stopped.', - 'enddbgsvr.failed': 'Failed to stop debug server: {0}', - 'start.debug.service.task': 'Starting debug service...', - 'start.debug.service.succeeded': 'Debug service started.', - 'start.debug.service.failed': 'Failed to start debug service: {0}', - 'stop.debug.service.task': 'Stopping debug service...', - 'stop.debug.service.succeeded': 'Debug service stopped.', - 'stop.debug.service.failed': 'Failed to stop debug service: {0}', - 'open.service.configuration': 'Open configuration', - 'detail.reading.error': 'Failed to read debug service detail file {0}: {1}', - 'start.debug.server.task': 'Starting debug server...', - 'stop.debug.server.task': 'Stopping debug server...', - 'remote.certificate.not.found': 'Remote certificate not found', - 'remote.certificate.not.found.detail': '{0} not found under {1}', - 'local.certificate.not.found': 'Local certificate not found', - 'local.dont.match.remote': 'Local certificate doesn\'t match remote', - 'debug.service.submit.options':'Debug Service submit options', - 'debug.service.submit.options.prompt':'Valid parameters for SBMJOB' -}; \ No newline at end of file diff --git a/src/locale/ids/fr.json b/src/locale/ids/fr.json new file mode 100644 index 000000000..b836279cf --- /dev/null +++ b/src/locale/ids/fr.json @@ -0,0 +1,399 @@ +{ + "Yes": "Oui", + "No": "Non", + "Cancel": "Annuler", + "Retry": "Réessayer", + "Continue": "Continue", + "directory": "Répertoire", + "shortcut": "raccourci", + "streamfile": "fichier", + "error": "erreur", + "errors": "erreurs", + "clearList": "$(trash) Effacer liste", + "clearedList": "Liste effacée.", + "currentLibrary": "(bibliothèque en cours)", + "current": "actuelle", + "duplicate": "Dupliquer", + "save": "Enregistrer", + "delete": "Supprimer", + "cancel": "Annuler", + "not.connected": "Non connecté à un IBM i", + "text": "Texte", + "members": "Membres", + "length": "Longueur", + "CCSID": "CCSID", + "lines": "Lignes", + "created": "Création", + "changed": "Modification", + "size": "Taille", + "modified": "Modifié", + "owner": "Propriétaire", + "type": "Type", + "attribute": "Attribut", + "created_by": "Créé par", + "overwrite": "Écraser", + "overwrite_all": "Écraser tout", + "ask.overwrite": "{0} existe déjà.\nVoulez-vous le remplacer?", + "skip": "Ignorer", + "skip_all": "Ignorer tout", + "password": "Mot de passe", + "privateKey": "Clé privée", + "username": "Utilisateur", + "stored": "enregistré", + "offline": "Hors ligne", + "online": "En ligne", + "status": "Status", + "job": "Job", + "start": "Démarrer", + "restart": "Redémarrer", + "stop": "Arrêter", + "listening.on.port": "Écoute sur le port", + "listening.on.ports": "Écoute sur les ports", + "overview": "Aperçu", + "JOB_NAME_SHORT": "Nom du job", + "JOB_USER": "Utilisateur", + "JOB_NUMBER": "Numéro du job", + "SUBSYSTEM": "Sous-système", + "AUTHORIZATION_NAME": "Utilisateur en cours", + "JOB_STATUS": "Status du job", + "MEMORY_POOL": "Pool mémoire", + "START_TIME": "Démarré le", + "JAVA_HOME": "Java Home", + "USER_DIRECTORY": "Répertoire utilisateur", + "CURRENT_HEAP_SIZE": "Mémoire utilisée", + "MAX_HEAP_SIZE": "Mémoire maximum allouée", + + "sandbox.input.user.title": "Nom d'utilisateur", + "sandbox.input.user.prompt": "Entrez le nom d'utilisateur pour {0}", + "sandbox.input.password.title": "Mot de passe", + "sandbox.input.password.prompt": "Entrez le mot de passe pour {0}@{1}", + "sandbox.failedToConnect.text": "Échec de la connexion à {0} avec {1}", + "sandbox.failedToConnect.title": "Échec de la connexion", + "sandbox.noPassword": "Connexion à {0} interrompue car aucun mot de passe n'a été fourni.", + "sandbox.alreadyConnected": "Cette instance de Visual Studio Code est déjà connectée à un serveur.", + "sandbox.connected.modal.title": "Merci d'essayer le bac à sable Code for IBM i!", + "sandbox.connected.modal.detail": "Vous êtes seul responsable de l'utilisation du bas à sable. Ne partagez pas d'informations à caractère sensible ou privé.", + "sandbox.noconnection.modal.title": "Aïe aïe aïe, le bac à sable est en panne!", + "sandbox.noconnection.modal.detail": "Désolé, le bac à sable est est hors-ligne pour le moment. Réessayez plus tard.", + + "connectionBrowser.connectTo.lastConnection": "Dernière connexion", + "connectionBrowser.connectTo.lastUsed": "Dernière utilisation: {0}", + "connectionBrowser.connectTo.title": "Dernières connexions IBM i", + "connectionBrowser.connectTo.error": "Utilisez l'Explorateur de Serveur pour sélectionner le serveur auquel se connecter.", + "connectionBrowser.renameConnection.prompt": "Renommer la connexion \"{0}\"", + "connectionBrowser.renameConnection.alreadyExists": "La connexion \"{0}\" existe déjà.", + "connectionBrowser.renameConnection.invalid.input": "Le nouveau nom de la connexion doit être différent de son nom actuel", + "connectionBrowser.renameConnection.noConnectionFound": "Aucune connexion nommée \"{0}\" n' a été trouvée", + "connectionBrowser.renameConnection.noConnParmsFound": "Aucun paramètre pour la connexion \"{0}\" n'a été trouvé", + "connectionBrowser.renameConnection.error": "Erreur lors du renommage de la connexion \"{0}\"! {1}", + "connectionBrowser.deleteConnection.warning": "Êtes vous sûr de vouloir supprimer la connexion \"{0}\"?", + "connectionBrowser.deleteConnection.multiple.warning": "Êtes vous sûr de vouloir supprimer ces {0} connexions?", + "connectionBrowser.ServerItem.tooltip": " (précédente connexion)", + "connectionBrowser.ServerItem.title": "Se Connecter", + "connectionBrowser.copyConnection.prompt": "Copier la connexion \"{0}\"", + "connectionBrowser.copyConnection.placeholder": "Nouveau nom de connexion", + "connectionBrowser.copyConnection.already.exists": "La connexion \"{0}\" existe déjà", + "connectionBrowser.copyConnection.select.settings": "Sélectionner les paramètres à copier de \"{0}\" vers \"{1}\"", + "connectionBrowser.copyConnection.select.home.directory": "Répertoire home", + "connectionBrowser.copyConnection.select.library.list": "Liste de bibliothèques", + "connectionBrowser.copyConnection.select.object.filters": "Filtres d'objets", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "Raccourcis IFS", + "connectionBrowser.copyConnection.select.custom.variables": "Variables personnalisées", + "connectionBrowser.copyConnection.select.command.profiles": "Profiles de commande", + "connectionBrowser.copyConnection.select.connection.profiles": "Profile de connection", + + "login.title.create": "Connect to IBM i", + "login.title.edit": "paramètres d'authentification: \"{0}\"", + "login.host": "Nom d'Hôte ou Adresse IP", + "login.port": "Port (SSH)", + "login.authDecision": "Renseignez soit le mot de passe, soit la clé privée - pas les deux.", + "login.removeAuth": "Supprimer l'authentification", + "login.authRemoved": "Authentification supprimée pour \"{0}\".", + "login.password.label": "Rensignez un mot de passe seulement si vous souhaitez le changer.", + "login.password.updated": "Mot de passe mis à jour et utilisé pour se connecter à \"{0}\".", + "login.savePassword": "Sauvegarder Mot de passe", + "login.privateKey.label": "Sélectionnez une clé privée seulement si vous souhaitez en changer.", + "login.privateKey.support": "Les formats OpenSSH, RFC4716 et PPK sont supportés.", + "login.privateKey.updated": "Clé privée mise à jour et utilisée pour se connecter à \"{0}\".", + + "helpView.getStarted": "Pour commencer", + "helpView.officialForum": "Forum officiel", + "helpView.reviewIssues": "Voir les incidents", + "helpView.reportIssue": "Déclarer un incident", + + "ifsBrowser.changeWorkingDirectory.prompt": "Changer le répertoire courant", + "ifsBrowser.changeWorkingDirectory.message": "Répertoire courant changé pour {0}.", + "ifsBrowser.addIFSShortcut.prompt": "Chemin du répertoire IFS", + "ifsBrowser.addIFSShortcut.error": "{0} n'est pas un répertoire.", + "ifsBrowser.addIFSShortcut.errorMessage": "Erreur lors de la création du raccourci IFS! {0}", + "ifsBrowser.removeIFSShortcut.placeHolder": "Sélection du raccourci IFS à supprimer", + "ifsBrowser.createDirectory.prompt": "Chemin du nouveau répertoire", + "ifsBrowser.createDirectory.errorMessage": "Erreur à la création du répertoire! {0}", + "ifsBrowser.createStreamfile.prompt": "Nom du nouveau fichier", + "ifsBrowser.createStreamfile.infoMessage": "Création du fichier {0}.", + "ifsBrowser.createStreamfile.errorMessage": "Erreur lors de la création du fichier! {0}", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Envoi terminée.", + "ifsBrowser.uploadStreamfile.errorMessage": "Erreur lors de l'envoi des fichiers! {0}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "Aucun fichier ou dossier sélectionné pour l'envoi.", + "ifsBrowser.uploadStreamfile.process.uploading": "Téléchargement", + "ifsBrowser.uploadStreamfile.process.uploading.files": "envoi de {0} fichier(s)...", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "envoi du répertoire {0}...", + "ifsBrowser.uploadStreamfile.ask": "Voulez-vous déplacer ou copier la sélection vers {0}?", + "ifsBrowser.uploadStreamfile.copy": "Copier", + "ifsBrowser.uploadStreamfile.move": "Déplacer", + "ifsBrowser.uploadStreamfile.copy.failed": "Échec de la copie de la sélection vers {0}: {1}", + "ifsBrowser.uploadStreamfile.move.failed": "Échec du déplacement de la sélection vers {0}: {1}", + "ifsBrowser.uploadStreamfile.select.type.folders": "Dossiers", + "ifsBrowser.uploadStreamfile.select.type.files": "Fichiers", + "ifsBrowser.uploadStreamfile.select.type.title": "Que souhaitez-vous envoyer?", + "ifsBrowser.deleteIFS.dirNotAllowed": "Impossible de supprimer les répertoires protégés depuis l'Explorateur IFS!\n{0}", + "ifsBrowser.deleteIFS.warningMessage": "Êtes-vous sûr de vouloir suprimer {0}?", + "ifsBrowser.deleteIFS.multi.warningMessage": "Êtes-vous sûr de vouloir suprimer les {0} fichiers sélectionnés?", + "ifsBrowser.deleteIFS.deletionPrompt": "La suppression du répertoire est irréversible!\nEntrez \"{0}\" pour confirmer la suppression.", + "ifsBrowser.deleteIFS.deletionPrompt2": " (Appuyer sur \"Escape\" pour annuler)", + "ifsBrowser.deleteIFS.progress": "Suppression de {0} élément(s)...", + "ifsBrowser.deleteIFS.errorMessage": "Erreur lors de la suppression du fichier! {0}", + "ifsBrowser.deleteIFS.cancelled": "Suppression annulée.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} était le répertoire de travail; c\"est désormais {1}.", + "ifsBrowser.moveIFS.prompt": "Nouveau chemin", + "ifsBrowser.moveIFS.errorMessage": "Erreur lors du renommage/déplacement de {0}! {1}", + "ifsBrowser.moveIFS.renamed": "{0} a été renommé {1}.", + "ifsBrowser.moveIFS.moved": "{0} a été déplacé vers {1}.", + "ifsBrowser.copyIFS.prompt": "Nouveau chemin", + "ifsBrowser.copyIFS.infoMessage": "{0} a été copié vers {1}.", + "ifsBrowser.copyIFS.errorMessage": "Erreur lors de la copie de {0}! {1}", + "ifsBrowser.searchIFS.prompt": "Entrez le répertoire IFS où chercher", + "ifsBrowser.searchIFS.title": "Chercher dans un répertoire", + "ifsBrowser.searchIFS.previousSearches": "Recherches précédentes", + "ifsBrowser.searchIFS.placeholder": "Entrez un mot à chercher ou choisissez une recherche précédente.", + "ifsBrowser.searchIFS.placeholder2": "Entrez le mot à chercher.", + "ifsBrowser.searchIFS.title2": "Chercher dans {0}.", + "ifsBrowser.searchIFS.noGrep": "grep doit être installé sur le système distant pour la recherche sur l'IFS.", + "ifsBrowser.downloadStreamfile.downloading": "Téléchargement", + "ifsBrowser.downloadStreamfile.complete": "Téléchargement terminé", + "ifsBrowser.downloadStreamfile.errorMessage": "Erreur lors du téléchargement: {0}", + "ifsBrowser.getChildren.errorMessage": "Erreur lors du chargement des objets.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} s'est produit lors du chargement des fichiers.", + "ifsBrowser.doSearchInStreamfiles.title": "Recherche", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" dans {1}.", + "ifsBrowser.doSearchInStreamfiles.noResults": "Aucun résultat trouvé pour \"{0}\" dans {1}.", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Erreur lors de la recherche de fichiers.", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", + "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", + + "LibraryListView.changeCurrentLibrary.currentlyActive": "Active", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Utilisé récemment", + "LibraryListView.changeCurrentLibrary.placeholder": "Filtre ou nouvelle bibliothèque à utiliser comme bibliothèque en cours", + "LibraryListView.changeCurrentLibrary.title": "Changer la bibliothèque en cours", + "LibraryListView.changeCurrentLibrary.changedCurrent": "La bibliothèque en cours est maintenant {0}.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} est déjà la bibliothèque en cours.", + "LibraryListView.changeUserLibraryList.prompt": "Changement de la liste des bibliothèques (valeur spécial: \"*reset\")", + "LibraryListView.changeUserLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", + "LibraryListView.addToLibraryList.prompt": "Bibliothèque à ajouter", + "LibraryListView.addToLibraryList.tooLong": "Le nom de bibliothèque est trop long.", + "LibraryListView.addToLibraryList.alreadyInList": "La bibliohtèque {0} est déjà dans la liste des bibliothèques.", + "LibraryListView.addToLibraryList.invalidLib": "La bibliohtèque {0} n'existe pas.", + "LibraryListView.addToLibraryList.addedLib": "La bibliohtèque {0} a été ajoutée à la liste des bibliothèques.", + "LibraryListView.addToLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", + "LibraryListView.removeFromLibraryList.removedLib": "La bibliohtèque {0} a été retirée de la liste des bibliothèques.", + "LibraryListView.cleanupLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", + "LibraryListView.cleanupLibraryList.validated": "La liste des bibliothèques a été validée avec succès.", + "LibraryListView.setCurrentLibrary.failed": "La bibliothèque {0} ne peut pas devenir la bibliothèque en cours: {1}", + + "objectBrowser.delete.confirm": "Êtes-vous sûr de vouloir supprimer {0}?", + "objectBrowser.delete.multiple.confirm": "Êtes-vous sûr de vouloir supprimer les {0} éléments sélectionnés?", + "objectBrowser.delete.progress": "Suppression", + "objectBrowser.createMember.prompt": "Nom du nouveau membre source (membre.ext)", + "objectBrowser.createMember.progressTitle": "Creation du membre {0}...", + "objectBrowser.createMember.errorMessage": "Erreur lors de la creation du membre {0}: {1}", + "objectBrowser.copyMember.prompt": "Chemin pour la copie du membre source", + "objectBrowser.copyMember.errorMessage": "Impossible de copier un membre sur lui-même!", + "objectBrowser.copyMember.progressTitle": "Création du membre {0}...", + "objectBrowser.copyMember.overwrite": "Êtes-vous sûr de vouloir écraser le membre {0}?", + "objectBrowser.copyMember.errorMessage2": "Le membre {0} existe déjà!", + "objectBrowser.copyMember.errorMessage3": "Erreur lors de la création du membre {0}: {1}", + "objectBrowser.deleteMember.errorMessage": "Erreur lors de la suppression du membre! {0}", + "objectBrowser.updateMemberText.prompt": "Changer la description du membre {0}, *BLANK pour effacer la description", + "objectBrowser.updateMemberText.errorMessage": "Erreur lors de la mise à jour du texte du membre! {0}", + "objectBrowser.renameMember.prompt": "Renommer {0}", + "objectBrowser.renameMember.errorMessage": "Erreur lors du renommage du membre! {0}", + "objectBrowser.renameMember.invalid.input": "Le nouveau nom du membre doit être différent de l'ancien", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Le membre a été uploadé.", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Erreur lors de l'upload du contenu du membre! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Téléchargement des membres terminé.", + "objectBrowser.downloadMemberContent.errorMessage": "Erreur lors du téléchargement des membres! {0}", + "objectBrowser.downloadMemberContent.cancel": "Téléchargement des membres annulé.", + "objectBrowser.downloadMemberContent.download.progress": "Téléchargement de {0} membres", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copie des membres en streamfiles", + "objectBrowser.downloadMemberContent.download.streamfiles": "récupération des streamfiles", + "objectBrowser.searchSourceFile.prompt": "Entrez LIB/SPF/membre.ext pour chercher (membre.ext est optionnel et peut contenir des caractères génériques)", + "objectBrowser.searchSourceFile.title": "Rechercher dans un fichier source", + "objectBrowser.searchSourceFile.invalidForm": "Entrez une valeur de la forme LIB/SPF/membre.ext", + "objectBrowser.searchSourceFile.aspText": "(dans l'ASP {0})", + "objectBrowser.searchSourceFile.previousSearches": "Recherches précédentes", + "objectBrowser.searchSourceFile.placeholder": "Entrez un mot à chercher ou choisissez une recherche précédente.", + "objectBrowser.searchSourceFile.placeholder2": "Entrez le mot à chercher.", + "objectBrowser.searchSourceFile.title2": "Rechercher dans {0} {1}", + "objectBrowser.searchSourceFile.errorMessage": "Impossible de rechercher une liste avec *ALL.", + "objectBrowser.createFilter": "Créer un filtre", + "objectBrowser.createLibrary.prompt": "Nom de la nouvelle bibliothèque", + "objectBrowser.createLibrary.errorMessage": "Impossible de créer la bibliothèque \"{0}\": {1}", + "objectBrowser.createLibrary.infoMessage": "Voulez-vous ajouter la nouvelle bibliothèque à la liste des bibliothèques?", + "objectBrowser.createLibrary.errorMessage2": "Nom de bibliothèque trop long.", + "objectBrowser.createSourceFile.prompt": "Nom du nouveau fichier source", + "objectBrowser.createSourceFile.infoMessage": "Création du fichier source {0}.", + "objectBrowser.createSourceFile.errorMessage": "Erreur lors de la création du fichier source! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Le nom du fichier source doit faire au maximum 10 caractères de long.", + "objectBrowser.changeObjectDesc.prompt": "Changer la description de l'objet pour {0}, *BLANK pour effacer la description", + "objectBrowser.changeObjectDesc.errorMessage": "La description de l'objet doit faire au maximum 50 caractères de long.", + "objectBrowser.changeObjectDesc.infoMessage": "La description de l'objet {0} {1} a été changée.", + "objectBrowser.changeObjectDesc.errorMessage2": "Erreur lors du changement de la description de {0}! {1}", + "objectBrowser.copyObject.prompt": "Duplication de l'objet vers une nouvelle bibliothèque/objet", + "objectBrowser.copyObject.errorMessage": "Chemin invalide: {0}. Utilisez le format LIB/OBJ", + "objectBrowser.copyObject.errorMessage2": "Le nom de la bibliothèque doit faire au maximum 10 caractères de long.", + "objectBrowser.copyObject.errorMessage3": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.copyObject.infoMessage": "Objet {0} {1} copié vers {2}.", + "objectBrowser.copyObject.infoMessage2": "Objet {0} {1} copié vers {2}. Rafraîchissement de l'explorateur d'objet.", + "objectBrowser.copyObject.errorMessage4": "Erreur lors de la copie de l'objet {0}! {1}", + "objectBrowser.deleteObject.errorMessage": "Erreur lors de la suppression de l'objet! {0}", + "objectBrowser.renameObject.prompt": "Renamer l'objet", + "objectBrowser.renameObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.renameObject.infoMessage": "Objet {0} {1} renommé {2}.", + "objectBrowser.renameObject.progress": "Renommage de l'objet {0} {1} en {2}...", + "objectBrowser.renameObject.errorMessage2": "Erreur lors du renommage de l'objet {0}! {1}", + "objectBrowser.moveObject.prompt": "Déplacer l'objet", + "objectBrowser.moveObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.moveObject.infoMessage": "Objet {0} {1} déplacé vers {2}.", + "objectBrowser.moveObject.infoMessage2": "Objet {0} {1} déplacé vers {2}. Rafraîchissement de l'explorateur d'objet.", + "objectBrowser.moveObject.errorMessage2": "Erreur lors du déplacement de l'objet {0}! {1}", + "objectBrowser.moveObject.progress": "Déplacement de l'objet {0} {1} vers {2}...", + "objectBrowser.doSearchInSourceFile.title": "Recherche", + "objectBrowser.doSearchInSourceFile.progressMessage": "Récupération de la liste des membres de {0}.", + "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" dans {1}.", + "objectBrowser.doSearchInSourceFile.searchMessage2": "La recherche prend du temps car il y a {0} membres...mais elle continue!", + "objectBrowser.doSearchInSourceFile.searchMessage3": "Qu'est ce que \"{0}\" a de si spécial en fait?!", + "objectBrowser.doSearchInSourceFile.searchMessage4": "Les fouilles pour trouver \"{0}\" dans {1} continuent...⛏", + "objectBrowser.doSearchInSourceFile.searchMessage5": "Sinon ça va vous? Et si on se faisait un thé? 🍵", + "objectBrowser.doSearchInSourceFile.searchMessage6": "Bon...c'est vraiment long là! Espérons que vous allez trouver ce que vous cherchez! 🤞🏻", + "objectBrowser.doSearchInSourceFile.searchMessage7": "Qu'est ce qui est jaune et qui attend?", + "objectBrowser.doSearchInSourceFile.searchMessage8": "Mais...pourquoi il y a {0} membres dans ce fichier en fait?", + "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" in {1}.", + "objectBrowser.doSearchInSourceFile.notFound": "Aucun résultat trouvé pour \"{0}\" dans {1}.", + "objectBrowser.doSearchInSourceFile.noMembers": "Aucun membre à rechercher.", + "objectBrowser.doSearchInSourceFile.errorMessage": "Erreur lors de la recherche de membres source: {0}", + + "ProfilesView.saveConnectionProfile.prompt": "Nom du profil", + "ProfilesView.saveConnectionProfile.infoMessage": "Paramètres actuels sauvés sur le profil \"{0}\".", + "ProfilesView.deleteConnectionProfile.warningMessage": "Êtes-vous sûr de vouloir supprimer le profil \"{0}\"?", + "ProfilesView.loadConnectionProfile.infoMessage": "Le profil en cours est \"{0}\".", + "ProfilesView.loadCommandProfile.infoMessage": "Le profil en cours est \"{0}\".", + "ProfilesView.loadCommandProfile.warningMessage": "Échec de la récupération de la liste des bibliothèque depuis la commande. Fonctionnalité non installée.", + "ProfilesView.loadCommandProfile.errorMessage": "Échec de la récupération de la liste des bibliothèque depuis la commande: {0}", + "ProfilesView.setToDefault.infoMessage": "Réinitialisation", + "ProfilesView.setToDefault.detail": "La liste des bibliothèques Utilisateur, le répertoire de travail et les variables personnalisées vont être réinitialisés.", + + "actions.CURLIB": "Bibliothèque en cours, modifiable depuis la Liste des Bibliothèques", + "actions.USERNAME": "Nom d'utilisateur de la connexion", + "actions.WORKDIR": "Répertoire de travail actuel, modifiable dans le navigateur IFS", + "actions.HOST": "Nom d'hôte ou adresse IP de la connexion", + "actions.BRANCH": "Branche Git en cours", + "actions.BRANCHLIB": "Bibliothèque de la branche, basée sur la branche en cours", + "actions.BUILDLIB": "Voir &CURLIB", + "actions.LIBLC": "Liste des bilbiothèques, séparée par des virgules", + "actions.LIBLS": "Liste des bilbiothèques, séparée par des espaces", + "actions.OPENLIB": "Nom de la bibliothèque contenant le membre source (&OPENLIBL pour le nom en minuscule)", + "actions.OPENSPF": "Nom du fichier source contenant le membre source (&OPENSPFL pour le nom en minuscule)", + "actions.OPENMBR": "Nom du membre source (&OPENMBRL pour le nom en minuscule)", + "actions.member.EXT": "Extension du membre source (&EXTL pour le nom en minuscule)", + "actions.FULLPATH": "Chemin absolu du fichier sur le système distant", + "actions.FILEDIR": "Répertoire du fichier sur le système distant", + "actions.RELATIVEPATH": "Chemin relatif du fichier de flux à partir du répertoire de travail ou de l'espace de travail", + "actions.PARENT": "Nom du répertoire parent du fichier", + "actions.BASENAME": "Nom du fichier avec son extension", + "actions.streamfile.NAME": "Nom du fichier (&NAMEL pour le nom en minuscule)", + "actions.streamfile.EXT": "Extension du fichier (&EXTL pour le nom en minuscule)", + "actions.LIBRARY": "Nom de la bibliothèque contenant l'objet (&LIBRARYL pour le nom en minuscule)", + "actions.NAME": "Nom de l'objet (&NAMEL pour le nom en minuscule)", + "actions.NAMEL": "Nom de l'objet en minuscule", + "actions.object.TYPE": "Type de l'objet (&TYPEL pour le nom en minuscule)", + "actions.object.EXT": "Extension/attribut de l'objet (&EXTL pour le nom en minuscule)", + "actions.EXT": "Extension du fichier", + "actions.EXTL": "Extension du fichier en minuscule", + "actions.mainMenu.workWithActions": "Maintenance des Actions", + "actions.mainMenu.createOrMaintain": "Créez ou éditez des Actions. Les Actions sont groupées par type.", + "actions.mainMenu.newAction": "Créer Action", + "actions.duplicate.select": "Sélectionnez l'action à dupliquer", + "actions.workAction.create.title": "Créer une action", + "actions.workAction.edit.title": "Édition de l'action \"{0}\"", + "actions.workAction.duplicate.title": "Duplication de l'action \"{0}\"", + "actions.workAction.name": "Nom de l'action", + "actions.workAction.command": "Commande(s) à exécuter", + "actions.workAction.command.description": "Les variables ci-dessous sont disponibles en fonction du Type sélectionné ci-après. Vous pouvez définir plusieurs commande; une par ligne. Chaque commande est exécutée dans son propre Job et n'a pas d'état.", + "actions.workAction.extensions": "Extensions", + "actions.workAction.extensions.description": "Liste d'extensions de membre/fichier ou de type/attribut d'objet, séparée par des virgules.", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "Les types de fichier auxquels s'appliquent l'action.", + "actions.workAction.types.member": "Membre", + "actions.workAction.types.member.description": "Membres source du système de fichier QSYS", + "actions.workAction.types.streamfile": "Fichier", + "actions.workAction.types.streamfile.description": "Fichier stocké sur l'IFS", + "actions.workAction.types.object": "Objet", + "actions.workAction.types.object.description": "Objets du système de fichier QSYS", + "actions.workAction.types.file": "Fichier Local (Workspace)", + "actions.workAction.types.file.description": "Fichiers locaux du Workspace VS Code", + "actions.workAction.environment": "Environnement", + "actions.workAction.environment.description": "Environnement d'exécution des commandes de l'action.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Exécution en commande ILE", + "actions.workAction.environment.qsh": "QShell", + "actions.workAction.environment.qsh.description": "Exécution via QShell", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Exécution via l'environnement PASE", + "actions.workAction.delete.confirm": "Êtes-vous sûr de vouloir supprimer l'action \"{0}\"?", + "actions.workAction.refresh": "Rafraîchissement", + "actions.workAction.refresh.description": "Le niveau du navigateur devant être rafraîchi une fois l\"action exécutée", + "actions.workAction.refresh.no": "Aucun", + "actions.workAction.refresh.no.description": "Pas de rafraîchissement", + "actions.workAction.refresh.parent": "Parent", + "actions.workAction.refresh.parent.description": "Le conteneur parent est rafraîchi", + "actions.workAction.refresh.filter": "Filtre", + "actions.workAction.refresh.filter.description": "Le filtre parent est rafraîchi", + "actions.workAction.refresh.browser": "Navigateur", + "actions.workAction.refresh.browser.description": "Le navigateur est entièrement rafraîchi", + "actions.workAction.runOnProtected": "Exécuter en mode protégé/lecture seule", + "actions.workAction.runOnProtected.description": "Autorise l'exécution de cette action sur des cibles protégés ou en lecture seule", + + "debugger.status": "Status du débogueur {0}", + "loading.debugger.info": "Chargement du status du débogueur...", + "debug.server": "Serveur de débogage", + "debug.service": "Service de débogage", + "active.job": "Job actif", + "jvm.info": "Information JVM", + "debug.service.certificate": "Certificat du service de débogage", + "service.certificate.exists": "Certificat du service existe", + "local.certificate": "Certificat local", + "certificates.match": "Certif. local correspond au certif. distant", + "generate.certificate": "Generer le certificat du service", + "download.certificate": "Télécharger le certificat", + "not.found.in": "Non trouvé dans {0}", + "strdbgsvr.succeeded": "Serveur de débogage démarré.", + "strdbgsvr.failed": "Échec du démarrage du serveur de débogage: {0}", + "enddbgsvr.succeeded": "Serveur de débogage arrêté.", + "enddbgsvr.failed": "Échec de l\"arrêt du serveur de débogage: {0}", + "start.debug.service.task": "Démarrage du service de débogage...", + "start.debug.service.succeeded": "Service de débogage démarré.", + "start.debug.service.failed": "Échec du démarrage du service de débogage: {0}", + "stop.debug.service.task": "Arrêt du service de débogage...", + "stop.debug.service.succeeded": "Service de débogage arrêté.", + "stop.debug.service.failed": "Échec de l\"arrêt du service de débogage: {0}", + "open.service.configuration": "Ouvrir la configuration", + "detail.reading.error": "Erreur de lecture du fichier détail du service de débogage {0}: {1}", + "start.debug.server.task": "Démarrage du serveur de débogage...", + "stop.debug.server.task": "Arrêt du serveur de débogage...", + "remote.certificate.not.found": "Le certificat du service n\"existe pas", + "remote.certificate.not.found.detail": "{0} n\"a pas été trouvé dans {1}", + "local.certificate.not.found": "Le certificat local n\"existe pas", + "local.dont.match.remote": "Le certificat local ne correspond pas à celui du service", + "debug.service.submit.options":"Options de soumission du Service de Debug", + "debug.service.submit.options.prompt":"Paramètres valides de SBMJOB" +} \ No newline at end of file diff --git a/src/locale/ids/fr.ts b/src/locale/ids/fr.ts deleted file mode 100644 index b271b5ac3..000000000 --- a/src/locale/ids/fr.ts +++ /dev/null @@ -1,402 +0,0 @@ -import { Locale } from ".."; - -export const fr: Locale = { - // Common words and texts: - 'Yes': `Oui`, - 'No': `Non`, - 'Cancel': `Annuler`, - 'Retry': `Réessayer`, - 'Continue': `Continue`, - 'directory': `Répertoire`, - 'shortcut': `raccourci`, - 'streamfile': `fichier`, - 'error': `erreur`, - 'errors': `erreurs`, - 'clearList': `$(trash) Effacer liste`, - 'clearedList': `Liste effacée.`, - 'currentLibrary': `(bibliothèque en cours)`, - 'current': `actuelle`, - 'duplicate': 'Dupliquer', - 'save': 'Enregistrer', - 'delete': 'Supprimer', - 'cancel': 'Annuler', - 'not.connected': 'Non connecté à un IBM i', - 'text': 'Texte', - 'members': 'Membres', - 'length': 'Longueur', - 'CCSID': 'CCSID', - 'lines': 'Lignes', - 'created': 'Création', - 'changed': 'Modification', - 'size': 'Taille', - 'modified': 'Modifié', - 'owner': 'Propriétaire', - 'type': 'Type', - 'attribute': 'Attribut', - 'created_by': 'Créé par', - 'overwrite': 'Écraser', - 'overwrite_all': 'Écraser tout', - 'ask.overwrite': '{0} existe déjà.\nVoulez-vous le remplacer?', - 'skip': 'Ignorer', - 'skip_all': 'Ignorer tout', - 'password': 'Mot de passe', - 'privateKey': 'Clé privée', - 'username': 'Utilisateur', - 'stored': `enregistré`, - 'offline': 'Hors ligne', - 'online': 'En ligne', - 'status': 'Status', - 'job': 'Job', - 'start': 'Démarrer', - 'restart': 'Redémarrer', - 'stop': 'Arrêter', - 'listening.on.port': 'Écoute sur le port', - 'listening.on.ports': 'Écoute sur les ports', - 'overview': 'Aperçu', - 'JOB_NAME_SHORT': 'Nom du job', - 'JOB_USER': 'Utilisateur', - 'JOB_NUMBER': 'Numéro du job', - 'SUBSYSTEM': 'Sous-système', - 'AUTHORIZATION_NAME': 'Utilisateur en cours', - 'JOB_STATUS': 'Status du job', - 'MEMORY_POOL': 'Pool mémoire', - 'START_TIME': 'Démarré le', - 'JAVA_HOME': 'Java Home', - 'USER_DIRECTORY': 'Répertoire utilisateur', - 'CURRENT_HEAP_SIZE': 'Mémoire utilisée', - 'MAX_HEAP_SIZE': 'Mémoire maximum allouée', - // Sandbox: - 'sandbox.input.user.title': `Nom d'utilisateur`, - 'sandbox.input.user.prompt': `Entrez le nom d'utilisateur pour {0}`, - 'sandbox.input.password.title': `Mot de passe`, - 'sandbox.input.password.prompt': `Entrez le mot de passe pour {0}@{1}`, - 'sandbox.failedToConnect.text': 'Échec de la connexion à {0} avec {1}', - 'sandbox.failedToConnect.title': `Échec de la connexion`, - 'sandbox.noPassword': `Connexion à {0} interrompue car aucun mot de passe n'a été fourni.`, - 'sandbox.alreadyConnected': `Cette instance de Visual Studio Code est déjà connectée à un serveur.`, - 'sandbox.connected.modal.title': `Merci d'essayer le bac à sable Code for IBM i!`, - 'sandbox.connected.modal.detail': `Vous êtes seul responsable de l'utilisation du bas à sable. Ne partagez pas d'informations à caractère sensible ou privé.`, - 'sandbox.noconnection.modal.title': `Aïe aïe aïe, le bac à sable est en panne!`, - 'sandbox.noconnection.modal.detail': `Désolé, le bac à sable est est hors-ligne pour le moment. Réessayez plus tard.`, - // ConnectionBrowser: - 'connectionBrowser.connectTo.lastConnection': `Dernière connexion`, - 'connectionBrowser.connectTo.lastUsed': `Dernière utilisation: {0}`, - 'connectionBrowser.connectTo.title': `Dernières connexions IBM i`, - 'connectionBrowser.connectTo.error': `Utilisez l'Explorateur de Serveur pour sélectionner le serveur auquel se connecter.`, - 'connectionBrowser.renameConnection.prompt': `Renommer la connexion '{0}'`, - 'connectionBrowser.renameConnection.alreadyExists': `La connexion '{0}' existe déjà.`, - 'connectionBrowser.renameConnection.invalid.input': `Le nouveau nom de la connexion doit être différent de son nom actuel`, - 'connectionBrowser.renameConnection.noConnectionFound': `Aucune connexion nommée '{0}' n' a été trouvée`, - 'connectionBrowser.renameConnection.noConnParmsFound': `Aucun paramètre pour la connexion '{0}' n'a été trouvé`, - 'connectionBrowser.renameConnection.error': `Erreur lors du renommage de la connexion '{0}'! {1}`, - 'connectionBrowser.deleteConnection.warning': `Êtes vous sûr de vouloir supprimer la connexion '{0}'?`, - 'connectionBrowser.deleteConnection.multiple.warning': `Êtes vous sûr de vouloir supprimer ces {0} connexions?`, - 'connectionBrowser.ServerItem.tooltip': ` (précédente connexion)`, - 'connectionBrowser.ServerItem.title': `Se Connecter`, - 'connectionBrowser.copyConnection.prompt': `Copier la connexion '{0}'`, - 'connectionBrowser.copyConnection.placeholder': `Nouveau nom de connexion`, - 'connectionBrowser.copyConnection.already.exists': `La connexion '{0}' existe déjà`, - 'connectionBrowser.copyConnection.select.settings': `Sélectionner les paramètres à copier de '{0}' vers '{1}'`, - 'connectionBrowser.copyConnection.select.home.directory': `Répertoire home`, - 'connectionBrowser.copyConnection.select.library.list': `Liste de bibliothèques`, - 'connectionBrowser.copyConnection.select.object.filters': `Filtres d'objets`, - 'connectionBrowser.copyConnection.select.ifs.shortcuts': `Raccourcis IFS`, - 'connectionBrowser.copyConnection.select.custom.variables': `Variables personnalisées`, - 'connectionBrowser.copyConnection.select.command.profiles': `Profiles de commande`, - 'connectionBrowser.copyConnection.select.connection.profiles': `Profile de connection`, - // Login page: - 'login.title.create': `Connect to IBM i`, - 'login.title.edit': `paramètres d'authentification: '{0}'`, - 'login.host': `Nom d'Hôte ou Adresse IP`, - 'login.port': `Port (SSH)`, - 'login.authDecision': `Renseignez soit le mot de passe, soit la clé privée - pas les deux.`, - 'login.removeAuth': `Supprimer l'authentification`, - 'login.authRemoved': `Authentification supprimée pour '{0}'.`, - 'login.password.label': 'Rensignez un mot de passe seulement si vous souhaitez le changer.', - 'login.password.updated': `Mot de passe mis à jour et utilisé pour se connecter à '{0}'.`, - 'login.savePassword': `Sauvegarder Mot de passe`, - 'login.privateKey.label': `Sélectionnez une clé privée seulement si vous souhaitez en changer.`, - 'login.privateKey.support': 'Les formats OpenSSH, RFC4716 et PPK sont supportés.', - 'login.privateKey.updated': `Clé privée mise à jour et utilisée pour se connecter à '{0}'.`, - // helpView: - 'helpView.getStarted': `Pour commencer`, - 'helpView.officialForum': `Forum officiel`, - 'helpView.reviewIssues': `Voir les incidents`, - 'helpView.reportIssue': `Déclarer un incident`, - // ifsBrowser: - 'ifsBrowser.changeWorkingDirectory.prompt': `Changer le répertoire courant`, - 'ifsBrowser.changeWorkingDirectory.message': `Répertoire courant changé pour {0}.`, - 'ifsBrowser.addIFSShortcut.prompt': `Chemin du répertoire IFS`, - 'ifsBrowser.addIFSShortcut.error': `{0} n'est pas un répertoire.`, - 'ifsBrowser.addIFSShortcut.errorMessage': `Erreur lors de la création du raccourci IFS! {0}`, - 'ifsBrowser.removeIFSShortcut.placeHolder': `Sélection du raccourci IFS à supprimer`, - 'ifsBrowser.createDirectory.prompt': `Chemin du nouveau répertoire`, - 'ifsBrowser.createDirectory.errorMessage': `Erreur à la création du répertoire! {0}`, - 'ifsBrowser.createStreamfile.prompt': `Nom du nouveau fichier`, - 'ifsBrowser.createStreamfile.infoMessage': `Création du fichier {0}.`, - 'ifsBrowser.createStreamfile.errorMessage': `Erreur lors de la création du fichier! {0}`, - 'ifsBrowser.uploadStreamfile.uploadedFiles': `Envoi terminée.`, - 'ifsBrowser.uploadStreamfile.errorMessage': `Erreur lors de l'envoi des fichiers! {0}`, - 'ifsBrowser.uploadStreamfile.noFilesSelected': `Aucun fichier ou dossier sélectionné pour l'envoi.`, - 'ifsBrowser.uploadStreamfile.process.uploading': `Téléchargement`, - 'ifsBrowser.uploadStreamfile.process.uploading.files': `envoi de {0} fichier(s)...`, - 'ifsBrowser.uploadStreamfile.process.uploading.directory': 'envoi du répertoire {0}...', - 'ifsBrowser.uploadStreamfile.ask': 'Voulez-vous déplacer ou copier la sélection vers {0}?', - 'ifsBrowser.uploadStreamfile.copy': 'Copier', - 'ifsBrowser.uploadStreamfile.move': 'Déplacer', - 'ifsBrowser.uploadStreamfile.copy.failed': 'Échec de la copie de la sélection vers {0}: {1}', - 'ifsBrowser.uploadStreamfile.move.failed': 'Échec du déplacement de la sélection vers {0}: {1}', - 'ifsBrowser.uploadStreamfile.select.type.folders': 'Dossiers', - 'ifsBrowser.uploadStreamfile.select.type.files': 'Fichiers', - 'ifsBrowser.uploadStreamfile.select.type.title': 'Que souhaitez-vous envoyer?', - 'ifsBrowser.deleteIFS.dirNotAllowed': `Impossible de supprimer les répertoires protégés depuis l'Explorateur IFS!\n{0}`, - 'ifsBrowser.deleteIFS.warningMessage': `Êtes-vous sûr de vouloir suprimer {0}?`, - 'ifsBrowser.deleteIFS.multi.warningMessage': `Êtes-vous sûr de vouloir suprimer les {0} fichiers sélectionnés?`, - 'ifsBrowser.deleteIFS.deletionPrompt': `La suppression du répertoire est irréversible!\nEntrez \"{0}\" pour confirmer la suppression.`, - 'ifsBrowser.deleteIFS.deletionPrompt2': ` (Appuyer sur \'Escape\' pour annuler)`, - 'ifsBrowser.deleteIFS.progress': `Suppression de {0} élément(s)...`, - 'ifsBrowser.deleteIFS.errorMessage': `Erreur lors de la suppression du fichier! {0}`, - 'ifsBrowser.deleteIFS.cancelled': `Suppression annulée.`, - 'ifsBrowser.deleteIFS.default.home.dir': '{0} était le répertoire de travail; c\'est désormais {1}.', - 'ifsBrowser.moveIFS.prompt': `Nouveau chemin`, - 'ifsBrowser.moveIFS.errorMessage': `Erreur lors du renommage/déplacement de {0}! {1}`, - 'ifsBrowser.moveIFS.renamed': `{0} a été renommé {1}.`, - 'ifsBrowser.moveIFS.moved': `{0} a été déplacé vers {1}.`, - 'ifsBrowser.copyIFS.prompt': `Nouveau chemin`, - 'ifsBrowser.copyIFS.infoMessage': `{0} a été copié vers {1}.`, - 'ifsBrowser.copyIFS.errorMessage': `Erreur lors de la copie de {0}! {1}`, - 'ifsBrowser.searchIFS.prompt': `Entrez le répertoire IFS où chercher`, - 'ifsBrowser.searchIFS.title': `Chercher dans un répertoire`, - 'ifsBrowser.searchIFS.previousSearches': `Recherches précédentes`, - 'ifsBrowser.searchIFS.placeholder': `Entrez un mot à chercher ou choisissez une recherche précédente.`, - 'ifsBrowser.searchIFS.placeholder2': `Entrez le mot à chercher.`, - 'ifsBrowser.searchIFS.title2': `Chercher dans {0}.`, - 'ifsBrowser.searchIFS.noGrep': `grep doit être installé sur le système distant pour la recherche sur l'IFS.`, - 'ifsBrowser.downloadStreamfile.downloading': 'Téléchargement', - 'ifsBrowser.downloadStreamfile.complete': `Téléchargement terminé`, - 'ifsBrowser.downloadStreamfile.errorMessage': `Erreur lors du téléchargement: {0}`, - 'ifsBrowser.getChildren.errorMessage': `Erreur lors du chargement des objets.`, - 'ifsBrowser.handleFileListErrors.errorMessage': `{0} {1} s'est produit lors du chargement des fichiers.`, - 'ifsBrowser.doSearchInStreamfiles.title': `Recherche`, - 'ifsBrowser.doSearchInStreamfiles.progressMessage': `'{0}' dans {1}.`, - 'ifsBrowser.doSearchInStreamfiles.noResults': `Aucun résultat trouvé pour '{0}' dans {1}.`, - 'ifsBrowser.doSearchInStreamfiles.errorMessage': `Erreur lors de la recherche de fichiers.`, - 'ifsBrowser.copyToStreamfile.infoMessage': `{0} member(s) copied to streamfile(s) in {1}.`, - 'ifsBrowser.copyToStreamfile.failed': `Error copying member(s) to {0}: {1}`, - // LibraryListView: - 'LibraryListView.changeCurrentLibrary.currentlyActive': `Active`, - 'LibraryListView.changeCurrentLibrary.recentlyUsed': `Utilisé récemment`, - 'LibraryListView.changeCurrentLibrary.placeholder': `Filtre ou nouvelle bibliothèque à utiliser comme bibliothèque en cours`, - 'LibraryListView.changeCurrentLibrary.title': `Changer la bibliothèque en cours`, - 'LibraryListView.changeCurrentLibrary.changedCurrent': `La bibliothèque en cours est maintenant {0}.`, - 'LibraryListView.changeCurrentLibrary.alreadyCurrent': `{0} est déjà la bibliothèque en cours.`, - 'LibraryListView.changeUserLibraryList.prompt': `Changement de la liste des bibliothèques (valeur spécial: '*reset')`, - 'LibraryListView.changeUserLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`, - 'LibraryListView.addToLibraryList.prompt': `Bibliothèque à ajouter`, - 'LibraryListView.addToLibraryList.tooLong': `Le nom de bibliothèque est trop long.`, - 'LibraryListView.addToLibraryList.alreadyInList': `La bibliohtèque {0} est déjà dans la liste des bibliothèques.`, - 'LibraryListView.addToLibraryList.invalidLib': `La bibliohtèque {0} n'existe pas.`, - 'LibraryListView.addToLibraryList.addedLib': `La bibliohtèque {0} a été ajoutée à la liste des bibliothèques.`, - 'LibraryListView.addToLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`, - 'LibraryListView.removeFromLibraryList.removedLib': `La bibliohtèque {0} a été retirée de la liste des bibliothèques.`, - 'LibraryListView.cleanupLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`, - 'LibraryListView.cleanupLibraryList.validated': `La liste des bibliothèques a été validée avec succès.`, - 'LibraryListView.setCurrentLibrary.failed': 'La bibliothèque {0} ne peut pas devenir la bibliothèque en cours: {1}', - // objectBrowser: - 'objectBrowser.delete.confirm': 'Êtes-vous sûr de vouloir supprimer {0}?', - 'objectBrowser.delete.multiple.confirm': 'Êtes-vous sûr de vouloir supprimer les {0} éléments sélectionnés?', - 'objectBrowser.delete.progress': 'Suppression', - 'objectBrowser.createMember.prompt': `Nom du nouveau membre source (membre.ext)`, - 'objectBrowser.createMember.progressTitle': `Creation du membre {0}...`, - 'objectBrowser.createMember.errorMessage': `Erreur lors de la creation du membre {0}: {1}`, - 'objectBrowser.copyMember.prompt': `Chemin pour la copie du membre source`, - 'objectBrowser.copyMember.errorMessage': `Impossible de copier un membre sur lui-même!`, - 'objectBrowser.copyMember.progressTitle': `Création du membre {0}...`, - 'objectBrowser.copyMember.overwrite': `Êtes-vous sûr de vouloir écraser le membre {0}?`, - 'objectBrowser.copyMember.errorMessage2': `Le membre {0} existe déjà!`, - 'objectBrowser.copyMember.errorMessage3': `Erreur lors de la création du membre {0}: {1}`, - 'objectBrowser.deleteMember.errorMessage': `Erreur lors de la suppression du membre! {0}`, - 'objectBrowser.updateMemberText.prompt': `Changer la description du membre {0}, *BLANK pour effacer la description`, - 'objectBrowser.updateMemberText.errorMessage': `Erreur lors de la mise à jour du texte du membre! {0}`, - 'objectBrowser.renameMember.prompt': `Renommer {0}`, - 'objectBrowser.renameMember.errorMessage': `Erreur lors du renommage du membre! {0}`, - 'objectBrowser.renameMember.invalid.input': `Le nouveau nom du membre doit être différent de l'ancien`, - 'objectBrowser.uploadAndReplaceMemberAsFile.infoMessage': `Le membre a été uploadé.`, - 'objectBrowser.uploadAndReplaceMemberAsFile.errorMessage': `Erreur lors de l'upload du contenu du membre! {0}`, - 'objectBrowser.downloadMemberContent.infoMessage': `Téléchargement des membres terminé.`, - 'objectBrowser.downloadMemberContent.errorMessage': `Erreur lors du téléchargement des membres! {0}`, - 'objectBrowser.downloadMemberContent.cancel': `Téléchargement des membres annulé.`, - 'objectBrowser.downloadMemberContent.download.progress': 'Téléchargement de {0} membres', - 'objectBrowser.downloadMemberContent.download.cpytostmf': 'copie des membres en streamfiles', - 'objectBrowser.downloadMemberContent.download.streamfiles': 'récupération des streamfiles', - 'objectBrowser.searchSourceFile.prompt': `Entrez LIB/SPF/membre.ext pour chercher (membre.ext est optionnel et peut contenir des caractères génériques)`, - 'objectBrowser.searchSourceFile.title': `Rechercher dans un fichier source`, - 'objectBrowser.searchSourceFile.invalidForm': `Entrez une valeur de la forme LIB/SPF/membre.ext`, - 'objectBrowser.searchSourceFile.aspText': `(dans l'ASP {0})`, - 'objectBrowser.searchSourceFile.previousSearches': `Recherches précédentes`, - 'objectBrowser.searchSourceFile.placeholder': `Entrez un mot à chercher ou choisissez une recherche précédente.`, - 'objectBrowser.searchSourceFile.placeholder2': `Entrez le mot à chercher.`, - 'objectBrowser.searchSourceFile.title2': `Rechercher dans {0} {1}`, - 'objectBrowser.searchSourceFile.errorMessage': `Impossible de rechercher une liste avec *ALL.`, - 'objectBrowser.createFilter': `Créer un filtre`, - 'objectBrowser.createLibrary.prompt': `Nom de la nouvelle bibliothèque`, - 'objectBrowser.createLibrary.errorMessage': `Impossible de créer la bibliothèque "{0}": {1}`, - 'objectBrowser.createLibrary.infoMessage': `Voulez-vous ajouter la nouvelle bibliothèque à la liste des bibliothèques?`, - 'objectBrowser.createLibrary.errorMessage2': `Nom de bibliothèque trop long.`, - 'objectBrowser.createSourceFile.prompt': `Nom du nouveau fichier source`, - 'objectBrowser.createSourceFile.infoMessage': `Création du fichier source {0}.`, - 'objectBrowser.createSourceFile.errorMessage': `Erreur lors de la création du fichier source! {0}`, - 'objectBrowser.createSourceFile.errorMessage2': `Le nom du fichier source doit faire au maximum 10 caractères de long.`, - 'objectBrowser.changeObjectDesc.prompt': `Changer la description de l'objet pour {0}, *BLANK pour effacer la description`, - 'objectBrowser.changeObjectDesc.errorMessage': `La description de l'objet doit faire au maximum 50 caractères de long.`, - 'objectBrowser.changeObjectDesc.infoMessage': `La description de l'objet {0} {1} a été changée.`, - 'objectBrowser.changeObjectDesc.errorMessage2': `Erreur lors du changement de la description de {0}! {1}`, - 'objectBrowser.copyObject.prompt': `Duplication de l'objet vers une nouvelle bibliothèque/objet`, - 'objectBrowser.copyObject.errorMessage': `Chemin invalide: {0}. Utilisez le format LIB/OBJ`, - 'objectBrowser.copyObject.errorMessage2': `Le nom de la bibliothèque doit faire au maximum 10 caractères de long.`, - 'objectBrowser.copyObject.errorMessage3': `Le nom de l'objet doit faire au maximum 10 caractères de long.`, - 'objectBrowser.copyObject.infoMessage': `Objet {0} {1} copié vers {2}.`, - 'objectBrowser.copyObject.infoMessage2': `Objet {0} {1} copié vers {2}. Rafraîchissement de l'explorateur d'objet.`, - 'objectBrowser.copyObject.errorMessage4': `Erreur lors de la copie de l'objet {0}! {1}`, - 'objectBrowser.deleteObject.errorMessage': `Erreur lors de la suppression de l'objet! {0}`, - 'objectBrowser.renameObject.prompt': `Renamer l'objet`, - 'objectBrowser.renameObject.errorMessage': `Le nom de l'objet doit faire au maximum 10 caractères de long.`, - 'objectBrowser.renameObject.infoMessage': `Objet {0} {1} renommé {2}.`, - 'objectBrowser.renameObject.progress': `Renommage de l'objet {0} {1} en {2}...`, - 'objectBrowser.renameObject.errorMessage2': `Erreur lors du renommage de l'objet {0}! {1}`, - 'objectBrowser.moveObject.prompt': `Déplacer l'objet`, - 'objectBrowser.moveObject.errorMessage': `Le nom de l'objet doit faire au maximum 10 caractères de long.`, - 'objectBrowser.moveObject.infoMessage': `Objet {0} {1} déplacé vers {2}.`, - 'objectBrowser.moveObject.infoMessage2': `Objet {0} {1} déplacé vers {2}. Rafraîchissement de l'explorateur d'objet.`, - 'objectBrowser.moveObject.errorMessage2': `Erreur lors du déplacement de l'objet {0}! {1}`, - 'objectBrowser.moveObject.progress': `Déplacement de l'objet {0} {1} vers {2}...`, - 'objectBrowser.doSearchInSourceFile.title': `Recherche`, - 'objectBrowser.doSearchInSourceFile.progressMessage': `Récupération de la liste des membres de {0}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage1': `'{0}' dans {1}.`, - 'objectBrowser.doSearchInSourceFile.searchMessage2': `La recherche prend du temps car il y a {0} membres...mais elle continue!`, - 'objectBrowser.doSearchInSourceFile.searchMessage3': `Qu'est ce que '{0}' a de si spécial en fait?!`, - 'objectBrowser.doSearchInSourceFile.searchMessage4': `Les fouilles pour trouver '{0}' dans {1} continuent...⛏`, - 'objectBrowser.doSearchInSourceFile.searchMessage5': `Sinon ça va vous? Et si on se faisait un thé? 🍵`, - 'objectBrowser.doSearchInSourceFile.searchMessage6': `Bon...c'est vraiment long là! Espérons que vous allez trouver ce que vous cherchez! 🤞🏻`, - 'objectBrowser.doSearchInSourceFile.searchMessage7': `Qu'est ce qui est jaune et qui attend?`, - 'objectBrowser.doSearchInSourceFile.searchMessage8': `Mais...pourquoi il y a {0} membres dans ce fichier en fait?`, - 'objectBrowser.doSearchInSourceFile.searchMessage9': `'{0}' in {1}.`, - 'objectBrowser.doSearchInSourceFile.notFound': `Aucun résultat trouvé pour '{0}' dans {1}.`, - 'objectBrowser.doSearchInSourceFile.noMembers': `Aucun membre à rechercher.`, - 'objectBrowser.doSearchInSourceFile.errorMessage': `Erreur lors de la recherche de membres source: {0}`, - // ProfilesView: - 'ProfilesView.saveConnectionProfile.prompt': `Nom du profil`, - 'ProfilesView.saveConnectionProfile.infoMessage': `Paramètres actuels sauvés sur le profil '{0}'.`, - 'ProfilesView.deleteConnectionProfile.warningMessage': `Êtes-vous sûr de vouloir supprimer le profil '{0}'?`, - 'ProfilesView.loadConnectionProfile.infoMessage': `Le profil en cours est '{0}'.`, - 'ProfilesView.loadCommandProfile.infoMessage': `Le profil en cours est '{0}'.`, - 'ProfilesView.loadCommandProfile.warningMessage': `Échec de la récupération de la liste des bibliothèque depuis la commande. Fonctionnalité non installée.`, - 'ProfilesView.loadCommandProfile.errorMessage': `Échec de la récupération de la liste des bibliothèque depuis la commande: {0}`, - 'ProfilesView.setToDefault.infoMessage': `Réinitialisation`, - 'ProfilesView.setToDefault.detail': `La liste des bibliothèques Utilisateur, le répertoire de travail et les variables personnalisées vont être réinitialisés.`, - //Actions - 'actions.CURLIB': 'Bibliothèque en cours, modifiable depuis la Liste des Bibliothèques', - 'actions.USERNAME': `Nom d'utilisateur de la connexion`, - 'actions.WORKDIR': `Répertoire de travail actuel, modifiable dans le navigateur IFS`, - 'actions.HOST': `Nom d'hôte ou adresse IP de la connexion`, - 'actions.BRANCH': `Branche Git en cours`, - 'actions.BRANCHLIB': `Bibliothèque de la branche, basée sur la branche en cours`, - 'actions.BUILDLIB': `Voir &CURLIB`, - 'actions.LIBLC': `Liste des bilbiothèques, séparée par des virgules`, - 'actions.LIBLS': `Liste des bilbiothèques, séparée par des espaces`, - 'actions.OPENLIB': `Nom de la bibliothèque contenant le membre source (&OPENLIBL pour le nom en minuscule)`, - 'actions.OPENSPF': `Nom du fichier source contenant le membre source (&OPENSPFL pour le nom en minuscule)`, - 'actions.OPENMBR': `Nom du membre source (&OPENMBRL pour le nom en minuscule)`, - 'actions.member.EXT': `Extension du membre source (&EXTL pour le nom en minuscule)`, - 'actions.FULLPATH': `Chemin absolu du fichier sur le système distant`, - 'actions.FILEDIR': `Répertoire du fichier sur le système distant`, - 'actions.RELATIVEPATH': `Chemin relatif du fichier de flux à partir du répertoire de travail ou de l'espace de travail`, - 'actions.PARENT': `Nom du répertoire parent du fichier`, - 'actions.BASENAME': `Nom du fichier avec son extension`, - 'actions.streamfile.NAME': `Nom du fichier (&NAMEL pour le nom en minuscule)`, - 'actions.streamfile.EXT': `Extension du fichier (&EXTL pour le nom en minuscule)`, - 'actions.LIBRARY': `Nom de la bibliothèque contenant l'objet (&LIBRARYL pour le nom en minuscule)`, - 'actions.NAME': `Nom de l'objet (&NAMEL pour le nom en minuscule)`, - 'actions.NAMEL': `Nom de l'objet en minuscule`, - 'actions.object.TYPE': `Type de l'objet (&TYPEL pour le nom en minuscule)`, - 'actions.object.EXT': `Extension/attribut de l'objet (&EXTL pour le nom en minuscule)`, - 'actions.EXT': `Extension du fichier`, - 'actions.EXTL': `Extension du fichier en minuscule`, - 'actions.mainMenu.workWithActions': `Maintenance des Actions`, - 'actions.mainMenu.createOrMaintain': `Créez ou éditez des Actions. Les Actions sont groupées par type.`, - 'actions.mainMenu.newAction': `Créer Action`, - 'actions.duplicate.select': `Sélectionnez l'action à dupliquer`, - 'actions.workAction.create.title': `Créer une action`, - 'actions.workAction.edit.title': `Édition de l'action "{0}"`, - 'actions.workAction.duplicate.title': `Duplication de l'action "{0}"`, - 'actions.workAction.name': `Nom de l'action`, - 'actions.workAction.command': `Commande(s) à exécuter`, - 'actions.workAction.command.description': `Les variables ci-dessous sont disponibles en fonction du Type sélectionné ci-après. Vous pouvez définir plusieurs commande; une par ligne. Chaque commande est exécutée dans son propre Job et n'a pas d'état.`, - 'actions.workAction.extensions': `Extensions`, - 'actions.workAction.extensions.description': `Liste d'extensions de membre/fichier ou de type/attribut d'objet, séparée par des virgules.`, - 'actions.workAction.types': `Type`, - 'actions.workAction.types.description': `Les types de fichier auxquels s'appliquent l'action.`, - 'actions.workAction.types.member': `Membre`, - 'actions.workAction.types.member.description': `Membres source du système de fichier QSYS`, - 'actions.workAction.types.streamfile': `Fichier`, - 'actions.workAction.types.streamfile.description': `Fichier stocké sur l'IFS`, - 'actions.workAction.types.object': `Objet`, - 'actions.workAction.types.object.description': `Objets du système de fichier QSYS`, - 'actions.workAction.types.file': `Fichier Local (Workspace)`, - 'actions.workAction.types.file.description': `Fichiers locaux du Workspace VS Code`, - 'actions.workAction.environment': `Environnement`, - 'actions.workAction.environment.description': `Environnement d'exécution des commandes de l'action.`, - 'actions.workAction.environment.ile': `ILE`, - 'actions.workAction.environment.ile.description': `Exécution en commande ILE`, - 'actions.workAction.environment.qsh': `QShell`, - 'actions.workAction.environment.qsh.description': `Exécution via QShell`, - 'actions.workAction.environment.pase': `PASE`, - 'actions.workAction.environment.pase.description': `Exécution via l'environnement PASE`, - 'actions.workAction.delete.confirm': `Êtes-vous sûr de vouloir supprimer l'action "{0}"?`, - 'actions.workAction.refresh': 'Rafraîchissement', - 'actions.workAction.refresh.description': 'Le niveau du navigateur devant être rafraîchi une fois l\'action exécutée', - 'actions.workAction.refresh.no': 'Aucun', - 'actions.workAction.refresh.no.description': 'Pas de rafraîchissement', - 'actions.workAction.refresh.parent': 'Parent', - 'actions.workAction.refresh.parent.description': 'Le conteneur parent est rafraîchi', - 'actions.workAction.refresh.filter': 'Filtre', - 'actions.workAction.refresh.filter.description': 'Le filtre parent est rafraîchi', - 'actions.workAction.refresh.browser': 'Navigateur', - 'actions.workAction.refresh.browser.description': 'Le navigateur est entièrement rafraîchi', - 'actions.workAction.runOnProtected': 'Exécuter en mode protégé/lecture seule', - 'actions.workAction.runOnProtected.description': `Autorise l'exécution de cette action sur des cibles protégés ou en lecture seule`, - //Debugger - 'debugger.status': 'Status du débogueur {0}', - 'loading.debugger.info': 'Chargement du status du débogueur...', - 'debug.server': 'Serveur de débogage', - 'debug.service': 'Service de débogage', - 'active.job': 'Job actif', - 'jvm.info': 'Information JVM', - 'debug.service.certificate': 'Certificat du service de débogage', - 'service.certificate.exists': 'Certificat du service existe', - 'local.certificate': 'Certificat local', - 'certificates.match': 'Certif. local correspond au certif. distant', - 'generate.certificate': 'Generer le certificat du service', - 'download.certificate': 'Télécharger le certificat', - 'not.found.in': 'Non trouvé dans {0}', - 'strdbgsvr.succeeded': 'Serveur de débogage démarré.', - 'strdbgsvr.failed': 'Échec du démarrage du serveur de débogage: {0}', - 'enddbgsvr.succeeded': 'Serveur de débogage arrêté.', - 'enddbgsvr.failed': 'Échec de l\'arrêt du serveur de débogage: {0}', - 'start.debug.service.task': 'Démarrage du service de débogage...', - 'start.debug.service.succeeded': 'Service de débogage démarré.', - 'start.debug.service.failed': 'Échec du démarrage du service de débogage: {0}', - 'stop.debug.service.task': 'Arrêt du service de débogage...', - 'stop.debug.service.succeeded': 'Service de débogage arrêté.', - 'stop.debug.service.failed': 'Échec de l\'arrêt du service de débogage: {0}', - 'open.service.configuration': 'Ouvrir la configuration', - 'detail.reading.error': 'Erreur de lecture du fichier détail du service de débogage {0}: {1}', - 'start.debug.server.task': 'Démarrage du serveur de débogage...', - 'stop.debug.server.task': 'Arrêt du serveur de débogage...', - 'remote.certificate.not.found': 'Le certificat du service n\'existe pas', - 'remote.certificate.not.found.detail': '{0} n\'a pas été trouvé dans {1}', - 'local.certificate.not.found': 'Le certificat local n\'existe pas', - 'local.dont.match.remote': 'Le certificat local ne correspond pas à celui du service', - 'debug.service.submit.options':'Options de soumission du Service de Debug', - 'debug.service.submit.options.prompt':'Paramètres valides de SBMJOB' -}; \ No newline at end of file diff --git a/src/locale/index.ts b/src/locale/index.ts index 8f8e20ac6..8bdd7d02a 100644 --- a/src/locale/index.ts +++ b/src/locale/index.ts @@ -1,8 +1,8 @@ import { env } from "vscode"; import { GlobalConfiguration } from "../api/Configuration"; -import { da } from "./ids/da"; -import { en } from "./ids/en"; -import { fr } from "./ids/fr"; +import da from "./ids/da.json"; +import en from "./ids/en.json"; +import fr from "./ids/fr.json"; export type Locale = {[id: string]: string}; diff --git a/tsconfig.json b/tsconfig.json index 4e25136e5..867b94387 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "lib": [ "ES2022" ], + "resolveJsonModule": true, "forceConsistentCasingInFileNames": true, "allowJs": true, "esModuleInterop": true, From b94ce7c562ea1818dbffef7513890d0eb2a7cafb Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Tue, 7 May 2024 17:12:26 +0200 Subject: [PATCH 02/16] Re-ordered and formatted Signed-off-by: Seb Julliand --- src/locale/ids/da.json | 666 ++++++++++++++++++++-------------------- src/locale/ids/en.json | 668 ++++++++++++++++++++--------------------- src/locale/ids/fr.json | 666 ++++++++++++++++++++-------------------- 3 files changed, 985 insertions(+), 1015 deletions(-) diff --git a/src/locale/ids/da.json b/src/locale/ids/da.json index f373c22c4..5f3de6001 100644 --- a/src/locale/ids/da.json +++ b/src/locale/ids/da.json @@ -1,273 +1,285 @@ { - "Yes": "Ja", - "No": "Nej", - "Cancel": "Afbryd", - "Retry": "Prøv igen", - "Continue": "Fortsæt", - "directory": "mappe", - "shortcut": "genvej", - "streamfile": "fil", - "error": "fejl", - "errors": "fejl", - "clearList": "$(trash) Nulstil liste", - "clearedList": "Nulstillede liste.", - "currentLibrary": "(aktuelle bibliotek)", - "current": "aktuelle", - "duplicate": "Kopier", - "save": "Gem", - "delete": "Slet", + "actions.BASENAME": "Navn på filen, inklusive filtypen", + "actions.BRANCH": "Nuværende git-gren", + "actions.BRANCHLIB": "Bibliotek for den nuværende Git-gren", + "actions.BUILDLIB": "Det samme som &CURLIB", + "actions.CURLIB": "Aktuelle bibliotek (sættes i Library List)", + "actions.duplicate.select": "Vælg en aktion til kopiering", + "actions.EXT": "Filtypen", + "actions.EXTL": "Filtypen med små bogstaver", + "actions.FILEDIR": "Katalog over filen på fjernsystemet", + "actions.FULLPATH": "Fulde sti på filen på fjernsystemet", + "actions.HOST": "Host navn eller IP adresse fra den aktuelle forbindelse", + "actions.LIBLC": "Liste af biblioteker adskilt af komma", + "actions.LIBLS": "Liste af biblioteker adskilt af mellemrum", + "actions.LIBRARY": "Biblioteksnavn med objektet (&LIBRARYL for små bogstaver)", + "actions.mainMenu.createOrMaintain": "Opret eller revider Aktioner. Aktioner er grupperede efter typen på de vedrørte filer/objekter.", + "actions.mainMenu.newAction": "Opret", + "actions.mainMenu.workWithActions": "Arbejd med Aktioner", + "actions.member.EXT": "Type af source member (&EXTL for små bogstaver)", + "actions.NAME": "Navn på objektet (&NAMEL for små bogstaver)", + "actions.NAMEL": "Navn på objektet med små bogstaver", + "actions.object.EXT": "Objektets attribut (&EXTL for små bogstaver)", + "actions.object.TYPE": "Typen af objektet (&TYPEL for små bogstaver)", + "actions.OPENLIB": "Biblioteksnavn med source member (&OPENLIBL for små bogstaver)", + "actions.OPENMBR": "Navn på source member (&OPENMBRL for små bogstaver)", + "actions.OPENSPF": "Source fil navn med source member (&OPENSPFL for små bogstaver)", + "actions.PARENT": "Navn på forrige mappe eller source fil", + "actions.RELATIVEPATH": "Relativ sti til streamfilen fra arbejdsbiblioteket eller arbejdsområdet", + "actions.streamfile.EXT": "Filtypen (&EXTL for små bogstaver)", + "actions.streamfile.NAME": "Navn på filen (&NAMEL for små bogstaver)", + "actions.USERNAME": "Brugernavn for forbindelsen", + "actions.workAction.command": "Kommandoer", + "actions.workAction.command.description": "Nedenfor er de tilgængelige variable, baseret på objekt typen. Du kan angive forskellige kommandoer på hver linie. Hver kommando er \"stateless\" og afvikles i eget job.", + "actions.workAction.create.title": "Opret aktion", + "actions.workAction.delete.confirm": "Er du sikker på du vil slette \"{0}\"?", + "actions.workAction.duplicate.title": "Kopier aktion \"{0}\"", + "actions.workAction.edit.title": "Revider aktion \"{0}\"", + "actions.workAction.environment": "Miljø", + "actions.workAction.environment.description": "Miljø som kommandoerne skal afvikles i.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Afvikles som ILE kommando", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Afvikles som kommando i PASE", + "actions.workAction.environment.qsh": "QSHELL", + "actions.workAction.environment.qsh.description": "Afvikles som kommando i QSHELL", + "actions.workAction.extensions": "Typer", + "actions.workAction.extensions.description": "En komma-separeret liste af typer for denne aktion. Dette kan være en member type, en streamfile filtype, en objekt type eller en objekt attribut.", + "actions.workAction.name": "Aktionsnavn", + "actions.workAction.refresh": "Opfrisk", + "actions.workAction.refresh.browser": "Vindue", + "actions.workAction.refresh.browser.description": "Hele vinduet bliver opfrisket", + "actions.workAction.refresh.description": "Liste niveauet for opfriskning efter aktion er udført.", + "actions.workAction.refresh.filter": "Filter", + "actions.workAction.refresh.filter.description": "Det aktuelle filter bliver opfrisket", + "actions.workAction.refresh.no": "Ingen", + "actions.workAction.refresh.no.description": "Ingen opfriskning", + "actions.workAction.refresh.parent": "Container", + "actions.workAction.refresh.parent.description": "Den aktuelle container bliver opfrisket", + "actions.workAction.runOnProtected": "Må afvikles på sikret/skrive-beskyttet", + "actions.workAction.runOnProtected.description": "Tillader afvikling af denne aktion på sikrede eller skrive-beskyttede mål", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "Typer understøttet af denne aktion.", + "actions.workAction.types.file": "Lokal fil (workspace)", + "actions.workAction.types.file.description": "Aktioner for lokale filer i VS Code Workspace.", + "actions.workAction.types.member": "Member", + "actions.workAction.types.member.description": "Source members i QSYS filsystemet", + "actions.workAction.types.object": "Objekt", + "actions.workAction.types.object.description": "Objekter i QSYS filsystemet", + "actions.workAction.types.streamfile": "Streamfile", + "actions.workAction.types.streamfile.description": "Filer i det integrerede filsystem (IFS)", + "actions.WORKDIR": "Aktuel arbejdsmappe, kan ændres i IFS Browser", + "active.job": "Aktive job", + "ask.overwrite": "{0} eksisterer allerede.\nVil du erstatte?", + "attribute": "Attribut", + "AUTHORIZATION_NAME": "Aktuelle bruger", "cancel": "Afbryd", - "not.connected": "Ikke forbundet til en IBM i", - "text": "Tekst", - "members": "Members", - "length": "Længde", + "Cancel": "Afbryd", "CCSID": "CCSID", - "lines": "Linier", - "created": "Oprettet", + "certificates.match": "Lokalt certifikat matcher værtens", "changed": "Ændret", - "size": "Størrelse", - "modified": "Ændret", - "owner": "Ejer", - "type": "Type", - "attribute": "Attribut", - "created_by": "Oprettet af", - "overwrite": "Erstat", - "overwrite_all": "Erstat alle", - "ask.overwrite": "{0} eksisterer allerede.\nVil du erstatte?", - "skip": "Spring over", - "skip_all": "Spring alle over", - "password": "Kodeord", - "privateKey": "Privat nøgle", - "username": "Brugernavn", - "stored": "gemt", - "offline": "Offline", - "online": "Online", - "status": "Status", - "job": "Job", - "start": "Start", - "restart": "Genstart", - "stop": "Stop", - "listening.on.port": "Lytter på port", - "listening.on.ports": "Lytter på porte", - "overview": "Overblik", - "JOB_NAME_SHORT": "Job navn", - "JOB_USER": "Job bruger", - "JOB_NUMBER": "Job nummer", - "SUBSYSTEM": "Subsystem", - "AUTHORIZATION_NAME": "Aktuelle bruger", - "JOB_STATUS": "Job status", - "MEMORY_POOL": "Memory pulje", - "START_TIME": "Start tid", - "JAVA_HOME": "Java Home", - "USER_DIRECTORY": "Bruger mappe", - "CURRENT_HEAP_SIZE": "Nuværende memory", - "MAX_HEAP_SIZE": "Maksimalt tilladt memory", - - "sandbox.input.user.title": "Bruger for server", - "sandbox.input.user.prompt": "Indtast brugernavn for {0}", - "sandbox.input.password.title": "Kodeord for server", - "sandbox.input.password.prompt": "Indtast kodeord for {0}@{1}", - "sandbox.failedToConnect.text": "Fejl ved forbindelse til {0} som {1}", - "sandbox.failedToConnect.title": "Fejl ved forbindelse", - "sandbox.noPassword": "Forbindelse til {0} afsluttet da intet kodeord blev angivet.", - "sandbox.alreadyConnected": "Denne Visual Studio Code instans er allerede forbundet til en server.", - "sandbox.connected.modal.title": "Tak for at afprøve Code for IBM i Sandbox!", - "sandbox.connected.modal.detail": "Du bruger dette system på egen risiko. Del ingen følsomme eller private informationer.", - "sandbox.noconnection.modal.title": "Åh nej! \"Sandkassen\" er ikke tilgængelig.", - "sandbox.noconnection.modal.detail": "Desværre, men \"Sandkassen\" er ikke tilgængelig lige nu. Prøv igen lidt senere.", - + "clearedList": "Nulstillede liste.", + "clearList": "$(trash) Nulstil liste", + "connectionBrowser.connectTo.error": "Brug Servere vinduet til at vælge hvilket system, der skal forbindes til.", "connectionBrowser.connectTo.lastConnection": "Seneste forbindelse", "connectionBrowser.connectTo.lastUsed": "Senest brugt: {0}", "connectionBrowser.connectTo.title": "Seneste IBM i forbindelser", - "connectionBrowser.connectTo.error": "Brug Servere vinduet til at vælge hvilket system, der skal forbindes til.", - "connectionBrowser.renameConnection.prompt": "Omdøb forbindelsen \"{0}\"", + "connectionBrowser.copyConnection.already.exists": "Forbindelsen \"{0}\" eksisterer allerede", + "connectionBrowser.copyConnection.placeholder": "Navn på ny forbindelse", + "connectionBrowser.copyConnection.prompt": "Kopier forbindelsen \"{0}\"", + "connectionBrowser.copyConnection.select.command.profiles": "Kommando profiler", + "connectionBrowser.copyConnection.select.connection.profiles": "Forbindelses profiler", + "connectionBrowser.copyConnection.select.custom.variables": "Bruger variable", + "connectionBrowser.copyConnection.select.home.directory": "Aktuelle mappe", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS genveje", + "connectionBrowser.copyConnection.select.library.list": "Biblioteks listen", + "connectionBrowser.copyConnection.select.object.filters": "Objekt filtre", + "connectionBrowser.copyConnection.select.settings": "Vælg indstillingerne, der skal kopieres fra \"{0}\" til \"{1}\"", + "connectionBrowser.deleteConnection.multiple.warning": "Er du sikker på at du vil slette disse {0} forbindelser?", + "connectionBrowser.deleteConnection.warning": "Er du sikker på at du vil slette forbindelsen \"{0}\"?", "connectionBrowser.renameConnection.alreadyExists": "Forbindelsen \"{0}\" findes allerede.", + "connectionBrowser.renameConnection.error": "Fejl ved omdøbning af forbindelsen \"{0}\"! {1}", "connectionBrowser.renameConnection.invalid.input": "Nyt forbindelses navn skal være forskelligt fra det nuværende navn", "connectionBrowser.renameConnection.noConnectionFound": "Ingen forbindelse med navnet \"{0}\" blev fundet", "connectionBrowser.renameConnection.noConnParmsFound": "Ingen parametre til forbindelsen \"{0}\" blev fundet", - "connectionBrowser.renameConnection.error": "Fejl ved omdøbning af forbindelsen \"{0}\"! {1}", - "connectionBrowser.deleteConnection.warning": "Er du sikker på at du vil slette forbindelsen \"{0}\"?", - "connectionBrowser.deleteConnection.multiple.warning": "Er du sikker på at du vil slette disse {0} forbindelser?", - "connectionBrowser.ServerItem.tooltip": " (forrige forbindelse)", + "connectionBrowser.renameConnection.prompt": "Omdøb forbindelsen \"{0}\"", "connectionBrowser.ServerItem.title": "Forbind", - "connectionBrowser.copyConnection.prompt": "Kopier forbindelsen \"{0}\"", - "connectionBrowser.copyConnection.placeholder": "Navn på ny forbindelse", - "connectionBrowser.copyConnection.already.exists": "Forbindelsen \"{0}\" eksisterer allerede", - "connectionBrowser.copyConnection.select.settings": "Vælg indstillingerne, der skal kopieres fra \"{0}\" til \"{1}\"", - "connectionBrowser.copyConnection.select.home.directory": "Aktuelle mappe", - "connectionBrowser.copyConnection.select.library.list": "Biblioteks listen", - "connectionBrowser.copyConnection.select.object.filters": "Objekt filtre", - "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS genveje", - "connectionBrowser.copyConnection.select.custom.variables": "Bruger variable", - "connectionBrowser.copyConnection.select.command.profiles": "Kommando profiler", - "connectionBrowser.copyConnection.select.connection.profiles": "Forbindelses profiler", - - "login.title.create": "Forbind til IBM i", - "login.title.edit": "Login Indstillinger: \"{0}\"", - "login.host": "Værtsnavn eller IP adresse", - "login.port": "Port (SSH)", - "login.authDecision": "Angiv enten kodeord eller privat nøgle - ikke begge dele.", - "login.removeAuth": "Fjern kodeord+nøgle", - "login.authRemoved": "Kodeord og privat nøgle er fjernet for \"{0}\".", - "login.password.label": "Angiv kun et kodeord hvis du ønsker at ændre det gemte eller oprette et nyt.", - "login.password.updated": "Kodeord er opdateret og bruges for \"{0}\".", - "login.savePassword": "Gem kodeord", - "login.privateKey.label": "Angiv kun en privat nøgle hvis du ønsker at opdatere den aktuelle eller indstille en ny.", - "login.privateKey.support": "OpenSSH, RFC4716 og PPK formater understøttes.", - "login.privateKey.updated": "Privat nøgle er opdateret og bruges for \"{0}\".", - + "connectionBrowser.ServerItem.tooltip": " (forrige forbindelse)", + "Continue": "Fortsæt", + "created": "Oprettet", + "created_by": "Oprettet af", + "current": "aktuelle", + "CURRENT_HEAP_SIZE": "Nuværende memory", + "currentLibrary": "(aktuelle bibliotek)", + "debug.server": "Debug Server", + "debug.service": "Debug Service", + "debug.service.certificate": "Debug Service certifikat", + "debug.service.submit.options": "Debug Service submit options", + "debug.service.submit.options.prompt": "Valid parameters for SBMJOB", + "debugger.status": "Debugger {0} status", + "delete": "Slet", + "detail.reading.error": "Fejl ved læsning af debug service detail fil {0}: {1}", + "directory": "mappe", + "download.certificate": "Hent certifikat", + "duplicate": "Kopier", + "enddbgsvr.failed": "Fejl ved stop af debug server: {0}", + "enddbgsvr.succeeded": "Debug server er stoppet.", + "error": "fejl", + "errors": "fejl", + "generate.certificate": "Generer service certifikat", "helpView.getStarted": "Dokumentation", "helpView.officialForum": "Forum", - "helpView.reviewIssues": "Se fejlrapporter", "helpView.reportIssue": "Opret en fejlrapport", - - "ifsBrowser.changeWorkingDirectory.prompt": "Skifter aktuelle mappe", - "ifsBrowser.changeWorkingDirectory.message": "Aktuelle mappe er skiftet til {0}.", - "ifsBrowser.addIFSShortcut.prompt": "Sti til IFS mappe", + "helpView.reviewIssues": "Se fejlrapporter", "ifsBrowser.addIFSShortcut.error": "{0} er ikke en mappe.", "ifsBrowser.addIFSShortcut.errorMessage": "Fejl ved oprettelse af IFS genvej! {0}", - "ifsBrowser.removeIFSShortcut.placeHolder": "Vælg IFS genvej til sletning", - "ifsBrowser.createDirectory.prompt": "Sti til ny mappe", + "ifsBrowser.addIFSShortcut.prompt": "Sti til IFS mappe", + "ifsBrowser.changeWorkingDirectory.message": "Aktuelle mappe er skiftet til {0}.", + "ifsBrowser.changeWorkingDirectory.prompt": "Skifter aktuelle mappe", + "ifsBrowser.copyIFS.errorMessage": "Fejl ved kopiering af {0}! {1}", + "ifsBrowser.copyIFS.infoMessage": "{0} blev kopieret til {1}.", + "ifsBrowser.copyIFS.prompt": "Nyt navn", + "ifsBrowser.copyToStreamfile.failed": "Fejl ved kopiering af member(s) til {0}: {1}", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) kopieret til streamfile(s) i {1}.", "ifsBrowser.createDirectory.errorMessage": "Fejl ved oprettelse af ny mappe! {0}", - "ifsBrowser.createStreamfile.prompt": "Navn på ny streamfile", - "ifsBrowser.createStreamfile.infoMessage": "Opretter streamfile {0}.", + "ifsBrowser.createDirectory.prompt": "Sti til ny mappe", "ifsBrowser.createStreamfile.errorMessage": "Fejl ved oprettelse af ny streamfile! {0}", - "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload er udført.", - "ifsBrowser.uploadStreamfile.errorMessage": "Fejl ved upload af filer! {0}", - "ifsBrowser.uploadStreamfile.noFilesSelected": "Ingen filer eller mapper er valgt til upload.", - "ifsBrowser.uploadStreamfile.process.uploading": "Upload", - "ifsBrowser.uploadStreamfile.process.uploading.files": "sender {0} file(r)...", - "ifsBrowser.uploadStreamfile.process.uploading.directory": "sender {0} mappe(r)...", - "ifsBrowser.uploadStreamfile.ask": "Vil du kopiere eller flytte det valgte til {0}?", - "ifsBrowser.uploadStreamfile.copy": "Kopier", - "ifsBrowser.uploadStreamfile.move": "Flyt", - "ifsBrowser.uploadStreamfile.copy.failed": "Fejl ved kopiering af det valgte til {0}: {1}", - "ifsBrowser.uploadStreamfile.move.failed": "Fejl ved flytning af det valgte til {0}: {1}", - "ifsBrowser.uploadStreamfile.select.type.folders": "Mapper", - "ifsBrowser.uploadStreamfile.select.type.files": "Filer", - "ifsBrowser.uploadStreamfile.select.type.title": "Hvad ønsker du at uploade?", - "ifsBrowser.deleteIFS.dirNotAllowed": "Ikke tilladt at slette valgte mapper fra IFS Browser.\n{0}", - "ifsBrowser.deleteIFS.warningMessage": "Er du sikker på at du vil slette {0}?", - "ifsBrowser.deleteIFS.multi.warningMessage": "Er du sikker på at du vil slette de {0} valgte filer?", + "ifsBrowser.createStreamfile.infoMessage": "Opretter streamfile {0}.", + "ifsBrowser.createStreamfile.prompt": "Navn på ny streamfile", + "ifsBrowser.deleteIFS.cancelled": "Sletning afbrudt.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} var den aktuelle mappe; det er nu {1}.", "ifsBrowser.deleteIFS.deletionPrompt": "Når du har slettet mappen, kan den ikke retableres.\nVenligst tast \"{0}\" for at bekræfte sletning.", "ifsBrowser.deleteIFS.deletionPrompt2": " (Tryk \"Escape\" for at afbryde)", - "ifsBrowser.deleteIFS.progress": "Sletning af {0} element(er)...", + "ifsBrowser.deleteIFS.dirNotAllowed": "Ikke tilladt at slette valgte mapper fra IFS Browser.\n{0}", "ifsBrowser.deleteIFS.errorMessage": "Fejl ved sletning af streamfile! {0}", - "ifsBrowser.deleteIFS.cancelled": "Sletning afbrudt.", - "ifsBrowser.deleteIFS.default.home.dir": "{0} var den aktuelle mappe; det er nu {1}.", - "ifsBrowser.moveIFS.prompt": "Nyt navn", + "ifsBrowser.deleteIFS.multi.warningMessage": "Er du sikker på at du vil slette de {0} valgte filer?", + "ifsBrowser.deleteIFS.progress": "Sletning af {0} element(er)...", + "ifsBrowser.deleteIFS.warningMessage": "Er du sikker på at du vil slette {0}?", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Fejl ved søgning i filer.", + "ifsBrowser.doSearchInStreamfiles.noResults": "Ingen resultater blev fundet ved søgning efter \"{0}\" i {1}.", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" i {1}.", + "ifsBrowser.doSearchInStreamfiles.title": "Søger", + "ifsBrowser.downloadStreamfile.complete": "Hentning gennemført.", + "ifsBrowser.downloadStreamfile.downloading": "Henter", + "ifsBrowser.downloadStreamfile.errorMessage": "Fejl under hentning: {0}", + "ifsBrowser.getChildren.errorMessage": "Fejl ved læsning af objekter.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} opstod ved visning af filer.", "ifsBrowser.moveIFS.errorMessage": "Fejl ved flytning/omdøbning af {0}! {1}", - "ifsBrowser.moveIFS.renamed": "{0} blev omdøbt til {1}.", "ifsBrowser.moveIFS.moved": "{0} blev flyttet til {1}.", - "ifsBrowser.copyIFS.prompt": "Nyt navn", - "ifsBrowser.copyIFS.infoMessage": "{0} blev kopieret til {1}.", - "ifsBrowser.copyIFS.errorMessage": "Fejl ved kopiering af {0}! {1}", - "ifsBrowser.searchIFS.prompt": "Indtast IFS mappe for søgning", - "ifsBrowser.searchIFS.title": "Søg mappe", - "ifsBrowser.searchIFS.previousSearches": "Forrige søgninger", + "ifsBrowser.moveIFS.prompt": "Nyt navn", + "ifsBrowser.moveIFS.renamed": "{0} blev omdøbt til {1}.", + "ifsBrowser.removeIFSShortcut.placeHolder": "Vælg IFS genvej til sletning", + "ifsBrowser.searchIFS.noGrep": "\"grep\" skal være installeret på systemet for IFS søgning.", "ifsBrowser.searchIFS.placeholder": "Indtast søgetekst eller vælg en af de tidligere søgninger.", "ifsBrowser.searchIFS.placeholder2": "Indtast søgetekst.", + "ifsBrowser.searchIFS.previousSearches": "Forrige søgninger", + "ifsBrowser.searchIFS.prompt": "Indtast IFS mappe for søgning", + "ifsBrowser.searchIFS.title": "Søg mappe", "ifsBrowser.searchIFS.title2": "Søg i {0}", - "ifsBrowser.searchIFS.noGrep": "\"grep\" skal være installeret på systemet for IFS søgning.", - "ifsBrowser.downloadStreamfile.downloading": "Henter", - "ifsBrowser.downloadStreamfile.complete": "Hentning gennemført.", - "ifsBrowser.downloadStreamfile.errorMessage": "Fejl under hentning: {0}", - "ifsBrowser.getChildren.errorMessage": "Fejl ved læsning af objekter.", - "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} opstod ved visning af filer.", - "ifsBrowser.doSearchInStreamfiles.title": "Søger", - "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" i {1}.", - "ifsBrowser.doSearchInStreamfiles.noResults": "Ingen resultater blev fundet ved søgning efter \"{0}\" i {1}.", - "ifsBrowser.doSearchInStreamfiles.errorMessage": "Fejl ved søgning i filer.", - "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) kopieret til streamfile(s) i {1}.", - "ifsBrowser.copyToStreamfile.failed": "Fejl ved kopiering af member(s) til {0}: {1}", - + "ifsBrowser.uploadStreamfile.ask": "Vil du kopiere eller flytte det valgte til {0}?", + "ifsBrowser.uploadStreamfile.copy": "Kopier", + "ifsBrowser.uploadStreamfile.copy.failed": "Fejl ved kopiering af det valgte til {0}: {1}", + "ifsBrowser.uploadStreamfile.errorMessage": "Fejl ved upload af filer! {0}", + "ifsBrowser.uploadStreamfile.move": "Flyt", + "ifsBrowser.uploadStreamfile.move.failed": "Fejl ved flytning af det valgte til {0}: {1}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "Ingen filer eller mapper er valgt til upload.", + "ifsBrowser.uploadStreamfile.process.uploading": "Upload", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "sender {0} mappe(r)...", + "ifsBrowser.uploadStreamfile.process.uploading.files": "sender {0} file(r)...", + "ifsBrowser.uploadStreamfile.select.type.files": "Filer", + "ifsBrowser.uploadStreamfile.select.type.folders": "Mapper", + "ifsBrowser.uploadStreamfile.select.type.title": "Hvad ønsker du at uploade?", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload er udført.", + "JAVA_HOME": "Java Home", + "job": "Job", + "JOB_NAME_SHORT": "Job navn", + "JOB_NUMBER": "Job nummer", + "JOB_STATUS": "Job status", + "JOB_USER": "Job bruger", + "jvm.info": "JVM information", + "length": "Længde", + "LibraryListView.addToLibraryList.addedLib": "Bibliotek {0} blev tilføjet til bibliotekslisten.", + "LibraryListView.addToLibraryList.alreadyInList": "Bibliotek {0} er allerede i bibliotekslisten.", + "LibraryListView.addToLibraryList.invalidLib": "Bibliotek {0} findes ikke.", + "LibraryListView.addToLibraryList.prompt": "Tilføj bibliotek", + "LibraryListView.addToLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", + "LibraryListView.addToLibraryList.tooLong": "Bibioteksnavn er for langt.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} er allerede det aktuelle bibliotek.", + "LibraryListView.changeCurrentLibrary.changedCurrent": "Skiftede aktuelle bibliotek til {0}.", "LibraryListView.changeCurrentLibrary.currentlyActive": "Nuværende", - "LibraryListView.changeCurrentLibrary.recentlyUsed": "Tidligere", "LibraryListView.changeCurrentLibrary.placeholder": "Filter eller nyt bibliotek til at sætte som aktuelle", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Tidligere", "LibraryListView.changeCurrentLibrary.title": "Skift aktuelle bibliotek", - "LibraryListView.changeCurrentLibrary.changedCurrent": "Skiftede aktuelle bibliotek til {0}.", - "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} er allerede det aktuelle bibliotek.", "LibraryListView.changeUserLibraryList.prompt": "Skift biblioteksliste (du kan bruge \"*reset\")", "LibraryListView.changeUserLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", - "LibraryListView.addToLibraryList.prompt": "Tilføj bibliotek", - "LibraryListView.addToLibraryList.tooLong": "Bibioteksnavn er for langt.", - "LibraryListView.addToLibraryList.alreadyInList": "Bibliotek {0} er allerede i bibliotekslisten.", - "LibraryListView.addToLibraryList.invalidLib": "Bibliotek {0} findes ikke.", - "LibraryListView.addToLibraryList.addedLib": "Bibliotek {0} blev tilføjet til bibliotekslisten.", - "LibraryListView.addToLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", - "LibraryListView.removeFromLibraryList.removedLib": "Bibliotek {0} blev fjernet fra bibliotekslisten.", "LibraryListView.cleanupLibraryList.removedLibs": "De følgende biblioteker blev fjernet fra den opdaterede biblioteksliste, da de ikke er gyldige: {0}", "LibraryListView.cleanupLibraryList.validated": "Bibliotekslisten blev valideret uden fejl.", + "LibraryListView.removeFromLibraryList.removedLib": "Bibliotek {0} blev fjernet fra bibliotekslisten.", "LibraryListView.setCurrentLibrary.failed": "Fejl ved skift til {0} som aktuelt bibliotek: {1}", - - "objectBrowser.delete.confirm": "Er du sikker på at du vil slette {0}?", - "objectBrowser.delete.multiple.confirm": "Er du sikker på at du vil slette de {0} valgte elementer?", - "objectBrowser.delete.progress": "Sletter", - "objectBrowser.createMember.prompt": "Navn på nyt member (member.ext)", - "objectBrowser.createMember.progressTitle": "Opretter member {0}...", - "objectBrowser.createMember.errorMessage": "Fejl ved oprettelse af member {0}: {1}", - "objectBrowser.copyMember.prompt": "Ny sti til kopiering af source member", - "objectBrowser.copyMember.errorMessage": "Kan ikke kopiere et member til sig selv!", - "objectBrowser.copyMember.progressTitle": "Opretter member {0}...", - "objectBrowser.copyMember.overwrite": "Vil du overskrive member {0}?", - "objectBrowser.copyMember.errorMessage2": "Member {0} eksisterer allerede!", - "objectBrowser.copyMember.errorMessage3": "Fejl ved oprettelse af member {0}: {1}", - "objectBrowser.deleteMember.errorMessage": "Fejl ved sletning af member! {0}", - "objectBrowser.updateMemberText.prompt": "Opdater beskrivelse af member {0}, *BLANK for ingen beskrivelse", - "objectBrowser.updateMemberText.errorMessage": "Fejl ved ændring af member beskrivelse! {0}", - "objectBrowser.renameMember.prompt": "Omdøb member {0}", - "objectBrowser.renameMember.errorMessage": "Fejl ved omdøbning af member! {0}", - "objectBrowser.renameMember.invalid.input": "Nyt member navn skal være forskelligt fra det nuværende navn", - "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Fil blev sendt til member.", - "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Fejl ved afsendelse af fil! {0}", - "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", - "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", - "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", - "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", - "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", - "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", - "objectBrowser.searchSourceFile.prompt": "Indtast LIB/SPF/member.ext til søgning (member.ext er valgfrit og kan indeholde mønstertegn)", - "objectBrowser.searchSourceFile.title": "Søg source fil", - "objectBrowser.searchSourceFile.invalidForm": "Venligst indtast værdi på formatet LIB/SPF/member.ext", - "objectBrowser.searchSourceFile.aspText": "(i ASP {0})", - "objectBrowser.searchSourceFile.previousSearches": "Forrige søgninger", - "objectBrowser.searchSourceFile.placeholder": "Indtast søgetekst eller vælg en af de tidligere søgninger.", - "objectBrowser.searchSourceFile.placeholder2": "Indtast søgetekst.", - "objectBrowser.searchSourceFile.title2": "Søg i {0} {1}", - "objectBrowser.searchSourceFile.errorMessage": "Kan ikke søge med *ALL.", - "objectBrowser.createFilter": "Opret nyt filter", - "objectBrowser.createLibrary.prompt": "Navn på nyt bibliotek", - "objectBrowser.createLibrary.errorMessage": "Kan ikke oprette bibliotek \"{0}\": {1}", - "objectBrowser.createLibrary.infoMessage": "Vil du tilføje det nyt bibliotek til bibliotekslisten?", - "objectBrowser.createLibrary.errorMessage2": "Biblioteksnavn er for langt.", - "objectBrowser.createSourceFile.prompt": "Navn på ny source fil", - "objectBrowser.createSourceFile.infoMessage": "Opretter source fil {0}.", - "objectBrowser.createSourceFile.errorMessage": "Fejl ved oprettelse af source fil! {0}", - "objectBrowser.createSourceFile.errorMessage2": "Source filnavn må være 10 tegn eller mindre.", - "objectBrowser.changeObjectDesc.prompt": "Opdater objekt beskrivelse for {0}, *BLANK for ingen beskrivelse", + "lines": "Linier", + "listening.on.port": "Lytter på port", + "listening.on.ports": "Lytter på porte", + "loading.debugger.info": "Henter debugger information...", + "local.certificate": "Lokalt certifikat", + "local.certificate.not.found": "Lokalt certifikat er ikke fundet", + "local.dont.match.remote": "Lokalt certifikat matcher ikke værtens", + "login.authDecision": "Angiv enten kodeord eller privat nøgle - ikke begge dele.", + "login.authRemoved": "Kodeord og privat nøgle er fjernet for \"{0}\".", + "login.host": "Værtsnavn eller IP adresse", + "login.password.label": "Angiv kun et kodeord hvis du ønsker at ændre det gemte eller oprette et nyt.", + "login.password.updated": "Kodeord er opdateret og bruges for \"{0}\".", + "login.port": "Port (SSH)", + "login.privateKey.label": "Angiv kun en privat nøgle hvis du ønsker at opdatere den aktuelle eller indstille en ny.", + "login.privateKey.support": "OpenSSH, RFC4716 og PPK formater understøttes.", + "login.privateKey.updated": "Privat nøgle er opdateret og bruges for \"{0}\".", + "login.removeAuth": "Fjern kodeord+nøgle", + "login.savePassword": "Gem kodeord", + "login.title.create": "Forbind til IBM i", + "login.title.edit": "Login Indstillinger: \"{0}\"", + "MAX_HEAP_SIZE": "Maksimalt tilladt memory", + "members": "Members", + "MEMORY_POOL": "Memory pulje", + "modified": "Ændret", + "No": "Nej", + "not.connected": "Ikke forbundet til en IBM i", + "not.found.in": "Ikke fundet i {0}", "objectBrowser.changeObjectDesc.errorMessage": "Objekt beskrivelse må være 50 tegn eller mindre.", - "objectBrowser.changeObjectDesc.infoMessage": "Ændrede objekt beskrivelsen for {0} {1}.", "objectBrowser.changeObjectDesc.errorMessage2": "Fejl ved ændring af objekt beskrivelse for {0}! {1}", - "objectBrowser.copyObject.prompt": "Kopier objekt til new bibliotek/objekt", + "objectBrowser.changeObjectDesc.infoMessage": "Ændrede objekt beskrivelsen for {0} {1}.", + "objectBrowser.changeObjectDesc.prompt": "Opdater objekt beskrivelse for {0}, *BLANK for ingen beskrivelse", + "objectBrowser.copyMember.errorMessage": "Kan ikke kopiere et member til sig selv!", + "objectBrowser.copyMember.errorMessage2": "Member {0} eksisterer allerede!", + "objectBrowser.copyMember.errorMessage3": "Fejl ved oprettelse af member {0}: {1}", + "objectBrowser.copyMember.overwrite": "Vil du overskrive member {0}?", + "objectBrowser.copyMember.progressTitle": "Opretter member {0}...", + "objectBrowser.copyMember.prompt": "Ny sti til kopiering af source member", "objectBrowser.copyObject.errorMessage": "Forkert sti: {0}. Brug formatet LIB/OBJ", "objectBrowser.copyObject.errorMessage2": "Biblioteksnavn må være 10 tegn eller mindre.", "objectBrowser.copyObject.errorMessage3": "Objektnavn må være 10 tegn eller mindre.", + "objectBrowser.copyObject.errorMessage4": "Fejl ved kopiering af objekt {0}! {1}", "objectBrowser.copyObject.infoMessage": "Kopierede objekt {0} {1} til {2}.", "objectBrowser.copyObject.infoMessage2": "Kopierede objekt {0} {1} til {2}. Opfrisk object browser.", - "objectBrowser.copyObject.errorMessage4": "Fejl ved kopiering af objekt {0}! {1}", + "objectBrowser.copyObject.prompt": "Kopier objekt til new bibliotek/objekt", + "objectBrowser.createFilter": "Opret nyt filter", + "objectBrowser.createLibrary.errorMessage": "Kan ikke oprette bibliotek \"{0}\": {1}", + "objectBrowser.createLibrary.errorMessage2": "Biblioteksnavn er for langt.", + "objectBrowser.createLibrary.infoMessage": "Vil du tilføje det nyt bibliotek til bibliotekslisten?", + "objectBrowser.createLibrary.prompt": "Navn på nyt bibliotek", + "objectBrowser.createMember.errorMessage": "Fejl ved oprettelse af member {0}: {1}", + "objectBrowser.createMember.progressTitle": "Opretter member {0}...", + "objectBrowser.createMember.prompt": "Navn på nyt member (member.ext)", + "objectBrowser.createSourceFile.errorMessage": "Fejl ved oprettelse af source fil! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Source filnavn må være 10 tegn eller mindre.", + "objectBrowser.createSourceFile.infoMessage": "Opretter source fil {0}.", + "objectBrowser.createSourceFile.prompt": "Navn på ny source fil", + "objectBrowser.delete.confirm": "Er du sikker på at du vil slette {0}?", + "objectBrowser.delete.multiple.confirm": "Er du sikker på at du vil slette de {0} valgte elementer?", + "objectBrowser.delete.progress": "Sletter", + "objectBrowser.deleteMember.errorMessage": "Fejl ved sletning af member! {0}", "objectBrowser.deleteObject.errorMessage": "Fejl ved sletning af objekt! {0}", - "objectBrowser.renameObject.prompt": "Omdøb objekt", - "objectBrowser.renameObject.errorMessage": "Objektnavn må være 10 tegn eller mindre.", - "objectBrowser.renameObject.infoMessage": "Omdøbte objekt {0} {1} til {2}.", - "objectBrowser.renameObject.errorMessage2": "Fejl ved omdøbning af objekt {0}! {1}", - "objectBrowser.renameObject.progress": "Omdøber objekt {0} {1} til {2}...", - "objectBrowser.moveObject.prompt": "Flyt objekt", - "objectBrowser.moveObject.errorMessage": "Objekt navn må være 10 tegn eller mindre.", - "objectBrowser.moveObject.infoMessage": "Flyttede objekt {0} {1} til {2}.", - "objectBrowser.moveObject.infoMessage2": "Flyttede objekt {0} {1} til {2}. Opfrisk object browser.", - "objectBrowser.moveObject.errorMessage2": "Fejl ved flytning af objekt {0}! {1}", - "objectBrowser.moveObject.progress": "Flytter objekt {0} {1} til {2}...", - "objectBrowser.doSearchInSourceFile.title": "Søgning", + "objectBrowser.doSearchInSourceFile.errorMessage": "Fejl ved søgning i members: {0}", + "objectBrowser.doSearchInSourceFile.noMembers": "Der er ingen members at søge i.", + "objectBrowser.doSearchInSourceFile.notFound": "Søgning efter \"{0}\" i {1} gav intet resultat.", "objectBrowser.doSearchInSourceFile.progressMessage": "Henter member liste for {0}.", "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" i {1}.", "objectBrowser.doSearchInSourceFile.searchMessage2": "Dette kan tage noget tid da der er {0} members. Søger stadig efter \"{1}\" i {2}.", @@ -278,122 +290,100 @@ "objectBrowser.doSearchInSourceFile.searchMessage7": "Der er 10 slags mennesker - dem der forstår binært og dem, der ikke gør!", "objectBrowser.doSearchInSourceFile.searchMessage8": "Hvordan i alverden ender man med {0} members?", "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" i {1}.", - "objectBrowser.doSearchInSourceFile.notFound": "Søgning efter \"{0}\" i {1} gav intet resultat.", - "objectBrowser.doSearchInSourceFile.noMembers": "Der er ingen members at søge i.", - "objectBrowser.doSearchInSourceFile.errorMessage": "Fejl ved søgning i members: {0}", - - "ProfilesView.saveConnectionProfile.prompt": "Navn på profil", - "ProfilesView.saveConnectionProfile.infoMessage": "Gemte aktuelle indstillinger til profil \"{0}\".", + "objectBrowser.doSearchInSourceFile.title": "Søgning", + "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", + "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", + "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", + "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", + "objectBrowser.moveObject.errorMessage": "Objekt navn må være 10 tegn eller mindre.", + "objectBrowser.moveObject.errorMessage2": "Fejl ved flytning af objekt {0}! {1}", + "objectBrowser.moveObject.infoMessage": "Flyttede objekt {0} {1} til {2}.", + "objectBrowser.moveObject.infoMessage2": "Flyttede objekt {0} {1} til {2}. Opfrisk object browser.", + "objectBrowser.moveObject.progress": "Flytter objekt {0} {1} til {2}...", + "objectBrowser.moveObject.prompt": "Flyt objekt", + "objectBrowser.renameMember.errorMessage": "Fejl ved omdøbning af member! {0}", + "objectBrowser.renameMember.invalid.input": "Nyt member navn skal være forskelligt fra det nuværende navn", + "objectBrowser.renameMember.prompt": "Omdøb member {0}", + "objectBrowser.renameObject.errorMessage": "Objektnavn må være 10 tegn eller mindre.", + "objectBrowser.renameObject.errorMessage2": "Fejl ved omdøbning af objekt {0}! {1}", + "objectBrowser.renameObject.infoMessage": "Omdøbte objekt {0} {1} til {2}.", + "objectBrowser.renameObject.progress": "Omdøber objekt {0} {1} til {2}...", + "objectBrowser.renameObject.prompt": "Omdøb objekt", + "objectBrowser.searchSourceFile.aspText": "(i ASP {0})", + "objectBrowser.searchSourceFile.errorMessage": "Kan ikke søge med *ALL.", + "objectBrowser.searchSourceFile.invalidForm": "Venligst indtast værdi på formatet LIB/SPF/member.ext", + "objectBrowser.searchSourceFile.placeholder": "Indtast søgetekst eller vælg en af de tidligere søgninger.", + "objectBrowser.searchSourceFile.placeholder2": "Indtast søgetekst.", + "objectBrowser.searchSourceFile.previousSearches": "Forrige søgninger", + "objectBrowser.searchSourceFile.prompt": "Indtast LIB/SPF/member.ext til søgning (member.ext er valgfrit og kan indeholde mønstertegn)", + "objectBrowser.searchSourceFile.title": "Søg source fil", + "objectBrowser.searchSourceFile.title2": "Søg i {0} {1}", + "objectBrowser.updateMemberText.errorMessage": "Fejl ved ændring af member beskrivelse! {0}", + "objectBrowser.updateMemberText.prompt": "Opdater beskrivelse af member {0}, *BLANK for ingen beskrivelse", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Fejl ved afsendelse af fil! {0}", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Fil blev sendt til member.", + "offline": "Offline", + "online": "Online", + "open.service.configuration": "Åbn konfiguration", + "overview": "Overblik", + "overwrite": "Erstat", + "overwrite_all": "Erstat alle", + "owner": "Ejer", + "password": "Kodeord", + "privateKey": "Privat nøgle", "ProfilesView.deleteConnectionProfile.warningMessage": "Er du sikker på at du vil slette profilen \"{0}\"?", - "ProfilesView.loadConnectionProfile.infoMessage": "Skiftede til profilen \"{0}\".", + "ProfilesView.loadCommandProfile.errorMessage": "Fejl ved at hente bibliotekslisten fra kommando: {0}", "ProfilesView.loadCommandProfile.infoMessage": "Skiftede til profilen \"{0}\".", "ProfilesView.loadCommandProfile.warningMessage": "Fejl ved at hente bibliotekslisten fra kommando. Feature er ikke installeret.", - "ProfilesView.loadCommandProfile.errorMessage": "Fejl ved at hente bibliotekslisten fra kommando: {0}", - "ProfilesView.setToDefault.infoMessage": "Nulstil til standard", + "ProfilesView.loadConnectionProfile.infoMessage": "Skiftede til profilen \"{0}\".", + "ProfilesView.saveConnectionProfile.infoMessage": "Gemte aktuelle indstillinger til profil \"{0}\".", + "ProfilesView.saveConnectionProfile.prompt": "Navn på profil", "ProfilesView.setToDefault.detail": "Dette vil nulstille bibliotekslisten, aktuelle mappe og Bruger Variable.", - - "actions.CURLIB": "Aktuelle bibliotek (sættes i Library List)", - "actions.USERNAME": "Brugernavn for forbindelsen", - "actions.WORKDIR": "Aktuel arbejdsmappe, kan ændres i IFS Browser", - "actions.HOST": "Host navn eller IP adresse fra den aktuelle forbindelse", - "actions.BRANCH": "Nuværende git-gren", - "actions.BRANCHLIB": "Bibliotek for den nuværende Git-gren", - "actions.BUILDLIB": "Det samme som &CURLIB", - "actions.LIBLC": "Liste af biblioteker adskilt af komma", - "actions.LIBLS": "Liste af biblioteker adskilt af mellemrum", - "actions.OPENLIB": "Biblioteksnavn med source member (&OPENLIBL for små bogstaver)", - "actions.OPENSPF": "Source fil navn med source member (&OPENSPFL for små bogstaver)", - "actions.OPENMBR": "Navn på source member (&OPENMBRL for små bogstaver)", - "actions.member.EXT": "Type af source member (&EXTL for små bogstaver)", - "actions.FULLPATH": "Fulde sti på filen på fjernsystemet", - "actions.FILEDIR": "Katalog over filen på fjernsystemet", - "actions.RELATIVEPATH": "Relativ sti til streamfilen fra arbejdsbiblioteket eller arbejdsområdet", - "actions.PARENT": "Navn på forrige mappe eller source fil", - "actions.BASENAME": "Navn på filen, inklusive filtypen", - "actions.streamfile.NAME": "Navn på filen (&NAMEL for små bogstaver)", - "actions.streamfile.EXT": "Filtypen (&EXTL for små bogstaver)", - "actions.LIBRARY": "Biblioteksnavn med objektet (&LIBRARYL for små bogstaver)", - "actions.NAME": "Navn på objektet (&NAMEL for små bogstaver)", - "actions.NAMEL": "Navn på objektet med små bogstaver", - "actions.object.TYPE": "Typen af objektet (&TYPEL for små bogstaver)", - "actions.object.EXT": "Objektets attribut (&EXTL for små bogstaver)", - "actions.EXT": "Filtypen", - "actions.EXTL": "Filtypen med små bogstaver", - "actions.mainMenu.workWithActions": "Arbejd med Aktioner", - "actions.mainMenu.createOrMaintain": "Opret eller revider Aktioner. Aktioner er grupperede efter typen på de vedrørte filer/objekter.", - "actions.mainMenu.newAction": "Opret", - "actions.duplicate.select": "Vælg en aktion til kopiering", - "actions.workAction.create.title": "Opret aktion", - "actions.workAction.edit.title": "Revider aktion \"{0}\"", - "actions.workAction.duplicate.title": "Kopier aktion \"{0}\"", - "actions.workAction.name": "Aktionsnavn", - "actions.workAction.command": "Kommandoer", - "actions.workAction.command.description": "Nedenfor er de tilgængelige variable, baseret på objekt typen. Du kan angive forskellige kommandoer på hver linie. Hver kommando er \"stateless\" og afvikles i eget job.", - "actions.workAction.extensions": "Typer", - "actions.workAction.extensions.description": "En komma-separeret liste af typer for denne aktion. Dette kan være en member type, en streamfile filtype, en objekt type eller en objekt attribut.", - "actions.workAction.types": "Type", - "actions.workAction.types.description": "Typer understøttet af denne aktion.", - "actions.workAction.types.member": "Member", - "actions.workAction.types.member.description": "Source members i QSYS filsystemet", - "actions.workAction.types.streamfile": "Streamfile", - "actions.workAction.types.streamfile.description": "Filer i det integrerede filsystem (IFS)", - "actions.workAction.types.object": "Objekt", - "actions.workAction.types.object.description": "Objekter i QSYS filsystemet", - "actions.workAction.types.file": "Lokal fil (workspace)", - "actions.workAction.types.file.description": "Aktioner for lokale filer i VS Code Workspace.", - "actions.workAction.environment": "Miljø", - "actions.workAction.environment.description": "Miljø som kommandoerne skal afvikles i.", - "actions.workAction.environment.ile": "ILE", - "actions.workAction.environment.ile.description": "Afvikles som ILE kommando", - "actions.workAction.environment.qsh": "QSHELL", - "actions.workAction.environment.qsh.description": "Afvikles som kommando i QSHELL", - "actions.workAction.environment.pase": "PASE", - "actions.workAction.environment.pase.description": "Afvikles som kommando i PASE", - "actions.workAction.delete.confirm": "Er du sikker på du vil slette \"{0}\"?", - "actions.workAction.refresh": "Opfrisk", - "actions.workAction.refresh.description": "Liste niveauet for opfriskning efter aktion er udført.", - "actions.workAction.refresh.no": "Ingen", - "actions.workAction.refresh.no.description": "Ingen opfriskning", - "actions.workAction.refresh.parent": "Container", - "actions.workAction.refresh.parent.description": "Den aktuelle container bliver opfrisket", - "actions.workAction.refresh.filter": "Filter", - "actions.workAction.refresh.filter.description": "Det aktuelle filter bliver opfrisket", - "actions.workAction.refresh.browser": "Vindue", - "actions.workAction.refresh.browser.description": "Hele vinduet bliver opfrisket", - "actions.workAction.runOnProtected": "Må afvikles på sikret/skrive-beskyttet", - "actions.workAction.runOnProtected.description": "Tillader afvikling af denne aktion på sikrede eller skrive-beskyttede mål", - - "debugger.status": "Debugger {0} status", - "loading.debugger.info": "Henter debugger information...", - "debug.server": "Debug Server", - "debug.service": "Debug Service", - "active.job": "Aktive job", - "jvm.info": "JVM information", - "debug.service.certificate": "Debug Service certifikat", + "ProfilesView.setToDefault.infoMessage": "Nulstil til standard", + "remote.certificate.not.found": "Værtens certifikat er ikke fundet", + "remote.certificate.not.found.detail": "{0} er ikke fundet under {1}", + "restart": "Genstart", + "Retry": "Prøv igen", + "sandbox.alreadyConnected": "Denne Visual Studio Code instans er allerede forbundet til en server.", + "sandbox.connected.modal.detail": "Du bruger dette system på egen risiko. Del ingen følsomme eller private informationer.", + "sandbox.connected.modal.title": "Tak for at afprøve Code for IBM i Sandbox!", + "sandbox.failedToConnect.text": "Fejl ved forbindelse til {0} som {1}", + "sandbox.failedToConnect.title": "Fejl ved forbindelse", + "sandbox.input.password.prompt": "Indtast kodeord for {0}@{1}", + "sandbox.input.password.title": "Kodeord for server", + "sandbox.input.user.prompt": "Indtast brugernavn for {0}", + "sandbox.input.user.title": "Bruger for server", + "sandbox.noconnection.modal.detail": "Desværre, men \"Sandkassen\" er ikke tilgængelig lige nu. Prøv igen lidt senere.", + "sandbox.noconnection.modal.title": "Åh nej! \"Sandkassen\" er ikke tilgængelig.", + "sandbox.noPassword": "Forbindelse til {0} afsluttet da intet kodeord blev angivet.", + "save": "Gem", "service.certificate.exists": "Remote service certifikat eksisterer", - "local.certificate": "Lokalt certifikat", - "certificates.match": "Lokalt certifikat matcher værtens", - "generate.certificate": "Generer service certifikat", - "download.certificate": "Hent certifikat", - "not.found.in": "Ikke fundet i {0}", - "strdbgsvr.succeeded": "Debug server er startet.", - "strdbgsvr.failed": "Fejl ved start af debug server: {0}", - "enddbgsvr.succeeded": "Debug server er stoppet.", - "enddbgsvr.failed": "Fejl ved stop af debug server: {0}", - "start.debug.service.task": "Starter debug service...", - "start.debug.service.succeeded": "Debug service er startet.", - "start.debug.service.failed": "Fejl ved start af debug service: {0}", - "stop.debug.service.task": "Stopper debug service...", - "stop.debug.service.succeeded": "Debug service er stoppet.", - "stop.debug.service.failed": "Fejl ved stop af debug service: {0}", - "open.service.configuration": "Åbn konfiguration", - "detail.reading.error": "Fejl ved læsning af debug service detail fil {0}: {1}", + "shortcut": "genvej", + "size": "Størrelse", + "skip": "Spring over", + "skip_all": "Spring alle over", + "start": "Start", + "START_TIME": "Start tid", "start.debug.server.task": "Starter debug server...", + "start.debug.service.failed": "Fejl ved start af debug service: {0}", + "start.debug.service.succeeded": "Debug service er startet.", + "start.debug.service.task": "Starter debug service...", + "status": "Status", + "stop": "Stop", "stop.debug.server.task": "Stopper debug server...", - "remote.certificate.not.found": "Værtens certifikat er ikke fundet", - "remote.certificate.not.found.detail": "{0} er ikke fundet under {1}", - "local.certificate.not.found": "Lokalt certifikat er ikke fundet", - "local.dont.match.remote": "Lokalt certifikat matcher ikke værtens", - "debug.service.submit.options":"Debug Service submit options", - "debug.service.submit.options.prompt":"Valid parameters for SBMJOB" + "stop.debug.service.failed": "Fejl ved stop af debug service: {0}", + "stop.debug.service.succeeded": "Debug service er stoppet.", + "stop.debug.service.task": "Stopper debug service...", + "stored": "gemt", + "strdbgsvr.failed": "Fejl ved start af debug server: {0}", + "strdbgsvr.succeeded": "Debug server er startet.", + "streamfile": "fil", + "SUBSYSTEM": "Subsystem", + "text": "Tekst", + "type": "Type", + "USER_DIRECTORY": "Bruger mappe", + "username": "Brugernavn", + "Yes": "Ja" } \ No newline at end of file diff --git a/src/locale/ids/en.json b/src/locale/ids/en.json index fcc080b33..faff6b5dd 100644 --- a/src/locale/ids/en.json +++ b/src/locale/ids/en.json @@ -1,273 +1,285 @@ - { - "Yes": "Yes", - "No": "No", - "Cancel": "Cancel", - "Retry": "Retry", - "Continue": "Continue", - "directory": "directory", - "shortcut": "shortcut", - "streamfile": "streamfile", - "error": "error", - "errors": "errors", - "clearList": "$(trash) Clear list", - "clearedList": "Cleared list.", - "currentLibrary": "(current library)", - "current": "current", - "duplicate": "Duplicate", - "save": "Save", - "delete": "Delete", +{ + "actions.BASENAME": "Name of the file, including the extension", + "actions.BRANCH": "Current Git branch", + "actions.BRANCHLIB": "Branch library, based on the current branch", + "actions.BUILDLIB": "The same as &CURLIB", + "actions.CURLIB": "Current library, changeable in Library List", + "actions.duplicate.select": "Select an action to duplicate", + "actions.EXT": "Filte type", + "actions.EXTL": "Lowercase file type", + "actions.FILEDIR": "Directory of the file on the remote system", + "actions.FULLPATH": "Full path of the file on the remote system", + "actions.HOST": "Hostname or IP address from the current connection", + "actions.LIBLC": "Library list delimited by comma", + "actions.LIBLS": "Library list delimited by space", + "actions.LIBRARY": "Library name where the object lives (&LIBRARYL for lowercase)", + "actions.mainMenu.createOrMaintain": "Create or maintain Actions. Actions are grouped by the type of file/object they target.", + "actions.mainMenu.newAction": "New Action", + "actions.mainMenu.workWithActions": "Work with Actions", + "actions.member.EXT": "Extension of the source member (&EXTL for lowercase)", + "actions.NAME": "Name of the object (&NAMEL for lowercase)", + "actions.NAMEL": "Lowercase name of the object", + "actions.object.EXT": "Extension/attribute of the object (&EXTL for lowercase)", + "actions.object.TYPE": "Type of the object (&TYPEL for lowercase)", + "actions.OPENLIB": "Library name where the source member lives (&OPENLIBL for lowercase)", + "actions.OPENMBR": "Name of the source member (&OPENMBRL for lowercase)", + "actions.OPENSPF": "Source file name where the source member lives (&OPENSPFL for lowercase)", + "actions.PARENT": "Name of the parent directory or source file", + "actions.RELATIVEPATH": "Relative path of the streamfile from the working directory or workspace", + "actions.streamfile.EXT": "Extension of the file (&EXTL for lowercase)", + "actions.streamfile.NAME": "Name of the file (&NAMEL for lowercase)", + "actions.USERNAME": "Username for connection", + "actions.workAction.command": "Command(s) to run", + "actions.workAction.command.description": "Below are available variables based on the Type you have select below. You can specify different commands on each line. Each command run is stateless and run in their own job.", + "actions.workAction.create.title": "Create action", + "actions.workAction.delete.confirm": "Are you sure you want to delete the action \"{0}\"?", + "actions.workAction.duplicate.title": "Duplicate action \"{0}\"", + "actions.workAction.edit.title": "Edit action \"{0}\"", + "actions.workAction.environment": "Environment", + "actions.workAction.environment.description": "Environment for command to be executed in.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Runs as an ILE command", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Runs the command in the PASE environment", + "actions.workAction.environment.qsh": "QShell", + "actions.workAction.environment.qsh.description": "Runs the command through QShell", + "actions.workAction.extensions": "Extensions", + "actions.workAction.extensions.description": "A comma delimited list of extensions for this action. This can be a member extension, a streamfile extension, an object type or an object attribute", + "actions.workAction.name": "Action name", + "actions.workAction.refresh": "Refresh", + "actions.workAction.refresh.browser": "Browser", + "actions.workAction.refresh.browser.description": "The entire browser is refreshed", + "actions.workAction.refresh.description": "The browser level to refresh after the action is done", + "actions.workAction.refresh.filter": "Filter", + "actions.workAction.refresh.filter.description": "The parent filter is refreshed", + "actions.workAction.refresh.no": "No", + "actions.workAction.refresh.no.description": "No refresh", + "actions.workAction.refresh.parent": "Parent", + "actions.workAction.refresh.parent.description": "The parent container is refreshed", + "actions.workAction.runOnProtected": "Run on protected/read only", + "actions.workAction.runOnProtected.description": "Allows the execution of this Action on protected or read only targets", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "The types of files this action can support.", + "actions.workAction.types.file": "Local File (Workspace)", + "actions.workAction.types.file.description": "Actions for local files in the VS Code Workspace.", + "actions.workAction.types.member": "Member", + "actions.workAction.types.member.description": "Source members in the QSYS file system", + "actions.workAction.types.object": "Object", + "actions.workAction.types.object.description": "Objects in the QSYS file system", + "actions.workAction.types.streamfile": "Streamfile", + "actions.workAction.types.streamfile.description": "Streamfiles in the IFS", + "actions.WORKDIR": "Current working directory, changeable in IFS Browser", + "active.job": "Active job", + "ask.overwrite": "{0} already exists.\nDo you want to replace it?", + "attribute": "Attribute", + "AUTHORIZATION_NAME": "Current user", "cancel": "Cancel", - "not.connected": "Not connected to an IBM i", - "text": "Text", - "members": "Members", - "length": "Length", + "Cancel": "Cancel", "CCSID": "CCSID", - "lines": "Lines", - "created": "Created", + "certificates.match": "Local certificate matches remote", "changed": "Changed", - "size": "Size", - "modified": "Modified", - "owner": "Owner", - "type": "Type", - "attribute": "Attribute", - "created_by": "Created by", - "overwrite": "Overwrite", - "overwrite_all": "Overwrite all", - "ask.overwrite": "{0} already exists.\nDo you want to replace it?", - "skip": "Skip", - "skip_all": "Skip all", - "password": "Password", - "privateKey": "Private Key", - "username": "Username", - "stored": "stored", - "offline": "Offline", - "online": "Online", - "status": "Status", - "job": "Job", - "start": "Start", - "restart": "Restart", - "stop": "Stop", - "listening.on.port": "Listening on port", - "listening.on.ports": "Listening on ports", - "overview": "Overview", - "JOB_NAME_SHORT": "Job name", - "JOB_USER": "Job user", - "JOB_NUMBER": "Job number", - "SUBSYSTEM": "Subsystem", - "AUTHORIZATION_NAME": "Current user", - "JOB_STATUS": "Job status", - "MEMORY_POOL": "Memory pool", - "START_TIME": "Start time", - "JAVA_HOME": "Java Home", - "USER_DIRECTORY": "User directory", - "CURRENT_HEAP_SIZE": "Current memory", - "MAX_HEAP_SIZE": "Maximum allowed memory", - - "sandbox.input.user.title": "User for server", - "sandbox.input.user.prompt": "Enter username for {0}", - "sandbox.input.password.title": "Password for server", - "sandbox.input.password.prompt": "Enter password for {0}@{1}", - "sandbox.failedToConnect.text": "Failed to connect to {0} as {1}", - "sandbox.failedToConnect.title": "Failed to connect", - "sandbox.noPassword": "Connection to {0} ended as no password was provided.", - "sandbox.alreadyConnected": "This Visual Studio Code instance is already connected to a server.", - "sandbox.connected.modal.title": "Thanks for trying the Code for IBM i Sandbox!", - "sandbox.connected.modal.detail": "You are using this system at your own risk. Do not share any sensitive or private information.", - "sandbox.noconnection.modal.title": "Oh no! The sandbox is down.", - "sandbox.noconnection.modal.detail": "Sorry, but the sandbox is offline right now. Try again another time.", - + "clearedList": "Cleared list.", + "clearList": "$(trash) Clear list", + "connectionBrowser.connectTo.error": "Use the Server Browser to select which system to connect to.", "connectionBrowser.connectTo.lastConnection": "Last connection", "connectionBrowser.connectTo.lastUsed": "Last used: {0}", "connectionBrowser.connectTo.title": "Last IBM i connections", - "connectionBrowser.connectTo.error": "Use the Server Browser to select which system to connect to.", - "connectionBrowser.renameConnection.prompt": "Rename connection \"{0}\"", + "connectionBrowser.copyConnection.already.exists": "Connection \"{0}\" already exists", + "connectionBrowser.copyConnection.placeholder": "New connection name", + "connectionBrowser.copyConnection.prompt": "Copy connection \"{0}\"", + "connectionBrowser.copyConnection.select.command.profiles": "Command profiles", + "connectionBrowser.copyConnection.select.connection.profiles": "Connection profiles", + "connectionBrowser.copyConnection.select.custom.variables": "Custom variables", + "connectionBrowser.copyConnection.select.home.directory": "Home directory", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS shortcuts", + "connectionBrowser.copyConnection.select.library.list": "Library list", + "connectionBrowser.copyConnection.select.object.filters": "Object filters", + "connectionBrowser.copyConnection.select.settings": "Select the settings to copy from \"{0}\" to \"{1}\"", + "connectionBrowser.deleteConnection.multiple.warning": "Are you sure you want to delete these {0} connections?", + "connectionBrowser.deleteConnection.warning": "Are you sure you want to delete the connection \"{0}\"?", "connectionBrowser.renameConnection.alreadyExists": "Connection \"{0}\" already exists.", + "connectionBrowser.renameConnection.error": "Error renaming connection \"{0}\"! {1}", "connectionBrowser.renameConnection.invalid.input": "New connection name must be different from its current name", "connectionBrowser.renameConnection.noConnectionFound": "No connection named \"{0}\" was found", "connectionBrowser.renameConnection.noConnParmsFound": "No parameters for connection \"{0}\" was found", - "connectionBrowser.renameConnection.error": "Error renaming connection \"{0}\"! {1}", - "connectionBrowser.deleteConnection.warning": "Are you sure you want to delete the connection \"{0}\"?", - "connectionBrowser.deleteConnection.multiple.warning": "Are you sure you want to delete these {0} connections?", - "connectionBrowser.ServerItem.tooltip": " (previous connection)", + "connectionBrowser.renameConnection.prompt": "Rename connection \"{0}\"", "connectionBrowser.ServerItem.title": "Connect", - "connectionBrowser.copyConnection.prompt": "Copy connection \"{0}\"", - "connectionBrowser.copyConnection.placeholder": "New connection name", - "connectionBrowser.copyConnection.already.exists": "Connection \"{0}\" already exists", - "connectionBrowser.copyConnection.select.settings": "Select the settings to copy from \"{0}\" to \"{1}\"", - "connectionBrowser.copyConnection.select.home.directory": "Home directory", - "connectionBrowser.copyConnection.select.library.list": "Library list", - "connectionBrowser.copyConnection.select.object.filters": "Object filters", - "connectionBrowser.copyConnection.select.ifs.shortcuts": "IFS shortcuts", - "connectionBrowser.copyConnection.select.custom.variables": "Custom variables", - "connectionBrowser.copyConnection.select.command.profiles": "Command profiles", - "connectionBrowser.copyConnection.select.connection.profiles": "Connection profiles", - - "login.title.create": "Connect to IBM i", - "login.title.edit": "Login Settings: \"{0}\"", - "login.host": "Host or IP Address", - "login.port": "Port (SSH)", - "login.authDecision": "Only provide either the password or a private key - not both.", - "login.removeAuth": "Remove auth methods", - "login.authRemoved": "Authentication methods removed for \"{0}\".", - "login.password.label": "Only provide a password if you want to update an existing one or set a new one.", - "login.password.updated": "Password updated and will be used for \"{0}\".", - "login.savePassword": "Save Password", - "login.privateKey.label": "Only provide a private key if you want to update from the existing one or set one.", - "login.privateKey.support": "OpenSSH, RFC4716 and PPK formats are supported.", - "login.privateKey.updated": "Private key updated and will be used for \"{0}\".", - + "connectionBrowser.ServerItem.tooltip": " (previous connection)", + "Continue": "Continue", + "created": "Created", + "created_by": "Created by", + "current": "current", + "CURRENT_HEAP_SIZE": "Current memory", + "currentLibrary": "(current library)", + "debug.server": "Debug Server", + "debug.service": "Debug Service", + "debug.service.certificate": "Debug Service Certificate", + "debug.service.submit.options": "Debug Service submit options", + "debug.service.submit.options.prompt": "Valid parameters for SBMJOB", + "debugger.status": "Debugger {0} Status", + "delete": "Delete", + "detail.reading.error": "Failed to read debug service detail file {0}: {1}", + "directory": "directory", + "download.certificate": "Download certificate", + "duplicate": "Duplicate", + "enddbgsvr.failed": "Failed to stop debug server: {0}", + "enddbgsvr.succeeded": "Debug server stopped.", + "error": "error", + "errors": "errors", + "generate.certificate": "Generate service certificate", "helpView.getStarted": "Get started", "helpView.officialForum": "Open official Forum", - "helpView.reviewIssues": "Review Issues", "helpView.reportIssue": "Report an Issue", - - "ifsBrowser.changeWorkingDirectory.prompt": "Changing working directory", - "ifsBrowser.changeWorkingDirectory.message": "Working directory changed to {0}.", - "ifsBrowser.addIFSShortcut.prompt": "Path to IFS directory", + "helpView.reviewIssues": "Review Issues", "ifsBrowser.addIFSShortcut.error": "{0} is not a directory.", "ifsBrowser.addIFSShortcut.errorMessage": "Error creating IFS shortcut! {0}", - "ifsBrowser.removeIFSShortcut.placeHolder": "Select IFS shortcut to remove", - "ifsBrowser.createDirectory.prompt": "Path of new folder", + "ifsBrowser.addIFSShortcut.prompt": "Path to IFS directory", + "ifsBrowser.changeWorkingDirectory.message": "Working directory changed to {0}.", + "ifsBrowser.changeWorkingDirectory.prompt": "Changing working directory", + "ifsBrowser.copyIFS.errorMessage": "Error copying {0}! {1}", + "ifsBrowser.copyIFS.infoMessage": "{0} was copied to {1}.", + "ifsBrowser.copyIFS.prompt": "Name of new path", + "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", "ifsBrowser.createDirectory.errorMessage": "Error creating new directory! {0}", - "ifsBrowser.createStreamfile.prompt": "Name of new streamfile", - "ifsBrowser.createStreamfile.infoMessage": "Creating streamfile {0}.", + "ifsBrowser.createDirectory.prompt": "Path of new folder", "ifsBrowser.createStreamfile.errorMessage": "Error creating new streamfile! {0}", - "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload completed.", - "ifsBrowser.uploadStreamfile.errorMessage": "Error uploading files! {0}", - "ifsBrowser.uploadStreamfile.noFilesSelected": "No files or folders selected for upload.", - "ifsBrowser.uploadStreamfile.process.uploading": "Upload", - "ifsBrowser.uploadStreamfile.process.uploading.files": "sending {0} file(s)...", - "ifsBrowser.uploadStreamfile.process.uploading.directory": "sending {0} directory...", - "ifsBrowser.uploadStreamfile.ask": "Do you want to copy or move the selection to {0}?", - "ifsBrowser.uploadStreamfile.copy": "Copy", - "ifsBrowser.uploadStreamfile.move": "Move", - "ifsBrowser.uploadStreamfile.copy.failed": "Failed to copy selection to {0}: {1}", - "ifsBrowser.uploadStreamfile.move.failed": "Failed to move selection to {0}: {1}", - "ifsBrowser.uploadStreamfile.select.type.folders": "Folders", - "ifsBrowser.uploadStreamfile.select.type.files": "Files", - "ifsBrowser.uploadStreamfile.select.type.title": "What do you want to upload?", - "ifsBrowser.deleteIFS.dirNotAllowed": "Unable to delete protected directories from the IFS Browser!\n{0}", - "ifsBrowser.deleteIFS.warningMessage": "Are you sure you want to delete {0}?", - "ifsBrowser.deleteIFS.multi.warningMessage": "Are you sure you want to delete the {0} selected files?", + "ifsBrowser.createStreamfile.infoMessage": "Creating streamfile {0}.", + "ifsBrowser.createStreamfile.prompt": "Name of new streamfile", + "ifsBrowser.deleteIFS.cancelled": "Deletion canceled.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} was the working directory; it is now {1}.", "ifsBrowser.deleteIFS.deletionPrompt": "Once you delete the directory, it cannot be restored.\nPlease type \"{0}\" to confirm deletion.", "ifsBrowser.deleteIFS.deletionPrompt2": " (Press \"Escape\" to cancel)", - "ifsBrowser.deleteIFS.progress": "Deleting {0} element(s)...", + "ifsBrowser.deleteIFS.dirNotAllowed": "Unable to delete protected directories from the IFS Browser!\n{0}", "ifsBrowser.deleteIFS.errorMessage": "Error deleting streamfile! {0}", - "ifsBrowser.deleteIFS.cancelled": "Deletion canceled.", - "ifsBrowser.deleteIFS.default.home.dir": "{0} was the working directory; it is now {1}.", - "ifsBrowser.moveIFS.prompt": "Name of new path", + "ifsBrowser.deleteIFS.multi.warningMessage": "Are you sure you want to delete the {0} selected files?", + "ifsBrowser.deleteIFS.progress": "Deleting {0} element(s)...", + "ifsBrowser.deleteIFS.warningMessage": "Are you sure you want to delete {0}?", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Error searching streamfiles.", + "ifsBrowser.doSearchInStreamfiles.noResults": "No results found searching for \"{0}\" in {1}.", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" in {1}.", + "ifsBrowser.doSearchInStreamfiles.title": "Searching", + "ifsBrowser.downloadStreamfile.complete": "Download complete", + "ifsBrowser.downloadStreamfile.downloading": "Downloading", + "ifsBrowser.downloadStreamfile.errorMessage": "Error downloading file(s): {0}", + "ifsBrowser.getChildren.errorMessage": "Error loading objects.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} occurred while listing files.", "ifsBrowser.moveIFS.errorMessage": "Error renaming/moving {0}! {1}", - "ifsBrowser.moveIFS.renamed": "{0} was renamed to {1}.", "ifsBrowser.moveIFS.moved": "{0} was moved to {1}.", - "ifsBrowser.copyIFS.prompt": "Name of new path", - "ifsBrowser.copyIFS.infoMessage": "{0} was copied to {1}.", - "ifsBrowser.copyIFS.errorMessage": "Error copying {0}! {1}", + "ifsBrowser.moveIFS.prompt": "Name of new path", + "ifsBrowser.moveIFS.renamed": "{0} was renamed to {1}.", + "ifsBrowser.removeIFSShortcut.placeHolder": "Select IFS shortcut to remove", + "ifsBrowser.searchIFS.noGrep": "grep must be installed on the remote system for the IFS search.", + "ifsBrowser.searchIFS.placeholder": "Enter search term or select one of the previous search terms.", + "ifsBrowser.searchIFS.placeholder2": "Enter search term.", + "ifsBrowser.searchIFS.previousSearches": "Previous search terms", "ifsBrowser.searchIFS.prompt": "Enter IFS directory to search", "ifsBrowser.searchIFS.title": "Search directory", "ifsBrowser.searchIFS.title2": "Search {0}", - "ifsBrowser.searchIFS.previousSearches": "Previous search terms", - "ifsBrowser.searchIFS.placeholder": "Enter search term or select one of the previous search terms.", - "ifsBrowser.searchIFS.placeholder2": "Enter search term.", - "ifsBrowser.searchIFS.noGrep": "grep must be installed on the remote system for the IFS search.", - "ifsBrowser.downloadStreamfile.downloading": "Downloading", - "ifsBrowser.downloadStreamfile.complete": "Download complete", - "ifsBrowser.downloadStreamfile.errorMessage": "Error downloading file(s): {0}", - "ifsBrowser.getChildren.errorMessage": "Error loading objects.", - "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} occurred while listing files.", - "ifsBrowser.doSearchInStreamfiles.title": "Searching", - "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" in {1}.", - "ifsBrowser.doSearchInStreamfiles.noResults": "No results found searching for \"{0}\" in {1}.", - "ifsBrowser.doSearchInStreamfiles.errorMessage": "Error searching streamfiles.", - "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", - "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", - + "ifsBrowser.uploadStreamfile.ask": "Do you want to copy or move the selection to {0}?", + "ifsBrowser.uploadStreamfile.copy": "Copy", + "ifsBrowser.uploadStreamfile.copy.failed": "Failed to copy selection to {0}: {1}", + "ifsBrowser.uploadStreamfile.errorMessage": "Error uploading files! {0}", + "ifsBrowser.uploadStreamfile.move": "Move", + "ifsBrowser.uploadStreamfile.move.failed": "Failed to move selection to {0}: {1}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "No files or folders selected for upload.", + "ifsBrowser.uploadStreamfile.process.uploading": "Upload", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "sending {0} directory...", + "ifsBrowser.uploadStreamfile.process.uploading.files": "sending {0} file(s)...", + "ifsBrowser.uploadStreamfile.select.type.files": "Files", + "ifsBrowser.uploadStreamfile.select.type.folders": "Folders", + "ifsBrowser.uploadStreamfile.select.type.title": "What do you want to upload?", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Upload completed.", + "JAVA_HOME": "Java Home", + "job": "Job", + "JOB_NAME_SHORT": "Job name", + "JOB_NUMBER": "Job number", + "JOB_STATUS": "Job status", + "JOB_USER": "Job user", + "jvm.info": "JVM information", + "length": "Length", + "LibraryListView.addToLibraryList.addedLib": "Library {0} was added to the library list.", + "LibraryListView.addToLibraryList.alreadyInList": "Library {0} was already in the library list.", + "LibraryListView.addToLibraryList.invalidLib": "Library {0} does not exist.", + "LibraryListView.addToLibraryList.prompt": "Library to add", + "LibraryListView.addToLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", + "LibraryListView.addToLibraryList.tooLong": "Library is too long.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} is already current library.", + "LibraryListView.changeCurrentLibrary.changedCurrent": "Changed current library to {0}.", "LibraryListView.changeCurrentLibrary.currentlyActive": "Currently active", - "LibraryListView.changeCurrentLibrary.recentlyUsed": "Recently used", "LibraryListView.changeCurrentLibrary.placeholder": "Filter or new library to set as current library", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Recently used", "LibraryListView.changeCurrentLibrary.title": "Change current library", - "LibraryListView.changeCurrentLibrary.changedCurrent": "Changed current library to {0}.", - "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} is already current library.", "LibraryListView.changeUserLibraryList.prompt": "Changing library list (can use \"*reset\")", "LibraryListView.changeUserLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", - "LibraryListView.addToLibraryList.prompt": "Library to add", - "LibraryListView.addToLibraryList.tooLong": "Library is too long.", - "LibraryListView.addToLibraryList.alreadyInList": "Library {0} was already in the library list.", - "LibraryListView.addToLibraryList.invalidLib": "Library {0} does not exist.", - "LibraryListView.addToLibraryList.addedLib": "Library {0} was added to the library list.", - "LibraryListView.addToLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", - "LibraryListView.removeFromLibraryList.removedLib": "Library {0} was removed from the library list.", "LibraryListView.cleanupLibraryList.removedLibs": "The following libraries were removed from the updated library list as they are invalid: {0}", "LibraryListView.cleanupLibraryList.validated": "Library list were validated without any errors.", + "LibraryListView.removeFromLibraryList.removedLib": "Library {0} was removed from the library list.", "LibraryListView.setCurrentLibrary.failed": "Failed to set {0} as current library: {1}", - - "objectBrowser.delete.confirm": "Are you sure you want to delete {0}?", - "objectBrowser.delete.multiple.confirm": "Are you sure you want to delete these {0} elements?", - "objectBrowser.delete.progress": "Deleting", - "objectBrowser.createMember.prompt": "Name of new source member (member.ext)", - "objectBrowser.createMember.progressTitle": "Creating member {0}...", - "objectBrowser.createMember.errorMessage": "Error creating member {0}: {1}", - "objectBrowser.copyMember.prompt": "New path for copy of source member", - "objectBrowser.copyMember.errorMessage": "Cannot copy member to itself!", - "objectBrowser.copyMember.progressTitle": "Creating member {0}...", - "objectBrowser.copyMember.overwrite": "Are you sure you want overwrite member {0}?", - "objectBrowser.copyMember.errorMessage2": "Member {0} already exists!", - "objectBrowser.copyMember.errorMessage3": "Error creating member {0}: {1}", - "objectBrowser.deleteMember.errorMessage": "Error deleting member! {0}", - "objectBrowser.updateMemberText.prompt": "Change member description for {0}, *BLANK for no description", - "objectBrowser.updateMemberText.errorMessage": "Error changing member description! {0}", - "objectBrowser.renameMember.prompt": "Rename {0}", - "objectBrowser.renameMember.errorMessage": "Error renaming member! {0}", - "objectBrowser.renameMember.invalid.input": "New member name must be different from it's current name", - "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Member was uploaded.", - "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Error uploading content to member! {0}", - "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", - "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", - "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", - "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", - "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", - "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", - "objectBrowser.searchSourceFile.prompt": "Enter LIB/SPF/member.ext to search (member.ext is optional and can contain wildcards)", - "objectBrowser.searchSourceFile.title": "Search source file", - "objectBrowser.searchSourceFile.invalidForm": "Please enter value in form LIB/SPF/member.ext", - "objectBrowser.searchSourceFile.aspText": "(in ASP {0})", - "objectBrowser.searchSourceFile.previousSearches": "Previous search terms", - "objectBrowser.searchSourceFile.placeholder": "Enter search term or select one of the previous search terms.", - "objectBrowser.searchSourceFile.placeholder2": "Enter search term.", - "objectBrowser.searchSourceFile.title2": "Search {0} {1}", - "objectBrowser.searchSourceFile.errorMessage": "Cannot search listings using *ALL.", - "objectBrowser.createFilter": "Create new filter", - "objectBrowser.createLibrary.prompt": "Name of new library", - "objectBrowser.createLibrary.errorMessage": "Cannot create library \"{0}\": {1}", - "objectBrowser.createLibrary.infoMessage": "Would you like to add the new library to the library list?", - "objectBrowser.createLibrary.errorMessage2": "Library name too long.", - "objectBrowser.createSourceFile.prompt": "Name of new source file", - "objectBrowser.createSourceFile.infoMessage": "Creating source file {0}.", - "objectBrowser.createSourceFile.errorMessage": "Error creating source file! {0}", - "objectBrowser.createSourceFile.errorMessage2": "Source filename must be 10 chars or less.", - "objectBrowser.changeObjectDesc.prompt": "Change object description for {0}, *BLANK for no description", + "lines": "Lines", + "listening.on.port": "Listening on port", + "listening.on.ports": "Listening on ports", + "loading.debugger.info": "Loading debugger information...", + "local.certificate": "Local certificate", + "local.certificate.not.found": "Local certificate not found", + "local.dont.match.remote": "Local certificate doesn\"t match remote", + "login.authDecision": "Only provide either the password or a private key - not both.", + "login.authRemoved": "Authentication methods removed for \"{0}\".", + "login.host": "Host or IP Address", + "login.password.label": "Only provide a password if you want to update an existing one or set a new one.", + "login.password.updated": "Password updated and will be used for \"{0}\".", + "login.port": "Port (SSH)", + "login.privateKey.label": "Only provide a private key if you want to update from the existing one or set one.", + "login.privateKey.support": "OpenSSH, RFC4716 and PPK formats are supported.", + "login.privateKey.updated": "Private key updated and will be used for \"{0}\".", + "login.removeAuth": "Remove auth methods", + "login.savePassword": "Save Password", + "login.title.create": "Connect to IBM i", + "login.title.edit": "Login Settings: \"{0}\"", + "MAX_HEAP_SIZE": "Maximum allowed memory", + "members": "Members", + "MEMORY_POOL": "Memory pool", + "modified": "Modified", + "No": "No", + "not.connected": "Not connected to an IBM i", + "not.found.in": "Not found in {0}", "objectBrowser.changeObjectDesc.errorMessage": "Object description must be 50 chars or less.", - "objectBrowser.changeObjectDesc.infoMessage": "Changed object description for {0} {1}.", "objectBrowser.changeObjectDesc.errorMessage2": "Error changing description for {0}! {1}", - "objectBrowser.copyObject.prompt": "Create duplicate object to new library/object", + "objectBrowser.changeObjectDesc.infoMessage": "Changed object description for {0} {1}.", + "objectBrowser.changeObjectDesc.prompt": "Change object description for {0}, *BLANK for no description", + "objectBrowser.copyMember.errorMessage": "Cannot copy member to itself!", + "objectBrowser.copyMember.errorMessage2": "Member {0} already exists!", + "objectBrowser.copyMember.errorMessage3": "Error creating member {0}: {1}", + "objectBrowser.copyMember.overwrite": "Are you sure you want overwrite member {0}?", + "objectBrowser.copyMember.progressTitle": "Creating member {0}...", + "objectBrowser.copyMember.prompt": "New path for copy of source member", "objectBrowser.copyObject.errorMessage": "Invalid path: {0}. Use format LIB/OBJ", "objectBrowser.copyObject.errorMessage2": "Library must be 10 chars or less.", "objectBrowser.copyObject.errorMessage3": "Object name must be 10 chars or less.", + "objectBrowser.copyObject.errorMessage4": "Error copying object {0}! {1}", "objectBrowser.copyObject.infoMessage": "Copied object {0} {1} to {2}.", "objectBrowser.copyObject.infoMessage2": "Copied object {0} {1} to {2}. Refresh object browser.", - "objectBrowser.copyObject.errorMessage4": "Error copying object {0}! {1}", + "objectBrowser.copyObject.prompt": "Create duplicate object to new library/object", + "objectBrowser.createFilter": "Create new filter", + "objectBrowser.createLibrary.errorMessage": "Cannot create library \"{0}\": {1}", + "objectBrowser.createLibrary.errorMessage2": "Library name too long.", + "objectBrowser.createLibrary.infoMessage": "Would you like to add the new library to the library list?", + "objectBrowser.createLibrary.prompt": "Name of new library", + "objectBrowser.createMember.errorMessage": "Error creating member {0}: {1}", + "objectBrowser.createMember.progressTitle": "Creating member {0}...", + "objectBrowser.createMember.prompt": "Name of new source member (member.ext)", + "objectBrowser.createSourceFile.errorMessage": "Error creating source file! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Source filename must be 10 chars or less.", + "objectBrowser.createSourceFile.infoMessage": "Creating source file {0}.", + "objectBrowser.createSourceFile.prompt": "Name of new source file", + "objectBrowser.delete.confirm": "Are you sure you want to delete {0}?", + "objectBrowser.delete.multiple.confirm": "Are you sure you want to delete these {0} elements?", + "objectBrowser.delete.progress": "Deleting", + "objectBrowser.deleteMember.errorMessage": "Error deleting member! {0}", "objectBrowser.deleteObject.errorMessage": "Error deleting object! {0}", - "objectBrowser.renameObject.prompt": "Rename object", - "objectBrowser.renameObject.errorMessage": "Object name must be 10 chars or less.", - "objectBrowser.renameObject.infoMessage": "Renamed object {0} {1} to {2}.", - "objectBrowser.renameObject.errorMessage2": "Error renaming object {0}! {1}", - "objectBrowser.renameObject.progress": "Renaming object {0} {1} to {2}...", - "objectBrowser.moveObject.prompt": "Move object", - "objectBrowser.moveObject.errorMessage": "Object name must be 10 chars or less.", - "objectBrowser.moveObject.infoMessage": "Moved object {0} {1} to {2}.", - "objectBrowser.moveObject.infoMessage2": "Moved object {0} {1} to {2}. Refresh object browser.", - "objectBrowser.moveObject.errorMessage2": "Error moving object {0}! {1}", - "objectBrowser.moveObject.progress": "Moving object {0} {1} to {2}...", - "objectBrowser.doSearchInSourceFile.title": "Searching", + "objectBrowser.doSearchInSourceFile.errorMessage": "Error searching source members: {0}", + "objectBrowser.doSearchInSourceFile.noMembers": "No members to search.", + "objectBrowser.doSearchInSourceFile.notFound": "No results found searching for \"{0}\" in {1}.", "objectBrowser.doSearchInSourceFile.progressMessage": "Fetching member list for {0}.", "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" in {1}.", "objectBrowser.doSearchInSourceFile.searchMessage2": "This is taking a while because there are {0} members. Searching \"{1}\" in {2} still.", @@ -278,122 +290,100 @@ "objectBrowser.doSearchInSourceFile.searchMessage7": "Why was six afraid of seven?", "objectBrowser.doSearchInSourceFile.searchMessage8": "How does one end up with {0} members?", "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" in {1}.", - "objectBrowser.doSearchInSourceFile.notFound": "No results found searching for \"{0}\" in {1}.", - "objectBrowser.doSearchInSourceFile.noMembers": "No members to search.", - "objectBrowser.doSearchInSourceFile.errorMessage": "Error searching source members: {0}", - - "ProfilesView.saveConnectionProfile.prompt": "Name of profile", - "ProfilesView.saveConnectionProfile.infoMessage": "Saved current settings to profile \"{0}\".", + "objectBrowser.doSearchInSourceFile.title": "Searching", + "objectBrowser.downloadMemberContent.cancel": "Members download cancelled.", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copying to streamfiles", + "objectBrowser.downloadMemberContent.download.progress": "Downloading {0} members", + "objectBrowser.downloadMemberContent.download.streamfiles": "getting streamfiles", + "objectBrowser.downloadMemberContent.errorMessage": "Error downloading member(s)! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Members download complete.", + "objectBrowser.moveObject.errorMessage": "Object name must be 10 chars or less.", + "objectBrowser.moveObject.errorMessage2": "Error moving object {0}! {1}", + "objectBrowser.moveObject.infoMessage": "Moved object {0} {1} to {2}.", + "objectBrowser.moveObject.infoMessage2": "Moved object {0} {1} to {2}. Refresh object browser.", + "objectBrowser.moveObject.progress": "Moving object {0} {1} to {2}...", + "objectBrowser.moveObject.prompt": "Move object", + "objectBrowser.renameMember.errorMessage": "Error renaming member! {0}", + "objectBrowser.renameMember.invalid.input": "New member name must be different from it's current name", + "objectBrowser.renameMember.prompt": "Rename {0}", + "objectBrowser.renameObject.errorMessage": "Object name must be 10 chars or less.", + "objectBrowser.renameObject.errorMessage2": "Error renaming object {0}! {1}", + "objectBrowser.renameObject.infoMessage": "Renamed object {0} {1} to {2}.", + "objectBrowser.renameObject.progress": "Renaming object {0} {1} to {2}...", + "objectBrowser.renameObject.prompt": "Rename object", + "objectBrowser.searchSourceFile.aspText": "(in ASP {0})", + "objectBrowser.searchSourceFile.errorMessage": "Cannot search listings using *ALL.", + "objectBrowser.searchSourceFile.invalidForm": "Please enter value in form LIB/SPF/member.ext", + "objectBrowser.searchSourceFile.placeholder": "Enter search term or select one of the previous search terms.", + "objectBrowser.searchSourceFile.placeholder2": "Enter search term.", + "objectBrowser.searchSourceFile.previousSearches": "Previous search terms", + "objectBrowser.searchSourceFile.prompt": "Enter LIB/SPF/member.ext to search (member.ext is optional and can contain wildcards)", + "objectBrowser.searchSourceFile.title": "Search source file", + "objectBrowser.searchSourceFile.title2": "Search {0} {1}", + "objectBrowser.updateMemberText.errorMessage": "Error changing member description! {0}", + "objectBrowser.updateMemberText.prompt": "Change member description for {0}, *BLANK for no description", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Error uploading content to member! {0}", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Member was uploaded.", + "offline": "Offline", + "online": "Online", + "open.service.configuration": "Open configuration", + "overview": "Overview", + "overwrite": "Overwrite", + "overwrite_all": "Overwrite all", + "owner": "Owner", + "password": "Password", + "privateKey": "Private Key", "ProfilesView.deleteConnectionProfile.warningMessage": "Are you sure you want to delete the \"{0}\" profile?", - "ProfilesView.loadConnectionProfile.infoMessage": "Switched to profile \"{0}\".", + "ProfilesView.loadCommandProfile.errorMessage": "Failed to get library list from command: {0}", "ProfilesView.loadCommandProfile.infoMessage": "Switched to profile \"{0}\".", "ProfilesView.loadCommandProfile.warningMessage": "Failed to get library list from command. Feature not installed.", - "ProfilesView.loadCommandProfile.errorMessage": "Failed to get library list from command: {0}", - "ProfilesView.setToDefault.infoMessage": "Reset to default", + "ProfilesView.loadConnectionProfile.infoMessage": "Switched to profile \"{0}\".", + "ProfilesView.saveConnectionProfile.infoMessage": "Saved current settings to profile \"{0}\".", + "ProfilesView.saveConnectionProfile.prompt": "Name of profile", "ProfilesView.setToDefault.detail": "This will reset the User Library List, working directory and Custom Variables back to the defaults.", - - "actions.CURLIB": "Current library, changeable in Library List", - "actions.USERNAME": "Username for connection", - "actions.WORKDIR": "Current working directory, changeable in IFS Browser", - "actions.HOST": "Hostname or IP address from the current connection", - "actions.BRANCH": "Current Git branch", - "actions.BRANCHLIB": "Branch library, based on the current branch", - "actions.BUILDLIB": "The same as &CURLIB", - "actions.LIBLC": "Library list delimited by comma", - "actions.LIBLS": "Library list delimited by space", - "actions.OPENLIB": "Library name where the source member lives (&OPENLIBL for lowercase)", - "actions.OPENSPF": "Source file name where the source member lives (&OPENSPFL for lowercase)", - "actions.OPENMBR": "Name of the source member (&OPENMBRL for lowercase)", - "actions.member.EXT": "Extension of the source member (&EXTL for lowercase)", - "actions.FULLPATH": "Full path of the file on the remote system", - "actions.FILEDIR": "Directory of the file on the remote system", - "actions.RELATIVEPATH": "Relative path of the streamfile from the working directory or workspace", - "actions.PARENT": "Name of the parent directory or source file", - "actions.BASENAME": "Name of the file, including the extension", - "actions.streamfile.NAME": "Name of the file (&NAMEL for lowercase)", - "actions.streamfile.EXT": "Extension of the file (&EXTL for lowercase)", - "actions.LIBRARY": "Library name where the object lives (&LIBRARYL for lowercase)", - "actions.NAME": "Name of the object (&NAMEL for lowercase)", - "actions.NAMEL": "Lowercase name of the object", - "actions.object.TYPE": "Type of the object (&TYPEL for lowercase)", - "actions.object.EXT": "Extension/attribute of the object (&EXTL for lowercase)", - "actions.EXT": "Filte type", - "actions.EXTL": "Lowercase file type", - "actions.mainMenu.workWithActions": "Work with Actions", - "actions.mainMenu.createOrMaintain": "Create or maintain Actions. Actions are grouped by the type of file/object they target.", - "actions.mainMenu.newAction": "New Action", - "actions.duplicate.select": "Select an action to duplicate", - "actions.workAction.create.title": "Create action", - "actions.workAction.edit.title": "Edit action \"{0}\"", - "actions.workAction.duplicate.title": "Duplicate action \"{0}\"", - "actions.workAction.name": "Action name", - "actions.workAction.command": "Command(s) to run", - "actions.workAction.command.description": "Below are available variables based on the Type you have select below. You can specify different commands on each line. Each command run is stateless and run in their own job.", - "actions.workAction.extensions": "Extensions", - "actions.workAction.extensions.description": "A comma delimited list of extensions for this action. This can be a member extension, a streamfile extension, an object type or an object attribute", - "actions.workAction.types": "Type", - "actions.workAction.types.description": "The types of files this action can support.", - "actions.workAction.types.member": "Member", - "actions.workAction.types.member.description": "Source members in the QSYS file system", - "actions.workAction.types.streamfile": "Streamfile", - "actions.workAction.types.streamfile.description": "Streamfiles in the IFS", - "actions.workAction.types.object": "Object", - "actions.workAction.types.object.description": "Objects in the QSYS file system", - "actions.workAction.types.file": "Local File (Workspace)", - "actions.workAction.types.file.description": "Actions for local files in the VS Code Workspace.", - "actions.workAction.environment": "Environment", - "actions.workAction.environment.description": "Environment for command to be executed in.", - "actions.workAction.environment.ile": "ILE", - "actions.workAction.environment.ile.description": "Runs as an ILE command", - "actions.workAction.environment.qsh": "QShell", - "actions.workAction.environment.qsh.description": "Runs the command through QShell", - "actions.workAction.environment.pase": "PASE", - "actions.workAction.environment.pase.description": "Runs the command in the PASE environment", - "actions.workAction.delete.confirm": "Are you sure you want to delete the action \"{0}\"?", - "actions.workAction.refresh": "Refresh", - "actions.workAction.refresh.description": "The browser level to refresh after the action is done", - "actions.workAction.refresh.no": "No", - "actions.workAction.refresh.no.description": "No refresh", - "actions.workAction.refresh.parent": "Parent", - "actions.workAction.refresh.parent.description": "The parent container is refreshed", - "actions.workAction.refresh.filter": "Filter", - "actions.workAction.refresh.filter.description": "The parent filter is refreshed", - "actions.workAction.refresh.browser": "Browser", - "actions.workAction.refresh.browser.description": "The entire browser is refreshed", - "actions.workAction.runOnProtected": "Run on protected/read only", - "actions.workAction.runOnProtected.description": "Allows the execution of this Action on protected or read only targets", - - "debugger.status": "Debugger {0} Status", - "loading.debugger.info": "Loading debugger information...", - "debug.server": "Debug Server", - "debug.service": "Debug Service", - "active.job": "Active job", - "jvm.info": "JVM information", - "debug.service.certificate": "Debug Service Certificate", + "ProfilesView.setToDefault.infoMessage": "Reset to default", + "remote.certificate.not.found": "Remote certificate not found", + "remote.certificate.not.found.detail": "{0} not found under {1}", + "restart": "Restart", + "Retry": "Retry", + "sandbox.alreadyConnected": "This Visual Studio Code instance is already connected to a server.", + "sandbox.connected.modal.detail": "You are using this system at your own risk. Do not share any sensitive or private information.", + "sandbox.connected.modal.title": "Thanks for trying the Code for IBM i Sandbox!", + "sandbox.failedToConnect.text": "Failed to connect to {0} as {1}", + "sandbox.failedToConnect.title": "Failed to connect", + "sandbox.input.password.prompt": "Enter password for {0}@{1}", + "sandbox.input.password.title": "Password for server", + "sandbox.input.user.prompt": "Enter username for {0}", + "sandbox.input.user.title": "User for server", + "sandbox.noconnection.modal.detail": "Sorry, but the sandbox is offline right now. Try again another time.", + "sandbox.noconnection.modal.title": "Oh no! The sandbox is down.", + "sandbox.noPassword": "Connection to {0} ended as no password was provided.", + "save": "Save", "service.certificate.exists": "Remote service certificate exists", - "local.certificate": "Local certificate", - "certificates.match": "Local certificate matches remote", - "generate.certificate": "Generate service certificate", - "download.certificate": "Download certificate", - "not.found.in": "Not found in {0}", - "strdbgsvr.succeeded": "Debug server started.", - "strdbgsvr.failed": "Failed to start debug server: {0}", - "enddbgsvr.succeeded": "Debug server stopped.", - "enddbgsvr.failed": "Failed to stop debug server: {0}", - "start.debug.service.task": "Starting debug service...", - "start.debug.service.succeeded": "Debug service started.", - "start.debug.service.failed": "Failed to start debug service: {0}", - "stop.debug.service.task": "Stopping debug service...", - "stop.debug.service.succeeded": "Debug service stopped.", - "stop.debug.service.failed": "Failed to stop debug service: {0}", - "open.service.configuration": "Open configuration", - "detail.reading.error": "Failed to read debug service detail file {0}: {1}", + "shortcut": "shortcut", + "size": "Size", + "skip": "Skip", + "skip_all": "Skip all", + "start": "Start", + "START_TIME": "Start time", "start.debug.server.task": "Starting debug server...", + "start.debug.service.failed": "Failed to start debug service: {0}", + "start.debug.service.succeeded": "Debug service started.", + "start.debug.service.task": "Starting debug service...", + "status": "Status", + "stop": "Stop", "stop.debug.server.task": "Stopping debug server...", - "remote.certificate.not.found": "Remote certificate not found", - "remote.certificate.not.found.detail": "{0} not found under {1}", - "local.certificate.not.found": "Local certificate not found", - "local.dont.match.remote": "Local certificate doesn\"t match remote", - "debug.service.submit.options":"Debug Service submit options", - "debug.service.submit.options.prompt":"Valid parameters for SBMJOB" + "stop.debug.service.failed": "Failed to stop debug service: {0}", + "stop.debug.service.succeeded": "Debug service stopped.", + "stop.debug.service.task": "Stopping debug service...", + "stored": "stored", + "strdbgsvr.failed": "Failed to start debug server: {0}", + "strdbgsvr.succeeded": "Debug server started.", + "streamfile": "streamfile", + "SUBSYSTEM": "Subsystem", + "text": "Text", + "type": "Type", + "USER_DIRECTORY": "User directory", + "username": "Username", + "Yes": "Yes" } \ No newline at end of file diff --git a/src/locale/ids/fr.json b/src/locale/ids/fr.json index b836279cf..bf155d54c 100644 --- a/src/locale/ids/fr.json +++ b/src/locale/ids/fr.json @@ -1,273 +1,285 @@ { - "Yes": "Oui", - "No": "Non", - "Cancel": "Annuler", - "Retry": "Réessayer", - "Continue": "Continue", - "directory": "Répertoire", - "shortcut": "raccourci", - "streamfile": "fichier", - "error": "erreur", - "errors": "erreurs", - "clearList": "$(trash) Effacer liste", - "clearedList": "Liste effacée.", - "currentLibrary": "(bibliothèque en cours)", - "current": "actuelle", - "duplicate": "Dupliquer", - "save": "Enregistrer", - "delete": "Supprimer", + "actions.BASENAME": "Nom du fichier avec son extension", + "actions.BRANCH": "Branche Git en cours", + "actions.BRANCHLIB": "Bibliothèque de la branche, basée sur la branche en cours", + "actions.BUILDLIB": "Voir &CURLIB", + "actions.CURLIB": "Bibliothèque en cours, modifiable depuis la Liste des Bibliothèques", + "actions.duplicate.select": "Sélectionnez l'action à dupliquer", + "actions.EXT": "Extension du fichier", + "actions.EXTL": "Extension du fichier en minuscule", + "actions.FILEDIR": "Répertoire du fichier sur le système distant", + "actions.FULLPATH": "Chemin absolu du fichier sur le système distant", + "actions.HOST": "Nom d'hôte ou adresse IP de la connexion", + "actions.LIBLC": "Liste des bilbiothèques, séparée par des virgules", + "actions.LIBLS": "Liste des bilbiothèques, séparée par des espaces", + "actions.LIBRARY": "Nom de la bibliothèque contenant l'objet (&LIBRARYL pour le nom en minuscule)", + "actions.mainMenu.createOrMaintain": "Créez ou éditez des Actions. Les Actions sont groupées par type.", + "actions.mainMenu.newAction": "Créer Action", + "actions.mainMenu.workWithActions": "Maintenance des Actions", + "actions.member.EXT": "Extension du membre source (&EXTL pour le nom en minuscule)", + "actions.NAME": "Nom de l'objet (&NAMEL pour le nom en minuscule)", + "actions.NAMEL": "Nom de l'objet en minuscule", + "actions.object.EXT": "Extension/attribut de l'objet (&EXTL pour le nom en minuscule)", + "actions.object.TYPE": "Type de l'objet (&TYPEL pour le nom en minuscule)", + "actions.OPENLIB": "Nom de la bibliothèque contenant le membre source (&OPENLIBL pour le nom en minuscule)", + "actions.OPENMBR": "Nom du membre source (&OPENMBRL pour le nom en minuscule)", + "actions.OPENSPF": "Nom du fichier source contenant le membre source (&OPENSPFL pour le nom en minuscule)", + "actions.PARENT": "Nom du répertoire parent du fichier", + "actions.RELATIVEPATH": "Chemin relatif du fichier de flux à partir du répertoire de travail ou de l'espace de travail", + "actions.streamfile.EXT": "Extension du fichier (&EXTL pour le nom en minuscule)", + "actions.streamfile.NAME": "Nom du fichier (&NAMEL pour le nom en minuscule)", + "actions.USERNAME": "Nom d'utilisateur de la connexion", + "actions.workAction.command": "Commande(s) à exécuter", + "actions.workAction.command.description": "Les variables ci-dessous sont disponibles en fonction du Type sélectionné ci-après. Vous pouvez définir plusieurs commande; une par ligne. Chaque commande est exécutée dans son propre Job et n'a pas d'état.", + "actions.workAction.create.title": "Créer une action", + "actions.workAction.delete.confirm": "Êtes-vous sûr de vouloir supprimer l'action \"{0}\"?", + "actions.workAction.duplicate.title": "Duplication de l'action \"{0}\"", + "actions.workAction.edit.title": "Édition de l'action \"{0}\"", + "actions.workAction.environment": "Environnement", + "actions.workAction.environment.description": "Environnement d'exécution des commandes de l'action.", + "actions.workAction.environment.ile": "ILE", + "actions.workAction.environment.ile.description": "Exécution en commande ILE", + "actions.workAction.environment.pase": "PASE", + "actions.workAction.environment.pase.description": "Exécution via l'environnement PASE", + "actions.workAction.environment.qsh": "QShell", + "actions.workAction.environment.qsh.description": "Exécution via QShell", + "actions.workAction.extensions": "Extensions", + "actions.workAction.extensions.description": "Liste d'extensions de membre/fichier ou de type/attribut d'objet, séparée par des virgules.", + "actions.workAction.name": "Nom de l'action", + "actions.workAction.refresh": "Rafraîchissement", + "actions.workAction.refresh.browser": "Navigateur", + "actions.workAction.refresh.browser.description": "Le navigateur est entièrement rafraîchi", + "actions.workAction.refresh.description": "Le niveau du navigateur devant être rafraîchi une fois l\"action exécutée", + "actions.workAction.refresh.filter": "Filtre", + "actions.workAction.refresh.filter.description": "Le filtre parent est rafraîchi", + "actions.workAction.refresh.no": "Aucun", + "actions.workAction.refresh.no.description": "Pas de rafraîchissement", + "actions.workAction.refresh.parent": "Parent", + "actions.workAction.refresh.parent.description": "Le conteneur parent est rafraîchi", + "actions.workAction.runOnProtected": "Exécuter en mode protégé/lecture seule", + "actions.workAction.runOnProtected.description": "Autorise l'exécution de cette action sur des cibles protégés ou en lecture seule", + "actions.workAction.types": "Type", + "actions.workAction.types.description": "Les types de fichier auxquels s'appliquent l'action.", + "actions.workAction.types.file": "Fichier Local (Workspace)", + "actions.workAction.types.file.description": "Fichiers locaux du Workspace VS Code", + "actions.workAction.types.member": "Membre", + "actions.workAction.types.member.description": "Membres source du système de fichier QSYS", + "actions.workAction.types.object": "Objet", + "actions.workAction.types.object.description": "Objets du système de fichier QSYS", + "actions.workAction.types.streamfile": "Fichier", + "actions.workAction.types.streamfile.description": "Fichier stocké sur l'IFS", + "actions.WORKDIR": "Répertoire de travail actuel, modifiable dans le navigateur IFS", + "active.job": "Job actif", + "ask.overwrite": "{0} existe déjà.\nVoulez-vous le remplacer?", + "attribute": "Attribut", + "AUTHORIZATION_NAME": "Utilisateur en cours", "cancel": "Annuler", - "not.connected": "Non connecté à un IBM i", - "text": "Texte", - "members": "Membres", - "length": "Longueur", + "Cancel": "Annuler", "CCSID": "CCSID", - "lines": "Lignes", - "created": "Création", + "certificates.match": "Certif. local correspond au certif. distant", "changed": "Modification", - "size": "Taille", - "modified": "Modifié", - "owner": "Propriétaire", - "type": "Type", - "attribute": "Attribut", - "created_by": "Créé par", - "overwrite": "Écraser", - "overwrite_all": "Écraser tout", - "ask.overwrite": "{0} existe déjà.\nVoulez-vous le remplacer?", - "skip": "Ignorer", - "skip_all": "Ignorer tout", - "password": "Mot de passe", - "privateKey": "Clé privée", - "username": "Utilisateur", - "stored": "enregistré", - "offline": "Hors ligne", - "online": "En ligne", - "status": "Status", - "job": "Job", - "start": "Démarrer", - "restart": "Redémarrer", - "stop": "Arrêter", - "listening.on.port": "Écoute sur le port", - "listening.on.ports": "Écoute sur les ports", - "overview": "Aperçu", - "JOB_NAME_SHORT": "Nom du job", - "JOB_USER": "Utilisateur", - "JOB_NUMBER": "Numéro du job", - "SUBSYSTEM": "Sous-système", - "AUTHORIZATION_NAME": "Utilisateur en cours", - "JOB_STATUS": "Status du job", - "MEMORY_POOL": "Pool mémoire", - "START_TIME": "Démarré le", - "JAVA_HOME": "Java Home", - "USER_DIRECTORY": "Répertoire utilisateur", - "CURRENT_HEAP_SIZE": "Mémoire utilisée", - "MAX_HEAP_SIZE": "Mémoire maximum allouée", - - "sandbox.input.user.title": "Nom d'utilisateur", - "sandbox.input.user.prompt": "Entrez le nom d'utilisateur pour {0}", - "sandbox.input.password.title": "Mot de passe", - "sandbox.input.password.prompt": "Entrez le mot de passe pour {0}@{1}", - "sandbox.failedToConnect.text": "Échec de la connexion à {0} avec {1}", - "sandbox.failedToConnect.title": "Échec de la connexion", - "sandbox.noPassword": "Connexion à {0} interrompue car aucun mot de passe n'a été fourni.", - "sandbox.alreadyConnected": "Cette instance de Visual Studio Code est déjà connectée à un serveur.", - "sandbox.connected.modal.title": "Merci d'essayer le bac à sable Code for IBM i!", - "sandbox.connected.modal.detail": "Vous êtes seul responsable de l'utilisation du bas à sable. Ne partagez pas d'informations à caractère sensible ou privé.", - "sandbox.noconnection.modal.title": "Aïe aïe aïe, le bac à sable est en panne!", - "sandbox.noconnection.modal.detail": "Désolé, le bac à sable est est hors-ligne pour le moment. Réessayez plus tard.", - + "clearedList": "Liste effacée.", + "clearList": "$(trash) Effacer liste", + "connectionBrowser.connectTo.error": "Utilisez l'Explorateur de Serveur pour sélectionner le serveur auquel se connecter.", "connectionBrowser.connectTo.lastConnection": "Dernière connexion", "connectionBrowser.connectTo.lastUsed": "Dernière utilisation: {0}", "connectionBrowser.connectTo.title": "Dernières connexions IBM i", - "connectionBrowser.connectTo.error": "Utilisez l'Explorateur de Serveur pour sélectionner le serveur auquel se connecter.", - "connectionBrowser.renameConnection.prompt": "Renommer la connexion \"{0}\"", + "connectionBrowser.copyConnection.already.exists": "La connexion \"{0}\" existe déjà", + "connectionBrowser.copyConnection.placeholder": "Nouveau nom de connexion", + "connectionBrowser.copyConnection.prompt": "Copier la connexion \"{0}\"", + "connectionBrowser.copyConnection.select.command.profiles": "Profiles de commande", + "connectionBrowser.copyConnection.select.connection.profiles": "Profile de connection", + "connectionBrowser.copyConnection.select.custom.variables": "Variables personnalisées", + "connectionBrowser.copyConnection.select.home.directory": "Répertoire home", + "connectionBrowser.copyConnection.select.ifs.shortcuts": "Raccourcis IFS", + "connectionBrowser.copyConnection.select.library.list": "Liste de bibliothèques", + "connectionBrowser.copyConnection.select.object.filters": "Filtres d'objets", + "connectionBrowser.copyConnection.select.settings": "Sélectionner les paramètres à copier de \"{0}\" vers \"{1}\"", + "connectionBrowser.deleteConnection.multiple.warning": "Êtes vous sûr de vouloir supprimer ces {0} connexions?", + "connectionBrowser.deleteConnection.warning": "Êtes vous sûr de vouloir supprimer la connexion \"{0}\"?", "connectionBrowser.renameConnection.alreadyExists": "La connexion \"{0}\" existe déjà.", + "connectionBrowser.renameConnection.error": "Erreur lors du renommage de la connexion \"{0}\"! {1}", "connectionBrowser.renameConnection.invalid.input": "Le nouveau nom de la connexion doit être différent de son nom actuel", "connectionBrowser.renameConnection.noConnectionFound": "Aucune connexion nommée \"{0}\" n' a été trouvée", "connectionBrowser.renameConnection.noConnParmsFound": "Aucun paramètre pour la connexion \"{0}\" n'a été trouvé", - "connectionBrowser.renameConnection.error": "Erreur lors du renommage de la connexion \"{0}\"! {1}", - "connectionBrowser.deleteConnection.warning": "Êtes vous sûr de vouloir supprimer la connexion \"{0}\"?", - "connectionBrowser.deleteConnection.multiple.warning": "Êtes vous sûr de vouloir supprimer ces {0} connexions?", - "connectionBrowser.ServerItem.tooltip": " (précédente connexion)", + "connectionBrowser.renameConnection.prompt": "Renommer la connexion \"{0}\"", "connectionBrowser.ServerItem.title": "Se Connecter", - "connectionBrowser.copyConnection.prompt": "Copier la connexion \"{0}\"", - "connectionBrowser.copyConnection.placeholder": "Nouveau nom de connexion", - "connectionBrowser.copyConnection.already.exists": "La connexion \"{0}\" existe déjà", - "connectionBrowser.copyConnection.select.settings": "Sélectionner les paramètres à copier de \"{0}\" vers \"{1}\"", - "connectionBrowser.copyConnection.select.home.directory": "Répertoire home", - "connectionBrowser.copyConnection.select.library.list": "Liste de bibliothèques", - "connectionBrowser.copyConnection.select.object.filters": "Filtres d'objets", - "connectionBrowser.copyConnection.select.ifs.shortcuts": "Raccourcis IFS", - "connectionBrowser.copyConnection.select.custom.variables": "Variables personnalisées", - "connectionBrowser.copyConnection.select.command.profiles": "Profiles de commande", - "connectionBrowser.copyConnection.select.connection.profiles": "Profile de connection", - - "login.title.create": "Connect to IBM i", - "login.title.edit": "paramètres d'authentification: \"{0}\"", - "login.host": "Nom d'Hôte ou Adresse IP", - "login.port": "Port (SSH)", - "login.authDecision": "Renseignez soit le mot de passe, soit la clé privée - pas les deux.", - "login.removeAuth": "Supprimer l'authentification", - "login.authRemoved": "Authentification supprimée pour \"{0}\".", - "login.password.label": "Rensignez un mot de passe seulement si vous souhaitez le changer.", - "login.password.updated": "Mot de passe mis à jour et utilisé pour se connecter à \"{0}\".", - "login.savePassword": "Sauvegarder Mot de passe", - "login.privateKey.label": "Sélectionnez une clé privée seulement si vous souhaitez en changer.", - "login.privateKey.support": "Les formats OpenSSH, RFC4716 et PPK sont supportés.", - "login.privateKey.updated": "Clé privée mise à jour et utilisée pour se connecter à \"{0}\".", - + "connectionBrowser.ServerItem.tooltip": " (précédente connexion)", + "Continue": "Continue", + "created": "Création", + "created_by": "Créé par", + "current": "actuelle", + "CURRENT_HEAP_SIZE": "Mémoire utilisée", + "currentLibrary": "(bibliothèque en cours)", + "debug.server": "Serveur de débogage", + "debug.service": "Service de débogage", + "debug.service.certificate": "Certificat du service de débogage", + "debug.service.submit.options": "Options de soumission du Service de Debug", + "debug.service.submit.options.prompt": "Paramètres valides de SBMJOB", + "debugger.status": "Status du débogueur {0}", + "delete": "Supprimer", + "detail.reading.error": "Erreur de lecture du fichier détail du service de débogage {0}: {1}", + "directory": "Répertoire", + "download.certificate": "Télécharger le certificat", + "duplicate": "Dupliquer", + "enddbgsvr.failed": "Échec de l\"arrêt du serveur de débogage: {0}", + "enddbgsvr.succeeded": "Serveur de débogage arrêté.", + "error": "erreur", + "errors": "erreurs", + "generate.certificate": "Generer le certificat du service", "helpView.getStarted": "Pour commencer", "helpView.officialForum": "Forum officiel", - "helpView.reviewIssues": "Voir les incidents", "helpView.reportIssue": "Déclarer un incident", - - "ifsBrowser.changeWorkingDirectory.prompt": "Changer le répertoire courant", - "ifsBrowser.changeWorkingDirectory.message": "Répertoire courant changé pour {0}.", - "ifsBrowser.addIFSShortcut.prompt": "Chemin du répertoire IFS", + "helpView.reviewIssues": "Voir les incidents", "ifsBrowser.addIFSShortcut.error": "{0} n'est pas un répertoire.", "ifsBrowser.addIFSShortcut.errorMessage": "Erreur lors de la création du raccourci IFS! {0}", - "ifsBrowser.removeIFSShortcut.placeHolder": "Sélection du raccourci IFS à supprimer", - "ifsBrowser.createDirectory.prompt": "Chemin du nouveau répertoire", + "ifsBrowser.addIFSShortcut.prompt": "Chemin du répertoire IFS", + "ifsBrowser.changeWorkingDirectory.message": "Répertoire courant changé pour {0}.", + "ifsBrowser.changeWorkingDirectory.prompt": "Changer le répertoire courant", + "ifsBrowser.copyIFS.errorMessage": "Erreur lors de la copie de {0}! {1}", + "ifsBrowser.copyIFS.infoMessage": "{0} a été copié vers {1}.", + "ifsBrowser.copyIFS.prompt": "Nouveau chemin", + "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", + "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", "ifsBrowser.createDirectory.errorMessage": "Erreur à la création du répertoire! {0}", - "ifsBrowser.createStreamfile.prompt": "Nom du nouveau fichier", - "ifsBrowser.createStreamfile.infoMessage": "Création du fichier {0}.", + "ifsBrowser.createDirectory.prompt": "Chemin du nouveau répertoire", "ifsBrowser.createStreamfile.errorMessage": "Erreur lors de la création du fichier! {0}", - "ifsBrowser.uploadStreamfile.uploadedFiles": "Envoi terminée.", - "ifsBrowser.uploadStreamfile.errorMessage": "Erreur lors de l'envoi des fichiers! {0}", - "ifsBrowser.uploadStreamfile.noFilesSelected": "Aucun fichier ou dossier sélectionné pour l'envoi.", - "ifsBrowser.uploadStreamfile.process.uploading": "Téléchargement", - "ifsBrowser.uploadStreamfile.process.uploading.files": "envoi de {0} fichier(s)...", - "ifsBrowser.uploadStreamfile.process.uploading.directory": "envoi du répertoire {0}...", - "ifsBrowser.uploadStreamfile.ask": "Voulez-vous déplacer ou copier la sélection vers {0}?", - "ifsBrowser.uploadStreamfile.copy": "Copier", - "ifsBrowser.uploadStreamfile.move": "Déplacer", - "ifsBrowser.uploadStreamfile.copy.failed": "Échec de la copie de la sélection vers {0}: {1}", - "ifsBrowser.uploadStreamfile.move.failed": "Échec du déplacement de la sélection vers {0}: {1}", - "ifsBrowser.uploadStreamfile.select.type.folders": "Dossiers", - "ifsBrowser.uploadStreamfile.select.type.files": "Fichiers", - "ifsBrowser.uploadStreamfile.select.type.title": "Que souhaitez-vous envoyer?", - "ifsBrowser.deleteIFS.dirNotAllowed": "Impossible de supprimer les répertoires protégés depuis l'Explorateur IFS!\n{0}", - "ifsBrowser.deleteIFS.warningMessage": "Êtes-vous sûr de vouloir suprimer {0}?", - "ifsBrowser.deleteIFS.multi.warningMessage": "Êtes-vous sûr de vouloir suprimer les {0} fichiers sélectionnés?", + "ifsBrowser.createStreamfile.infoMessage": "Création du fichier {0}.", + "ifsBrowser.createStreamfile.prompt": "Nom du nouveau fichier", + "ifsBrowser.deleteIFS.cancelled": "Suppression annulée.", + "ifsBrowser.deleteIFS.default.home.dir": "{0} était le répertoire de travail; c\"est désormais {1}.", "ifsBrowser.deleteIFS.deletionPrompt": "La suppression du répertoire est irréversible!\nEntrez \"{0}\" pour confirmer la suppression.", "ifsBrowser.deleteIFS.deletionPrompt2": " (Appuyer sur \"Escape\" pour annuler)", - "ifsBrowser.deleteIFS.progress": "Suppression de {0} élément(s)...", + "ifsBrowser.deleteIFS.dirNotAllowed": "Impossible de supprimer les répertoires protégés depuis l'Explorateur IFS!\n{0}", "ifsBrowser.deleteIFS.errorMessage": "Erreur lors de la suppression du fichier! {0}", - "ifsBrowser.deleteIFS.cancelled": "Suppression annulée.", - "ifsBrowser.deleteIFS.default.home.dir": "{0} était le répertoire de travail; c\"est désormais {1}.", - "ifsBrowser.moveIFS.prompt": "Nouveau chemin", + "ifsBrowser.deleteIFS.multi.warningMessage": "Êtes-vous sûr de vouloir suprimer les {0} fichiers sélectionnés?", + "ifsBrowser.deleteIFS.progress": "Suppression de {0} élément(s)...", + "ifsBrowser.deleteIFS.warningMessage": "Êtes-vous sûr de vouloir suprimer {0}?", + "ifsBrowser.doSearchInStreamfiles.errorMessage": "Erreur lors de la recherche de fichiers.", + "ifsBrowser.doSearchInStreamfiles.noResults": "Aucun résultat trouvé pour \"{0}\" dans {1}.", + "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" dans {1}.", + "ifsBrowser.doSearchInStreamfiles.title": "Recherche", + "ifsBrowser.downloadStreamfile.complete": "Téléchargement terminé", + "ifsBrowser.downloadStreamfile.downloading": "Téléchargement", + "ifsBrowser.downloadStreamfile.errorMessage": "Erreur lors du téléchargement: {0}", + "ifsBrowser.getChildren.errorMessage": "Erreur lors du chargement des objets.", + "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} s'est produit lors du chargement des fichiers.", "ifsBrowser.moveIFS.errorMessage": "Erreur lors du renommage/déplacement de {0}! {1}", - "ifsBrowser.moveIFS.renamed": "{0} a été renommé {1}.", "ifsBrowser.moveIFS.moved": "{0} a été déplacé vers {1}.", - "ifsBrowser.copyIFS.prompt": "Nouveau chemin", - "ifsBrowser.copyIFS.infoMessage": "{0} a été copié vers {1}.", - "ifsBrowser.copyIFS.errorMessage": "Erreur lors de la copie de {0}! {1}", - "ifsBrowser.searchIFS.prompt": "Entrez le répertoire IFS où chercher", - "ifsBrowser.searchIFS.title": "Chercher dans un répertoire", - "ifsBrowser.searchIFS.previousSearches": "Recherches précédentes", + "ifsBrowser.moveIFS.prompt": "Nouveau chemin", + "ifsBrowser.moveIFS.renamed": "{0} a été renommé {1}.", + "ifsBrowser.removeIFSShortcut.placeHolder": "Sélection du raccourci IFS à supprimer", + "ifsBrowser.searchIFS.noGrep": "grep doit être installé sur le système distant pour la recherche sur l'IFS.", "ifsBrowser.searchIFS.placeholder": "Entrez un mot à chercher ou choisissez une recherche précédente.", "ifsBrowser.searchIFS.placeholder2": "Entrez le mot à chercher.", + "ifsBrowser.searchIFS.previousSearches": "Recherches précédentes", + "ifsBrowser.searchIFS.prompt": "Entrez le répertoire IFS où chercher", + "ifsBrowser.searchIFS.title": "Chercher dans un répertoire", "ifsBrowser.searchIFS.title2": "Chercher dans {0}.", - "ifsBrowser.searchIFS.noGrep": "grep doit être installé sur le système distant pour la recherche sur l'IFS.", - "ifsBrowser.downloadStreamfile.downloading": "Téléchargement", - "ifsBrowser.downloadStreamfile.complete": "Téléchargement terminé", - "ifsBrowser.downloadStreamfile.errorMessage": "Erreur lors du téléchargement: {0}", - "ifsBrowser.getChildren.errorMessage": "Erreur lors du chargement des objets.", - "ifsBrowser.handleFileListErrors.errorMessage": "{0} {1} s'est produit lors du chargement des fichiers.", - "ifsBrowser.doSearchInStreamfiles.title": "Recherche", - "ifsBrowser.doSearchInStreamfiles.progressMessage": "\"{0}\" dans {1}.", - "ifsBrowser.doSearchInStreamfiles.noResults": "Aucun résultat trouvé pour \"{0}\" dans {1}.", - "ifsBrowser.doSearchInStreamfiles.errorMessage": "Erreur lors de la recherche de fichiers.", - "ifsBrowser.copyToStreamfile.infoMessage": "{0} member(s) copied to streamfile(s) in {1}.", - "ifsBrowser.copyToStreamfile.failed": "Error copying member(s) to {0}: {1}", - + "ifsBrowser.uploadStreamfile.ask": "Voulez-vous déplacer ou copier la sélection vers {0}?", + "ifsBrowser.uploadStreamfile.copy": "Copier", + "ifsBrowser.uploadStreamfile.copy.failed": "Échec de la copie de la sélection vers {0}: {1}", + "ifsBrowser.uploadStreamfile.errorMessage": "Erreur lors de l'envoi des fichiers! {0}", + "ifsBrowser.uploadStreamfile.move": "Déplacer", + "ifsBrowser.uploadStreamfile.move.failed": "Échec du déplacement de la sélection vers {0}: {1}", + "ifsBrowser.uploadStreamfile.noFilesSelected": "Aucun fichier ou dossier sélectionné pour l'envoi.", + "ifsBrowser.uploadStreamfile.process.uploading": "Téléchargement", + "ifsBrowser.uploadStreamfile.process.uploading.directory": "envoi du répertoire {0}...", + "ifsBrowser.uploadStreamfile.process.uploading.files": "envoi de {0} fichier(s)...", + "ifsBrowser.uploadStreamfile.select.type.files": "Fichiers", + "ifsBrowser.uploadStreamfile.select.type.folders": "Dossiers", + "ifsBrowser.uploadStreamfile.select.type.title": "Que souhaitez-vous envoyer?", + "ifsBrowser.uploadStreamfile.uploadedFiles": "Envoi terminée.", + "JAVA_HOME": "Java Home", + "job": "Job", + "JOB_NAME_SHORT": "Nom du job", + "JOB_NUMBER": "Numéro du job", + "JOB_STATUS": "Status du job", + "JOB_USER": "Utilisateur", + "jvm.info": "Information JVM", + "length": "Longueur", + "LibraryListView.addToLibraryList.addedLib": "La bibliohtèque {0} a été ajoutée à la liste des bibliothèques.", + "LibraryListView.addToLibraryList.alreadyInList": "La bibliohtèque {0} est déjà dans la liste des bibliothèques.", + "LibraryListView.addToLibraryList.invalidLib": "La bibliohtèque {0} n'existe pas.", + "LibraryListView.addToLibraryList.prompt": "Bibliothèque à ajouter", + "LibraryListView.addToLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", + "LibraryListView.addToLibraryList.tooLong": "Le nom de bibliothèque est trop long.", + "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} est déjà la bibliothèque en cours.", + "LibraryListView.changeCurrentLibrary.changedCurrent": "La bibliothèque en cours est maintenant {0}.", "LibraryListView.changeCurrentLibrary.currentlyActive": "Active", - "LibraryListView.changeCurrentLibrary.recentlyUsed": "Utilisé récemment", "LibraryListView.changeCurrentLibrary.placeholder": "Filtre ou nouvelle bibliothèque à utiliser comme bibliothèque en cours", + "LibraryListView.changeCurrentLibrary.recentlyUsed": "Utilisé récemment", "LibraryListView.changeCurrentLibrary.title": "Changer la bibliothèque en cours", - "LibraryListView.changeCurrentLibrary.changedCurrent": "La bibliothèque en cours est maintenant {0}.", - "LibraryListView.changeCurrentLibrary.alreadyCurrent": "{0} est déjà la bibliothèque en cours.", "LibraryListView.changeUserLibraryList.prompt": "Changement de la liste des bibliothèques (valeur spécial: \"*reset\")", "LibraryListView.changeUserLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", - "LibraryListView.addToLibraryList.prompt": "Bibliothèque à ajouter", - "LibraryListView.addToLibraryList.tooLong": "Le nom de bibliothèque est trop long.", - "LibraryListView.addToLibraryList.alreadyInList": "La bibliohtèque {0} est déjà dans la liste des bibliothèques.", - "LibraryListView.addToLibraryList.invalidLib": "La bibliohtèque {0} n'existe pas.", - "LibraryListView.addToLibraryList.addedLib": "La bibliohtèque {0} a été ajoutée à la liste des bibliothèques.", - "LibraryListView.addToLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", - "LibraryListView.removeFromLibraryList.removedLib": "La bibliohtèque {0} a été retirée de la liste des bibliothèques.", "LibraryListView.cleanupLibraryList.removedLibs": "Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}", "LibraryListView.cleanupLibraryList.validated": "La liste des bibliothèques a été validée avec succès.", + "LibraryListView.removeFromLibraryList.removedLib": "La bibliohtèque {0} a été retirée de la liste des bibliothèques.", "LibraryListView.setCurrentLibrary.failed": "La bibliothèque {0} ne peut pas devenir la bibliothèque en cours: {1}", - - "objectBrowser.delete.confirm": "Êtes-vous sûr de vouloir supprimer {0}?", - "objectBrowser.delete.multiple.confirm": "Êtes-vous sûr de vouloir supprimer les {0} éléments sélectionnés?", - "objectBrowser.delete.progress": "Suppression", - "objectBrowser.createMember.prompt": "Nom du nouveau membre source (membre.ext)", - "objectBrowser.createMember.progressTitle": "Creation du membre {0}...", - "objectBrowser.createMember.errorMessage": "Erreur lors de la creation du membre {0}: {1}", - "objectBrowser.copyMember.prompt": "Chemin pour la copie du membre source", - "objectBrowser.copyMember.errorMessage": "Impossible de copier un membre sur lui-même!", - "objectBrowser.copyMember.progressTitle": "Création du membre {0}...", - "objectBrowser.copyMember.overwrite": "Êtes-vous sûr de vouloir écraser le membre {0}?", - "objectBrowser.copyMember.errorMessage2": "Le membre {0} existe déjà!", - "objectBrowser.copyMember.errorMessage3": "Erreur lors de la création du membre {0}: {1}", - "objectBrowser.deleteMember.errorMessage": "Erreur lors de la suppression du membre! {0}", - "objectBrowser.updateMemberText.prompt": "Changer la description du membre {0}, *BLANK pour effacer la description", - "objectBrowser.updateMemberText.errorMessage": "Erreur lors de la mise à jour du texte du membre! {0}", - "objectBrowser.renameMember.prompt": "Renommer {0}", - "objectBrowser.renameMember.errorMessage": "Erreur lors du renommage du membre! {0}", - "objectBrowser.renameMember.invalid.input": "Le nouveau nom du membre doit être différent de l'ancien", - "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Le membre a été uploadé.", - "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Erreur lors de l'upload du contenu du membre! {0}", - "objectBrowser.downloadMemberContent.infoMessage": "Téléchargement des membres terminé.", - "objectBrowser.downloadMemberContent.errorMessage": "Erreur lors du téléchargement des membres! {0}", - "objectBrowser.downloadMemberContent.cancel": "Téléchargement des membres annulé.", - "objectBrowser.downloadMemberContent.download.progress": "Téléchargement de {0} membres", - "objectBrowser.downloadMemberContent.download.cpytostmf": "copie des membres en streamfiles", - "objectBrowser.downloadMemberContent.download.streamfiles": "récupération des streamfiles", - "objectBrowser.searchSourceFile.prompt": "Entrez LIB/SPF/membre.ext pour chercher (membre.ext est optionnel et peut contenir des caractères génériques)", - "objectBrowser.searchSourceFile.title": "Rechercher dans un fichier source", - "objectBrowser.searchSourceFile.invalidForm": "Entrez une valeur de la forme LIB/SPF/membre.ext", - "objectBrowser.searchSourceFile.aspText": "(dans l'ASP {0})", - "objectBrowser.searchSourceFile.previousSearches": "Recherches précédentes", - "objectBrowser.searchSourceFile.placeholder": "Entrez un mot à chercher ou choisissez une recherche précédente.", - "objectBrowser.searchSourceFile.placeholder2": "Entrez le mot à chercher.", - "objectBrowser.searchSourceFile.title2": "Rechercher dans {0} {1}", - "objectBrowser.searchSourceFile.errorMessage": "Impossible de rechercher une liste avec *ALL.", - "objectBrowser.createFilter": "Créer un filtre", - "objectBrowser.createLibrary.prompt": "Nom de la nouvelle bibliothèque", - "objectBrowser.createLibrary.errorMessage": "Impossible de créer la bibliothèque \"{0}\": {1}", - "objectBrowser.createLibrary.infoMessage": "Voulez-vous ajouter la nouvelle bibliothèque à la liste des bibliothèques?", - "objectBrowser.createLibrary.errorMessage2": "Nom de bibliothèque trop long.", - "objectBrowser.createSourceFile.prompt": "Nom du nouveau fichier source", - "objectBrowser.createSourceFile.infoMessage": "Création du fichier source {0}.", - "objectBrowser.createSourceFile.errorMessage": "Erreur lors de la création du fichier source! {0}", - "objectBrowser.createSourceFile.errorMessage2": "Le nom du fichier source doit faire au maximum 10 caractères de long.", - "objectBrowser.changeObjectDesc.prompt": "Changer la description de l'objet pour {0}, *BLANK pour effacer la description", + "lines": "Lignes", + "listening.on.port": "Écoute sur le port", + "listening.on.ports": "Écoute sur les ports", + "loading.debugger.info": "Chargement du status du débogueur...", + "local.certificate": "Certificat local", + "local.certificate.not.found": "Le certificat local n\"existe pas", + "local.dont.match.remote": "Le certificat local ne correspond pas à celui du service", + "login.authDecision": "Renseignez soit le mot de passe, soit la clé privée - pas les deux.", + "login.authRemoved": "Authentification supprimée pour \"{0}\".", + "login.host": "Nom d'Hôte ou Adresse IP", + "login.password.label": "Rensignez un mot de passe seulement si vous souhaitez le changer.", + "login.password.updated": "Mot de passe mis à jour et utilisé pour se connecter à \"{0}\".", + "login.port": "Port (SSH)", + "login.privateKey.label": "Sélectionnez une clé privée seulement si vous souhaitez en changer.", + "login.privateKey.support": "Les formats OpenSSH, RFC4716 et PPK sont supportés.", + "login.privateKey.updated": "Clé privée mise à jour et utilisée pour se connecter à \"{0}\".", + "login.removeAuth": "Supprimer l'authentification", + "login.savePassword": "Sauvegarder Mot de passe", + "login.title.create": "Connect to IBM i", + "login.title.edit": "paramètres d'authentification: \"{0}\"", + "MAX_HEAP_SIZE": "Mémoire maximum allouée", + "members": "Membres", + "MEMORY_POOL": "Pool mémoire", + "modified": "Modifié", + "No": "Non", + "not.connected": "Non connecté à un IBM i", + "not.found.in": "Non trouvé dans {0}", "objectBrowser.changeObjectDesc.errorMessage": "La description de l'objet doit faire au maximum 50 caractères de long.", - "objectBrowser.changeObjectDesc.infoMessage": "La description de l'objet {0} {1} a été changée.", "objectBrowser.changeObjectDesc.errorMessage2": "Erreur lors du changement de la description de {0}! {1}", - "objectBrowser.copyObject.prompt": "Duplication de l'objet vers une nouvelle bibliothèque/objet", + "objectBrowser.changeObjectDesc.infoMessage": "La description de l'objet {0} {1} a été changée.", + "objectBrowser.changeObjectDesc.prompt": "Changer la description de l'objet pour {0}, *BLANK pour effacer la description", + "objectBrowser.copyMember.errorMessage": "Impossible de copier un membre sur lui-même!", + "objectBrowser.copyMember.errorMessage2": "Le membre {0} existe déjà!", + "objectBrowser.copyMember.errorMessage3": "Erreur lors de la création du membre {0}: {1}", + "objectBrowser.copyMember.overwrite": "Êtes-vous sûr de vouloir écraser le membre {0}?", + "objectBrowser.copyMember.progressTitle": "Création du membre {0}...", + "objectBrowser.copyMember.prompt": "Chemin pour la copie du membre source", "objectBrowser.copyObject.errorMessage": "Chemin invalide: {0}. Utilisez le format LIB/OBJ", "objectBrowser.copyObject.errorMessage2": "Le nom de la bibliothèque doit faire au maximum 10 caractères de long.", "objectBrowser.copyObject.errorMessage3": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.copyObject.errorMessage4": "Erreur lors de la copie de l'objet {0}! {1}", "objectBrowser.copyObject.infoMessage": "Objet {0} {1} copié vers {2}.", "objectBrowser.copyObject.infoMessage2": "Objet {0} {1} copié vers {2}. Rafraîchissement de l'explorateur d'objet.", - "objectBrowser.copyObject.errorMessage4": "Erreur lors de la copie de l'objet {0}! {1}", + "objectBrowser.copyObject.prompt": "Duplication de l'objet vers une nouvelle bibliothèque/objet", + "objectBrowser.createFilter": "Créer un filtre", + "objectBrowser.createLibrary.errorMessage": "Impossible de créer la bibliothèque \"{0}\": {1}", + "objectBrowser.createLibrary.errorMessage2": "Nom de bibliothèque trop long.", + "objectBrowser.createLibrary.infoMessage": "Voulez-vous ajouter la nouvelle bibliothèque à la liste des bibliothèques?", + "objectBrowser.createLibrary.prompt": "Nom de la nouvelle bibliothèque", + "objectBrowser.createMember.errorMessage": "Erreur lors de la creation du membre {0}: {1}", + "objectBrowser.createMember.progressTitle": "Creation du membre {0}...", + "objectBrowser.createMember.prompt": "Nom du nouveau membre source (membre.ext)", + "objectBrowser.createSourceFile.errorMessage": "Erreur lors de la création du fichier source! {0}", + "objectBrowser.createSourceFile.errorMessage2": "Le nom du fichier source doit faire au maximum 10 caractères de long.", + "objectBrowser.createSourceFile.infoMessage": "Création du fichier source {0}.", + "objectBrowser.createSourceFile.prompt": "Nom du nouveau fichier source", + "objectBrowser.delete.confirm": "Êtes-vous sûr de vouloir supprimer {0}?", + "objectBrowser.delete.multiple.confirm": "Êtes-vous sûr de vouloir supprimer les {0} éléments sélectionnés?", + "objectBrowser.delete.progress": "Suppression", + "objectBrowser.deleteMember.errorMessage": "Erreur lors de la suppression du membre! {0}", "objectBrowser.deleteObject.errorMessage": "Erreur lors de la suppression de l'objet! {0}", - "objectBrowser.renameObject.prompt": "Renamer l'objet", - "objectBrowser.renameObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", - "objectBrowser.renameObject.infoMessage": "Objet {0} {1} renommé {2}.", - "objectBrowser.renameObject.progress": "Renommage de l'objet {0} {1} en {2}...", - "objectBrowser.renameObject.errorMessage2": "Erreur lors du renommage de l'objet {0}! {1}", - "objectBrowser.moveObject.prompt": "Déplacer l'objet", - "objectBrowser.moveObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", - "objectBrowser.moveObject.infoMessage": "Objet {0} {1} déplacé vers {2}.", - "objectBrowser.moveObject.infoMessage2": "Objet {0} {1} déplacé vers {2}. Rafraîchissement de l'explorateur d'objet.", - "objectBrowser.moveObject.errorMessage2": "Erreur lors du déplacement de l'objet {0}! {1}", - "objectBrowser.moveObject.progress": "Déplacement de l'objet {0} {1} vers {2}...", - "objectBrowser.doSearchInSourceFile.title": "Recherche", + "objectBrowser.doSearchInSourceFile.errorMessage": "Erreur lors de la recherche de membres source: {0}", + "objectBrowser.doSearchInSourceFile.noMembers": "Aucun membre à rechercher.", + "objectBrowser.doSearchInSourceFile.notFound": "Aucun résultat trouvé pour \"{0}\" dans {1}.", "objectBrowser.doSearchInSourceFile.progressMessage": "Récupération de la liste des membres de {0}.", "objectBrowser.doSearchInSourceFile.searchMessage1": "\"{0}\" dans {1}.", "objectBrowser.doSearchInSourceFile.searchMessage2": "La recherche prend du temps car il y a {0} membres...mais elle continue!", @@ -278,122 +290,100 @@ "objectBrowser.doSearchInSourceFile.searchMessage7": "Qu'est ce qui est jaune et qui attend?", "objectBrowser.doSearchInSourceFile.searchMessage8": "Mais...pourquoi il y a {0} membres dans ce fichier en fait?", "objectBrowser.doSearchInSourceFile.searchMessage9": "\"{0}\" in {1}.", - "objectBrowser.doSearchInSourceFile.notFound": "Aucun résultat trouvé pour \"{0}\" dans {1}.", - "objectBrowser.doSearchInSourceFile.noMembers": "Aucun membre à rechercher.", - "objectBrowser.doSearchInSourceFile.errorMessage": "Erreur lors de la recherche de membres source: {0}", - - "ProfilesView.saveConnectionProfile.prompt": "Nom du profil", - "ProfilesView.saveConnectionProfile.infoMessage": "Paramètres actuels sauvés sur le profil \"{0}\".", + "objectBrowser.doSearchInSourceFile.title": "Recherche", + "objectBrowser.downloadMemberContent.cancel": "Téléchargement des membres annulé.", + "objectBrowser.downloadMemberContent.download.cpytostmf": "copie des membres en streamfiles", + "objectBrowser.downloadMemberContent.download.progress": "Téléchargement de {0} membres", + "objectBrowser.downloadMemberContent.download.streamfiles": "récupération des streamfiles", + "objectBrowser.downloadMemberContent.errorMessage": "Erreur lors du téléchargement des membres! {0}", + "objectBrowser.downloadMemberContent.infoMessage": "Téléchargement des membres terminé.", + "objectBrowser.moveObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.moveObject.errorMessage2": "Erreur lors du déplacement de l'objet {0}! {1}", + "objectBrowser.moveObject.infoMessage": "Objet {0} {1} déplacé vers {2}.", + "objectBrowser.moveObject.infoMessage2": "Objet {0} {1} déplacé vers {2}. Rafraîchissement de l'explorateur d'objet.", + "objectBrowser.moveObject.progress": "Déplacement de l'objet {0} {1} vers {2}...", + "objectBrowser.moveObject.prompt": "Déplacer l'objet", + "objectBrowser.renameMember.errorMessage": "Erreur lors du renommage du membre! {0}", + "objectBrowser.renameMember.invalid.input": "Le nouveau nom du membre doit être différent de l'ancien", + "objectBrowser.renameMember.prompt": "Renommer {0}", + "objectBrowser.renameObject.errorMessage": "Le nom de l'objet doit faire au maximum 10 caractères de long.", + "objectBrowser.renameObject.errorMessage2": "Erreur lors du renommage de l'objet {0}! {1}", + "objectBrowser.renameObject.infoMessage": "Objet {0} {1} renommé {2}.", + "objectBrowser.renameObject.progress": "Renommage de l'objet {0} {1} en {2}...", + "objectBrowser.renameObject.prompt": "Renamer l'objet", + "objectBrowser.searchSourceFile.aspText": "(dans l'ASP {0})", + "objectBrowser.searchSourceFile.errorMessage": "Impossible de rechercher une liste avec *ALL.", + "objectBrowser.searchSourceFile.invalidForm": "Entrez une valeur de la forme LIB/SPF/membre.ext", + "objectBrowser.searchSourceFile.placeholder": "Entrez un mot à chercher ou choisissez une recherche précédente.", + "objectBrowser.searchSourceFile.placeholder2": "Entrez le mot à chercher.", + "objectBrowser.searchSourceFile.previousSearches": "Recherches précédentes", + "objectBrowser.searchSourceFile.prompt": "Entrez LIB/SPF/membre.ext pour chercher (membre.ext est optionnel et peut contenir des caractères génériques)", + "objectBrowser.searchSourceFile.title": "Rechercher dans un fichier source", + "objectBrowser.searchSourceFile.title2": "Rechercher dans {0} {1}", + "objectBrowser.updateMemberText.errorMessage": "Erreur lors de la mise à jour du texte du membre! {0}", + "objectBrowser.updateMemberText.prompt": "Changer la description du membre {0}, *BLANK pour effacer la description", + "objectBrowser.uploadAndReplaceMemberAsFile.errorMessage": "Erreur lors de l'upload du contenu du membre! {0}", + "objectBrowser.uploadAndReplaceMemberAsFile.infoMessage": "Le membre a été uploadé.", + "offline": "Hors ligne", + "online": "En ligne", + "open.service.configuration": "Ouvrir la configuration", + "overview": "Aperçu", + "overwrite": "Écraser", + "overwrite_all": "Écraser tout", + "owner": "Propriétaire", + "password": "Mot de passe", + "privateKey": "Clé privée", "ProfilesView.deleteConnectionProfile.warningMessage": "Êtes-vous sûr de vouloir supprimer le profil \"{0}\"?", - "ProfilesView.loadConnectionProfile.infoMessage": "Le profil en cours est \"{0}\".", + "ProfilesView.loadCommandProfile.errorMessage": "Échec de la récupération de la liste des bibliothèque depuis la commande: {0}", "ProfilesView.loadCommandProfile.infoMessage": "Le profil en cours est \"{0}\".", "ProfilesView.loadCommandProfile.warningMessage": "Échec de la récupération de la liste des bibliothèque depuis la commande. Fonctionnalité non installée.", - "ProfilesView.loadCommandProfile.errorMessage": "Échec de la récupération de la liste des bibliothèque depuis la commande: {0}", - "ProfilesView.setToDefault.infoMessage": "Réinitialisation", + "ProfilesView.loadConnectionProfile.infoMessage": "Le profil en cours est \"{0}\".", + "ProfilesView.saveConnectionProfile.infoMessage": "Paramètres actuels sauvés sur le profil \"{0}\".", + "ProfilesView.saveConnectionProfile.prompt": "Nom du profil", "ProfilesView.setToDefault.detail": "La liste des bibliothèques Utilisateur, le répertoire de travail et les variables personnalisées vont être réinitialisés.", - - "actions.CURLIB": "Bibliothèque en cours, modifiable depuis la Liste des Bibliothèques", - "actions.USERNAME": "Nom d'utilisateur de la connexion", - "actions.WORKDIR": "Répertoire de travail actuel, modifiable dans le navigateur IFS", - "actions.HOST": "Nom d'hôte ou adresse IP de la connexion", - "actions.BRANCH": "Branche Git en cours", - "actions.BRANCHLIB": "Bibliothèque de la branche, basée sur la branche en cours", - "actions.BUILDLIB": "Voir &CURLIB", - "actions.LIBLC": "Liste des bilbiothèques, séparée par des virgules", - "actions.LIBLS": "Liste des bilbiothèques, séparée par des espaces", - "actions.OPENLIB": "Nom de la bibliothèque contenant le membre source (&OPENLIBL pour le nom en minuscule)", - "actions.OPENSPF": "Nom du fichier source contenant le membre source (&OPENSPFL pour le nom en minuscule)", - "actions.OPENMBR": "Nom du membre source (&OPENMBRL pour le nom en minuscule)", - "actions.member.EXT": "Extension du membre source (&EXTL pour le nom en minuscule)", - "actions.FULLPATH": "Chemin absolu du fichier sur le système distant", - "actions.FILEDIR": "Répertoire du fichier sur le système distant", - "actions.RELATIVEPATH": "Chemin relatif du fichier de flux à partir du répertoire de travail ou de l'espace de travail", - "actions.PARENT": "Nom du répertoire parent du fichier", - "actions.BASENAME": "Nom du fichier avec son extension", - "actions.streamfile.NAME": "Nom du fichier (&NAMEL pour le nom en minuscule)", - "actions.streamfile.EXT": "Extension du fichier (&EXTL pour le nom en minuscule)", - "actions.LIBRARY": "Nom de la bibliothèque contenant l'objet (&LIBRARYL pour le nom en minuscule)", - "actions.NAME": "Nom de l'objet (&NAMEL pour le nom en minuscule)", - "actions.NAMEL": "Nom de l'objet en minuscule", - "actions.object.TYPE": "Type de l'objet (&TYPEL pour le nom en minuscule)", - "actions.object.EXT": "Extension/attribut de l'objet (&EXTL pour le nom en minuscule)", - "actions.EXT": "Extension du fichier", - "actions.EXTL": "Extension du fichier en minuscule", - "actions.mainMenu.workWithActions": "Maintenance des Actions", - "actions.mainMenu.createOrMaintain": "Créez ou éditez des Actions. Les Actions sont groupées par type.", - "actions.mainMenu.newAction": "Créer Action", - "actions.duplicate.select": "Sélectionnez l'action à dupliquer", - "actions.workAction.create.title": "Créer une action", - "actions.workAction.edit.title": "Édition de l'action \"{0}\"", - "actions.workAction.duplicate.title": "Duplication de l'action \"{0}\"", - "actions.workAction.name": "Nom de l'action", - "actions.workAction.command": "Commande(s) à exécuter", - "actions.workAction.command.description": "Les variables ci-dessous sont disponibles en fonction du Type sélectionné ci-après. Vous pouvez définir plusieurs commande; une par ligne. Chaque commande est exécutée dans son propre Job et n'a pas d'état.", - "actions.workAction.extensions": "Extensions", - "actions.workAction.extensions.description": "Liste d'extensions de membre/fichier ou de type/attribut d'objet, séparée par des virgules.", - "actions.workAction.types": "Type", - "actions.workAction.types.description": "Les types de fichier auxquels s'appliquent l'action.", - "actions.workAction.types.member": "Membre", - "actions.workAction.types.member.description": "Membres source du système de fichier QSYS", - "actions.workAction.types.streamfile": "Fichier", - "actions.workAction.types.streamfile.description": "Fichier stocké sur l'IFS", - "actions.workAction.types.object": "Objet", - "actions.workAction.types.object.description": "Objets du système de fichier QSYS", - "actions.workAction.types.file": "Fichier Local (Workspace)", - "actions.workAction.types.file.description": "Fichiers locaux du Workspace VS Code", - "actions.workAction.environment": "Environnement", - "actions.workAction.environment.description": "Environnement d'exécution des commandes de l'action.", - "actions.workAction.environment.ile": "ILE", - "actions.workAction.environment.ile.description": "Exécution en commande ILE", - "actions.workAction.environment.qsh": "QShell", - "actions.workAction.environment.qsh.description": "Exécution via QShell", - "actions.workAction.environment.pase": "PASE", - "actions.workAction.environment.pase.description": "Exécution via l'environnement PASE", - "actions.workAction.delete.confirm": "Êtes-vous sûr de vouloir supprimer l'action \"{0}\"?", - "actions.workAction.refresh": "Rafraîchissement", - "actions.workAction.refresh.description": "Le niveau du navigateur devant être rafraîchi une fois l\"action exécutée", - "actions.workAction.refresh.no": "Aucun", - "actions.workAction.refresh.no.description": "Pas de rafraîchissement", - "actions.workAction.refresh.parent": "Parent", - "actions.workAction.refresh.parent.description": "Le conteneur parent est rafraîchi", - "actions.workAction.refresh.filter": "Filtre", - "actions.workAction.refresh.filter.description": "Le filtre parent est rafraîchi", - "actions.workAction.refresh.browser": "Navigateur", - "actions.workAction.refresh.browser.description": "Le navigateur est entièrement rafraîchi", - "actions.workAction.runOnProtected": "Exécuter en mode protégé/lecture seule", - "actions.workAction.runOnProtected.description": "Autorise l'exécution de cette action sur des cibles protégés ou en lecture seule", - - "debugger.status": "Status du débogueur {0}", - "loading.debugger.info": "Chargement du status du débogueur...", - "debug.server": "Serveur de débogage", - "debug.service": "Service de débogage", - "active.job": "Job actif", - "jvm.info": "Information JVM", - "debug.service.certificate": "Certificat du service de débogage", + "ProfilesView.setToDefault.infoMessage": "Réinitialisation", + "remote.certificate.not.found": "Le certificat du service n\"existe pas", + "remote.certificate.not.found.detail": "{0} n\"a pas été trouvé dans {1}", + "restart": "Redémarrer", + "Retry": "Réessayer", + "sandbox.alreadyConnected": "Cette instance de Visual Studio Code est déjà connectée à un serveur.", + "sandbox.connected.modal.detail": "Vous êtes seul responsable de l'utilisation du bas à sable. Ne partagez pas d'informations à caractère sensible ou privé.", + "sandbox.connected.modal.title": "Merci d'essayer le bac à sable Code for IBM i!", + "sandbox.failedToConnect.text": "Échec de la connexion à {0} avec {1}", + "sandbox.failedToConnect.title": "Échec de la connexion", + "sandbox.input.password.prompt": "Entrez le mot de passe pour {0}@{1}", + "sandbox.input.password.title": "Mot de passe", + "sandbox.input.user.prompt": "Entrez le nom d'utilisateur pour {0}", + "sandbox.input.user.title": "Nom d'utilisateur", + "sandbox.noconnection.modal.detail": "Désolé, le bac à sable est est hors-ligne pour le moment. Réessayez plus tard.", + "sandbox.noconnection.modal.title": "Aïe aïe aïe, le bac à sable est en panne!", + "sandbox.noPassword": "Connexion à {0} interrompue car aucun mot de passe n'a été fourni.", + "save": "Enregistrer", "service.certificate.exists": "Certificat du service existe", - "local.certificate": "Certificat local", - "certificates.match": "Certif. local correspond au certif. distant", - "generate.certificate": "Generer le certificat du service", - "download.certificate": "Télécharger le certificat", - "not.found.in": "Non trouvé dans {0}", - "strdbgsvr.succeeded": "Serveur de débogage démarré.", - "strdbgsvr.failed": "Échec du démarrage du serveur de débogage: {0}", - "enddbgsvr.succeeded": "Serveur de débogage arrêté.", - "enddbgsvr.failed": "Échec de l\"arrêt du serveur de débogage: {0}", - "start.debug.service.task": "Démarrage du service de débogage...", - "start.debug.service.succeeded": "Service de débogage démarré.", - "start.debug.service.failed": "Échec du démarrage du service de débogage: {0}", - "stop.debug.service.task": "Arrêt du service de débogage...", - "stop.debug.service.succeeded": "Service de débogage arrêté.", - "stop.debug.service.failed": "Échec de l\"arrêt du service de débogage: {0}", - "open.service.configuration": "Ouvrir la configuration", - "detail.reading.error": "Erreur de lecture du fichier détail du service de débogage {0}: {1}", + "shortcut": "raccourci", + "size": "Taille", + "skip": "Ignorer", + "skip_all": "Ignorer tout", + "start": "Démarrer", + "START_TIME": "Démarré le", "start.debug.server.task": "Démarrage du serveur de débogage...", + "start.debug.service.failed": "Échec du démarrage du service de débogage: {0}", + "start.debug.service.succeeded": "Service de débogage démarré.", + "start.debug.service.task": "Démarrage du service de débogage...", + "status": "Status", + "stop": "Arrêter", "stop.debug.server.task": "Arrêt du serveur de débogage...", - "remote.certificate.not.found": "Le certificat du service n\"existe pas", - "remote.certificate.not.found.detail": "{0} n\"a pas été trouvé dans {1}", - "local.certificate.not.found": "Le certificat local n\"existe pas", - "local.dont.match.remote": "Le certificat local ne correspond pas à celui du service", - "debug.service.submit.options":"Options de soumission du Service de Debug", - "debug.service.submit.options.prompt":"Paramètres valides de SBMJOB" + "stop.debug.service.failed": "Échec de l\"arrêt du service de débogage: {0}", + "stop.debug.service.succeeded": "Service de débogage arrêté.", + "stop.debug.service.task": "Arrêt du service de débogage...", + "stored": "enregistré", + "strdbgsvr.failed": "Échec du démarrage du serveur de débogage: {0}", + "strdbgsvr.succeeded": "Serveur de débogage démarré.", + "streamfile": "fichier", + "SUBSYSTEM": "Sous-système", + "text": "Texte", + "type": "Type", + "USER_DIRECTORY": "Répertoire utilisateur", + "username": "Utilisateur", + "Yes": "Oui" } \ No newline at end of file From d0546d10cae2654ccc338fc900b94a43bd2dacc4 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 9 May 2024 17:24:15 +0200 Subject: [PATCH 03/16] Added attr date parsing + test Signed-off-by: Seb Julliand --- src/api/IBMiContent.ts | 2 +- src/api/Tools.ts | 16 ++++++++++++++++ src/filesystems/ifsFs.ts | 32 +++++++++++++++++++++++--------- src/testing/tools.ts | 23 +++++++++++++++++++++++ 4 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/api/IBMiContent.ts b/src/api/IBMiContent.ts index 4609e8564..d1a85a6d1 100644 --- a/src/api/IBMiContent.ts +++ b/src/api/IBMiContent.ts @@ -923,7 +923,7 @@ export default class IBMiContent { })).code === 0; } - async testStreamFile(path: string, right: "f" | "d" | "r" | "w" | "x") { + async testStreamFile(path: string, right: "e" | "f" | "d" | "r" | "w" | "x") { return (await this.ibmi.sendCommand({ command: `test -${right} ${Tools.escapePath(path)}` })).code === 0; } diff --git a/src/api/Tools.ts b/src/api/Tools.ts index bb6f93682..b993ba489 100644 --- a/src/api/Tools.ts +++ b/src/api/Tools.ts @@ -6,6 +6,9 @@ import { t } from "../locale"; import { IBMiMessage, IBMiMessages, QsysPath } from '../typings'; import { API, GitExtension } from "./import/git"; +const MONTHS = [undefined, "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; +const DAYS = [undefined,"Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; + export namespace Tools { export class SqlError extends Error { public sqlstate: string = "0"; @@ -380,4 +383,17 @@ export namespace Tools { } } } + + /** + * Converts a timestamp from the attr command (in the form `Thu Dec 21 21:47:02 2023`) into a Date object + * @param timestamp an attr timestamp string + * @returns a Date object + */ + export function parseAttrDate(timestamp:string){ + const parts = /^([\w]{3}) ([\w]{3}) +([\d]+) ([\d]+:[\d]+:[\d]+) ([\d]+)$/.exec(timestamp); + if(parts){ + return Date.parse(`${parts[3].padStart(2, "0")} ${parts[2]} ${parts[5]} ${parts[4]} GMT`); + } + return 0; + } } \ No newline at end of file diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index c2970e2a9..7d1d56562 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -1,6 +1,6 @@ -import vscode from "vscode"; -import { getFilePermission } from "./qsys/QSysFs"; +import vscode, { FileSystemError } from "vscode"; import { instance } from "../instantiate"; +import { getFilePermission } from "./qsys/QSysFs"; export class IFSFS implements vscode.FileSystemProvider { private emitter = new vscode.EventEmitter(); @@ -27,13 +27,27 @@ export class IFSFS implements vscode.FileSystemProvider { } } - stat(uri: vscode.Uri): vscode.FileStat { - return { - ctime: 0, - mtime: 0, - size: 0, - type: vscode.FileType.File, - permissions: getFilePermission(uri) + async stat(uri: vscode.Uri): Promise { + const content = instance.getContent(); + if (content) { + const path = uri.path; + if (await content.testStreamFile(path, "e")) { + const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); + if (attributes) { + return { + ctime: 0, + mtime: 0, + size: Number(attributes.DATA_SIZE), + type: vscode.FileType.File, + permissions: getFilePermission(uri) + } + } + } + + throw FileSystemError.FileNotFound(uri); + } + else { + throw new Error("Not connected to IBM i"); } } diff --git a/src/testing/tools.ts b/src/testing/tools.ts index 11ceceaea..c8038e291 100644 --- a/src/testing/tools.ts +++ b/src/testing/tools.ts @@ -259,6 +259,29 @@ export const ToolsSuite: TestSuite = { assert.strictEqual(rows[0].CREATED, 1713451802000); assert.strictEqual(rows[0].CHANGED, 1713453741000); } + }, + { + name: "Date attr parsing", test: async () => { + const date1Epoch = Tools.parseAttrDate(`Fri Apr 5 09:00:10 2024`); + assert.strictEqual(date1Epoch, 1712307610000); + const date1 = new Date(date1Epoch); + assert.strictEqual(date1.getUTCDay(), 5); + assert.strictEqual(date1.getUTCMonth(), 3); + assert.strictEqual(date1.getUTCFullYear(), 2024); + assert.strictEqual(date1.getUTCHours(), 9); + assert.strictEqual(date1.getUTCMinutes(), 0); + assert.strictEqual(date1.getUTCSeconds(), 10); + + const date2Epoch = Tools.parseAttrDate(`Thu Dec 21 21:47:02 2023`); + assert.strictEqual(date2Epoch, 1703195222000); + const date2 = new Date(date2Epoch); + assert.strictEqual(date2.getUTCDay(), 4); + assert.strictEqual(date2.getUTCMonth(), 11); + assert.strictEqual(date2.getUTCFullYear(), 2023); + assert.strictEqual(date2.getUTCHours(), 21); + assert.strictEqual(date2.getUTCMinutes(), 47); + assert.strictEqual(date2.getUTCSeconds(), 2); + } } ] }; From dd74c3352cef13364acebf02ae61387b729dd40e Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 9 May 2024 21:17:07 +0200 Subject: [PATCH 04/16] Added createStreamFile method to content Signed-off-by: Seb Julliand --- src/api/IBMiContent.ts | 14 +++++++++++++- src/testing/content.ts | 15 +++++++++++++++ src/views/ifsBrowser.ts | 17 ++++++++--------- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/api/IBMiContent.ts b/src/api/IBMiContent.ts index d1a85a6d1..97ff207d4 100644 --- a/src/api/IBMiContent.ts +++ b/src/api/IBMiContent.ts @@ -25,7 +25,6 @@ export type SortOptions = { } export default class IBMiContent { - private chgJobCCSID: string | undefined = undefined; constructor(readonly ibmi: IBMi) { } private get config(): ConnectionConfiguration.Parameters { @@ -989,4 +988,17 @@ export default class IBMiContent { async countFiles(directory: string) { return Number((await this.ibmi.sendCommand({ command: `ls | wc -l`, directory })).stdout.trim()); } + + /** + * Creates an empty unicode streamfile + * @param path the full path to the streamfile + * @throws an Error if the file could not be correctly created + */ + async createStreamFile(path: string) { + path = Tools.escapePath(path); + const result = (await this.ibmi.sendCommand({ command: `echo "" > ${path} && ${this.ibmi.remoteFeatures.attr} ${path} CCSID=1208` })); + if (result.code !== 0) { + throw new Error(result.stderr); + } + } } \ No newline at end of file diff --git a/src/testing/content.ts b/src/testing/content.ts index f9775cd3a..a6d24b4d9 100644 --- a/src/testing/content.ts +++ b/src/testing/content.ts @@ -803,6 +803,21 @@ export const ContentSuite: TestSuite = { throw new Error("No temporary library defined in configuration"); } } + }, + { + name: "Test streamfile creation", test: async () => { + const content = instance.getContent()!; + await instance.getConnection()!.withTempDirectory(async dir => { + const file = posix.join(dir, Tools.makeid()); + const fileExists = async () => content.testStreamFile(file, "f"); + assert.strictEqual(await fileExists(), false); + await content.createStreamFile(file); + assert.strictEqual(await fileExists(), true); + const attributes = await content.getAttributes(file, "CCSID"); + assert.ok(attributes); + assert.strictEqual(attributes.CCSID, "1208"); + }); + } } ] }; diff --git a/src/views/ifsBrowser.ts b/src/views/ifsBrowser.ts index b49c5a44e..7113cc35e 100644 --- a/src/views/ifsBrowser.ts +++ b/src/views/ifsBrowser.ts @@ -139,11 +139,11 @@ class IFSFileItem extends IFSItem { this.iconPath = vscode.ThemeIcon.File; this.resourceUri = vscode.Uri.parse(this.path).with({ scheme: `streamfile` }); - + this.command = { command: "code-for-ibmi.openWithDefaultMode", title: `Open Streamfile`, - arguments: [{path: this.path}] + arguments: [{ path: this.path }] }; } @@ -456,8 +456,8 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { vscode.commands.registerCommand(`code-for-ibmi.createStreamfile`, async (node?: IFSDirectoryItem) => { const config = instance.getConfig(); - const connection = instance.getConnection(); - if (config && connection) { + const content = instance.getContent(); + if (config && content) { const value = `${node?.path || config.homeDirectory}/`; const selectStart = value.length + 1; const fullName = await vscode.window.showInputBox({ @@ -469,15 +469,14 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { if (fullName) { try { vscode.window.showInformationMessage(t(`ifsBrowser.createStreamfile.infoMessage`, fullName)); - - await connection.sendCommand({ command: `echo "" > ${Tools.escapePath(fullName)}` }); - + await content.createStreamFile(fullName); vscode.commands.executeCommand(`code-for-ibmi.openEditable`, fullName); - if (GlobalConfiguration.get(`autoRefresh`)) { ifsBrowser.refresh(node); } - + else { + throw new Error("") + } } catch (e) { vscode.window.showErrorMessage(t(`ifsBrowser.createStreamfile.errorMessage`, e)); } From ba6281018552b6478ba3caeaa198fea9cf546bc2 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 9 May 2024 21:22:40 +0200 Subject: [PATCH 05/16] FS stat methods now returns actual information Signed-off-by: Seb Julliand --- src/extension.ts | 2 +- src/filesystems/ifsFs.ts | 81 +++++++++++++++++++++++++--------- src/filesystems/qsys/QSysFs.ts | 53 +++++++++++++++++----- 3 files changed, 104 insertions(+), 32 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 28e514e6d..6102a4e32 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -89,7 +89,7 @@ export async function activate(context: ExtensionContext): Promise } } }), - workspace.registerFileSystemProvider(`streamfile`, new IFSFS(), { + workspace.registerFileSystemProvider(`streamfile`, new IFSFS(context), { isCaseSensitive: false }), languages.registerCompletionItemProvider({ language: 'json', pattern: "**/.vscode/actions.json" }, new LocalActionCompletionItemProvider(), "&") diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index 7d1d56562..f4925d6f8 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -1,4 +1,5 @@ -import vscode, { FileSystemError } from "vscode"; +import vscode, { FileSystemError, FileType } from "vscode"; +import { Tools } from "../api/Tools"; import { instance } from "../instantiate"; import { getFilePermission } from "./qsys/QSysFs"; @@ -6,6 +7,15 @@ export class IFSFS implements vscode.FileSystemProvider { private emitter = new vscode.EventEmitter(); onDidChangeFile: vscode.Event = this.emitter.event; + private readonly statCache: Map = new Map; + + constructor(context: vscode.ExtensionContext) { + instance.onEvent("disconnected", () => { this.statCache.clear() }); + context.subscriptions.push( + vscode.workspace.onDidCloseTextDocument(() => this.statCache.clear()) + ); + } + watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { return { dispose: () => { } }; } @@ -28,45 +38,73 @@ export class IFSFS implements vscode.FileSystemProvider { } async stat(uri: vscode.Uri): Promise { - const content = instance.getContent(); - if (content) { - const path = uri.path; - if (await content.testStreamFile(path, "e")) { - const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); - if (attributes) { - return { - ctime: 0, - mtime: 0, - size: Number(attributes.DATA_SIZE), - type: vscode.FileType.File, - permissions: getFilePermission(uri) + const path = uri.path; + let currentStat = this.statCache.get(path); + if (!currentStat) { + const content = instance.getContent(); + if (content) { + if (await content.testStreamFile(path, "e")) { + const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE", "OBJTYPE"); + if (attributes) { + currentStat = { + ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), + mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), + size: Number(attributes.DATA_SIZE), + type: String(attributes.OBJTYPE) === "*DIR" ? vscode.FileType.Directory : vscode.FileType.File, + permissions: getFilePermission(uri) + } } } + if (!currentStat) { + throw FileSystemError.FileNotFound(uri); + } } - - throw FileSystemError.FileNotFound(uri); - } - else { - throw new Error("Not connected to IBM i"); + else { + currentStat = { + ctime: 0, + mtime: 0, + size: 0, + type: vscode.FileType.File, + permissions: getFilePermission(uri) + } + } + this.statCache.set(path, currentStat); } + + return currentStat; } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { + console.log(options); + this.statCache.delete(uri.path); const contentApi = instance.getContent(); if (contentApi) { - contentApi.writeStreamfileRaw(uri.path, content); + await contentApi.writeStreamfileRaw(uri.path, content); } else { throw new Error("Not connected to IBM i"); } } + copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { + console.log(source, destination, options); + this.statCache.delete(destination.path); + } + rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { console.log({ oldUri, newUri, options }); + this.statCache.delete(oldUri.path); + this.statCache.delete(newUri.path); } - readDirectory(uri: vscode.Uri): [string, vscode.FileType][] | Thenable<[string, vscode.FileType][]> { - throw new Error(`readDirectory not implemented in IFSFS.`); + async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { + const content = instance.getContent(); + if (content) { + return (await content.getFileList(uri.path)).map(ifsFile => ([ifsFile.path, ifsFile.type === "directory" ? FileType.Directory : FileType.File])); + } + else { + throw new Error("Not connected to IBM i"); + } } createDirectory(uri: vscode.Uri): void | Thenable { @@ -74,6 +112,7 @@ export class IFSFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { + this.statCache.delete(uri.path); throw new Error(`delete not implemented in IFSFS.`); } } \ No newline at end of file diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 1fe3a10d9..8d13ebd53 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -1,6 +1,7 @@ import { ParsedUrlQueryInput, parse, stringify } from "querystring"; -import vscode, { FilePermission } from "vscode"; +import vscode, { FilePermission, FileSystemError } from "vscode"; import { onCodeForIBMiConfigurationChange } from "../../api/Configuration"; +import { Tools } from "../../api/Tools"; import { instance } from "../../instantiate"; import { IBMiMember, QsysFsOptions } from "../../typings"; import { ExtendedIBMiContent } from "./extendedContent"; @@ -40,6 +41,7 @@ export function isProtectedFilter(filter?: string): boolean { } export class QSysFS implements vscode.FileSystemProvider { + private readonly statCache: Map = new Map; private readonly sourceDateHandler: SourceDateHandler; private readonly extendedContent: ExtendedIBMiContent; private extendedMemberSupport = false; @@ -53,7 +55,10 @@ export class QSysFS implements vscode.FileSystemProvider { context.subscriptions.push(onCodeForIBMiConfigurationChange(["connectionSettings", "showDateSearchButton"], () => this.updateMemberSupport())); instance.onEvent("connected", () => this.updateMemberSupport()); - instance.onEvent("disconnected", () => this.updateMemberSupport()); + instance.onEvent("disconnected", () => { + this.updateMemberSupport(); + this.statCache.clear(); + }); } private updateMemberSupport() { @@ -77,16 +82,40 @@ export class QSysFS implements vscode.FileSystemProvider { this.sourceDateHandler.setEnabled(this.extendedMemberSupport); } - stat(uri: vscode.Uri): vscode.FileStat { - let type = uri.path.split(`/`).length > 3 ? vscode.FileType.File : vscode.FileType.Directory; + async stat(uri: vscode.Uri): Promise { + const type = uri.path.split(`/`).length > 3 ? vscode.FileType.File : vscode.FileType.Directory; + const path = uri.path; + let currentStat = this.statCache.get(path); + if (!currentStat) { + const content = instance.getContent(); + if (content) { + const attributes = await content.getAttributes(Tools.parseQSysPath(path), "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); + if (attributes) { + currentStat = { + ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), + mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), + size: Number(attributes.DATA_SIZE), + type, + permissions: getFilePermission(uri) + } + } - return { - ctime: 0, - mtime: 0, - size: 0, - type, - permissions: getFilePermission(uri) + if (!currentStat) { + throw FileSystemError.FileNotFound(uri); + } + } + else { + currentStat = { + ctime: 0, + mtime: 0, + size: 0, + type, + permissions: getFilePermission(uri) + } + } + this.statCache.set(path, currentStat); } + return currentStat; } async readFile(uri: vscode.Uri, retrying?: boolean): Promise { @@ -116,6 +145,7 @@ export class QSysFS implements vscode.FileSystemProvider { } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { + this.statCache.delete(uri.path); const contentApi = instance.getContent(); const connection = instance.getConnection(); if (connection && contentApi) { @@ -131,6 +161,8 @@ export class QSysFS implements vscode.FileSystemProvider { rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { console.log({ oldUri, newUri, options }); + this.statCache.delete(oldUri.path); + this.statCache.delete(newUri.path); } watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { @@ -146,6 +178,7 @@ export class QSysFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { + this.statCache.delete(uri.path); throw new Error("Method not implemented."); } } \ No newline at end of file From 08dcb09e2af4e85c2fac38de73aa7d97c33f54a3 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 9 May 2024 22:14:27 +0200 Subject: [PATCH 06/16] Working "Save as" on IFS files Signed-off-by: Seb Julliand --- src/filesystems/fileStatCache.ts | 26 ++++++++++++++++++++ src/filesystems/ifsFs.ts | 41 ++++++++++++++++++++++---------- src/filesystems/qsys/QSysFs.ts | 25 ++++++++++++------- src/views/ifsBrowser.ts | 3 +++ 4 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 src/filesystems/fileStatCache.ts diff --git a/src/filesystems/fileStatCache.ts b/src/filesystems/fileStatCache.ts new file mode 100644 index 000000000..7edfd723d --- /dev/null +++ b/src/filesystems/fileStatCache.ts @@ -0,0 +1,26 @@ +import vscode from "vscode"; + +export class FileStatCache { + private readonly cache: Map = new Map + + set(uri: vscode.Uri | string, stat: vscode.FileStat | null) { + this.cache.set(toPath(uri), stat); + } + + get(uri: vscode.Uri | string) { + return this.cache.get(toPath(uri)); + } + + clear(uri?: vscode.Uri | string) { + if (uri) { + this.cache.delete(toPath(uri)); + } + else { + this.cache.clear(); + } + } +} + +function toPath(uri: vscode.Uri | string) { + return typeof uri === "string" ? uri : uri.path; +} \ No newline at end of file diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index f4925d6f8..8c32f83f4 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -1,18 +1,20 @@ import vscode, { FileSystemError, FileType } from "vscode"; import { Tools } from "../api/Tools"; import { instance } from "../instantiate"; +import { FileStatCache } from "./fileStatCache"; import { getFilePermission } from "./qsys/QSysFs"; export class IFSFS implements vscode.FileSystemProvider { private emitter = new vscode.EventEmitter(); onDidChangeFile: vscode.Event = this.emitter.event; - private readonly statCache: Map = new Map; + private readonly statCache = new FileStatCache(); constructor(context: vscode.ExtensionContext) { instance.onEvent("disconnected", () => { this.statCache.clear() }); context.subscriptions.push( - vscode.workspace.onDidCloseTextDocument(() => this.statCache.clear()) + vscode.workspace.onDidCloseTextDocument((doc) => this.statCache.clear(doc.uri)), + vscode.commands.registerCommand("code-for-ibmi.clearIFSStats", (uri?: vscode.Uri | string) => this.statCache.clear(uri)) ); } @@ -38,11 +40,11 @@ export class IFSFS implements vscode.FileSystemProvider { } async stat(uri: vscode.Uri): Promise { - const path = uri.path; - let currentStat = this.statCache.get(path); - if (!currentStat) { + let currentStat = this.statCache.get(uri); + if (currentStat === undefined) { const content = instance.getContent(); if (content) { + const path = uri.path; if (await content.testStreamFile(path, "e")) { const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE", "OBJTYPE"); if (attributes) { @@ -56,6 +58,7 @@ export class IFSFS implements vscode.FileSystemProvider { } } if (!currentStat) { + this.statCache.set(uri, null); throw FileSystemError.FileNotFound(uri); } } @@ -68,7 +71,10 @@ export class IFSFS implements vscode.FileSystemProvider { permissions: getFilePermission(uri) } } - this.statCache.set(path, currentStat); + this.statCache.set(uri, currentStat); + } + else if (currentStat === null) { + throw FileSystemError.FileNotFound(uri); } return currentStat; @@ -76,10 +82,21 @@ export class IFSFS implements vscode.FileSystemProvider { async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { console.log(options); - this.statCache.delete(uri.path); + const path = uri.path; + const exists = this.statCache.get(path); + this.statCache.clear(path); const contentApi = instance.getContent(); if (contentApi) { - await contentApi.writeStreamfileRaw(uri.path, content); + if (!content.length) { + //Coming from "Save as"; we await so the next call to stat finds the new file + await contentApi.createStreamFile(path); + } + else { + contentApi.writeStreamfileRaw(path, content); + } + if (!exists) { + vscode.commands.executeCommand(`code-for-ibmi.refreshIFSBrowser`); + } } else { throw new Error("Not connected to IBM i"); @@ -88,13 +105,13 @@ export class IFSFS implements vscode.FileSystemProvider { copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { console.log(source, destination, options); - this.statCache.delete(destination.path); + this.statCache.clear(destination); } rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { console.log({ oldUri, newUri, options }); - this.statCache.delete(oldUri.path); - this.statCache.delete(newUri.path); + this.statCache.clear(oldUri); + this.statCache.clear(newUri); } async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { @@ -112,7 +129,7 @@ export class IFSFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { - this.statCache.delete(uri.path); + this.statCache.clear(uri); throw new Error(`delete not implemented in IFSFS.`); } } \ No newline at end of file diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 8d13ebd53..858f7173b 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -4,6 +4,7 @@ import { onCodeForIBMiConfigurationChange } from "../../api/Configuration"; import { Tools } from "../../api/Tools"; import { instance } from "../../instantiate"; import { IBMiMember, QsysFsOptions } from "../../typings"; +import { FileStatCache } from "../fileStatCache"; import { ExtendedIBMiContent } from "./extendedContent"; import { SourceDateHandler } from "./sourceDateHandler"; @@ -41,7 +42,7 @@ export function isProtectedFilter(filter?: string): boolean { } export class QSysFS implements vscode.FileSystemProvider { - private readonly statCache: Map = new Map; + private readonly statCache = new FileStatCache(); private readonly sourceDateHandler: SourceDateHandler; private readonly extendedContent: ExtendedIBMiContent; private extendedMemberSupport = false; @@ -52,7 +53,11 @@ export class QSysFS implements vscode.FileSystemProvider { this.sourceDateHandler = new SourceDateHandler(context); this.extendedContent = new ExtendedIBMiContent(this.sourceDateHandler); - context.subscriptions.push(onCodeForIBMiConfigurationChange(["connectionSettings", "showDateSearchButton"], () => this.updateMemberSupport())); + context.subscriptions.push( + onCodeForIBMiConfigurationChange(["connectionSettings", "showDateSearchButton"], () => this.updateMemberSupport()), + vscode.workspace.onDidCloseTextDocument((doc) => this.statCache.clear(doc.uri)), + vscode.commands.registerCommand("code-for-ibmi.clearQSYSStats", (uri?: vscode.Uri | string) => this.statCache.clear(uri)) + ); instance.onEvent("connected", () => this.updateMemberSupport()); instance.onEvent("disconnected", () => { @@ -83,10 +88,10 @@ export class QSysFS implements vscode.FileSystemProvider { } async stat(uri: vscode.Uri): Promise { - const type = uri.path.split(`/`).length > 3 ? vscode.FileType.File : vscode.FileType.Directory; const path = uri.path; + const type = path.split(`/`).length > 3 ? vscode.FileType.File : vscode.FileType.Directory; let currentStat = this.statCache.get(path); - if (!currentStat) { + if (currentStat === undefined) { const content = instance.getContent(); if (content) { const attributes = await content.getAttributes(Tools.parseQSysPath(path), "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); @@ -101,6 +106,7 @@ export class QSysFS implements vscode.FileSystemProvider { } if (!currentStat) { + this.statCache.set(path, null); throw FileSystemError.FileNotFound(uri); } } @@ -115,6 +121,9 @@ export class QSysFS implements vscode.FileSystemProvider { } this.statCache.set(path, currentStat); } + else if (currentStat === null) { + throw FileSystemError.FileNotFound(uri); + } return currentStat; } @@ -145,7 +154,7 @@ export class QSysFS implements vscode.FileSystemProvider { } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { - this.statCache.delete(uri.path); + this.statCache.clear(uri); const contentApi = instance.getContent(); const connection = instance.getConnection(); if (connection && contentApi) { @@ -161,8 +170,8 @@ export class QSysFS implements vscode.FileSystemProvider { rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { console.log({ oldUri, newUri, options }); - this.statCache.delete(oldUri.path); - this.statCache.delete(newUri.path); + this.statCache.clear(oldUri.path); + this.statCache.clear(newUri.path); } watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { @@ -178,7 +187,7 @@ export class QSysFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { - this.statCache.delete(uri.path); + this.statCache.clear(uri.path); throw new Error("Method not implemented."); } } \ No newline at end of file diff --git a/src/views/ifsBrowser.ts b/src/views/ifsBrowser.ts index 7113cc35e..96d323a84 100644 --- a/src/views/ifsBrowser.ts +++ b/src/views/ifsBrowser.ts @@ -470,6 +470,7 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { try { vscode.window.showInformationMessage(t(`ifsBrowser.createStreamfile.infoMessage`, fullName)); await content.createStreamFile(fullName); + vscode.commands.executeCommand("code-for-ibmi.clearIFSStats", fullName); vscode.commands.executeCommand(`code-for-ibmi.openEditable`, fullName); if (GlobalConfiguration.get(`autoRefresh`)) { ifsBrowser.refresh(node); @@ -591,6 +592,7 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { const removeResult = await vscode.window.withProgress({ title: t('ifsBrowser.deleteIFS.progress', toBeDeleted.length), location: vscode.ProgressLocation.Notification }, async () => { return await connection.sendCommand({ command: `rm -rf ${toBeDeleted.map(path => Tools.escapePath(path)).join(" ")}` }); }); + toBeDeleted.forEach(file => vscode.commands.executeCommand("code-for-ibmi.clearIFSStats", file)); if (removeResult.code !== 0) { throw removeResult.stderr; } @@ -629,6 +631,7 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { const targetPath = path.posix.isAbsolute(target) ? target : path.posix.join(homeDirectory, target); try { await connection.sendCommand({ command: `mv ${Tools.escapePath(node.path)} ${Tools.escapePath(targetPath)}` }); + vscode.commands.executeCommand("code-for-ibmi.clearIFSStats", node.path); if (GlobalConfiguration.get(`autoRefresh`)) { ifsBrowser.refresh(); } From 23912a0187d12dbe6fa3e94d0015a751c4a0fb2b Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 16 May 2024 22:20:28 +0200 Subject: [PATCH 07/16] Allow library path Signed-off-by: Seb Julliand --- src/api/Tools.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/Tools.ts b/src/api/Tools.ts index 7797d9a90..313c78395 100644 --- a/src/api/Tools.ts +++ b/src/api/Tools.ts @@ -177,11 +177,11 @@ export namespace Tools { */ export function qualifyPath(library: string, object: string, member?: string, iasp?: string, sanitise?: boolean) { const libraryPath = library === `QSYS` ? `QSYS.LIB` : `QSYS.LIB/${Tools.sanitizeLibraryNames([library]).join(``)}.LIB`; - const filePath = `${object}.FILE`; + const filePath = object ? `/${object}.FILE` : ''; const memberPath = member ? `/${member}.MBR` : ''; const subPath = `${filePath}${memberPath}`; - const result = (iasp && iasp.length > 0 ? `/${iasp}` : ``) + `/${libraryPath}/${sanitise ? subPath : Tools.escapePath(subPath)}`; + const result = (iasp && iasp.length > 0 ? `/${iasp}` : ``) + `/${libraryPath}${subPath && sanitise ? subPath : Tools.escapePath(subPath)}`; return result; } @@ -275,7 +275,7 @@ export namespace Tools { } export function parseQSysPath(path: string): QsysPath { - const parts = path.split('/'); + const parts = path.split('/').filter(Boolean); if (parts.length > 3) { return { asp: parts[0], From 4166f7c0a101897986a1da5852f5c4068371681b Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 16 May 2024 22:21:24 +0200 Subject: [PATCH 08/16] Completed save as/breadcrumbs support implementation Signed-off-by: Seb Julliand --- src/filesystems/ifsFs.ts | 33 ++++++++---- src/filesystems/qsys/QSysFs.ts | 92 ++++++++++++++++++++++++++++------ 2 files changed, 101 insertions(+), 24 deletions(-) diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index 8c32f83f4..2577c9a8e 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -57,7 +57,9 @@ export class IFSFS implements vscode.FileSystemProvider { } } } - if (!currentStat) { + if (currentStat) { + this.statCache.set(uri, currentStat); + } else { this.statCache.set(uri, null); throw FileSystemError.FileNotFound(uri); } @@ -71,7 +73,6 @@ export class IFSFS implements vscode.FileSystemProvider { permissions: getFilePermission(uri) } } - this.statCache.set(uri, currentStat); } else if (currentStat === null) { throw FileSystemError.FileNotFound(uri); @@ -81,18 +82,16 @@ export class IFSFS implements vscode.FileSystemProvider { } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { - console.log(options); const path = uri.path; const exists = this.statCache.get(path); this.statCache.clear(path); const contentApi = instance.getContent(); if (contentApi) { - if (!content.length) { - //Coming from "Save as"; we await so the next call to stat finds the new file + if (!content.length) { //Coming from "Save as" await contentApi.createStreamFile(path); } else { - contentApi.writeStreamfileRaw(path, content); + await contentApi.writeStreamfileRaw(path, content); } if (!exists) { vscode.commands.executeCommand(`code-for-ibmi.refreshIFSBrowser`); @@ -104,7 +103,6 @@ export class IFSFS implements vscode.FileSystemProvider { } copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - console.log(source, destination, options); this.statCache.clear(destination); } @@ -117,15 +115,30 @@ export class IFSFS implements vscode.FileSystemProvider { async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { const content = instance.getContent(); if (content) { - return (await content.getFileList(uri.path)).map(ifsFile => ([ifsFile.path, ifsFile.type === "directory" ? FileType.Directory : FileType.File])); + return (await content.getFileList(uri.path)).map(ifsFile => ([ifsFile.name, ifsFile.type === "directory" ? FileType.Directory : FileType.File])); } else { throw new Error("Not connected to IBM i"); } } - createDirectory(uri: vscode.Uri): void | Thenable { - throw new Error(`createDirectory not implemented in IFSFS.`); + async createDirectory(uri: vscode.Uri) { + const connection = instance.getConnection(); + if (connection) { + const path = uri.path; + if (await connection.content.testStreamFile(path, "d")) { + throw FileSystemError.FileExists(uri); + } + else { + const result = await connection.sendCommand({ command: `mkdir -p ${path}` }); + if (result.code === 0) { + this.statCache.clear(uri); + } + else { + throw FileSystemError.NoPermissions(result.stderr); + } + } + } } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 858f7173b..0f39becf7 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -1,3 +1,4 @@ +import { parse as parsePath } from "path"; import { ParsedUrlQueryInput, parse, stringify } from "querystring"; import vscode, { FilePermission, FileSystemError } from "vscode"; import { onCodeForIBMiConfigurationChange } from "../../api/Configuration"; @@ -89,12 +90,17 @@ export class QSysFS implements vscode.FileSystemProvider { async stat(uri: vscode.Uri): Promise { const path = uri.path; - const type = path.split(`/`).length > 3 ? vscode.FileType.File : vscode.FileType.Directory; + const pathLength = path.split(`/`).length; + if (pathLength > 4 || !path.startsWith('/')) { + throw new vscode.FileSystemError("Invalid member path"); + } + const type = pathLength > 3 ? vscode.FileType.File : vscode.FileType.Directory; let currentStat = this.statCache.get(path); if (currentStat === undefined) { const content = instance.getContent(); - if (content) { - const attributes = await content.getAttributes(Tools.parseQSysPath(path), "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); + if (path !== '/' && content) { + const member = type === vscode.FileType.File ? parsePath(path).name : undefined; + const attributes = await content.getAttributes({ ...Tools.parseQSysPath(path), member }, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); if (attributes) { currentStat = { ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), @@ -105,7 +111,9 @@ export class QSysFS implements vscode.FileSystemProvider { } } - if (!currentStat) { + if (currentStat) { + this.statCache.set(uri, currentStat); + } else { this.statCache.set(path, null); throw FileSystemError.FileNotFound(uri); } @@ -119,7 +127,6 @@ export class QSysFS implements vscode.FileSystemProvider { permissions: getFilePermission(uri) } } - this.statCache.set(path, currentStat); } else if (currentStat === null) { throw FileSystemError.FileNotFound(uri); @@ -154,14 +161,30 @@ export class QSysFS implements vscode.FileSystemProvider { } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { + const exists = this.statCache.get(uri.path); this.statCache.clear(uri); const contentApi = instance.getContent(); const connection = instance.getConnection(); if (connection && contentApi) { - const { asp, library, file, name: member } = connection.parserMemberPath(uri.path); - this.extendedMemberSupport ? - await this.extendedContent.uploadMemberContentWithDates(asp, library, file, member, content.toString()) : - await contentApi.uploadMemberContent(asp, library, file, member, content); + const { asp, library, file, name: member, extension } = connection.parserMemberPath(uri.path); + if (!content.length) { //Coming from "Save as" + const addMember = await connection.runCommand({ + command: `ADDPFM FILE(${library}/${file}) MBR(${member}) SRCTYPE(${extension || '*NONE'})`, + noLibList: true + }); + if (addMember.code !== 0) { + throw new Error(addMember.stderr); + } + } + else { + this.extendedMemberSupport ? + await this.extendedContent.uploadMemberContentWithDates(asp, library, file, member, content.toString()) : + await contentApi.uploadMemberContent(asp, library, file, member, content); + } + + if (!exists) { + vscode.commands.executeCommand(`code-for-ibmi.refreshObjectBrowser`); + } } else { throw new Error("Not connected to IBM i"); @@ -169,7 +192,6 @@ export class QSysFS implements vscode.FileSystemProvider { } rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - console.log({ oldUri, newUri, options }); this.statCache.clear(oldUri.path); this.statCache.clear(newUri.path); } @@ -178,12 +200,54 @@ export class QSysFS implements vscode.FileSystemProvider { return { dispose: () => { } }; } - readDirectory(uri: vscode.Uri): [string, vscode.FileType][] | Thenable<[string, vscode.FileType][]> { - throw new Error("Method not implemented."); + async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { + const content = instance.getConnection()?.content; + if (content) { + const qsysPath = Tools.parseQSysPath(uri.path); + if (qsysPath.name) { + return (await content.getMemberList({ library: qsysPath.library, sourceFile: qsysPath.name })) + .map(member => [`${member.name}${member.extension ? `.${member.extension}` : ''}`, vscode.FileType.File]); + } + else if (qsysPath.library) { + return (await content.getObjectList({ library: qsysPath.library, types: ["*SRCPF"] })) + .map(srcPF => [srcPF.name, vscode.FileType.Directory]); + } + else if (uri.path === '/') { + return (await content.getLibraries({ library: '*' })).map(library => [library.name, vscode.FileType.Directory]); + } + } + throw FileSystemError.FileNotFound(uri); } - createDirectory(uri: vscode.Uri): void | Thenable { - throw new Error("Method not implemented."); + async createDirectory(uri: vscode.Uri) { + const connection = instance.getConnection(); + if (connection) { + const qsysPath = Tools.parseQSysPath(uri.path); + if (qsysPath.library && !await connection.content.checkObject({ library: "QSYS", name: qsysPath.library, type: "*LIB" })) { + const createLibrary = await connection.runCommand({ + command: `CRTLIB LIB(${qsysPath.library})`, + noLibList: true + }); + if (createLibrary.code === 0) { + this.statCache.clear(uri); + } + else { + throw FileSystemError.NoPermissions(createLibrary.stderr); + } + } + if (qsysPath.name) { + const createFile = await connection.runCommand({ + command: `CRTSRCPF FILE(${qsysPath.library}/${qsysPath.name}) RCDLEN(112)`, + noLibList: true + }); + if (createFile.code === 0) { + this.statCache.clear(uri); + } + else { + throw FileSystemError.NoPermissions(createFile.stderr); + } + } + } } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { From 43f91ac054e8a89414b1ebbe2b82cf1cfee63d08 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Thu, 16 May 2024 22:23:05 +0200 Subject: [PATCH 09/16] Always throw FileSystemError from FileSystemProviders Signed-off-by: Seb Julliand --- src/filesystems/ifsFs.ts | 8 ++++---- src/filesystems/qsys/QSysFs.ts | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index 2577c9a8e..92a18ec87 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -30,7 +30,7 @@ export class IFSFS implements vscode.FileSystemProvider { } else { if (retrying) { - throw new Error("Not connected to IBM i"); + throw new FileSystemError("Not connected to IBM i"); } else { await vscode.commands.executeCommand(`code-for-ibmi.connectToPrevious`); @@ -98,7 +98,7 @@ export class IFSFS implements vscode.FileSystemProvider { } } else { - throw new Error("Not connected to IBM i"); + throw new FileSystemError("Not connected to IBM i"); } } @@ -118,7 +118,7 @@ export class IFSFS implements vscode.FileSystemProvider { return (await content.getFileList(uri.path)).map(ifsFile => ([ifsFile.name, ifsFile.type === "directory" ? FileType.Directory : FileType.File])); } else { - throw new Error("Not connected to IBM i"); + throw new FileSystemError("Not connected to IBM i"); } } @@ -143,6 +143,6 @@ export class IFSFS implements vscode.FileSystemProvider { delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { this.statCache.clear(uri); - throw new Error(`delete not implemented in IFSFS.`); + throw new FileSystemError(`delete not implemented in IFSFS.`); } } \ No newline at end of file diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 0f39becf7..db0173df7 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -146,12 +146,12 @@ export class QSysFS implements vscode.FileSystemProvider { return new Uint8Array(Buffer.from(memberContent, `utf8`)); } else { - throw new Error(`Couldn't read ${uri}; check IBM i connection.`); + throw new FileSystemError(`Couldn't read ${uri}; check IBM i connection.`); } } else { if (retrying) { - throw new Error("Not connected to IBM i"); + throw new FileSystemError("Not connected to IBM i"); } else { await vscode.commands.executeCommand(`code-for-ibmi.connectToPrevious`); @@ -173,7 +173,7 @@ export class QSysFS implements vscode.FileSystemProvider { noLibList: true }); if (addMember.code !== 0) { - throw new Error(addMember.stderr); + throw new FileSystemError(addMember.stderr); } } else { @@ -187,7 +187,7 @@ export class QSysFS implements vscode.FileSystemProvider { } } else { - throw new Error("Not connected to IBM i"); + throw new FileSystemError("Not connected to IBM i"); } } @@ -252,6 +252,6 @@ export class QSysFS implements vscode.FileSystemProvider { delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { this.statCache.clear(uri.path); - throw new Error("Method not implemented."); + throw new FileSystemError("Method not implemented."); } } \ No newline at end of file From 4885c897ce4b1ec523531cba22a71d5613d3edf6 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Fri, 17 May 2024 20:55:59 +0200 Subject: [PATCH 10/16] Fixed Save As for members with no extension Signed-off-by: Seb Julliand --- src/api/IBMi.ts | 25 ++++++++++++------------- src/api/IBMiContent.ts | 2 +- src/filesystems/qsys/QSysFs.ts | 11 ++++++----- src/testing/connection.ts | 2 +- src/views/objectBrowser.ts | 8 ++++---- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/api/IBMi.ts b/src/api/IBMi.ts index 46af114f2..6774234df 100644 --- a/src/api/IBMi.ts +++ b/src/api/IBMi.ts @@ -1,16 +1,15 @@ -import * as node_ssh from "node-ssh"; -import * as vscode from "vscode"; -import { ConnectionConfiguration } from "./Configuration"; - import { parse } from 'csv-parse/sync'; import { existsSync } from "fs"; +import * as node_ssh from "node-ssh"; import os from "os"; -import path from 'path'; +import path, { parse as parsePath } from 'path'; +import * as vscode from "vscode"; import { ComponentId, ComponentManager } from "../components/component"; import { CopyToImport } from "../components/copyToImport"; import { instance } from "../instantiate"; import { CommandData, CommandResult, ConnectionData, IBMiMember, RemoteCommand, SpecialAuthorities, WrapResult } from "../typings"; import { CompileTools } from "./CompileTools"; +import { ConnectionConfiguration } from "./Configuration"; import IBMiContent from "./IBMiContent"; import { CachedServerSettings, GlobalStorage } from './Storage'; import { Tools } from './Tools'; @@ -1118,7 +1117,7 @@ export default class IBMi { } } - parserMemberPath(string: string): MemberParts { + parserMemberPath(string: string, checkExtension?: boolean): MemberParts { const variant_chars_local = this.variantChars.local; const validQsysName = new RegExp(`^[A-Z0-9${variant_chars_local}][A-Z0-9_${variant_chars_local}.]{0,9}$`); @@ -1126,12 +1125,13 @@ export default class IBMi { const upperCasedString = this.upperCaseName(string); const path = upperCasedString.startsWith(`/`) ? upperCasedString.substring(1).split(`/`) : upperCasedString.split(`/`); - const basename = path[path.length - 1]; + const parsedPath = parsePath(string); + const name = parsedPath.name; const file = path[path.length - 2]; const library = path[path.length - 3]; const asp = path[path.length - 4]; - if (!library || !file || !basename) { + if (!library || !file || !name) { throw new Error(`Invalid path: ${string}. Use format LIB/SPF/NAME.ext`); } if (asp && !validQsysName.test(asp)) { @@ -1144,12 +1144,10 @@ export default class IBMi { throw new Error(`Invalid Source File name: ${file}`); } - //Having a blank extension is allowed but the . in the path is required - if (!basename.includes(`.`)) { + //Having a blank extension is allowed but the . in the path is required if checking the extension + if (checkExtension && !parsedPath.ext) { throw new Error(`Source Type extension is required.`); } - const name = basename.substring(0, basename.lastIndexOf(`.`)); - const extension = basename.substring(basename.lastIndexOf(`.`) + 1).trim(); if (!validQsysName.test(name)) { throw new Error(`Invalid Source Member name: ${name}`); @@ -1159,6 +1157,7 @@ export default class IBMi { // the existing RegExp because result.extension is everything after // the final period (so we know it won't contain a period). // But, a blank extension is valid. + const extension = parsedPath.ext.substring(1); if (extension && !validQsysName.test(extension)) { throw new Error(`Invalid Source Member Extension: ${extension}`); } @@ -1167,7 +1166,7 @@ export default class IBMi { library, file, extension, - basename, + basename: parsedPath.base, name, asp }; diff --git a/src/api/IBMiContent.ts b/src/api/IBMiContent.ts index a800d34a5..55b47c0b1 100644 --- a/src/api/IBMiContent.ts +++ b/src/api/IBMiContent.ts @@ -798,7 +798,7 @@ export default class IBMiContent { // This can error if the path format is wrong for some reason. // Not that this would ever happen, but better to be safe than sorry - return this.ibmi.parserMemberPath(simplePath); + return this.ibmi.parserMemberPath(simplePath, true); } catch (e) { console.log(e); } diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index db0173df7..50eddd293 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -93,8 +93,8 @@ export class QSysFS implements vscode.FileSystemProvider { const pathLength = path.split(`/`).length; if (pathLength > 4 || !path.startsWith('/')) { throw new vscode.FileSystemError("Invalid member path"); - } - const type = pathLength > 3 ? vscode.FileType.File : vscode.FileType.Directory; + } + const type = pathLength > 3 ? vscode.FileType.File : vscode.FileType.Directory; let currentStat = this.statCache.get(path); if (currentStat === undefined) { const content = instance.getContent(); @@ -161,12 +161,13 @@ export class QSysFS implements vscode.FileSystemProvider { } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { - const exists = this.statCache.get(uri.path); - this.statCache.clear(uri); + const path = uri.path; + const exists = this.statCache.get(path); + this.statCache.clear(path); const contentApi = instance.getContent(); const connection = instance.getConnection(); if (connection && contentApi) { - const { asp, library, file, name: member, extension } = connection.parserMemberPath(uri.path); + const { asp, library, file, name: member, extension } = connection.parserMemberPath(path); if (!content.length) { //Coming from "Save as" const addMember = await connection.runCommand({ command: `ADDPFM FILE(${library}/${file}) MBR(${member}) SRCTYPE(${extension || '*NONE'})`, diff --git a/src/testing/connection.ts b/src/testing/connection.ts index b72dd38c3..ff0b6148d 100644 --- a/src/testing/connection.ts +++ b/src/testing/connection.ts @@ -128,7 +128,7 @@ export const ConnectionSuite: TestSuite = { const connection = instance.getConnection(); try { - const memberA = connection?.parserMemberPath(`thelib/thespf/thembr`); + connection?.parserMemberPath(`thelib/thespf/thembr`, true); } catch (e: any) { assert.strictEqual(e.message, `Source Type extension is required.`); } diff --git a/src/views/objectBrowser.ts b/src/views/objectBrowser.ts index c4fea06b2..c9b8b270d 100644 --- a/src/views/objectBrowser.ts +++ b/src/views/objectBrowser.ts @@ -583,7 +583,7 @@ export function initializeObjectBrowser(context: vscode.ExtensionContext) { value: fullName, validateInput: (value) => { try { - connection.parserMemberPath(toPath(value)); + connection.parserMemberPath(toPath(value), true); } catch (e: any) { return e.toString(); } @@ -627,7 +627,7 @@ export function initializeObjectBrowser(context: vscode.ExtensionContext) { value: node.path || fullPath, validateInput: (value) => { try { - const memberPath = connection.parserMemberPath(value); + const memberPath = connection.parserMemberPath(value, true); if (memberPath.library === oldMember.library && memberPath.file === oldMember.file && memberPath.name === oldMember.name) { return t(`objectBrowser.copyMember.errorMessage`); } @@ -750,7 +750,7 @@ export function initializeObjectBrowser(context: vscode.ExtensionContext) { if (newBasename) { newNameOK = true; try { - newMember = connection.parserMemberPath(library + `/` + sourceFile + `/` + newBasename); + newMember = connection.parserMemberPath(library + `/` + sourceFile + `/` + newBasename, true); } catch (e: any) { newNameOK = false; vscode.window.showErrorMessage(e); @@ -935,7 +935,7 @@ export function initializeObjectBrowser(context: vscode.ExtensionContext) { } if (checkPath) { try { - connection.parserMemberPath(checkPath); + connection.parserMemberPath(checkPath, true); } catch (e: any) { return e; } From a2075a6bf6f2f9ad74c92b3451d4275b26b29508 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Fri, 17 May 2024 23:18:10 +0200 Subject: [PATCH 11/16] Fixed parserMemberPath Signed-off-by: Seb Julliand --- src/api/IBMi.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/IBMi.ts b/src/api/IBMi.ts index 6774234df..c561e07f3 100644 --- a/src/api/IBMi.ts +++ b/src/api/IBMi.ts @@ -1125,7 +1125,7 @@ export default class IBMi { const upperCasedString = this.upperCaseName(string); const path = upperCasedString.startsWith(`/`) ? upperCasedString.substring(1).split(`/`) : upperCasedString.split(`/`); - const parsedPath = parsePath(string); + const parsedPath = parsePath(upperCasedString); const name = parsedPath.name; const file = path[path.length - 2]; const library = path[path.length - 3]; From 771fb9b24b66ecb2307903f6d837a2f14e715cc7 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Mon, 3 Jun 2024 16:25:35 +0200 Subject: [PATCH 12/16] Removed filestatcache Signed-off-by: Seb Julliand --- src/extension.ts | 2 +- src/filesystems/fileStatCache.ts | 26 ---------- src/filesystems/ifsFs.ts | 84 ++++++++++---------------------- src/filesystems/qsys/QSysFs.ts | 81 ++++++++++-------------------- 4 files changed, 52 insertions(+), 141 deletions(-) delete mode 100644 src/filesystems/fileStatCache.ts diff --git a/src/extension.ts b/src/extension.ts index e36f7568f..2e68582cf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -89,7 +89,7 @@ export async function activate(context: ExtensionContext): Promise } } }), - workspace.registerFileSystemProvider(`streamfile`, new IFSFS(context), { + workspace.registerFileSystemProvider(`streamfile`, new IFSFS(), { isCaseSensitive: false }), languages.registerCompletionItemProvider({ language: 'json', pattern: "**/.vscode/actions.json" }, new LocalActionCompletionItemProvider(), "&") diff --git a/src/filesystems/fileStatCache.ts b/src/filesystems/fileStatCache.ts deleted file mode 100644 index 7edfd723d..000000000 --- a/src/filesystems/fileStatCache.ts +++ /dev/null @@ -1,26 +0,0 @@ -import vscode from "vscode"; - -export class FileStatCache { - private readonly cache: Map = new Map - - set(uri: vscode.Uri | string, stat: vscode.FileStat | null) { - this.cache.set(toPath(uri), stat); - } - - get(uri: vscode.Uri | string) { - return this.cache.get(toPath(uri)); - } - - clear(uri?: vscode.Uri | string) { - if (uri) { - this.cache.delete(toPath(uri)); - } - else { - this.cache.clear(); - } - } -} - -function toPath(uri: vscode.Uri | string) { - return typeof uri === "string" ? uri : uri.path; -} \ No newline at end of file diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index 92a18ec87..9ac7f9b0a 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -1,23 +1,12 @@ import vscode, { FileSystemError, FileType } from "vscode"; import { Tools } from "../api/Tools"; import { instance } from "../instantiate"; -import { FileStatCache } from "./fileStatCache"; import { getFilePermission } from "./qsys/QSysFs"; export class IFSFS implements vscode.FileSystemProvider { private emitter = new vscode.EventEmitter(); onDidChangeFile: vscode.Event = this.emitter.event; - private readonly statCache = new FileStatCache(); - - constructor(context: vscode.ExtensionContext) { - instance.onEvent("disconnected", () => { this.statCache.clear() }); - context.subscriptions.push( - vscode.workspace.onDidCloseTextDocument((doc) => this.statCache.clear(doc.uri)), - vscode.commands.registerCommand("code-for-ibmi.clearIFSStats", (uri?: vscode.Uri | string) => this.statCache.clear(uri)) - ); - } - watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { return { dispose: () => { } }; } @@ -40,62 +29,45 @@ export class IFSFS implements vscode.FileSystemProvider { } async stat(uri: vscode.Uri): Promise { - let currentStat = this.statCache.get(uri); - if (currentStat === undefined) { - const content = instance.getContent(); - if (content) { - const path = uri.path; - if (await content.testStreamFile(path, "e")) { - const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE", "OBJTYPE"); - if (attributes) { - currentStat = { - ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), - mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), - size: Number(attributes.DATA_SIZE), - type: String(attributes.OBJTYPE) === "*DIR" ? vscode.FileType.Directory : vscode.FileType.File, - permissions: getFilePermission(uri) - } + const content = instance.getContent(); + if (content) { + const path = uri.path; + if (await content.testStreamFile(path, "e")) { + const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE", "OBJTYPE"); + if (attributes) { + return { + ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), + mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), + size: Number(attributes.DATA_SIZE), + type: String(attributes.OBJTYPE) === "*DIR" ? vscode.FileType.Directory : vscode.FileType.File, + permissions: getFilePermission(uri) } } - if (currentStat) { - this.statCache.set(uri, currentStat); - } else { - this.statCache.set(uri, null); - throw FileSystemError.FileNotFound(uri); - } - } - else { - currentStat = { - ctime: 0, - mtime: 0, - size: 0, - type: vscode.FileType.File, - permissions: getFilePermission(uri) - } } - } - else if (currentStat === null) { throw FileSystemError.FileNotFound(uri); } - - return currentStat; + else { + return { + ctime: 0, + mtime: 0, + size: 0, + type: vscode.FileType.File, + permissions: getFilePermission(uri) + } + } } async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { const path = uri.path; - const exists = this.statCache.get(path); - this.statCache.clear(path); const contentApi = instance.getContent(); if (contentApi) { if (!content.length) { //Coming from "Save as" await contentApi.createStreamFile(path); + vscode.commands.executeCommand(`code-for-ibmi.refreshIFSBrowser`); } else { await contentApi.writeStreamfileRaw(path, content); } - if (!exists) { - vscode.commands.executeCommand(`code-for-ibmi.refreshIFSBrowser`); - } } else { throw new FileSystemError("Not connected to IBM i"); @@ -103,13 +75,11 @@ export class IFSFS implements vscode.FileSystemProvider { } copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - this.statCache.clear(destination); + //not used at the moment } rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - console.log({ oldUri, newUri, options }); - this.statCache.clear(oldUri); - this.statCache.clear(newUri); + //not used at the moment } async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { @@ -131,10 +101,7 @@ export class IFSFS implements vscode.FileSystemProvider { } else { const result = await connection.sendCommand({ command: `mkdir -p ${path}` }); - if (result.code === 0) { - this.statCache.clear(uri); - } - else { + if (result.code !== 0) { throw FileSystemError.NoPermissions(result.stderr); } } @@ -142,7 +109,6 @@ export class IFSFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { - this.statCache.clear(uri); throw new FileSystemError(`delete not implemented in IFSFS.`); } } \ No newline at end of file diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 50eddd293..fee582792 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -5,7 +5,6 @@ import { onCodeForIBMiConfigurationChange } from "../../api/Configuration"; import { Tools } from "../../api/Tools"; import { instance } from "../../instantiate"; import { IBMiMember, QsysFsOptions } from "../../typings"; -import { FileStatCache } from "../fileStatCache"; import { ExtendedIBMiContent } from "./extendedContent"; import { SourceDateHandler } from "./sourceDateHandler"; @@ -43,7 +42,6 @@ export function isProtectedFilter(filter?: string): boolean { } export class QSysFS implements vscode.FileSystemProvider { - private readonly statCache = new FileStatCache(); private readonly sourceDateHandler: SourceDateHandler; private readonly extendedContent: ExtendedIBMiContent; private extendedMemberSupport = false; @@ -56,14 +54,11 @@ export class QSysFS implements vscode.FileSystemProvider { context.subscriptions.push( onCodeForIBMiConfigurationChange(["connectionSettings", "showDateSearchButton"], () => this.updateMemberSupport()), - vscode.workspace.onDidCloseTextDocument((doc) => this.statCache.clear(doc.uri)), - vscode.commands.registerCommand("code-for-ibmi.clearQSYSStats", (uri?: vscode.Uri | string) => this.statCache.clear(uri)) ); instance.onEvent("connected", () => this.updateMemberSupport()); instance.onEvent("disconnected", () => { this.updateMemberSupport(); - this.statCache.clear(); }); } @@ -94,44 +89,32 @@ export class QSysFS implements vscode.FileSystemProvider { if (pathLength > 4 || !path.startsWith('/')) { throw new vscode.FileSystemError("Invalid member path"); } - const type = pathLength > 3 ? vscode.FileType.File : vscode.FileType.Directory; - let currentStat = this.statCache.get(path); - if (currentStat === undefined) { - const content = instance.getContent(); - if (path !== '/' && content) { - const member = type === vscode.FileType.File ? parsePath(path).name : undefined; - const attributes = await content.getAttributes({ ...Tools.parseQSysPath(path), member }, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); - if (attributes) { - currentStat = { - ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), - mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), - size: Number(attributes.DATA_SIZE), - type, - permissions: getFilePermission(uri) - } - } - - if (currentStat) { - this.statCache.set(uri, currentStat); - } else { - this.statCache.set(path, null); - throw FileSystemError.FileNotFound(uri); - } - } - else { - currentStat = { - ctime: 0, - mtime: 0, - size: 0, + const type = pathLength > 3 ? vscode.FileType.File : vscode.FileType.Directory; + const content = instance.getContent(); + if (path !== '/' && content) { + const member = type === vscode.FileType.File ? parsePath(path).name : undefined; + const attributes = await content.getAttributes({ ...Tools.parseQSysPath(path), member }, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE"); + if (attributes) { + return { + ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), + mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), + size: Number(attributes.DATA_SIZE), type, permissions: getFilePermission(uri) } + } else { + throw FileSystemError.FileNotFound(uri); } } - else if (currentStat === null) { - throw FileSystemError.FileNotFound(uri); + else { + return { + ctime: 0, + mtime: 0, + size: 0, + type, + permissions: getFilePermission(uri) + } } - return currentStat; } async readFile(uri: vscode.Uri, retrying?: boolean): Promise { @@ -162,8 +145,6 @@ export class QSysFS implements vscode.FileSystemProvider { async writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean; }) { const path = uri.path; - const exists = this.statCache.get(path); - this.statCache.clear(path); const contentApi = instance.getContent(); const connection = instance.getConnection(); if (connection && contentApi) { @@ -173,7 +154,9 @@ export class QSysFS implements vscode.FileSystemProvider { command: `ADDPFM FILE(${library}/${file}) MBR(${member}) SRCTYPE(${extension || '*NONE'})`, noLibList: true }); - if (addMember.code !== 0) { + if (addMember.code === 0) { + vscode.commands.executeCommand(`code-for-ibmi.refreshObjectBrowser`); + } else { throw new FileSystemError(addMember.stderr); } } @@ -182,10 +165,6 @@ export class QSysFS implements vscode.FileSystemProvider { await this.extendedContent.uploadMemberContentWithDates(asp, library, file, member, content.toString()) : await contentApi.uploadMemberContent(asp, library, file, member, content); } - - if (!exists) { - vscode.commands.executeCommand(`code-for-ibmi.refreshObjectBrowser`); - } } else { throw new FileSystemError("Not connected to IBM i"); @@ -193,8 +172,7 @@ export class QSysFS implements vscode.FileSystemProvider { } rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - this.statCache.clear(oldUri.path); - this.statCache.clear(newUri.path); + //Not used at the moment } watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { @@ -229,10 +207,7 @@ export class QSysFS implements vscode.FileSystemProvider { command: `CRTLIB LIB(${qsysPath.library})`, noLibList: true }); - if (createLibrary.code === 0) { - this.statCache.clear(uri); - } - else { + if (createLibrary.code !== 0) { throw FileSystemError.NoPermissions(createLibrary.stderr); } } @@ -241,10 +216,7 @@ export class QSysFS implements vscode.FileSystemProvider { command: `CRTSRCPF FILE(${qsysPath.library}/${qsysPath.name}) RCDLEN(112)`, noLibList: true }); - if (createFile.code === 0) { - this.statCache.clear(uri); - } - else { + if (createFile.code !== 0) { throw FileSystemError.NoPermissions(createFile.stderr); } } @@ -252,7 +224,6 @@ export class QSysFS implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: { readonly recursive: boolean; }): void | Thenable { - this.statCache.clear(uri.path); throw new FileSystemError("Method not implemented."); } } \ No newline at end of file From b8d52e940b705b67b2431221928a5a501c82ac6c Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Tue, 3 Sep 2024 21:32:43 +0200 Subject: [PATCH 13/16] Handle save as for protected streamfiles/members Signed-off-by: Seb Julliand --- src/filesystems/ifsFs.ts | 10 +++++++--- src/filesystems/qsys/QSysFs.ts | 5 ++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/filesystems/ifsFs.ts b/src/filesystems/ifsFs.ts index 9ac7f9b0a..4fecbcab7 100644 --- a/src/filesystems/ifsFs.ts +++ b/src/filesystems/ifsFs.ts @@ -4,6 +4,7 @@ import { instance } from "../instantiate"; import { getFilePermission } from "./qsys/QSysFs"; export class IFSFS implements vscode.FileSystemProvider { + private readonly savedAsFiles: Set = new Set; private emitter = new vscode.EventEmitter(); onDidChangeFile: vscode.Event = this.emitter.event; @@ -35,12 +36,13 @@ export class IFSFS implements vscode.FileSystemProvider { if (await content.testStreamFile(path, "e")) { const attributes = await content.getAttributes(path, "CREATE_TIME", "MODIFY_TIME", "DATA_SIZE", "OBJTYPE"); if (attributes) { + const type = String(attributes.OBJTYPE) === "*DIR" ? vscode.FileType.Directory : vscode.FileType.File; return { ctime: Tools.parseAttrDate(String(attributes.CREATE_TIME)), mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), size: Number(attributes.DATA_SIZE), - type: String(attributes.OBJTYPE) === "*DIR" ? vscode.FileType.Directory : vscode.FileType.File, - permissions: getFilePermission(uri) + type, + permissions: !this.savedAsFiles.has(path) && type !== FileType.Directory ? getFilePermission(uri) : undefined } } } @@ -61,11 +63,13 @@ export class IFSFS implements vscode.FileSystemProvider { const path = uri.path; const contentApi = instance.getContent(); if (contentApi) { - if (!content.length) { //Coming from "Save as" + if (!content.length) { //Coming from "Save as" + this.savedAsFiles.add(path); await contentApi.createStreamFile(path); vscode.commands.executeCommand(`code-for-ibmi.refreshIFSBrowser`); } else { + this.savedAsFiles.delete(path); await contentApi.writeStreamfileRaw(path, content); } } diff --git a/src/filesystems/qsys/QSysFs.ts b/src/filesystems/qsys/QSysFs.ts index 24551f4bc..6e367433f 100644 --- a/src/filesystems/qsys/QSysFs.ts +++ b/src/filesystems/qsys/QSysFs.ts @@ -42,6 +42,7 @@ export function isProtectedFilter(filter?: string): boolean { } export class QSysFS implements vscode.FileSystemProvider { + private readonly savedAsMembers: Set = new Set; private readonly sourceDateHandler: SourceDateHandler; private readonly extendedContent: ExtendedIBMiContent; private extendedMemberSupport = false; @@ -107,7 +108,7 @@ export class QSysFS implements vscode.FileSystemProvider { mtime: Tools.parseAttrDate(String(attributes.MODIFY_TIME)), size: Number(attributes.DATA_SIZE), type, - permissions: getFilePermission(uri) + permissions: member && !this.savedAsMembers.has(uri.path) ? getFilePermission(uri) : undefined } } else { throw FileSystemError.FileNotFound(uri); @@ -162,12 +163,14 @@ export class QSysFS implements vscode.FileSystemProvider { noLibList: true }); if (addMember.code === 0) { + this.savedAsMembers.add(uri.path); vscode.commands.executeCommand(`code-for-ibmi.refreshObjectBrowser`); } else { throw new FileSystemError(addMember.stderr); } } else { + this.savedAsMembers.delete(uri.path); this.extendedMemberSupport ? await this.extendedContent.uploadMemberContentWithDates(asp, library, file, member, content.toString()) : await contentApi.uploadMemberContent(asp, library, file, member, content); From b439be5a996fbdd1b1420cbc7b558db949f69c3e Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Tue, 3 Sep 2024 21:57:45 +0200 Subject: [PATCH 14/16] Delete removed commands calls Signed-off-by: Seb Julliand --- src/views/ifsBrowser.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/views/ifsBrowser.ts b/src/views/ifsBrowser.ts index 1b4893b08..a63d67064 100644 --- a/src/views/ifsBrowser.ts +++ b/src/views/ifsBrowser.ts @@ -463,7 +463,6 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { try { vscode.window.showInformationMessage(t(`ifsBrowser.createStreamfile.infoMessage`, fullName)); await content.createStreamFile(fullName); - vscode.commands.executeCommand("code-for-ibmi.clearIFSStats", fullName); vscode.commands.executeCommand(`code-for-ibmi.openEditable`, fullName); if (GlobalConfiguration.get(`autoRefresh`)) { ifsBrowser.refresh(node); @@ -585,7 +584,7 @@ export function initializeIFSBrowser(context: vscode.ExtensionContext) { const removeResult = await vscode.window.withProgress({ title: t('ifsBrowser.deleteIFS.progress', toBeDeleted.length), location: vscode.ProgressLocation.Notification }, async () => { return await connection.sendCommand({ command: `rm -rf ${toBeDeleted.map(path => Tools.escapePath(path)).join(" ")}` }); }); - toBeDeleted.forEach(file => vscode.commands.executeCommand("code-for-ibmi.clearIFSStats", file)); + if (removeResult.code !== 0) { throw removeResult.stderr; } From ba07e47ea24258cac0e8d8dce03ba5bdec673655 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Tue, 3 Sep 2024 22:21:03 +0200 Subject: [PATCH 15/16] Removed superfluous / Signed-off-by: Seb Julliand --- src/api/Tools.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/Tools.ts b/src/api/Tools.ts index 60c49ac6d..fb0a89acb 100644 --- a/src/api/Tools.ts +++ b/src/api/Tools.ts @@ -177,7 +177,7 @@ export namespace Tools { */ export function qualifyPath(library: string, object: string, member?: string, iasp?: string, noEscape?: boolean) { const libraryPath = library === `QSYS` ? `QSYS.LIB` : `QSYS.LIB/${Tools.sanitizeLibraryNames([library]).join(``)}.LIB`; - const filePath = object ? `/${object}.FILE` : ''; + const filePath = object ? `${object}.FILE` : ''; const memberPath = member ? `/${member}.MBR` : ''; const subPath = `${filePath}${memberPath}`; From b6d95010a97e1d29e8b3d330b00d39189e5a2541 Mon Sep 17 00:00:00 2001 From: Seb Julliand Date: Tue, 3 Sep 2024 22:30:25 +0200 Subject: [PATCH 16/16] Fixed "getAttributes" to support variant characters Signed-off-by: Seb Julliand --- src/api/IBMiContent.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/IBMiContent.ts b/src/api/IBMiContent.ts index d06e63185..2fc00bbdd 100644 --- a/src/api/IBMiContent.ts +++ b/src/api/IBMiContent.ts @@ -951,8 +951,8 @@ export default class IBMiContent { return cl; } - async getAttributes(path: string | (QsysPath & { member?: string }), ...operands: AttrOperands[]) { - const target = (path = typeof path === 'string' ? path : Tools.qualifyPath(path.library, path.name, path.member, path.asp)); + async getAttributes(path: string | (QsysPath & { member?: string }), ...operands: AttrOperands[]) { + const target = (path = typeof path === 'string' ? path : this.ibmi.sysNameInAmerican(Tools.qualifyPath(path.library, path.name, path.member, path.asp))); const result = await this.ibmi.sendCommand({ command: `${this.ibmi.remoteFeatures.attr} -p ${target} ${operands.join(" ")}` }); if (result.code === 0) { return result.stdout