├── .gitignore ├── Makefile ├── README.md ├── TODO ├── etc ├── uxdgmenu │ └── menu.conf └── xdg │ └── menus │ ├── uxm-applications.menu │ └── uxm-rootmenu.menu ├── misc ├── inotifytest.txt └── wm_stats.txt ├── po ├── af.po ├── am.po ├── ang.po ├── ar.po ├── as.po ├── ast.po ├── az.po ├── az_IR.po ├── be.po ├── be@latin.po ├── bg.po ├── bn.po ├── bn_IN.po ├── bo.po ├── br.po ├── bs.po ├── ca.po ├── ca@valencia.po ├── crh.po ├── cs.po ├── cy.po ├── da.po ├── de.po ├── dz.po ├── el.po ├── en.po ├── en@shaw.po ├── en_CA.po ├── en_GB.po ├── eo.po ├── es.po ├── et.po ├── eu.po ├── fa.po ├── fi.po ├── fr.po ├── fur.po ├── fy.po ├── ga.po ├── gl.po ├── gu.po ├── gv.po ├── ha.po ├── he.po ├── hi.po ├── hr.po ├── hu.po ├── hy.po ├── ia.po ├── id.po ├── ig.po ├── io.po ├── is.po ├── it.po ├── ja.po ├── ka.po ├── kg.po ├── kk.po ├── km.po ├── kn.po ├── ko.po ├── ku.po ├── lg.po ├── li.po ├── lt.po ├── lv.po ├── mai.po ├── mg.po ├── mi.po ├── mk.po ├── ml.po ├── mn.po ├── mr.po ├── ms.po ├── my.po ├── nb.po ├── nds.po ├── ne.po ├── nl.po ├── nn.po ├── nso.po ├── oc.po ├── or.po ├── pa.po ├── pl.po ├── ps.po ├── pt.po ├── pt_BR.po ├── ro.po ├── ru.po ├── rw.po ├── si.po ├── sk.po ├── sl.po ├── sq.po ├── sr.po ├── sr@Latn.po ├── sr@ije.po ├── sr@latin.po ├── sv.po ├── ta.po ├── te.po ├── th.po ├── tk.po ├── tr.po ├── tt.po ├── ug.po ├── uk.po ├── ur.po ├── uz.po ├── uz@cyrillic.po ├── vi.po ├── wa.po ├── xh.po ├── yi.po ├── yo.po ├── zh_CN.po ├── zh_HK.po ├── zh_TW.po └── zu.po ├── quicktests ├── db │ └── schema.py ├── gmenu.txt ├── gmenu_apps.py ├── gmenu_apps.txt ├── gmenu_test.py ├── gtk │ └── pixbuf.py ├── index.py ├── mimetype.py ├── multiproc.py ├── path.py ├── perf │ ├── fadvise_compat.py │ ├── inifile.py │ ├── ioperf.py │ ├── menu.py │ └── path.c ├── recursion_test.py ├── xdg_apps.py ├── xdg_apps.txt └── xdg_test.py ├── scripts ├── l10n.py └── make-locale.sh ├── src ├── uxdgmenud.c └── uxdgmenud.h └── usr ├── lib └── uxdgmenu │ ├── uxm-config.py │ ├── uxm-daemon.py │ ├── uxm-editor.py │ ├── uxm-menu.py │ ├── uxm-places.py │ ├── uxm-run.py │ └── uxm │ ├── __init__.py │ ├── adapters │ ├── __init__.py │ ├── gmenu_adapter.py │ └── xdg_adapter.py │ ├── bench.py │ ├── cache.py │ ├── config.py │ ├── daemon.py │ ├── dialogs │ ├── __init__.py │ ├── config.py │ ├── config.ui │ ├── editor │ │ ├── __init__.py │ │ ├── editdialog.py │ │ ├── editdialog.ui │ │ ├── filewriter.py │ │ ├── filewriter_gtk3.py │ │ ├── maindialog.py │ │ ├── maindialog.ui │ │ ├── maindialog_gtk3.py │ │ ├── treemodel.py │ │ └── treemodel_gtk3.py │ ├── error.py │ ├── helpers.py │ ├── iconchooser.py │ ├── iconchooser.ui │ ├── launcher │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── models │ │ │ ├── __init__.py │ │ │ ├── apps_model.py │ │ │ ├── dataloaders.py │ │ │ ├── fs_model.py │ │ │ ├── index.py │ │ │ ├── model.py │ │ │ ├── pathfinder.py │ │ │ ├── trie.py │ │ │ └── utils.py │ ├── menu.py │ └── progress.py │ ├── formatter.py │ ├── formatters │ ├── awesome.py │ ├── blackbox.py │ ├── fluxbox.py │ ├── fvwm2.py │ ├── icewm.py │ ├── ion3.py │ ├── js.py │ ├── openbox.py │ ├── pckl.py │ ├── pekwm.py │ ├── twm.py │ └── windowmaker.py │ ├── icon_finder.py │ ├── parser.py │ ├── parsers │ ├── __init__.py │ ├── applications.py │ ├── bookmarks.py │ ├── devices.py │ ├── places.py │ ├── recent_files.py │ └── rootmenu.py │ ├── udisks │ ├── __init__.py │ └── device.py │ └── utils │ ├── __init__.py │ ├── compat │ ├── __init__.py │ ├── fadvise.py │ ├── py2.py │ └── py3.py │ ├── env.py │ ├── fmt.py │ ├── fs.py │ ├── mime.py │ ├── proc.py │ └── shell.py └── share ├── applications └── x-www-browser.desktop └── desktop-directories ├── uxm-audio-video.directory ├── uxm-development.directory ├── uxm-education.directory ├── uxm-game.directory ├── uxm-graphics.directory ├── uxm-hardware.directory ├── uxm-internet-and-network.directory ├── uxm-look-and-feel.directory ├── uxm-menu-applications.directory ├── uxm-menu-bookmarks.directory ├── uxm-menu-devices.directory ├── uxm-menu-places.directory ├── uxm-menu-recent-files.directory ├── uxm-menu-system.directory ├── uxm-network.directory ├── uxm-office.directory ├── uxm-other.directory ├── uxm-personal.directory ├── uxm-places.directory ├── uxm-settings-system.directory ├── uxm-settings.directory ├── uxm-system-tools.directory ├── uxm-system.directory ├── uxm-utility-accessibility.directory ├── uxm-utility.directory └── uxm-wine.directory /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled source # 2 | ################### 3 | *.pyc 4 | usr/bin/uxdgmenud 5 | usr/share/locale/* 6 | *.mo 7 | 8 | # OS generated files # 9 | ###################### 10 | *~ 11 | *.swp 12 | 13 | # Crash dumps 14 | /core 15 | *.pyprof 16 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | package="uxdgmenu" 2 | version="0.2" 3 | 4 | export prefix=/usr/local 5 | export sysconfdir=/etc 6 | 7 | CC := gcc 8 | CFLAGS := `pkg-config --cflags glib-2.0 gthread-2.0 gio-2.0` -W -Wall -pedantic 9 | LDFLAGS := `pkg-config --libs glib-2.0 gthread-2.0 gio-2.0` -linotifytools 10 | EXEC := usr/bin/uxdgmenud 11 | SRC := src/uxdgmenud.c 12 | 13 | all: uxdgmenud locale 14 | 15 | uxdgmenud: 16 | mkdir -p usr/bin 17 | # add -g -O0 flags for debugging, 18 | # along with "ulimit -c unlimited" in the debugging console session 19 | $(CC) $(SRC) -o $(EXEC) $(LDFLAGS) $(CFLAGS) 20 | 21 | locale: 22 | ./scripts/make-locale.sh 23 | 24 | .PHONY: clean install uninstall 25 | 26 | clean: 27 | rm -f ${EXEC} 2> /dev/null 28 | rm -rf usr/share/locale/* 2> /dev/null 29 | 30 | install: 31 | # remove pyc 32 | find . -name "*.pyc" | xargs rm -f 33 | # Modify config paths 34 | sed -i -e 's#PREFIX = ".*"#PREFIX = "$(prefix)"#' \ 35 | -e 's#SYSCONFDIR = ".*"#SYSCONFDIR = "$(sysconfdir)"#' \ 36 | usr/lib/uxdgmenu/uxm/config.py 37 | # install dirs under prefix/lib 38 | find usr/lib/uxdgmenu -type d \ 39 | | sed "s#.*/uxdgmenu/\(.*\)#$(DESTDIR)$(prefix)/lib/uxdgmenu/\1#" \ 40 | | xargs install -d 41 | # install files under prefix/lib 42 | find usr/lib/uxdgmenu -type f -name "*.py" -or -name "*.glade" | while read file; do \ 43 | dir=`dirname "$$file"`; \ 44 | dest=`echo "$$dir" | sed "s#\(.*\)usr/lib/uxdgmenu#$(DESTDIR)$(prefix)/lib/uxdgmenu#"`; \ 45 | install -m 0755 "$$file" "$$dest"; \ 46 | done 47 | # bin 48 | install -d $(DESTDIR)$(prefix)/bin 49 | install -m 0755 usr/bin/* $(DESTDIR)$(prefix)/bin 50 | ln -sf -T $(prefix)/lib/uxdgmenu/uxm-daemon.py $(DESTDIR)$(prefix)/bin/uxm-daemon 51 | ln -sf -T $(prefix)/lib/uxdgmenu/uxm-places.py $(DESTDIR)$(prefix)/bin/uxm-places 52 | ln -sf -T $(prefix)/lib/uxdgmenu/uxm-menu.py $(DESTDIR)$(prefix)/bin/uxm-menu 53 | ln -sf -T $(prefix)/lib/uxdgmenu/uxm-config.py $(DESTDIR)$(prefix)/bin/uxm-config 54 | # share 55 | install -d $(DESTDIR)$(prefix)/share/applications 56 | install -m 0755 usr/share/applications/* $(DESTDIR)$(prefix)/share/applications 57 | install -d $(DESTDIR)$(prefix)/share/desktop-directories 58 | install -m 0755 usr/share/desktop-directories/* $(DESTDIR)$(prefix)/share/desktop-directories 59 | install -d $(DESTDIR)$(prefix)/share/locale 60 | cp -R usr/share/locale/* $(DESTDIR)$(prefix)/share/locale 61 | # etc 62 | install -d $(DESTDIR)$(sysconfdir)/xdg/menus 63 | install -m 0755 etc/xdg/menus/* $(DESTDIR)$(sysconfdir)/xdg/menus 64 | install -d $(DESTDIR)$(sysconfdir)/uxdgmenu 65 | install -m 0755 etc/uxdgmenu/* $(DESTDIR)$(sysconfdir)/uxdgmenu 66 | 67 | uninstall: 68 | -rm -rf $(DESTDIR)$(prefix)/lib/uxdgmenu 69 | -rm -rf $(DESTDIR)$(prefix)/share/locale/*/LC_MESSAGES/uxdgmenu.mo 70 | -rm -f $(DESTDIR)$(prefix)/share/desktop-directories/uxm-*.directory 71 | -rm -rf $(DESTDIR)$(sysconfdir)/uxdgmenu 72 | -rm -f $(DESTDIR)$(sysconfdir)/xdg/menus/uxm-applications.menu 73 | -rm -f $(DESTDIR)$(sysconfdir)/xdg/menus/uxm-rootmenu.menu 74 | -rm -f $(DESTDIR)$(prefix)/bin/uxm-daemon 75 | -rm -f $(DESTDIR)$(prefix)/bin/uxm-places 76 | -rm -f $(DESTDIR)$(prefix)/bin/uxm-config 77 | -rm -f $(DESTDIR)$(prefix)/bin/uxm-menu 78 | -rm -f $(DESTDIR)$(prefix)/bin/uxdgmenud 79 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | About 2 | ===== 3 | 4 | uxdgmenu is an automated XDG Menu system for alternative Linux window managers. 5 | It supports currently Fluxbox, Openbox, Awesome, Blackbox, WindowMaker, 6 | FVWM2, IceWM, Ion3, PekWM, TWM, support can be added to any other through plugins. 7 | 8 | uxdgmenu monitors for newly installed/removed applications, 9 | and maintains a submenu, listing and categorizing them like the Gnome/Xfce/Lxde menu. 10 | It can also monitor your gtk bookmarks and recent files, 11 | and comes with a standalone GTK app-launcher and a GUI for configuration. 12 | 13 | [Check the wiki](http://github.com/ju1ius/uxdgmenu/wiki) 14 | 15 | Install 16 | ======= 17 | 18 | [Debian packages are provided](https://sourceforge.net/projects/uxdgmenu/files/). 19 | You can also build from source, but please note that as of now (post version 0.7), the master branch will be in an unstable state until the 1.0 release. 20 | If you want a stable release, please build from the [0.7 source tarball](https://sourceforge.net/projects/uxdgmenu/files/0.7/uxdgmenu_0.7.orig.tar.gz/download). 21 | 22 | Install dependencies: 23 | 24 | sudo aptitude install libglib2.0-dev libglib2.0-0 libinotifytools0 libinotifytools0-dev python-xdg 25 | 26 | You should also (but are not forced to) install the following packages: 27 | 28 | * python-gtk2: for the GUIs (dialogs, configuration, menu widget...) 29 | * python-gmenu: makes menu generation 10 times faster... 30 | * python-dbus: for monitoring, mounting & unmounting devices. 31 | You might also need to install the freedesktop.org's ConsoleKit + PolicyKit stack in order to 32 | get mount/unmount permissions as a user. 33 | 34 | Clone the git repository if you haven't already 35 | 36 | git clone git://github.com/ju1ius/uxdgmenu.git 37 | cd uxdgmenu 38 | 39 | Build and install 40 | 41 | make && sudo make install prefix=/usr 42 | 43 | Next 44 | ==== 45 | 46 | [Check the wiki](http://github.com/ju1ius/uxdgmenu/wiki) 47 | 48 | ----------------------------------------------------------------------- 49 | uxdgmenu has been inspired by: 50 | 51 | * Fedora's xdg-menu 52 | * Shane Lazar's mint-fm2 53 | * Byron Clark's udiskie 54 | * corenominal's crunchbang linux pipemenus for openbox 55 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | release v1.0: 2 | launcher (+ menu editor)? 3 | documentation on readthedocs 4 | release v1.1: 5 | default mimeapps editor 6 | release v2.0: 7 | gir glib/gtk3 8 | rewrite performance sensitive code in C/C++ ??? 9 | 10 | unit tests... 11 | Unicode sandwich 12 | implement proper logging 13 | 14 | menus: 15 | compatibility with gnome categories, implies renaming of .directory files 16 | is this necessary ? better allow users to choose their menu file 17 | 18 | 19 | GUI menu editor: 20 | separate app & menu edit dialogs 21 | iconchooser: 22 | reset the icon preview when the dialog is closed (or set it when opened) 23 | IconField class (extends HBox) Entry + IconChooserButton 24 | advanced editing: 25 | apps: 26 | categories 27 | menus: 28 | rules 29 | both: 30 | direct editing of inifile 31 | 32 | launcher: 33 | history 34 | Ctrl+H toggles show hidden files 35 | integrate with config & config app 36 | use icon size from config 37 | code cleanup 38 | TAB actions: 39 | show popup if not visible (use token_under_cursor) 40 | for MODE_APPS ??? 41 | Shift_Tab: 42 | use token_under_cursor 43 | ENTER actions: 44 | ok for basic commands 45 | launch in terminal: 46 | Ctrl+Enter? 47 | open path if len(tokens) == 1 and tokens[0].absolute 48 | global edit queue 49 | action menus: 50 | actions for TYPE_CMD && TYPE_APP: 51 | run, run in terminal, infos? 52 | close with LEFT arrow 53 | actually execute actions 54 | actions for MODE_BROWSE 55 | 56 | l10n for config editor... 57 | 58 | 59 | -------------------------------------------------------------------------------- /etc/uxdgmenu/menu.conf: -------------------------------------------------------------------------------- 1 | [Daemon] 2 | # Monitor GTK bookmarks ? yes/no 3 | monitor_bookmarks: yes 4 | # Monitor recent files ? yes/no 5 | monitor_recent_files: yes 6 | 7 | [General] 8 | # The filemanager used to open bookmarks and directories 9 | # It should be detected on first-run 10 | filemanager: thunar 11 | # The terminal emulator used to open terminal applications 12 | terminal: x-terminal-emulator 13 | # The command used to open files with their default application 14 | # It should be detected on first-run 15 | open_cmd: xdg-open 16 | 17 | 18 | [Daemon] 19 | monitor_applications: yes 20 | monitor_bookmarks: yes 21 | monitor_recent_files: yes 22 | 23 | 24 | [Icons] 25 | # Does Menu show icons ? yes/no 26 | show: yes 27 | # Use current GTK theme (requires pygtk) ? yes/no 28 | use_gtk_theme: yes 29 | # The icon theme to use if use_gtk_theme is set to no 30 | theme: Mint-X 31 | # Size of the icons in pixels 32 | size: 24 33 | # Default fallback icons 34 | application: application-x-executable 35 | bookmark: user-bookmarks 36 | folder: gtk-directory 37 | file: gtk-file 38 | 39 | 40 | [Applications] 41 | # Show as much as possible 42 | show_all: yes 43 | # Displays applications menu as a submenu in the rootmenu 44 | as_submenu: no 45 | 46 | 47 | [Bookmarks] 48 | 49 | 50 | [Recent Files] 51 | # The maximum number of recent files to show 52 | max_items: 20 53 | 54 | 55 | [Places] 56 | # Start directory 57 | start_dir: ~ 58 | # Show files ? yes/no 59 | show_files: yes 60 | -------------------------------------------------------------------------------- /etc/xdg/menus/uxm-rootmenu.menu: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | RootMenu 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | thunar.desktop 15 | 16 | x-www-browser.desktop 17 | 18 | x-terminal-emulator.desktop 19 | 20 | mintInstall.desktop 21 | synaptic.desktop 22 | 23 | gtk-logout.desktop 24 | 25 | 26 | 27 | uxm-applications 28 | uxm-menu-applications.directory 29 | 30 | 31 | 32 | 33 | 34 | 35 | uxm-bookmarks 36 | uxm-menu-bookmarks.directory 37 | 38 | 39 | 40 | 41 | 42 | 43 | uxm-recent-files 44 | uxm-menu-recent-files.directory 45 | 46 | 47 | 48 | 49 | 50 | 51 | uxm-devices 52 | uxm-menu-recent-files.directory 53 | 54 | 55 | 56 | 57 | 58 | 59 | uxm-menu 60 | X-GNOME-Other.directory 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | thunar.desktop 69 | 70 | x-www-browser.desktop 71 | 72 | x-terminal-emulator.desktop 73 | 74 | synaptic.desktop 75 | 76 | uxm-bookmarks 77 | uxm-recent-files 78 | uxm-devices 79 | 80 | uxm-applications 81 | 82 | uxm-menu 83 | 84 | gtk-logout.desktop 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /misc/wm_stats.txt: -------------------------------------------------------------------------------- 1 | Tiling WMs [335] 2 | 3 | * Awesome [78] ! 4 | * XMonad [74] ! 5 | * dwm [53] 6 | * i3 [25] 7 | * Musca [19] 8 | * Ratpoison [18] 9 | * wmii [17] 10 | * subtle [12] 11 | * ScrotWM [11] 12 | * PyTyle [8] 13 | * StumpWM [5] 14 | * wmfs [5] 15 | * herbstluftwm [3] 16 | * euclid-wm [2] 17 | * ion [2] 18 | * catwm [1] 19 | * echinus [1] 20 | * dminiwm [1] 21 | 22 | Floating WMs [241] 23 | 24 | * Openbox [160] ! 25 | * Fluxbox [20] ! 26 | * e17 [15] 27 | * pekwm [12] 28 | * fvwm [11] ! 29 | * twm [4] 30 | * Window Maker [4] ! 31 | * IceWM [3] ! 32 | * JWM [3] 33 | * rio [2] 34 | * Blackbox [2] ! 35 | * Openbox Multihead [1] 36 | * e16 [1] 37 | * evilwm [1] 38 | * cwm [1] 39 | * Sawfish [1] 40 | 41 | Compositing WMs [52] 42 | * compiz [46] 43 | * Gnome Shell [5] 44 | * Ecomorph/Ecomp [1] 45 | 46 | DEs [193] 47 | * KDE [73] 48 | * Xfce [59] 49 | * GNOME [41] 50 | * LXDE [19] 51 | * Mate [1] 52 | 53 | Others [83] 54 | * Screen [37] 55 | * tmux [31] 56 | * TTY [11] 57 | * dvtm [4] 58 | 59 | -------------------------------------------------------------------------------- /po/af.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Verfris" 3 | 4 | msgid "Devices" 5 | msgstr "Web Services" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Heg die geselekteerde volume" 9 | 10 | msgid "Clear List" 11 | msgstr "Maak lys skoon" 12 | 13 | msgid "Generate" 14 | msgstr "Genereer" 15 | 16 | msgid "Open" 17 | msgstr "Open" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Voorkeure" 24 | 25 | msgid "Recently Used" 26 | msgstr "Onlangs gebruik" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Ontheg die geselekteerde volume" 30 | 31 | -------------------------------------------------------------------------------- /po/am.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "በድጋሚ ጀምር" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "የተመረጠውን ምልክት ተጎታች ድርግ" 9 | 10 | msgid "Clear List" 11 | msgstr "ሰርዝ" 12 | 13 | msgid "Generate" 14 | msgstr "አጠቃላይ" 15 | 16 | msgid "Open" 17 | msgstr "ክፈት" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "ምርጫዎች" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "" 30 | 31 | -------------------------------------------------------------------------------- /po/ang.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Clear List" 5 | msgstr "" 6 | 7 | msgid "Open" 8 | msgstr "Openian" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/ar.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "امسح الذاكرة المؤقتة" 3 | 4 | msgid "Refresh" 5 | msgstr "حدِّث" 6 | 7 | msgid "Devices" 8 | msgstr "الأجهزة" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "صِل الجزء المختار" 12 | 13 | msgid "Clear List" 14 | msgstr "امسح القائمة" 15 | 16 | msgid "Generate" 17 | msgstr "ولِّد" 18 | 19 | msgid "Open" 20 | msgstr "افتح" 21 | 22 | msgid "menu" 23 | msgstr "قائمة سفلية" 24 | 25 | msgid "Preferences" 26 | msgstr "التفضيلات" 27 | 28 | msgid "Recently Used" 29 | msgstr "مستخدمة مؤخرا" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "افصل الجزء المختار" 33 | 34 | -------------------------------------------------------------------------------- /po/as.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "কেশ্বেৰ তথ্য আঁতৰাওক" 3 | 4 | msgid "Refresh" 5 | msgstr "নতুনকৈ প্ৰদৰ্শন" 6 | 7 | msgid "Devices" 8 | msgstr "ডিভাইচসমূহ" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "চিহ্নিত ভলিউমটি মাউন্ট কৰক" 12 | 13 | msgid "Clear List" 14 | msgstr "তালিকা পৰিষ্কাৰ কৰক" 15 | 16 | msgid "Generate" 17 | msgstr "উত্‌পন্ন কৰুন" 18 | 19 | msgid "Open" 20 | msgstr "খোলক" 21 | 22 | msgid "menu" 23 | msgstr "মেনু" 24 | 25 | msgid "Preferences" 26 | msgstr "পছন্দ" 27 | 28 | msgid "Recently Used" 29 | msgstr "অলপতে ব্যৱহাৰ কৰা" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "চিহ্নিত ভলিউম আন-মাউন্ট কৰক" 33 | 34 | -------------------------------------------------------------------------------- /po/ast.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Anovar" 3 | 4 | msgid "Devices" 5 | msgstr "Preseos" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Montar el volume esbilláu" 9 | 10 | msgid "Clear List" 11 | msgstr "Llimpiar llista" 12 | 13 | msgid "Generate" 14 | msgstr "Xenerar" 15 | 16 | msgid "Open" 17 | msgstr "Abrir" 18 | 19 | msgid "menu" 20 | msgstr "Submenú" 21 | 22 | msgid "Preferences" 23 | msgstr "Preferencies" 24 | 25 | msgid "Recently Used" 26 | msgstr "Usaos recientemente" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Desmontar el volume esbilláu" 30 | 31 | -------------------------------------------------------------------------------- /po/az.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Yenilə" 3 | 4 | msgid "Devices" 5 | msgstr "Xidmətlər" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Seçili sürücünü bağla" 9 | 10 | msgid "Clear List" 11 | msgstr "Təmizlə" 12 | 13 | msgid "Generate" 14 | msgstr "Ümumi" 15 | 16 | msgid "Open" 17 | msgstr "Aç" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Seçimlər" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Seçili sürücünü ayır" 30 | 31 | -------------------------------------------------------------------------------- /po/az_IR.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Clear List" 5 | msgstr "" 6 | 7 | msgid "Open" 8 | msgstr "" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/be.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Абнавіць" 3 | 4 | msgid "Devices" 5 | msgstr "Прыстасаванні" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Прымацаваць вылучаны дыскавы том" 9 | 10 | msgid "Clear List" 11 | msgstr "Ачысціць спіс" 12 | 13 | msgid "Generate" 14 | msgstr "Згенэраваць" 15 | 16 | msgid "Open" 17 | msgstr "Адкрыць" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Настройкі" 24 | 25 | msgid "Recently Used" 26 | msgstr "Нядаўнія файлы" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Адмацаваць вылучаны дыскавы том" 30 | 31 | -------------------------------------------------------------------------------- /po/be@latin.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Abnavi" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Mantuje abrany masiŭ" 9 | 10 | msgid "Clear List" 11 | msgstr "Vyčyść śpis" 12 | 13 | msgid "Generate" 14 | msgstr "Zhieneruj" 15 | 16 | msgid "Open" 17 | msgstr "Adčyni" 18 | 19 | msgid "menu" 20 | msgstr "Submenu" 21 | 22 | msgid "Preferences" 23 | msgstr "Nałady" 24 | 25 | msgid "Recently Used" 26 | msgstr "Niadaŭna ŭžyvanyja" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Admantoŭvaje abrany masiŭ" 30 | 31 | -------------------------------------------------------------------------------- /po/bg.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Изчистване на кеша" 3 | 4 | msgid "Refresh" 5 | msgstr "Обновяване" 6 | 7 | msgid "Devices" 8 | msgstr "Устройства" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Монтиране на избраната файлова система" 12 | 13 | msgid "Clear List" 14 | msgstr "Изчистване на списък" 15 | 16 | msgid "Generate" 17 | msgstr "Генериране" 18 | 19 | msgid "Open" 20 | msgstr "Отваряне" 21 | 22 | msgid "menu" 23 | msgstr "меню" 24 | 25 | msgid "Preferences" 26 | msgstr "Предпочитания" 27 | 28 | msgid "Recently Used" 29 | msgstr "Скоро отваряни" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Демонтиране на избраната файлова система" 33 | 34 | -------------------------------------------------------------------------------- /po/bn.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "রিফ্রেশ করুন" 3 | 4 | msgid "Devices" 5 | msgstr "ডিভাইস" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "চিহ্নিত ভলিউমটি মাউন্ট করুন" 9 | 10 | msgid "Clear List" 11 | msgstr "তালিকা মুছে ফেলুন" 12 | 13 | msgid "Generate" 14 | msgstr "তৈরি করুন" 15 | 16 | msgid "Open" 17 | msgstr "খুলুন" 18 | 19 | msgid "menu" 20 | msgstr "সাব-মেনু" 21 | 22 | msgid "Preferences" 23 | msgstr "পছন্দসমূহ" 24 | 25 | msgid "Recently Used" 26 | msgstr "সম্প্রতি ব্যবহৃত" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "চিহ্নিত ভলিউম আন-মাউন্ট করুন" 30 | 31 | -------------------------------------------------------------------------------- /po/bn_IN.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "ক্যাশের তথ্য মুছে ফেলুন" 3 | 4 | msgid "Refresh" 5 | msgstr "নতুন করে প্রদর্শন" 6 | 7 | msgid "Devices" 8 | msgstr "" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "চিহ্নিত ভলিউমটি মাউন্ট করুন" 12 | 13 | msgid "Clear List" 14 | msgstr "তালিকা পরিশ্রুত করুন" 15 | 16 | msgid "Generate" 17 | msgstr "উত্‌পন্ন করুন" 18 | 19 | msgid "Open" 20 | msgstr "খুলুন" 21 | 22 | msgid "menu" 23 | msgstr "সাব-মেনু" 24 | 25 | msgid "Preferences" 26 | msgstr "পছন্দ" 27 | 28 | msgid "Recently Used" 29 | msgstr "সম্প্রতি ব্যবহৃত" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "চিহ্নিত ভলিউম আন-মাউন্ট করুন" 33 | 34 | -------------------------------------------------------------------------------- /po/bo.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "བདམས་ཟིན་པའི་འཇུག་སྣོད་བཀར་བ" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "བདམས་ཟིན་པའི་འཇུག་སྣོད་སྒྲིག་འཇུག་འདོར་བ" 9 | 10 | -------------------------------------------------------------------------------- /po/br.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Azgrenaat" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Sevel ar bezhienn diuzet" 9 | 10 | msgid "Clear List" 11 | msgstr "Skarzhañ ar roll" 12 | 13 | msgid "Generate" 14 | msgstr "Genel" 15 | 16 | msgid "Open" 17 | msgstr "Digeriñ" 18 | 19 | msgid "menu" 20 | msgstr "Islañser" 21 | 22 | msgid "Preferences" 23 | msgstr "Gwellvezioù" 24 | 25 | msgid "Recently Used" 26 | msgstr "Arveret nevez zo" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Disevel ar bezhienn diuzet" 30 | 31 | -------------------------------------------------------------------------------- /po/bs.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Osvježi" 3 | 4 | msgid "Devices" 5 | msgstr "Servisi u" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Montiraj izabrani disk" 9 | 10 | msgid "Clear List" 11 | msgstr "Očisti" 12 | 13 | msgid "Open" 14 | msgstr "Otvori" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Opcije" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Demontiraj izabrani disk" 27 | 28 | -------------------------------------------------------------------------------- /po/ca.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Buida la memòria cau" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualitza" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositius" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Munta el volum seleccionat" 12 | 13 | msgid "Clear List" 14 | msgstr "Neteja la llista" 15 | 16 | msgid "Generate" 17 | msgstr "Genera" 18 | 19 | msgid "Open" 20 | msgstr "Obre" 21 | 22 | msgid "menu" 23 | msgstr "Submenú" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferències" 27 | 28 | msgid "Recently Used" 29 | msgstr "Utilitzats recentment" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmunta el volum seleccionat" 33 | 34 | -------------------------------------------------------------------------------- /po/ca@valencia.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Buida la memòria cau" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualitza" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositius" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Munta el volum seleccionat" 12 | 13 | msgid "Clear List" 14 | msgstr "Neteja la llista" 15 | 16 | msgid "Generate" 17 | msgstr "Genera" 18 | 19 | msgid "Open" 20 | msgstr "Obri" 21 | 22 | msgid "menu" 23 | msgstr "Submenú" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferències" 27 | 28 | msgid "Recently Used" 29 | msgstr "Utilitzats recentment" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmunta el volum seleccionat" 33 | 34 | -------------------------------------------------------------------------------- /po/crh.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Tazert" 3 | 4 | msgid "Devices" 5 | msgstr "Cihazlar" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Seçilen sistemi bağla" 9 | 10 | msgid "Clear List" 11 | msgstr "Listeni Temizle" 12 | 13 | msgid "Open" 14 | msgstr "Aç" 15 | 16 | msgid "menu" 17 | msgstr "Alt-menü" 18 | 19 | msgid "Preferences" 20 | msgstr "Tercihler" 21 | 22 | msgid "Recently Used" 23 | msgstr "Demi Qullanılğan" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Seçilen sistemi ayır" 27 | 28 | -------------------------------------------------------------------------------- /po/cs.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Vymazat mezipaměť" 3 | 4 | msgid "Refresh" 5 | msgstr "Obnovit" 6 | 7 | msgid "Devices" 8 | msgstr "Zařízení" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Připojit vybraný svazek" 12 | 13 | msgid "Clear List" 14 | msgstr "Vymazat seznam" 15 | 16 | msgid "Generate" 17 | msgstr "Vygenerovat" 18 | 19 | msgid "Open" 20 | msgstr "Otevřít" 21 | 22 | msgid "menu" 23 | msgstr "Podřazená nabídka" 24 | 25 | msgid "Preferences" 26 | msgstr "Nastavení" 27 | 28 | msgid "Recently Used" 29 | msgstr "Naposledy použité" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Odpojit vybraný svazek" 33 | 34 | -------------------------------------------------------------------------------- /po/cy.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Diweddaru" 3 | 4 | msgid "Devices" 5 | msgstr "Gwasanaethau i mewn" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Gosod y gyfrol ddewisedig" 9 | 10 | msgid "Clear List" 11 | msgstr "Clirio'r Rhestr" 12 | 13 | msgid "Generate" 14 | msgstr "Creu" 15 | 16 | msgid "Open" 17 | msgstr "Agor" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Hoffterau" 24 | 25 | msgid "Recently Used" 26 | msgstr "Defnyddiwyd yn Ddiweddar" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Dadosod y gyfrol ddewisedig" 30 | 31 | -------------------------------------------------------------------------------- /po/da.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Ryd mellemlager" 3 | 4 | msgid "Refresh" 5 | msgstr "Opdatér" 6 | 7 | msgid "Devices" 8 | msgstr "Enheder" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montér den valgte diskenhed" 12 | 13 | msgid "Clear List" 14 | msgstr "Ryd liste" 15 | 16 | msgid "Generate" 17 | msgstr "Generér" 18 | 19 | msgid "Open" 20 | msgstr "Åbn" 21 | 22 | msgid "menu" 23 | msgstr "Undermenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Indstillinger" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nyligt brugte" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Afmontér den valgte diskenhed" 33 | 34 | -------------------------------------------------------------------------------- /po/de.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Zwischenspeicher leeren" 3 | 4 | msgid "Refresh" 5 | msgstr "Aktualisieren" 6 | 7 | msgid "Devices" 8 | msgstr "Geräte" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Den gewählten Datenträger einhängen" 12 | 13 | msgid "Clear List" 14 | msgstr "Liste leeren" 15 | 16 | msgid "Generate" 17 | msgstr "Erzeugen" 18 | 19 | msgid "Open" 20 | msgstr "Öffnen" 21 | 22 | msgid "menu" 23 | msgstr "Untermenü" 24 | 25 | msgid "Preferences" 26 | msgstr "Einstellungen" 27 | 28 | msgid "Recently Used" 29 | msgstr "Zuletzt verwendet" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Den gewählten Datenträger aushängen" 33 | 34 | -------------------------------------------------------------------------------- /po/dz.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "འདྲ་མཛོད་བསལ།" 3 | 4 | msgid "Refresh" 5 | msgstr "ཡང་སེལ།(R)" 6 | 7 | msgid "Devices" 8 | msgstr "ནང་ལུ་ཞབས་ཏོག" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "སེལ་འཐུ་འབད་མི་སྐད་ཤུགས་སྦྱར་བརྩེགས་འབད།" 12 | 13 | msgid "Clear List" 14 | msgstr "ཐོ་ཡིག་བསལ།(C)" 15 | 16 | msgid "Generate" 17 | msgstr "བཟོ་བསྐྲུན་འབད།(G)" 18 | 19 | msgid "Open" 20 | msgstr "ཁ་ཕྱེ།(O)" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "དགའ་གདམ་ཚུ།(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "སེལ་འཐུ་འབད་མི་སྐད་ཤུགས་ སྦྱར་བརྩེགས་བཤོལ།" 33 | 34 | -------------------------------------------------------------------------------- /po/el.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Καθαρισμός μνήμης" 3 | 4 | msgid "Refresh" 5 | msgstr "Ανανέωση" 6 | 7 | msgid "Devices" 8 | msgstr "Συσκευές" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Προσάρτηση του επιλεγμένου τόμου" 12 | 13 | msgid "Clear List" 14 | msgstr "Εκκαθάριση λίστας" 15 | 16 | msgid "Generate" 17 | msgstr "Δημιουργία" 18 | 19 | msgid "Open" 20 | msgstr "Άνοιγμα" 21 | 22 | msgid "menu" 23 | msgstr "μενού" 24 | 25 | msgid "Preferences" 26 | msgstr "Προτιμήσεις" 27 | 28 | msgid "Recently Used" 29 | msgstr "Πρόσφατα" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Αποπροσάρτηση του επιλεγμένου τόμου" 33 | 34 | -------------------------------------------------------------------------------- /po/en.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Clear List" 5 | msgstr "" 6 | 7 | msgid "Open" 8 | msgstr "" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/en@shaw.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "𐑮𐑰𐑓𐑮𐑧𐑖" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "𐑥𐑬𐑯𐑑 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑝𐑪𐑤𐑿𐑥" 9 | 10 | msgid "Clear List" 11 | msgstr "𐑒𐑤𐑻 𐑤𐑦𐑕𐑑" 12 | 13 | msgid "Generate" 14 | msgstr "𐑡𐑧𐑯𐑼𐑱𐑑" 15 | 16 | msgid "Open" 17 | msgstr "𐑴𐑐𐑩𐑯" 18 | 19 | msgid "menu" 20 | msgstr "Submenu" 21 | 22 | msgid "Preferences" 23 | msgstr "𐑐𐑮𐑧𐑓𐑼𐑩𐑯𐑕𐑩𐑟" 24 | 25 | msgid "Recently Used" 26 | msgstr "𐑮𐑰𐑕𐑩𐑯𐑑𐑤𐑦 𐑿𐑕𐑑" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Unmount 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑝𐑪𐑤𐑿𐑥" 30 | 31 | -------------------------------------------------------------------------------- /po/en_CA.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Memory cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Refresh" 6 | 7 | msgid "Devices" 8 | msgstr "Devices" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Mount the selected volume" 12 | 13 | msgid "Clear List" 14 | msgstr "Clear List" 15 | 16 | msgid "Generate" 17 | msgstr "Generate" 18 | 19 | msgid "Open" 20 | msgstr "Open" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferences" 27 | 28 | msgid "Recently Used" 29 | msgstr "Recently Used" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Unmount the selected volume" 33 | 34 | -------------------------------------------------------------------------------- /po/en_GB.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Clear cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Refresh" 6 | 7 | msgid "Devices" 8 | msgstr "Devices" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Mount the selected volume" 12 | 13 | msgid "Clear List" 14 | msgstr "Clear List" 15 | 16 | msgid "Generate" 17 | msgstr "Generate" 18 | 19 | msgid "Open" 20 | msgstr "Open" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferences" 27 | 28 | msgid "Recently Used" 29 | msgstr "Recently Used" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Unmount the selected volume" 33 | 34 | -------------------------------------------------------------------------------- /po/eo.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Aktualigi" 3 | 4 | msgid "Devices" 5 | msgstr "Aparatoj" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Surmeti la elektitan datumportilon" 9 | 10 | msgid "Clear List" 11 | msgstr "Vakigi liston" 12 | 13 | msgid "Generate" 14 | msgstr "Generu" 15 | 16 | msgid "Open" 17 | msgstr "Malfermi" 18 | 19 | msgid "menu" 20 | msgstr "Submenuo" 21 | 22 | msgid "Preferences" 23 | msgstr "Agordoj" 24 | 25 | msgid "Recently Used" 26 | msgstr "Lastatempe uzata" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Demeti la elektitan datumportilon" 30 | 31 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Limpiar la caché" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualizar" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositivos" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montar el volumen seleccionado" 12 | 13 | msgid "Clear List" 14 | msgstr "Limpiar lista" 15 | 16 | msgid "Generate" 17 | msgstr "Generar" 18 | 19 | msgid "Open" 20 | msgstr "Abrir" 21 | 22 | msgid "menu" 23 | msgstr "menú" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferencias" 27 | 28 | msgid "Recently Used" 29 | msgstr "Usados recientemente" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmontar el volumen seleccionado" 33 | 34 | -------------------------------------------------------------------------------- /po/et.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Värskenda" 3 | 4 | msgid "Devices" 5 | msgstr "Seadmed" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Valitud kettaseadme haakimine" 9 | 10 | msgid "Clear List" 11 | msgstr "Tühjenda loend" 12 | 13 | msgid "Generate" 14 | msgstr "Genereeri" 15 | 16 | msgid "Open" 17 | msgstr "Ava" 18 | 19 | msgid "menu" 20 | msgstr "Alammenüü" 21 | 22 | msgid "Preferences" 23 | msgstr "Eelistused" 24 | 25 | msgid "Recently Used" 26 | msgstr "Viimati kasutatud" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Valitud kettaseadme lahtihaakimine" 30 | 31 | -------------------------------------------------------------------------------- /po/eu.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Garbitu cache-a" 3 | 4 | msgid "Refresh" 5 | msgstr "Freskatu" 6 | 7 | msgid "Devices" 8 | msgstr "Gailuak" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Muntatu hautatutako bolumena" 12 | 13 | msgid "Clear List" 14 | msgstr "Garbitu zerrenda" 15 | 16 | msgid "Generate" 17 | msgstr "Sortu" 18 | 19 | msgid "Open" 20 | msgstr "Ireki" 21 | 22 | msgid "menu" 23 | msgstr "Azpimenua" 24 | 25 | msgid "Preferences" 26 | msgstr "Hobespenak" 27 | 28 | msgid "Recently Used" 29 | msgstr "Duela gutxi erabilita" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmuntatu hautatutako bolumena" 33 | 34 | -------------------------------------------------------------------------------- /po/fa.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "نوسازی" 3 | 4 | msgid "Devices" 5 | msgstr "دستگاه‌ها" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "سوار کردن جلد انتخاب شده" 9 | 10 | msgid "Clear List" 11 | msgstr "پاک کردن فهرست" 12 | 13 | msgid "Generate" 14 | msgstr "تولید" 15 | 16 | msgid "Open" 17 | msgstr "باز کردن" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "ترجیحات" 24 | 25 | msgid "Recently Used" 26 | msgstr "به‌تازه‌گی استفاده شده" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "پیاده کردن جلد انتخاب شده" 30 | 31 | -------------------------------------------------------------------------------- /po/fi.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Tyhjennä välimuisti" 3 | 4 | msgid "Refresh" 5 | msgstr "Päivitä" 6 | 7 | msgid "Devices" 8 | msgstr "Laitteet" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Liitä valittu asema" 12 | 13 | msgid "Clear List" 14 | msgstr "Tyhjennä luettelo" 15 | 16 | msgid "Generate" 17 | msgstr "Luo" 18 | 19 | msgid "Open" 20 | msgstr "Avaa" 21 | 22 | msgid "menu" 23 | msgstr "Alivalikko" 24 | 25 | msgid "Preferences" 26 | msgstr "Asetukset" 27 | 28 | msgid "Recently Used" 29 | msgstr "Äskettäin käytetyt" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Irrota valittu asema" 33 | 34 | -------------------------------------------------------------------------------- /po/fr.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Effacer le cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualiser" 6 | 7 | msgid "Devices" 8 | msgstr "Périphériques" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monte le volume sélectionné" 12 | 13 | msgid "Clear List" 14 | msgstr "Effacer la liste" 15 | 16 | msgid "Generate" 17 | msgstr "Générer" 18 | 19 | msgid "Open" 20 | msgstr "Ouvrir" 21 | 22 | msgid "menu" 23 | msgstr "Sous-menu" 24 | 25 | msgid "Preferences" 26 | msgstr "Préférences" 27 | 28 | msgid "Recently Used" 29 | msgstr "Récemment utilisés" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Démonte le volume sélectionné" 33 | 34 | -------------------------------------------------------------------------------- /po/fur.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Monte il volum selezionât" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Dismonte il volum selezionât" 9 | 10 | -------------------------------------------------------------------------------- /po/fy.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "" 9 | 10 | -------------------------------------------------------------------------------- /po/ga.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Athnuaigh" 3 | 4 | msgid "Devices" 5 | msgstr "Gléasanna" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "" 9 | 10 | msgid "Clear List" 11 | msgstr "Glan Liosta" 12 | 13 | msgid "Generate" 14 | msgstr "Gin" 15 | 16 | msgid "Open" 17 | msgstr "Oscail" 18 | 19 | msgid "menu" 20 | msgstr "Fo-roghchlár" 21 | 22 | msgid "Preferences" 23 | msgstr "Sainroghanna" 24 | 25 | msgid "Recently Used" 26 | msgstr "Úsáidte le Déanaí" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "" 30 | 31 | -------------------------------------------------------------------------------- /po/gl.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Limpar caché" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualizar" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositivos" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monta o volume seleccionado" 12 | 13 | msgid "Clear List" 14 | msgstr "Limpar lista" 15 | 16 | msgid "Generate" 17 | msgstr "Xerar" 18 | 19 | msgid "Open" 20 | msgstr "Abrir" 21 | 22 | msgid "menu" 23 | msgstr "menú" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferencias" 27 | 28 | msgid "Recently Used" 29 | msgstr "Usado recentemente" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmonta o volume selecionado" 33 | 34 | -------------------------------------------------------------------------------- /po/gu.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "કેશ ને સાફ કરો" 3 | 4 | msgid "Refresh" 5 | msgstr "ફરી તાજુ કરો" 6 | 7 | msgid "Devices" 8 | msgstr "ઉપકરણો" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "પસંદ કરેલા કદને માઉન્ટ કરો" 12 | 13 | msgid "Clear List" 14 | msgstr "યાદી સાફ કરો" 15 | 16 | msgid "Generate" 17 | msgstr "પેદા કરો" 18 | 19 | msgid "Open" 20 | msgstr "ખોલો" 21 | 22 | msgid "menu" 23 | msgstr "ઉપમેનુ" 24 | 25 | msgid "Preferences" 26 | msgstr "પસંદગીઓ" 27 | 28 | msgid "Recently Used" 29 | msgstr "છેલ્લે વપરાયેલ" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "પસંદ કરેલા કદને અનમાઉન્ટ કરો" 33 | 34 | -------------------------------------------------------------------------------- /po/gv.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Chaingley yn ym-lioar reih't" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Jea-chiangley yn ym-lioar eih't" 9 | 10 | -------------------------------------------------------------------------------- /po/ha.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "Ayuka na cikin" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Yi maunt ga ƙarfin muryar da aka zaɓa" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Cire maunt ga ƙarfin muryar da aka zaɓa" 9 | 10 | -------------------------------------------------------------------------------- /po/he.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "נקה מטמון" 3 | 4 | msgid "Refresh" 5 | msgstr "רענון" 6 | 7 | msgid "Devices" 8 | msgstr "התקנים" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "עיגון הכרך הנבחר" 12 | 13 | msgid "Clear List" 14 | msgstr "פינוי הרשימה" 15 | 16 | msgid "Generate" 17 | msgstr "יצירה" 18 | 19 | msgid "Open" 20 | msgstr "פתיחה" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "העדפות" 27 | 28 | msgid "Recently Used" 29 | msgstr "בשימוש לאחרונה" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "ניתוק הכרך הנבחר" 33 | 34 | -------------------------------------------------------------------------------- /po/hi.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "ताज़ा करें" 3 | 4 | msgid "Devices" 5 | msgstr "उपकरण" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "चयनित वॉल्यूम माउण्ट करें" 9 | 10 | msgid "Clear List" 11 | msgstr "सूची साफ करें" 12 | 13 | msgid "Generate" 14 | msgstr "उत्पन्न करें" 15 | 16 | msgid "Open" 17 | msgstr "खोलें" 18 | 19 | msgid "menu" 20 | msgstr "उप मेन्यू" 21 | 22 | msgid "Preferences" 23 | msgstr "वरीयता" 24 | 25 | msgid "Recently Used" 26 | msgstr "हाल में प्रयुक्त" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "चयनित वॉल्यूम अनमाउण्ट करें" 30 | 31 | -------------------------------------------------------------------------------- /po/hr.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Osvježi" 6 | 7 | msgid "Devices" 8 | msgstr "" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Pridruži odabrani disk" 12 | 13 | msgid "Clear List" 14 | msgstr "Očisti" 15 | 16 | msgid "Generate" 17 | msgstr "Generiraj" 18 | 19 | msgid "Open" 20 | msgstr "Otvori" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "Postavke" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nedavno korišteno" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Odmontiraj odabrani disk" 33 | 34 | -------------------------------------------------------------------------------- /po/hu.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Gyorsítótár törlése" 3 | 4 | msgid "Refresh" 5 | msgstr "Frissítés" 6 | 7 | msgid "Devices" 8 | msgstr "Eszközök" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "A kijelölt kötet csatolása" 12 | 13 | msgid "Clear List" 14 | msgstr "Lista törlése" 15 | 16 | msgid "Generate" 17 | msgstr "Létrehozás" 18 | 19 | msgid "Open" 20 | msgstr "Megnyitás" 21 | 22 | msgid "menu" 23 | msgstr "Almenü" 24 | 25 | msgid "Preferences" 26 | msgstr "Beállítások" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nemrég használt" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "A kijelölt kötet leválasztása" 33 | 34 | -------------------------------------------------------------------------------- /po/hy.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Devices" 5 | msgstr "Ծառայություններ" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Միացնել ընտրված հատորը" 9 | 10 | msgid "Clear List" 11 | msgstr "Մաքրել ցուցակը" 12 | 13 | msgid "Open" 14 | msgstr "Բացել Հղումը" 15 | 16 | msgid "menu" 17 | msgstr "Ենթամենյու" 18 | 19 | msgid "Preferences" 20 | msgstr "" 21 | 22 | msgid "Recently Used" 23 | msgstr "Վերջերս օգտագործված" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Անջատել ընտրված հատորը" 27 | 28 | -------------------------------------------------------------------------------- /po/ia.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Rubor:" 3 | 4 | msgid "Clear List" 5 | msgstr "depurar" 6 | 7 | msgid "Open" 8 | msgstr "Aperir" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/id.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Segarkan" 3 | 4 | msgid "Devices" 5 | msgstr "Perangkat" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Mengaitkan volume yang dipilih" 9 | 10 | msgid "Clear List" 11 | msgstr "Kosongkan Daftar" 12 | 13 | msgid "Generate" 14 | msgstr "Tetapkan" 15 | 16 | msgid "Open" 17 | msgstr "Buka" 18 | 19 | msgid "menu" 20 | msgstr "menu" 21 | 22 | msgid "Preferences" 23 | msgstr "Preferensi" 24 | 25 | msgid "Recently Used" 26 | msgstr "Baru-baru Ini Digunakan" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Melepas kaitan volume yang dipilih" 30 | 31 | -------------------------------------------------------------------------------- /po/ig.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "Ulọọrụ mgbasaozi na" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Welite ụda ahụ a họọrọ" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Ewelitekwala ụda ahụ a họọrọ" 9 | 10 | -------------------------------------------------------------------------------- /po/io.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Rifreshigez" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Muntez la selektata volumino" 9 | 10 | msgid "Clear List" 11 | msgstr "Vakuigez Listo" 12 | 13 | msgid "Open" 14 | msgstr "Apertez" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Preferi" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Desmuntez la selektata volumino" 27 | 28 | -------------------------------------------------------------------------------- /po/is.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Hressa" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Tengja valda gagnahirslu" 9 | 10 | msgid "Clear List" 11 | msgstr "Hreinsa" 12 | 13 | msgid "Generate" 14 | msgstr "Framleiða" 15 | 16 | msgid "Open" 17 | msgstr "Opna" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Stillingar" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Aftengja valda gagnahirslu" 30 | 31 | -------------------------------------------------------------------------------- /po/it.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Pulisci cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Aggiorna" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositivi" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monta il volume selezionato" 12 | 13 | msgid "Clear List" 14 | msgstr "Pulisci elenco" 15 | 16 | msgid "Generate" 17 | msgstr "Genera" 18 | 19 | msgid "Open" 20 | msgstr "Apri" 21 | 22 | msgid "menu" 23 | msgstr "Sottomenù" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferenze" 27 | 28 | msgid "Recently Used" 29 | msgstr "Usati di recente" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Smonta il volume selezionato" 33 | 34 | -------------------------------------------------------------------------------- /po/ja.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "キャッシュのクリア" 3 | 4 | msgid "Refresh" 5 | msgstr "更新(R)" 6 | 7 | msgid "Devices" 8 | msgstr "デバイス" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "選択したボリュームをマウントします" 12 | 13 | msgid "Clear List" 14 | msgstr "一覧のクリア(C)" 15 | 16 | msgid "Generate" 17 | msgstr "生成(G)" 18 | 19 | msgid "Open" 20 | msgstr "開く(O)" 21 | 22 | msgid "menu" 23 | msgstr "サブメニュー" 24 | 25 | msgid "Preferences" 26 | msgstr "設定(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "最近開いたファイル" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "選択したボリュームをアンマウントします" 33 | 34 | -------------------------------------------------------------------------------- /po/ka.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "განახლება" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "ამორჩეული ტომის მიერთება" 9 | 10 | msgid "Clear List" 11 | msgstr "სიის გასუფთავება" 12 | 13 | msgid "Generate" 14 | msgstr "გენერაცია" 15 | 16 | msgid "Open" 17 | msgstr "გახსნა" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "პარამეტრები" 24 | 25 | msgid "Recently Used" 26 | msgstr "ბოლოს გამოყენებული" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "შერჩეული ტომის მოხსნა" 30 | 31 | -------------------------------------------------------------------------------- /po/kg.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "vutukila" 3 | 4 | msgid "Clear List" 5 | msgstr "vunzae lutaangulu" 6 | 7 | msgid "Open" 8 | msgstr "ziezula" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "nkalulu" 15 | 16 | msgid "Recently Used" 17 | msgstr "biampa" 18 | 19 | -------------------------------------------------------------------------------- /po/kk.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Жаңарту" 3 | 4 | msgid "Devices" 5 | msgstr "Құрылғылар" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Таңдалған бөлімді тіркеу" 9 | 10 | msgid "Clear List" 11 | msgstr "Тізімді тазарту" 12 | 13 | msgid "Open" 14 | msgstr "Ашу" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Баптаулар" 21 | 22 | msgid "Recently Used" 23 | msgstr "Соңғы қолданылған" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Таңдалған бөлімді тіркеуден шығару" 27 | 28 | -------------------------------------------------------------------------------- /po/km.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "" 9 | 10 | -------------------------------------------------------------------------------- /po/kn.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "ಕ್ಯಾಶೆಯನ್ನು ಅಳಿಸಿಹಾಕು" 3 | 4 | msgid "Refresh" 5 | msgstr "ಪುನಶ್ಚೇತನಗೊಳಿಸು(R)" 6 | 7 | msgid "Devices" 8 | msgstr "ಸಾಧನಗಳು" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "ಆರಿಸಲಾದ ಪರಿಮಾಣವನ್ನು ಅವರೋಹಿಸು" 12 | 13 | msgid "Clear List" 14 | msgstr "ಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು(C)" 15 | 16 | msgid "Generate" 17 | msgstr "ಉತ್ಪಾದಿಸು(G)" 18 | 19 | msgid "Open" 20 | msgstr "ತೆರೆ(O)" 21 | 22 | msgid "menu" 23 | msgstr "ಉಪಪರಿವಿಡಿ" 24 | 25 | msgid "Preferences" 26 | msgstr "ಆದ್ಯತೆಗಳು(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "ಇತ್ತೀಚೆಗೆ ಬಳಸಲ್ಪಟ್ಟ" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "ಆರಿಸಲಾದ ಪರಿಮಾಣವನ್ನು ಅವರೋಹಿಸು" 33 | 34 | -------------------------------------------------------------------------------- /po/ko.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "캐시 지우기" 3 | 4 | msgid "Refresh" 5 | msgstr "새로 고침(R)" 6 | 7 | msgid "Devices" 8 | msgstr "장치" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "선택한 볼륨을 마운트합니다" 12 | 13 | msgid "Clear List" 14 | msgstr "목록 지우기(C)" 15 | 16 | msgid "Generate" 17 | msgstr "만들기(G)" 18 | 19 | msgid "Open" 20 | msgstr "열기(O)" 21 | 22 | msgid "menu" 23 | msgstr "하위 메뉴" 24 | 25 | msgid "Preferences" 26 | msgstr "기본 설정(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "최근 사용" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "선택한 볼륨을 마운트 해제합니다" 33 | 34 | -------------------------------------------------------------------------------- /po/ku.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Tezekirin" 3 | 4 | msgid "Devices" 5 | msgstr "Amûr" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Pergala ku hatiye hilbijartin girê bide" 9 | 10 | msgid "Clear List" 11 | msgstr "Lîsteyê Paqij Bike" 12 | 13 | msgid "Generate" 14 | msgstr "Hilberîne" 15 | 16 | msgid "Open" 17 | msgstr "Vekirin" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Vebijêrk" 24 | 25 | msgid "Recently Used" 26 | msgstr "Teze Bikaranî" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Pergala ku hatiye hilbijartin veqetîne" 30 | 31 | -------------------------------------------------------------------------------- /po/lg.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Clear List" 5 | msgstr "Gyawo olukalala" 6 | 7 | msgid "Open" 8 | msgstr "Bikkula" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "Nteekateeka" 15 | 16 | msgid "Recently Used" 17 | msgstr "Ebyakabukkulibwa" 18 | 19 | -------------------------------------------------------------------------------- /po/li.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Verfrisje" 3 | 4 | msgid "Devices" 5 | msgstr "Wèbdeenste" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "'t geselekteerde volume óntkoppelen." 9 | 10 | msgid "Clear List" 11 | msgstr "Wösje" 12 | 13 | msgid "Open" 14 | msgstr "Äöpene" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Prifferensies" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "'t geselekteerde volume óntkoppelen." 27 | 28 | -------------------------------------------------------------------------------- /po/lt.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Išvalyti podėlį" 3 | 4 | msgid "Refresh" 5 | msgstr "Atnaujinti" 6 | 7 | msgid "Devices" 8 | msgstr "Įrenginiai" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Prijungti pasirinktą laikmeną" 12 | 13 | msgid "Clear List" 14 | msgstr "Išvalyti sąrašą" 15 | 16 | msgid "Generate" 17 | msgstr "Generuoti" 18 | 19 | msgid "Open" 20 | msgstr "Atverti" 21 | 22 | msgid "menu" 23 | msgstr "Submeniu" 24 | 25 | msgid "Preferences" 26 | msgstr "Nustatymai" 27 | 28 | msgid "Recently Used" 29 | msgstr "Vėliausiai naudotieji" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Atjungti pasirinktą laikmeną" 33 | 34 | -------------------------------------------------------------------------------- /po/lv.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Attīrīt kešu" 3 | 4 | msgid "Refresh" 5 | msgstr "Atsvaidzināt" 6 | 7 | msgid "Devices" 8 | msgstr "Ierīces" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montēt izvēlēto sējumu" 12 | 13 | msgid "Clear List" 14 | msgstr "Attīrīt sarakstu" 15 | 16 | msgid "Generate" 17 | msgstr "Ģenerēt" 18 | 19 | msgid "Open" 20 | msgstr "Atvērt" 21 | 22 | msgid "menu" 23 | msgstr "Apakšizvēlne" 24 | 25 | msgid "Preferences" 26 | msgstr "Iestatījumi" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nesen izmantots" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Atmontēt izvēlēto sējumu" 33 | 34 | -------------------------------------------------------------------------------- /po/mai.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "ताजा करू" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "चयनित वॉल्यूम माउण्ट करू " 9 | 10 | msgid "Clear List" 11 | msgstr "सूची साफ करू" 12 | 13 | msgid "Generate" 14 | msgstr "उत्पन्न करू" 15 | 16 | msgid "Open" 17 | msgstr "खोलू" 18 | 19 | msgid "menu" 20 | msgstr "उप मेनू" 21 | 22 | msgid "Preferences" 23 | msgstr "वरीयता" 24 | 25 | msgid "Recently Used" 26 | msgstr "हालमे प्रयुक्त" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "चयनित वॉल्यूम अनमाउण्ट करू " 30 | 31 | -------------------------------------------------------------------------------- /po/mg.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "Sampan'asa anaty" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Mampakatra ilay kapila voafaritra" 6 | 7 | msgid "Generate" 8 | msgstr "Hamorona" 9 | 10 | msgid "Unmount the selected volume" 11 | msgstr "Mandatsaka ilay kapila voafaritra" 12 | 13 | -------------------------------------------------------------------------------- /po/mi.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Whakārahina" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Kotia te whiringa" 9 | 10 | msgid "Clear List" 11 | msgstr "Whakawātea" 12 | 13 | msgid "Open" 14 | msgstr "Huaki" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Ngā Tina Hiahia" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Kotia te whiringa" 27 | 28 | -------------------------------------------------------------------------------- /po/mk.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Освежи" 3 | 4 | msgid "Devices" 5 | msgstr "Уреди" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Монтирај го означениот уред (партиција)" 9 | 10 | msgid "Clear List" 11 | msgstr "Исчисти ја листата" 12 | 13 | msgid "Generate" 14 | msgstr "Генерирај" 15 | 16 | msgid "Open" 17 | msgstr "Отвори" 18 | 19 | msgid "menu" 20 | msgstr "Подмени" 21 | 22 | msgid "Preferences" 23 | msgstr "Преференци" 24 | 25 | msgid "Recently Used" 26 | msgstr "Скорешно користени" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Демонтирај ја избраната јачина" 30 | 31 | -------------------------------------------------------------------------------- /po/ml.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "കാഷ് വെടിപ്പാക്കുക" 3 | 4 | msgid "Refresh" 5 | msgstr "പുതുക്കുക " 6 | 7 | msgid "Devices" 8 | msgstr "ഡിവൈസുകള്‍" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "തിരഞ്ഞെടുത്ത വോള്യം മൌണ്ടു് ചെയ്യുക" 12 | 13 | msgid "Clear List" 14 | msgstr "പട്ടിക വെടിപ്പാക്കുക" 15 | 16 | msgid "Generate" 17 | msgstr "ഉണ്ടാക്കുക" 18 | 19 | msgid "Open" 20 | msgstr "തുറക്കുക " 21 | 22 | msgid "menu" 23 | msgstr "സബ്മെനു" 24 | 25 | msgid "Preferences" 26 | msgstr "മുന്‍ഗണനകള്‍ " 27 | 28 | msgid "Recently Used" 29 | msgstr "ഏറ്റവും ഒടുവില്‍ ഉപയോഗിച്ച" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "തെരഞ്ഞെടുത്ത ലക്കം വിടുവിക്കുക" 33 | 34 | -------------------------------------------------------------------------------- /po/mn.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Сэргээх" 3 | 4 | msgid "Devices" 5 | msgstr "Үйлчилгээ" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Сонгосон хуваалтыг залгах" 9 | 10 | msgid "Clear List" 11 | msgstr "Цэвэрлэх" 12 | 13 | msgid "Generate" 14 | msgstr "Ерөнхий" 15 | 16 | msgid "Open" 17 | msgstr "Нээх" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Тохируулгууд" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Сонгосон хуваалтыг салгах" 30 | 31 | -------------------------------------------------------------------------------- /po/mr.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "कॅशे पुसा" 3 | 4 | msgid "Refresh" 5 | msgstr "पुन्ह दाखल करा" 6 | 7 | msgid "Devices" 8 | msgstr "उपकरण" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "निवडलेला खंड आरोहीत करा" 12 | 13 | msgid "Clear List" 14 | msgstr "यादी साफ करा(C)" 15 | 16 | msgid "Generate" 17 | msgstr "बनवा" 18 | 19 | msgid "Open" 20 | msgstr "उघडा" 21 | 22 | msgid "menu" 23 | msgstr "उपमेन्यु" 24 | 25 | msgid "Preferences" 26 | msgstr "आवड निवड" 27 | 28 | msgid "Recently Used" 29 | msgstr "नुकतेच वापरलेले" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "निवडलेला खंड अनारोहीत करा" 33 | 34 | -------------------------------------------------------------------------------- /po/ms.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Segarkan" 3 | 4 | msgid "Devices" 5 | msgstr "Peranti" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Lekapkan volum dipilih" 9 | 10 | msgid "Clear List" 11 | msgstr "Kosongkan" 12 | 13 | msgid "Generate" 14 | msgstr "Umum" 15 | 16 | msgid "Open" 17 | msgstr "Buka" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Keutamaan" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Nyahlekap volum dipilih" 30 | 31 | -------------------------------------------------------------------------------- /po/my.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "ပြန်နှိုးပါ" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "" 9 | 10 | msgid "Clear List" 11 | msgstr "စာရင်းကို ရှင်းလင်းပါ" 12 | 13 | msgid "Generate" 14 | msgstr "G စကားဝှက်ထုတ်လုပ်မည်" 15 | 16 | msgid "Open" 17 | msgstr "ဖွင့်ပါ" 18 | 19 | msgid "menu" 20 | msgstr "စာရင်းမှတ်ခွဲ" 21 | 22 | msgid "Preferences" 23 | msgstr "ဦးစားပေးချက်များ" 24 | 25 | msgid "Recently Used" 26 | msgstr "လတ်တလော သုံးစွဲမှု" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "" 30 | 31 | -------------------------------------------------------------------------------- /po/nb.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Oppdater" 6 | 7 | msgid "Devices" 8 | msgstr "Enheter" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monter valgt volum" 12 | 13 | msgid "Clear List" 14 | msgstr "Tøm listen" 15 | 16 | msgid "Generate" 17 | msgstr "Generer" 18 | 19 | msgid "Open" 20 | msgstr "Åpne" 21 | 22 | msgid "menu" 23 | msgstr "Undermeny" 24 | 25 | msgid "Preferences" 26 | msgstr "Brukervalg" 27 | 28 | msgid "Recently Used" 29 | msgstr "Sist brukt" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Avmonter valgt volum" 33 | 34 | -------------------------------------------------------------------------------- /po/nds.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Opfrischen" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Utwähltes Lööpwark inbinnen" 9 | 10 | msgid "Clear List" 11 | msgstr "List opklaren" 12 | 13 | msgid "Generate" 14 | msgstr "" 15 | 16 | msgid "Open" 17 | msgstr "Opmaken" 18 | 19 | msgid "menu" 20 | msgstr "Unnermenü" 21 | 22 | msgid "Preferences" 23 | msgstr "Instellens" 24 | 25 | msgid "Recently Used" 26 | msgstr "Tolest brukt" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Utwähltes Lööpwark utbinnen" 30 | 31 | -------------------------------------------------------------------------------- /po/ne.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "क्यास खाली गर्नुहोस्" 3 | 4 | msgid "Refresh" 5 | msgstr "ताजा पार्नुहोस्" 6 | 7 | msgid "Devices" 8 | msgstr "यसमा सेवाहरू" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "चयन गरिएको भोल्युम माउण्ट गर्नुहोस्" 12 | 13 | msgid "Clear List" 14 | msgstr "खाली गर्नुहोस्" 15 | 16 | msgid "Generate" 17 | msgstr "जेनरेट गर्नुहोस्" 18 | 19 | msgid "Open" 20 | msgstr "खोल्नुहोस्" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "प्राथमिकताहरू" 27 | 28 | msgid "Recently Used" 29 | msgstr "" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "चयन गरिएको भोल्युम अनमाउन्ट गर्नुहोस्" 33 | 34 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Geheugenbuffer legen" 3 | 4 | msgid "Refresh" 5 | msgstr "Verversen" 6 | 7 | msgid "Devices" 8 | msgstr "Apparaten" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Het geselecteerde volumen aankoppelen." 12 | 13 | msgid "Clear List" 14 | msgstr "Lijst wissen" 15 | 16 | msgid "Generate" 17 | msgstr "Genereren" 18 | 19 | msgid "Open" 20 | msgstr "Openen" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Voorkeuren" 27 | 28 | msgid "Recently Used" 29 | msgstr "Onlangs gebruikt" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Het geselecteerde volumen ontkoppelen." 33 | 34 | -------------------------------------------------------------------------------- /po/nn.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Oppfrisk" 3 | 4 | msgid "Devices" 5 | msgstr "Einingar" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Monter det valde volumet" 9 | 10 | msgid "Clear List" 11 | msgstr "Tøm lista" 12 | 13 | msgid "Generate" 14 | msgstr "Opprett" 15 | 16 | msgid "Open" 17 | msgstr "Opna" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Innstillingar" 24 | 25 | msgid "Recently Used" 26 | msgstr "Sist brukt" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Avmonter det valde datalageret" 30 | 31 | -------------------------------------------------------------------------------- /po/nso.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Thoma o tšwelepele" 3 | 4 | msgid "Devices" 5 | msgstr "Ditirelo tšeo di lego go" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Godiša bolumo e kgethilwego" 9 | 10 | msgid "Clear List" 11 | msgstr "Phumola" 12 | 13 | msgid "Open" 14 | msgstr "Bula" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Tše ratwago" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Fokotša bolumo e kgethilwego" 27 | 28 | -------------------------------------------------------------------------------- /po/oc.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualizar" 6 | 7 | msgid "Devices" 8 | msgstr "" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montar lo volum seleccionat" 12 | 13 | msgid "Clear List" 14 | msgstr "Netejar la tièra" 15 | 16 | msgid "Generate" 17 | msgstr "Suprimir" 18 | 19 | msgid "Open" 20 | msgstr "Dobrir" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferéncias" 27 | 28 | msgid "Recently Used" 29 | msgstr "" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmontar lo volum seleccionat" 33 | 34 | -------------------------------------------------------------------------------- /po/or.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "ପରିଷ୍କାର କ୍ୟାଶେ" 3 | 4 | msgid "Refresh" 5 | msgstr "ସତେଜିତ କରନ୍ତୁ" 6 | 7 | msgid "Devices" 8 | msgstr "ଉପକରଣଗୁଡ଼ିକ" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "ବଚ୍ଛିତ ଆକରାକୁ ସ୍ଥାପନ କରନ୍ତୁ" 12 | 13 | msgid "Clear List" 14 | msgstr "ତାଲିକାକୁ ସଫା କରନ୍ତୁ" 15 | 16 | msgid "Generate" 17 | msgstr "ସ୍ରୁଷ୍ଟି କରନ୍ତୁ" 18 | 19 | msgid "Open" 20 | msgstr "ଖୋଲନ୍ତୁ" 21 | 22 | msgid "menu" 23 | msgstr "ଉପତାଲିକା" 24 | 25 | msgid "Preferences" 26 | msgstr "ପସନ୍ଦ" 27 | 28 | msgid "Recently Used" 29 | msgstr "ନିକଟରେ ବ୍ୟବହୃତ" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "ବଚ୍ଛିତ ଆକାରକୁ ବିସ୍ଥାପନ କରନ୍ତୁ" 33 | 34 | -------------------------------------------------------------------------------- /po/pa.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "ਤਾਜ਼ਾ(R)" 6 | 7 | msgid "Devices" 8 | msgstr "ਜੰਤਰ" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "ਚੁਣੇ ਵਾਲੀਅਮ ਨੂੰ ਮਾਊਂਟ ਕਰੋ" 12 | 13 | msgid "Clear List" 14 | msgstr "ਲਿਸਟ ਸਾਫ਼ ਕਰੋ(C)" 15 | 16 | msgid "Generate" 17 | msgstr "ਬਣਾਓ(G)" 18 | 19 | msgid "Open" 20 | msgstr "ਖੋਲ੍ਹੋ(O)" 21 | 22 | msgid "menu" 23 | msgstr "ਸਬ-ਮੇਨੂ" 24 | 25 | msgid "Preferences" 26 | msgstr "ਮੇਰੀ ਪਸੰਦ(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "ਤਾਜ਼ਾ ਵਰਤੇ" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "ਚੁਣੇ ਹਿੱਸੇ ਨੂੰ ਅਣ-ਮਾਊਂਟ ਕਰੋ" 33 | 34 | -------------------------------------------------------------------------------- /po/pl.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Odśwież" 6 | 7 | msgid "Devices" 8 | msgstr "Urządzenia" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montuje wybrany wolumin" 12 | 13 | msgid "Clear List" 14 | msgstr "Wyczyść listę" 15 | 16 | msgid "Generate" 17 | msgstr "Utworzenie" 18 | 19 | msgid "Open" 20 | msgstr "Otwórz" 21 | 22 | msgid "menu" 23 | msgstr "Podmenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferencje" 27 | 28 | msgid "Recently Used" 29 | msgstr "Ostatnio używane" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Odmontowuje wybrany wolumin" 33 | 34 | -------------------------------------------------------------------------------- /po/ps.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "تاندول" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "ټاکل شوی ډکون درول" 9 | 10 | msgid "Clear List" 11 | msgstr "لړ پاکول" 12 | 13 | msgid "Generate" 14 | msgstr "جوړول" 15 | 16 | msgid "Open" 17 | msgstr "پرانيستل" 18 | 19 | msgid "menu" 20 | msgstr "څېرمه غورنۍ" 21 | 22 | msgid "Preferences" 23 | msgstr "غوراوي" 24 | 25 | msgid "Recently Used" 26 | msgstr "اوسن کارول شوي" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "ټاکل شوی ډکون نادرول" 30 | 31 | -------------------------------------------------------------------------------- /po/pt.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Limpar cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Actualizar" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositivos" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montar a unidade seleccionada" 12 | 13 | msgid "Clear List" 14 | msgstr "Limpar a Lista" 15 | 16 | msgid "Generate" 17 | msgstr "Gerar" 18 | 19 | msgid "Open" 20 | msgstr "Abrir" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferências" 27 | 28 | msgid "Recently Used" 29 | msgstr "Utilizados Recentemente" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmontar a unidade seleccionada" 33 | 34 | -------------------------------------------------------------------------------- /po/pt_BR.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Limpar cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Atualizar" 6 | 7 | msgid "Devices" 8 | msgstr "Dispositivos" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monta o volume selecionado" 12 | 13 | msgid "Clear List" 14 | msgstr "Limpar lista" 15 | 16 | msgid "Generate" 17 | msgstr "Gerar" 18 | 19 | msgid "Open" 20 | msgstr "Abrir" 21 | 22 | msgid "menu" 23 | msgstr "Submenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferências" 27 | 28 | msgid "Recently Used" 29 | msgstr "Usado recentemente" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Desmonta o volume selecionado" 33 | 34 | -------------------------------------------------------------------------------- /po/ro.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Șterge memoria cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Reîmprospătează" 6 | 7 | msgid "Devices" 8 | msgstr "Dispozitive" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montează volumul selectat" 12 | 13 | msgid "Clear List" 14 | msgstr "Golește lista" 15 | 16 | msgid "Generate" 17 | msgstr "Generează" 18 | 19 | msgid "Open" 20 | msgstr "Deschide" 21 | 22 | msgid "menu" 23 | msgstr "Sub-meniu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferințe" 27 | 28 | msgid "Recently Used" 29 | msgstr "Utilizate recent" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Demontează volumul selectat" 33 | 34 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Очистить кэш" 3 | 4 | msgid "Refresh" 5 | msgstr "Обновить" 6 | 7 | msgid "Devices" 8 | msgstr "Устройства" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Присоединить выбранный том" 12 | 13 | msgid "Clear List" 14 | msgstr "Очистить список" 15 | 16 | msgid "Generate" 17 | msgstr "Создать" 18 | 19 | msgid "Open" 20 | msgstr "Открыть" 21 | 22 | msgid "menu" 23 | msgstr "Подменю" 24 | 25 | msgid "Preferences" 26 | msgstr "Параметры" 27 | 28 | msgid "Recently Used" 29 | msgstr "Недавние документы" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Отсоединить выбранный том" 33 | 34 | -------------------------------------------------------------------------------- /po/rw.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "ububikoremezo y'Ubwihisho" 3 | 4 | msgid "Refresh" 5 | msgstr "Kugira gishya" 6 | 7 | msgid "Devices" 8 | msgstr "in" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Byahiswemo Igice" 12 | 13 | msgid "Clear List" 14 | msgstr "Gusiba" 15 | 16 | msgid "Generate" 17 | msgstr "" 18 | 19 | msgid "Open" 20 | msgstr "Gufungura" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "Ibyahiswemo" 27 | 28 | msgid "Recently Used" 29 | msgstr "" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Byahiswemo Igice" 33 | 34 | -------------------------------------------------------------------------------- /po/si.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "ප්‍රබෝධ කරීම" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "තෝරාගත් පරීමාව ස්ථාපනය කරන්න" 9 | 10 | msgid "Clear List" 11 | msgstr "ලැයිස්තුව පැහැදිලි කරන්න" 12 | 13 | msgid "Generate" 14 | msgstr "ජනනය" 15 | 16 | msgid "Open" 17 | msgstr "විවෘත කරන්න" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "අභිප්‍රේත" 24 | 25 | msgid "Recently Used" 26 | msgstr "මැතකදි භාවිතා කළ" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "තෝරාගත් පරිමාව අස්ථාපනය කරන්න" 30 | 31 | -------------------------------------------------------------------------------- /po/sk.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Pamäťová vyrovnávacia pamäť" 3 | 4 | msgid "Refresh" 5 | msgstr "Obnoviť" 6 | 7 | msgid "Devices" 8 | msgstr "Zariadenia" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Pripojí vybraný disk" 12 | 13 | msgid "Clear List" 14 | msgstr "Vyčistiť zoznam" 15 | 16 | msgid "Generate" 17 | msgstr "Vygenerovať" 18 | 19 | msgid "Open" 20 | msgstr "Otvoriť" 21 | 22 | msgid "menu" 23 | msgstr "Podponuka" 24 | 25 | msgid "Preferences" 26 | msgstr "Nastavenia" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nedávno použité" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Odpojí vybraný disk" 33 | 34 | -------------------------------------------------------------------------------- /po/sl.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Počisti predpomnilnik" 3 | 4 | msgid "Refresh" 5 | msgstr "Osveži" 6 | 7 | msgid "Devices" 8 | msgstr "Naprave" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Priklopi izbrani nosilec" 12 | 13 | msgid "Clear List" 14 | msgstr "Počisti seznam" 15 | 16 | msgid "Generate" 17 | msgstr "Ustvari" 18 | 19 | msgid "Open" 20 | msgstr "Odpri" 21 | 22 | msgid "menu" 23 | msgstr "Podmeni" 24 | 25 | msgid "Preferences" 26 | msgstr "Možnosti" 27 | 28 | msgid "Recently Used" 29 | msgstr "Nedavno uporabljeno" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Odklopi izbrani nosilec" 33 | 34 | -------------------------------------------------------------------------------- /po/sq.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Rifresko" 6 | 7 | msgid "Devices" 8 | msgstr "" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Monton volumin e zgjedhur" 12 | 13 | msgid "Clear List" 14 | msgstr "Pastro listën" 15 | 16 | msgid "Generate" 17 | msgstr "Gjenero" 18 | 19 | msgid "Open" 20 | msgstr "Hap" 21 | 22 | msgid "menu" 23 | msgstr "Nënmenu" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferimet" 27 | 28 | msgid "Recently Used" 29 | msgstr "Përdorur së fundmi" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Zmonton volumin e zgjedhur" 33 | 34 | -------------------------------------------------------------------------------- /po/sr.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Освежи" 6 | 7 | msgid "Devices" 8 | msgstr "Уређаји" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Монтирајте изабрани диск" 12 | 13 | msgid "Clear List" 14 | msgstr "Очисти списак" 15 | 16 | msgid "Generate" 17 | msgstr "Образуј" 18 | 19 | msgid "Open" 20 | msgstr "Отвори" 21 | 22 | msgid "menu" 23 | msgstr "избор" 24 | 25 | msgid "Preferences" 26 | msgstr "Поставке" 27 | 28 | msgid "Recently Used" 29 | msgstr "Скоро коришћено" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Демонтирајте изабрани диск" 33 | 34 | -------------------------------------------------------------------------------- /po/sr@Latn.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | -------------------------------------------------------------------------------- /po/sr@ije.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Освјежи" 3 | 4 | msgid "Devices" 5 | msgstr "Веб услуге" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Монтирај изабрани диск" 9 | 10 | msgid "Clear List" 11 | msgstr "Очисти" 12 | 13 | msgid "Open" 14 | msgstr "Отвори" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Поставке" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Демонтирај изабрани диск" 27 | 28 | -------------------------------------------------------------------------------- /po/sr@latin.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Osveži" 3 | 4 | msgid "Devices" 5 | msgstr "Uređaji" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Montirajte izabrani disk" 9 | 10 | msgid "Clear List" 11 | msgstr "Očisti spisak" 12 | 13 | msgid "Generate" 14 | msgstr "Obrazuj" 15 | 16 | msgid "Open" 17 | msgstr "Otvori" 18 | 19 | msgid "menu" 20 | msgstr "izbor" 21 | 22 | msgid "Preferences" 23 | msgstr "Postavke" 24 | 25 | msgid "Recently Used" 26 | msgstr "Skoro korišćeno" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Demontirajte izabrani disk" 30 | 31 | -------------------------------------------------------------------------------- /po/sv.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Töm cache" 3 | 4 | msgid "Refresh" 5 | msgstr "Uppdatera" 6 | 7 | msgid "Devices" 8 | msgstr "Enheter" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Montera den markerade volymen" 12 | 13 | msgid "Clear List" 14 | msgstr "Töm lista" 15 | 16 | msgid "Generate" 17 | msgstr "Skapa" 18 | 19 | msgid "Open" 20 | msgstr "Öppna" 21 | 22 | msgid "menu" 23 | msgstr "Undermeny" 24 | 25 | msgid "Preferences" 26 | msgstr "Inställningar" 27 | 28 | msgid "Recently Used" 29 | msgstr "Tidigare använda" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Avmontera den markerade volymen" 33 | 34 | -------------------------------------------------------------------------------- /po/ta.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "கேஷை துடை" 3 | 4 | msgid "Refresh" 5 | msgstr "புதுப்பி" 6 | 7 | msgid "Devices" 8 | msgstr "சாதனங்கள்" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "தேர்வு செய்த வன்பொருளை ஏற்றவும்" 12 | 13 | msgid "Clear List" 14 | msgstr "பட்டியலை துடை" 15 | 16 | msgid "Generate" 17 | msgstr "உருவாக்கு" 18 | 19 | msgid "Open" 20 | msgstr "திற" 21 | 22 | msgid "menu" 23 | msgstr "துணை மெனு" 24 | 25 | msgid "Preferences" 26 | msgstr "முன்னுரிமைகள்" 27 | 28 | msgid "Recently Used" 29 | msgstr "சமீபகாத்தில் பயன்படுத்தப்பட்டது" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "தேர்வு செய்த பொருள்களை வெளியேற்று" 33 | 34 | -------------------------------------------------------------------------------- /po/te.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "క్యాచీను శుభ్రముచేయి" 3 | 4 | msgid "Refresh" 5 | msgstr "తాజాపరుచు" 6 | 7 | msgid "Devices" 8 | msgstr "పరికరాలు" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "ఎంచుకున్న సంపుటమును మౌంటుచేయి" 12 | 13 | msgid "Clear List" 14 | msgstr "జాబితాను శుభ్రంచేయి" 15 | 16 | msgid "Generate" 17 | msgstr "జనియింపచేయుము" 18 | 19 | msgid "Open" 20 | msgstr "తెరువు" 21 | 22 | msgid "menu" 23 | msgstr "ఉపమెనూ" 24 | 25 | msgid "Preferences" 26 | msgstr "ప్రాధాన్యతలు" 27 | 28 | msgid "Recently Used" 29 | msgstr "ఇటీవల వాడినవి" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "ఎంచుకున్న సంపుటమును అన్‌మౌంటుచేయి" 33 | 34 | -------------------------------------------------------------------------------- /po/th.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "ล้างแคช" 3 | 4 | msgid "Refresh" 5 | msgstr "เรียกใหม่" 6 | 7 | msgid "Devices" 8 | msgstr "อุปกรณ์" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "เมานท์โวลุมที่เลือก" 12 | 13 | msgid "Clear List" 14 | msgstr "ล้างรายการ" 15 | 16 | msgid "Generate" 17 | msgstr "สุ่ม" 18 | 19 | msgid "Open" 20 | msgstr "เปิด" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "ปรับแต่ง" 27 | 28 | msgid "Recently Used" 29 | msgstr "เอกสารล่าสุด" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "เลิกเมานท์โวลุมที่เลือก" 33 | 34 | -------------------------------------------------------------------------------- /po/tk.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Ýene Ýükle" 3 | 4 | msgid "Devices" 5 | msgstr "Web Servisler" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Saýlanan hejmi bagla" 9 | 10 | msgid "Clear List" 11 | msgstr "Durla" 12 | 13 | msgid "Open" 14 | msgstr "Aç" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "Seçenekler" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Saýlanan hejmi baglamadan aýyr" 27 | 28 | -------------------------------------------------------------------------------- /po/tr.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "" 3 | 4 | msgid "Refresh" 5 | msgstr "Tazele" 6 | 7 | msgid "Devices" 8 | msgstr "Aygıtlar" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Seçilen birimi bağla" 12 | 13 | msgid "Clear List" 14 | msgstr "Listeyi Temizle" 15 | 16 | msgid "Generate" 17 | msgstr "Üret" 18 | 19 | msgid "Open" 20 | msgstr "Aç" 21 | 22 | msgid "menu" 23 | msgstr "Alt menü" 24 | 25 | msgid "Preferences" 26 | msgstr "Tercihler" 27 | 28 | msgid "Recently Used" 29 | msgstr "Yakında Kullanılan" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Seçilen birimi ayır" 33 | 34 | -------------------------------------------------------------------------------- /po/tt.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Yañart" 3 | 4 | msgid "Clear List" 5 | msgstr "Buşat" 6 | 7 | msgid "Open" 8 | msgstr "Açu" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "Caylaw" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/ug.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "يېڭىلا(R)" 3 | 4 | msgid "Devices" 5 | msgstr "ئۈسكۈنىلەر" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "تاللانغان دىسكىنى ئېگەرلەيدۇ" 9 | 10 | msgid "Clear List" 11 | msgstr "تىزىمنى تازىلا(C)" 12 | 13 | msgid "Generate" 14 | msgstr "قۇر(G)" 15 | 16 | msgid "Open" 17 | msgstr "ئاچ(O)" 18 | 19 | msgid "menu" 20 | msgstr "تارماق تىزىملىك" 21 | 22 | msgid "Preferences" 23 | msgstr "مايىللىق(P)" 24 | 25 | msgid "Recently Used" 26 | msgstr "يېقىندا ئىشلەتكەن" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "تاللانغان دىسكىنى ئېگەرسىزلەيدۇ" 30 | 31 | -------------------------------------------------------------------------------- /po/uk.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Кеш пам'яті" 3 | 4 | msgid "Refresh" 5 | msgstr "Оновити" 6 | 7 | msgid "Devices" 8 | msgstr "Пристрої" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Змонтувати вибраний том" 12 | 13 | msgid "Clear List" 14 | msgstr "Очистити список" 15 | 16 | msgid "Generate" 17 | msgstr "Загальне" 18 | 19 | msgid "Open" 20 | msgstr "Відкрити" 21 | 22 | msgid "menu" 23 | msgstr "Підменю" 24 | 25 | msgid "Preferences" 26 | msgstr "Параметри" 27 | 28 | msgid "Recently Used" 29 | msgstr "Недавні документи" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Демонтувати вибраний том" 33 | 34 | -------------------------------------------------------------------------------- /po/ur.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "" 3 | 4 | msgid "Clear List" 5 | msgstr "" 6 | 7 | msgid "Open" 8 | msgstr "" 9 | 10 | msgid "menu" 11 | msgstr "" 12 | 13 | msgid "Preferences" 14 | msgstr "" 15 | 16 | msgid "Recently Used" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /po/uz.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Yangilash" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Tanlangan disk qismini ulash" 9 | 10 | msgid "Clear List" 11 | msgstr "Roʻyxatni tozalash" 12 | 13 | msgid "Open" 14 | msgstr "Ochish" 15 | 16 | msgid "menu" 17 | msgstr "Quyi menyu" 18 | 19 | msgid "Preferences" 20 | msgstr "Parametrlar" 21 | 22 | msgid "Recently Used" 23 | msgstr "Yaqinda ishlatilganlar" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Tanlangan disk qismini uzish" 27 | 28 | -------------------------------------------------------------------------------- /po/uz@cyrillic.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Янгилаш" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Танланган диск қисмини улаш" 9 | 10 | msgid "Clear List" 11 | msgstr "Рўйхатни тозалаш" 12 | 13 | msgid "Open" 14 | msgstr "Очиш" 15 | 16 | msgid "menu" 17 | msgstr "Қуйи меню" 18 | 19 | msgid "Preferences" 20 | msgstr "Параметрлар" 21 | 22 | msgid "Recently Used" 23 | msgstr "Яқинда ишлатилганлар" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "Танланган диск қисмини узиш" 27 | 28 | -------------------------------------------------------------------------------- /po/vi.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Xoá bộ nhớ tạm" 3 | 4 | msgid "Refresh" 5 | msgstr "Cập nhật" 6 | 7 | msgid "Devices" 8 | msgstr "Thiết bị" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Gắn kết khối tin được chọn" 12 | 13 | msgid "Clear List" 14 | msgstr "Xóa danh sách" 15 | 16 | msgid "Generate" 17 | msgstr "Tạo ra" 18 | 19 | msgid "Open" 20 | msgstr "Mở" 21 | 22 | msgid "menu" 23 | msgstr "Trình đơn con" 24 | 25 | msgid "Preferences" 26 | msgstr "Tùy thích" 27 | 28 | msgid "Recently Used" 29 | msgstr "Vừa dùng" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "Tháo gắn kết khối tin đã chọn" 33 | 34 | -------------------------------------------------------------------------------- /po/wa.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "Muchete e memwere" 3 | 4 | msgid "Refresh" 5 | msgstr "Rafrister" 6 | 7 | msgid "Devices" 8 | msgstr "Siervices waibe" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "Abwesner li tchoezeye pårticion" 12 | 13 | msgid "Clear List" 14 | msgstr "Netyî djivêye" 15 | 16 | msgid "Generate" 17 | msgstr "Djenerå" 18 | 19 | msgid "Open" 20 | msgstr "Drovi" 21 | 22 | msgid "menu" 23 | msgstr "" 24 | 25 | msgid "Preferences" 26 | msgstr "Preferinces" 27 | 28 | msgid "Recently Used" 29 | msgstr "" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "" 33 | 34 | -------------------------------------------------------------------------------- /po/xh.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "Hlaziya" 3 | 4 | msgid "Devices" 5 | msgstr "Iinkonzo kwi" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "Nyusa umthamo okhethiweyo" 9 | 10 | msgid "Clear List" 11 | msgstr "Cima" 12 | 13 | msgid "Generate" 14 | msgstr "Yenza" 15 | 16 | msgid "Open" 17 | msgstr "Vula" 18 | 19 | msgid "menu" 20 | msgstr "" 21 | 22 | msgid "Preferences" 23 | msgstr "Okukhethayo" 24 | 25 | msgid "Recently Used" 26 | msgstr "" 27 | 28 | msgid "Unmount the selected volume" 29 | msgstr "Hlisa umthamo" 30 | 31 | -------------------------------------------------------------------------------- /po/yi.po: -------------------------------------------------------------------------------- 1 | msgid "Refresh" 2 | msgstr "דערהײַנטיק" 3 | 4 | msgid "Devices" 5 | msgstr "" 6 | 7 | msgid "Mount the selected volume" 8 | msgstr "" 9 | 10 | msgid "Clear List" 11 | msgstr "מעק אָפּ" 12 | 13 | msgid "Open" 14 | msgstr "עפֿן" 15 | 16 | msgid "menu" 17 | msgstr "" 18 | 19 | msgid "Preferences" 20 | msgstr "פּרעפֿערענצן" 21 | 22 | msgid "Recently Used" 23 | msgstr "" 24 | 25 | msgid "Unmount the selected volume" 26 | msgstr "" 27 | 28 | -------------------------------------------------------------------------------- /po/yo.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "Sáfíìsì nínúu" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Fi ìgbóhùnsókè-sódò tí a yàn lọ́lẹ̀" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Má fi ìgbóhùnsókè-sódò tí a yàn lọ́lẹ̀ mọ́" 9 | 10 | -------------------------------------------------------------------------------- /po/zh_CN.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "清除缓存" 3 | 4 | msgid "Refresh" 5 | msgstr "刷新(R)" 6 | 7 | msgid "Devices" 8 | msgstr "设备" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "挂载选中的卷" 12 | 13 | msgid "Clear List" 14 | msgstr "清除列表(C)" 15 | 16 | msgid "Generate" 17 | msgstr "生成(G)" 18 | 19 | msgid "Open" 20 | msgstr "打开(O)" 21 | 22 | msgid "menu" 23 | msgstr "子菜单" 24 | 25 | msgid "Preferences" 26 | msgstr "首选项(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "最近使用的" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "卸载选中的文件卷" 33 | 34 | -------------------------------------------------------------------------------- /po/zh_HK.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "記憶快取資料" 3 | 4 | msgid "Refresh" 5 | msgstr "重新整理(R)" 6 | 7 | msgid "Devices" 8 | msgstr "裝置" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "掛載選取的儲存區" 12 | 13 | msgid "Clear List" 14 | msgstr "清除清單(C)" 15 | 16 | msgid "Generate" 17 | msgstr "產生(G)" 18 | 19 | msgid "Open" 20 | msgstr "開啟(O)" 21 | 22 | msgid "menu" 23 | msgstr "選單" 24 | 25 | msgid "Preferences" 26 | msgstr "偏好設定(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "最近使用的" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "卸載選定的儲存區" 33 | 34 | -------------------------------------------------------------------------------- /po/zh_TW.po: -------------------------------------------------------------------------------- 1 | msgid "Clear cache" 2 | msgstr "記憶快取資料" 3 | 4 | msgid "Refresh" 5 | msgstr "重新整理(R)" 6 | 7 | msgid "Devices" 8 | msgstr "裝置" 9 | 10 | msgid "Mount the selected volume" 11 | msgstr "掛載選取的儲存區" 12 | 13 | msgid "Clear List" 14 | msgstr "清除清單(C)" 15 | 16 | msgid "Generate" 17 | msgstr "產生(G)" 18 | 19 | msgid "Open" 20 | msgstr "開啟(O)" 21 | 22 | msgid "menu" 23 | msgstr "選單" 24 | 25 | msgid "Preferences" 26 | msgstr "偏好設定(P)" 27 | 28 | msgid "Recently Used" 29 | msgstr "最近使用的" 30 | 31 | msgid "Unmount the selected volume" 32 | msgstr "卸載選定的儲存區" 33 | 34 | -------------------------------------------------------------------------------- /po/zu.po: -------------------------------------------------------------------------------- 1 | msgid "Devices" 2 | msgstr "Izisekelo ku" 3 | 4 | msgid "Mount the selected volume" 5 | msgstr "Khuphula umsindo okhethiwe" 6 | 7 | msgid "Unmount the selected volume" 8 | msgstr "Yehlisa umsindo okhethiwe" 9 | 10 | -------------------------------------------------------------------------------- /quicktests/gmenu_apps.py: -------------------------------------------------------------------------------- 1 | import gmenu 2 | 3 | def print_dir(entry, l): 4 | i = " " * l 5 | print i + "+==MENU" 6 | print i + "|- name:", entry.get_name() 7 | print i + "|- id:", entry.get_menu_id() 8 | print i + "|- icon:", entry.get_icon() 9 | print i + "|- file:", entry.get_desktop_file_path() 10 | print i + "|" 11 | print i + " \\" 12 | for e in entry.get_contents(): 13 | t = e.get_type() 14 | if t == gmenu.TYPE_SEPARATOR: 15 | print_sep(e, l+1) 16 | elif t == gmenu.TYPE_DIRECTORY: 17 | print_dir(e, l+1) 18 | elif t == gmenu.TYPE_ENTRY: 19 | print_app(e, l+1) 20 | 21 | def print_app(entry, l): 22 | i = " "*l 23 | print i + "+==APP" 24 | print i + "|- name:", entry.get_display_name() 25 | print i + "|- file:", entry.get_desktop_file_path() 26 | print i + "|- exec:", entry.get_exec() 27 | print i + "|- icon:", entry.get_icon() 28 | print i + "|- term:", entry.get_launch_in_terminal() 29 | print i + "+- viz:", not entry.get_is_excluded() 30 | 31 | def print_sep(entry, l): 32 | i = " " * l 33 | n = 90 - len(i) 34 | print 35 | print i + "=" * n 36 | print 37 | 38 | def print_menu(): 39 | tree = gmenu.lookup_tree('uxm-applications.menu') 40 | root = tree.get_root_directory() 41 | print_dir(root, 0) 42 | 43 | 44 | 45 | print_menu() 46 | -------------------------------------------------------------------------------- /quicktests/gmenu_test.py: -------------------------------------------------------------------------------- 1 | import gmenu 2 | 3 | def printobj(obj, level=0): 4 | i = ">>>" * level 5 | print i, str(obj.__class__) 6 | for prop in dir(obj): 7 | print i + '>>>', prop, '=>', repr(getattr(obj, prop)) 8 | print "" 9 | 10 | tree = gmenu.lookup_tree('uxm-applications.menu') 11 | root = tree.get_root_directory() 12 | 13 | print ">>> ROOT" 14 | printobj(root) 15 | 16 | for entry in root.get_contents(): 17 | printobj(entry, 1) 18 | print "\n" 19 | if hasattr(entry, 'get_contents'): 20 | for e in entry.get_contents(): 21 | printobj(e, 2) 22 | print "\n" 23 | if hasattr(e, 'get_contents'): 24 | for e2 in e.get_contents(): 25 | printobj(e2, 3) 26 | print "\n" 27 | 28 | -------------------------------------------------------------------------------- /quicktests/gtk/pixbuf.py: -------------------------------------------------------------------------------- 1 | import os 2 | import gtk 3 | 4 | """gtk.gdk.Pixbuf.composite 5 | def composite(dest, dest_x, dest_y, dest_width, dest_height, offset_x, offset_y, scale_x, scale_y, interp_type, overall_alpha) 6 | 7 | dest : the output gtk.gdk.Pixbuf 8 | dest_x : the X coordinate for the rectangle 9 | dest_y : the top coordinate for the rectangle 10 | dest_width : the width of the rectangle 11 | dest_height : the height of the rectangle 12 | offset_x : the offset in the X direction (currently rounded to an integer) 13 | offset_y : the offset in the Y direction (currently rounded to an integer) 14 | scale_x : the scale factor in the X direction 15 | scale_y : the scale factor in the Y direction 16 | interp_type : the interpolation type for the transformation. 17 | overall_alpha : overall alpha for source image (0..255) 18 | """ 19 | 20 | __DIR__ = os.path.dirname(os.path.abspath(__file__)) 21 | ICON_DIR = "/usr/share/icons/elementary-statler" 22 | 23 | ICON_FILE = ICON_DIR + "/places/48/folder.svg" 24 | LINK_FILE = ICON_DIR + "/emblems/48/emblem-symbolic-link.svg" 25 | 26 | icon = gtk.gdk.pixbuf_new_from_file_at_size(ICON_FILE, 48, 48) 27 | link = gtk.gdk.pixbuf_new_from_file_at_size(LINK_FILE, 64, 64) 28 | 29 | def get_scale_factor(icon, link): 30 | result = icon.props.width / 2.0 31 | scale = result / link.props.width 32 | return float(scale) 33 | 34 | link_w = link.props.width 35 | link_h = link.props.height 36 | icon_w = icon.props.width 37 | icon_h = icon.props.height 38 | 39 | scale = get_scale_factor(icon, link) 40 | # the source 41 | link.composite( 42 | icon, # the dest 43 | 0, 0, 44 | icon_w, icon_h, 45 | icon_w/2, icon_h/2, 46 | scale, scale, # scale the source 47 | gtk.gdk.INTERP_HYPER, 48 | 255 # alpha of the source 49 | ) 50 | 51 | icon.save(__DIR__+'/composite.png', 'png') 52 | -------------------------------------------------------------------------------- /quicktests/index.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | sys.path.insert(0, os.path.dirname(__file__)+'/../usr/lib/uxdgmenu') 4 | 5 | import uxm.dialogs.launcher.models.index as index 6 | 7 | words = ( 8 | "getting", "things", "gnome", "gtg", 9 | "google", "gtk", "gotcha", "thingamagog", 10 | "gamble", 'prolog', 'goofy', 'logging', 11 | 'toggle', 'pogotage', 'gateau', 'giratoire', 12 | 'gatage', 'geothermologie', 'gitane', 'gigantesque', 13 | 'guitare-gratte' 14 | ) 15 | idx = index.Index() 16 | for i, word in enumerate(words): 17 | idx.add(word, {"id": i}) 18 | 19 | 20 | def test(word): 21 | res1, res2 = idx.find([word]), idx.score([word]) 22 | #print "Test:", word 23 | #print ">>> Find: ", [words[i] for i in idx.find([word])] 24 | #print ">>> Score:", [words[i] for i in idx.score([word])] 25 | 26 | 27 | for i in xrange(10000): 28 | test('g') 29 | test('gt') 30 | test('gtg') 31 | test('tg') 32 | -------------------------------------------------------------------------------- /quicktests/multiproc.py: -------------------------------------------------------------------------------- 1 | import os 2 | import multiprocessing 3 | import time 4 | 5 | from xdg.Exceptions import ParsingError 6 | import xdg.Menu 7 | from xdg.Menu import MenuEntry 8 | 9 | 10 | def parse_desktop_file(item): 11 | path, dir, prefix = item 12 | try: 13 | menuentry = MenuEntry(path, dir, prefix) 14 | except ParsingError: 15 | return 16 | return menuentry, dir 17 | 18 | 19 | class MenuEntryCache: 20 | "Class to cache Desktop Entries" 21 | def __init__(self): 22 | self.cacheEntries = {} 23 | self.cacheEntries['legacy'] = [] 24 | self.cache = {} 25 | 26 | def addMenuEntries(self, dirs, prefix="", legacy=False): 27 | for dir in dirs: 28 | if not dir in self.cacheEntries: 29 | self.cacheEntries[dir] = [] 30 | self.addFiles(dir, "", prefix, legacy) 31 | 32 | def __addFiles(self, dir, subdir, prefix, legacy): 33 | for item in os.listdir(os.path.join(dir, subdir)): 34 | if os.path.splitext(item)[1] == ".desktop": 35 | try: 36 | menuentry = MenuEntry(os.path.join(subdir, item), dir, prefix) 37 | except ParsingError: 38 | continue 39 | 40 | self.cacheEntries[dir].append(menuentry) 41 | if legacy: 42 | self.cacheEntries['legacy'].append(menuentry) 43 | elif os.path.isdir(os.path.join(dir, subdir, item)) and not legacy: 44 | self.__addFiles(dir, os.path.join(subdir, item), prefix, legacy) 45 | 46 | def addFiles(self, dir, subdir, prefix, legacy): 47 | files = [f for f in self.iter_appdirs(dir, subdir, prefix, legacy)] 48 | pool = multiprocessing.Pool() 49 | entries = pool.map(parse_desktop_file, files, 32) 50 | for menuentry, dir in entries: 51 | self.cacheEntries[dir].append(menuentry) 52 | if legacy: 53 | self.cacheEntries['legacy'].append(menuentry) 54 | 55 | def iter_appdirs(self, dir, subdir, prefix, legacy): 56 | for item in os.listdir(os.path.join(dir, subdir)): 57 | if item.endswith(".desktop"): 58 | yield os.path.join(subdir, item), dir, prefix 59 | elif os.path.isdir(os.path.join(dir, subdir, item)) and legacy is False: 60 | for p in self.iter_appdirs(dir, os.path.join(subdir, item), prefix, legacy): 61 | yield p 62 | 63 | def getMenuEntries(self, dirs, legacy=True): 64 | list = [] 65 | ids = [] 66 | # handle legacy items 67 | appdirs = dirs[:] 68 | if legacy: 69 | appdirs.append("legacy") 70 | # cache the results again 71 | key = "".join(appdirs) 72 | try: 73 | return self.cache[key] 74 | except KeyError: 75 | pass 76 | for dir in appdirs: 77 | for menuentry in self.cacheEntries[dir]: 78 | try: 79 | if menuentry.DesktopFileID not in ids: 80 | ids.append(menuentry.DesktopFileID) 81 | list.append(menuentry) 82 | elif menuentry.getType() == "System": 83 | # FIXME: This is only 99% correct, but still... 84 | i = list.index(menuentry) 85 | e = list[i] 86 | if e.getType() == "User": 87 | e.Original = menuentry 88 | except UnicodeDecodeError: 89 | continue 90 | self.cache[key] = list 91 | return list 92 | 93 | 94 | start = time.time() 95 | xdg.Menu.parse('kde4-applications.menu') 96 | end = time.time() 97 | print "Sync: ", end - start 98 | 99 | xdg.Menu.MenuEntryCache = MenuEntryCache 100 | 101 | start = time.time() 102 | xdg.Menu.parse('kde4-applications.menu') 103 | end = time.time() 104 | print "Multiproc: ", end - start 105 | -------------------------------------------------------------------------------- /quicktests/perf/fadvise_compat.py: -------------------------------------------------------------------------------- 1 | 2 | from ctypes import * 3 | from ctypes.util import find_library 4 | 5 | _libc = CDLL(find_library('c')) 6 | 7 | _posix_fadvise = _libc.posix_fadvise 8 | _posix_fadvise.argtypes = [c_int, c_int8, c_int8, c_int] 9 | _posix_fadvise.restype = c_int 10 | 11 | 12 | ( 13 | POSIX_FADV_NORMAL, 14 | POSIX_FADV_RANDOM, 15 | POSIX_FADV_SEQUENTIAL, 16 | POSIX_FADV_WILLNEED, 17 | POSIX_FADV_DONTNEED, 18 | POSIX_FADV_NOREUSE 19 | ) = range(6) 20 | 21 | 22 | def posix_fadvise(fd, offset, length, advice): 23 | return _posix_fadvise( 24 | c_int(fd), 25 | c_int8(offset), 26 | c_int8(length), 27 | c_int(advice) 28 | ) 29 | -------------------------------------------------------------------------------- /quicktests/perf/inifile.py: -------------------------------------------------------------------------------- 1 | import re 2 | import io 3 | import os 4 | import time 5 | 6 | 7 | COMMENT_RX = re.compile(r'(^\s*#|^\s*$)') 8 | GROUP_RX = re.compile(r'^\[([^\]]+)\]$') 9 | KEY_RX = re.compile(r'^([^=]+)\s*=\s*(.*)$') 10 | 11 | 12 | def parse(self, filename, headers=None): 13 | content = self.content 14 | fd = io.open(filename, 'r', encoding='utf-8', errors='replace') 15 | currentGroup = None 16 | for line in fd: 17 | line = line.strip() 18 | if not line or line[0] == '#': 19 | continue 20 | elif line[0] == '[': 21 | grp = line.strip('[]') 22 | if grp: 23 | currentGroup = grp 24 | content[currentGroup] = {} 25 | else: 26 | m = KEY_RX.match(line) 27 | if m: 28 | key = m.group(1) 29 | value = m.group(2) 30 | content[currentGroup][key] = value 31 | fd.close() 32 | self.filename = filename 33 | self.tainted = False 34 | if headers: 35 | for header in headers: 36 | if headers in content: 37 | self.defaultGroup = header 38 | break 39 | 40 | 41 | from xdg.IniFile import IniFile 42 | 43 | path = '/usr/share/applications' 44 | apps = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.desktop')] 45 | print "Test parsing %s desktop files" % len(apps) 46 | 47 | start = time.time() 48 | for app in apps: 49 | res = IniFile(app) 50 | end = time.time() 51 | print "xdg.IniFile:", end - start 52 | 53 | IniFile.parse = parse 54 | 55 | start = time.time() 56 | for app in apps: 57 | res = IniFile(app) 58 | end = time.time() 59 | print "Patched xdg.IniFile:", end - start 60 | 61 | 62 | from gi.repository import GLib 63 | 64 | start = time.time() 65 | for app in apps: 66 | kf = GLib.KeyFile() 67 | res = kf.load_from_file(app, 0) 68 | end = time.time() 69 | print "GLib.KeyFile:", end - start 70 | -------------------------------------------------------------------------------- /quicktests/perf/ioperf.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import time 4 | 5 | from xdg.IniFile import IniFile 6 | from fadvise_compat import posix_fadvise, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED 7 | 8 | APP_DIR = '/usr/share/applications' 9 | 10 | 11 | def drop_caches(): 12 | subprocess.call("/usr/bin/sudo echo 1 > /proc/sys/vm/drop_caches", shell=True) 13 | 14 | 15 | def parse(): 16 | for f in os.listdir(APP_DIR): 17 | if f.endswith('.desktop'): 18 | path = os.path.join(APP_DIR, f) 19 | IniFile(path) 20 | 21 | 22 | def parse_advise(): 23 | #files = [] 24 | for f in os.listdir(APP_DIR): 25 | if f.endswith('.desktop'): 26 | path = os.path.join(APP_DIR, f) 27 | fd = os.open(path, os.O_RDONLY) 28 | posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL | POSIX_FADV_WILLNEED) 29 | IniFile(path) 30 | #files.append(path) 31 | #for f in files: 32 | #IniFile(path) 33 | 34 | 35 | if __name__ == "__main__": 36 | #start = time.time() 37 | #parse() 38 | #end = time.time() 39 | #print "Parse:", end - start 40 | 41 | start = time.time() 42 | parse_advise() 43 | end = time.time() 44 | print "Parse FAdvise:", end - start 45 | -------------------------------------------------------------------------------- /quicktests/perf/menu.py: -------------------------------------------------------------------------------- 1 | import xdg.Menu 2 | 3 | 4 | root = xdg.Menu.parse('kde4-applications.menu') 5 | -------------------------------------------------------------------------------- /quicktests/perf/path.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/quicktests/perf/path.c -------------------------------------------------------------------------------- /quicktests/recursion_test.py: -------------------------------------------------------------------------------- 1 | import cPickle as pickle 2 | menu = { 3 | 'id': 'Applications', 4 | 'type': 'menu', 5 | 'items': [ 6 | {'id': 'App1', 'type': 'app'}, 7 | {'id': 'App2', 'type': 'app'}, 8 | {'id': 'System', 'type':'menu','items':[ 9 | {'id': 'App3:1', 'type': 'app'}, 10 | {'id': 'App3:2', 'type': 'app'}, 11 | {'id': 'Other', 'type':'menu','items':[ 12 | {'id': 'App3:3:1', 'type': 'app'}, 13 | {'id': 'App3:3:2', 'type': 'app'}, 14 | ]} 15 | ]} 16 | ] 17 | } 18 | 19 | with open ('/home/ju1ius/.cache/uxdgmenu/applications.pckl', 'r') as fp: 20 | menu = pickle.load(fp) 21 | 22 | def iter_menu(item): 23 | if item['type'] == 'application': 24 | yield item 25 | elif item['type'] == 'menu': 26 | for child_item in item['items']: 27 | for child in iter_menu(child_item): 28 | yield child 29 | 30 | for app in iter_menu(menu): 31 | print app['label'], app['command'] 32 | -------------------------------------------------------------------------------- /quicktests/xdg_apps.py: -------------------------------------------------------------------------------- 1 | import xdg.Menu 2 | 3 | def pu(*args): 4 | print unicode(u''.join(args)) 5 | 6 | def print_dir(entry, l): 7 | i = " " * l 8 | pu(i + "+==MENU") 9 | pu(i, "|- name: " + repr(entry.getName())) 10 | pu(i + "|- id:", entry.Name) 11 | pu(i + "|- icon:", entry.getIcon()) 12 | de = entry.Directory 13 | pu(i + "|- file:" + (de and de.DesktopEntry.filename or "None")) 14 | pu(i + "|") 15 | pu(i + " \\") 16 | for e in entry.getEntries(): 17 | if isinstance(e, xdg.Menu.Separator): 18 | print_sep(e, l+1) 19 | elif isinstance(e, xdg.Menu.Menu): 20 | print_dir(e, l+1) 21 | elif isinstance(e, xdg.Menu.MenuEntry): 22 | print_app(e, l+1) 23 | 24 | def print_app(entry, l): 25 | i = " "*l 26 | de = entry.DesktopEntry 27 | pu(i + "+==APP") 28 | pu(i + "|- name:" + repr(de.getName())) 29 | pu(i + "|- file:", de.getFileName()) 30 | pu(i + "|- exec:", de.getExec()) 31 | pu(i + "|- icon:", de.getIcon()) 32 | pu(i + "|- term:" + str(de.getTerminal())) 33 | pu(i + "+- viz:", str(entry.Show == True)) 34 | 35 | def print_sep(entry, l): 36 | i = " " * l 37 | n = 90 - len(i) 38 | print 39 | pu(i + "=" * n) 40 | print 41 | 42 | def print_menu(): 43 | root = xdg.Menu.parse('uxm-applications.menu') 44 | print_dir(root, 0) 45 | 46 | 47 | 48 | print_menu() 49 | -------------------------------------------------------------------------------- /quicktests/xdg_test.py: -------------------------------------------------------------------------------- 1 | import xdg.Menu 2 | 3 | root = xdg.Menu.parse('uxm-applications.menu') 4 | 5 | 6 | def printobj(obj, level=0): 7 | i = ">>>" * level 8 | print i, str(obj.__class__) 9 | for prop in dir(obj): 10 | print i, '>>>', prop, '=>', repr(getattr(obj, prop)) 11 | if hasattr(obj, 'DesktopEntry'): 12 | de = obj.DesktopEntry 13 | print i, ' V - DesktopEntry' 14 | printobj(de, level+1) 15 | if hasattr(obj, 'Directory'): 16 | de = obj.Directory 17 | print i, ' V - Directory' 18 | printobj(de, level+1) 19 | print "" 20 | 21 | 22 | print ">>> ROOT" 23 | printobj(root) 24 | 25 | for entry in root.getEntries(): 26 | printobj(entry, 1) 27 | print "\n" 28 | if hasattr(entry, 'getEntries'): 29 | for e in entry.getEntries(): 30 | printobj(e, 2) 31 | print "\n" 32 | if hasattr(e, 'getEntries'): 33 | for e2 in e.getEntries(): 34 | printobj(e2, 3) 35 | print "\n" 36 | 37 | 38 | -------------------------------------------------------------------------------- /scripts/l10n.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | 3 | import os, glob, optparse, subprocess, time 4 | 5 | if __name__ == "__main__": 6 | path = os.path.abspath(os.path.dirname(__file__)) 7 | po_strings = { 8 | "menu": 'gtk+', 9 | "_refresh": 'gtk+', 10 | "_generate": 'gnome-system-tools', 11 | "_preferences": 'gtk+', 12 | "_clear list": "gtk+", 13 | "_open": "gtk+", 14 | "recently used": "gtk+", 15 | "clear cache": "epiphany-extensions", 16 | "Mount the selected volume": "nautilus", 17 | "Unmount the selected volume": "nautilus", 18 | "Devices": "nautilus" 19 | } 20 | ini_strings = { 21 | "recently used": ("gtk+","uxm-menu-recent-files.directory"), 22 | "bookmarks": ('nautilus','uxm-menu-bookmarks.directory'), 23 | "places": ('nautilus','uxm-menu-places.directory'), 24 | "devices": ('nautilus','uxm-menu-devices.directory') 25 | } 26 | 27 | usage = """%prog [options]""" 28 | op = optparse.OptionParser(usage) 29 | op.add_option( 30 | '-p','--po', action='store_true', 31 | help="Regenerates all .po files" 32 | ) 33 | op.add_option( 34 | '-d','--dir', action='store_true', 35 | help="Regenerates all .directory files" 36 | ) 37 | op.add_option( 38 | '-a', '--all', action='store_true', 39 | help="Same as %prog -pd" 40 | ) 41 | opts, args = op.parse_args() 42 | 43 | start = time.clock() 44 | 45 | if opts.po or opts.all: 46 | po_path = os.path.normpath('%s/../po' % path) 47 | for f in glob.iglob('%s/*.po' % po_path): 48 | os.remove(f) 49 | for k,v in po_strings.items(): 50 | subprocess.call('/home/ju1ius/src/locale/mkpo.py "%s" "%s" "%s"' %( 51 | k, v, po_path 52 | ), shell=True) 53 | 54 | if opts.dir or opts.all: 55 | desktop_path = os.path.normpath('%s/../usr/share/applications' % path) 56 | dir_path = os.path.normpath('%s/../usr/share/desktop-directories' % path) 57 | for k,v in ini_strings.items(): 58 | proj = v[0] 59 | filename = v[1] 60 | if filename.endswith('.desktop'): 61 | filepath = os.path.join(desktop_path, filename) 62 | elif filename.endswith('.directory'): 63 | filepath = os.path.join(dir_path, filename) 64 | else: 65 | filepath = os.path.join(path, filename) 66 | subprocess.call('/home/ju1ius/src/locale/mkdesktop.py "%s" "%s" "%s"' % ( 67 | k, proj, filepath 68 | ), shell=True) 69 | 70 | print "Executed in %s seconds..." % str(time.clock() - start) 71 | -------------------------------------------------------------------------------- /scripts/make-locale.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | __DIR__=$(dirname $(readlink -f $0)) 4 | po_dir=$__DIR__/../po 5 | locale_dir=$__DIR__/../usr/share/locale 6 | domain="uxdgmenu" 7 | 8 | rm -rf $locale_dir/* 2> /dev/null 9 | 10 | echo "==============================" 11 | echo "Building localized messages..." 12 | 13 | #find "$po_dir" -name *.po | while read po_file 14 | for po_file in $po_dir/*.po 15 | do 16 | language=$(basename $po_file '.po') 17 | language_dir="$locale_dir/$language/LC_MESSAGES" 18 | mkdir -p "$language_dir" 19 | msgfmt -o "$language_dir/$domain.mo" "$po_file" 20 | done 21 | 22 | exit 0 23 | -------------------------------------------------------------------------------- /src/uxdgmenud.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __UXDGMENUD_H__ 3 | #define __UXDGMENUD_H__ 4 | 5 | #include 6 | #include 7 | 8 | #define UXM_DAEMON_NAME "uxdgmenud" 9 | #define UXM_UPDATE_CMD_PREFIX "uxm-daemon update" 10 | #define UXM_UPDATE_CMD_BUF_SIZE 256 11 | 12 | #define UXM_DESKTOP_FILE_EXT ".desktop" 13 | #define UXM_DIRECTORY_FILE_EXT ".directory" 14 | #define UXM_MENU_FILE_EXT ".menu" 15 | #define UXM_BOOKMARKS_FILE ".gtk-bookmarks" 16 | #define UXM_RECENT_FILES_FILE ".recently-used.xbel" 17 | 18 | #define UXM_UDISKS_OBJECT_NAME "org.freedesktop.UDisks" 19 | #define UXM_UDISKS_OBJECT_PATH "/org/freedesktop/UDisks" 20 | #define UXM_UDISKS_OBJECT_IFACE "org.freedesktop.UDisks" 21 | 22 | #define UXM_APPS_EVENTS IN_CLOSE_WRITE|IN_DELETE|IN_MOVE 23 | #define UXM_BOOKMARKS_EVENTS IN_CLOSE_WRITE 24 | #define UXM_EXCLUDE_PATTERN "/.local/share/applications/menu-xdg/" 25 | 26 | #define UXM_OPTS_VERBOSE 0x01 27 | #define UXM_OPTS_DAEMONIZE 0x02 28 | #define UXM_OPTS_WATCH_APPLICATIONS 0x04 29 | #define UXM_OPTS_WATCH_BOOKMARKS 0x08 30 | #define UXM_OPTS_WATCH_RECENT_FILES 0x10 31 | #define UXM_OPTS_WATCH_DEVICES 0x20 32 | 33 | /** 34 | * Shared data between threads 35 | **/ 36 | typedef struct UxmSharedData { 37 | GAsyncQueue *queue; 38 | char *formatter; 39 | int flags; 40 | } UxmSharedData; 41 | 42 | /** 43 | * Constructs a UxmSharedData object 44 | **/ 45 | static UxmSharedData * 46 | uxm_shared_data_new( 47 | GAsyncQueue *queue, 48 | int flags, 49 | char *formatter 50 | ); 51 | 52 | /** 53 | * Types of messages emitted by the monitor worker 54 | **/ 55 | enum UxmMessageType { 56 | UXM_MSG_TYPE_APPLICATION = 0x01, 57 | UXM_MSG_TYPE_BOOKMARK = 0x02, 58 | UXM_MSG_TYPE_RECENT_FILE = 0x04, 59 | UXM_MSG_TYPE_DEVICE = 0x08 60 | }; 61 | typedef enum UxmMessageType UxmMessageType; 62 | 63 | /** 64 | * The message object emitted by the monitor worker 65 | **/ 66 | typedef struct UxmMessage { 67 | char *data; 68 | UxmMessageType type; 69 | } UxmMessage; 70 | 71 | /** 72 | * Constructs message objects 73 | **/ 74 | static UxmMessage * 75 | uxm_msg_new(UxmMessageType type); 76 | 77 | static void 78 | uxm_msg_dispatch( 79 | GAsyncQueue *queue, 80 | struct inotify_event *event, 81 | UxmMessageType type, 82 | char *msg_buf, 83 | int verbose 84 | ); 85 | /** 86 | * Monitors directories 87 | **/ 88 | static int 89 | uxm_inotify_worker(UxmSharedData *data); 90 | 91 | static int 92 | uxm_udisks_worker(UxmSharedData *data); 93 | 94 | static void 95 | uxm_udisks_signal_handler( 96 | GDBusProxy *proxy, 97 | gchar *sender_name, 98 | gchar *signal_name, 99 | GVariant *parameters, 100 | gpointer user_data 101 | ); 102 | 103 | /** 104 | * Listens to messages emitted by uxm_inotify_worker 105 | * and call update commands accordingly 106 | **/ 107 | static int 108 | uxm_monitor_listener(UxmSharedData *data); 109 | 110 | /** 111 | * Handles termination signals 112 | **/ 113 | static void 114 | uxm_signal_handler(int signum); 115 | 116 | static void 117 | uxm_log_handler( 118 | const gchar *log_domain, 119 | GLogLevelFlags log_level, 120 | const gchar *message, 121 | gpointer user_data 122 | ); 123 | 124 | /** 125 | * Cleans up memory before shutdown 126 | **/ 127 | static void 128 | uxm_cleanup(void); 129 | 130 | /** 131 | * Retrieve the list of directories to monitor 132 | **/ 133 | static GSList * 134 | uxm_get_monitored_directories(void); 135 | 136 | static gchar * 137 | uxm_get_recent_files_path(void); 138 | 139 | static gchar * 140 | uxm_get_logfile_path(void); 141 | 142 | /** 143 | * Compatibility with glib < 2.28 144 | **/ 145 | static void 146 | uxm_gslist_free_full(GSList *list); 147 | 148 | /** 149 | * Checks is given path is a directory 150 | **/ 151 | static gboolean 152 | uxm_path_is_dir(const gchar *path); 153 | 154 | static gchar * 155 | uxm_path_ensure_trailing_slash(const gchar *path); 156 | 157 | #endif /* __UXDGMENUD_H__ */ 158 | 159 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm-config.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/python 2 | 3 | import logging 4 | 5 | import uxm.config 6 | import uxm.dialogs.config 7 | 8 | 9 | if __name__ == "__main__": 10 | 11 | logger = logging.getLogger('uxm-config') 12 | logger.addHandler(uxm.config.make_log_handler('uxm-config')) 13 | logger.setLevel(logging.ERROR) 14 | try: 15 | editor = uxm.dialogs.config.ConfigEditor() 16 | editor.main() 17 | except Exception, e: 18 | logger.exception(e) 19 | raise 20 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm-editor.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | 3 | import sys 4 | import os 5 | import logging 6 | 7 | __DIR__ = os.path.dirname(os.path.abspath(__file__)) 8 | sys.path.insert(0, __DIR__) 9 | 10 | #from gi.repository import Gtk 11 | import gtk 12 | 13 | import uxm.config as config 14 | import uxm.dialogs.editor.maindialog as editor 15 | 16 | 17 | if __name__ == "__main__": 18 | 19 | options_parser = config.OptionParser() 20 | options, args = options_parser.parse_args() 21 | 22 | if len(args) < 1: 23 | prefs = config.preferences() 24 | menu_file = prefs.get('Applications', 'menu_file') 25 | if not menu_file: 26 | menu_file = 'uxm-applications.menu' 27 | 28 | logger = logging.getLogger('uxm-editor') 29 | logger.addHandler(config.make_log_handler('uxm-editor')) 30 | logger.setLevel(logging.ERROR) 31 | 32 | try: 33 | dialog = editor.MenuEditorDialog(menu_file) 34 | gtk.main() 35 | except Exception, e: 36 | logger.exception(e) 37 | raise 38 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm-menu.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/python 2 | 3 | import sys 4 | import logging 5 | 6 | import uxm.config as config 7 | from uxm.dialogs.menu import Menu 8 | 9 | if __name__ == "__main__": 10 | 11 | logger = logging.getLogger('uxm-editor') 12 | logger.addHandler(config.make_log_handler('uxm-editor')) 13 | logger.setLevel(logging.ERROR) 14 | 15 | try: 16 | menu = Menu() 17 | menu.main() 18 | except Exception, e: 19 | logger.exception(e) 20 | raise 21 | 22 | sys.exit(0) 23 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm-places.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/python 2 | 3 | import os 4 | import sys 5 | import optparse 6 | import logging 7 | 8 | sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) 9 | 10 | from uxm.parsers.places import Parser 11 | import uxm.config 12 | import uxm.formatter 13 | 14 | 15 | if __name__ == "__main__": 16 | 17 | logger = logging.getLogger('uxm-places') 18 | logger.addHandler(uxm.config.make_log_handler('uxm-places')) 19 | logger.setLevel(logging.ERROR) 20 | 21 | usage = """%prog [options] start_directory""" 22 | parser = optparse.OptionParser(usage=usage) 23 | parser.add_option( 24 | '-f', '--formatter', 25 | help="The formatter for the menu" 26 | ) 27 | options, args = parser.parse_args() 28 | 29 | if not options.formatter: 30 | logger.error("No formatter provided") 31 | parser.print_usage() 32 | sys.exit(1) 33 | 34 | if len(args) < 1: 35 | start_dir = uxm.config.preferences().get('Places', 'start_dir') 36 | else: 37 | start_dir = args[0] 38 | 39 | path = os.path.expanduser(start_dir) 40 | 41 | try: 42 | parser = Parser(options.formatter, os.path.abspath(__file__)) 43 | data = parser.parse_path(path) 44 | print uxm.formatter.get_formatter(options.formatter).format_menu(data) 45 | except Exception, e: 46 | logger.exception(e) 47 | raise 48 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm-run.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | 3 | import sys 4 | import os.path as path 5 | import logging 6 | 7 | sys.path.insert(0, path.abspath(path.dirname(path.abspath(__file__)))) 8 | 9 | import uxm.bench as bench 10 | import uxm.config 11 | from uxm.dialogs.launcher.dialog import LauncherDialog 12 | 13 | 14 | if __name__ == "__main__": 15 | 16 | logger = logging.getLogger('uxm-run') 17 | logger.addHandler(uxm.config.make_log_handler('uxm-run')) 18 | logger.setLevel(logging.ERROR) 19 | 20 | try: 21 | bench.step('dialog init') 22 | launcher = LauncherDialog() 23 | bench.endstep('dialog init') 24 | launcher.start() 25 | except Exception, e: 26 | logger.exception(e) 27 | raise 28 | 29 | bench.stop() 30 | bench.results() 31 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/adapters/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | TYPE_INVALID = 0 4 | TYPE_DIRECTORY = 1 5 | TYPE_ENTRY = 2 6 | TYPE_SEPARATOR = 3 7 | TYPE_HEADER = 4 8 | TYPE_ALIAS = 5 9 | 10 | NONE = 0 11 | INCLUDE_EXCLUDED = 1 12 | SHOW_EMPTY = 2 13 | INCLUDE_NODISPLAY = 3 14 | SHOW_ALL_SEPARATORS = 4 15 | 16 | SORT_NAME = 0 17 | SORT_DISPLAY_NAME = 1 18 | 19 | 20 | def get_default_adapter(): 21 | try: 22 | from uxm.adapters import gmenu_adapter 23 | return gmenu_adapter.GmenuAdapter() 24 | except ImportError: 25 | from uxm.adapters import xdg_adapter 26 | return xdg_adapter.XdgAdapter() 27 | 28 | def get_adapter(name): 29 | if not name in['gmenu', 'xdg']: 30 | raise ValueError 31 | else: 32 | adapter_name = "uxm.adapters.%s_adapter" % name 33 | adapter_class = "%sAdapter" % (name[0].upper() + name[1:]) 34 | __import__(adapter_name) 35 | module = sys.modules[adapter_name] 36 | adapter = getattr(module, adapter_class) 37 | return adapter() 38 | 39 | def get_by_precedence(names): 40 | for name in names: 41 | try: 42 | return get_adapter(name) 43 | except: 44 | continue 45 | 46 | 47 | class Adapter(object): 48 | def __init__(self, adaptee): 49 | self.adaptee = adaptee 50 | 51 | class TreeAdapter(object): 52 | def get_type(self): 53 | return TYPE_DIRECTORY 54 | def parse(self, menu_file, flags=NONE): 55 | raise NotImplementedError 56 | 57 | class DirectoryAdapter(Adapter): 58 | def get_type(self): 59 | return TYPE_DIRECTORY 60 | def get_menu_id(self): 61 | raise NotImplementedError 62 | def get_name(self): 63 | raise NotImplementedError 64 | def get_icon(self): 65 | raise NotImplementedError 66 | 67 | def __iter__(self): 68 | raise NotImplementedError 69 | 70 | class EntryAdapter(Adapter): 71 | def get_type(self): 72 | return TYPE_ENTRY; 73 | def get_desktop_file_path(self): 74 | raise NotImplementedError 75 | def get_display_name(self): 76 | raise NotImplementedError 77 | def get_icon(self): 78 | raise NotImplementedError 79 | def get_exec(self): 80 | raise NotImplementedError 81 | def get_launch_in_terminal(self): 82 | raise NotImplementedError 83 | 84 | class SeparatorAdapter(Adapter): 85 | def get_type(self): 86 | return TYPE_SEPARATOR; 87 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/adapters/gmenu_adapter.py: -------------------------------------------------------------------------------- 1 | import gmenu 2 | 3 | from uxm.adapters import TreeAdapter, DirectoryAdapter, EntryAdapter, SeparatorAdapter 4 | 5 | class GmenuAdapter(TreeAdapter): 6 | 7 | def parse(self, menu_file, show_hidden=True): 8 | flags = gmenu.FLAGS_NONE 9 | if show_hidden: 10 | flags |= gmenu.FLAGS_INCLUDE_NODISPLAY|gmenu.FLAGS_INCLUDE_EXCLUDED 11 | tree = gmenu.lookup_tree(menu_file, flags) 12 | return GmenuDirectoryAdapter(tree.get_root_directory()) 13 | 14 | 15 | class GmenuDirectoryAdapter(DirectoryAdapter): 16 | 17 | def get_name(self): 18 | return self.adaptee.get_menu_id() 19 | 20 | def get_display_name(self): 21 | return self.adaptee.get_name() 22 | 23 | def get_filename(self): 24 | return self.adaptee.get_desktop_file_path() 25 | 26 | def get_icon(self): 27 | return self.adaptee.get_icon() 28 | 29 | def __iter__(self): 30 | for entry in self.adaptee.get_contents(): 31 | t = entry.get_type() 32 | if t == gmenu.TYPE_SEPARATOR: 33 | yield GmenuSeparatorAdapter(entry) 34 | elif t == gmenu.TYPE_DIRECTORY: 35 | yield GmenuDirectoryAdapter(entry) 36 | elif t == gmenu.TYPE_ENTRY: 37 | yield GmenuEntryAdapter(entry) 38 | 39 | 40 | class GmenuEntryAdapter(EntryAdapter): 41 | 42 | def get_filename(self): 43 | return self.adaptee.get_desktop_file_path() 44 | 45 | def get_display_name(self): 46 | return self.adaptee.get_display_name() 47 | 48 | def get_icon(self): 49 | return self.adaptee.get_icon() 50 | 51 | def get_exec(self): 52 | return self.adaptee.get_exec() 53 | 54 | def is_terminal(self): 55 | return self.adaptee.get_launch_in_terminal() 56 | 57 | def is_visible(self): 58 | return not self.adaptee.get_is_excluded() 59 | 60 | 61 | class GmenuSeparatorAdapter(SeparatorAdapter): 62 | pass 63 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/adapters/xdg_adapter.py: -------------------------------------------------------------------------------- 1 | import xdg.Menu 2 | 3 | from uxm.adapters import NONE, TreeAdapter, DirectoryAdapter, EntryAdapter, SeparatorAdapter 4 | 5 | def factory(entry): 6 | if isinstance(entry, xdg.Menu.Separator): 7 | return XdgSeparatorAdapter(entry) 8 | elif isinstance(entry, xdg.Menu.Menu): 9 | return XdgDirectoryAdapter(entry) 10 | elif isinstance(entry, xdg.Menu.MenuEntry): 11 | return XdgEntryAdapter(entry) 12 | 13 | class XdgAdapter(TreeAdapter): 14 | def parse(self, menu_file, show_hidden=True): 15 | return XdgDirectoryAdapter(xdg.Menu.parse(menu_file), show_hidden) 16 | 17 | class XdgDirectoryAdapter(DirectoryAdapter): 18 | def __init__(self, adaptee, show_hidden=True): 19 | self.adaptee = adaptee 20 | self.show_hidden = show_hidden 21 | 22 | def get_name(self): 23 | return self.adaptee.Name 24 | def get_display_name(self): 25 | return self.adaptee.getName() 26 | def get_icon(self): 27 | return self.adaptee.getIcon() 28 | def get_filename(self): 29 | d = self.adaptee.Directory 30 | return d and d.DesktopEntry.filename or None 31 | def get_comment(self): 32 | self.adaptee.getComment() 33 | 34 | def __iter__(self): 35 | for entry in self.adaptee.getEntries(self.show_hidden): 36 | if isinstance(entry, xdg.Menu.Separator): 37 | yield XdgSeparatorAdapter(entry) 38 | elif isinstance(entry, xdg.Menu.Menu): 39 | yield XdgDirectoryAdapter(entry) 40 | elif isinstance(entry, xdg.Menu.MenuEntry): 41 | yield XdgEntryAdapter(entry) 42 | 43 | class XdgEntryAdapter(EntryAdapter): 44 | 45 | def __init__(self, adaptee): 46 | self.adaptee = adaptee 47 | self.entry = adaptee.DesktopEntry 48 | 49 | def get_filename(self): 50 | return self.entry.getFileName() 51 | def get_display_name(self): 52 | return self.entry.getName() 53 | def get_icon(self): 54 | return self.entry.getIcon() 55 | def get_exec(self): 56 | return self.entry.getExec() 57 | def is_terminal(self): 58 | return self.entry.getTerminal() 59 | def is_visible(self): 60 | return self.adaptee.Show is True 61 | def get_comment(self): 62 | return self.entry.getComment() 63 | 64 | 65 | class XdgSeparatorAdapter(SeparatorAdapter): 66 | pass 67 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/bench.py: -------------------------------------------------------------------------------- 1 | import time 2 | import atexit 3 | from collections import OrderedDict 4 | 5 | 6 | class Bench(object): 7 | def __init__(self): 8 | self.steps = OrderedDict() 9 | self.timer = time.time 10 | 11 | def start(self): 12 | self.start = self.timer() 13 | self.steps['__global__'] = { 14 | 'start': { 15 | 'time': 0, 16 | 'message': 'global startup' 17 | } 18 | } 19 | 20 | def stop(self): 21 | t = self.timer() - self.start 22 | self.steps['__global__']['end'] = { 23 | 'time': t, 24 | 'message': 'global shutdown' 25 | } 26 | 27 | def step(self, id, msg=""): 28 | t = self.timer() - self.start 29 | self.steps[id] = { 30 | 'start': {'time': t, 'message': msg} 31 | } 32 | 33 | def endstep(self, id, msg=""): 34 | t = self.timer() - self.start 35 | self.steps[id]['end'] = {'time': t, 'message': msg} 36 | 37 | def print_results(self): 38 | print "+%s" % ("-" * 70) 39 | for id, step in self.steps.iteritems(): 40 | print "| Bench %s" % id 41 | start, end = step['start'], step['end'] 42 | print "| >>> Start %.3f %s" % (start['time'], start['message']) 43 | print "| >>> End %.3f %s" % (end['time'], end['message']) 44 | print "| >>> Time %.3f" % (end['time'] - start['time']) 45 | print "+%s" % ("-" * 70) 46 | 47 | 48 | UID = int(time.time()) 49 | _bench = Bench() 50 | _bench.start() 51 | 52 | 53 | def step(id, msg=""): 54 | _bench.step(id, msg) 55 | 56 | 57 | def endstep(id, msg=""): 58 | _bench.endstep(id, msg) 59 | 60 | 61 | def stop(): 62 | _bench.stop() 63 | 64 | 65 | def id(): 66 | return hex(UID + 1) 67 | 68 | 69 | def results(): 70 | _bench.print_results() 71 | 72 | 73 | @atexit.register 74 | def close(): 75 | """Close the timer and print results if it has not been called, 76 | for example in case an exception occured""" 77 | t = _bench.timer() 78 | closed = True 79 | for id, step in _bench.steps.iteritems(): 80 | if 'end' not in step: 81 | closed = False 82 | step['end'] = { 83 | 'time': t, 84 | 'message': 'Step automatically closed by program exit.' 85 | } 86 | if not closed: 87 | results() 88 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/dialogs/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/editor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/dialogs/editor/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/editor/editdialog.py: -------------------------------------------------------------------------------- 1 | import os 2 | import gtk 3 | 4 | import uxm.config as config 5 | import uxm.adapters as adapters 6 | import uxm.dialogs.helpers as helpers 7 | from uxm.dialogs.iconchooser import IconChooserButton 8 | 9 | __DIR__ = os.path.abspath(os.path.dirname(__file__)) 10 | UI_FILE = os.path.join(__DIR__, 'editdialog.ui') 11 | 12 | class EditDialog(helpers.BuildableWidgetDecorator): 13 | 14 | entries = ('name_entry', 'cmd_entry', 'cmd_term_cb', 'icn_entry') 15 | 16 | def __init__(self): 17 | super(EditDialog, self).__init__(UI_FILE, 'edit_dialog') 18 | self.ui.set_translation_domain(config.PKG_NAME) 19 | 20 | self.add_ui_widgets( 21 | 'name_entry', 'cmd_entry', 'cmd_chooser_btn', 'cmd_term_cb', 22 | 'comment_entry', 'icn_entry', 23 | 'apply_edit_btn', 'cancel_edit_btn' 24 | ) 25 | 26 | icn_box = self.ui.get_object('icn_hbox') 27 | self.icn_chooser_button = IconChooserButton(label='Choose...') 28 | self.icn_chooser_button.dialog.set_transient_for(self.widget) 29 | self.icn_chooser_button.connect('file-set', self.on_icon_chooser_btn_file_set) 30 | icn_box.pack_end(self.icn_chooser_button.button) 31 | 32 | self.cmd_chooser_btn.set_current_folder('/usr/bin') 33 | 34 | self.connect_signals() 35 | 36 | def run(self, data): 37 | self.populate_fields(data) 38 | return self.widget.run() 39 | 40 | def get_data(self): 41 | return self.__data 42 | 43 | def populate_fields(self, data): 44 | self.reset_fields() 45 | self.__data = data 46 | data_type = data['type'] 47 | self.toggle_entry_fields(data_type == adapters.TYPE_ENTRY) 48 | if data['is_new']: 49 | return 50 | self.name_entry.set_text(data['name']) 51 | icon = data['icon'] 52 | self.icn_entry.set_text(icon and icon or "") 53 | obj = data['object'] 54 | comment = obj.get_comment() 55 | self.comment_entry.set_text(comment and comment or "") 56 | if data_type == adapters.TYPE_ENTRY: 57 | self.cmd_entry.set_text(obj.get_exec()) 58 | self.cmd_term_cb.set_active(obj.is_terminal()) 59 | elif data_type == adapters.TYPE_DIRECTORY: 60 | pass 61 | 62 | def reset_fields(self): 63 | for id in ('name_entry', 'cmd_entry', 'icn_entry', 'comment_entry'): 64 | entry = self.ui.get_object(id) 65 | entry.set_text('') 66 | self.cmd_term_cb.set_active(False) 67 | 68 | def toggle_entry_fields(self, show=True): 69 | for id in ('cmd_lbl_vbox', 'cmd_vbox'): 70 | self.toggle_field_visibility(self.ui.get_object(id), show) 71 | 72 | def toggle_field_visibility(self, field, show=True): 73 | method_name = show and 'show' or 'hide' 74 | method = getattr(field, method_name) 75 | method() 76 | 77 | def __gather_data(self): 78 | data = { 79 | 'name': self.name_entry.get_text(), 80 | 'comment': self.comment_entry.get_text(), 81 | 'command': self.cmd_entry.get_text(), 82 | 'terminal': self.cmd_term_cb.get_active(), 83 | 'icon': self.icn_entry.get_text(), 84 | 'categories': '' 85 | } 86 | return data 87 | 88 | # SIGNALS 89 | 90 | def on_response(self, widget, response_id): 91 | if response_id == gtk.RESPONSE_ACCEPT: 92 | #FIXME: handle new objects 93 | newdata = self.__gather_data() 94 | self.__data.update(newdata) 95 | self.widget.hide() 96 | elif response_id == gtk.RESPONSE_REJECT: 97 | self.__data = None 98 | self.reset_fields() 99 | self.widget.hide() 100 | elif response_id == gtk.RESPONSE_DELETE_EVENT: 101 | self.__data = None 102 | self.reset_fields() 103 | self.widget.hide() 104 | return True 105 | return False 106 | 107 | 108 | def on_apply_edit_btn_clicked(self, widget): 109 | pass 110 | 111 | def on_cancel_edit_btn_clicked(self, widget): 112 | pass 113 | 114 | def on_cmd_chooser_btn_file_set(self, widget): 115 | self.cmd_entry.set_text(widget.get_filename()) 116 | 117 | def on_icon_chooser_btn_file_set(self, widget, name, path): 118 | self.icn_entry.set_text(name) 119 | #self.icn_entry.set_text(path and path or name) 120 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/error.py: -------------------------------------------------------------------------------- 1 | import pygtk 2 | pygtk.require('2.0') 3 | import gtk 4 | 5 | class Dialog(gtk.MessageDialog): 6 | def __init__(self, message): 7 | super(Dialog, self).__init__( 8 | type = gtk.MESSAGE_ERROR, 9 | flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 10 | message_format = "Error:", buttons = gtk.BUTTONS_OK 11 | ) 12 | self.format_secondary_text(message) 13 | gtk.gdk.threads_enter() 14 | self.run() 15 | self.destroy() 16 | gtk.gdk.threads_leave() 17 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/helpers.py: -------------------------------------------------------------------------------- 1 | import gtk, gobject 2 | 3 | def get_icon_theme(name): 4 | if isinstance(name, gtk.IconTheme): 5 | return name 6 | theme = gtk.IconTheme() 7 | if not name: 8 | settings = gtk.settings_get_default() 9 | name = settings.get_property('gtk-icon-theme-name') 10 | theme.set_custom_theme(name) 11 | return theme 12 | 13 | class BuildableWidgetDecorator(object): 14 | 15 | def __init__(self, ui_file, name): 16 | self.ui = gtk.Builder() 17 | self.ui.add_from_file(ui_file) 18 | self.widget = self.ui.get_object(name) 19 | 20 | def add_ui_widget(self, name): 21 | setattr(self, name, self.ui.get_object(name)) 22 | 23 | def add_ui_widgets(self, *names): 24 | for name in names: 25 | self.add_ui_widget(name) 26 | 27 | def connect_signals(self): 28 | self.ui.connect_signals(self) 29 | 30 | def __getattr__(self, name): 31 | return getattr(self.widget, name) 32 | 33 | class WidgetDecorator(object): 34 | 35 | def __init__(self, widget): 36 | self.widget = widget 37 | 38 | def __getattr__(self, name): 39 | return getattr(self.widget, name) 40 | 41 | class ComboBoxTextDecorator(WidgetDecorator): 42 | """Decorator for simple text comboboxes""" 43 | def __init__(self, widget): 44 | super(ComboBoxTextDecorator, self).__init__(widget) 45 | self.model = gtk.ListStore(gobject.TYPE_STRING) 46 | self.widget.set_model(self.model) 47 | cell = gtk.CellRendererText() 48 | self.widget.pack_start(cell, True) 49 | self.widget.add_attribute(cell, 'text', 0) 50 | 51 | def append_text(self, text): 52 | self.model.append([str(text)]) 53 | 54 | def get_active_text(self): 55 | i = self.widget.get_active() 56 | row = self.model[i] 57 | return row[0] 58 | 59 | def set_active_text(self, text): 60 | text = str(text) 61 | for i, row in enumerate(self.model): 62 | if row[0] == text: 63 | self.widget.set_active(i) 64 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/dialogs/launcher/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/dialogs/launcher/models/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/dataloaders.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module will eventually provide loaders for the case where the uxm-daemon 3 | isn't monitoring a specific type of data. 4 | """ 5 | import gio 6 | 7 | 8 | class DataLoader(object): 9 | 10 | def __init__(self, icon_finder): 11 | self.icon_finder = icon_finder 12 | 13 | def load(self): 14 | return [] 15 | 16 | def gicon_to_path(self, gicon): 17 | if gicon: 18 | if hasattr(gicon, 'get_file'): 19 | name = gicon.get_file().get_path() 20 | else: 21 | name = gicon.get_names() 22 | return self.icon_finder.find_by_name(name) 23 | return "" 24 | 25 | 26 | class AppsLoader(DataLoader): 27 | 28 | def load(self): 29 | items = [] 30 | for appinfo in gio.app_info_get_all(): 31 | item = { 32 | 'type': 'application', 33 | 'id': appinfo.get_id(), 34 | 'name': appinfo.get_name(), 35 | 'command': appinfo.get_executable(), 36 | 'comment': appinfo.get_description(), 37 | 'icon': self.gicon_to_path(appinfo.get_icon()) 38 | } 39 | items.append(item) 40 | return items 41 | 42 | 43 | class BookmarksLoader(DataLoader): 44 | pass 45 | 46 | 47 | class RecentFilesLoader(DataLoader): 48 | pass 49 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/index.py: -------------------------------------------------------------------------------- 1 | from locale import strxfrm 2 | from operator import itemgetter 3 | 4 | from .trie import Trie 5 | 6 | 7 | def cmp_exact(a, b): 8 | if a['exact'] and not b['exact']: 9 | return -1 10 | if b['exact'] and not a['exact']: 11 | return 1 12 | if 'score' in a: 13 | if a['score'] < b['score']: 14 | return 1 15 | if a['score'] > b['score']: 16 | return -1 17 | return 0 18 | 19 | 20 | def cmp_score(a, b): 21 | if a['score'] < b['score']: 22 | return -1 23 | if a['score'] > b['score']: 24 | return 1 25 | return cmp(strxfrm(a['prefix']), strxfrm(b['prefix'])) 26 | 27 | 28 | def unique(seq): 29 | seen = set() 30 | return [x for x in seq if x not in seen and not seen.add(x)] 31 | 32 | 33 | def iter_unique(seq): 34 | seen = set() 35 | return (x for x in seq if x not in seen and not seen.add(x)) 36 | 37 | 38 | def intersect(first=None, *rest): 39 | out = [] 40 | if not first: 41 | return out 42 | ulist = unique(first) 43 | if not rest: 44 | return ulist 45 | #rest = set.intersection(*map(set, rest)) 46 | for elem in ulist: 47 | in_intersect = True 48 | for r in rest: 49 | in_intersect = in_intersect and elem in r 50 | if in_intersect: 51 | out.append(elem) 52 | return out 53 | 54 | 55 | class Index(object): 56 | 57 | def __init__(self): 58 | self.tree = Trie() 59 | 60 | def add(self, word, data): 61 | self.tree.insert(word, data) 62 | 63 | def find(self, terms): 64 | results = [] 65 | for term in terms: 66 | term_res = [] 67 | keys = self.tree.find_keys(term) 68 | for k in keys: 69 | n = self.tree.find(k) 70 | for value in n.values: 71 | v = value.copy() 72 | v['exact'] = (term == k) 73 | term_res.append(v) 74 | term_res.sort(key=itemgetter('exact'), reverse=True) 75 | #term_res.sort(cmp=cmp_exact) 76 | results.append([r['id'] for r in term_res]) 77 | return intersect(*results) 78 | 79 | def score(self, terms): 80 | results = [] 81 | for term in terms: 82 | term_res = [] 83 | scores = self.tree.score(term) 84 | scores.sort(key=itemgetter('score')) 85 | #scores.sort(cmp=cmp_score) 86 | for scoredata in scores: 87 | keys = self.tree.find_keys(scoredata['prefix']) 88 | for k in keys: 89 | n = self.tree.find(k) 90 | for value in n.values: 91 | v = value.copy() 92 | v['exact'] = (term == k) 93 | term_res.append(v) 94 | term_res.sort(key=itemgetter('exact'), reverse=True) 95 | #term_res.sort(cmp=cmp_exact) 96 | results.append([r['id'] for r in term_res]) 97 | return intersect(*results) 98 | 99 | 100 | if __name__ == "__main__": 101 | words = ( 102 | "getting", "things", "gnome", "gtg", 103 | "google", "gtk", "gotcha", "thingamagog", 104 | "gamble", 'prolog', 'goofy', 'logging', 105 | 'toggle', 'pogotage', 'gateau', 'giratoire', 106 | 'gatage', 'geothermologie', 'gitane', 'gigantesque', 107 | 'guitare-gratte' 108 | ) 109 | idx = Index() 110 | for i, word in enumerate(words): 111 | idx.add(word, {"id": i}) 112 | 113 | def test(word): 114 | res1, res2 = idx.find([word]), idx.score([word]) 115 | #print "Test:", word 116 | #print ">>> Find: ", [words[i] for i in idx.find([word])] 117 | #print ">>> Score:", [words[i] for i in idx.score([word])] 118 | 119 | for i in xrange(10000): 120 | test('g') 121 | test('gtg') 122 | test('gta') 123 | test('tg') 124 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/model.py: -------------------------------------------------------------------------------- 1 | import gtk 2 | 3 | import uxm.config as config 4 | import uxm.icon_finder as icon_finder 5 | 6 | ( 7 | COLUMN_ID, 8 | COLUMN_TYPE, 9 | COLUMN_NAME, 10 | COLUMN_ICON, 11 | COLUMN_MIMETYPE 12 | ) = range(5) 13 | 14 | COLUMNS = (int, int, str, gtk.gdk.Pixbuf, str) 15 | 16 | # types are sorted in this order in search results when in MODE_APPS 17 | # in reverse order when in MODE_BROWSE 18 | ( 19 | TYPE_APP, # an app having a .desktop file 20 | TYPE_DIR, # a directory or bookmark 21 | TYPE_FILE, # a file 22 | TYPE_CMD, # something found in $PATH 23 | TYPE_DEV # a device 24 | ) = range(5) 25 | 26 | 27 | class Model(object): 28 | 29 | def __init__(self): 30 | self.prefs = config.preferences() 31 | self.default_icon = self.prefs.get('Icons', 'application') 32 | self.icon_size = self.prefs.getint('Icons', 'size') 33 | self.use_gtk_theme = self.prefs.getboolean('Icons', 'use_gtk_theme') 34 | if self.use_gtk_theme: 35 | self.theme = icon_finder.get_gtk_theme() 36 | else: 37 | self.theme = self.prefs.get('Icons', 'theme') 38 | self.icon_finder = icon_finder.IconFinder( 39 | self.theme, self.icon_size, self.default_icon 40 | ) 41 | self.open_cmd = self.prefs.get('General', 'open_cmd') 42 | self.configure() 43 | self.new_model() 44 | 45 | def new_model(self): 46 | self.model = gtk.ListStore(*COLUMNS) 47 | 48 | def get_model(self): 49 | return self.model 50 | 51 | def configure(self): 52 | pass 53 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/trie.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | def walker(word, node): 4 | if not word or not node: 5 | return (None, None) 6 | for char in word: 7 | if char not in node.children: 8 | return (None, None) 9 | child = node.children[char] 10 | prev = node 11 | node = child 12 | return (prev, char) 13 | 14 | 15 | def find_keys(term, node, lst): 16 | lst.append(term) 17 | for k, v in node.children.iteritems(): 18 | find_keys(term + k, v, lst) 19 | 20 | 21 | def score(term, term_len, term_pos, node, depth, match_positions, 22 | results, prefix): 23 | """Walks down the tree searching matches for each char of the search term. 24 | Reports their position in the term and the prefixes matched. 25 | 26 | @param (str) term The search term 27 | @param (int) termlen The length of the search term 28 | @param (int) termpos The current position in the search term 29 | @param (TrieNode) node The node being searched 30 | @param (int) depth The depth of the current node (the position in the searched word) 31 | @param (list) matchpositions List of matching positions in the searched word 32 | @param (str) prefix The prefix of the current node 33 | """ 34 | key = term[term_pos] 35 | children = node.children 36 | if key == node.key: 37 | match_positions.append(depth) 38 | if term_pos < term_len - 1: 39 | for k, v in children.iteritems(): 40 | score(term, term_len, term_pos+1, v, depth+1, 41 | match_positions[:], results, prefix+k) 42 | else: 43 | results.append({ 44 | 'prefix': prefix, 45 | 'depth': depth, 46 | 'indexes': match_positions, 47 | 'start': match_positions[0], 48 | 'score': sum(match_positions) 49 | }) 50 | else: 51 | for k, v in children.iteritems(): 52 | score(term, term_len, term_pos, v, depth+1, match_positions[:], 53 | results, prefix+k) 54 | 55 | 56 | class TrieNode(object): 57 | 58 | __slots__ = ('key', 'children', 'values') 59 | 60 | def __init__(self, key=None): 61 | self.key = key 62 | self.children = {} 63 | self.values = [] 64 | 65 | 66 | class Trie(object): 67 | 68 | def __init__(self): 69 | self.root = TrieNode() 70 | 71 | def insert(self, key, value): 72 | node = self.root 73 | for char in key: 74 | if char not in node.children: 75 | node.children[char] = TrieNode(char) 76 | node = node.children[char] 77 | node.values.append(value) 78 | 79 | def remove(self, word): 80 | parent, key = walker(word, self.root) 81 | del parent.children[key] 82 | 83 | def find(self, word): 84 | parent, key = walker(word, self.root) 85 | if parent: 86 | return parent.children.get(key) 87 | 88 | def find_keys(self, term=""): 89 | parent = self.find(term) 90 | keys = [] 91 | if parent: 92 | find_keys(term, parent, keys) 93 | return keys 94 | 95 | def each(self, word): 96 | if not word: 97 | return 98 | node = self.root 99 | for char in word: 100 | if char not in node.children: 101 | return 102 | child = node.children[char] 103 | #prev = node 104 | node = child 105 | yield child, char 106 | 107 | def score(self, word): 108 | node = self.root 109 | l = len(word) 110 | results = [] 111 | for k, v in node.children.iteritems(): 112 | score(word, l, 0, v, 0, [], results, k) 113 | return results 114 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/dialogs/launcher/models/utils.py: -------------------------------------------------------------------------------- 1 | import gtk 2 | 3 | PIXBUF_CACHE = {} 4 | 5 | 6 | def load_icon(path, size=24): 7 | if path in PIXBUF_CACHE: 8 | return PIXBUF_CACHE[path] 9 | pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(path, size, size) 10 | PIXBUF_CACHE[path] = pixbuf 11 | return pixbuf 12 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatter.py: -------------------------------------------------------------------------------- 1 | import sys, imp, inspect 2 | 3 | import uxm.config as config 4 | 5 | def get_formatter(name): 6 | """Load a formatter based on it's name""" 7 | try: 8 | fp, path, desc = imp.find_module(name, config.PLUGINS_DIRS) 9 | except: 10 | raise RuntimeError('No formatter named "%s" found in %s' % ( 11 | name, str(config.PLUGINS_DIRS) 12 | )) 13 | try: 14 | module = imp.load_module(name, fp, path, desc) 15 | formatter = None 16 | for key, item in module.__dict__.iteritems(): 17 | if inspect.isclass(item) and issubclass(item, Formatter): 18 | formatter = item 19 | if formatter: 20 | del sys.modules[name] 21 | sys.modules["uxm.formatters.%s"%name] = module 22 | return formatter() 23 | finally: 24 | if fp: fp.close() 25 | 26 | 27 | 28 | class Formatter(object): 29 | 30 | _indent_str = " " 31 | def indent(self, level=0): 32 | return self._indent_str * level 33 | 34 | @property 35 | def name(self): 36 | return self.__module__.split('.')[-1] 37 | 38 | def format_rootmenu(self, data): 39 | self._implement_error("format_rootmenu") 40 | 41 | def format_menu(self, data): 42 | self._implement_error("format_menu") 43 | 44 | def format_text_item(self, data, level=0): 45 | self._implement_error("format_text_item") 46 | 47 | def format_separator(self, data, level=0): 48 | self._implement_error("format_separator") 49 | 50 | def format_application(self, data, level=0): 51 | self._implement_error("format_application") 52 | 53 | def format_submenu(self, data, level=0): 54 | self._implement_error("format_submenu") 55 | 56 | def _implement_error(self, method): 57 | cls = str(self.__class__.__bases__[-1]) 58 | raise NotImplementedError( 59 | "Subclasses of %s must implement a %s method" % ( 60 | cls, method 61 | ) 62 | ) 63 | 64 | class TreeFormatter(Formatter): 65 | 66 | def get_children(self, data, level=0): 67 | for item in data['items']: 68 | if item['type'] == 'application': 69 | yield self.format_application(item, level+1) 70 | elif item['type'] == 'separator': 71 | yield self.format_separator(item, level+1) 72 | elif item['type'] == 'menu': 73 | yield self.format_submenu(item, level+1) 74 | elif item['type'] == 'menu': 75 | yield self.format_menu(item, level+1) 76 | elif item['type'] == 'text': 77 | yield self.format_text_item(item, level+1) 78 | 79 | class FlatFormatter(Formatter): 80 | 81 | def __init__(self): 82 | self.submenus_first = True 83 | 84 | def format_submenu_entry(self, data, level=0): 85 | self._implement_error("format_submenu_entry") 86 | 87 | def get_children(self, data, submenus_first=True): 88 | output = [] 89 | entries = [] 90 | submenus = [] 91 | items = data['items'] 92 | add_submenus = submenus.extend 93 | add_entry = entries.append 94 | for item in items: 95 | if item['type'] == 'menu': 96 | add_submenus(self.get_children(item)) 97 | for item in items: 98 | if item['type'] == 'menu': 99 | add_entry(self.format_submenu_entry(item)) 100 | elif item['type'] == 'application': 101 | add_entry(self.format_application(item)) 102 | elif item['type'] == 'separator': 103 | add_entry(self.format_separator(item)) 104 | if submenus_first: output.extend(submenus) 105 | output.append(self.format_submenu(data, entries)) 106 | if not submenus_first: output.extend(submenus) 107 | return output 108 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/awesome.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class AwesomeFormatter(base.FlatFormatter): 4 | 5 | def escape_id(self, id): 6 | return "uxdgmenu_%s" % id.lower().replace(' ', '_').replace('-', '_') 7 | 8 | def format_rootmenu(self, content): 9 | return """ 10 | %s 11 | local main_menu = awful.menu.new({ items = uxdgmenu_rootmenu }) 12 | """ % content 13 | 14 | def format_menu(self, data): 15 | entries = self.get_children(data, True) 16 | return """ 17 | %s 18 | return %s 19 | """ % ( 20 | "\n".join(entries), 21 | self.escape_id(data['id']) 22 | ) 23 | 24 | def format_text_item(self, data, level=0): 25 | return self.format_application( 26 | data['label'], 'nil', '', level 27 | ) 28 | 29 | def format_include(self, data, level=0): 30 | return """local %(id)s = dofile("%(file)s")""" % { 31 | "id": self.escape_id(data['id']), 32 | "file": data['file'] 33 | } 34 | 35 | def format_separator(self, data, level=0): 36 | return """ { "--------------------", nil }""" 37 | 38 | def format_application(self, data, level=0): 39 | return ' { "%s", "%s", "%s" }' % ( 40 | data['label'], data['command'], data['icon'] 41 | ) 42 | 43 | def format_submenu(self, data, entries, level=0): 44 | return """local %s = { 45 | %s 46 | }""" % ( 47 | self.escape_id(data['id']), ",\n".join(entries) 48 | ) 49 | 50 | def format_submenu_entry(self, data, level=0): 51 | return ' { "%s", %s, "%s" }' % ( 52 | data['label'], 53 | self.escape_id(data['id']), 54 | data['icon'] 55 | ) 56 | 57 | def format_wm_menu(self, data, level=0): 58 | return """local %(id)s = { 59 | { "Manual", "x-terminal-emulator -e 'man awesome'" }, 60 | { "Edit Config", "x-terminal-emulator -e 'nano ~/.config/awesome/rc.lua'" }, 61 | { "Restart", awesome.restart }, 62 | { "Quit", awesome.quit } 63 | } 64 | """ % { 65 | "id": self.escape_id(data['id']) 66 | } 67 | 68 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/fvwm2.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.FlatFormatter): 4 | 5 | def format_rootmenu(self, data): 6 | return self.format_menu(data) 7 | 8 | def format_menu(self, data): 9 | entries = self.get_children(data, True) 10 | return """ 11 | %s 12 | """ % ( "\n".join(entries) ) 13 | 14 | def format_text_item(self, level=0): 15 | return "" 16 | 17 | def format_submenu(self, data, entries, level=0): 18 | return """DestroyMenu "uxdgmenu-%(id)s" 19 | AddToMenu "uxdgmenu-%(id)s" "%(n)s" Title 20 | %(items)s 21 | """ % { 22 | "id": data['id'], 23 | "n": data['label'], 24 | "items": "\n".join(entries) 25 | } 26 | 27 | def format_separator(self, data, level=0): 28 | return "" 29 | 30 | def format_application(self, data, level=0): 31 | return '+ "%s%s" Exec %s' % ( 32 | data['label'], 33 | "%%%(icn)s%%" % data['icon'] if data['icon'] else '', 34 | data['command'] 35 | ) 36 | 37 | def format_submenu_entry(self, data, level=0): 38 | return '+ "%s%s" Popup %s\n' % ( 39 | data['label'], 40 | "%%%(icn)s%%" % data['icon'] if data['icon'] else '', 41 | data['id'] 42 | ) 43 | 44 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/icewm.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.TreeFormatter): 4 | 5 | def format_menu(self, data): 6 | return "\n".join(self.get_children(data)) 7 | 8 | def format_rootmenu(self, data): 9 | return self.format_menu(data) 10 | 11 | def format_text_item(self, data, level=0): 12 | return "" 13 | 14 | def format_separator(self, data, level=0): 15 | return "" 16 | 17 | def format_application(self, data, level=0): 18 | return '%sprog "%s" %s %s' % ( 19 | self.indent(level), 20 | data['label'], 21 | data['icon'] if data['icon'] else '-', 22 | data['command'] 23 | ) 24 | 25 | def format_submenu(self, data, level=0): 26 | return """%(i)smenu "%(n)s" %(icn)s { 27 | %(items)s 28 | %(i)s}""" % { 29 | "i": self.indent(level), 30 | "icn": data['icon'] if data['icon'] else '-', 31 | "n": data['label'], 32 | "items": "\n".join(self.get_children(data, level)) 33 | } 34 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/ion3.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.FlatFormatter): 4 | 5 | def escape_id(self, id): 6 | return "uxdgmenu_%s" % id.lower().replace(' ', '_').replace('-', '_') 7 | 8 | def format_rootmenu(self, data): 9 | return self.format_menu(data) 10 | 11 | def format_menu(self, data): 12 | entries = self.get_children(data, True) 13 | return ",\n".join(entries) 14 | 15 | 16 | def format_submenu(self, data, entries, level=0): 17 | return """defmenu("%s", 18 | { 19 | %s 20 | })""" % ( 21 | self.escape_id(data['id']), 22 | ",\n".join(entries) 23 | ) 24 | 25 | def format_separator(self, data, level=0): 26 | return """ menuentry("", nil)""" 27 | 28 | def format_application(self, data, level=0): 29 | return """ menuentry("%s", "ioncore.exec_on(_, '%s')")""" % ( 30 | data['label'], data['command'] 31 | ) 32 | 33 | def format_submenu_entry(self, data, level=0): 34 | return ' submenu("%s", "%s")' % ( 35 | self.escape_id(data['id']), 36 | data['label'] 37 | ) 38 | 39 | def format_text_item(self, level=0): 40 | return "" 41 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/js.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | import uxm.formatter 4 | 5 | class Formatter(uxm.formatter.TreeFormatter): 6 | 7 | def format_rootmenu(self, data): 8 | return json.dumps(data) 9 | 10 | def format_menu(self, data): 11 | return json.dumps(data) 12 | 13 | def format_text_item(self, data, level=0): 14 | pass 15 | def format_include(self, data, level=0): 16 | pass 17 | def format_separator(self, data, level=0): 18 | pass 19 | def format_application(self, data, level=0): 20 | pass 21 | def format_submenu(self, data, level=0): 22 | pass 23 | def format_wm_menu(self, data, level=0): 24 | pass 25 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/pckl.py: -------------------------------------------------------------------------------- 1 | try: 2 | import cPickle as pickle 3 | except ImportError: 4 | import pickle 5 | 6 | import uxm.formatter 7 | 8 | class PickleFormatter(uxm.formatter.Formatter): 9 | 10 | def format_rootmenu(self, data): 11 | return self.format_menu(data) 12 | 13 | def format_menu(self, data): 14 | return pickle.dumps(data, pickle.HIGHEST_PROTOCOL) 15 | 16 | def format_text_item(self, data, level=0): 17 | pass 18 | def format_include(self, data, level=0): 19 | pass 20 | def format_separator(self, data, level=0): 21 | pass 22 | def format_application(self, data, level=0): 23 | pass 24 | def format_submenu(self, data, level=0): 25 | pass 26 | def format_wm_menu(self, data, level=0): 27 | pass 28 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/pekwm.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.TreeFormatter): 4 | 5 | def format_rootmenu(self, data): 6 | return self.format_menu(data) 7 | 8 | def format_menu(self, data): 9 | return "\n".join(self.get_children(data)) 10 | 11 | def format_separator(self, data, level=0): 12 | return "%sSeparator{}" % self.indent(level) 13 | 14 | def format_application(self, data, level=0): 15 | return '%sEntry = "%s" { Actions = "Exec %s &" }' % ( 16 | self.indent(level), 17 | data['label'], 18 | data['command'] 19 | ) 20 | 21 | def format_submenu(self, data, level=0): 22 | return """%(i)sSubmenu = "%(n)s" { 23 | %(items)s 24 | %(i)s}""" % { 25 | "i": self.indent(level), 26 | "n": data['label'], 27 | "items": "\n".join(self.get_children(data, level+1)) 28 | } 29 | 30 | def format_text_item(self, level=0): 31 | return "" 32 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/twm.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.FlatFormatter): 4 | 5 | def format_rootmenu(self, data): 6 | return self.format_menu(data) 7 | 8 | def format_menu(self, data): 9 | return "\n".join(self.get_children(data, False)) 10 | 11 | def format_submenu(self, data, entries, level=0): 12 | return """menu "%s" 13 | { 14 | %s 15 | } 16 | """ % ( data['id'], "\n".join(entries) ) 17 | 18 | def format_separator(self, data, level=0): 19 | return ' "" f.nop' 20 | 21 | def format_application(self, data, level=0): 22 | return ' "%s" f.exec "%s &"' % (data['label'], data['command']) 23 | 24 | def format_submenu_entry(self, data, level=0): 25 | return ' "%s" f.menu "%s"' % (data['label'], data['id']) 26 | 27 | def format_text_item(self, level=0): 28 | return "" 29 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/formatters/windowmaker.py: -------------------------------------------------------------------------------- 1 | import uxm.formatter as base 2 | 3 | class Formatter(base.TreeFormatter): 4 | 5 | def format_rootmenu(self, data): 6 | return self.format_menu(data) 7 | 8 | def format_menu(self, data): 9 | return "\n".join(self.get_children(data)) 10 | 11 | def format_separator(self, data, level=0): 12 | return "" 13 | 14 | def format_text_item(self, data, level=0): 15 | return "" 16 | 17 | def format_application(self, data, level=0): 18 | return '%s"%s" EXEC %s' % ( 19 | self.indent(level), data['label'], data['command'] 20 | ) 21 | 22 | def format_submenu(self, data, level=0): 23 | return """%(i)s"%(n)s" MENU 24 | %(items)s 25 | %(i)s"%(n)s" END 26 | """ % { 27 | "i": self.indent(level), 28 | "n": data['label'], 29 | "items": "\n".join(self.get_children(data, level)) 30 | } 31 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parser.py: -------------------------------------------------------------------------------- 1 | import uxm.config as config 2 | import uxm.cache as cache 3 | import uxm.icon_finder as icon_finder 4 | 5 | class BaseParser(object): 6 | 7 | def __init__(self): 8 | self.preferences = config.preferences() 9 | self.parse_config() 10 | if self.show_icons: 11 | if self.use_gtk_theme: 12 | t = icon_finder.get_gtk_theme() 13 | if t: self.theme = t 14 | self.cache = cache.Cache().open() 15 | self.icon_finder = icon_finder.IconFinder( 16 | self.theme, self.icon_size, self.default_icon, self.cache 17 | ) 18 | 19 | def __del__(self): 20 | if self.show_icons: 21 | self.cache.close() 22 | 23 | def parse_config(self): 24 | show_icons = self.preferences.getboolean('Icons', 'show') 25 | self.show_icons = show_icons 26 | if self.show_icons: 27 | self.default_icon = self.preferences.get('Icons', 'application') 28 | self.icon_size = self.preferences.getint('Icons', 'size') 29 | self.use_gtk_theme = self.preferences.getboolean('Icons', 'use_gtk_theme') 30 | self.theme = self.preferences.get('Icons','theme') 31 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/parsers/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/applications.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import uxm.parser as parser 4 | import uxm.adapters as adapters 5 | import uxm.utils.shell 6 | 7 | 8 | class Parser(parser.BaseParser): 9 | 10 | def __init__(self): 11 | super(Parser, self).__init__() 12 | self.adapter = self.get_default_adapter() 13 | self.filter_debian = os.path.isfile('/usr/bin/update-menus') 14 | 15 | def parse_config(self): 16 | super(Parser, self).parse_config() 17 | self.show_all = self.preferences.getboolean('Applications', 'show_all') 18 | self.terminal_emulator = self.preferences.get('General', 'terminal') 19 | 20 | def parse_menu_file(self, menu_file): 21 | root = self.adapter.parse(menu_file, self.show_all) 22 | return { 23 | "type": "menu", 24 | "id": root.get_name().encode('utf-8'), 25 | "label": root.get_display_name().encode('utf8'), 26 | "items": [i for i in self.parse_directory(root)] 27 | } 28 | 29 | def parse_separator(self, entry, level): 30 | return {"type": "separator"} 31 | 32 | def parse_directory(self, entry, level=0): 33 | for child in entry: 34 | t = child.get_type() 35 | if t == adapters.TYPE_SEPARATOR: 36 | yield self.parse_separator(child, level) 37 | elif t == adapters.TYPE_DIRECTORY: 38 | yield self.parse_submenu(child, level) 39 | elif t == adapters.TYPE_ENTRY: 40 | data = self.parse_application(child, level) 41 | if data is not None: 42 | yield data 43 | 44 | def parse_submenu(self, entry, level): 45 | icon = self.icon_finder.find_by_name(entry.get_icon()) if self.show_icons else '' 46 | return { 47 | "type": "menu", 48 | "id": entry.get_name().encode('utf-8'), 49 | "label": entry.get_display_name().encode('utf-8'), 50 | "icon": icon.encode('utf-8'), 51 | "items": [i for i in self.parse_directory(entry)] 52 | } 53 | 54 | def parse_application(self, entry, level): 55 | # Skip Debian specific menu entries 56 | filepath = entry.get_filename() 57 | if self.filter_debian and "/.local/share/applications/menu-xdg/" in filepath: 58 | return None 59 | # Strip command arguments 60 | cmd = uxm.utils.shell.clean_exec(entry.get_exec()) 61 | if entry.is_terminal(): 62 | cmd = '%s -e "%s"' % (self.terminal_emulator, cmd) 63 | # Get icon 64 | icon = self.icon_finder.find_by_name(entry.get_icon()) if self.show_icons else '' 65 | 66 | return { 67 | "type": "application", 68 | "label": entry.get_display_name().encode('utf-8'), 69 | "command": cmd.encode('utf-8'), 70 | "icon": icon.encode('utf-8') 71 | } 72 | 73 | def get_default_adapter(self): 74 | return adapters.get_default_adapter() 75 | 76 | def get_adapter(self): 77 | return self.adapter 78 | 79 | def set_adapter(self, name): 80 | self.adapter = adapters.get_adapter(name) 81 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/bookmarks.py: -------------------------------------------------------------------------------- 1 | import os 2 | import urllib 3 | 4 | import uxm.parser as parser 5 | 6 | 7 | class Parser(parser.BaseParser): 8 | 9 | def __init__(self): 10 | super(Parser, self).__init__() 11 | self.file_manager = self.preferences.get("General", "filemanager") 12 | if self.show_icons: 13 | icon = self.preferences.get("Icons", "bookmark") 14 | self.bookmark_icon = self.icon_finder.find_by_name(icon) 15 | else: 16 | self.bookmark_icon = '' 17 | 18 | def parse_bookmarks(self): 19 | bookmarks = [(os.path.expanduser('~'), 'Home')] 20 | append = bookmarks.append 21 | with open(os.path.expanduser('~/.gtk-bookmarks')) as f: 22 | for line in f: 23 | uri, label = line.strip().partition(' ')[::2] 24 | if not label: 25 | path = urllib.unquote(uri) 26 | label = os.path.basename(os.path.normpath(path)) 27 | append((uri, label)) 28 | menu = { 29 | "type": "menu", 30 | "id": "uxdgmenu-bookmarks", 31 | "icon": self.bookmark_icon.encode('utf-8'), 32 | "items": [] 33 | } 34 | append = menu['items'].append 35 | fm = self.file_manager 36 | for uri, label in bookmarks: 37 | label = urllib.unquote(label) 38 | cmd = '%s "%s"' % (fm, uri) 39 | path = urllib.unquote(uri.replace('file://', '')) 40 | icon = self.icon_finder.find_by_file_path(path) if self.show_icons else '' 41 | item = { 42 | "type": "application", 43 | "label": label.encode('utf-8'), 44 | "command": cmd.encode('utf-8'), 45 | "icon": icon.encode('utf-8'), 46 | "url": uri 47 | } 48 | append(item) 49 | return menu 50 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/devices.py: -------------------------------------------------------------------------------- 1 | import uxm.config as config 2 | import uxm.parser as parser 3 | import uxm.udisks as udisks 4 | import uxm.utils as utils 5 | 6 | _ = config.translate 7 | 8 | class Parser(parser.BaseParser): 9 | 10 | def __init__(self, formatter="pckl"): 11 | super(Parser, self).__init__() 12 | self.formatter = formatter 13 | self.file_manager = self.preferences.get('General', 'filemanager') 14 | if self.show_icons: 15 | for name in ['folder','internal_drive','optical_drive', 16 | 'removable_drive', 'mount','unmount']: 17 | icn_cfg = self.preferences.get('Icons', name) 18 | icn = self.icon_finder.find_by_name(icn_cfg) 19 | setattr(self, "%s_icn" % name, icn) 20 | 21 | def parse_devices(self): 22 | devices_list = [] 23 | for device in udisks.enumerate_devices(): 24 | if device.is_filesystem: 25 | devices_list.append(self.parse_device(device)) 26 | return { 27 | "type": "menu", 28 | "label": _("Devices"), 29 | "id": "uxm-devices", 30 | "icon": "%s" % self.internal_drive_icn if self.show_icons else "", 31 | "items": sorted(devices_list, key=lambda d: d['label']) 32 | } 33 | 34 | def parse_device(self, device): 35 | device_file = device.device_file.encode('utf-8') 36 | device_name = device_file 37 | if device.label: 38 | device_name = device.label.encode('utf-8') 39 | elif device.is_mounted: 40 | device_name = "%s on %s" % ( 41 | device_file, device.mount_paths[0].encode('utf-8') 42 | ) 43 | label = "%s (%s - %s)" % ( 44 | device_name, 45 | utils.fmt.filesize(int(device.size)), 46 | device.id_type 47 | ) 48 | if device.is_mounted: 49 | open_cmd = '%s "%s"' % ( 50 | self.file_manager, 51 | device.mount_paths[0] 52 | ) 53 | action = { 54 | "type": "application", 55 | "label": _("Unmount the selected volume"), 56 | "icon": "%s" % self.unmount_icn if self.show_icons else "", 57 | "command": 'uxm-daemon device:unmount "%s"' % ( 58 | device_file 59 | ) 60 | } 61 | else: 62 | open_cmd = 'uxm-daemon device:open "%s"' % device_file 63 | action = { 64 | "type": "application", 65 | "label": _("Mount the selected volume"), 66 | "icon": "%s" % self.mount_icn if self.show_icons else "", 67 | "command": 'uxm-daemon device:mount "%s"' % device_file 68 | } 69 | icn = self.find_icon_for_device(device) 70 | return { 71 | "type": "menu", 72 | "id": device_file, 73 | "label": label, 74 | "icon": "%s" % icn if self.show_icons else "", 75 | "items": [ 76 | { 77 | "type": "application", 78 | "label": _("Open"), 79 | "icon": "%s" % self.folder_icn if self.show_icons else "", 80 | "command": open_cmd 81 | }, 82 | action 83 | ] 84 | } 85 | 86 | def find_icon_for_device(self, device): 87 | if device.is_optical: 88 | return self.optical_drive_icn 89 | if device.is_system_internal: 90 | return self.internal_drive_icn 91 | return self.removable_drive_icn 92 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/places.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | 4 | import uxm.parser as parser 5 | import uxm.config as config 6 | from uxm.utils import shell 7 | from uxm.utils import fs 8 | from uxm.utils import mime 9 | 10 | _ = config.translate 11 | 12 | 13 | class Parser(parser.BaseParser): 14 | 15 | def __init__(self, formatter="pckl", path='uxm-places'): 16 | super(Parser, self).__init__() 17 | self.command = path 18 | self.formatter = formatter 19 | self.file_manager = self.preferences.get('General', 'filemanager') 20 | self.folder_icon = '' 21 | if self.show_icons: 22 | self.folder_icon = self.icon_finder.find_by_mime_type('inode/directory') 23 | 24 | def parse_path(self, path): 25 | fm = self.file_manager 26 | fi = self.folder_icon 27 | items = [ 28 | { 29 | "type": "application", 30 | "label": "%s..." % _("Open"), 31 | "icon": fi, 32 | "command": '%s %s' % (fm, shell.quote(path)) 33 | }, 34 | {"type": "separator"} 35 | ] 36 | append = items.append 37 | files = fs.listdir(path, True) 38 | for filename in files: 39 | if filename.startswith('.') or filename.endswith('~'): 40 | continue 41 | filepath = os.path.join(path, filename) 42 | if os.path.isfile(filepath): 43 | icon = self.icon_finder.find_by_file_path(filepath) if self.show_icons else '' 44 | mimetype = mime.guess(filepath) 45 | apps = self.get_applications(shell.quote(filepath), mimetype) 46 | item = { 47 | "type": "menu", 48 | "id": filepath, 49 | "label": filename, 50 | "icon": icon, 51 | "mimetype": mimetype, 52 | "items": apps 53 | } 54 | else: 55 | cmd = '%s -f "%s" %s' % ( 56 | self.command, self.formatter, shell.quote(filepath) 57 | ) 58 | item = { 59 | "type": "menu", 60 | "id": filepath, 61 | "label": filename, 62 | "icon": fi, 63 | "items": [], 64 | "command": cmd 65 | } 66 | append(item) 67 | result = { 68 | "type": "menu", 69 | "label": "Places", 70 | "id": "uxm-places", 71 | "items": items 72 | } 73 | return result 74 | 75 | def get_applications(self, path, mimetype): 76 | apps = mime.get_apps_for_type(mimetype) 77 | commands = [ 78 | {'type': 'text', 'label': 'Open with...'}, 79 | {'type': 'separator'} 80 | ] 81 | for app in apps: 82 | cmd = re.sub(r'(%[fFuU])', path, app.get_commandline()) 83 | icon = '' 84 | if self.show_icons: 85 | gicon = app.get_icon() 86 | if gicon: 87 | if hasattr(gicon, 'get_file'): 88 | name = gicon.get_file().get_path() 89 | else: 90 | name = gicon.get_names() 91 | icon = self.icon_finder.find_by_name(name) if gicon else '' 92 | commands.append({ 93 | 'type': 'application', 94 | 'label': app.get_name(), 95 | 'icon': icon, 96 | 'command': cmd 97 | }) 98 | return commands 99 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/parsers/rootmenu.py: -------------------------------------------------------------------------------- 1 | import uxm.parsers.applications as applications 2 | 3 | class Parser(applications.Parser): 4 | 5 | def parse_submenu(self, entry, level=1): 6 | if 'Applications' == entry.get_name(): 7 | return self.parse_applications_menu(entry, level) 8 | return super(Parser, self).parse_submenu(entry, level) 9 | 10 | def parse_applications_menu(self, entry, level): 11 | icon = self.icon_finder.find_by_name(entry.get_icon()) if self.show_icons else '' 12 | return { 13 | "type": "menu", 14 | "id": entry.get_name().encode('utf-8'), 15 | "label": entry.get_display_name().encode('utf-8'), 16 | "icon": icon.encode('utf-8'), 17 | "items": [] 18 | } 19 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/udisks/__init__.py: -------------------------------------------------------------------------------- 1 | DBUS_PROPS_INTERFACE = 'org.freedesktop.DBus.Properties' 2 | UDISKS_INTERFACE = 'org.freedesktop.UDisks' 3 | UDISKS_DEVICE_INTERFACE = 'org.freedesktop.UDisks.Device' 4 | 5 | UDISKS_OBJECT = 'org.freedesktop.UDisks' 6 | UDISKS_OBJECT_PATH = '/org/freedesktop/UDisks' 7 | 8 | UDISKS_ERROR_BUSY = 'org.freedesktop.UDisks.Error.Busy' 9 | 10 | 11 | import dbus 12 | 13 | # delayed imports so that other modules in uxm.udisks can access constants 14 | from uxm.udisks.device import Device 15 | 16 | 17 | def enumerate_devices(): 18 | """Lists available devices on the System Bus""" 19 | sysbus = dbus.SystemBus() 20 | udisks = sysbus.get_object(UDISKS_OBJECT, UDISKS_OBJECT_PATH) 21 | for path in udisks.EnumerateDevices(dbus_interface=UDISKS_INTERFACE): 22 | yield Device(sysbus, path) 23 | 24 | def mount(path): 25 | """Mounts a filesystem given its mout point or device file.""" 26 | for device in enumerate_devices(): 27 | if path == device.device_file: 28 | return mount_device(device) 29 | 30 | def mount_device(device): 31 | """Mounts a uxm.udisks.device.Device""" 32 | if not device.is_mounted: 33 | device.mount() 34 | return device 35 | 36 | def unmount(path): 37 | """Unmounts a filesystem given its mout point or device file.""" 38 | 39 | for device in enumerate_devices(): 40 | if path in device.mount_paths or path == device.device_file: 41 | return unmount_device(device) 42 | 43 | def unmount_device(device): 44 | """Unmount a uxm.udisks.device.Device""" 45 | 46 | if device.is_mounted: 47 | device.unmount() 48 | return device 49 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/udisks/device.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | #import uxm.udisks as udisks 4 | from . import UDISKS_OBJECT, UDISKS_DEVICE_INTERFACE, DBUS_PROPS_INTERFACE 5 | 6 | class Device: 7 | 8 | def __init__(self, bus, device_path): 9 | self.bus = bus 10 | self.device_path = device_path 11 | self.device = self.bus.get_object(UDISKS_OBJECT, device_path) 12 | 13 | def __str__(self): 14 | return self.device_path 15 | 16 | def _get_property(self, prop): 17 | return self.device.Get(UDISKS_DEVICE_INTERFACE, prop, 18 | dbus_interface=DBUS_PROPS_INTERFACE) 19 | 20 | @property 21 | def partition_slave(self): 22 | return self._get_property('PartitionSlave') 23 | 24 | @property 25 | def is_partition_table(self): 26 | return self._get_property('DeviceIsPartitionTable') 27 | 28 | @property 29 | def is_system_internal(self): 30 | return self._get_property('DeviceIsSystemInternal') 31 | 32 | @property 33 | def label(self): 34 | return self._get_property('IdLabel') 35 | 36 | @property 37 | def size(self): 38 | return self._get_property('DeviceSize') 39 | 40 | @property 41 | def is_mounted(self): 42 | return bool(self._get_property('DeviceIsMounted')) 43 | 44 | @property 45 | def mount_paths(self): 46 | raw_paths = self._get_property('DeviceMountPaths') 47 | return [os.path.normpath(path) for path in raw_paths] 48 | 49 | @property 50 | def device_file(self): 51 | return os.path.normpath(self._get_property('DeviceFile')) 52 | 53 | @property 54 | def is_filesystem(self): 55 | return bool(self._get_property('IdUsage') == 'filesystem') 56 | 57 | @property 58 | def is_optical(self): 59 | return bool(self._get_property('DeviceIsOpticalDisc')) 60 | 61 | @property 62 | def has_media(self): 63 | return bool(self._get_property('DeviceIsMediaAvailable')) 64 | 65 | @property 66 | def id_type(self): 67 | return self._get_property('IdType') 68 | 69 | @property 70 | def id_version(self): 71 | return self._get_property('IdVersion') 72 | 73 | @property 74 | def connection_interface(self): 75 | return self._get_property('DriveConnectionInterface') 76 | 77 | def mount(self, options=[]): 78 | self.device.FilesystemMount( 79 | self.id_type, 80 | options, 81 | dbus_interface=UDISKS_DEVICE_INTERFACE 82 | ) 83 | 84 | def unmount(self, options=[]): 85 | self.device.FilesystemUnmount( 86 | options, 87 | dbus_interface=UDISKS_DEVICE_INTERFACE 88 | ) 89 | 90 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = ['env', 'fmt', 'fs', 'mime', 'proc', 'shell'] 2 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/compat/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/utils/compat/__init__.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/compat/fadvise.py: -------------------------------------------------------------------------------- 1 | from ctypes import * 2 | from ctypes.util import find_library 3 | 4 | __all__ = [ 5 | 'fadvise', 6 | 'FADV_NORMAL', 'FADV_RANDOM', 'FADV_SEQUENTIAL', 7 | 'FADV_WILLNEED', 'FADV_DONTNEED', 'FADV_NOREUSE' 8 | ] 9 | 10 | _libc = CDLL(find_library('c')) 11 | 12 | _posix_fadvise = _libc.posix_fadvise 13 | _posix_fadvise.argtypes = [c_int, c_int8, c_int8, c_int] 14 | _posix_fadvise.restype = c_int 15 | 16 | 17 | ( 18 | FADV_NORMAL, 19 | FADV_RANDOM, 20 | FADV_SEQUENTIAL, 21 | FADV_WILLNEED, 22 | FADV_DONTNEED, 23 | FADV_NOREUSE 24 | ) = range(6) 25 | 26 | 27 | def fadvise(fd, offset, length, advice): 28 | return _posix_fadvise( 29 | c_int(fd), 30 | c_int8(offset), 31 | c_int8(length), 32 | c_int(advice) 33 | ) 34 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/compat/py2.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/utils/compat/py2.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/compat/py3.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ju1ius/uxdgmenu/25955d1113c8f00405292a58aebadd485a62e9a3/usr/lib/uxdgmenu/uxm/utils/compat/py3.py -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/env.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pwd 3 | import shlex 4 | import subprocess 5 | 6 | from . import mime 7 | 8 | 9 | def is_executable(fpath): 10 | return os.path.exists(fpath) and os.access(fpath, os.X_OK) 11 | 12 | 13 | def which(program): 14 | """Check for external modules or programs""" 15 | fpath, fname = os.path.split(program) 16 | if fpath: 17 | if is_executable(program): 18 | return program 19 | else: 20 | for path in os.environ["PATH"].split(os.pathsep): 21 | exe_file = os.path.join(path, program) 22 | if is_executable(exe_file): 23 | return exe_file 24 | return None 25 | 26 | 27 | def list_real_users(): 28 | """Finds real users by reading /etc/pswd 29 | returns a Tuple containing the username and home dir""" 30 | for p in pwd.getpwall(): 31 | if p[5].startswith('/home') and p[6] != "/bin/false": 32 | yield (p[0], p[5]) 33 | 34 | 35 | def detect_de(): 36 | if os.getenv('KDE_FULL_SESSION'): 37 | return 'kde' 38 | elif check_gnome(): 39 | return 'gnome' 40 | elif check_xfce(): 41 | return 'xfce' 42 | else: 43 | return os.getenv('DESKTOP_SESSION', '').lower() 44 | 45 | 46 | def check_gnome(): 47 | if os.getenv('GNOME_DESKTOP_SESSION_ID'): 48 | return True 49 | args = shlex.split("""dbus-send --print-reply --dest=org.freedesktop.DBus \ 50 | /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner \ 51 | string:org.gnome.SessionManager > /dev/null 2>&1""") 52 | p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 53 | r = p.communicate() 54 | if not r[1]: 55 | return True 56 | 57 | 58 | def check_xfce(): 59 | args = shlex.split("xprop -root _DT_SAVE_MODE") 60 | p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 61 | r = p.communicate() 62 | if r[1]: 63 | return False 64 | if ' = "xfce4"' in r[0]: 65 | return True 66 | 67 | 68 | def guess_open_cmd(): 69 | """Tries to guess the command to open files 70 | with their associated application. 71 | If it fails, defaults to xdg-open""" 72 | for cmd in ['exo-open', 'kde-open', 'gnome-open']: 73 | if which(cmd): 74 | return cmd 75 | return 'xdg-open' 76 | 77 | 78 | def guess_file_manager(): 79 | """Tries to get the default application 80 | for the inode/directory mime type, 81 | which should be the default file manager... 82 | If it fails, we try a list of known filemanagers, 83 | or default to xdg-open""" 84 | app_info = mime.get_default_app('inode/directory') 85 | if app_info: 86 | return app_info.get_commandline() 87 | for fm in ['thunar', 'pcmanfm', 'nautilus', 'dolphin']: 88 | if which(fm): 89 | return fm 90 | return 'xdg-open' 91 | 92 | 93 | def guess_terminal(): 94 | for term in ('x-terminal-emulator', 'terminator', 'lxterminal', 95 | 'xfce4-terminal', 'gnome-terminal', 'urxvt', 'xterm'): 96 | if which(term): 97 | return term 98 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/fmt.py: -------------------------------------------------------------------------------- 1 | 2 | __filesize_fmt = [ 3 | (1000 ** 5, 'PB'), 4 | (1000 ** 4, 'TB'), 5 | (1000 ** 3, 'GB'), 6 | (1000 ** 2, 'MB'), 7 | (1000 ** 1, 'KB'), 8 | (1000 ** 0, 'B') 9 | ] 10 | 11 | 12 | def round_base(x, base=8): 13 | """Returns the nearest integer which is a multiple of base""" 14 | return int(base * round(float(x)/base)) 15 | 16 | 17 | def filesize(size): 18 | for factor, suffix in __filesize_fmt: 19 | if size >= factor: 20 | break 21 | amount = int(size/factor) 22 | return "%s %s" % (str(amount), suffix) 23 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/fs.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import locale 4 | 5 | 6 | VERSION = sys.version_info 7 | 8 | 9 | def listdir(path, show_files=True, dirs_first=True): 10 | """ 11 | Returns the content of a directory sorted lexicographically 12 | """ 13 | items = os.listdir(path) 14 | isdir = os.path.isdir 15 | join = os.path.join 16 | isfile = os.path.isfile 17 | key_func = locale.strxfrm 18 | dirs = sorted([d for d in items if isdir(join(path, d))], key=key_func) 19 | if not show_files: 20 | return dirs 21 | files = sorted([f for f in items if isfile(join(path, f))], key=key_func) 22 | return dirs_first and dirs + files or files + dirs 23 | 24 | 25 | if VERSION[0] >= 3 and VERSION[1] >= 3: 26 | 27 | fadvise = os.posix_fadvise 28 | FADV_NORMAL = os.POSIX_FADV_NORMAL 29 | FADV_SEQUENTIAL = os.POSIX_FADV_SEQUENTIAL 30 | FADV_RANDOM = os.POSIX_FADV_RANDOM 31 | FADV_NOREUSE = os.POSIX_FADV_NOREUSE 32 | FADV_WILLNEED = os.POSIX_FADV_WILLNEED 33 | FADV_DONTNEED = os.POSIX_FADV_DONTNEED 34 | 35 | else: 36 | 37 | from compat.fadvise import * 38 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/mime.py: -------------------------------------------------------------------------------- 1 | import os 2 | import stat 3 | import gio 4 | import xdg.Mime 5 | 6 | xdg.Mime.update_cache() 7 | MIME_MAGIC_MAX_BUF_SIZE = xdg.Mime.magic.maxlen 8 | 9 | # Some well-known types 10 | INODE_BLOCK = str(xdg.Mime.inode_block) 11 | INODE_CHAR = str(xdg.Mime.inode_char) 12 | INODE_DIR = str(xdg.Mime.inode_dir) 13 | INODE_FIFO = str(xdg.Mime.inode_fifo) 14 | INODE_SOCKET = str(xdg.Mime.inode_socket) 15 | INODE_SYMLINK = str(xdg.Mime.inode_symlink) 16 | INODE_DOOR = str(xdg.Mime.inode_door) 17 | APP_EXE = str(xdg.Mime.app_exe) 18 | APP_OCTET_STREAM = 'application/octet-stream' 19 | 20 | 21 | def guess(filepath, use_contents=True): 22 | data, is_file = None, False 23 | mime_type = APP_OCTET_STREAM 24 | try: 25 | st = os.stat(filepath) 26 | st_mode = st.st_mode 27 | if stat.S_ISDIR(st_mode): 28 | mime_type = INODE_DIR 29 | elif stat.S_ISCHR(st_mode): 30 | mime_type = INODE_CHAR 31 | elif stat.S_ISBLK(st_mode): 32 | mime_type = INODE_BLOCK 33 | elif stat.S_ISFIFO(st_mode): 34 | mime_type = INODE_FIFO 35 | elif stat.S_ISLNK(st_mode): 36 | mime_type = INODE_SYMLINK 37 | elif stat.S_ISSOCK(st_mode): 38 | mime_type = INODE_SOCKET 39 | elif stat.S_ISREG(st_mode): 40 | is_file = True 41 | except: 42 | pass 43 | if is_file: 44 | if use_contents: 45 | try: 46 | with open(filepath, 'rb') as fp: 47 | data = fp.read(MIME_MAGIC_MAX_BUF_SIZE) 48 | except: 49 | pass 50 | # Removed in favor of gio, this was way too sloooow ! 51 | #mime_type = xdg.Mime.get_type(filepath) 52 | mime_type = gio.content_type_guess(filepath, data, False) 53 | return mime_type 54 | 55 | 56 | def get_apps_for_type(mimetype): 57 | return gio.app_info_get_all_for_type(mimetype) 58 | 59 | 60 | def get_default_app(mimetype): 61 | return gio.app_info_get_default_for_type(mimetype) 62 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/proc.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import pwd 4 | 5 | 6 | def pgrep(pattern, **kwargs): 7 | return_name = False 8 | exact_match = False 9 | invert_match = False 10 | check_user = False 11 | check_cmdline = False 12 | if 'name' in kwargs: 13 | return_name = kwargs['name'] if kwargs['name'] is True else False 14 | if 'exact' in kwargs: 15 | exact_match = kwargs['exact'] if kwargs['exact'] is True else False 16 | if 'invert' in kwargs: 17 | invert_match = kwargs['invert'] if kwargs['invert'] is True else False 18 | if 'cmdline' in kwargs: 19 | check_cmdline = kwargs['cmdline'] if kwargs['cmdline'] is True else False 20 | if 'user' in kwargs: 21 | uid = pwd.getpwnam(kwargs['user']).pw_uid 22 | check_user = True 23 | if not exact_match: 24 | pattern = re.compile(pattern, re.I) 25 | matches = [] 26 | append = matches.append 27 | 28 | pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] 29 | for pid in pids: 30 | pid_dir = os.path.join('/proc', pid) 31 | pid_matches = False 32 | ret = [int(pid), None] 33 | if check_cmdline: 34 | cmdline_file = os.path.join(pid_dir, 'cmdline') 35 | if os.path.exists(cmdline_file): 36 | with open(cmdline_file, 'r') as f: 37 | cmdline = f.read().strip() 38 | if _pgrep_return_if_matches(pattern, cmdline, exact_match, 39 | invert_match): 40 | pid_matches = True 41 | status_file = os.path.join(pid_dir, 'status') 42 | if os.path.exists(status_file): 43 | with open(status_file, 'r') as f: 44 | lines = f.readlines() 45 | if check_user: 46 | data = lines[6].partition(':')[2].split()[0] 47 | if int(data) != uid: 48 | continue 49 | if return_name or not check_cmdline: 50 | name = lines[0].partition(':')[2].strip() 51 | if _pgrep_return_if_matches(pattern, name, exact_match, 52 | invert_match): 53 | pid_matches = True 54 | ret[1] = name 55 | if pid_matches: 56 | if return_name: 57 | append(tuple(ret)) 58 | else: 59 | append(ret[0]) 60 | return matches 61 | 62 | 63 | def _pgrep_return_if_matches(pattern, subject, exact_match, invert_match): 64 | if exact_match: 65 | if invert_match: 66 | if pattern != subject: 67 | return True 68 | else: 69 | if pattern == subject: 70 | return True 71 | else: 72 | if invert_match: 73 | if not pattern.search(subject): 74 | return True 75 | else: 76 | if pattern.search(subject): 77 | return True 78 | return False 79 | -------------------------------------------------------------------------------- /usr/lib/uxdgmenu/uxm/utils/shell.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | _find_unsafe_chars = re.compile(r'[^\w@%+=:,./-]').search 4 | EXE_REGEX = re.compile(r' (\s*["\'])?(?:\s*%[a-zA-Z])+\1?') 5 | 6 | 7 | def quote(s): 8 | """Return a shell-escaped version of the string *s*.""" 9 | if not s: 10 | return "''" 11 | if _find_unsafe_chars(s) is None: 12 | return s 13 | 14 | # use single quotes, and put single quotes into double quotes 15 | # the string $'b is then quoted as '$'"'"'b' 16 | return "'" + s.replace("'", "'\"'\"'") + "'" 17 | 18 | 19 | def clean_exec(cmd): 20 | """Cleans commands found in Desktop entries""" 21 | #clean = [] 22 | #for arg in shlex.split(cmd): 23 | #if '%' == arg[0]: 24 | #continue 25 | #clean.append(arg) 26 | #return ' '.join(clean) 27 | return EXE_REGEX.sub('', cmd) 28 | -------------------------------------------------------------------------------- /usr/share/applications/x-www-browser.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | Name=Web Browser 4 | GenericName=X Web Browser 5 | Exec=x-www-browser %u 6 | Terminal=false 7 | Type=Application 8 | Categories=WebBrowser;Network 9 | Icon=applications-internet 10 | NoDisplay=true 11 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-education.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Education 3 | Name[af]=Opvoeding 4 | Name[ar]=تعليمي 5 | Name[as]=শিক্ষাবিষয়ক বস্তু 6 | Name[ast]=Educación 7 | Name[be]=Адукацыя 8 | Name[be@latin]=Adukacyja 9 | Name[bg]=Обучение 10 | Name[bn]=শিক্ষা 11 | Name[bn_IN]=শিক্ষাবিষয়ক বস্তু 12 | Name[br]=Deskadurezh 13 | Name[ca]=Educació 14 | Name[cs]=Vzdělávání 15 | Name[cy]=Addysg 16 | Name[da]=Læringsprogrammer 17 | Name[de]=Bildung 18 | Name[dz]=ཤེས་རིག 19 | Name[el]=Εκπαίδευση 20 | Name[en_CA]=Education 21 | Name[en_GB]=Education 22 | Name[eo]=Edukado 23 | Name[es]=Educación 24 | Name[et]=Õppeprogrammid 25 | Name[eu]=Hezkuntza 26 | Name[fa]=آموزش 27 | Name[fi]=Opetusohjelmat 28 | Name[fr]=Éducation 29 | Name[fur]=Istruzion 30 | Name[ga]=Oideachas 31 | Name[gl]=Educación 32 | Name[gn]=Arandu 33 | Name[gu]=શિક્ષણ 34 | Name[he]=לימוד 35 | Name[hi]=शिक्षा 36 | Name[hr]=Edukacija 37 | Name[hu]=Oktatás 38 | Name[hy]=Ուսուցում 39 | Name[id]=Pendidikan 40 | Name[io]=Edukado 41 | Name[is]=Menntun 42 | Name[it]=Istruzione 43 | Name[ja]=教育・教養 44 | Name[ka]=განათლება 45 | Name[kk]=Білім программалары 46 | Name[kn]=ಶಿಕ್ಷಣ 47 | Name[ko]=교육 48 | Name[ku]=Perwerdehî 49 | Name[ky]=Билим берүү иштемелери 50 | Name[lt]=Švietimas 51 | Name[lv]=Izglītības 52 | Name[mai]=शिक्षा 53 | Name[mg]=Fanabeazana 54 | Name[mk]=Едукација 55 | Name[ml]=വിദ്യാഭ്യാസം 56 | Name[mn]=Боловсрол 57 | Name[mr]=शिक्षण 58 | Name[ms]=Pendidikan 59 | Name[nb]=Opplæring 60 | Name[ne]=शिक्षा 61 | Name[nl]=Educatie 62 | Name[nn]=Utdanning 63 | Name[oc]=Educacion 64 | Name[or]=ଶିକ୍ଷା 65 | Name[pa]=ਸਿੱਖਿਆ 66 | Name[pl]=Nauka 67 | Name[ps]=زدکړه 68 | Name[pt]=Educação 69 | Name[pt_BR]=Educativo 70 | Name[ro]=Educație 71 | Name[ru]=Образовательные 72 | Name[si]=අධ්‍යාපනිකපනික 73 | Name[sk]=Vzdelávanie 74 | Name[sl]=Izobraževanje 75 | Name[sq]=Edukim 76 | Name[sr]=Образовање 77 | Name[sr@latin]=Obrazovanje 78 | Name[sv]=Utbildning 79 | Name[ta]=கல்வி 80 | Name[te]=విద్య 81 | Name[th]=การศึกษา 82 | Name[tr]=Eğitim 83 | Name[ug]=ئوقۇتۇش 84 | Name[uk]=Навчання 85 | Name[ur]=تعلیم 86 | Name[ur_PK]=تعلیم 87 | Name[uz@cyrillic]=Таълим 88 | Name[vi]=Giáo dục 89 | Name[zh_CN]=教育 90 | Name[zh_HK]=教育 91 | Name[zh_TW]=教育 92 | Icon=applications-science 93 | Type=Directory 94 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-menu-bookmarks.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Bookmarks 3 | Icon=preferences-desktop 4 | Type=Directory 5 | Name[af]=Boekmerke 6 | Name[am]=መለያ ምልክቶች 7 | Name[ar]=العلامات 8 | Name[as]=বুকমাৰ্কসমূহ 9 | Name[ast]=Marcadores 10 | Name[az]=Nişanlar 11 | Name[be]=Закладкі 12 | Name[be@latin]=Ulubionaje 13 | Name[bg]=Отметки 14 | Name[bn]=বুকমার্ক 15 | Name[bn_IN]=বুকমার্ক 16 | Name[bo]=ཡིག་རྟགས(B) 17 | Name[br]=Sinedoù 18 | Name[bs]=Zabilješke 19 | Name[ca]=Adreces d'interès 20 | Name[ca@valencia]=Adreces d'interés 21 | Name[crh]=Yer-imleri 22 | Name[cs]=Záložky 23 | Name[cy]=Llyfrnodau 24 | Name[da]=Bogmærker 25 | Name[de]=Lesezeichen 26 | Name[dz]=དེབ་རྟགས་ཚུ།(B) 27 | Name[el]=Σελιδοδείκτες 28 | Name[en@shaw]=𐑚𐑫𐑒𐑥𐑸𐑒𐑕 29 | Name[en_CA]=Bookmarks 30 | Name[en_GB]=Bookmarks 31 | Name[eo]=Legosignoj 32 | Name[es]=Marcadores 33 | Name[et]=Järjehoidjad 34 | Name[eu]=Laster-markak 35 | Name[fa]=نشانک‌ها 36 | Name[fi]=Kirjanmerkit 37 | Name[fr]=Signets 38 | Name[fur]=Segnelibris 39 | Name[fy]=Blêdwizers 40 | Name[ga]=Leabharmharcanna 41 | Name[gl]=Marcadores 42 | Name[gu]=બુકમાર્કો 43 | Name[gv]=Lioarynvark 44 | Name[ha]=Alamomi ga Shafuka 45 | Name[he]=סימניות 46 | Name[hi]= पसंदीदा 47 | Name[hr]=Zabilješke 48 | Name[hu]=Könyvjelzők 49 | Name[hy]=Էջանշաններ 50 | Name[id]=Penanda Tautan 51 | Name[ig]=Ebe ndesịta ngosi ebe 52 | Name[io]=Markorubandi 53 | Name[is]=Bókamerki 54 | Name[it]=Segnalibri 55 | Name[ja]=ブックマーク 56 | Name[ka]=სანიშნეები 57 | Name[kk]=Бетбелгілер 58 | Name[kn]=ಬುಕ್‌ಮಾರ್ಕುಗಳು 59 | Name[ko]=책갈피 60 | Name[ku]=Bijare 61 | Name[li]=Blaadwiezers 62 | Name[lt]=Žymelės 63 | Name[lv]=Grāmatzīmes 64 | Name[mai]=पुस्तकचिह्न 65 | Name[mg]=Tobin-drohy 66 | Name[mi]=Ngā Tohuwāhi 67 | Name[mk]=Обележувачи 68 | Name[ml]=അടയാളക്കുറിപ്പുകള്‍ 69 | Name[mn]=Тэмдэглэгээ 70 | Name[mr]=वाचनखूण 71 | Name[ms]=Tanda Buku 72 | Name[my]=B မှတ်သားချက် 73 | Name[nb]=Bokmerker 74 | Name[nds]=Leseteken 75 | Name[ne]=पुस्तकचिनोहरू 76 | Name[nl]=Bladwijzers 77 | Name[nn]=Bokmerke 78 | Name[nso]=Dipuku-tshwayo 79 | Name[oc]=Favorits 80 | Name[or]=ଚିହ୍ନିତ ସ୍ଥାନଗୁଡ଼ିକ 81 | Name[pa]=ਬੁੱਕਮਾਰਕ 82 | Name[pl]=Zakładki 83 | Name[ps]=ليکنښې 84 | Name[pt]=Marcadores 85 | Name[pt_BR]=Marcadores 86 | Name[ro]=Favorite 87 | Name[ru]=Закладки 88 | Name[rw]=Ibirango 89 | Name[si]=පිටු සළකුණු 90 | Name[sk]=Záložky 91 | Name[sl]=Zaznamki 92 | Name[sq]=Libërshënues 93 | Name[sr]=Обележивачи 94 | Name[sr@ije]=Обиљеживачи 95 | Name[sr@latin]=Obeleživači 96 | Name[sv]=Bokmärken 97 | Name[ta]=புத்தககுறிகள் 98 | Name[te]=ఇష్టాంశాలు 99 | Name[th]=ที่คั่นหน้า 100 | Name[tk]=Nişanlar 101 | Name[tr]=Yer İmleri 102 | Name[ug]=خەتكۈشلەر 103 | Name[uk]=Закладки 104 | Name[uz]=Xatchoʻplar 105 | Name[uz@cyrillic]=Хатчўплар 106 | Name[vi]=Đánh dấu 107 | Name[wa]=Rimåkes 108 | Name[xh]=Izinto zokuphawula 109 | Name[yo]=Àwọn Àmì-ìwé 110 | Name[zh_CN]=书签 111 | Name[zh_HK]=書籤 112 | Name[zh_TW]=書籤 113 | Name[zu]=Isibekisi-bhukwini 114 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-menu-devices.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Devices 3 | Icon=gtk-harddisk 4 | Name[af]=Web Services 5 | Name[ar]=الأجهزة 6 | Name[as]=ডিভাইচসমূহ 7 | Name[ast]=Preseos 8 | Name[az]=Xidmətlər 9 | Name[be]=Прыстасаванні 10 | Name[bg]=Устройства 11 | Name[bn]=ডিভাইস 12 | Name[bs]=Servisi u 13 | Name[ca]=Dispositius 14 | Name[ca@valencia]=Dispositius 15 | Name[crh]=Cihazlar 16 | Name[cs]=Zařízení 17 | Name[cy]=Gwasanaethau i mewn 18 | Name[da]=Enheder 19 | Name[de]=Geräte 20 | Name[dz]=ནང་ལུ་ཞབས་ཏོག 21 | Name[el]=Συσκευές 22 | Name[en_CA]=Devices 23 | Name[en_GB]=Devices 24 | Name[eo]=Aparatoj 25 | Name[es]=Dispositivos 26 | Name[et]=Seadmed 27 | Name[eu]=Gailuak 28 | Name[fa]=دستگاه‌ها 29 | Name[fi]=Laitteet 30 | Name[fr]=Périphériques 31 | Name[ga]=Gléasanna 32 | Name[gl]=Dispositivos 33 | Name[gu]=ઉપકરણો 34 | Name[ha]=Ayuka na cikin 35 | Name[he]=התקנים 36 | Name[hi]=उपकरण 37 | Name[hu]=Eszközök 38 | Name[hy]=Ծառայություններ 39 | Name[id]=Perangkat 40 | Name[ig]=Ulọọrụ mgbasaozi na 41 | Name[it]=Dispositivi 42 | Name[ja]=デバイス 43 | Name[kk]=Құрылғылар 44 | Name[kn]=ಸಾಧನಗಳು 45 | Name[ko]=장치 46 | Name[ku]=Amûr 47 | Name[li]=Wèbdeenste 48 | Name[lt]=Įrenginiai 49 | Name[lv]=Ierīces 50 | Name[mg]=Sampan'asa anaty 51 | Name[mk]=Уреди 52 | Name[ml]=ഡിവൈസുകള്‍ 53 | Name[mn]=Үйлчилгээ 54 | Name[mr]=उपकरण 55 | Name[ms]=Peranti 56 | Name[nb]=Enheter 57 | Name[ne]=यसमा सेवाहरू 58 | Name[nl]=Apparaten 59 | Name[nn]=Einingar 60 | Name[nso]=Ditirelo tšeo di lego go 61 | Name[or]=ଉପକରଣଗୁଡ଼ିକ 62 | Name[pa]=ਜੰਤਰ 63 | Name[pl]=Urządzenia 64 | Name[pt]=Dispositivos 65 | Name[pt_BR]=Dispositivos 66 | Name[ro]=Dispozitive 67 | Name[ru]=Устройства 68 | Name[rw]=in 69 | Name[sk]=Zariadenia 70 | Name[sl]=Naprave 71 | Name[sr]=Уређаји 72 | Name[sr@ije]=Веб услуге 73 | Name[sr@latin]=Uređaji 74 | Name[sv]=Enheter 75 | Name[ta]=சாதனங்கள் 76 | Name[te]=పరికరాలు 77 | Name[th]=อุปกรณ์ 78 | Name[tk]=Web Servisler 79 | Name[tr]=Aygıtlar 80 | Name[ug]=ئۈسكۈنىلەر 81 | Name[uk]=Пристрої 82 | Name[vi]=Thiết bị 83 | Name[wa]=Siervices waibe 84 | Name[xh]=Iinkonzo kwi 85 | Name[yo]=Sáfíìsì nínúu 86 | Name[zh_CN]=设备 87 | Name[zh_HK]=裝置 88 | Name[zh_TW]=裝置 89 | Name[zu]=Izisekelo ku 90 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-menu-places.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Places 3 | Icon=gtk-directory 4 | Type=Directory 5 | Name[af]=Plekke 6 | Name[am]=ንድፎች 7 | Name[ar]=الأماكن 8 | Name[as]=স্থান 9 | Name[ast]=Llugares 10 | Name[az]=Mövqelər 11 | Name[be]=Месцы 12 | Name[be@latin]=Miescy 13 | Name[bg]=Места 14 | Name[bn]=অবস্থান 15 | Name[bn_IN]=অবস্থান 16 | Name[bo]=གནས་ཡུལ 17 | Name[br]=Berradennoù 18 | Name[bs]=Mjesta 19 | Name[ca]=Llocs 20 | Name[ca@valencia]=Llocs 21 | Name[crh]=Yerler 22 | Name[cs]=Místa 23 | Name[cy]=Llefydd 24 | Name[da]=Steder 25 | Name[de]=Orte 26 | Name[dz]=ས་གནས་ཚུ། 27 | Name[el]=Τοποθεσίες 28 | Name[en@shaw]=𐑐𐑤𐑱𐑕𐑩𐑟 29 | Name[en_CA]=Places 30 | Name[en_GB]=Places 31 | Name[eo]=Lokoj 32 | Name[es]=Lugares 33 | Name[et]=Asukohad 34 | Name[eu]=Lekuak 35 | Name[fa]=محل‌ها 36 | Name[fi]=Sijainnit 37 | Name[fr]=Remplacer 38 | Name[fur]=Puescj 39 | Name[fy]=Plakken 40 | Name[ga]=̈́Áiteanna 41 | Name[gl]=Lugares 42 | Name[gu]=જગ્યાઓ 43 | Name[gv]=Boaylyn 44 | Name[ha]=Wurare 45 | Name[he]=מקומות 46 | Name[hi]=स्थान 47 | Name[hr]=Mjesta 48 | Name[hu]=Helyek 49 | Name[hy]=Տեղեր 50 | Name[id]=Lokasi 51 | Name[ig]=Ebe gasị 52 | Name[io]=Placi 53 | Name[is]=Staðir 54 | Name[it]=Risorse 55 | Name[ja]=場所 56 | Name[ka]=მდებარეობა 57 | Name[kk]=Орындар 58 | Name[kn]=ಸ್ಥಳಗಳು 59 | Name[ko]=위치 60 | Name[ku]=Cih 61 | Name[li]=Patroene 62 | Name[lt]=Vietos 63 | Name[lv]=Vietas 64 | Name[mai]=स्थान 65 | Name[mg]=Toerana 66 | Name[mi]=Ngā Wāhi 67 | Name[mk]=Места 68 | Name[ml]=സ്ഥലങ്ങള്‍ 69 | Name[mn]=Байрлалууд 70 | Name[mr]=स्थान 71 | Name[ms]=Tempat-tempat 72 | Name[my]=နေရာများ 73 | Name[nb]=Steder 74 | Name[nds]=Orte 75 | Name[ne]=स्थानहरू 76 | Name[nl]=Locaties 77 | Name[nn]=Stader 78 | Name[nso]=Mafelo 79 | Name[oc]=Acorchis 80 | Name[or]=ସ୍ଥାନ 81 | Name[pa]=ਥਾਵਾਂ 82 | Name[pl]=Miejsca 83 | Name[ps]=ځايونه 84 | Name[pt]=Locais 85 | Name[pt_BR]=Locais 86 | Name[ro]=Locuri 87 | Name[ru]=Места 88 | Name[rw]=Imyanya 89 | Name[si]=ස්ථාන 90 | Name[sk]=Miesta 91 | Name[sl]=Mesta 92 | Name[sq]=Rezerva 93 | Name[sr]=Места 94 | Name[sr@ije]=Мјеста 95 | Name[sr@latin]=Mesta 96 | Name[sv]=Platser 97 | Name[ta]=இடங்கள் 98 | Name[te]=స్థలములు 99 | Name[th]=ที่หลักๆ 100 | Name[tk]=Ýerler 101 | Name[tr]=Yerler 102 | Name[ug]=ئورۇن 103 | Name[uk]=Місця 104 | Name[uz]=Joylar 105 | Name[uz@cyrillic]=Жойлар 106 | Name[vi]=Mở nhanh 107 | Name[wa]=Motifs 108 | Name[xh]=Iindawo 109 | Name[yo]=Àwọn Ibi 110 | Name[zh_CN]=位置 111 | Name[zh_HK]=位置 112 | Name[zh_TW]=位置 113 | Name[zu]=Izindawo 114 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-menu-recent-files.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Recent Files 3 | Icon=document-open-recent 4 | Type=Directory 5 | Name[af]=Onlangs gebruik 6 | Name[ar]=مستخدمة مؤخرا 7 | Name[as]=অলপতে ব্যৱহাৰ কৰা 8 | Name[ast]=Usaos recientemente 9 | Name[be]=Нядаўнія файлы 10 | Name[be@latin]=Niadaŭna ŭžyvanyja 11 | Name[bg]=Скоро отваряни 12 | Name[bn]=সম্প্রতি ব্যবহৃত 13 | Name[bn_IN]=সম্প্রতি ব্যবহৃত 14 | Name[br]=Arveret nevez zo 15 | Name[ca]=Utilitzats recentment 16 | Name[ca@valencia]=Utilitzats recentment 17 | Name[crh]=Demi Qullanılğan 18 | Name[cs]=Naposledy použité 19 | Name[cy]=Defnyddiwyd yn Ddiweddar 20 | Name[da]=Nyligt brugte 21 | Name[de]=Zuletzt verwendet 22 | Name[el]=Πρόσφατα 23 | Name[en@shaw]=𐑮𐑰𐑕𐑩𐑯𐑑𐑤𐑦 𐑿𐑕𐑑 24 | Name[en_CA]=Recently Used 25 | Name[en_GB]=Recently Used 26 | Name[eo]=Lastatempe uzata 27 | Name[es]=Usados recientemente 28 | Name[et]=Viimati kasutatud 29 | Name[eu]=Duela gutxi erabilita 30 | Name[fa]=به‌تازه‌گی استفاده شده 31 | Name[fi]=Äskettäin käytetyt 32 | Name[fr]=Récemment utilisés 33 | Name[ga]=Úsáidte le Déanaí 34 | Name[gl]=Usado recentemente 35 | Name[gu]=છેલ્લે વપરાયેલ 36 | Name[he]=בשימוש לאחרונה 37 | Name[hi]=हाल में प्रयुक्त 38 | Name[hr]=Nedavno korišteno 39 | Name[hu]=Nemrég használt 40 | Name[hy]=Վերջերս օգտագործված 41 | Name[id]=Baru-baru Ini Digunakan 42 | Name[it]=Usati di recente 43 | Name[ja]=最近開いたファイル 44 | Name[ka]=ბოლოს გამოყენებული 45 | Name[kg]=biampa 46 | Name[kk]=Соңғы қолданылған 47 | Name[kn]=ಇತ್ತೀಚೆಗೆ ಬಳಸಲ್ಪಟ್ಟ 48 | Name[ko]=최근 사용 49 | Name[ku]=Teze Bikaranî 50 | Name[lg]=Ebyakabukkulibwa 51 | Name[lt]=Vėliausiai naudotieji 52 | Name[lv]=Nesen izmantots 53 | Name[mai]=हालमे प्रयुक्त 54 | Name[mk]=Скорешно користени 55 | Name[ml]=ഏറ്റവും ഒടുവില്‍ ഉപയോഗിച്ച 56 | Name[mr]=नुकतेच वापरलेले 57 | Name[my]=လတ်တလော သုံးစွဲမှု 58 | Name[nb]=Sist brukt 59 | Name[nds]=Tolest brukt 60 | Name[nl]=Onlangs gebruikt 61 | Name[nn]=Sist brukt 62 | Name[or]=ନିକଟରେ ବ୍ୟବହୃତ 63 | Name[pa]=ਤਾਜ਼ਾ ਵਰਤੇ 64 | Name[pl]=Ostatnio używane 65 | Name[ps]=اوسن کارول شوي 66 | Name[pt]=Utilizados Recentemente 67 | Name[pt_BR]=Usado recentemente 68 | Name[ro]=Utilizate recent 69 | Name[ru]=Недавние документы 70 | Name[si]=මැතකදි භාවිතා කළ 71 | Name[sk]=Nedávno použité 72 | Name[sl]=Nedavno uporabljeno 73 | Name[sq]=Përdorur së fundmi 74 | Name[sr]=Скоро коришћено 75 | Name[sr@latin]=Skoro korišćeno 76 | Name[sv]=Tidigare använda 77 | Name[ta]=சமீபகாத்தில் பயன்படுத்தப்பட்டது 78 | Name[te]=ఇటీవల వాడినవి 79 | Name[th]=เอกสารล่าสุด 80 | Name[tr]=Yakında Kullanılan 81 | Name[ug]=يېقىندا ئىشلەتكەن 82 | Name[uk]=Недавні документи 83 | Name[uz]=Yaqinda ishlatilganlar 84 | Name[uz@cyrillic]=Яқинда ишлатилганлар 85 | Name[vi]=Vừa dùng 86 | Name[zh_CN]=最近使用的 87 | Name[zh_HK]=最近使用的 88 | Name[zh_TW]=最近使用的 89 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-personal.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Personal 3 | Name[af]=Persoonlik 4 | Name[ar]=شخصي 5 | Name[as]=ব্যক্তিগত 6 | Name[ast]=Personal 7 | Name[be]=Пэрсанальныя 8 | Name[be@latin]=Asabistaje 9 | Name[bg]=Лични 10 | Name[bn_IN]=ব্যক্তিগত 11 | Name[ca]=Personal 12 | Name[cs]=Osobní 13 | Name[da]=Personlig 14 | Name[de]=Persönlich 15 | Name[dz]=རང་དོན་ 16 | Name[el]=Προσωπικά 17 | Name[en_GB]=Personal 18 | Name[es]=Personal 19 | Name[et]=Isiklik 20 | Name[eu]=Pertsonala 21 | Name[fa]=شخصی 22 | Name[fi]=Henkilökohtaiset 23 | Name[fr]=Personnel 24 | Name[fur]=Personâl 25 | Name[ga]=Pearsanta 26 | Name[gl]=Persoal 27 | Name[gu]=વ્યક્તિગત 28 | Name[he]=אישי 29 | Name[hi]=निजी 30 | Name[hr]=Osobno 31 | Name[hu]=Személyes 32 | Name[hy]=Անձնական 33 | Name[id]=Pribadi 34 | Name[io]=Personala 35 | Name[is]=Persónuleg 36 | Name[it]=Personale 37 | Name[ja]=ユーザ向け 38 | Name[kk]=Жеке 39 | Name[kn]=ವೈಯಕ್ತಿಕ 40 | Name[ko]=개인 41 | Name[ku]=Takekesî 42 | Name[lt]=Asmeniniai 43 | Name[lv]=Personiskie 44 | Name[mk]=Лично 45 | Name[ml]=സ്വകാര്യം 46 | Name[mr]=व्यक्तिगत 47 | Name[ms]=Peribadi 48 | Name[nb]=Personlig 49 | Name[ne]=व्यक्तिगत 50 | Name[nl]=Persoonlijk 51 | Name[nn]=Personleg 52 | Name[oc]=Personal 53 | Name[or]=ବ୍ୟକ୍ତିଗତ 54 | Name[pa]=ਨਿੱਜੀ 55 | Name[pl]=Osobiste 56 | Name[ps]=وګړيز 57 | Name[pt]=Pessoal 58 | Name[pt_BR]=Pessoal 59 | Name[ro]=Personal 60 | Name[ru]=Персональные 61 | Name[si]=පුද්ගලික 62 | Name[sk]=Osobné 63 | Name[sl]=Osebno 64 | Name[sq]=Vetjake 65 | Name[sr]=Лично 66 | Name[sr@latin]=Lično 67 | Name[sv]=Personligt 68 | Name[ta]=தனிப்பயன் 69 | Name[te]=వ్యక్తిగత 70 | Name[th]=ส่วนบุคคล 71 | Name[tr]=Kişisel 72 | Name[uk]=Особисті 73 | Name[ur]=ذاتی 74 | Name[ur_PK]=ذاتی 75 | Name[uz@cyrillic]=Шахсий 76 | Name[vi]=Cá nhân 77 | Name[zh_CN]=个人 78 | Name[zh_HK]=個人 79 | Name[zh_TW]=個人 80 | Comment=Personal settings 81 | Comment[af]=Persoonlike instellings 82 | Comment[ar]=الإعدادات الشخصيّة 83 | Comment[as]=ব্যক্তিগত বৈশিষ্ট্য 84 | Comment[ast]=Preferencies personales 85 | Comment[be]=Пэрсанальныя настаўленьні 86 | Comment[be@latin]=Asabistyja nałady 87 | Comment[bg]=Лични настройки 88 | Comment[bn_IN]=ব্যক্তিগত বৈশিষ্ট্য 89 | Comment[ca]=Paràmetres personals 90 | Comment[cs]=Osobní nastavení 91 | Comment[da]=Personlige indstillinger 92 | Comment[de]=Persönliche Vorlieben und Einstellungen 93 | Comment[dz]=རང་དོན་སྒྲིག་སྟངས་ 94 | Comment[el]=Προσωπικές ρυθμίσεις 95 | Comment[en_GB]=Personal settings 96 | Comment[es]=Ajustes personales 97 | Comment[et]=Isiklikud sätted 98 | Comment[eu]=Ezarpen pertsonalak 99 | Comment[fa]=تنظیمات شخصی 100 | Comment[fi]=Henkilökohtaiset asetukset 101 | Comment[fr]=Paramètres personnels 102 | Comment[fur]=Impostazions personâls 103 | Comment[ga]=Socruithe pearsanta 104 | Comment[gl]=Configuracións persoais 105 | Comment[gu]=વ્યક્તિગત સુયોજનો 106 | Comment[he]=הגדרות אישיות 107 | Comment[hi]=निजी सेटिंग 108 | Comment[hr]=Osobne postavke 109 | Comment[hu]=Személyes beállítások 110 | Comment[id]=Penataan pribadi 111 | Comment[io]=Personala situesi 112 | Comment[is]=Persónulegar stillingar 113 | Comment[it]=Impostazioni personali 114 | Comment[ja]=ユーザ向けの設定を変更します 115 | Comment[kk]=Жеке параметрлер 116 | Comment[kn]=ವೈಯಕ್ತಿಕ ಸಂಯೋಜನೆಗಳು 117 | Comment[ko]=개인 설정 118 | Comment[ku]=Mîhengên takekesî 119 | Comment[lt]=Asmeniniai nustatymai 120 | Comment[lv]=Personīgie uzstādījumi 121 | Comment[mk]=Лични поставувања 122 | Comment[ml]=സ്വകാര്യ സജ്ജീകരണങ്ങള്‍ 123 | Comment[mr]=व्यक्तिगत संयोजना 124 | Comment[ms]=Tetapan peribadi 125 | Comment[nb]=Personlige innstillinger 126 | Comment[ne]=व्यक्तिगत सेटिङ 127 | Comment[nl]=Persoonlijke instellingen 128 | Comment[nn]=Personlege innstillingar 129 | Comment[oc]=Paramètres personals 130 | Comment[or]=ବ୍ଯକ୍ତିଗତ ବିନ୍ଯାସ 131 | Comment[pa]=ਨਿੱਜੀ ਸੈਟਿੰਗ 132 | Comment[pl]=Ustawienia osobiste 133 | Comment[ps]=وګړيزې امستنې 134 | Comment[pt]=Definições pessoais 135 | Comment[pt_BR]=Configurações pessoais 136 | Comment[ro]=Opțiuni personale 137 | Comment[ru]=Персональные параметры 138 | Comment[si]=පුද්ගලික සැකසුම් 139 | Comment[sk]=Osobné nastavenia 140 | Comment[sl]=Osebne nastavitve 141 | Comment[sq]=Rregullime vetjake 142 | Comment[sr]=Лична подешавања 143 | Comment[sr@latin]=Lična podešavanja 144 | Comment[sv]=Personliga inställningar 145 | Comment[ta]=தனிப்பயன் அமைப்புகள் 146 | Comment[te]=వ్యక్తిగత అమరికలు 147 | Comment[th]=ตั้งค่าส่วนบุคคล 148 | Comment[tr]=Kişisel ayarlar 149 | Comment[uk]=Персональні параметри 150 | Comment[ur]=ذاتی ترتیبات 151 | Comment[ur_PK]=ذاتی ترتیبات 152 | Comment[uz@cyrillic]=Шахсий мосламалар 153 | Comment[vi]=Thiết lập cá nhân 154 | Comment[zh_CN]=个人设置 155 | Comment[zh_HK]=個人設定 156 | Comment[zh_TW]=個人設定 157 | Icon=preferences-desktop-personal 158 | Type=Directory 159 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-places.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Places 3 | Name[ar]=أماكن 4 | Name[ca]=LLocs 5 | Name[cs]=Místa 6 | Name[de]=Orte 7 | Name[el]=Τοποθεσίες 8 | Name[en]=Places 9 | Name[eo]=Ejoj 10 | Name[es]=Sitios 11 | Name[fr]=Emplacements 12 | Name[hr]=Mjesta 13 | Name[hu]=Helyek 14 | Name[it]=Posti 15 | Name[it]=Risorse 16 | Name[lt]=Vietos 17 | Name[nl]=Locaties 18 | Name[pl]=Miejsca 19 | Name[pl]=Miejsca 20 | Name[pt]=Locais 21 | Name[pt]=Lugares 22 | Name[ru]=Места 23 | Name[ru]=Переход 24 | Name[sl]=Mesta 25 | Name[tr]=Yerler 26 | Name[uk]=Місця 27 | Name[zh]=位置 28 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-system.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=System 3 | Name[af]=Stelsel 4 | Name[ar]=نظام 5 | Name[as]=ব্যৱস্থাপ্ৰণালী 6 | Name[ast]=Sistema 7 | Name[be]=Сыстэма 8 | Name[be@latin]=Systema 9 | Name[bg]=Система 10 | Name[bn_IN]=সিস্টেম 11 | Name[ca]=Sistema 12 | Name[cs]=Systém 13 | Name[da]=System 14 | Name[de]=System 15 | Name[dz]=རིམ་ལུགས་ 16 | Name[el]=Σύστημα 17 | Name[en_GB]=System 18 | Name[eo]=Sistemo 19 | Name[es]=Sistema 20 | Name[et]=Süsteem 21 | Name[eu]=Sistema 22 | Name[fa]=سیستم 23 | Name[fi]=Järjestelmä 24 | Name[fr]=Système 25 | Name[fur]=Sisteme 26 | Name[ga]=Córas 27 | Name[gl]=Sistema 28 | Name[gu]=સિસ્ટમ 29 | Name[he]=מערכת 30 | Name[hi]=तंत्र 31 | Name[hr]=Sustav 32 | Name[hu]=Rendszer 33 | Name[id]=Sistem 34 | Name[io]=Sistemo 35 | Name[is]=Kerfið 36 | Name[it]=Sistema 37 | Name[ja]=システム 38 | Name[kk]=Система 39 | Name[kn]=ಗಣಕ 40 | Name[ko]=시스템 41 | Name[ku]=Pergal 42 | Name[lt]=Sistema 43 | Name[lv]=Sistēma 44 | Name[mk]=Систем 45 | Name[ml]=സിസ്റ്റം 46 | Name[mr]=प्रणाली 47 | Name[ms]=Sistem 48 | Name[nb]=System 49 | Name[ne]=प्रणाली 50 | Name[nl]=Systeem 51 | Name[nn]=System 52 | Name[oc]=Sistèma 53 | Name[or]=ତନ୍ତ୍ର 54 | Name[pa]=ਸਿਸਟਮ 55 | Name[pl]=System 56 | Name[ps]=غونډال 57 | Name[pt]=Sistema 58 | Name[pt_BR]=Sistema 59 | Name[ro]=Sistem 60 | Name[ru]=Система 61 | Name[si]=පද්දති 62 | Name[sk]=Systém 63 | Name[sl]=Sistem 64 | Name[sq]=Sistemi 65 | Name[sr]=Системски алати 66 | Name[sr@latin]=Sistemski alati 67 | Name[sv]=System 68 | Name[ta]=கணிப்பொறி 69 | Name[te]=వ్యవస్థ పనిముట్లు 70 | Name[th]=ระบบ 71 | Name[tr]=Sistem 72 | Name[uk]=Системна 73 | Name[ur]=نظام 74 | Name[ur_PK]=نظام 75 | Name[uz@cyrillic]=Тизим 76 | Name[vi]=Hệ thống 77 | Name[zh_CN]=系统 78 | Name[zh_HK]=系統 79 | Name[zh_TW]=系統 80 | Comment=System settings 81 | Comment[af]=Stelselinstellings 82 | Comment[ar]=إعدادات النظام 83 | Comment[as]=ব্যৱস্থাপ্ৰণালী সংক্ৰান্ত বৈশিষ্ট্য 84 | Comment[ast]=Preferencies del sistema 85 | Comment[be]=Сыстэмныя настаўленьні 86 | Comment[be@latin]=Systemnyja nałady 87 | Comment[bg]=Системни настройки 88 | Comment[bn_IN]=সিস্টেম সংক্রান্ত বৈশিষ্ট্য 89 | Comment[ca]=Paràmetres del sistema 90 | Comment[cs]=Systémová nastavení 91 | Comment[da]=Systemindstillinger 92 | Comment[de]=Systemeinstellungen 93 | Comment[dz]=རིམ་ལུགས་སྒྲིག་སྟངས་ 94 | Comment[el]=Ρυθμίσεις συστήματος 95 | Comment[en_GB]=System settings 96 | Comment[es]=Preferencias del sistema 97 | Comment[et]=Süsteemi sätted 98 | Comment[eu]=Sistemaren ezarpenak 99 | Comment[fa]=تنظیمات سیستم 100 | Comment[fi]=Järjestelmän asetukset 101 | Comment[fr]=Paramètres système 102 | Comment[fur]=Impostazions di sisteme 103 | Comment[ga]=Socruithe an chórais 104 | Comment[gl]=Configuracións do sistema 105 | Comment[gu]=સિસ્ટમ સુયોજનો 106 | Comment[he]=הגדרות מערכת 107 | Comment[hi]=सिस्टम जमावट 108 | Comment[hr]=Postavke sustava 109 | Comment[hu]=Rendszer-beállítások 110 | Comment[hy]=Համակարգի հատկություններ 111 | Comment[id]=Penataan sistem 112 | Comment[io]=Sistemala situesi 113 | Comment[is]=Kerfisstillingar 114 | Comment[it]=Impostazioni di sistema 115 | Comment[ja]=システム規模の設定を変更します 116 | Comment[kk]=Системалық параметрлер 117 | Comment[kn]=ಗಣಕ ಸಂಯೋಜನೆಗಳು 118 | Comment[ko]=시스템 설정 119 | Comment[ku]=Mîhengên pergalê 120 | Comment[lt]=Sistemos nustatymai 121 | Comment[lv]=Sistēmas iestatījumi 122 | Comment[mk]=Системски поставувања 123 | Comment[ml]=സിസ്റ്റത്തിന്റെ സജ്ജീകരണങ്ങള്‍ 124 | Comment[mr]=प्रणाली संयोजना 125 | Comment[ms]=Tetapan Sistem 126 | Comment[nb]=Systeminnstillinger 127 | Comment[ne]=प्रणाली सेटिङ 128 | Comment[nl]=Systeeminstellingen 129 | Comment[nn]=Systeminnstillingar 130 | Comment[oc]=Paramètres del sistèma 131 | Comment[or]=ତନ୍ତ୍ର ବିନ୍ୟାସ 132 | Comment[pa]=ਸਿਸਟਮ ਸੈਟਿੰਗ 133 | Comment[pl]=Ustawienia systemowe 134 | Comment[ps]=غونډال امستنې 135 | Comment[pt]=Definições de sistema 136 | Comment[pt_BR]=Configurações do sistema 137 | Comment[ro]=Configurări de sistem 138 | Comment[ru]=Системные параметры 139 | Comment[si]=පද්දති සැකසුම් 140 | Comment[sk]=Systémové nastavenia 141 | Comment[sl]=Sistemske nastavitve 142 | Comment[sq]=Rregullime sistemi 143 | Comment[sr]=Подешавања система 144 | Comment[sr@latin]=Podešavanja sistema 145 | Comment[sv]=Systeminställningar 146 | Comment[ta]=கணினி அமைப்புகள் 147 | Comment[te]=వ్యవస్థ యొక్క అమరికలు 148 | Comment[th]=ตั้งค่าระบบ 149 | Comment[tr]=Sistem ayarları 150 | Comment[uk]=Системні параметри 151 | Comment[ur]=نظام کی ترتیبات 152 | Comment[ur_PK]=نظام کی ترتیبات 153 | Comment[uz@cyrillic]=Тизим мосламалари 154 | Comment[vi]=Thiết lập hệ thống 155 | Comment[zh_CN]=系统设置 156 | Comment[zh_HK]=系統設定 157 | Comment[zh_TW]=系統設定 158 | Icon=preferences-system 159 | Type=Directory 160 | -------------------------------------------------------------------------------- /usr/share/desktop-directories/uxm-wine.directory: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Directory 3 | Name=Wine 4 | Icon=wine 5 | --------------------------------------------------------------------------------