mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-21 23:01:03 +00:00
Merge pull request #424 from Tony-Sol/master
This commit is contained in:
commit
966a266c68
23 changed files with 388 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,3 +2,4 @@ lazydocker*
|
|||
TODO.md
|
||||
Lazydocker.code-workspace
|
||||
.vscode
|
||||
.idea
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Netzwerk
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: führe vordefinierten benutzerdefinierten Befehl aus
|
||||
<kbd>d</kbd>: entferne Netzwerk
|
||||
<kbd>b</kbd>: view bulk commands
|
||||
<kbd>enter</kbd>: fokussieren aufs Hauptpanel
|
||||
<kbd>[</kbd>: vorheriges Tab
|
||||
<kbd>]</kbd>: nächstes Tab
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Haupt
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Networks
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: run predefined custom command
|
||||
<kbd>d</kbd>: remove network
|
||||
<kbd>b</kbd>: view bulk commands
|
||||
<kbd>enter</kbd>: focus main panel
|
||||
<kbd>[</kbd>: previous tab
|
||||
<kbd>]</kbd>: next tab
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Main
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Réseaux
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: executer une commande prédéfinie
|
||||
<kbd>d</kbd>: supprimer le réseau
|
||||
<kbd>b</kbd>: voir les commandes groupés
|
||||
<kbd>enter</kbd>: focus paneau principal
|
||||
<kbd>[</kbd>: onglet précédent
|
||||
<kbd>]</kbd>: onglet suivant
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Principal
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Networks
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: draai een vooraf bedacht aangepaste opdracht
|
||||
<kbd>d</kbd>: verwijder network
|
||||
<kbd>b</kbd>: view bulk commands
|
||||
<kbd>enter</kbd>: focus hoofdpaneel
|
||||
<kbd>[</kbd>: vorige tab
|
||||
<kbd>]</kbd>: volgende tab
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Hoofd
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Seici
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: wykonaj predefiniowaną własną komende
|
||||
<kbd>d</kbd>: usuń seici
|
||||
<kbd>b</kbd>: view bulk commands
|
||||
<kbd>enter</kbd>: skup na głównym panelu
|
||||
<kbd>[</kbd>: poprzednia zakładka
|
||||
<kbd>]</kbd>: następna zakładka
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Główne
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,18 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
|||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Ağları
|
||||
|
||||
<pre>
|
||||
<kbd>c</kbd>: önceden tanımlanmış özel komutu çalıştır
|
||||
<kbd>d</kbd>: ağı kaldır
|
||||
<kbd>b</kbd>: view bulk commands
|
||||
<kbd>enter</kbd>: ana panele odaklan
|
||||
<kbd>[</kbd>: önceki sekme
|
||||
<kbd>]</kbd>: sonraki sekme
|
||||
<kbd>/</kbd>: filter list
|
||||
</pre>
|
||||
|
||||
## Ana
|
||||
|
||||
<pre>
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ func getBindingSections(mApp *app.App) []*bindingSection {
|
|||
"containers": mApp.Tr.ContainersTitle,
|
||||
"images": mApp.Tr.ImagesTitle,
|
||||
"volumes": mApp.Tr.VolumesTitle,
|
||||
"networks": mApp.Tr.NetworksTitle,
|
||||
}
|
||||
|
||||
bindingSections = addBinding(titleMap[viewName], bindingSections, binding)
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ type CommandObject struct {
|
|||
Container *Container
|
||||
Image *Image
|
||||
Volume *Volume
|
||||
Network *Network
|
||||
}
|
||||
|
||||
// NewCommandObject takes a command object and returns a default command object with the passed command object merged in
|
||||
|
|
|
|||
54
pkg/commands/network.go
Normal file
54
pkg/commands/network.go
Normal file
|
|
@ -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 []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
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ type Panels struct {
|
|||
Containers *panels.SideListPanel[*commands.Container]
|
||||
Images *panels.SideListPanel[*commands.Image]
|
||||
Volumes *panels.SideListPanel[*commands.Volume]
|
||||
Networks *panels.SideListPanel[*commands.Network]
|
||||
Menu *panels.SideListPanel[*types.MenuItem]
|
||||
}
|
||||
|
||||
|
|
@ -273,6 +274,7 @@ func (gui *Gui) setPanels() {
|
|||
Containers: gui.getContainersPanel(),
|
||||
Images: gui.getImagesPanel(),
|
||||
Volumes: gui.getVolumesPanel(),
|
||||
Networks: gui.getNetworksPanel(),
|
||||
Menu: gui.getMenuPanel(),
|
||||
}
|
||||
}
|
||||
|
|
@ -297,6 +299,11 @@ func (gui *Gui) refresh() {
|
|||
gui.Log.Error(err)
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
if err := gui.reloadNetworks(); err != nil {
|
||||
gui.Log.Error(err)
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
if err := gui.reloadImages(); err != nil {
|
||||
gui.Log.Error(err)
|
||||
|
|
|
|||
|
|
@ -409,6 +409,27 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
|||
Handler: gui.handleVolumesBulkCommand,
|
||||
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",
|
||||
Key: gocui.KeyEsc,
|
||||
|
|
|
|||
179
pkg/gui/networks_panel.go
Normal file
179
pkg/gui/networks_panel.go
Normal file
|
|
@ -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)
|
||||
}
|
||||
7
pkg/gui/presentation/networks.go
Normal file
7
pkg/gui/presentation/networks.go
Normal file
|
|
@ -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.Images,
|
||||
gui.Panels.Volumes,
|
||||
gui.Panels.Networks,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ type Views struct {
|
|||
Containers *gocui.View
|
||||
Images *gocui.View
|
||||
Volumes *gocui.View
|
||||
Networks *gocui.View
|
||||
|
||||
// main panel
|
||||
Main *gocui.View
|
||||
|
|
@ -70,6 +71,7 @@ func (gui *Gui) orderedViewNameMappings() []viewNameMapping {
|
|||
{viewPtr: &gui.Views.Containers, name: "containers", autoPosition: true},
|
||||
{viewPtr: &gui.Views.Images, name: "images", 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},
|
||||
|
||||
|
|
@ -127,6 +129,10 @@ func (gui *Gui) createAllViews() error {
|
|||
gui.Views.Volumes.Title = gui.Tr.VolumesTitle
|
||||
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.FgColor = gui.GetOptionsPanelTextColor()
|
||||
|
||||
|
|
|
|||
|
|
@ -45,9 +45,11 @@ func dutchSet() TranslationSet {
|
|||
ViewLogs: "bekijk logs",
|
||||
RemoveImage: "verwijder image",
|
||||
RemoveVolume: "verwijder volume",
|
||||
RemoveNetwork: "verwijder network",
|
||||
RemoveWithoutPrune: "verwijder zonder de ongelabeld ouders te verwijderen",
|
||||
PruneContainers: "vernietig bestaande containers",
|
||||
PruneVolumes: "vernietig ongebruikte volumes",
|
||||
PruneNetworks: "vernietig ongebruikte networks",
|
||||
PruneImages: "vernietig ongebruikte images",
|
||||
ViewRestartOptions: "bekijk herstart opties",
|
||||
RunCustomCommand: "draai een vooraf bedacht aangepaste opdracht",
|
||||
|
|
@ -60,6 +62,7 @@ func dutchSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Alleenstaande Containers",
|
||||
ImagesTitle: "Images",
|
||||
VolumesTitle: "Volumes",
|
||||
NetworksTitle: "Networks",
|
||||
CustomCommandTitle: "Aangepast commando:",
|
||||
ErrorTitle: "Fout",
|
||||
LogsTitle: "Logs",
|
||||
|
|
@ -78,6 +81,7 @@ func dutchSet() TranslationSet {
|
|||
NoContainer: "Geen container",
|
||||
NoImages: "Geen images",
|
||||
NoVolumes: "Geen volumes",
|
||||
NoNetworks: "Geen networks",
|
||||
|
||||
ConfirmQuit: "Weet je zeker dat je weg wil gaan?",
|
||||
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?",
|
||||
ConfirmPruneContainers: "Weet je zeker dat je alle niet gestopte containers 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?",
|
||||
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`)",
|
||||
|
|
|
|||
|
|
@ -73,24 +73,29 @@ type TranslationSet struct {
|
|||
TopTitle string
|
||||
ImagesTitle string
|
||||
VolumesTitle string
|
||||
NetworksTitle string
|
||||
NoContainers string
|
||||
NoContainer string
|
||||
NoImages string
|
||||
NoVolumes string
|
||||
NoNetworks string
|
||||
NoServices string
|
||||
RemoveImage string
|
||||
RemoveVolume string
|
||||
RemoveNetwork string
|
||||
RemoveWithoutPrune string
|
||||
RemoveWithoutPruneWithForce string
|
||||
RemoveWithForce string
|
||||
PruneImages string
|
||||
PruneContainers string
|
||||
PruneVolumes string
|
||||
PruneNetworks string
|
||||
ConfirmPruneContainers string
|
||||
ConfirmStopContainers string
|
||||
ConfirmRemoveContainers string
|
||||
ConfirmPruneImages string
|
||||
ConfirmPruneVolumes string
|
||||
ConfirmPruneNetworks string
|
||||
PruningStatus string
|
||||
StopService string
|
||||
PressEnterToReturn string
|
||||
|
|
@ -186,11 +191,13 @@ func englishSet() TranslationSet {
|
|||
DownProject: "down project",
|
||||
RemoveImage: "remove image",
|
||||
RemoveVolume: "remove volume",
|
||||
RemoveNetwork: "remove network",
|
||||
RemoveWithoutPrune: "remove without deleting untagged parents",
|
||||
RemoveWithoutPruneWithForce: "remove (forced) without deleting untagged parents",
|
||||
RemoveWithForce: "remove (forced)",
|
||||
PruneContainers: "prune exited containers",
|
||||
PruneVolumes: "prune unused volumes",
|
||||
PruneNetworks: "prune unused networks",
|
||||
PruneImages: "prune unused images",
|
||||
StopAllContainers: "stop all containers",
|
||||
RemoveAllContainers: "remove all containers (forced)",
|
||||
|
|
@ -210,6 +217,7 @@ func englishSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Standalone Containers",
|
||||
ImagesTitle: "Images",
|
||||
VolumesTitle: "Volumes",
|
||||
NetworksTitle: "Networks",
|
||||
CustomCommandTitle: "Custom Command:",
|
||||
BulkCommandTitle: "Bulk Command:",
|
||||
ErrorTitle: "Error",
|
||||
|
|
@ -230,6 +238,7 @@ func englishSet() TranslationSet {
|
|||
NoContainer: "No container",
|
||||
NoImages: "No images",
|
||||
NoVolumes: "No volumes",
|
||||
NoNetworks: "No networks",
|
||||
NoServices: "No services",
|
||||
|
||||
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?",
|
||||
ConfirmRemoveContainers: "Are you sure you want to remove all containers?",
|
||||
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?",
|
||||
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`)",
|
||||
|
|
|
|||
|
|
@ -53,11 +53,13 @@ func frenchSet() TranslationSet {
|
|||
ViewLogs: "voir les enregistrements",
|
||||
RemoveImage: "supprimer l'image",
|
||||
RemoveVolume: "supprimer le volume",
|
||||
RemoveNetwork: "supprimer le réseau",
|
||||
RemoveWithoutPrune: "supprimer sans effacer les parents non étiqueté",
|
||||
RemoveWithoutPruneWithForce: "supprimer (forcer) sans effacer les parents non étiqueté",
|
||||
RemoveWithForce: "supprimer (forcer)",
|
||||
PruneContainers: "détruire les conteneurs arrêtes",
|
||||
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",
|
||||
StopAllContainers: "arrêter tous les conteneurs",
|
||||
RemoveAllContainers: "supprimer tous les conteneurs (forcer)",
|
||||
|
|
@ -76,6 +78,7 @@ func frenchSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Conteneurs Autonomes",
|
||||
ImagesTitle: "Images",
|
||||
VolumesTitle: "Volumes",
|
||||
NetworksTitle: "Réseaux",
|
||||
CustomCommandTitle: "Commande personalisé:",
|
||||
BulkCommandTitle: "Commande groupée:",
|
||||
ErrorTitle: "Erreur",
|
||||
|
|
@ -95,6 +98,7 @@ func frenchSet() TranslationSet {
|
|||
NoContainer: "Aucun conteneur",
|
||||
NoImages: "Aucune images",
|
||||
NoVolumes: "Aucun volumes",
|
||||
NoNetworks: "Aucun réseaux",
|
||||
|
||||
ConfirmQuit: "Êtes vous certain de vouloir quitter?",
|
||||
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 ?",
|
||||
ConfirmRemoveContainers: "Êtes-vous certain de vouloir supprimer tous les conteneurs ?",
|
||||
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 ?",
|
||||
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`)",
|
||||
|
|
|
|||
|
|
@ -44,9 +44,11 @@ func germanSet() TranslationSet {
|
|||
ViewLogs: "zeige Protokolle",
|
||||
RemoveImage: "entferne Image",
|
||||
RemoveVolume: "entferne Volume",
|
||||
RemoveNetwork: "entferne Netzwerk",
|
||||
RemoveWithoutPrune: "entfernen, ohne die unmarkierten Eltern zu entfernen",
|
||||
PruneContainers: "entferne verlassene Container",
|
||||
PruneVolumes: "entferne unbenutzte Volumes",
|
||||
PruneNetworks: "entferne unbenutzte Netzwerk",
|
||||
PruneImages: "entferne unbenutzte Images",
|
||||
ViewRestartOptions: "zeige Neustartoptionen",
|
||||
RunCustomCommand: "führe vordefinierten benutzerdefinierten Befehl aus",
|
||||
|
|
@ -59,6 +61,7 @@ func germanSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Alleinstehende Container",
|
||||
ImagesTitle: "Images",
|
||||
VolumesTitle: "Volumes",
|
||||
NetworksTitle: "Netzwerk",
|
||||
CustomCommandTitle: "Benutzerdefinierter Befehl",
|
||||
ErrorTitle: "Fehler",
|
||||
LogsTitle: "Protokoll",
|
||||
|
|
@ -77,6 +80,7 @@ func germanSet() TranslationSet {
|
|||
NoContainer: "Kein Container",
|
||||
NoImages: "Keine Images",
|
||||
NoVolumes: "Keine Volumes",
|
||||
NoNetworks: "Keine Netzwerk",
|
||||
|
||||
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?",
|
||||
|
|
@ -84,6 +88,7 @@ func germanSet() TranslationSet {
|
|||
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?",
|
||||
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?",
|
||||
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`)",
|
||||
|
|
|
|||
|
|
@ -44,9 +44,11 @@ func polishSet() TranslationSet {
|
|||
ViewLogs: "pokaż logi",
|
||||
RemoveImage: "usuń obraz",
|
||||
RemoveVolume: "usuń wolumen",
|
||||
RemoveNetwork: "usuń seici",
|
||||
RemoveWithoutPrune: "usuń bez kasowania nieoznaczonych rodziców",
|
||||
PruneContainers: "wyczyść kontenery",
|
||||
PruneVolumes: "wyczyść nieużywane wolumeny",
|
||||
PruneNetworks: "wyczyść nieużywane sieci",
|
||||
PruneImages: "wyczyść nieużywane obrazy",
|
||||
ViewRestartOptions: "pokaż opcje restartu",
|
||||
RunCustomCommand: "wykonaj predefiniowaną własną komende",
|
||||
|
|
@ -59,6 +61,7 @@ func polishSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Kontenery samodzielne",
|
||||
ImagesTitle: "Obrazy",
|
||||
VolumesTitle: "Wolumeny",
|
||||
NetworksTitle: "Seici",
|
||||
CustomCommandTitle: "Własna komenda:",
|
||||
ErrorTitle: "Błąd",
|
||||
LogsTitle: "Logi",
|
||||
|
|
@ -77,6 +80,7 @@ func polishSet() TranslationSet {
|
|||
NoContainer: "Brak kontenera",
|
||||
NoImages: "Brak obrazów",
|
||||
NoVolumes: "Brak wolumenów",
|
||||
NoNetworks: "Brak sieci",
|
||||
|
||||
ConfirmQuit: "Na pewno chcesz wyjść?",
|
||||
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?",
|
||||
ConfirmPruneContainers: "Na pewno wyczyścić wszystkie nieuruchomione kontenery?",
|
||||
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?",
|
||||
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`)",
|
||||
|
|
|
|||
|
|
@ -44,9 +44,11 @@ func turkishSet() TranslationSet {
|
|||
ViewLogs: "kayıt defterini görüntüle",
|
||||
RemoveImage: "imajı kaldır",
|
||||
RemoveVolume: "alanı kaldır",
|
||||
RemoveNetwork: "ağı kaldır",
|
||||
RemoveWithoutPrune: "etkisiz ebeveynleri silmeden kaldır",
|
||||
PruneContainers: "çalışmayan konteynerleri temizle",
|
||||
PruneVolumes: "kullanılmayan alanları temizle",
|
||||
PruneNetworks: "kullanılmayan ağları temizle",
|
||||
PruneImages: "kullanılmayan imajları temizle",
|
||||
ViewRestartOptions: "yeniden başlatma seçeneklerini görüntüle",
|
||||
RunCustomCommand: "önceden tanımlanmış özel komutu çalıştır",
|
||||
|
|
@ -59,6 +61,7 @@ func turkishSet() TranslationSet {
|
|||
StandaloneContainersTitle: "Bağımsız Konteynerler",
|
||||
ImagesTitle: "Imajlar",
|
||||
VolumesTitle: "Alanlar",
|
||||
NetworksTitle: "Ağları",
|
||||
CustomCommandTitle: "Özel Komut:",
|
||||
ErrorTitle: "Hata",
|
||||
LogsTitle: "Kayitlar",
|
||||
|
|
@ -77,6 +80,7 @@ func turkishSet() TranslationSet {
|
|||
NoContainer: "Konteyner yok",
|
||||
NoImages: "Imajlar yok",
|
||||
NoVolumes: "Alanlar yok",
|
||||
NoNetworks: "Ağları yok",
|
||||
|
||||
ConfirmQuit: "Çıkmak istediğine emin 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?",
|
||||
ConfirmPruneContainers: "Durdurulan tüm konteynerları 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?",
|
||||
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)",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue