Add networks panel

pull/424/head
Tony-Sol 1 year ago
parent 17fcdb2b20
commit ce95ddea2a
No known key found for this signature in database
GPG Key ID: 0B27B02E462B2C67

1
.gitignore vendored

@ -2,3 +2,4 @@ lazydocker*
TODO.md TODO.md
Lazydocker.code-workspace Lazydocker.code-workspace
.vscode .vscode
.idea

@ -96,6 +96,7 @@ func getBindingSections(mApp *app.App) []*bindingSection {
"containers": mApp.Tr.ContainersTitle, "containers": mApp.Tr.ContainersTitle,
"images": mApp.Tr.ImagesTitle, "images": mApp.Tr.ImagesTitle,
"volumes": mApp.Tr.VolumesTitle, "volumes": mApp.Tr.VolumesTitle,
"networks": mApp.Tr.NetworksTitle,
} }
bindingSections = addBinding(titleMap[viewName], bindingSections, binding) bindingSections = addBinding(titleMap[viewName], bindingSections, binding)

@ -55,6 +55,7 @@ type CommandObject struct {
Container *Container Container *Container
Image *Image Image *Image
Volume *Volume Volume *Volume
Network *Network
} }
// NewCommandObject takes a command object and returns a default command object with the passed command object merged in // NewCommandObject takes a command object and returns a default command object with the passed command object merged in

@ -0,0 +1,54 @@
package commands
import (
"context"
dockerTypes "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
"github.com/sirupsen/logrus"
)
// Network : A docker Network
type Network struct {
Name string
Network dockerTypes.NetworkResource
Client *client.Client
OSCommand *OSCommand
Log *logrus.Entry
DockerCommand LimitedDockerCommand
}
// RefreshNetworks gets the networks and stores them
func (c *DockerCommand) RefreshNetworks() ([]*Network, error) {
networks, err := c.Client.NetworkList(context.Background(), dockerTypes.NetworkListOptions{})
if err != nil {
return nil, err
}
ownNetworks := make([]*Network, len(networks))
for i, network := range networks {
ownNetworks[i] = &Network{
Name: network.Name,
Network: network,
Client: c.Client,
OSCommand: c.OSCommand,
Log: c.Log,
DockerCommand: c,
}
}
return ownNetworks, nil
}
// PruneNetworks prunes networks
func (c *DockerCommand) PruneNetworks() error {
_, err := c.Client.NetworksPrune(context.Background(), filters.Args{})
return err
}
// Remove removes the network
func (v *Network) Remove() error {
return v.Client.NetworkRemove(context.Background(), v.Name)
}

@ -286,6 +286,9 @@ type CustomCommands struct {
// Volumes contains the custom commands for volumes // Volumes contains the custom commands for volumes
Volumes []CustomCommand `yaml:"volumes,omitempty"` Volumes []CustomCommand `yaml:"volumes,omitempty"`
// Networks contains the custom commands for networks
Networks []CustomCommand `yaml:"networks,omitempty"`
} }
// Replacements contains the stuff relating to rendering a container's info // Replacements contains the stuff relating to rendering a container's info

@ -56,6 +56,7 @@ type Panels struct {
Containers *panels.SideListPanel[*commands.Container] Containers *panels.SideListPanel[*commands.Container]
Images *panels.SideListPanel[*commands.Image] Images *panels.SideListPanel[*commands.Image]
Volumes *panels.SideListPanel[*commands.Volume] Volumes *panels.SideListPanel[*commands.Volume]
Networks *panels.SideListPanel[*commands.Network]
Menu *panels.SideListPanel[*types.MenuItem] Menu *panels.SideListPanel[*types.MenuItem]
} }
@ -273,6 +274,7 @@ func (gui *Gui) setPanels() {
Containers: gui.getContainersPanel(), Containers: gui.getContainersPanel(),
Images: gui.getImagesPanel(), Images: gui.getImagesPanel(),
Volumes: gui.getVolumesPanel(), Volumes: gui.getVolumesPanel(),
Networks: gui.getNetworksPanel(),
Menu: gui.getMenuPanel(), Menu: gui.getMenuPanel(),
} }
} }
@ -297,6 +299,11 @@ func (gui *Gui) refresh() {
gui.Log.Error(err) gui.Log.Error(err)
} }
}() }()
go func() {
if err := gui.reloadNetworks(); err != nil {
gui.Log.Error(err)
}
}()
go func() { go func() {
if err := gui.reloadImages(); err != nil { if err := gui.reloadImages(); err != nil {
gui.Log.Error(err) gui.Log.Error(err)

@ -409,6 +409,27 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleVolumesBulkCommand, Handler: gui.handleVolumesBulkCommand,
Description: gui.Tr.ViewBulkCommands, Description: gui.Tr.ViewBulkCommands,
}, },
{
ViewName: "networks",
Key: 'c',
Modifier: gocui.ModNone,
Handler: gui.handleNetworksCustomCommand,
Description: gui.Tr.RunCustomCommand,
},
{
ViewName: "networks",
Key: 'd',
Modifier: gocui.ModNone,
Handler: gui.handleNetworksRemoveMenu,
Description: gui.Tr.RemoveNetwork,
},
{
ViewName: "networks",
Key: 'b',
Modifier: gocui.ModNone,
Handler: gui.handleNetworksBulkCommand,
Description: gui.Tr.ViewBulkCommands,
},
{ {
ViewName: "main", ViewName: "main",
Key: gocui.KeyEsc, Key: gocui.KeyEsc,

@ -0,0 +1,179 @@
package gui
import (
"strconv"
"github.com/fatih/color"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazydocker/pkg/commands"
"github.com/jesseduffield/lazydocker/pkg/config"
"github.com/jesseduffield/lazydocker/pkg/gui/panels"
"github.com/jesseduffield/lazydocker/pkg/gui/presentation"
"github.com/jesseduffield/lazydocker/pkg/gui/types"
"github.com/jesseduffield/lazydocker/pkg/tasks"
"github.com/jesseduffield/lazydocker/pkg/utils"
"github.com/samber/lo"
)
func (gui *Gui) getNetworksPanel() *panels.SideListPanel[*commands.Network] {
return &panels.SideListPanel[*commands.Network]{
ContextState: &panels.ContextState[*commands.Network]{
GetMainTabs: func() []panels.MainTab[*commands.Network] {
return []panels.MainTab[*commands.Network]{
{
Key: "config",
Title: gui.Tr.ConfigTitle,
Render: gui.renderNetworkConfig,
},
}
},
GetItemContextCacheKey: func(network *commands.Network) string {
return "networks-" + network.Name
},
},
ListPanel: panels.ListPanel[*commands.Network]{
List: panels.NewFilteredList[*commands.Network](),
View: gui.Views.Networks,
},
NoItemsMessage: gui.Tr.NoNetworks,
Gui: gui.intoInterface(),
// we're sorting these networks based on whether they have labels defined,
// because those are the ones you typically care about.
// Within that, we also sort them alphabetically
Sort: func(a *commands.Network, b *commands.Network) bool {
return a.Name < b.Name
},
GetTableCells: presentation.GetNetworkDisplayStrings,
}
}
func (gui *Gui) renderNetworkConfig(network *commands.Network) tasks.TaskFunc {
return gui.NewSimpleRenderStringTask(func() string { return gui.networkConfigStr(network) })
}
func (gui *Gui) networkConfigStr(network *commands.Network) string {
padding := 15
output := ""
output += utils.WithPadding("ID: ", padding) + network.Network.ID + "\n"
output += utils.WithPadding("Name: ", padding) + network.Name + "\n"
output += utils.WithPadding("Driver: ", padding) + network.Network.Driver + "\n"
output += utils.WithPadding("Scope: ", padding) + network.Network.Scope + "\n"
output += utils.WithPadding("EnabledIPV6: ", padding) + strconv.FormatBool(network.Network.EnableIPv6) + "\n"
output += utils.WithPadding("Internal: ", padding) + strconv.FormatBool(network.Network.Internal) + "\n"
output += utils.WithPadding("Attachable: ", padding) + strconv.FormatBool(network.Network.Attachable) + "\n"
output += utils.WithPadding("Ingress: ", padding) + strconv.FormatBool(network.Network.Ingress) + "\n"
output += utils.WithPadding("Containers: ", padding)
if len(network.Network.Containers) > 0 {
output += "\n"
for _, v := range network.Network.Containers {
output += utils.FormatMapItem(padding, v.Name, v.EndpointID)
}
} else {
output += "none\n"
}
output += "\n"
output += utils.WithPadding("Labels: ", padding) + utils.FormatMap(padding, network.Network.Labels) + "\n"
output += utils.WithPadding("Options: ", padding) + utils.FormatMap(padding, network.Network.Options)
return output
}
func (gui *Gui) reloadNetworks() error {
if err := gui.refreshStateNetworks(); err != nil {
return err
}
return gui.Panels.Networks.RerenderList()
}
func (gui *Gui) refreshStateNetworks() error {
networks, err := gui.DockerCommand.RefreshNetworks()
if err != nil {
return err
}
gui.Panels.Networks.SetItems(networks)
return nil
}
func (gui *Gui) handleNetworksRemoveMenu(g *gocui.Gui, v *gocui.View) error {
network, err := gui.Panels.Networks.GetSelectedItem()
if err != nil {
return nil
}
type removeNetworkOption struct {
description string
command string
}
options := []*removeNetworkOption{
{
description: gui.Tr.Remove,
command: utils.WithShortSha("docker network rm " + network.Name),
},
}
menuItems := lo.Map(options, func(option *removeNetworkOption, _ int) *types.MenuItem {
return &types.MenuItem{
LabelColumns: []string{option.description, color.New(color.FgRed).Sprint(option.command)},
OnPress: func() error {
return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error {
if err := network.Remove(); err != nil {
return gui.createErrorPanel(err.Error())
}
return nil
})
},
}
})
return gui.Menu(CreateMenuOptions{
Title: "",
Items: menuItems,
})
}
func (gui *Gui) handlePruneNetworks() error {
return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmPruneNetworks, func(g *gocui.Gui, v *gocui.View) error {
return gui.WithWaitingStatus(gui.Tr.PruningStatus, func() error {
err := gui.DockerCommand.PruneNetworks()
if err != nil {
return gui.createErrorPanel(err.Error())
}
return nil
})
}, nil)
}
func (gui *Gui) handleNetworksCustomCommand(g *gocui.Gui, v *gocui.View) error {
network, err := gui.Panels.Networks.GetSelectedItem()
if err != nil {
return nil
}
commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{
Network: network,
})
customCommands := gui.Config.UserConfig.CustomCommands.Networks
return gui.createCustomCommandMenu(customCommands, commandObject)
}
func (gui *Gui) handleNetworksBulkCommand(g *gocui.Gui, v *gocui.View) error {
baseBulkCommands := []config.CustomCommand{
{
Name: gui.Tr.PruneNetworks,
InternalFunction: gui.handlePruneNetworks,
},
}
bulkCommands := append(baseBulkCommands, gui.Config.UserConfig.BulkCommands.Networks...)
commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{})
return gui.createBulkCommandMenu(bulkCommands, commandObject)
}

@ -0,0 +1,7 @@
package presentation
import "github.com/jesseduffield/lazydocker/pkg/commands"
func GetNetworkDisplayStrings(network *commands.Network) []string {
return []string{network.Network.Driver, network.Name}
}

@ -362,6 +362,7 @@ func (gui *Gui) allSidePanels() []panels.ISideListPanel {
gui.Panels.Containers, gui.Panels.Containers,
gui.Panels.Images, gui.Panels.Images,
gui.Panels.Volumes, gui.Panels.Volumes,
gui.Panels.Networks,
} }
} }

@ -32,6 +32,7 @@ type Views struct {
Containers *gocui.View Containers *gocui.View
Images *gocui.View Images *gocui.View
Volumes *gocui.View Volumes *gocui.View
Networks *gocui.View
// main panel // main panel
Main *gocui.View Main *gocui.View
@ -70,6 +71,7 @@ func (gui *Gui) orderedViewNameMappings() []viewNameMapping {
{viewPtr: &gui.Views.Containers, name: "containers", autoPosition: true}, {viewPtr: &gui.Views.Containers, name: "containers", autoPosition: true},
{viewPtr: &gui.Views.Images, name: "images", autoPosition: true}, {viewPtr: &gui.Views.Images, name: "images", autoPosition: true},
{viewPtr: &gui.Views.Volumes, name: "volumes", autoPosition: true}, {viewPtr: &gui.Views.Volumes, name: "volumes", autoPosition: true},
{viewPtr: &gui.Views.Networks, name: "networks", autoPosition: true},
{viewPtr: &gui.Views.Main, name: "main", autoPosition: true}, {viewPtr: &gui.Views.Main, name: "main", autoPosition: true},
@ -127,6 +129,10 @@ func (gui *Gui) createAllViews() error {
gui.Views.Volumes.Title = gui.Tr.VolumesTitle gui.Views.Volumes.Title = gui.Tr.VolumesTitle
gui.Views.Volumes.SelBgColor = selectedLineBgColor gui.Views.Volumes.SelBgColor = selectedLineBgColor
gui.Views.Networks.Highlight = true
gui.Views.Networks.Title = gui.Tr.NetworksTitle
gui.Views.Networks.SelBgColor = selectedLineBgColor
gui.Views.Options.Frame = false gui.Views.Options.Frame = false
gui.Views.Options.FgColor = gui.GetOptionsPanelTextColor() gui.Views.Options.FgColor = gui.GetOptionsPanelTextColor()

@ -45,9 +45,11 @@ func dutchSet() TranslationSet {
ViewLogs: "bekijk logs", ViewLogs: "bekijk logs",
RemoveImage: "verwijder image", RemoveImage: "verwijder image",
RemoveVolume: "verwijder volume", RemoveVolume: "verwijder volume",
RemoveNetwork: "verwijder network",
RemoveWithoutPrune: "verwijder zonder de ongelabeld ouders te verwijderen", RemoveWithoutPrune: "verwijder zonder de ongelabeld ouders te verwijderen",
PruneContainers: "vernietig bestaande containers", PruneContainers: "vernietig bestaande containers",
PruneVolumes: "vernietig ongebruikte volumes", PruneVolumes: "vernietig ongebruikte volumes",
PruneNetworks: "vernietig ongebruikte networks",
PruneImages: "vernietig ongebruikte images", PruneImages: "vernietig ongebruikte images",
ViewRestartOptions: "bekijk herstart opties", ViewRestartOptions: "bekijk herstart opties",
RunCustomCommand: "draai een vooraf bedacht aangepaste opdracht", RunCustomCommand: "draai een vooraf bedacht aangepaste opdracht",
@ -60,6 +62,7 @@ func dutchSet() TranslationSet {
StandaloneContainersTitle: "Alleenstaande Containers", StandaloneContainersTitle: "Alleenstaande Containers",
ImagesTitle: "Images", ImagesTitle: "Images",
VolumesTitle: "Volumes", VolumesTitle: "Volumes",
NetworksTitle: "Networks",
CustomCommandTitle: "Aangepast commando:", CustomCommandTitle: "Aangepast commando:",
ErrorTitle: "Fout", ErrorTitle: "Fout",
LogsTitle: "Logs", LogsTitle: "Logs",
@ -78,6 +81,7 @@ func dutchSet() TranslationSet {
NoContainer: "Geen container", NoContainer: "Geen container",
NoImages: "Geen images", NoImages: "Geen images",
NoVolumes: "Geen volumes", NoVolumes: "Geen volumes",
NoNetworks: "Geen networks",
ConfirmQuit: "Weet je zeker dat je weg wil gaan?", ConfirmQuit: "Weet je zeker dat je weg wil gaan?",
MustForceToRemoveContainer: "Je kan geen draaiende container verwijderen tenzij je het forceert, Wil je het forceren?", MustForceToRemoveContainer: "Je kan geen draaiende container verwijderen tenzij je het forceert, Wil je het forceren?",
@ -85,6 +89,7 @@ func dutchSet() TranslationSet {
ConfirmPruneImages: "Weet je zeker dat je alle niet gebruikte images wil vernietigen?", ConfirmPruneImages: "Weet je zeker dat je alle niet gebruikte images wil vernietigen?",
ConfirmPruneContainers: "Weet je zeker dat je alle niet gestopte containers wil vernietigen?", ConfirmPruneContainers: "Weet je zeker dat je alle niet gestopte containers wil vernietigen?",
ConfirmPruneVolumes: "Weet je zeker dat je alle niet gebruikte volumes wil vernietigen?", ConfirmPruneVolumes: "Weet je zeker dat je alle niet gebruikte volumes wil vernietigen?",
ConfirmPruneNetworks: "Weet je zeker dat je alle niet gebruikte networks wil vernietigen?",
StopService: "Weet je zeker dat je deze service zijn containers wil stoppen?", StopService: "Weet je zeker dat je deze service zijn containers wil stoppen?",
StopContainer: "Weet je zeker dat je deze container wil stoppen?", StopContainer: "Weet je zeker dat je deze container wil stoppen?",
PressEnterToReturn: "Druk op enter om terug te gaan naar lazydocker (Deze popup kan uit gezet worden door in de config dit neer te zetten `gui.returnImmediately: true`)", PressEnterToReturn: "Druk op enter om terug te gaan naar lazydocker (Deze popup kan uit gezet worden door in de config dit neer te zetten `gui.returnImmediately: true`)",

@ -73,24 +73,29 @@ type TranslationSet struct {
TopTitle string TopTitle string
ImagesTitle string ImagesTitle string
VolumesTitle string VolumesTitle string
NetworksTitle string
NoContainers string NoContainers string
NoContainer string NoContainer string
NoImages string NoImages string
NoVolumes string NoVolumes string
NoNetworks string
NoServices string NoServices string
RemoveImage string RemoveImage string
RemoveVolume string RemoveVolume string
RemoveNetwork string
RemoveWithoutPrune string RemoveWithoutPrune string
RemoveWithoutPruneWithForce string RemoveWithoutPruneWithForce string
RemoveWithForce string RemoveWithForce string
PruneImages string PruneImages string
PruneContainers string PruneContainers string
PruneVolumes string PruneVolumes string
PruneNetworks string
ConfirmPruneContainers string ConfirmPruneContainers string
ConfirmStopContainers string ConfirmStopContainers string
ConfirmRemoveContainers string ConfirmRemoveContainers string
ConfirmPruneImages string ConfirmPruneImages string
ConfirmPruneVolumes string ConfirmPruneVolumes string
ConfirmPruneNetworks string
PruningStatus string PruningStatus string
StopService string StopService string
PressEnterToReturn string PressEnterToReturn string
@ -186,11 +191,13 @@ func englishSet() TranslationSet {
DownProject: "down project", DownProject: "down project",
RemoveImage: "remove image", RemoveImage: "remove image",
RemoveVolume: "remove volume", RemoveVolume: "remove volume",
RemoveNetwork: "remove network",
RemoveWithoutPrune: "remove without deleting untagged parents", RemoveWithoutPrune: "remove without deleting untagged parents",
RemoveWithoutPruneWithForce: "remove (forced) without deleting untagged parents", RemoveWithoutPruneWithForce: "remove (forced) without deleting untagged parents",
RemoveWithForce: "remove (forced)", RemoveWithForce: "remove (forced)",
PruneContainers: "prune exited containers", PruneContainers: "prune exited containers",
PruneVolumes: "prune unused volumes", PruneVolumes: "prune unused volumes",
PruneNetworks: "prune unused networks",
PruneImages: "prune unused images", PruneImages: "prune unused images",
StopAllContainers: "stop all containers", StopAllContainers: "stop all containers",
RemoveAllContainers: "remove all containers (forced)", RemoveAllContainers: "remove all containers (forced)",
@ -210,6 +217,7 @@ func englishSet() TranslationSet {
StandaloneContainersTitle: "Standalone Containers", StandaloneContainersTitle: "Standalone Containers",
ImagesTitle: "Images", ImagesTitle: "Images",
VolumesTitle: "Volumes", VolumesTitle: "Volumes",
NetworksTitle: "Networks",
CustomCommandTitle: "Custom Command:", CustomCommandTitle: "Custom Command:",
BulkCommandTitle: "Bulk Command:", BulkCommandTitle: "Bulk Command:",
ErrorTitle: "Error", ErrorTitle: "Error",
@ -230,6 +238,7 @@ func englishSet() TranslationSet {
NoContainer: "No container", NoContainer: "No container",
NoImages: "No images", NoImages: "No images",
NoVolumes: "No volumes", NoVolumes: "No volumes",
NoNetworks: "No networks",
NoServices: "No services", NoServices: "No services",
ConfirmQuit: "Are you sure you want to quit?", ConfirmQuit: "Are you sure you want to quit?",
@ -241,6 +250,7 @@ func englishSet() TranslationSet {
ConfirmStopContainers: "Are you sure you want to stop all containers?", ConfirmStopContainers: "Are you sure you want to stop all containers?",
ConfirmRemoveContainers: "Are you sure you want to remove all containers?", ConfirmRemoveContainers: "Are you sure you want to remove all containers?",
ConfirmPruneVolumes: "Are you sure you want to prune all unused volumes?", ConfirmPruneVolumes: "Are you sure you want to prune all unused volumes?",
ConfirmPruneNetworks: "Are you sure you want to prune all unused networks?",
StopService: "Are you sure you want to stop this service's containers?", StopService: "Are you sure you want to stop this service's containers?",
StopContainer: "Are you sure you want to stop this container?", StopContainer: "Are you sure you want to stop this container?",
PressEnterToReturn: "Press enter to return to lazydocker (this prompt can be disabled in your config by setting `gui.returnImmediately: true`)", PressEnterToReturn: "Press enter to return to lazydocker (this prompt can be disabled in your config by setting `gui.returnImmediately: true`)",

@ -53,11 +53,13 @@ func frenchSet() TranslationSet {
ViewLogs: "voir les enregistrements", ViewLogs: "voir les enregistrements",
RemoveImage: "supprimer l'image", RemoveImage: "supprimer l'image",
RemoveVolume: "supprimer le volume", RemoveVolume: "supprimer le volume",
RemoveNetwork: "supprimer le réseau",
RemoveWithoutPrune: "supprimer sans effacer les parents non étiqueté", RemoveWithoutPrune: "supprimer sans effacer les parents non étiqueté",
RemoveWithoutPruneWithForce: "supprimer (forcer) sans effacer les parents non étiqueté", RemoveWithoutPruneWithForce: "supprimer (forcer) sans effacer les parents non étiqueté",
RemoveWithForce: "supprimer (forcer)", RemoveWithForce: "supprimer (forcer)",
PruneContainers: "détruire les conteneurs arrêtes", PruneContainers: "détruire les conteneurs arrêtes",
PruneVolumes: "détruire les volumes non utilisés", PruneVolumes: "détruire les volumes non utilisés",
PruneNetworks: "détruire les réseaux non utilisés",
PruneImages: "détruire les images non utilisés", PruneImages: "détruire les images non utilisés",
StopAllContainers: "arrêter tous les conteneurs", StopAllContainers: "arrêter tous les conteneurs",
RemoveAllContainers: "supprimer tous les conteneurs (forcer)", RemoveAllContainers: "supprimer tous les conteneurs (forcer)",
@ -76,6 +78,7 @@ func frenchSet() TranslationSet {
StandaloneContainersTitle: "Conteneurs Autonomes", StandaloneContainersTitle: "Conteneurs Autonomes",
ImagesTitle: "Images", ImagesTitle: "Images",
VolumesTitle: "Volumes", VolumesTitle: "Volumes",
NetworksTitle: "Réseaux",
CustomCommandTitle: "Commande personalisé:", CustomCommandTitle: "Commande personalisé:",
BulkCommandTitle: "Commande groupée:", BulkCommandTitle: "Commande groupée:",
ErrorTitle: "Erreur", ErrorTitle: "Erreur",
@ -95,6 +98,7 @@ func frenchSet() TranslationSet {
NoContainer: "Aucun conteneur", NoContainer: "Aucun conteneur",
NoImages: "Aucune images", NoImages: "Aucune images",
NoVolumes: "Aucun volumes", NoVolumes: "Aucun volumes",
NoNetworks: "Aucun réseaux",
ConfirmQuit: "Êtes vous certain de vouloir quitter?", ConfirmQuit: "Êtes vous certain de vouloir quitter?",
MustForceToRemoveContainer: "Vous ne pouvez pas supprimer un conteneur qui tourne sans le forcer. Voulez-vous le forcer ?", MustForceToRemoveContainer: "Vous ne pouvez pas supprimer un conteneur qui tourne sans le forcer. Voulez-vous le forcer ?",
@ -104,6 +108,7 @@ func frenchSet() TranslationSet {
ConfirmStopContainers: "Êtes-vous certain de vouloir arrêter tous les conteneurs ?", ConfirmStopContainers: "Êtes-vous certain de vouloir arrêter tous les conteneurs ?",
ConfirmRemoveContainers: "Êtes-vous certain de vouloir supprimer tous les conteneurs ?", ConfirmRemoveContainers: "Êtes-vous certain de vouloir supprimer tous les conteneurs ?",
ConfirmPruneVolumes: "Êtes-vous certain de vouloir détruire tous les volumes non utilisés ?", ConfirmPruneVolumes: "Êtes-vous certain de vouloir détruire tous les volumes non utilisés ?",
ConfirmPruneNetworks: "Êtes-vous certain de vouloir détruire tous les réseaux non utilisés ?",
StopService: "Êtes-vous certain de vouloir arrêter le conteneur de ce service ?", StopService: "Êtes-vous certain de vouloir arrêter le conteneur de ce service ?",
StopContainer: "Êtes-vous certain de vouloir arrêter ce conteneur ?", StopContainer: "Êtes-vous certain de vouloir arrêter ce conteneur ?",
PressEnterToReturn: "Appuiez sur Enter pour revenir à lazydocker (ce message peut être désactivé dans vos configurations en appliquant `gui.returnImmediately: true`)", PressEnterToReturn: "Appuiez sur Enter pour revenir à lazydocker (ce message peut être désactivé dans vos configurations en appliquant `gui.returnImmediately: true`)",

@ -44,9 +44,11 @@ func germanSet() TranslationSet {
ViewLogs: "zeige Protokolle", ViewLogs: "zeige Protokolle",
RemoveImage: "entferne Image", RemoveImage: "entferne Image",
RemoveVolume: "entferne Volume", RemoveVolume: "entferne Volume",
RemoveNetwork: "entferne Netzwerk",
RemoveWithoutPrune: "entfernen, ohne die unmarkierten Eltern zu entfernen", RemoveWithoutPrune: "entfernen, ohne die unmarkierten Eltern zu entfernen",
PruneContainers: "entferne verlassene Container", PruneContainers: "entferne verlassene Container",
PruneVolumes: "entferne unbenutzte Volumes", PruneVolumes: "entferne unbenutzte Volumes",
PruneNetworks: "entferne unbenutzte Netzwerk",
PruneImages: "entferne unbenutzte Images", PruneImages: "entferne unbenutzte Images",
ViewRestartOptions: "zeige Neustartoptionen", ViewRestartOptions: "zeige Neustartoptionen",
RunCustomCommand: "führe vordefinierten benutzerdefinierten Befehl aus", RunCustomCommand: "führe vordefinierten benutzerdefinierten Befehl aus",
@ -59,6 +61,7 @@ func germanSet() TranslationSet {
StandaloneContainersTitle: "Alleinstehende Container", StandaloneContainersTitle: "Alleinstehende Container",
ImagesTitle: "Images", ImagesTitle: "Images",
VolumesTitle: "Volumes", VolumesTitle: "Volumes",
NetworksTitle: "Netzwerk",
CustomCommandTitle: "Benutzerdefinierter Befehl", CustomCommandTitle: "Benutzerdefinierter Befehl",
ErrorTitle: "Fehler", ErrorTitle: "Fehler",
LogsTitle: "Protokoll", LogsTitle: "Protokoll",
@ -77,6 +80,7 @@ func germanSet() TranslationSet {
NoContainer: "Kein Container", NoContainer: "Kein Container",
NoImages: "Keine Images", NoImages: "Keine Images",
NoVolumes: "Keine Volumes", NoVolumes: "Keine Volumes",
NoNetworks: "Keine Netzwerk",
ConfirmQuit: "Bist du dir sicher, dass du verlassen möchtest?", ConfirmQuit: "Bist du dir sicher, dass du verlassen möchtest?",
MustForceToRemoveContainer: "Du kannst keinen Container entfernen, der noch ausgeführt wird außer du erzwingst es. Möchtest du es erzwingen?", MustForceToRemoveContainer: "Du kannst keinen Container entfernen, der noch ausgeführt wird außer du erzwingst es. Möchtest du es erzwingen?",
@ -84,6 +88,7 @@ func germanSet() TranslationSet {
ConfirmPruneImages: "Bist du dir sicher, dass du alle unbenutzten Images entfernen möchtest?", ConfirmPruneImages: "Bist du dir sicher, dass du alle unbenutzten Images entfernen möchtest?",
ConfirmPruneContainers: "Bist du dir sicher, dass du alle angehaltenen Container entfernen möchtes?", ConfirmPruneContainers: "Bist du dir sicher, dass du alle angehaltenen Container entfernen möchtes?",
ConfirmPruneVolumes: "Bist du dir sicher, dass du alle unbenutzen Volumes entfernen möchtest?", ConfirmPruneVolumes: "Bist du dir sicher, dass du alle unbenutzen Volumes entfernen möchtest?",
ConfirmPruneNetworks: "Bist du dir sicher, dass du alle unbenutzen Netzwerk entfernen möchtest?",
StopService: "Bist du dir sicher, dass du den Dienst dieses Containers anhalten möchtest?", StopService: "Bist du dir sicher, dass du den Dienst dieses Containers anhalten möchtest?",
StopContainer: "Bist du dir sicher, dass du den Container anhalten möchtest?", StopContainer: "Bist du dir sicher, dass du den Container anhalten möchtest?",
PressEnterToReturn: "Drücke Eingabe um zu lazydocker zurückzukehren. (Diese Nachfrage kann in Deiner Konfiguration deaktiviert werden, indem du folgenden Wert setzt: `gui.returnImmediately: true`)", PressEnterToReturn: "Drücke Eingabe um zu lazydocker zurückzukehren. (Diese Nachfrage kann in Deiner Konfiguration deaktiviert werden, indem du folgenden Wert setzt: `gui.returnImmediately: true`)",

@ -44,9 +44,11 @@ func polishSet() TranslationSet {
ViewLogs: "pokaż logi", ViewLogs: "pokaż logi",
RemoveImage: "usuń obraz", RemoveImage: "usuń obraz",
RemoveVolume: "usuń wolumen", RemoveVolume: "usuń wolumen",
RemoveNetwork: "usuń seici",
RemoveWithoutPrune: "usuń bez kasowania nieoznaczonych rodziców", RemoveWithoutPrune: "usuń bez kasowania nieoznaczonych rodziców",
PruneContainers: "wyczyść kontenery", PruneContainers: "wyczyść kontenery",
PruneVolumes: "wyczyść nieużywane wolumeny", PruneVolumes: "wyczyść nieużywane wolumeny",
PruneNetworks: "wyczyść nieużywane sieci",
PruneImages: "wyczyść nieużywane obrazy", PruneImages: "wyczyść nieużywane obrazy",
ViewRestartOptions: "pokaż opcje restartu", ViewRestartOptions: "pokaż opcje restartu",
RunCustomCommand: "wykonaj predefiniowaną własną komende", RunCustomCommand: "wykonaj predefiniowaną własną komende",
@ -59,6 +61,7 @@ func polishSet() TranslationSet {
StandaloneContainersTitle: "Kontenery samodzielne", StandaloneContainersTitle: "Kontenery samodzielne",
ImagesTitle: "Obrazy", ImagesTitle: "Obrazy",
VolumesTitle: "Wolumeny", VolumesTitle: "Wolumeny",
NetworksTitle: "Seici",
CustomCommandTitle: "Własna komenda:", CustomCommandTitle: "Własna komenda:",
ErrorTitle: "Błąd", ErrorTitle: "Błąd",
LogsTitle: "Logi", LogsTitle: "Logi",
@ -77,6 +80,7 @@ func polishSet() TranslationSet {
NoContainer: "Brak kontenera", NoContainer: "Brak kontenera",
NoImages: "Brak obrazów", NoImages: "Brak obrazów",
NoVolumes: "Brak wolumenów", NoVolumes: "Brak wolumenów",
NoNetworks: "Brak sieci",
ConfirmQuit: "Na pewno chcesz wyjść?", ConfirmQuit: "Na pewno chcesz wyjść?",
MustForceToRemoveContainer: "Nie możesz usunąć uruchomionego kontenera dopóki nie zrobisz tego siłą. Chcesz wykonać to z siłą?", MustForceToRemoveContainer: "Nie możesz usunąć uruchomionego kontenera dopóki nie zrobisz tego siłą. Chcesz wykonać to z siłą?",
@ -84,6 +88,7 @@ func polishSet() TranslationSet {
ConfirmPruneImages: "Na pewno wyczyścić wszystkie nieużywane obrazy?", ConfirmPruneImages: "Na pewno wyczyścić wszystkie nieużywane obrazy?",
ConfirmPruneContainers: "Na pewno wyczyścić wszystkie nieuruchomione kontenery?", ConfirmPruneContainers: "Na pewno wyczyścić wszystkie nieuruchomione kontenery?",
ConfirmPruneVolumes: "Na pewno wyczyścić wszystkie nieużywane wolumeny?", ConfirmPruneVolumes: "Na pewno wyczyścić wszystkie nieużywane wolumeny?",
ConfirmPruneNetworks: "Na pewno wyczyścić wszystkie nieużywane seici?",
StopService: "Na pewno zatrzymać kontenery tego serwisu?", StopService: "Na pewno zatrzymać kontenery tego serwisu?",
StopContainer: "Na pewno zatrzymać ten kontener?", StopContainer: "Na pewno zatrzymać ten kontener?",
PressEnterToReturn: "Wciśnij enter aby powrócić do lazydockera (ten komunikat może być wyłączony w konfiguracji poprzez ustawienie `gui.returnImmediately: true`)", PressEnterToReturn: "Wciśnij enter aby powrócić do lazydockera (ten komunikat może być wyłączony w konfiguracji poprzez ustawienie `gui.returnImmediately: true`)",

@ -44,9 +44,11 @@ func turkishSet() TranslationSet {
ViewLogs: "kayıt defterini görüntüle", ViewLogs: "kayıt defterini görüntüle",
RemoveImage: "imajı kaldır", RemoveImage: "imajı kaldır",
RemoveVolume: "alanı kaldır", RemoveVolume: "alanı kaldır",
RemoveNetwork: "ağı kaldır",
RemoveWithoutPrune: "etkisiz ebeveynleri silmeden kaldır", RemoveWithoutPrune: "etkisiz ebeveynleri silmeden kaldır",
PruneContainers: "çalışmayan konteynerleri temizle", PruneContainers: "çalışmayan konteynerleri temizle",
PruneVolumes: "kullanılmayan alanları temizle", PruneVolumes: "kullanılmayan alanları temizle",
PruneNetworks: "kullanılmayan ağları temizle",
PruneImages: "kullanılmayan imajları temizle", PruneImages: "kullanılmayan imajları temizle",
ViewRestartOptions: "yeniden başlatma seçeneklerini görüntüle", ViewRestartOptions: "yeniden başlatma seçeneklerini görüntüle",
RunCustomCommand: "önceden tanımlanmış özel komutu çalıştır", RunCustomCommand: "önceden tanımlanmış özel komutu çalıştır",
@ -59,6 +61,7 @@ func turkishSet() TranslationSet {
StandaloneContainersTitle: "Bağımsız Konteynerler", StandaloneContainersTitle: "Bağımsız Konteynerler",
ImagesTitle: "Imajlar", ImagesTitle: "Imajlar",
VolumesTitle: "Alanlar", VolumesTitle: "Alanlar",
NetworksTitle: "Ağları",
CustomCommandTitle: "Özel Komut:", CustomCommandTitle: "Özel Komut:",
ErrorTitle: "Hata", ErrorTitle: "Hata",
LogsTitle: "Kayitlar", LogsTitle: "Kayitlar",
@ -77,6 +80,7 @@ func turkishSet() TranslationSet {
NoContainer: "Konteyner yok", NoContainer: "Konteyner yok",
NoImages: "Imajlar yok", NoImages: "Imajlar yok",
NoVolumes: "Alanlar yok", NoVolumes: "Alanlar yok",
NoNetworks: "Ağları yok",
ConfirmQuit: ıkmak istediğine emin misin?", ConfirmQuit: ıkmak istediğine emin misin?",
MustForceToRemoveContainer: "Zorlamadan çalışan bir konteyneri kaldıramazsınız. Zorlamak ister misin?", MustForceToRemoveContainer: "Zorlamadan çalışan bir konteyneri kaldıramazsınız. Zorlamak ister misin?",
@ -84,6 +88,7 @@ func turkishSet() TranslationSet {
ConfirmPruneImages: "Kullanılmayan tüm görüntüleri temizlemek istediğinize emin misiniz?", ConfirmPruneImages: "Kullanılmayan tüm görüntüleri temizlemek istediğinize emin misiniz?",
ConfirmPruneContainers: "Durdurulan tüm konteynerları temizlemek istediğinizden emin misiniz?", ConfirmPruneContainers: "Durdurulan tüm konteynerları temizlemek istediğinizden emin misiniz?",
ConfirmPruneVolumes: "Kullanılmayan tüm alanları temizlemek istediğinizden emin misiniz?", ConfirmPruneVolumes: "Kullanılmayan tüm alanları temizlemek istediğinizden emin misiniz?",
ConfirmPruneNetworks: "Kullanılmayan tüm ağları temizlemek istediğinizden emin misiniz?",
StopService: "Bu servisin konteynerlerini durdurmak istediğinize emin misiniz?", StopService: "Bu servisin konteynerlerini durdurmak istediğinize emin misiniz?",
StopContainer: "Bu konteyneri durdurmak istediğinize emin misiniz?", StopContainer: "Bu konteyneri durdurmak istediğinize emin misiniz?",
PressEnterToReturn: "lazydocker' a geri dönmek için enter tuşuna basın ( Bu uyarı, `gui.return Immediately: true` ayarıyla devre dışı bırakılabilir)", PressEnterToReturn: "lazydocker' a geri dönmek için enter tuşuna basın ( Bu uyarı, `gui.return Immediately: true` ayarıyla devre dışı bırakılabilir)",

Loading…
Cancel
Save