Layout improvements introducing optional CSD (disabled by default)

This commit is contained in:
Martin Wagner 2020-05-21 21:18:39 +02:00
parent 0df8f91279
commit 2090e33810
4 changed files with 347 additions and 226 deletions

View File

@ -1033,7 +1033,7 @@ class AlbumDialog(Gtk.Dialog):
#packing #packing
self.vbox.pack_start(scroll, True, True, 0) #vbox default widget of dialogs self.vbox.pack_start(scroll, True, True, 0) #vbox default widget of dialogs
self.vbox.set_spacing(6) self.vbox.set_spacing(3)
self.show_all() self.show_all()
def open(self): def open(self):
@ -1723,6 +1723,89 @@ class PlaylistView(Gtk.Box):
def on_disconnected(self, *args): def on_disconnected(self, *args):
self.playlist_version=None self.playlist_version=None
class CoverLyricsOSD(Gtk.Overlay):
def __init__(self, client, settings, window):
Gtk.Overlay.__init__(self)
#adding vars
self.client=client
self.settings=settings
self.window=window
self.hide_timeout_id=None
#cover
self.cover=MainCover(self.client, self.settings, self.window)
self.cover.set_property("border-width", 3)
#lyrics button
self.lyrics_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("media-view-subtitles-symbolic", Gtk.IconSize.LARGE_TOOLBAR))
self.lyrics_button.set_label(_("Show lyrics"))
self.lyrics_button.set_margin_top(12)
style_context=self.lyrics_button.get_style_context()
style_context.add_class("osd")
#revealer
self.revealer=Gtk.Revealer()
self.revealer.set_halign(3)
self.revealer.set_valign(1)
self.revealer.add(self.lyrics_button)
#event box
self.event_box=Gtk.EventBox()
self.event_box.set_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.event_box.add(self.cover)
#packing
self.add(self.event_box)
self.add_overlay(self.revealer)
#connect
self.lyrics_button.connect("clicked", self.on_lyrics_clicked)
self.motion_notify_event=self.event_box.connect("motion-notify-event", self.on_motion_notify_event)
self.lyrics_button.connect("enter-notify-event", self.on_enter_notify_event)
self.lyrics_button.connect("leave-notify-event", self.on_leave_notify_event)
self.client.emitter.connect("disconnected", self.on_disconnected)
self.client.emitter.connect("reconnected", self.on_reconnected)
self.event_box.handler_block(self.motion_notify_event)
def on_reconnected(self, *args):
self.event_box.handler_unblock(self.motion_notify_event)
def on_disconnected(self, *args):
self.cover.clear()
self.event_box.handler_block(self.motion_notify_event)
self.hide_lyrics_button()
try:
self.lyrics_win.destroy()
except:
pass
def hide_lyrics_button(self, *args):
self.revealer.set_reveal_child(False)
self.hide_timeout_id=None
return False
def on_motion_notify_event(self, *args):
self.revealer.set_reveal_child(True)
if not self.hide_timeout_id == None:
GLib.source_remove(self.hide_timeout_id)
self.hide_timeout_id=GLib.timeout_add(1000, self.hide_lyrics_button)
def on_enter_notify_event(self, *args):
if not self.hide_timeout_id == None:
GLib.source_remove(self.hide_timeout_id)
self.hide_timeout_id=None
def on_leave_notify_event(self, *args):
if not self.hide_timeout_id == None:
GLib.source_remove(self.hide_timeout_id)
self.hide_timeout_id=GLib.timeout_add(1000, self.hide_lyrics_button)
def on_lyrics_clicked(self, widget):
self.hide_lyrics_button()
self.lyrics_win=LyricsWindow(self.client, self.settings)
self.add_overlay(self.lyrics_win)
class Browser(Gtk.Box): class Browser(Gtk.Box):
def __init__(self, client, settings, window): def __init__(self, client, settings, window):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL) Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
@ -1731,7 +1814,12 @@ class Browser(Gtk.Box):
self.client=client self.client=client
self.settings=settings self.settings=settings
self.window=window self.window=window
self.icon_size=self.settings.get_gtk_icon_size("icon-size") self.use_csd=self.settings.get_boolean("use-csd")
if self.use_csd:
self.icon_size=Gtk.IconSize.BUTTON
else:
self.icon_size=self.settings.get_gtk_icon_size("icon-size")
#widgets #widgets
self.back_to_album_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("go-previous-symbolic", self.icon_size)) self.back_to_album_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("go-previous-symbolic", self.icon_size))
@ -1742,26 +1830,9 @@ class Browser(Gtk.Box):
self.artist_view=ArtistView(self.client, self.settings, self.genre_select) self.artist_view=ArtistView(self.client, self.settings, self.genre_select)
self.search=SearchWindow(self.client) self.search=SearchWindow(self.client)
self.album_view=AlbumView(self.client, self.settings, self.genre_select, self.window) self.album_view=AlbumView(self.client, self.settings, self.genre_select, self.window)
self.main_cover=MainCover(self.client, self.settings, self.window) self.cover=CoverLyricsOSD(self.client, self.settings, self.window)
self.main_cover.set_property("border-width", 3)
self.playlist_view=PlaylistView(self.client, self.settings) self.playlist_view=PlaylistView(self.client, self.settings)
#lyrics button
self.lyrics_button=Gtk.ToggleButton(image=Gtk.Image.new_from_icon_name("media-view-subtitles-symbolic", Gtk.IconSize.LARGE_TOOLBAR))
self.lyrics_button.set_tooltip_text(_("Show lyrics"))
self.lyrics_button.set_halign(2)
self.lyrics_button.set_valign(1)
style_context=self.lyrics_button.get_style_context()
provider=Gtk.CssProvider()
css=b"""* {opacity: 0.7;}"""
provider.load_from_data(css)
style_context.add_provider(provider, 800)
#lyrics cover overlay
self.overlay=Gtk.Overlay()
self.overlay.add(self.main_cover)
self.overlay.add_overlay(self.lyrics_button)
#connect #connect
self.back_to_album_button.connect("clicked", self.back_to_album) self.back_to_album_button.connect("clicked", self.back_to_album)
self.search_button.connect("toggled", self.on_search_toggled) self.search_button.connect("toggled", self.on_search_toggled)
@ -1769,37 +1840,35 @@ class Browser(Gtk.Box):
self.settings.connect("changed::playlist-right", self.on_playlist_pos_settings_changed) self.settings.connect("changed::playlist-right", self.on_playlist_pos_settings_changed)
self.client.emitter.connect("disconnected", self.on_disconnected) self.client.emitter.connect("disconnected", self.on_disconnected)
self.client.emitter.connect("reconnected", self.on_reconnected) self.client.emitter.connect("reconnected", self.on_reconnected)
self.lyrics_button.connect("toggled", self.on_lyrics_toggled)
#packing #packing
hbox=Gtk.Box(spacing=6)
hbox.set_property("border-width", 6)
hbox.pack_start(self.back_to_album_button, False, False, 0)
hbox.pack_start(self.genre_select, True, True, 0)
hbox.pack_start(self.search_button, False, False, 0)
self.stack=Gtk.Stack() self.stack=Gtk.Stack()
self.stack.set_transition_type(1) self.stack.set_transition_type(1)
self.stack.add_named(self.album_view, "albums") self.stack.add_named(self.album_view, "albums")
self.stack.add_named(self.search, "search") self.stack.add_named(self.search, "search")
self.box1=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.box1.pack_start(hbox, False, False, 0)
self.box1.pack_start(Gtk.Separator.new(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
self.box1.pack_start(self.artist_view, True, True, 0)
self.paned0=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL) self.paned0=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
self.paned0.set_wide_handle(True) self.paned1=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
self.paned0.pack1(self.overlay, False, False) self.paned2=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
self.paned0.pack1(self.cover, False, False)
self.paned0.pack2(self.playlist_view, True, False) self.paned0.pack2(self.playlist_view, True, False)
self.paned1=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
self.paned1.set_wide_handle(True)
self.paned2=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL) if self.use_csd:
self.paned2.set_wide_handle(True) self.paned1.pack1(self.artist_view, False, False)
else:
self.paned1.pack1(self.box1, False, False) hbox=Gtk.Box(spacing=6)
hbox.set_property("border-width", 6)
hbox.pack_start(self.back_to_album_button, False, False, 0)
hbox.pack_start(self.genre_select, True, True, 0)
hbox.pack_start(self.search_button, False, False, 0)
box1=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
box1.pack_start(hbox, False, False, 0)
box1.pack_start(Gtk.Separator.new(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
box1.pack_start(self.artist_view, True, True, 0)
self.paned1.pack1(box1, False, False)
self.paned1.pack2(self.stack, True, False) self.paned1.pack2(self.stack, True, False)
self.paned2.pack1(self.paned1, True, False) self.paned2.pack1(self.paned1, True, False)
@ -1825,8 +1894,8 @@ class Browser(Gtk.Box):
self.genre_select.clear() self.genre_select.clear()
self.artist_view.clear() self.artist_view.clear()
self.album_view.clear() self.album_view.clear()
self.search.clear()
self.playlist_view.clear() self.playlist_view.clear()
self.main_cover.clear()
def search_started(self): def search_started(self):
return self.search.started() return self.search.started()
@ -1874,7 +1943,6 @@ class Browser(Gtk.Box):
def on_reconnected(self, *args): def on_reconnected(self, *args):
self.back_to_album_button.set_sensitive(True) self.back_to_album_button.set_sensitive(True)
self.search_button.set_sensitive(True) self.search_button.set_sensitive(True)
self.lyrics_button.set_sensitive(True)
self.genre_select.set_sensitive(True) self.genre_select.set_sensitive(True)
def on_disconnected(self, *args): def on_disconnected(self, *args):
@ -1882,8 +1950,6 @@ class Browser(Gtk.Box):
self.back_to_album_button.set_sensitive(False) self.back_to_album_button.set_sensitive(False)
self.search_button.set_active(False) self.search_button.set_active(False)
self.search_button.set_sensitive(False) self.search_button.set_sensitive(False)
self.lyrics_button.set_active(False)
self.lyrics_button.set_sensitive(False)
self.genre_select.set_sensitive(False) self.genre_select.set_sensitive(False)
def on_artists_changed(self, *args): def on_artists_changed(self, *args):
@ -1899,15 +1965,6 @@ class Browser(Gtk.Box):
self.paned0.set_orientation(Gtk.Orientation.HORIZONTAL) self.paned0.set_orientation(Gtk.Orientation.HORIZONTAL)
self.paned2.set_orientation(Gtk.Orientation.VERTICAL) self.paned2.set_orientation(Gtk.Orientation.VERTICAL)
def on_lyrics_toggled(self, widget):
if widget.get_active():
size=self.settings.get_int("track-cover")
self.lyrics_win=LyricsWindow(self.client, self.settings, size, size)
self.overlay.add_overlay(self.lyrics_win)
self.overlay.reorder_overlay(self.lyrics_win, 0)
else:
self.lyrics_win.destroy()
class ProfileSettings(Gtk.Grid): class ProfileSettings(Gtk.Grid):
def __init__(self, parent, settings): def __init__(self, parent, settings):
Gtk.Grid.__init__(self) Gtk.Grid.__init__(self)
@ -2122,7 +2179,8 @@ class GeneralSettings(Gtk.Box):
#check buttons #check buttons
check_buttons={} check_buttons={}
settings_list=[(_("Show stop button"), "show-stop"), \ settings_list=[(_("Use Client-side decoration"), "use-csd"), \
(_("Show stop button"), "show-stop"), \
(_("Show initials in artist view"), "show-initials"), \ (_("Show initials in artist view"), "show-initials"), \
(_("Show tooltips in album view"), "show-album-view-tooltips"), \ (_("Show tooltips in album view"), "show-album-view-tooltips"), \
(_("Use 'Album Artist' tag"), "use-album-artist"), \ (_("Use 'Album Artist' tag"), "use-album-artist"), \
@ -2166,6 +2224,7 @@ class GeneralSettings(Gtk.Box):
#packing #packing
self.pack_start(view_heading, True, True, 0) self.pack_start(view_heading, True, True, 0)
self.pack_start(check_buttons["use-csd"], True, True, 0)
self.pack_start(check_buttons["show-stop"], True, True, 0) self.pack_start(check_buttons["show-stop"], True, True, 0)
self.pack_start(check_buttons["show-initials"], True, True, 0) self.pack_start(check_buttons["show-initials"], True, True, 0)
self.pack_start(check_buttons["show-album-view-tooltips"], True, True, 0) self.pack_start(check_buttons["show-album-view-tooltips"], True, True, 0)
@ -2335,7 +2394,7 @@ class SettingsDialog(Gtk.Dialog):
tabs.append_page(profiles, Gtk.Label(label=_("Profiles"))) tabs.append_page(profiles, Gtk.Label(label=_("Profiles")))
tabs.append_page(playlist, Gtk.Label(label=_("Playlist"))) tabs.append_page(playlist, Gtk.Label(label=_("Playlist")))
self.vbox.pack_start(tabs, True, True, 0) #vbox default widget of dialogs self.vbox.pack_start(tabs, True, True, 0) #vbox default widget of dialogs
self.vbox.set_spacing(6) self.vbox.set_spacing(3)
self.show_all() self.show_all()
@ -2840,7 +2899,7 @@ class ServerStats(Gtk.Dialog):
frame=Gtk.Frame() frame=Gtk.Frame()
frame.add(self.treeview) frame.add(self.treeview)
self.vbox.pack_start(frame, True, True, 0) self.vbox.pack_start(frame, True, True, 0)
self.vbox.set_spacing(6) self.vbox.set_spacing(3)
self.show_all() self.show_all()
self.run() self.run()
@ -2910,6 +2969,10 @@ class SearchWindow(Gtk.Box):
def started(self): def started(self):
return self.search_entry.has_focus() return self.search_entry.has_focus()
def clear(self, *args):
self.songs_view.clear()
self.search_entry.set_text("")
def on_search_changed(self, widget): def on_search_changed(self, widget):
self.songs_view.clear() self.songs_view.clear()
self.label.set_text("") self.label.set_text("")
@ -2934,15 +2997,9 @@ class SearchWindow(Gtk.Box):
def on_open_clicked(self, *args): def on_open_clicked(self, *args):
self.client.files_to_playlist(self.songs_view.get_files(), False) self.client.files_to_playlist(self.songs_view.get_files(), False)
class LyricsWindow(Gtk.Frame): class LyricsWindow(Gtk.Overlay):
def __init__(self, client, settings, width, height): def __init__(self, client, settings):
Gtk.Frame.__init__(self) Gtk.Overlay.__init__(self)
style_context=self.get_style_context()
provider=Gtk.CssProvider()
css=b"""* {border: 0px; background-color: @theme_base_color; opacity: 0.9;}"""
provider.load_from_data(css)
style_context.add_provider(provider, 800)
#adding vars #adding vars
self.settings=settings self.settings=settings
@ -2954,19 +3011,40 @@ class LyricsWindow(Gtk.Frame):
self.label.set_yalign(0) self.label.set_yalign(0)
self.label.set_xalign(0) self.label.set_xalign(0)
#connect #scroll
self.file_changed=self.client.emitter.connect("playing_file_changed", self.refresh)
self.connect("destroy", self.remove_handlers)
#packing
self.scroll=Gtk.ScrolledWindow() self.scroll=Gtk.ScrolledWindow()
self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.scroll.add(self.label) self.scroll.add(self.label)
self.scroll.set_margin_start(5) self.scroll.set_margin_start(5)
self.add(self.scroll)
#frame
frame=Gtk.Frame()
style_context=frame.get_style_context()
provider=Gtk.CssProvider()
css=b"""* {border: 0px; background-color: @theme_base_color; opacity: 0.9;}"""
provider.load_from_data(css)
style_context.add_provider(provider, 800)
#close button
close_button=Gtk.ToggleButton(image=Gtk.Image.new_from_icon_name("window-close-symbolic", Gtk.IconSize.LARGE_TOOLBAR))
close_button.set_margin_top(12)
close_button.set_margin_end(12)
style_context=close_button.get_style_context()
style_context.add_class("osd")
close_button.set_halign(2)
close_button.set_valign(1)
#connect
self.file_changed=self.client.emitter.connect("playing_file_changed", self.refresh)
self.connect("destroy", self.remove_handlers)
close_button.connect("clicked", self.on_close_button_clicked)
#packing
frame.add(self.scroll)
self.add(frame)
self.add_overlay(close_button)
self.show_all() self.show_all()
self.refresh() self.refresh()
def remove_handlers(self, *args): def remove_handlers(self, *args):
@ -3014,6 +3092,9 @@ class LyricsWindow(Gtk.Frame):
except: except:
return output.encode('utf-8') return output.encode('utf-8')
def on_close_button_clicked(self, *args):
self.destroy()
class MainWindow(Gtk.ApplicationWindow): class MainWindow(Gtk.ApplicationWindow):
def __init__(self, app, client, settings): def __init__(self, app, client, settings):
Gtk.ApplicationWindow.__init__(self, title=("mpdevil"), application=app) Gtk.ApplicationWindow.__init__(self, title=("mpdevil"), application=app)
@ -3026,6 +3107,7 @@ class MainWindow(Gtk.ApplicationWindow):
self.app=app self.app=app
self.client=client self.client=client
self.icon_size=self.settings.get_gtk_icon_size("icon-size") self.icon_size=self.settings.get_gtk_icon_size("icon-size")
self.use_csd=self.settings.get_boolean("use-csd")
#MPRIS #MPRIS
DBusGMainLoop(set_as_default=True) DBusGMainLoop(set_as_default=True)
@ -3069,7 +3151,6 @@ class MainWindow(Gtk.ApplicationWindow):
menu_popover=Gtk.Popover.new_from_model(menu_button, menu) menu_popover=Gtk.Popover.new_from_model(menu_button, menu)
menu_button.set_popover(menu_popover) menu_button.set_popover(menu_popover)
menu_button.set_tooltip_text(_("Menu")) menu_button.set_tooltip_text(_("Menu"))
menu_button.set_image(image=Gtk.Image.new_from_icon_name("open-menu-symbolic", self.icon_size))
#connect #connect
self.settings.connect("changed::profiles", self.on_settings_changed) self.settings.connect("changed::profiles", self.on_settings_changed)
@ -3089,9 +3170,24 @@ class MainWindow(Gtk.ApplicationWindow):
self.vbox.pack_start(self.action_bar, False, False, 0) self.vbox.pack_start(self.action_bar, False, False, 0)
self.action_bar.pack_start(self.control) self.action_bar.pack_start(self.control)
self.action_bar.pack_start(self.progress) self.action_bar.pack_start(self.progress)
self.action_bar.pack_start(self.profiles)
self.action_bar.pack_start(self.play_opts) if self.use_csd:
self.action_bar.pack_end(menu_button) menu_button.set_image(image=Gtk.Image.new_from_icon_name("open-menu-symbolic", Gtk.IconSize.BUTTON))
self.header_bar=Gtk.HeaderBar()
self.header_bar.set_show_close_button(True)
self.header_bar.set_title("mpdevil")
self.set_titlebar(self.header_bar)
self.header_bar.pack_start(self.browser.back_to_album_button)
self.header_bar.pack_start(self.browser.genre_select)
self.header_bar.pack_end(menu_button)
self.header_bar.pack_end(self.profiles)
self.header_bar.pack_end(self.browser.search_button)
self.action_bar.pack_end(self.play_opts)
else:
menu_button.set_image(image=Gtk.Image.new_from_icon_name("open-menu-symbolic", self.icon_size))
self.action_bar.pack_start(self.profiles)
self.action_bar.pack_start(self.play_opts)
self.action_bar.pack_end(menu_button)
self.add(self.vbox) self.add(self.vbox)
@ -3109,7 +3205,11 @@ class MainWindow(Gtk.ApplicationWindow):
date=" ("+song["date"]+")" date=" ("+song["date"]+")"
else: else:
date="" date=""
self.set_title(song["artist"]+" - "+song["title"]+" - "+song["album"]+date) if self.use_csd:
self.header_bar.set_title(song["title"]+" - "+song["artist"])
self.header_bar.set_subtitle(song["album"]+date)
else:
self.set_title(song["title"]+""+song["artist"]+" - "+song["album"]+date)
if self.settings.get_boolean("send-notify"): if self.settings.get_boolean("send-notify"):
if not self.is_active() and self.client.status()["state"] == "play": if not self.is_active() and self.client.status()["state"] == "play":
notify=Notify.Notification.new(song["title"], song["artist"]+"\n"+song["album"]+date) notify=Notify.Notification.new(song["title"], song["artist"]+"\n"+song["album"]+date)
@ -3117,7 +3217,11 @@ class MainWindow(Gtk.ApplicationWindow):
notify.set_image_from_pixbuf(pixbuf) notify.set_image_from_pixbuf(pixbuf)
notify.show() notify.show()
except: except:
self.set_title("mpdevil") if self.use_csd:
self.header_bar.set_title("mpdevil")
self.header_bar.set_subtitle("")
else:
self.set_title("mpdevil")
def on_reconnected(self, *args): def on_reconnected(self, *args):
self.dbus_service.acquire_name() self.dbus_service.acquire_name()
@ -3128,7 +3232,11 @@ class MainWindow(Gtk.ApplicationWindow):
def on_disconnected(self, *args): def on_disconnected(self, *args):
self.dbus_service.release_name() self.dbus_service.release_name()
self.set_title("mpdevil (not connected)") if self.use_csd:
self.header_bar.set_title("mpdevil")
self.header_bar.set_subtitle("(not connected)")
else:
self.set_title("mpdevil (not connected)")
self.songid_playing=None self.songid_playing=None
self.progress.set_sensitive(False) self.progress.set_sensitive(False)
self.control.set_sensitive(False) self.control.set_sensitive(False)

View File

@ -41,6 +41,11 @@
<summary>Size of button icons in control bar</summary> <summary>Size of button icons in control bar</summary>
<description></description> <description></description>
</key> </key>
<key type="b" name="use-csd">
<default>false</default>
<summary>Use CSD for main window</summary>
<description></description>
</key>
<key type="b" name="show-stop"> <key type="b" name="show-stop">
<default>false</default> <default>false</default>
<summary>Show stop button</summary> <summary>Show stop button</summary>

152
po/de.po
View File

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-18 20:45+0200\n" "POT-Creation-Date: 2020-05-21 21:16+0200\n"
"PO-Revision-Date: 2020-05-18 20:46+0200\n" "PO-Revision-Date: 2020-05-21 21:17+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de\n" "Language: de\n"
@ -30,23 +30,23 @@ msgstr "Unbekannter Interpret"
msgid "Unknown Album" msgid "Unknown Album"
msgstr "Unbekanntes Album" msgstr "Unbekanntes Album"
#: mpdevil.py:919 mpdevil.py:1543 mpdevil.py:2228 #: mpdevil.py:919 mpdevil.py:1549 mpdevil.py:2294
msgid "No" msgid "No"
msgstr "Nr." msgstr "Nr."
#: mpdevil.py:924 mpdevil.py:1549 mpdevil.py:2228 #: mpdevil.py:924 mpdevil.py:1555 mpdevil.py:2294
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: mpdevil.py:929 mpdevil.py:1152 mpdevil.py:1552 mpdevil.py:2228 #: mpdevil.py:929 mpdevil.py:1152 mpdevil.py:1558 mpdevil.py:2294
msgid "Artist" msgid "Artist"
msgstr "Interpret" msgstr "Interpret"
#: mpdevil.py:934 mpdevil.py:1555 mpdevil.py:2228 #: mpdevil.py:934 mpdevil.py:1561 mpdevil.py:2294
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: mpdevil.py:940 mpdevil.py:1558 mpdevil.py:2228 #: mpdevil.py:940 mpdevil.py:1564 mpdevil.py:2294
msgid "Length" msgid "Length"
msgstr "Länge" msgstr "Länge"
@ -62,191 +62,195 @@ msgstr "Albuminterpret"
msgid "all artists" msgid "all artists"
msgstr "Alle Interpreten" msgstr "Alle Interpreten"
#: mpdevil.py:1289 #: mpdevil.py:1295
#, python-format #, python-format
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)" msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
msgstr "%(total_tracks)i Titel auf %(discs)i CDs (%(total_length)s)" msgstr "%(total_tracks)i Titel auf %(discs)i CDs (%(total_length)s)"
#: mpdevil.py:1291 mpdevil.py:1641 #: mpdevil.py:1297 mpdevil.py:1647
#, python-format #, python-format
msgid "%(total_tracks)i titles (%(total_length)s)" msgid "%(total_tracks)i titles (%(total_length)s)"
msgstr "%(total_tracks)i Titel (%(total_length)s)" msgstr "%(total_tracks)i Titel (%(total_length)s)"
#: mpdevil.py:1546 mpdevil.py:2228 #: mpdevil.py:1552 mpdevil.py:2294
msgid "Disc" msgid "Disc"
msgstr "CD" msgstr "CD"
#: mpdevil.py:1561 mpdevil.py:2228 #: mpdevil.py:1567 mpdevil.py:2294
msgid "Year" msgid "Year"
msgstr "Jahr" msgstr "Jahr"
#: mpdevil.py:1564 mpdevil.py:2228 #: mpdevil.py:1570 mpdevil.py:2294
msgid "Genre" msgid "Genre"
msgstr "Genre" msgstr "Genre"
#: mpdevil.py:1732 #: mpdevil.py:1742
msgid "Back to current album"
msgstr "Zurück zu aktuellem Album"
#: mpdevil.py:1734
msgid "Search"
msgstr "Suche"
#: mpdevil.py:1745
msgid "Show lyrics" msgid "Show lyrics"
msgstr "Zeige Liedtext" msgstr "Zeige Liedtext"
#: mpdevil.py:1939 #: mpdevil.py:1826
msgid "Back to current album"
msgstr "Zurück zu aktuellem Album"
#: mpdevil.py:1828
msgid "Search"
msgstr "Suche"
#: mpdevil.py:2003
msgid "Profile:" msgid "Profile:"
msgstr "Profil:" msgstr "Profil:"
#: mpdevil.py:1941 #: mpdevil.py:2005
msgid "Name:" msgid "Name:"
msgstr "Name:" msgstr "Name:"
#: mpdevil.py:1943 #: mpdevil.py:2007
msgid "Host:" msgid "Host:"
msgstr "Host:" msgstr "Host:"
#: mpdevil.py:1945 #: mpdevil.py:2009
msgid "Password:" msgid "Password:"
msgstr "Passwort:" msgstr "Passwort:"
#: mpdevil.py:1947 #: mpdevil.py:2011
msgid "Music lib:" msgid "Music lib:"
msgstr "Musikverzeichnis:" msgstr "Musikverzeichnis:"
#: mpdevil.py:2034 #: mpdevil.py:2098
msgid "Choose directory" msgid "Choose directory"
msgstr "Verzeichnis Wählen" msgstr "Verzeichnis Wählen"
#: mpdevil.py:2072 #: mpdevil.py:2136
msgid "Main cover size:" msgid "Main cover size:"
msgstr "Größe des Haupt-Covers:" msgstr "Größe des Haupt-Covers:"
#: mpdevil.py:2076 #: mpdevil.py:2140
msgid "Album view cover size:" msgid "Album view cover size:"
msgstr "Covergröße in Albumliste:" msgstr "Covergröße in Albumliste:"
#: mpdevil.py:2080 #: mpdevil.py:2144
msgid "Button icon size:" msgid "Button icon size:"
msgstr "Symbolgröße der Knöpfe:" msgstr "Symbolgröße der Knöpfe:"
#: mpdevil.py:2082 #: mpdevil.py:2146
msgid "(restart required)" msgid "(restart required)"
msgstr "(Neustart erforderlich)" msgstr "(Neustart erforderlich)"
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "Sort albums by:" msgid "Sort albums by:"
msgstr "Sortiere Alben nach:" msgstr "Sortiere Alben nach:"
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "name" msgid "name"
msgstr "Name" msgstr "Name"
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "year" msgid "year"
msgstr "Jahr" msgstr "Jahr"
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "Position of playlist:" msgid "Position of playlist:"
msgstr "Wiedergabelistenposition:" msgstr "Wiedergabelistenposition:"
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "bottom" msgid "bottom"
msgstr "unten" msgstr "unten"
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "right" msgid "right"
msgstr "rechts" msgstr "rechts"
#: mpdevil.py:2110 #: mpdevil.py:2174
msgid "<b>View</b>" msgid "<b>View</b>"
msgstr "<b>Ansicht</b>" msgstr "<b>Ansicht</b>"
#: mpdevil.py:2113 #: mpdevil.py:2177
msgid "<b>Behavior</b>" msgid "<b>Behavior</b>"
msgstr "<b>Verhalten</b>" msgstr "<b>Verhalten</b>"
#: mpdevil.py:2118 #: mpdevil.py:2182
msgid "Use Client-side decoration"
msgstr "Benutze \"Client-side decoration\""
#: mpdevil.py:2183
msgid "Show stop button" msgid "Show stop button"
msgstr "Zeige Stopp-Knopf" msgstr "Zeige Stopp-Knopf"
#: mpdevil.py:2119 #: mpdevil.py:2184
msgid "Show initials in artist view" msgid "Show initials in artist view"
msgstr "Zeige Anfangsbuchstaben in Interpretenliste" msgstr "Zeige Anfangsbuchstaben in Interpretenliste"
#: mpdevil.py:2120 #: mpdevil.py:2185
msgid "Show tooltips in album view" msgid "Show tooltips in album view"
msgstr "Zeige Tooltips in Albumliste" msgstr "Zeige Tooltips in Albumliste"
#: mpdevil.py:2121 #: mpdevil.py:2186
msgid "Use 'Album Artist' tag" msgid "Use 'Album Artist' tag"
msgstr "Benutze \"Album Artist\" Tag" msgstr "Benutze \"Album Artist\" Tag"
#: mpdevil.py:2122 #: mpdevil.py:2187
msgid "Send notification on title change" msgid "Send notification on title change"
msgstr "Sende Benachrichtigung bei Titelwechsel" msgstr "Sende Benachrichtigung bei Titelwechsel"
#: mpdevil.py:2123 #: mpdevil.py:2188
msgid "Stop playback on quit" msgid "Stop playback on quit"
msgstr "Wiedergabe beim Beenden stoppen" msgstr "Wiedergabe beim Beenden stoppen"
#: mpdevil.py:2124 #: mpdevil.py:2189
msgid "Play selected albums and titles immediately" msgid "Play selected albums and titles immediately"
msgstr "Ausgewählte Alben und Titel sofort abspielen" msgstr "Ausgewählte Alben und Titel sofort abspielen"
#: mpdevil.py:2200 #: mpdevil.py:2266
msgid "Choose the order of information to appear in the playlist:" msgid "Choose the order of information to appear in the playlist:"
msgstr "" msgstr ""
"Lege die Reihenfolge fest, in der Informationen in der Wiedergabeliste " "Lege die Reihenfolge fest, in der Informationen in der Wiedergabeliste "
"angezeigt werden sollen:" "angezeigt werden sollen:"
#: mpdevil.py:2313 mpdevil.py:3055 #: mpdevil.py:2379 mpdevil.py:3144
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: mpdevil.py:2327 #: mpdevil.py:2393
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: mpdevil.py:2328 #: mpdevil.py:2394
msgid "Profiles" msgid "Profiles"
msgstr "Profile" msgstr "Profile"
#: mpdevil.py:2329 #: mpdevil.py:2395
msgid "Playlist" msgid "Playlist"
msgstr "Wiedergabeliste" msgstr "Wiedergabeliste"
#: mpdevil.py:2580 #: mpdevil.py:2646
msgid "Random mode" msgid "Random mode"
msgstr "Zufallsmodus" msgstr "Zufallsmodus"
#: mpdevil.py:2582 #: mpdevil.py:2648
msgid "Repeat mode" msgid "Repeat mode"
msgstr "Dauerschleife" msgstr "Dauerschleife"
#: mpdevil.py:2584 #: mpdevil.py:2650
msgid "Single mode" msgid "Single mode"
msgstr "Einzelstückmodus" msgstr "Einzelstückmodus"
#: mpdevil.py:2586 #: mpdevil.py:2652
msgid "Consume mode" msgid "Consume mode"
msgstr "Wiedergabeliste verbrauchen" msgstr "Wiedergabeliste verbrauchen"
#: mpdevil.py:2676 #: mpdevil.py:2742
msgid "Show additional information" msgid "Show additional information"
msgstr "Zeige weitere Informationen" msgstr "Zeige weitere Informationen"
#: mpdevil.py:2702 #: mpdevil.py:2768
msgid "MPD-Tag" msgid "MPD-Tag"
msgstr "MPD-Tag" msgstr "MPD-Tag"
#: mpdevil.py:2706 #: mpdevil.py:2772
msgid "Value" msgid "Value"
msgstr "Wert" msgstr "Wert"
#: mpdevil.py:2738 #: mpdevil.py:2804
#, python-format #, python-format
msgid "" msgid ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s " "%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
@ -255,64 +259,64 @@ msgstr ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s " "%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
"Kanäle, %(file_type)s" "Kanäle, %(file_type)s"
#: mpdevil.py:2792 #: mpdevil.py:2858
msgid "Stats" msgid "Stats"
msgstr "Statistik" msgstr "Statistik"
#: mpdevil.py:2866 #: mpdevil.py:2932
msgid "Add" msgid "Add"
msgstr "Hinzufügen" msgstr "Hinzufügen"
#: mpdevil.py:2869 #: mpdevil.py:2935
msgid "Play" msgid "Play"
msgstr "Wiedergabe" msgstr "Wiedergabe"
#: mpdevil.py:2872 #: mpdevil.py:2938
msgid "Open" msgid "Open"
msgstr "Öffnen" msgstr "Öffnen"
#: mpdevil.py:2911 #: mpdevil.py:2981
#, python-format #, python-format
msgid "hits: %i" msgid "hits: %i"
msgstr "Treffer: %i" msgstr "Treffer: %i"
#: mpdevil.py:2969 #: mpdevil.py:3054
msgid "searching..." msgid "searching..."
msgstr "suche..." msgstr "suche..."
#: mpdevil.py:2973 #: mpdevil.py:3058
msgid "lyrics not found" msgid "lyrics not found"
msgstr "Liedtext nicht gefunden" msgstr "Liedtext nicht gefunden"
#: mpdevil.py:3047 #: mpdevil.py:3136
msgid "Select profile" msgid "Select profile"
msgstr "Profil auswählen" msgstr "Profil auswählen"
#: mpdevil.py:3054 #: mpdevil.py:3143
msgid "Save window layout" msgid "Save window layout"
msgstr "Fensterlayout speichern" msgstr "Fensterlayout speichern"
#: mpdevil.py:3056 #: mpdevil.py:3145
msgid "Update database" msgid "Update database"
msgstr "Datenbank aktualisieren" msgstr "Datenbank aktualisieren"
#: mpdevil.py:3057 #: mpdevil.py:3146
msgid "Server stats" msgid "Server stats"
msgstr "Serverstatistik" msgstr "Serverstatistik"
#: mpdevil.py:3058 #: mpdevil.py:3147
msgid "About" msgid "About"
msgstr "Über" msgstr "Über"
#: mpdevil.py:3059 #: mpdevil.py:3148
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
#: mpdevil.py:3064 #: mpdevil.py:3153
msgid "Menu" msgid "Menu"
msgstr "Menü" msgstr "Menü"
#: mpdevil.py:3213 #: mpdevil.py:3338
msgid "A small MPD client written in python" msgid "A small MPD client written in python"
msgstr "" msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-18 20:45+0200\n" "POT-Creation-Date: 2020-05-21 21:16+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,23 +29,23 @@ msgstr ""
msgid "Unknown Album" msgid "Unknown Album"
msgstr "" msgstr ""
#: mpdevil.py:919 mpdevil.py:1543 mpdevil.py:2228 #: mpdevil.py:919 mpdevil.py:1549 mpdevil.py:2294
msgid "No" msgid "No"
msgstr "" msgstr ""
#: mpdevil.py:924 mpdevil.py:1549 mpdevil.py:2228 #: mpdevil.py:924 mpdevil.py:1555 mpdevil.py:2294
msgid "Title" msgid "Title"
msgstr "" msgstr ""
#: mpdevil.py:929 mpdevil.py:1152 mpdevil.py:1552 mpdevil.py:2228 #: mpdevil.py:929 mpdevil.py:1152 mpdevil.py:1558 mpdevil.py:2294
msgid "Artist" msgid "Artist"
msgstr "" msgstr ""
#: mpdevil.py:934 mpdevil.py:1555 mpdevil.py:2228 #: mpdevil.py:934 mpdevil.py:1561 mpdevil.py:2294
msgid "Album" msgid "Album"
msgstr "" msgstr ""
#: mpdevil.py:940 mpdevil.py:1558 mpdevil.py:2228 #: mpdevil.py:940 mpdevil.py:1564 mpdevil.py:2294
msgid "Length" msgid "Length"
msgstr "" msgstr ""
@ -61,252 +61,256 @@ msgstr ""
msgid "all artists" msgid "all artists"
msgstr "" msgstr ""
#: mpdevil.py:1289 #: mpdevil.py:1295
#, python-format #, python-format
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)" msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
msgstr "" msgstr ""
#: mpdevil.py:1291 mpdevil.py:1641 #: mpdevil.py:1297 mpdevil.py:1647
#, python-format #, python-format
msgid "%(total_tracks)i titles (%(total_length)s)" msgid "%(total_tracks)i titles (%(total_length)s)"
msgstr "" msgstr ""
#: mpdevil.py:1546 mpdevil.py:2228 #: mpdevil.py:1552 mpdevil.py:2294
msgid "Disc" msgid "Disc"
msgstr "" msgstr ""
#: mpdevil.py:1561 mpdevil.py:2228 #: mpdevil.py:1567 mpdevil.py:2294
msgid "Year" msgid "Year"
msgstr "" msgstr ""
#: mpdevil.py:1564 mpdevil.py:2228 #: mpdevil.py:1570 mpdevil.py:2294
msgid "Genre" msgid "Genre"
msgstr "" msgstr ""
#: mpdevil.py:1732 #: mpdevil.py:1742
msgid "Back to current album"
msgstr ""
#: mpdevil.py:1734
msgid "Search"
msgstr ""
#: mpdevil.py:1745
msgid "Show lyrics" msgid "Show lyrics"
msgstr "" msgstr ""
#: mpdevil.py:1939 #: mpdevil.py:1826
msgid "Back to current album"
msgstr ""
#: mpdevil.py:1828
msgid "Search"
msgstr ""
#: mpdevil.py:2003
msgid "Profile:" msgid "Profile:"
msgstr "" msgstr ""
#: mpdevil.py:1941 #: mpdevil.py:2005
msgid "Name:" msgid "Name:"
msgstr "" msgstr ""
#: mpdevil.py:1943 #: mpdevil.py:2007
msgid "Host:" msgid "Host:"
msgstr "" msgstr ""
#: mpdevil.py:1945 #: mpdevil.py:2009
msgid "Password:" msgid "Password:"
msgstr "" msgstr ""
#: mpdevil.py:1947 #: mpdevil.py:2011
msgid "Music lib:" msgid "Music lib:"
msgstr "" msgstr ""
#: mpdevil.py:2034 #: mpdevil.py:2098
msgid "Choose directory" msgid "Choose directory"
msgstr "" msgstr ""
#: mpdevil.py:2072 #: mpdevil.py:2136
msgid "Main cover size:" msgid "Main cover size:"
msgstr "" msgstr ""
#: mpdevil.py:2076 #: mpdevil.py:2140
msgid "Album view cover size:" msgid "Album view cover size:"
msgstr "" msgstr ""
#: mpdevil.py:2080 #: mpdevil.py:2144
msgid "Button icon size:" msgid "Button icon size:"
msgstr "" msgstr ""
#: mpdevil.py:2082 #: mpdevil.py:2146
msgid "(restart required)" msgid "(restart required)"
msgstr "" msgstr ""
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "Sort albums by:" msgid "Sort albums by:"
msgstr "" msgstr ""
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "name" msgid "name"
msgstr "" msgstr ""
#: mpdevil.py:2093 #: mpdevil.py:2157
msgid "year" msgid "year"
msgstr "" msgstr ""
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "Position of playlist:" msgid "Position of playlist:"
msgstr "" msgstr ""
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "bottom" msgid "bottom"
msgstr "" msgstr ""
#: mpdevil.py:2094 #: mpdevil.py:2158
msgid "right" msgid "right"
msgstr "" msgstr ""
#: mpdevil.py:2110 #: mpdevil.py:2174
msgid "<b>View</b>" msgid "<b>View</b>"
msgstr "" msgstr ""
#: mpdevil.py:2113 #: mpdevil.py:2177
msgid "<b>Behavior</b>" msgid "<b>Behavior</b>"
msgstr "" msgstr ""
#: mpdevil.py:2118 #: mpdevil.py:2182
msgid "Use Client-side decoration"
msgstr ""
#: mpdevil.py:2183
msgid "Show stop button" msgid "Show stop button"
msgstr "" msgstr ""
#: mpdevil.py:2119 #: mpdevil.py:2184
msgid "Show initials in artist view" msgid "Show initials in artist view"
msgstr "" msgstr ""
#: mpdevil.py:2120 #: mpdevil.py:2185
msgid "Show tooltips in album view" msgid "Show tooltips in album view"
msgstr "" msgstr ""
#: mpdevil.py:2121 #: mpdevil.py:2186
msgid "Use 'Album Artist' tag" msgid "Use 'Album Artist' tag"
msgstr "" msgstr ""
#: mpdevil.py:2122 #: mpdevil.py:2187
msgid "Send notification on title change" msgid "Send notification on title change"
msgstr "" msgstr ""
#: mpdevil.py:2123 #: mpdevil.py:2188
msgid "Stop playback on quit" msgid "Stop playback on quit"
msgstr "" msgstr ""
#: mpdevil.py:2124 #: mpdevil.py:2189
msgid "Play selected albums and titles immediately" msgid "Play selected albums and titles immediately"
msgstr "" msgstr ""
#: mpdevil.py:2200 #: mpdevil.py:2266
msgid "Choose the order of information to appear in the playlist:" msgid "Choose the order of information to appear in the playlist:"
msgstr "" msgstr ""
#: mpdevil.py:2313 mpdevil.py:3055 #: mpdevil.py:2379 mpdevil.py:3144
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: mpdevil.py:2327 #: mpdevil.py:2393
msgid "General" msgid "General"
msgstr "" msgstr ""
#: mpdevil.py:2328 #: mpdevil.py:2394
msgid "Profiles" msgid "Profiles"
msgstr "" msgstr ""
#: mpdevil.py:2329 #: mpdevil.py:2395
msgid "Playlist" msgid "Playlist"
msgstr "" msgstr ""
#: mpdevil.py:2580 #: mpdevil.py:2646
msgid "Random mode" msgid "Random mode"
msgstr "" msgstr ""
#: mpdevil.py:2582 #: mpdevil.py:2648
msgid "Repeat mode" msgid "Repeat mode"
msgstr "" msgstr ""
#: mpdevil.py:2584 #: mpdevil.py:2650
msgid "Single mode" msgid "Single mode"
msgstr "" msgstr ""
#: mpdevil.py:2586 #: mpdevil.py:2652
msgid "Consume mode" msgid "Consume mode"
msgstr "" msgstr ""
#: mpdevil.py:2676 #: mpdevil.py:2742
msgid "Show additional information" msgid "Show additional information"
msgstr "" msgstr ""
#: mpdevil.py:2702 #: mpdevil.py:2768
msgid "MPD-Tag" msgid "MPD-Tag"
msgstr "" msgstr ""
#: mpdevil.py:2706 #: mpdevil.py:2772
msgid "Value" msgid "Value"
msgstr "" msgstr ""
#: mpdevil.py:2738 #: mpdevil.py:2804
#, python-format #, python-format
msgid "" msgid ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s " "%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
"channels, %(file_type)s" "channels, %(file_type)s"
msgstr "" msgstr ""
#: mpdevil.py:2792 #: mpdevil.py:2858
msgid "Stats" msgid "Stats"
msgstr "" msgstr ""
#: mpdevil.py:2866 #: mpdevil.py:2932
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: mpdevil.py:2869 #: mpdevil.py:2935
msgid "Play" msgid "Play"
msgstr "" msgstr ""
#: mpdevil.py:2872 #: mpdevil.py:2938
msgid "Open" msgid "Open"
msgstr "" msgstr ""
#: mpdevil.py:2911 #: mpdevil.py:2981
#, python-format #, python-format
msgid "hits: %i" msgid "hits: %i"
msgstr "" msgstr ""
#: mpdevil.py:2969 #: mpdevil.py:3054
msgid "searching..." msgid "searching..."
msgstr "" msgstr ""
#: mpdevil.py:2973 #: mpdevil.py:3058
msgid "lyrics not found" msgid "lyrics not found"
msgstr "" msgstr ""
#: mpdevil.py:3047 #: mpdevil.py:3136
msgid "Select profile" msgid "Select profile"
msgstr "" msgstr ""
#: mpdevil.py:3054 #: mpdevil.py:3143
msgid "Save window layout" msgid "Save window layout"
msgstr "" msgstr ""
#: mpdevil.py:3056 #: mpdevil.py:3145
msgid "Update database" msgid "Update database"
msgstr "" msgstr ""
#: mpdevil.py:3057 #: mpdevil.py:3146
msgid "Server stats" msgid "Server stats"
msgstr "" msgstr ""
#: mpdevil.py:3058 #: mpdevil.py:3147
msgid "About" msgid "About"
msgstr "" msgstr ""
#: mpdevil.py:3059 #: mpdevil.py:3148
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
#: mpdevil.py:3064 #: mpdevil.py:3153
msgid "Menu" msgid "Menu"
msgstr "" msgstr ""
#: mpdevil.py:3213 #: mpdevil.py:3338
msgid "A small MPD client written in python" msgid "A small MPD client written in python"
msgstr "" msgstr ""