pax_global_header00006660000000000000000000000064144634433630014524gustar00rootroot0000000000000052 comment=0ff26877e1b6d6b84d0e5021f221c69f86f95259 fsearch-0.2.3/000077500000000000000000000000001446344336300131415ustar00rootroot00000000000000fsearch-0.2.3/.github/000077500000000000000000000000001446344336300145015ustar00rootroot00000000000000fsearch-0.2.3/.github/FUNDING.yml000066400000000000000000000013131446344336300163140ustar00rootroot00000000000000# These are supported funding model platforms github: cboxdoerfer # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: "https://www.paypal.com/donate/?hosted_button_id=TTXBUD7PMZXN2" fsearch-0.2.3/.github/ISSUE_TEMPLATE/000077500000000000000000000000001446344336300166645ustar00rootroot00000000000000fsearch-0.2.3/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000014021446344336300213530ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve FSearch title: "[BUG]" labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. Ubuntu 20.04] - How you installed FSearch [e.g. built manually, PPA, AUR] - Version [output of `fsearch --version`] - Output of `localectl status` **Additional context** Add any other context about the problem here. fsearch-0.2.3/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011651446344336300224140ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project (one idea per issue) title: '' labels: feature_request assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. fsearch-0.2.3/.github/workflows/000077500000000000000000000000001446344336300165365ustar00rootroot00000000000000fsearch-0.2.3/.github/workflows/build_test.yml000066400000000000000000000010611446344336300214150ustar00rootroot00000000000000name: build on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: install build dependencies run: sudo apt-get -qq update && sudo apt-get install -y build-essential meson libtool pkg-config intltool libicu-dev libpcre3-dev libglib2.0-dev libgtk-3-dev libxml2-utils - name: setup meson build config run: meson build - name: run meson build run: ninja -C build - name: run tests run: ninja -C build test fsearch-0.2.3/.gitignore000066400000000000000000000036071446344336300151370ustar00rootroot00000000000000# Build files Makefile.in /build /build* /builddir /Makefile /data/Makefile /data/fsearch.desktop /data/fsearch.desktop.in /po/*.mo /po/*.gmo /po/Makefile /po/Makefile.in.in /po/.intltool-merge-cache /src/Makefile /autom4te.cache /autoscan.log /autoscan-*.log /aclocal.m4 /compile /config.h.in /configure /configure.scan /depcomp /install-sh /missing /stamp-h1 /configure /config.status /config.log .deps /.version /config.h* fsearch*-dirty # Project files tags fsearch*.tar.gz src/resources.c src/resources.h src/fsearch src/tags src/fsearch.glade~ src/*.ui~ # Valgrind callgrind.out* *.supp vgdump # VS Code *.vscode # AppImage AppDir appimage-build AppImageBuilder.yml # QtCreator Files *.config *.creator *.files *.includes # VIM files .vim *.swp compile_commands.json *.ycm_extra_conf* # Debug scripts /run_*.sh #idea .idea # Object files *.o *.ko *.obj *.elf # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex # Debug files *.dSYM/ # perf files perf.data perf.data.old # Files generated by the prepare and compile process *.*~ ABOUT-NLS ABOUT-NLS~ config.guess config.rpath config.sub m4/ po/Makevars.template po/POTFILES po/Rules-quot* po/boldquot.sed po/en@boldquot.header po/en@quot.header po/insert-header.sin po/quot.sed po/remove-potcdate.sed po/remove-potcdate.sin po/stamp-po po/stamp-it /.idea_save/modules.xml /.idea_save/fsearch.iml /.idea_save/misc.xml /.idea_save/vcs.xml /.idea_save/.gitignore /data/io.github.cboxdoerfer.FSearch.appdata.xml /debian/.debhelper/ /debian/fsearch/ /debian/fsearch-trunk/ /debian/files /config.guess.dh-orig /config.sub.dh-orig /src/icon_resources.c /src/icon_resources.h /src/ui_resources.c /src/ui_resources.h /tools/print_version.sh /data/io.github.cboxdoerfer.FSearch.desktop /data/io.github.cboxdoerfer.FSearch.desktop.in fsearch-0.2.3/CONTRIBUTING.md000066400000000000000000000032751446344336300154010ustar00rootroot00000000000000## Making a release - Update release notes in `NEWS` - Update version number in `meson.build` - Update version number in `configure.ac` - Update version number in `data/io.github.cboxdoerfer.FSearch.appdata.xml.in` - Update release notes in `data/io.github.cboxdoerfer.FSearch.appdata.xml.in` - Update screenshots (if necessary) in `data/io.github.cboxdoerfer.FSearch.appdata.xml.in` - Update version number in `copr/fsearch_release.spec` - Update debian changelog: `dch --release` - Build the project and make sure tests pass: `ninja -C $builddir test` - Commit release: `git commit -a -m "Release FSearch $version"` - Add tag: `git tag $version` - Push changes and tag: `git push origin && git push origin $version` - Create release on GitHub ### Major/Minor release - Create a new branch: `git checkout -b "fsearch_$version" && git push -u origin fsearch_$version` - Update `io.github.cboxdoerfer.FSearch.yml` in flathub repository - Make sure flatpak works: `flatpak-builder --force-clean --user --install builder-dir io.github.cboxdoerfer.FSearch.yml` - Update `PKGBUILD` in *fsearch* AUR repository: `$EDITOR PKGBUILD && makepkg --printsrcinfo > .SRCINFO` - Point Release PPA [recipe](https://code.launchpad.net/~christian-boxdoerfer/+recipe/fsearch-stable/+edit) to new branch - Point copr [recipe](https://copr.fedorainfracloud.org/coprs/cboxdoerfer/fsearch/package/fsearch/edit) to new branch ### Patch release - Update `io.github.cboxdoerfer.FSearch.yml` in flathub repository - Make sure flatpak works: `flatpak-builder --force-clean --user --install builder-dir io.github.cboxdoerfer.FSearch.yml` - Update `PKGBUILD` in *fsearch* AUR repository: `$EDITOR PKGBUILD && makepkg --printsrcinfo > .SRCINFO` fsearch-0.2.3/License000066400000000000000000000012571446344336300144530ustar00rootroot00000000000000FSearch - A fast file search utility Copyright © 2016 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . fsearch-0.2.3/NEWS000066400000000000000000000035311446344336300136420ustar00rootroot00000000000000================= Version 0.2.3 ================= * Fix buffer overflow on systems with `time_t` being less than 8 bytes in size ================= Version 0.2.2 ================= * Fix applications sometimes not getting started when FSearch closes immediately after activation * Add OBS build channels to build options * Remove debug output * Updated translations: Dutch, Chinese (Simplified), Turkish, Hebrew, Ukrainian, French ================= Version 0.2.1 ================= * Fix crash when parsing a size range (e.g. size:1kb..2kb) * Fix always highlighting search terms ================= Version 0.2 ================= * New search engine * Greatly improved highlighting of search terms * Custom filters * Improved sort performance * Improved scroll performance * Remember file selection after a database update * Automatically scroll the result list in rubberband selection mode * Invert selection with rubber band when **`Ctrl`** is pressed * Focus search entry when the main window gets activated * Add filter for applications (i.e. .desktop files) * Add option to launch applications directly instead of opening the .desktop files * Show application icons for .desktop files * Add .odp and .ods files to document filter * "Open with" menu now only shows applications which can handle the selected files * Improved opening of multiple files with the same type (they get now passed as a list to applications, instead of one by one) * Better support for opening files in sandboxed mode * Add menu items with links to the issue tracker, forum and donation pages * Improve support for non-Linux systems * Add option to exit FSearch when Escape is pressed instead of minimizing the window * Exclude `/proc` and `/sys` by default * Open context menu when **`Menu`** key or **`Shift + F10`** are pressed * and tons of bug fixes, translation updates and smaller improvements fsearch-0.2.3/README.md000066400000000000000000000117751446344336300144330ustar00rootroot00000000000000![Build Status](https://github.com/cboxdoerfer/fsearch/actions/workflows/build_test.yml/badge.svg) [![Translation status](https://hosted.weblate.org/widgets/fsearch/-/svg-badge.svg)](https://hosted.weblate.org/engage/fsearch/?utm_source=widget) FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK3. * For bug reports and feature requests please use the issue tracker: * For discussions and questions about FSearch use the discussion forum: * For everything else related to FSearch you can talk to me on Matrix: ![](https://raw.githubusercontent.com/cboxdoerfer/fsearch/master/data/screenshots/02-main_window_menubar.png) ![](https://raw.githubusercontent.com/cboxdoerfer/fsearch/master/data/screenshots/01-main_window_headerbar.png) ## Features - Instant (as you type) results - Wildcard support - RegEx support - Filter support (only search for files, folders or everything) - Include and exclude specific folders to be indexed - Ability to exclude certain files/folders from index using wildcard expressions - Fast sort by filename, path, size or modification time - Customizable interface (e.g., switch between traditional UI with menubar and client-side decorations) ## Requirements - GTK 3.18 - GLib 2.44 - glibc 2.19 or musl 1.1.15 (other C standard libraries might work too, those are just the ones I verified) - PCRE2 (libpcre2) - ICU 3.8 ## Download ### Ubuntu * Release Builds: * Development Builds: ### Arch Linux (AUR) * Release Builds: * Development Builds: ### Fedora/RHEL/CentOS * Release Builds: * Development Builds: ### FreeBSD * Release Builds: ### Flatpak ([limited in functionality](https://github.com/cboxdoerfer/fsearch/wiki/Flatpak-version-limitations)) * Release Builds: ### NixOS (unofficial) * Development Builds: ### Solus * Release Builds: ## Roadmap ## Build Instructions ## Localization The localization of FSearch is managed with Weblate. If you want to contribute translations please submit them there, instead of opening pull requests on GitHub. Instructions can be found here: And of course: Thank you for taking the time to translate FSearch! ## Current Limitations * Sorting lots of results by *Type* can be very slow, since gathering that information is expensive, and the data isn't indexed. This also means that when the view is sorted by *Type*, searching will reset the sort order to *Name*. * Sorting can't be aborted. This is usually not an issue, because it's very fast for all columns except the *Type* column. (Fixed in >=0.2alpha) * Using the *Move to Trash* option doesn't update the database index, so trashed files/folders show up in the result list as if nothing happened to them. ## Why yet another search utility? Performance. On Windows I really like to use Everything Search Engine. It provides instant results as you type for all your files and lots of useful features (regex, filters, bookmarks, ...). On Linux I couldn't find anything that's even remotely as fast and powerful. Before I started working on FSearch, I took a look at existing solutions. I tried MATE Search Tool (formerly GNOME Search Tool), Recoll, Krusader (locate based search), SpaceFM File Search, Nautilus, ANGRYsearch and Catfish, to find out whether it makes sense to improve those. However, they're not exactly what I was looking for: - standalone application (not part of a file manager) - written in a language with C like performance - no dependencies to any specific desktop environment - Qt5 or GTK3 based - small memory usage (both hard drive and RAM) - target audience: advanced users ## Looking for a command line interface? I highly recommend [fzf](https://github.com/junegunn/fzf) or the obvious tools: find and (m)locate ## Why GTK3 and not Qt5? I like both of them, and my long term goal is to provide console, GTK3 and Qt5 interfaces, or at least make it easy for others to build those. However, for the time being it's only GTK3 because I like C more than C++, and I'm more familiar with GTK development. ## Questions? Email: christian.boxdoerfer[AT]posteo.de fsearch-0.2.3/TODO.md000066400000000000000000000054261446344336300142370ustar00rootroot00000000000000| State | Task | Importance | Complexity | Difficulty | |-------|-------------------------------------------------------------------------------|------------|------------|------------| | Done | Invalidate icon cache when font size changes | High | Low | Low | | Done | Make the behavior of the `Open` action consistent with the `Open with` action | High | Low | Low | | | Custom file property indexing | High | Medium | Medium | | | Option to index and search for creation and access time | High | Medium | Low | | | Option to index and search for owner and permissions | High | Medium | Low | | | Option to index and search for xattrs | High | Medium | Low | | | Rework include/exclude UI | High | Medium | Low | | | File system monitoring | High | High | High | | | Option to search for run count | Medium | Low | Low | | | Add column for nesting level | Medium | Low | Low | | | Custom column order | Medium | Medium | Low | | | Pressing Enter in search entry focues and selects result | Medium | Medium | Low | | | Remember run count | Medium | Medium | Low | | | Auto column sizing | Medium | Medium | Medium | | | Custom keyboard shortcuts | Medium | Medium | Medium | | | Add CLI for searching | Medium | Medium | Low | | | Use PolicyKit to allow deletion of non-user files | Low | Medium | Medium | | | Load/save database from custom path | Low | Medium | Low | | | Content searching | Low | High | Medium | | | Option to mix files and folders in results view | Low | High | Medium | fsearch-0.2.3/copr/000077500000000000000000000000001446344336300141045ustar00rootroot00000000000000fsearch-0.2.3/copr/fsearch_nightly.spec000066400000000000000000000024421446344336300201330ustar00rootroot00000000000000%global giturl https://github.com/cboxdoerfer/fsearch Name: fsearch Summary: A fast file search utility for Unix-like systems based on GTK 3 Epoch: 2 Version: 0.2~alpha Release: %(date +%%Y%%m%%d)%{?dist} License: GPLv2+ URL: https://github.com/cboxdoerfer/fsearch Source0: %{giturl}/archive/master/%{name}-master.tar.gz BuildRequires: meson BuildRequires: ninja-build BuildRequires: gcc BuildRequires: gtk3-devel BuildRequires: glib2-devel BuildRequires: libappstream-glib BuildRequires: desktop-file-utils %description FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK 3. %prep %setup -q -n fsearch-master -c mv fsearch-master build %build export LDFLAGS="%{?__global_ldflags} -pthread" pushd build %meson -Dchannel=copr-nightly %meson_build -v popd %install pushd build %meson_install desktop-file-install \ --dir=%{buildroot}%{_datadir}/applications/ \ %{buildroot}%{_datadir}/applications/io.github.cboxdoerfer.FSearch.desktop %files %{_bindir}/fsearch %{_datadir}/applications/io.github.cboxdoerfer.FSearch.desktop %{_datadir}/icons/hicolor/scalable/apps/io.github.cboxdoerfer.FSearch.svg %{_datadir}/man/man1/fsearch.1.gz %{_datadir}/metainfo/io.github.cboxdoerfer.FSearch.appdata.xml %{_datadir}/locale/*/*/fsearch.mo fsearch-0.2.3/copr/fsearch_release.spec000066400000000000000000000024671446344336300201040ustar00rootroot00000000000000%global giturl https://github.com/cboxdoerfer/fsearch Name: fsearch Summary: A fast file search utility for Unix-like systems based on GTK 3 Epoch: 1 Version: 0.2.3 Release: 1%{?dist} License: GPLv2+ URL: https://github.com/cboxdoerfer/fsearch Source0: %{giturl}/archive/%{version}/%{name}-%{version}.tar.gz BuildRequires: desktop-file-utils BuildRequires: gcc BuildRequires: glib2-devel BuildRequires: gtk3-devel BuildRequires: libappstream-glib BuildRequires: meson BuildRequires: ninja-build BuildRequires: pcre2-devel %description FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK 3. %prep %setup -q -n fsearch-%{version} -c mv fsearch-%{version} build %build export LDFLAGS="%{?__global_ldflags} -pthread" pushd build %meson -Dchannel=copr-stable %meson_build -v popd %install pushd build %meson_install desktop-file-install \ --dir=%{buildroot}%{_datadir}/applications/ \ %{buildroot}%{_datadir}/applications/io.github.cboxdoerfer.FSearch.desktop %files %{_bindir}/fsearch %{_datadir}/applications/io.github.cboxdoerfer.FSearch.desktop %{_datadir}/icons/hicolor/scalable/apps/io.github.cboxdoerfer.FSearch.svg %{_datadir}/man/man1/fsearch.1.gz %{_datadir}/metainfo/io.github.cboxdoerfer.FSearch.appdata.xml %{_datadir}/locale/*/*/fsearch.mo fsearch-0.2.3/data/000077500000000000000000000000001446344336300140525ustar00rootroot00000000000000fsearch-0.2.3/data/fsearch.1000066400000000000000000000017111446344336300155470ustar00rootroot00000000000000.TH FSEARCH "1" "2021-07-17" . .SH NAME FSearch \- a graphical file search utility . .SH SYNOPSIS .B fsearch .RI [ OPTIONS ] . .SH DESCRIPTION .B FSearch allows you to search for files and folders by name. It uses an index to provide results almost instantly as you type. . .SH OPTIONS .SS "Help Options" .TP .BR \-h ", " \-\^\-help Show help options .TP .BR \-\^\-help\-all Show all help options .SS "Application Options" .TP .BR \-\^\-new-window Open a new application window .TP .BR \-\^\-preferences Show the application preferences .TP .BI \-s " PATTERN" "\fR,\fP \-\^\-search=" PATTERN Set the search pattern .TP .BR \-u ", " \-\^\-update-database Update the database .TP .BR \-v ", " \-\^\-version Print version information and exit .TP .BI "\-\^\-display=" DISPLAY X display to use . .SH BUGS For any bugs or feature requests, please create an issue on GitHub at https://github.com/cboxdoerfer/fsearch/issues . .SH AUTHORS Christian Boxdörfer and contributors fsearch-0.2.3/data/gresource.xml000066400000000000000000000003451446344336300165740ustar00rootroot00000000000000 io.github.cboxdoerfer.FSearch.svg fsearch-0.2.3/data/io.github.cboxdoerfer.FSearch.appdata.xml.in000066400000000000000000000122051446344336300243150ustar00rootroot00000000000000 io.github.cboxdoerfer.FSearch CC0-1.0 GPL-2.0+ FSearch A graphical file search application

FSearch helps you to find files and folders as easy and fast as possible. Just type a few letters and search results will appear almost instantly.

There are a lot of features which make searching as efficient and powerful as possible. Such as:

  • Ignore case (e.g. searching for "fsearch" will match "FSearch" as well)
  • Regular expressions
  • Wildcard support
  • Filter support (e.g. only search for audio files)
  • Exclude certain files and folders
  • Fast sort by name, path, size, modification time and extension

Note: Due to Flatpak's sandboxing, FSearch can't find every file on your system.

https://raw.githubusercontent.com/cboxdoerfer/fsearch/master/data/screenshots/02-main_window_menubar.png The default UI layout https://raw.githubusercontent.com/cboxdoerfer/fsearch/master/data/screenshots/01-main_window_headerbar.png A layout more closely following GNOME HIGs https://github.com/cboxdoerfer/fsearch https://github.com/cboxdoerfer/fsearch/issues https://github.com/sponsors/cboxdoerfer https://github.com/cboxdoerfer/fsearch/wiki https://hosted.weblate.org/projects/fsearch/ Christian Boxdörfer christian.boxdoerfer_at_posteo.de fsearch
  • Fix buffer overflow on systems with `time_t` being less than 8 bytes in size
  • Fix applications sometimes not getting started when FSearch closes immediately after activation
  • Add OBS build channels to build options
  • Remove debug output
  • Updated translations: Dutch, Chinese (Simplified), Turkish, Hebrew, Ukrainian, French
  • Fix crash when parsing a size range (e.g. size:1kb..2kb)
  • Fix always highlighting search terms
  • New search engine
  • Greatly improved highlighting of search terms
  • Custom filters
  • Improved sort peliformance
  • Improved scroll performance
  • Remember file selection after a database update
  • Invert selection with rubber band when 'Ctrl' is pressed
  • Add filter for applications (i.e. .desktop files)
  • Add option to launch applications directly instead of opening the .desktop files
  • Add menu items with links to the issue tracker, forum and donation pages
  • Add option to exit FSearch when Escape is pressed instead of minimizing the window
  • Exclude '/proc' and '/sys' by default
  • and tons of bug fixes, translation updates and smaller improvements

Initial release.

io.github.cboxdoerfer.FSearch.desktop
fsearch-0.2.3/data/io.github.cboxdoerfer.FSearch.desktop.in.in000066400000000000000000000005141446344336300241620ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Type=Application Name=FSearch Comment=A file search application focusing on performance and advanced features Icon=io.github.cboxdoerfer.FSearch TryExec=fsearch Exec=fsearch Categories=GTK;Utility;Core; Keywords=search;fsearch;files;folders;music;video;documents;find;tool;everything; StartupNotify=true fsearch-0.2.3/data/io.github.cboxdoerfer.FSearch.svg000066400000000000000000000032731446344336300223030ustar00rootroot00000000000000 image/svg+xml fsearch-0.2.3/data/meson.build000066400000000000000000000025631446344336300162220ustar00rootroot00000000000000install_man('fsearch.1') install_data('io.github.cboxdoerfer.FSearch.svg', install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', 'scalable', 'apps')) desktop_file_in_config = configuration_data() desktop_file_in_config.set('app_id', app_id) desktop_file_in = configure_file( input: 'io.github.cboxdoerfer.FSearch.desktop.in.in', output: '@0@.desktop.in'.format(app_id), configuration: desktop_file_in_config, ) desktop_file = i18n.merge_file( input: desktop_file_in, output: '@0@.desktop'.format(app_id), type: 'desktop', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'applications') ) desktop_utils = find_program('desktop-file-validate', required: false) if desktop_utils.found() test('Validate desktop file', desktop_utils, args: [desktop_file] ) endif appdata_file = i18n.merge_file( input: 'io.github.cboxdoerfer.FSearch.appdata.xml.in', output: 'io.github.cboxdoerfer.FSearch.appdata.xml', type: 'xml', po_dir: join_paths(meson.source_root(), 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'metainfo') ) appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test( 'validate-appdata', appstream_util, args: [ 'validate-relax', '--nonet', appdata_file.full_path() ] ) endif fsearch-0.2.3/data/screenshots/000077500000000000000000000000001446344336300164125ustar00rootroot00000000000000fsearch-0.2.3/data/screenshots/01-main_window_headerbar.png000066400000000000000000003146541446344336300236630ustar00rootroot00000000000000PNG  IHDRPsBIT|dtEXtSoftwaregnome-screenshot> IDATxgxۀ{F(ދE/ HUX ( {EHUP:JCIvw!fw^_v;s̙3sfB!B!B!B!B!B!"RB!W3΋F&!B!Dv`* B!9-ǃ l[B!BY =`%W)!B!@l +@'od4QB!B:޾'@r$~&B!(Z<<| ,C9u)*tB!&@Ufy S,-B!(x r2z@* *3?`۫_!BQ |P>(`$[)h 4'B!B#ӫ?y|(RH0yӴ+B!_F7(@_%<ɟ&o6!B!Dᓙ}pӴ4,'3iuB!'x@qMKq{gAet(iO|H0%B!D}8M~^}+̴@y d\?$y{ͨU}8 !BQx\$<-Q|PTF`S Ὧ`@* !B!'oO]$Q+\[<R|U@ykUSi(6_O !B!@(kJД2so}r.%P *+7v}SF95 "ϥJ!B/3-P`b $1k0Z+~ $us_PArVN]ZX)bRB!zk/]~ \LFO]n'O4W^5{=$$TB5쉉hadnB!BBLQf A#!ڹ:>m'mk^wݱ͇w:DB!BcΖ*]`7qo+ʔUPſEW]$xB!Bd =CK$ݤ!Owvs:yO(½)cG>WͨB!Bxb :VBABykr%*EV(+{fҪ3+ky!ܭ6_RP0Y- N#swXQ,g (s=1ߧtxލ/ρvsoTM35]SGU ,l, !(Dm&7lTU#%N8lfur@UXX,sSYNu ן-<<) 3AM37V]SL>*_SPG݆M1[ m("%&uG aԬS}wkjm!ILHDUԬ0PTgnriXx R(]gF]̀ _x J$"GΣha`iP|EN=LpP<)_2;N9I)GJO̒D&ѼzN|ºOLH @[2zn`J*B!9R"_AePYύ%Z !Y P|p(+"_'yP^y 2jeL?{Y|8"éS6;J5:{B!|sJyRE>'{-Jyv{[q{q(ۛijWLKXa6lK[2pܔB!(9OnrsSonOEWD- ,,R =ӮusE֮_O?/b3tH_] ٖ tc(=Kʹw>K?r_h3㰛fS^Nll,S_Ç}gZճ}ÏTtшO%[w$0v"/Wo7SwNb[2ȃtPt'سwoj3Qzw1K;hX/Oʲ+hӺU ĈluNY0)9y ?oXwC_Bbcc4e*Op\O@x?. 'b9ph[ƂZ#!G*;Bǰf^s^/]}~o2+i2{=sA3t/OIz&xrUFuzt/dPXz5Ʈ9fƪgUߞ\]eW R83w,J혾G _Auߨ5&9nxub@4kO (\6tK54aUwYxzi@u7p˜3|eÎC^fD:i PwsHy~_M#8e8ϦFW 9_`_/sA@ßzRLg??3?sg7KO0Xsڙ5eF=#~_r.hs}K;5̝m3s<Mfa-%OG6b<&xIûY4,cq4훘q1fɳQc J[y#4gGLC6mھl mM*f obR0:GU=O'(Z|u;~kq8խSIfNR/efbפ 0LPޗs;em+ըW ~{ bJ:aBAI:0L_G>A ^S>cmW9>][GY2fr:h Æ ʰȇ̐3u2[hx)L&6-͐_xu +<ʫLxU9B2e1圜u-9}YQ@xx.]ŋĔ.u .$ܼO}MԤ)*Y^uE._*at=CҧѴ {n*kRҾ§8ARt68N:TiNF+JӾr6s|; T;6}105ӌ86M;Ӷ4-;B6^~6c}7[˦iqg[H(WΖ%N@(i]SNn~y 7f7ط??-^(tt)kYJ]F`b19Xf20D *NȹӜuB)3.;#eglRq׿0ib(DFV+DhN'nY'Om_0nL*$Dt2جV>|&:XhС5^Mej}k6kXل*a.e؍(_N!Dgy T̑GS;ʕ*| uUGWI=0G),:2m/"~Γkr #gy\>L5ymdk ߞ1Ƴo_d<%)e0 jK~oM~o[ٕʥ 4mDz+ٽgDDDPNm:ډҩreܸq/57T64h A|G>ٶO׮P>̶`5LXణIV& D3ŌfŌ괣ɂjTbpO-]ttՉ0[9hz:EdTt^g#G\|5}<_f9X'Ε|xSBe%Ui¹ZRbLR1Xl-=l#g~L$- ~ivP9مpV͚~S_:cS'O: {D:OS!|S_Ç}kZy9͑[nO洓j)CCkiQ8.8=M_zАsܑ;|ء\Of:~85sx&\DDDܸ BCC};wJOS!^y){)+,T )QxZ%;~āW!DA'G҂p).!Z磰r B!BQ^>@!49 xeEWEI.^%\!ȴn,BrF}ɋn B!_܃tyG,2hZB!:(A yЗ.|Y+.YBQI|/!fОL&QXX棰&Yd ÄGDbcBHu.?d)<&KɔNL~]^Q(gM$HSk6*TJxdqfs^gK!@4^GGAXV rsq*J,?i2Q,<'Op>t&J!D6۱ms^gAx( V -] ,łnb cs:0rkiQ*gIM4Ud1S,,<"02?dLr!}nljb)]0864Mxi^V륔 !@xx^/D "A(6B!Bܻ~U!BQI B!BI(!B!Su;qPnJ!B!rDP7w[B䑿7ɍ:B$۹gR.m\Kf-PU5s\ skVB<$ۺlIOJdr B!BI(!B!S=FZ%D ۺlIOJ`%B!~ʽ(!օ(d;LRVʵJZj(d[3)IYL ! ݑH#"{h:Y'6 ̸1>ޙ?3Wd] ~y3c3:XćeSY|(%};M$j4ߗ~Dq#YM^R%)Ț `D6}ږ[Rœ,*/t KI1'M!r1wձ lL1|a*jLaFJh=zj_Zf~ջC*4js@_~@{*PR7~-)єKǧ9Adr7bOYnɸٹ}'^#ZGF=>PwÿP7W '&>/FPp.kc-߂! } Q͙-_}=߯q wp~n뀡%th@4%z N8m$n|_UgVEڞr:QQ<;d-D4v~} -WzSY9ϼᾓm㝔-c_re2}Oלi)Fvy|@CLAU8lbG_`}z׋+ N3H7@1Cu>a;R7@1,&gSZeT " IDAT_fhի^ =/%|JѸ5m8E;b2ΰ~} Es%LZǩu`v]11?ZK<̰Cyhfr>ֳ%w '`n؛싘>6%2M eofw7O>ijRXɹ+B?cf>Y&1y]FLGeP^=_}ۮǿsV 2P2l 22|` Xdr\LlT2ym*#vtQ׎+=oG[-1ePdu\7m_y?,/[6^|cu1&OHkӵyOKl_H{r'l6O|oigY.s:sôN]Ւw\c o| PYT8_2] ~]{{='pY7'~&NiȺf4)nOʒAqeO9I>WCO;)8Mcdnx#>} O_gt(`r-2cWqǠF4b4-5%pj!H.9ՔNSy:D`І)o oИʗpN5p^JftFq8lՑGxs*WT l[g[0d y%Gek04;-umCR'TGi@R9}^?+mX5zLC?800Rt|3)e])>Dc\Vm+܃c~wgPXNKzX\.J0+}˰g 5W"H?pt$rm< kJ(%:d[ XB||s۟UhE[uprb&6)9StGUR$nuz}GwPUOuL`4؅/0Mqgۮ5VSU'͚='wdЀ;Q՜O(7$@U4UpMK-X,ܔO|{ ƶL&9pI?+; cTeSIxMencS*|{B1Y4;._"TcJ*)iY(Y:K$~0BiS y+217OW5` # ?ʤq\5("f*O olv ׾ꏽEOisw_;KYM_dU.ޅ/qh:aHjv'f|g޷2TǾ _f4T4(te;z3 DZ(dНY|L 9xNTg'uCMđ6z߼!e`hs087Y/e?xaxjgjR} nOѓ۾`TxIn >MPtqB. %-ٳ(^; q{ھ=}r-15$ ˤsfL~4bj0%м]Φ14~[?[1El۶_%ngR)82c+N \R!Ƃ^W~/rT.v dJcR7_6_K\v8k(,[mҠ79wqnw.4ϫ 2:׻bA N3พ+!DEZ8{4@7<[2 Cz6>.C1rh-6m0Y2FhJIԛҎgӁ[2Q U61(>j8}˄WfYTmF1]Z˧ v_)F߲J[w;s8Ь?]+:^SIɖT<mo$-ꏵN+Z9էH4{Niܗ/wֳُ P.|Ii~W/ijZugHט&ϭmSvC&މG 8:]GXB@ )Tՙzﶗ1۸&=hTF^^Jy[!o6>֦nƇgcdʂ@:Om+=˥ƟXur_Mb9)Ra/<bqKԧ1t+`Z;C[e;y4 CIƾE p2Mz_ @ C3xiQ;I`[բJx3"!ㅯܢ\85J1o?{RX@yjp6/SQ޻&2Xk-k+.Ov̶ 5UOȌf5gr?UņŬj ӡb`d=|YgN(6ݑܿلjlR]uz8"z~a[w6(f,6+f TMwMm6/i !̶,n}]tg")r=mǶo0[O9hiR64\.E]Ҏ.g\łLn-Xͮd#x:d۲~ȸܔumOw 1Y1cǩL$jŤ]hiYIB3%{~JgZjc{Z,q`nj{\e"=H@u$}'GSh.e9R8vq5v~׆ktT̯&!Lo.yCi\.vui !#1VK@sa|0MF]vKCt}Ic*q3F KPr*/2.75UzAzuzt?[?}/rC=J!B! \4- !Bu! ?=r񟔕(Y>!DA'ۺ_ΣHmE\HJd(T(d[+J wU%D&@ !B!$B!B?I>!Dm]OsϤ\'e% 0iB!B?I%B!~ʵ.|;mέY !Hr QvbٱuV[0NGb7%2] `M~%w}mj[9B"!!:B$۹gR.l߼LM[NǁmpU@stpRhO !B!$B!B?m̅B!"@v}r%z*I~$B!BKvM[jgΟ˴h֌\SPv{".]DSlIl6U8y !B!׾O)TUe4[7gԥ jfKzrEʖ+- !B!VJ=O..'M$TUbɾbiad<B!"4T< 4zSm;:a p'ɱCH6~G8>9OOS/ȩqc>u:穟º| H?E> <*h$ AX '&̈́[QT+f5ӆi%i#aj!D3J?Ú7ۍ)_*%اU˖lLCE ĭ)S!_9VP[yѼ 1ejȉuƳFXpW!w{CHtUӯa@,}+jԠV5q%g,fH1j;^yѬůr׍.Q~lnZ[w'`v8M+S Rl9Č?ϥu+p}ZRm/YCՠt* :W74A҄QF#>鞣ܗۂhѦ!JJ}I=BEBH\0γzj?U"D5w?JHg%|?FcF5MVӧԉ)NC|wrW,y~4NH7K+Ϡy_=]P6vh`zNZK>~נΐ_-r:u|˛fL)HHɚǫ`1W@˴V6K-ڨwdRq\]-Cm.>JF3[}˥Piw:] χo=`-݂*cEėz :uƐ02y=qycUNq1g=v|ȠdZ Iz:wMH371[IټS+pWDh/su}yWyj Յ-sCs\$Z^־tIN> F:&xgω#94_ȇ}&Xmy׃_yCáDO~{cސ4xf )=?Dw5?^ ])p KDʳ47adtoIm&Q)]=qSr @9͊r4FnVvK#&}KxAACh^Nnl^/M6ISo :e{R+{>tHwM$_I(BsSSwVkI1 6l8v Mlg2%Itzp O %|8wUja|;:ud~9L8'lܼ\X*;Jl'򞞇:$n7ҷ={-!5Kb֛i4/[ev5fe~+NL88O1nY{a q{wsjj$7~ڪצ]9;]<?Gh]QiL;]@s1_:3 y)8%3vb~׼$SXL A׭CjEwXA8U+fÚ3".|J):3v N:tiN%kgeL 1V*-iVæ# 熯:/ϏmK n]Jc:4`+ߍG_7~/Jȳ&TQp\šp}5"LQ1_V!C0ag ,[zwHZ }aZ!Sj1x0b;yz]su<2i/x'mFJNz _.Ga[ 끹&C_|B)V3*Q nҔCTVm}}VsjZq:qn0w'Y>e:&O/9C>K'Xm f=HMΕ}{9!my#l4A &&(:4Z! NB[rW[ۥ!Gslo-GFu˺ ẋq76Սiպkh үAD7X|9.Jhj8vNl_4mm?[WҨM 2,dJ4G=D XjiңQ챱mɜK=1k:`CqhHO~K x}?չ/]Y1Iz೮dUo/a5&Lbǧer8 Z<BJX8׸:(/7k場ey.k]gbԭLM +X.% kz9;T0Ͽ'&bj&Z%Mk\kTUqdK:5"azWjYS*_wAaa6yoRtYnzAZl]eˬ F~8@-!ضr:Aی%2p}bʕ%a#(] y}+l}֪kSSK&r;d{7L69il6$ Wϝ'u|sz{VJ\Z;f .}! 8tj3[:0Sry50 =GRvx N% 9. IDATǕXs@9ӦPѹrkLDƬ=tNN>m[Y~/h@FPo׭nu#KifUp`~囮t6։Le(R7 s&#}S=[N/m޼2؏+ҷ%~D޴r;\2:>x+٭ n>2߻\Խ{ ~[˪o_嶫9V)u,Pv]ž:g߿cR+\יg "Uײΰ<#oҟEu?Zc /ye6Ihr$uӜ&ӆS Ԃ>sXpڃ;lI 6 I #*Z/bPQA]Y7R i.% '`_DW}8f%sl|F8ɺ%8\>/ }'X t)+Gn<~x\ԁ <;mFe7ECKM羚{wI>[8/ '`Xʇ;34έk0o ̊ ɉ>\.V,l˓4O/W>k(Qf2)Q,D? jѶe4 `P! _3[h]X9>n53_nFXX*ޕ:0e6/ۗzΎBѧ䦾ѼKk:#7^tc߸`ȏqIAv7-c%דv vt;.C?P`Z _,]y&͹&ĨuEMpchiDZ(M3!q;_gP钯яA՗0$`ڢ#exm ,3-O=o|wC-0Ct գ _fY!o û1Kmt-}b7q/W)I?z۾O:1T;鎗߂r \$GZvQ>: yX9Ì|kg+RT _}_yǼ'IhrvPTՊSpڰ;mص  ӊin">!Yذ 7X:@R0/DYEEE@AAz3! 4ٝH!$BB}yv!{=sϹg;; 6Db{dstrKuIRwJƼn.ܑi[6Sbx_G tjWL_fbc<,Y7+d|i`hMpzO: i*k.i}8Bی-yb tO!41|ߙGZMr.hHT 1;~oblTe0,gr\XʲmDr(ӭ/*(lس)؞ӹHo:{i|-%a ™2dft6$MZ4)M$&ihBuMS$ȕKY0A[_6^j_s'dZKzq Ÿe_iMj7`zjhR4vtz5[g~),?}%("Ʃbo۱v=0(h"p0rOsw3n+Pj#{.UTTYE1kP-ZE٬â0[t=Eɢ'ͨ'hJn'Fӕ䩔&agQ]6<(o| nrmdEqʓ.JT/V(S\ AΦ={yQ v>/.<'KS (,%u-|nիq܊GӠaH BWLŝKZ'o\/`U‡|>e8݌>_oeD}HiZ=ٌNWtNbj@ Xe~?hO3|oR/ ƥ\cwy6_+S*u_ͫqo\<^{%9Rs[{ZIK\D:hƬArjjӀGBUr=%qTs%#rr Vs9Q4;EҮ/rWRAżo*Az ..ʹoϔ*(J+(lVuxPv$(G2@(+PwW2jJbq'LIhtJ2%-bUEUH:#ℊKfAfKM<)vmyf .m%MykO0sj^ڵ,ɾ_կps.a;G:fLk^ !sLUNvR I )*MTG܋Eq=]ly3`_/|߹k]h.Ttw=-/g Ÿ0>{(mZ6[ġ?qjx:$ 0 QP!*W@]0~J( Z$n<Ow¿FNr~)\/zslasaNO~|7z˜"IʩG٠T\RSU4P@1T}aPTtb@o1hdjSѬb@U\2KRPHJHNnUiH(*E[{ ziߢ6F߄_lG@mAv=,'X~r*Y"Y~Ѷo^_m DH j2 ߲+yB>?V#.3n~J.gD*m(-/ggq)vgѮsĝ]à,'q7*?II$%%t-/6 r+Z|7獡oVάeTF|pK^UCI'la{aN{_W,NbuqՕ=%zT&j~ɨWe4 G2њtـIYYJ_@|xST6upf nN@*T mV 5igaR@yנ٠<]`)z0˗yEM5wX71cVdˋߟϣ0`jV# e+v_F|4{+Wz_שC- kmVN̮ew_+*Ub瑜4A|i_/[3j=!&CߘP05UvHznGc[AQc267.`t:xUIi[qʖY lوFupҺPNcF-ͩу';;к]0R新9Np@_ם kѢ,?OOz+0uz;Pq\7=lߞ u'wTOPzl֝rr6ZEǴu isu?ȷش){com6,Q?4iW9n#W~r{G<56wY>&: Krwtxy?y_D'gέrB}jz2G~!xXkk9pizvdD?O?EVQoq|On.0s9.ӮVĥPf3u?#tBV{͇$%vӎlŇ* TfeRQ-(fTY@zYM"i0eڪC*?{ӓ~x4ϞkDo7SYNY( s6'zqdҺS-^Őqozj"g,,bSŃSL\q5uϡn9rҰ,:g'Lc<[{lAY-f>X0#D f,Zߙz}cQ~4GU||RҾUޯ0noB_|RSU N:Ǿl睑ϰr$d44cNmA^6ec΁,ʩ¥ F.ѹk|#G7W܀I,;tZp \fBpCbJ>f\`ϞKȗ#ܪM ygRHSw 5KL.ӿ$u5 {!Xu,g<&Ou쁕sʳx׺W։SkI?ftF"3eG*6eQ]*b%^P*'p~']e`Ĉ Hٮ N߳'}3ick'Vf~HZr|O>}؀ dL~C@Op&f~"5ک#cS~ߚP#=X!$|-+W̝|U=*oI)E1y('L*ɀ愢Q,:Tz$Y֤Gggs TnOذw|R=d#X83o*o,qCciܽLnp+zoO$_H7k:"F|ۋ(1[+F*)wиV9cKp1"+WՑϱ/V)I>=VkO=<)w]ԣv@+M:Z5k-EE§d$QfŬG1鰘 Mـ䀚f4)=" TvVQ8X:5γ[Tci*ܹ|@js[#hLpp:ډlGFKG-kˍGeL7AO%b 7EXOs4r.wxn3eKB:;u?3pիb 1 m됥K2A瀃VJX%EFzEgz^%ѷ52m_@̀J\gsM9k:﵃lK8ȲVOx`ɯgIq~Cwط3אvvl\ 1k=juζ[w'A(a6eU^r nT@50?>-xOySwXKW0.|Æ=aA6:G[+cmeSzs kw!9&sL5Ķ?$ .]ƨj H=Wc4Ү!lNݬ_$?ڄG%WM'0=xISuw`*f&0ƴpoyuqɣFǖx,7~9Evd_=[)Zʺ*%3ܼ~$k<%6i C^BSOÍ &Vvz!$ݍoIg&֊]%9Lץ&'lpEo=rvS6ͫ6)8yOjt,mb'ګz899ѺysxzjixyzҲiSRlOںfYvhr MvBLdfK٘HY4Cֽym3~Zx)b|3W]Kpj9f9HɎ N.sՊkCƩnϰL4ǩ%s]dOdtC9;᭛8e sTPz5*Ğ'&~21jGN[{lY_С]ug䳟8'>` ɴh2}$]Ajk} hOmfw%'9e|* K}J3%j5|KZLUEUUT%5Nƿot[v\69[kٞ$`ٻX(o]T +EG*6]Cڷ[gٴ4iD.EyVm+`1%PMj>FO1w1_ M3%MH1~v0u;fKbus OLOyf;%zpx߼˽&պlJQSV)CZczn e嶝D}"ؠAY 'Q3jO1? yPVDXK`}|ΝL6=Z_6ev5w#=]Ի|soQ$4yLV{uFկOvخ / J(S=A6el@8Ilth2Sӿj=Ul׸Y IDATXnd}dڂC ,g}[s=Dž C0%IU\e<&^IJ+| I6R9uyCR9aVH>+?5i΂%c 'L^kVyı{n|?QV0gQU ;hXF&l7+iiތx +W~Ϝǚ^ V!=쉫GJHַ$?`X}f-(\Z>Cy}\1puu)峣e,K4 :PobWOW0z{ Ļi Zly?"nmڎVO?A}|]YE2( vu9AoOD[g#k7'IeK9Ժ*!F;uqʤla6-zLlhqd6 zLс;gDpSF4l[DGGQJ4M2tzM2,.-|JRnwиteڏi l+1'Cr˼%Pv#9W;\Н}7WjwNxa ~5:3lgϏ&ykC)yQkl֓4=Uah杝 "=9:%:@~};h%sc^7p|D4A)1<󏌯]v5ͫ_/@31SY{2niv0gp8}F }5_^@Iڷc!n 1@N_|İl+&]ͧ9;>z(삖D Z0&vIUhr&,v ϪN$r1?ҭ¶=9KԿYS;˸\Kn,l\wKͧW]}!P5?Ԧ $$hҢNhO&1IC@k ؟'aoF\Xʲ51 ]>w*|5'G~MTj:;LcGٌo3-^ɟ˹B˭xkw~\FPGز#rK9[^t:7=džՀ|}T͇8s zew8F^IV|3kb"%o㸠;uo>&ͫi/5/9“w2?=㸵MR6Xgf?}MȦ4݀+gc4;u@25r|~hlg|2gllLmh4$hEAvHFWwR+pFɲ+I&WM$.ۦIHLHDo0T=O,)3"_w2^gVy#\~ -<ѥ+;L,] ư챶,hC3QܤI9=| \U# x,/L|b}?(\<_ ܊TZ(z.}>5[g~),?}%("ƩbB LӜ 8lKE&UVQTE`6(:ElaI3I5 te7y*% {XYc{d#[{!߸µ۱t)cDKKʔ';zkm)'~PiD^%.-z]ϋ {~,&OR KI]g ۼ.j4h,B`:q&dqg[/(+KJϧ g~^뭌hUǔ5]&-Kq/.JoߋAa)-|[7Q~C ,™3'7ɓ@PJ2D_ Q&DFb18R>"y@ Kxyӣgd@/B@ K2@ @ (+ѧ @ G$P@ @OD%@ D$P@ @OD%@ D$P@ @OD%@ D$P@ @OJEFc񷰘-E"OၣS@ X"g6uj}D@ @ Ķftt:UUL@ @ d(|>(G{{za7. bh_˾+ϳdV^Wq3l^{jۘ,ɹd ,'ڋOLZ2w"ҩ0E0F3fEp SWxLT<:R–+U)A#H,ٖhm0ˉ1/v}J2((}S K8thtQ} ?7þ|LUAQ ^Aa }ƃ#A9LED ^QSӏ;`JB$S()hI%*GY1('T\22_j%H#Ul3shpl,i[{ Sܞ֮eI֯~军s ]=1s`Zdgr RHJHAVLlz:z^,+l2>{(mZ6[ġ䌟YP}OB^kϋOX8 {;?n?1_E*TBw9\N"yixC5u/SNx3Of8|<kȏhS:v{u[AibTѩ2àZŀbѢɢբYŀd"H.hPU*~+{wGӶ Em !ĝ ؎~ڒzXN>,j*TD.m"dbcoܿekrRh9ήaPk yB>?V#.3n~}Yg C]δʼnT+dj'u|8J@|rmxHJMۭf;Myc蛤3k3ȇ/UCiدrθӛrn[?zÆDuiaYW(=PijaL?$^X4(ɬGkv@#zdN&.fNf]V(*?|~MݞSwb™59ժP-/Y1V0_ԇYݏn/sa|C`ڮ\a}i\$tV)Y9:ޏro"h2R"_;T9!Gr~l5ӧ ;3rnTnVA ~cCԨV!#yqmyGykM;P>޸U&]m pe,lD:^8i]Z1vh.)sKXωUA~Z K yChNʵhEH؂pVԕJ |lY(Q8ATm6oOflE{OӻymTtçq(ol6N9}Q UcںK9ۺtlڔ6TzpW 4+X+YW#m{tԬlXƅХ`9ͻm Hz xz [W]#fg;j1jMBɳxOx Y5N؝O;BS ~- zsgxZeˀ +X#3zzR#Vb%*gig%lqt"ekŀ9m>0 AoňqjN[34m'lס%.cx_T5/Nj_?վ]=_v.K^}Nvʿe@QL2(jѠ`v@1;Jg֣88z$neI٭-V"&oVߛdeã}\#z,=ƽ4(Lo93`+`zߣڧ"~lgn'Wz|xY&r:t%^bØx(bWBȾ|#&RuVwM̪DY,۰>M|#֝7m9r/3|ӛU3q8s`?2(.O?b⊫xu[̑M/`9;a2Qc2j7"?!g0}6e $Δ'};/?X#2|m;#aIuiڷi3 /1V@QC҆ucqELOlԛyn$CNp8~KY.UO!`1%dq3X.g%ˑD^UpnՎ3 |%& DxX_UNO!rYX2Q7]-|Fcat[X9kNLŃNNZN5 7b7ٝ-;%W/bV-JH3׏ Ǫd;*=ȿ52GzvcoB %[YR:t͈Wq֞/kg#"kbb9|$AɘځELN|A>kSHv NrU>6NM>ɖ+vN=J%LŢW0&rGP:0QLz0Lzf=ZI3"-|R=\9ˋLjW{~H[u[/X3>Vƌ)Qy:dvӏFcrnlK-#D Β\,#ŀX+dS16\ȶ[tX{x;N!i(S{ů`YQ2{ox"VƂ_[WzcH;2VaG6ֹÂ-;0eS6zc7Mi[ mF$ J JGlKH-\'ˇpPnHFk?GqܬqָٟH4n<]<%aw31[_!hD38k)әq.GX8C|=ٝ9gNEO=Jf DZFG&GŤb6`6Pdj Hd+PeZEMWcԼ;~nYPip%퐽oG,8&tَ˗WZ;7=0ݸ=18au h<șWܩ⩷- ԩ0//Μ:2r-V>f6t'C.Y[瀃VJX%EFzEgz^%ѷ52cRjT8[5ǽhY{yd]r`FUz{K~=K|s4z4o5þ~>6;gZ?]Qtݺ;t B v);k%< UpɄI'6hC~Λ*wsZ^Ypaˌ6! 9}Gױn?Zk[vp'6/>6=ԛ[X+ 1 g$'Xv2FUw` $@BޖvuOC\ gswRf?$&M>.yڿL"7`jkxEO.&`{ *f&0ƴpoyuqɣFǖx,7~9qvd_=[)Zʺ*y..w3k\spuŹ̟J8YZD@MGӵ;#Ї3# &^lǃ͹̧K&!ivI1? yPVDؘ.9w3sx$kէ~9^ۭÙe嶝D}"ؠA:kaէ僂]uVDeJߺg5f=l@6;` 3鐍MTrjwUMJ폂rqw˭,^L[p0!^x bw`|HؓahF4㷌+XvY!)3FvQW=1bTU:b^][ v#'< 7@&MYdL}ɫxc$O8vo< ByG2?0 ,:Jj_s`gS VҠ:f֞:m؁==Y֛q/aX3K*D=qhR ֣ ӕϬKˇӠq(+FVT9e|vT00fi=;^bp5O1Y&NED+%b}[-;۳);؜HuH*3jMrzgfAMc³:@ F_}ߑZ d֛x7mAM6gC-Mʹ'3Ǎő. ?L`]\9+_Z|c{F{ܲe@w IDAT̹xwy͖}]^^N.G83s۠6nAMc?戍YHZQcgNaa,GӢ Q{ح# ۶$YL{_?ՕO'l0کh(M+P&fYlc eF&YcIueu=#2asnJ$::*Unhaui9SwVteڏi l+1'Cr˼%Pv#9W;\Н}7WjwNxa ~5:3lgϏ&ykC)yQkl֓4=Uah杝 "=9:%:@~};h%sc^7p|D4A)1<󏌯]v5ͫ_/@31SY{2niv0gp8}F }5yxIڷc!n 1@N_|İl+&]ͧ9;>z(삖D Z0&vIUhr&,v ϪN$r1?ҭ¶=9KԿYS;x?Ɨ.YbٸOOл..C&0jv*QMhIH2ФE#[DLb6!T?%O|\ekcd|B:~0~8hb׏IJxxxQm4Ie;m6 }WcgZ(yupn׏Kh?ȠvV[vdSn~)G~ԣŸe_iMj7`zjh4F/Ҿ/>^/rov|3kb"Fߒ+^qAwg|M BW96^j_s'dZKzqkljU-JP5/u,e#جӞ̯ ]H٩zY{Cf;t>Ӑ=g3UUfd[fZnF!qFs4. [E0\;7RH]I2hr%Qv!6hHDbB"z ybI}? r]:[뿲ClO!{*ި5/PJj k˂F84#M_`9_5g_-&¥C5+*HEJio[#͐Cv9LTQ:^kRQeŬAhQ fl![&4T!+ypNWvRE:wH6򠼵+\K1;A)Ot (QZLys6R|:6KY ҢG1PjUbT/O{;\Wq+>NO"y*4 1_ gh2Kwv.i֞q鿀U Ovv3|J]&-Kq/.JoߋAa)-|[7Q~C l̙zI (%mAGs~?( [J Tpp"#c )Bu_< @ J%PUѳ\d׋ @ K%PDH @ @ #(@ @ '"@ |"(@ @ '"@ |"(@ @ '"@ ?{^E5woKBK--4]"P (gA(@A@z!BjH#w~{o q'ysΙg |"(@ @ '%!]9(VHz<*V٥H @ ANJ,qWWWFcȳZ߸AE"O @ rRb[V+CoEQ4d @ AvJ,RF=LO8ߋ =19~i,gSdVM77b9.%9Rr٭=y|Ĥ%sK." K8k3H [9-~mmⱱv\O b4=fEbVNΡIj6'fpH%_J*q?ȴXM!(yQjآA 25U-^`ӶJڏeBo\D G 홌~JKz5NMAO*Z@T#b 8cR4\22_je%mH#o3ghPl,iZ} SԞ%-_µ %Hʁ 1J)Nۘ)LJ!)!Y]{0 r @ΔwMƍpH#5j@dlvx#ߕ>U˜t-b?RF"e6H' \ȖWOِ.漜r*q?GZUG}`WiZ6a'H+ʁNKa36ЗjJ. ȇO+v(-UCK- TA1f\&UàЫ& gňb]1RjM1Z.d$%$RDK7j}x Je>AxmOQGBȾg=q/.od  օE\Jֆ][WRiLL͂ǷԘeL]l d%Ԛ]f|(<s)-Oc~^%9[|͹H|qV%4 /.X޲$-DYè !a(GQ<X:S2k<,/G5;T`Wj?:G z%3v'ҕ;J T&Z~/ɬadtU5"YNdوlbjj<^fҷUUc coKT7ǿzUaV?3{սjx^P| -Q+ܧ1˻QA_cH۽@O9{[f@cqQOӭ́7£|(_7kaй1pI<(y PWZA jMd{ q5z6' |ѻ6Oy jpygzd3Vُq(paVIT.0߶9.׮6V]O' ,϶mvǵx?EO.dzhM_bwJ>b[em^P +Xz!j:K=[ӯsMg^9ן.\|p<_>N zU`D* +`=UPTzqUV*6χ{un#3 o͋Z퇵\ٖu3shV2")ċWm&Pd8ɴX,?%;ԕ;JpJ飚@e&Q MѡZ`uB:Ƭ`5b8Y8F$vIB[zC̬#/|7=HˌF쉺B ^D@ $HK#`83i)N|ӖdO~?^BgJ4_lƬ?#xp.x+.bC9uG/]௙, s|GY}?xeG Ut? F;/?Y>ʗcѨGXb_J3ڷo83 2p#2|m{#aѥkӬOܯ9yyd9UN;Tׯo-:?F`#iװZzҮXz5;AB!aء$dq+(س'\VqmՎf3 x%&gn=sx}jF.;sώKWAE%I9L2-嗸=ǔ %φmƃAЎZF5a0DܞٓډEUqJAU<ܣ3}{un}ylo?es[_.RV$q :5ɧOH݌dS|#Op&f;H!e V/G9]V2W#F`*@YG>%dʕl=s+_ƎD)UX} l1!FTŀf5Ոj1Մd1[,ƬynᓪPC#DOObCCPy ^F Z!4q+8!Yr{* Tnޛir0y0yXǍ;c2O*'홇r}y:V3b\#Sko'朊ctߌ6#0wO' CFj-tqhJɽnRdG #:w׸w~GDBɅYͳbvz=3M;I9ŗ*.(M-|jFe511[QFTjj1&Z LHd2m%qtlލg?n(h44u)8e/rԔNw";v)T0ݹX"kWsHŵ_ZZA*F+u't@.F1-bFUg^n leKV68ᤗVIm.HT^˗bHMɘTZkw]-wA6%'MVdYC_v$\;w?Eҡ{3J-<{H;Nݧ/dl87n r+;{%*@*Wh  0g[>);k-[.Ga.|Æ= [{zl-b)}oav}3kv!9's[,=f-I2 W/atxH+miWǀ߄?*!hAݬ_$_ڄG{:$wK)|Ӻ%J91aL<YFLƍusthWذ[`2a$}HR5^އMGykIiN-F/ohh zMo$E4 MMea[kT:v$lY 5Kߟü?`E%~v\ r%2$ 4ق}`34}p,wӤ>R:ފM lO#&YG䨗ưH1~OWv0u;k&f:[?Hkw7bGdJD/}U1<|g]ʻ6Aq\Hs 䘿{Rq`hЄNs.sמ$p쟻/8ݼ}fo,\^Za>WgE|9'+4 d'X 'áW [w{N:ņlν>B,B*ұeIߺ:dY6![&d),df)g 95wMK?S%ˎ{A~Nx8r V#:`n3#^K6 G2LC闶&U3sqw`GC qŪtsBGvY*gU#Qb4:b^*v'la(8QiS| J ` N+<`s'j,7U%# ّea#YSm6lƣuK::]g?V,kIii΢5^[+gcxYzq{>O ֻ mYy{ +*ˆӰ@^aqf6'T=쉽-峣Ye4X'CHx5">2aT7Z.$Rvxѧm ȧXceG2n%ĮIɼ&ԫYBn&3tFIgZwh| [լZ6˺77kG+ޏH>+`qT>gt></^L"~`ڷ!NTW@!p{0ޚ}}fdKsRxy9ms48wv%*L?1HjCɁ\G)Cq4;u𛓤a%jݗߵ139cg,\X}^`|ݞ 44 ӯ|:2( :ΰuI50_X ]*~"r,[Vl&^c ҮO'K$tұe`ZȊl,0+NX&dوE6b6;q+Չ5jƈF͹y#VNgJf- G!Ծ+3;έ s,'hGrrđ B,6+~=۹@rV2 IDATpc _97CԪىYg;1wlC/M;e Y֩= l@Sm,f7dGӿ[^lc njCA+s'4 N#y9u`hH.fy h&vC:RqҮ8ԚAa ׏uvkPuKwt ="NC_~°l3&:g]1;>y(i.x[vAFR[)j'ۯ`M>͓feLYKX U0Їg]ӹH5n[|5ÆPj=ŷ_W=8Q܆LTR4'diƸ1$mB+`{JUs)| KW2~<7y sz6Y]e1: Ty}O:O!{ ޮ/PjjKk˼9fP1[)۞IYud充m+&wJ?V>Y[JEOKin"}^qkAKrrGYvJPٿ U6 0p"pr֌߭Kvi9LX(ҵhhjա)zTUj@Q XbDV X#if#fSVt3&zMJ Z}d#Z}!_GlI&pOUsGK=T AM=zV) ti(*m^\8[cT/Aa);Us/_F|nl,=E< d%Ԛ]fT$ h`;ja{6] 7es.c>_\~c=96=Ë/e?oIڋ[8QQ/3(yGe@rSƾy7_~fG}J]=AQ3~||żtߎ=_K2k5CUHV#z:لA6$ppp<@mwU/^}Ն!#L@u˞Y_;SzZ«Z=^ZM|0fu6؀~"R|~5S V _OrUG F×pjdž7Фn]7h[dt0"+0*ަEdv3@}GZQr C83C6%̹Sx(&^j2 0)Qz ꄌÿ9e>v o`+VY9x_4 Ct4)D~ mkQy9ן.\|p<_>N zU`D* +`=UPTzqUV˳a_J0";a?Rּ85~Xumi_{03猦i%#[ B{feO8_{doA @1}T3$ʢ):TNV'4٘@F''وN"Vh_{U'i{h66=QW0WБ ^f ϥ6Ok5stT5,~@5O1qE}?tQkW}?O{)c.s>`/3z) !fOs>>|G23uً_W([iig&=ʼnor ɏg88Ӌ_Z\X͘gΥO1qe]L{h<. 5ӓ%#Xx0(kƠh؟3X>H~'>9/Gxo,Uþ=]KiFVy^M}}}S_N6Ǿ:OȐK ۭxV/cʜ HqlvQZ`Fpw3l;v{$B-yo3,uqi5 /6,iJTEl$m6]KQU<KݢfV8?HtVH5!7;/=n{D#_:‘*̔W{f Q4@_ϾĤ;%;ȿ<{tcsB{!X Ԭ{&K\_ߺMfƀX %φmƃAЎZF5a0DܞٓډEUq?J~9Ogǥ+ M"?3Ʒ9~/?)V_+V_'nbN'8kӝ сMՐp飜.f+MNO#B08%dʕl=s+_ƎD)UX} l1!FTŀf5Ոj1Մd1[,ƬynᓪPC#DOObCCPy ^F Z!4q+8!Yr{* Tnޛir0y0yXǍ;c2O*'홇r}y:V3bDž;PG18|ǎaHd<*rmHM(ܼ)Q9 Аp3:Idduj1#qsnĀwWY'CjzD_'BFqxFt@{6uQr1zLԅx@$IW}Ο!~|_]Yh/,Q+ό6pz(;OR4 MTV?ZP8>iўV/OcmG–5lOP9 VTⷬagʕK*W"#I@-6C#ڷ7βqiۘ>M#EahP4b2JY0|Gz4Ӝe'I$ҟCҎɴŷh~^P^cxϤwmǃrOVu hɸgOrvOyC4>+$t 4ؚ{}酶9X v&J %}"됭Fdلlu"N-&5-L,;n8yʍ,ZL_p0!e̘x,1;p0>K$0_ >X|Tō[kK1 JґyGgUD:Yp4!oxm~n@%$DM5((71x8?_pkV_0ddGʷaZxdM|E/drvvX']?pdy;x1nbVYQ f!=쉭OJHާ>u\$?bX.}f-D/N&y}ęL;ۜP]Ѭ2 ,fwv$Ȇ-jւV-e蛵kSG`}W$y ƍEG8*o}u0N~s4,]CÇ'WŋW |Yv1#Ĉ[̖y}^^NΝqO=ڐ=?rr QkP* TW@!p{QϜߜ3~`.RVX/b`>nOlv aW>[UdMQ Cigغ$ϯb{~T,. ?L`]\9-+6_1Wi7.'K$tұe`ZȊl,0+NX&dوE6b6;q+Չ5jƈF͹y#VNgJf- G!Ծ+3;έ s,'hGrrđ B,6+~=۹@rpc _97CԪىYg;1wlC/M8BCVujШT='; 6Db薗0PoJfƜn †ȧ&m^~d|]=ҥo^*}P+d0GP}͓feLYKX U0Їg]ӹH5n[|5ÆPj=ŷ_W=8Q܆LTR4'diƸ1$mB+`{JUs)| KW2~y͸#diȀ1t81^ IDAT: Ty}Ob-ܶ9p0K{1F~8٘5#rwK[sX9=ѬYs.pbiV^jos%djK?73sb"E%<,uhZ+Vbr 0dڊ7p׍zX;U }dWhɗٷp(ս 췐oe^O;]:|z>LWXʒ@Gv;_"@WOR߳_l>e?MgiJou6t:lMEP 0{Z[ ˑ,dq'NFՙm$ĄD& ƒK8MLo"łr[2{>)txKV@}Q,}-ЛAhpnRo>n{&gqב|b=_d *_ dXg nE*-v=_/*mnyqĭo/r_Sgi+Aqpdn\W*Tـa9~Z3~B2.5ۥ2ct|HעUQUVE5`U ȊY1`QMŸ́ 7y*%h {y?<(kq|-+7c8}% ?UK.@^~S6R|*7IYd'ХŎb֫ yq(nݏSY4~ ;Wa|9 F6 SQz0}bQ'ג6.)k~5cxy8sLmaD}=hI\'n꒶Q z6/.Jko?Rb[·lAFxxxhU̙FI (%mAGD[ q?l+9rE8RU>"y@ KzzѽGod@h@ K2@ @ _O߾.@ @ @ A> @ @ @ @ A> @ @ @ @ A> @ @ @ @ A>)i@*E"OQ".E"O @ rRb Tb4Dj% .y@ @gZ1.3 (iE&S @ Sb Xo~7hgz^^ϵ\Kc<&2n _Ǿܸ.w(ɹd nkw'&-[rT\X_3G ixnC&oJU}JƧ0+KFrrMV9Q4;EҮ/jWRAźo F R7 _ϔj^xP~$2F @ݞh)׭D$W0 4 M5")& 3& YqAC% f __҆;R<3{ͶΒէpX9k/Ai~?ɾ[/\Z~pێt$!BxͤR5 ѵ' c { {8l<jO]T?|?+ |P/1_!ɡ͋OC%nH+)xz7+s9r٭qꋯ752mGY6;W!]&y9?y+݁(f m/ժסc 9\@XHW?(+PZZf &c̸LA5WMΊňbՈbBS\2KRPIJHnh@+EZ} v#n6}z_]lG}Av; ;V*# h?HEo>¯ru-o꥜o^Mg9W<¸_?VXd?'Ub,`p=Tl,=E< C9?Z?؎Z؟'aXb|NMJSW!ߝb%.oy|JۜDAPTT,)"4!4ٝH!$ x3O=v=ޙ 9~:}CPާ93sf$z]1NWioLz<J6wҔh@a;Ȫ>[7ajU*&GrUP9ލR.z7*֨Ѕs[IN4mu$\TA<_KPevVTj4_K›k.4ɯ}ܽ1{܂hv(G24}_:?5u܎b܁R sdPYAEEPF:XPecFf`5b8Y8F$vќ~vg黙s|+ĬFZej0fz1k-G.D9.,UQ!xާڪ4neVkw:~tUŴ^8g\fL{,[e8aw 0|t4'fFxm<: Wmqf:0oǾiW:g?o:ž,s><-7`ќ7j<ǸQv0h_ k30Yxdj7|?"|>1 $gRwo,Zٱ=Im@&^y*OUcᓖS6N~6:KF}il#[;=gV+^K4{%"]Al&<=[ç)yȎChDؠ4g+y;!QҠ[9ukSnnTP[m4jmB\ņk>JƳx-[7>n1* 7}>j9vCp\)D*Ep4@O/3W ||c̭f ^'q }S/xS[=6kY>g347~.w%ώmZAn~\KxkN c}ɈuQvH_fV-&kU'>jNnsykxBr}o&G;;r8YT`eW-v7r"g~ʬ&TZOM9Nel>u@ŎD)EYs l1!(Fjbk&$Ոb`1fTl)/6CgR)LhvPxo;dشq[δ#:ֆ-8' e+ѬEUN:@ hA3YFl /$kdS1kcDmxvdkCxVʦ#iPH.oa};»`Jšm3|kyG_rP];K[؀fMiּmڔ $[*{eˈa5rDna5ڈ bLh]8#C9j5RES-L5%0Ԡ9ߑ/ڴ{gk܈Y;#:1II `L3 `d!ogylq ::#U6n}1pԎͶr͝m N8U29aRdd/eg$UdL*EՀ\wxT~}܉ˏ=wKN8ȲZ'zocᯧI~Uس a-]78ua<0jQ6߸ uPv~%1Tʃ 0Ǒo#?eu[ܺeOq6-{ǻHdžlͨ}DNs;uܺ__;둬ڑda+lORq%fUw` e%@!UnNfS.SCOd,, &ϝ/C ,J$=CpJIk3 ~e+4ݿ NΡndq 9߳9T3lq+}rۑ\R<~ߍ. `rm^R9|Qt4:ʩSg~]'6d̛o WwW$\D7V:-rv`ٙACC&o9{:_\Gb!|_uݣ%b<—)|G*;!Θ-N.YAlj1bK7"3)لnʾ9#|,/o޵ظxW= h:_Ç9| [DҐa,˕ \cn;&t,n>>̜ H{y+NyX ;n^ۍ* wEnUVOT!oظSm{9Mv+Wųf/{./ͣ:KiecZT&>b:ώ?GȇرGQ8L H{}|'6q?Ǜ Js.llT~}eG1NO%$UUQUUIc; {JoS8yHܸ*J^7ŠBUlOY,zIJL *9fe2p4wuVRA?ބ ,O#&Y-@}+_Wjzew|uB 2v=j]8əSv.c(-~c?>3i ?.Kx kй/raQ~ャR<~ߌ8_ Ο*}romޛ279Q`?DԱ n9sS}|8զA;c<5u8EwC^~ûFFpU n(I(K=Ce lB9eb@6;a22>j=U] +p l7`ڂS-a=$rq%y Spz/'IS͜_e>&X+].#bW ?!|HkRxU0{4fUũPᵹQP :fvH+?E]dž`Ö7Gh1|Qٹn/׬ )֔n$ K90)[f<^C]u#͊Z~2t:hZv`7-dٲT(%`ŮZ +Ԣu߇ ڎ/,}%SKfv'Te6}NT {2p ^ѯJgx,|$cvQ|bM6o,Q;0j) kS&Z2$n^8 5doU%S3ЇZ}o pKsOa6Y=zK@~6|Ud 'w"$6⬙ ȺX_%lHn 1iY 5.oon1*4?z0ԡ];3߼U4 a˾Y1O͗ہt `P/||L>/(ZH0hRLy7D_~3&migQt?=ѾĎVr>ǎXK :|? mb]dت>Ƿ?JpCC9DfO"1DFuq iB}c I:QYW>}u¦E,^yK_핯r=Tɇ)jv_χKc~:)m^ G+yympǥ2]Ww=?-!ڑC{[ͼ\Dlgrc?:Q[ΛSz.QԯP2eP0~eO$W`j" *U-kU.wA)66f7pہ=X;NPG>-7u JT hYyeݎ5tŽ{S9qs\ה9PUU?Ωd 4m NGԆdҤ{x`v$͵LK"lq'NFՙj$$&AxbCekN(/Uq3^G󿇇0?w,;',ZLŲ̭SCyIkiˋC bX>ɾ8bPbBo=@ wQlRs}/_FBF:!"xkbcoXƵ G[,O/&bN^C nRm;cR'^|eq[Qr|=e~(~K  B۴q=kYhVN`4@OA A}D?(#JpvBBsl6k EQSEO@ RlT/o:v,8u{@ R@ @ xXxH.@ @ @ A@ @ @ @ A@ @ @ @ A@ @ @ @ A)$$f<^g28;<@ @ MP 7nh,yV7T٧H @ Anj`(`0`PUd @ AN-٬?rp izq-n/".M`٥I|s.Mw?bK#D`;Ƭ^<|obS%MƼy*y>Ҥm;>& SY+"yǗ|#5aOרÄ-܎źgAF U7/{fT 6_l,ʴ%llv)"G{qLFMMʸn%%AIA' 4P,f`sƤ8!\PQ|tr-I(nCʉI iISIƯ嚇+R0k&Oq廵#+{'(IH0=`}*r39Td*ctœș/K[?4TrRԮR~a ɚU^2>nKivTn5'‚ M^ӈTD\v}⅗Om;rĕ?| n/ . :HĒѴJ@`C>KCQ:-DL@ _*VN?2`TKW>e] S(;Pjj:(f*c̼LA1WLm&mF\lFmFJ[LGf@* ɉIVAq^ch|7JQ{]=@-}E?чвL};lXq\:c"t-PS)\x|IJT%h^g{~2OT've-hlbtLz6w@:XcD6zEJ&=BʾͷTM?"u&"{!át}n.Z\UM p)rץn /\nTQ /JM[ e U7W/k!7klݟU<)Uz%2?%/#l&!ۨ>%G'Ȼ C#uxy4N[/CݩǗ2[]*vBL^w`s v-$Ponn Mmw%| t\Ӧ 8RN̜Y9xW ĕZnnb._*Iɯ}ܽ>M< ~]Iv:-:##i;' HMj-K:u>1{܂hv}GXtBԥ]fŸ@fxdPYAEEPF:XPecve1F,Fd#z;Dahό ?3L9u>`WbMg2yWdw3#RkVUQ!xާڪ4neVkw:~tUŴ^8g\fL{,[e8aw udF |8_aχ,Ogq35~#'᧡ V.| uX`OjZ6Syҟ T 2q!=Z*W^¤H. b6pw>MwFvG$ 9[yw , Z}}̩#?)=G]8_3X>g2e:0|t4'fFxme;v(ĭ]6}6Fwbõ ^_^Yttq.Hh00sx?XRlص+A^Vpm҂3=zS?F^ͅ|xTԖnO͚s@ٌ7獟.p}|6iR:Ww }cV`݆t!v m6ά]Gr>4'Hxl/]yPy2\\:2b9f?1.\a/? v7mq}39T9l37,\D/dR_u@\ Ffz 18ggBiС**Rn5:ywqr"g~ʬ&TZOM9Nel>uJ JfQ',*ńQlTF&$Ոb`1fT4-D5&z'NW \KK&æueWjwoѱ6l9I(-]AWf-rЩv@ Q{'Z̻Fb¯,>YT暼Qޡٚ8UiHjOdsD-x'y5{̩mmϲqiߎ.!f[ _>uyi!Ñl%bCK||ls7w1fw㗖"E֯JM 5Y*4bl)Zkh1s< 'nэ赵%{؟o@B<3cۏ\D/`cή6[KY̒{),Z ڴ{gk܈Y;#:1ͳgVǺvӬp7k>|:=< ˬPb)AլlvlqFQ,lVV E6a8 ݄d܁).j2AaC5­ q$R)g&4$YCF8n֢StEL2X]uJX4MY;]T(_:+&+։Xi廟chձq;a{= S|T#3]-;NC/^2&JyPZbc8x|lz[q9Vƹe0x@xؐhDNs;~[/TY$j@Y.g?u5ưxa.@=q>XFn;둬ڑda+lORq%fUw``Ɗ$ݱܜ Xͦ\.F!YYXt(OMIUqrwǵ̙xlH_'~t7D8፜@cnoG>cCz`ŊXm`ml 1+L*o0]\(߁\N3m0p.{&Rl:s.Hўh. ` WwW$\D7V:-r)w`a7<7_$g.A)4 2yy_ˤ:  peVr)#|9—}tD삜D&#t#9#M{;g=OͲ]^]+wEpV%8|ÇeZK$ &2\e;fhkbNC̩/T 11׉ PFSόjQ<;3;4j' #D|ڝ77]==\xe6}6* K s2b⣘Lk FIOqIukC VDgJ!\^>q|:][5ծW5UEIf3SXQHظi:<˕E/)\!YU ` lVnfΓP.B;gQܛмid@`6S:QId$tK!n۬ˠџ?][mr5>caCq8q=ea"Ɩ{e}M/ՇmLnڂ7wsn37!4ut0>|z%<3G0sG~b>WCg|9Ju ϙcʜәO|2hsL9Wjzew|uB 2SЅ{- BljB*t\J%M![Ȳ E6!ۜ2g1 0[LLiU5*Yn +p l7`ڂS-a=$rq%y Spz/'IS͜_e>&X+].#bW ?!|HkRxU0{4fUũPᵹQP :v$1Ǎ}: ͼ5o!˖}̧B#(w+-"*"a! naE!n k? UnمM*cCޅL{6jI«s ɘh>E͛nmpg-da)3&Equ,>ހ'kh}I+?E]dž`&ٳ#-7,cʔV&YBhI+9| ]}IA4m'y6^ǻA#4n5noЂ&,OA\=5WĢ>#FToӋiwZ5!7g]wY{M{yvmtu2:>n,c Z~@=!Ɩ"eg8|cLo0'D3Qث%rͪr g֙SCTc~|>vi9U7  Sl+n _H{Rտ 3Oay:405SHx`y~A'y y͌.˔zJI' 1crޖv>;|J ɓ@e6m$ʆɬ>AbJ#<]_s5OЏKй"W7-b+BJ:(#ӣK;Hϸ>;|Bp lb,O#khp*r͓;TSqLڑ6@uiA'Um@ [[WRNucU1?(۬uI$&ߨ..!MoL!)YG@0* YRygϠ\ش+`8lz~%"e;}]5F-aSzz/_w'tF1Rۼ>?9Pv|Wĸvﻍ}]Y: /`Czbl)v-܀ }L!^4R#m=kWfeYuft./<bKbf+L24_oLYs;P3 |x|i8je@P%z̧P* Kq1E_= wn55tSf!ZsK 1)sο~SMhڴ: ѹ)IIk)nn5qs?ψ.e[܏| }ȟGT˧6]_sYBqr@PXTn5'‚ M^ӈȐΉ%iX0|c%bRRuZ<5)Ee#:ɧOOCqpV.H:K[?4T|}CZu n؝rGv cIm%頦bV12ˤzńffffՈ̈́yd "D- wFӼU܅_DoA@=+>}``;ƚӨ*PvĦki\0z@Mśo9c'oxt4s=]Aa3c"ѣ.,"Il'>ek<4gQk5T@i= W7uF|xY&y4"}[fߍDZ؉ !a(G[PUhЪ8Yvaz=}W\Ä%b* 5]͸dV12:E1"YNdوlbjjJ֏FҽI >ikoKl5$R*vcf; 5a|@*yw Y61ZG& =UŻb ^^I|c1|u"[J~="F|v%je_ڿrզR:wPGV>[7ajU*&GrUP9ލR.z7*֨Ѕ Y%{~-Bu*ț⫗p鵐5O**WF=˒ciGԟPv[mH͏]Cx摺[D<]VBi|᭍QKЭ.JQvw&c0J߹MS@2oLz<J61Y%ֽэz5jPvcLՁ-:5GU>O2{WRUnF}“M|,OYHNf븪tnȲd+ ɋ~ UDZ5Q<\M61_tk,`Ȩ:\t/3AУ/P h}pᇾ6Q:nw%qľvcŽYNˠʴ :lߢQvܯWaly&FD|/+u4GALؐGvz|ϼVտ0i:RKD~زMx{0OgS*vu.ACiV .dwBVAysϤ`JoC /fLYsӺ&RMlAO&HUl+k<¿u#.ۥ mfK>vv!_8 MZ_yf""GoxJȗ+CQ} o?]wm{ *X]aǬ BDlY}h|?OAKGF :?fۅ+leu"vC1 UDnYM ɞ[o?9oxq?b / >K%;t\ Ff7U7D>5t Cڅj-_&Dt{m֜XTSlO*b.]O)͢OXTd 9E1 VX(#XMH#zňb>>yVU.E#$`=?$ mpFC;ժ!C޵™:% 5J0^#;O&ö XdgqLT}iZ`kMR)OF<}MMGʮL[8cmsPZZTġS튁ApiNw\,#6ń_Y5|ҩ5yu16Cgw;5Ӄ!p<leӂ4($:%p<.};n%ʥVK5l=3M2KTQDp'vf̽?XDD_b^̜99<<ؾxaϘ~Ǫz5=>}f1A8;K>]ooOojbSi i^VgT4e6ooEvб=JER7Ϻ+*U-fD~7BQ[XBґhmbH9zf=-:ǽD{!U)t).2o\ t%c__KYݍɣunž1eXߜcogļ'hy%͆qʎ-Ck,^qPز}wh0o)_4?2Mwwf`_4h-_׹g~C\j:c anNhٜ;l6d3?"vR%6ƽ*yC)ɽ nL2e{R#^FƑoY2[x/8TsϜAek)vfJO F-F3F3Yba10 ( 59$Sn0E TaVQ9DŤ~Tc9*d]J$?N(z !!ۜvd\J_c898jTtZz*~ @@\WeLј]gk:gKJ/W*T@50?L_6<8#PA"+˚n W/cV-\x1Fؒhr sW6h ~HۀzvP?:WXo\1+ z!fE^,ؖQ4mߗ%tv ,\MQDu Vc4u:ҩɿ9•aiIl%?:ES {ڥ쫦a .#R}:mlяbB;gmn_o>> pyovY׷)CUƻ[ˉŌeN>>'3j*е>/n#iV̓*Fֵf残ܸv_I-ITWfΥ?"RexpuwEH#uidqKgc}]VƦ%`-qm,ftÿLD[k %rf W)|[,;!MN.Allc#s)рc(8\><:Q"^Ҹ`wmqZU9vcb53j\+ٰʯ?/UnNT$ܽxg≏ϻN`L-G+aav~K:$GI6n5w/Qiӹ-Nzr;tE%u ^[FsV'eB^_qyM_Jϯ܊A|r s;i^8m'J6,܏.X۴hπUΓPA…|ku~q^\u㧱j5׳;SEI=ʅ X(l_l 5Ǔ* wftP ne؜-#%ƲyvtlsОz z TFZa_I>7٨w +bm3Nvߡ<{eowi`:g86v8Yʑ[8}n";%iF?H{w6c/b{2\i2z!;;ObP (4>HWlG"R%Fv jϞb&4OgcJO:luq9xp^Bפ/\8$ M ժ.mVy+Pܭ{Yl#d&ـlqIlth26 g~V3Ul6(7rO'<5ȯ N]0BbS6J) {2 wW&[5rq7`{rľ\5+~?@خ8KU'YSq0~+c98zAb}vu3q7{3y ""eޣxNP D'7sXu$@[1 ]$̇gTt|:VWi. ;[Ph¨f *7`i}M^dJ#y |SM2Got=–w~Q5[v µ]yo+ %Ϭ'|ZOg"YG6 ]uA%] (׶>D^ik7|FmAδ'Uڵm9MQ7ѶD;W'+|XL[k&#wx.p;ߩ)>*wlr0MҠfpnwe կ[ʕAP~$pygǽ aǶd`<àQMRT&.Uپf)`͉(|f0"̬"6ReNֵ0/|. e[1, |a`6pcFW'ٕs@VXh_W9٬P9VL*&f٢$0'Lf$1vm=cBZ1YkF||jB}K2vF5툏Iܓȭ /iOJFĞ c VLF]ғ֌.};@rCw 񰟩WCԯ׍yghRZ@-֦82L;gS ^S/º{B}]-r+TsBg&q>dTKMWm5**:cHmXKyR,۶}ks-{VJ.dr1YFb[~CEYztx!)z8Yʎ} nBR{GNJ27SR4m"۠0ENx5 αG` } R'N˺E]ؼ|}By39˻)OѷTF#T4/j4iÙ6-9s^OHH+< -C Gsa+=-|Ғ#X,f EQ[WO@ RaT-/oz,/u{@ RaT>"@  K@ "(@ @ (%"@ R"(@ @ (%"@ R"(@ @ (%"@ R"(@ @ (%"]1X̖rjV ggr'@ E*M\]]"l6r&>u|E@ @ ¶ftt:UUM@ @ (|( }a0Gr1i})ky,)3vr+p K8u_JR>yQ}0?ÿ|LUAQWPŔz̉d}6eb,"ܢWnd̴++ LhTtJ%-٠dbUEUH:3 ₊ZL2oU) 9OB:~}T#Oϟ#!]MK!wN[ʙIzj& `buлeY# ݗ JH]/|߸Pl\h̒Tu];Wc$} 5TJ愮J8S~7NI5Ƅ/bIϫST`5Ǵ8_nXnӞv)\ UslYVMkP}AlӔ@ܑt OC:=TJ[* 怚QE.Sthzgwf=nY9ABzj4,[?ߎ[ަ ˣE?؉AZ֦C ~ϴ[#Ϣ֨EuK,"/-RWQ׳u*ARҿBg ^k' Ͷ>W_p$b4j\QX^Q R HO'==+lok:.+w_Ԫo ԝyr 34ǧ d:9~ u.cPϧ r+ڧrͯ E` e\UmEJUU\.ʿ1H;?<֣h =>:COiv0 fw]iNo0WsBF3"NyX/4Тch) z_6YDք)+8vpauq0N neg慱mX>+,?C e9mgnm } N6uaV8ʅ5,%^Խz|$pЀ1qX_h6rn<Zya Z&SEJK {Þ=ޱ=:E}됪۳ ܰjK:5ysxZV#-̛k׬Pdثw͊W^e)ٮ}}F@)(T~eRQ-N(f'TY_@z''Y "i0{td/IH>̛~ 2rdC=y5V|ڞ 6C]Kqls~e/cB,KO2mM:? Ü8=4.űif?3 ]_xkO 6 YՑ2?%~Ә>xR7>|گ,WB||2[ѹ]ɯ0#|DW)[ ?ˣfal+&~z|fjVdHZo1a.QX7&aёݼ3i_*hl8N?ԖǬpr^oz}˓i}Ȍ>7ÛPi͇B eMG'gz^Qꍵ<3x:+gQk;" FS!+(cZ,mLz;H˹o/'=|萷#T>v7Fi΀Gbɠ'I &03FD؊y;xh ~i?gJ?*3۳(F;:TEE*Q^r*r~G1aHkީ'3Y** LbQ'L*ɀアQ,:Tz$Y֤Gg)q T?J:*Oġ"ߤ`-ߥW{ୗpFk_+jG=?3Ѻ?]x;6d3 a3c|ٳ)0-cx?F#ٝ^08DzCۈsѵ+nM/ 䓜&\ASsv@p/Q~.tw)\,#ŀY FS1l}VdM?hSH=s ҙy.%>u5X`wA/YX[غ$=Ax iظ'o/aclsl_˰gL{cUHf=> E͝%>5L;HzҼέΨh>lIߊѡc{X nuWTZ#n2.-$˥#bŐr0zZtj{CNS^S] g/d޸JJoǾƿ(Gvn襍t7VNE.)D{8#=A+)o6|Sv|l,^cy/Ė;C%}!m3_ `0߂1-#߲2e0 _pNQB^׼)W͔IGmC?3L_co,b/Ubno亮g1?Qjӭ[>˿s3~ ot2ʲg> 7}0cm;j`S|6ȣԺnC§QfŬG1鰘 Mـ䄚c)7"oLb"][bM 1.%DC =АBBZm^d;2r.%rӯ1 ]j5a~= \? x QU+]ԪYƢ:[33mЇ{XYRһq^pŁuI)X{Ln2&hLqV5JxM%ܫSRJLTx&u^{ofeM+1.DȘQxlI49X͹Eci4Vu?YIIm@|;IUP+y[iOMTVʕl"/l(6ArNeYy j:;~I&^¨j Hm1:P_DJ0$~6)=RBz[US0^pq|S5fbUsp궱E? mX~mX,ڵg1_ʦ^ Vo)/L׫aO:Yu>7M%#fapǭDJTWfΥ?"Rex{/=G1>vtZ`ł`vLˆ4AشԵf残ܸv_Iu ]*/S YvB1ȑ](ـ٤ǒG6R5Ppֹ-|# yt磢E2q6 ڸ'mPC 8rǎŲkNg$;2 pz+VaO_67__ݜ H{y4kwZZV:L@NuH>&mj>} _; Ӧs[ vJd.C?,OޅEe;_9.v7S%pN2UUUQl=X8]iѺW$'`+ )x.I+8>Ocuj>Rgwz 3QHپn;,Qusm$%o̠~ =l߉ĕo6F~;P4c;~->Es7}K`14A]4tsoE$4yFs jϞb&4.qp٪?ElJN)i#m)=pDKO?=MC Sډ{cO臺-,ګwrfʱeݺg5f=l@6;a tF'&ClrvgU=S%kr*7*qIL׋6ˈWK{[~FF0o12T vx$<֗C?:i?d-ڰte}xw1\h5{ FQM9ӾK[Cl~Vmh׶6ED۪\֟ƮHN‹c1Ko; 87:_<q/^q10=jJ$Ͽco/7۲)RjTTo!Q=u ƐW0vgZYm3Zq]b$;=гĶ4MBSp*r3܄f}y!Gzե:Fԥ{ t$6o8|%53mT.O%wBSmZiKH;Z3HK!:)$wܝKQ߳rLl/n_/&Īx6NeTVj>9ˆ\;3s.S9-^ù2ɳQaW>'޵u߭cgi2j Z/Dr0rr*5>P4`/ 2 2$1}2z@ߖYk^yq/ b"VN> "0{)5Kaefv,b/U>J6YB:o_3Dfef[zqk씙qFKeT}}\lPy~ kI|cşh/vݭf]eՕk5Z*)ti ]:@אPUUV#j+w@ѐ657٣*9=vBL}2dwMI4;3Cc4-$` I۞Xr`bJxÜ8,ruL7hl%;vdqMrw*o5l='/c1+ mtd eDʟOW*ؘ!e<|r!8Ǿxnwo)}W,_n˔6(8xp0rf}Vޥ"W>-UTTTYE1kP-ZE٬â0[t=Eɢ'Ǩ'h(MNwOe12H;S55& ^ͼ{[J[b%wJ{_w`s{>AO:]wP.-wL-| 8ʕdni,DOw A%>}a42jJ/3cߣ%tjwO y3uʓ@;yX/gh9sws-So?G h*l _-4i OOO3m6[8s$:V"x* b[@hv)=V{[*l*$%GX@PǷ@ =Z^Y._V@ |D $@  @ =EP@ @PJD%@ DP@ @PJD%@ DP@ @PJD%@ DP@ @PJ*EFc))7-"OY."O @ RaT͛El&M|<@ @ (Jm3tt:, L@ @ (LPCQA=#`'bx_ȁϲ ".ɯ\^I~gJۘ,dV ,'ދLLNYr9I <ìIٖ ho0ω1\*}QSX`Sf2;V(/p꾔|a~|8 }g|u/())B[&:-uk$f^Yi`JGS2(h%*GY1(NTb2w|+FJe̩}ҙ;%_uWyz< )eG.fl^ asLULS3U[޵/˒=w_+;~iHGq8#g+l{s(!umBBI;WAEpy'22)=iR&5ØE,ESS)Vl5P*:UFwC[ 8[X[T5qPʁT2S( `ޢ^qv@6e]-TdAN ҂6Jh{z>,'yF-[byѶo?ڠ爺͵Si uܿ/Aebپs$]ǰWQ,@ƞ%|z?9Lr'44]}{Ù;WA"O;QNͷֳYJ5a2⛳\Lĥ3yV5\z%n67vάg\ yD)|AlN :+:@'D;Mg|p)y\(o\3P9je̽$^X4(ɬGkvB#zd.&nf.f]AG_( ?vAQٔ|6%D2gxk|j4;Td齃GEDOKgbJEjSAy~ r`B >4^x~/?B:~|㌷4 R/DS0aSG~,ݼ]Q3qMPmC6y.Z7j`܊$K\=DN!H[z}J gJ ^uv-A뺞Tр6˪y[/ zS^|l(q0'ը:Omˊ#ݧ׺!zb(ol6ug\ÌF&!(gFζHsŶ3s!Cðǵ^T. q |H6W ܰW7CigzMvw2Gqc)`9$]c^ Nס?ݩj|Nhv&O)kΛ Ӳ-na\Kp>?MS-ښ0f`MƜŒ¥q>e|w:5`Heg慱mX>+,?C e9mgnm }0,O$jbdxG;M ">uHUnʜ嘕 kClEvRY{m|$pЀ1q絜 Jc\lpLl#K+Ceޫ={sf+\F|R+P 'J~DTTŬ UP:ɤI#(Hafx?s?x4}脫oC''sMPׯRf5ǜ50`}LwiIIgG՝ 9a=}b3xFϥ86MguF 0~)bqۦ!:V_0ǣ|'sY@oFB8ߧa8?O8^s@f+:+yյ;7uٙ:}kcyl3tdOoYیW *^^L2۾^KBv<87&%*{xƤc Z"l8:w>K i5Uǜ3\KM/òsy2mOSC>8rG7fxj8PHܴ,(B_>JgOg,uv IDATmCy'Kn9vL,NDKvhe(ɞyHUh6h<%֣Ϥ>8]aݾ1cƄa(V2zh;f xm%nlxf0wHʩ]Zy_V}wmq `~$8 s6(mr[ *="Zuvk飜3:88R1o6z] s{8}`a~'8S&|A)5Q2G>6CS1O3xOw</NB'3Y** LbQ'L*ɀアQ,:Tz$Y֤Gg)q T?J:*Oġ"ߤ`-ߥW{ୗpFk_+jG=?3Ѻ?]x;6d3 a3c|ٳ):=e 3U2Pw$KUzXth1~4qŭI_%`|ӄҹ+hjСS}N=s% υNt.ed<}Ht*Fc#^}o݊lA4Gv|t gNsY\:3b#ÇбK.% ~[~=!m#lm΃wiwɬg[g3:仈6ڧӛiظiZoB׹͇zb0[ѡ]=:tl6sRQ߳JA{M&PօPĿbt$Cr3BCRYONq/ўyH:y kJ d]I|6}0CCqƿ(Gv| ,Ky㌘ 4Es@^ eow8eǖr5/8 (Il|C;4Xrѷh-_׹g~C\j:6VԔJ-G+iT35y!,J.^EP|{VB^׼^7S&t`OebR4{8-+Sޚ` O>j`S|6ȣԺnC§QfŬG1鰘 Mـ䄚c)7"oLb"][bM 1.%DfQ=АBBZm^d;2r.%rӯ1 Ĕ8jTtZz*~ @@\WeLј]gk:gKJ/W*T@50?L_6<8#PA"+˚n W/cV-\x1Fؒhr sW6h ~HۀzvP?:W3Yo\1+ z!fE^,ؖQ4mߗ%tv ,\MQDu V5u:ҩɿ9•aiIl%?:ES {ڥVk]q /gJg7ZHO,'`uWΡ(&qcy޶c;&kמ|}+z1Zek~Db+cF'Y5X[9Rʏ3~Q*??Ι3HqCubޘYMKdԌ42 G1>vt.+cӒnVNzE3_݇O-2 W)|[,;!MN.Allc#s)рc(8\><:Q"^Ҹ`wmqZU9vcb53j\+ٰʯ?/UnNT$ܽxg≏ϻN`L-G+aav~K:$GI6n5w/Qiӹ-Nzr;tE%u ^[FsV'eB^_qyM_Jϯ܊A|r s;i^8m'J6,܏.X۴hπUΓPA…|ku~q^\u㧱j5׳;SEI=ʅ X(l_l 5Ǔ* wftP ne؜-#%ƲyvtlsОz z TFZo_{cO臺-4q9`9[Ȟ +bm3Nv$c͎up"lp~#۷p:;D-'4{ri(*eΞSI[8FN95s-hnAM=w3yc:ٓ\lЄ:lS|LiW2).V}Z)5iAK96IBSBcuT(S=A6e l@8ϤC6:a4rfs?j*Y_W䉧Xnb.cYH)i{= Yû+N~{Lt?Hb_c? |lW*xғp,FUũ8F1TK=q >:͸뽙t2Pqk + FӴP^ݝv4}aTW0p& O2G%<>z&| `#r7[a;?(-;FjڮqgV>-[⧳`#]v.`ܺܠ.k[XmftqwQT]ͶTHh $B%I҃AD^y (*"REA$iRC ҳ;3 Hx{yOv9w9{ϝ!mxD /k2ȑMqqu<5YFxcsm4s.=~uF2^Y|2jnȀ[HӀ-`>ϊQ}h[ƠD+x=)^z}9%gK ln;>}>|0Q*^(h0v4|uLY=hS|XrR>VL*&f٢$0Lf$1v!Ҙ7҈Zjh4OfSö2(M|JzԺՀ\3{|¶=M!a{{2$^2u^3|]Z:@rAw#zyS^û\':2^?[fi˜im$ι qdZgcMv0D94>xBX(?_PH߻"iQ'KU1eF3;AFLN;_>~Oc<>~▿D77C.v\iavgjYe9TjRmBNdr!ݺӡ¶cDŽD&ǟ/'ď3&^"+W63-gd`zd7PZұe4>Β7_*]?2`,6taMڌ0}iG)=D>r1f)v{|6⍤(.F!a(YOo VJ*Qp~w'tSLzٸooI whwmY  Pcz)Ǘo)RC?|^ :c}Y#ٻ` 5 ogn[LVJo>8c[MQĿf=?bďU2e8H,ò h +g`SŻ&6uEhj1zٗDnBXYY>&;)?.k6 |h|5}7\UylLDDs4 iSqQ*՝l dW Cv%Jɕ4مL#E"Iii ĒGS cLX=Y0gxt5Z0L }0uΟމ39jh1g quA!wO{a*RyGyrz^%=;5ORmny#Kak\Ro)y-wE`a+=S%*<8_sg3n+Pjw-UTTYE1kP-ZE٬â0[t=Eɢ'Ǩ'hٌNWzNbj@ Ye| Hg]\WZ@.$ Q4͗&k,J~93)^Hͤw0Y2Y.gV#OLNYr)I x7=K 'XV6-'fa04.黿`tԔՌJ=yk%'A)(g~QrLUAQ0]7S cÙvMAImZ tHFL=VIEdQ2ђ J6(&PUTEd18bP-NAfK<+"3'wEZh+"\%K:[57g-xnL -t#3&G/IHH=p}*gr3=LdĦ;waArq QѱS>Y*7!ԣqilT`M (#L DOH`_רM˧p . y?a9άfV/@"`Cb9Y.孾x]n|w<:?䢔+-m &&A xi6EYZm (ߎ@=TdC=]Q\@*j9Ut>0(*:EV1pqqhb1*=2R)PHOM&zûEs|J۔@viܑE"/GiD_+?4`9ogPT/-RW"1ײy,uAR(I˙8*F.=;o"-dAEY@PV(W;' v%Z%ΨsoH#G-}l*23\Hau^9/ǒI>!??\ε)"?[;a /3X +W[a9 ^g8;+蟯ِh[g?<ӓy l8s}_݄=]mQ{n樹1*zUFcѠ(z$l@'q 8tu8u;B@)hw5Ot~ wnSB47&F5jug6+ 9g~bB jxo{nM+gaLNL^ ijz_ZK :[S~=<^xn-=JM/_;ȏq;rjG0CV{=aSǭr}q.[Q&'o pi44m@@.TlȰ%IżIr-Cnu$m/૕p꽄5@cw*TEa<=aSYR{*絿w)%Gw سÇ8kS 2ce; &vo@.T׃r3=h㞔[~xv = /jG?ON@kJ[ڨ`c*ÞcE}7rUn~̓|qOY{Ⱦ̎5i\4,xIWW2;tjgG}{F:pq+ ? qe92&@"& Kwޚ=z$`Fzr5s jQ.v%SArMNJrRϟ mң*cObW }j1dtW.ScK:Dn$O*F ln=׭Ҷh,1|zz{sdpR˾=pJD@ L*Ebփ*oP:A#w(Hn- x_AF_L5M?`O7NWJXۓaƲǖ) 0.6[paZoƯH';ƕN'9ak2xN]?02S_vfwOrhv$w% YՑ7Q?&0}6e OF=? 5,U.|l7{3ѪY0nʓolw3Ut©OsTmҏ!{d/oÌGr^L[^MBf<#ŒӉĪ||G"r0Zw>⋷oBbQF>Ԗ͔^c8a1/珷fON^[QriBmqIh'uly¿M3N捞֑`ȁ0ecfgϞD䋇8tYYK gRBzZ:?z+zk=yy %ԉQ3yx?'lpW*KfaopkLSDl-SlXMqJªYr I֗2GS9f20dH$Ro#2cB |_Mxx| >~NL`bv9}ψrhGH2\q0JqO矚uQ|$q-+WtV1tf2SbbQ'L*ɀㄢQ,:Tz$Y֤Gg)4OFʥq<rL廴z{<5#imڑ!YiQL}Ut:4F[arhk0x!ܰ:Ɲ߰2O,ZfǭMRz<ށn<=: 66^θB;D,XOppZ8 [ӏ쌁ap?9ВEp5 X~_bE UNhë;Zm<&b?OBS\RVůd>`I{ߦLNWDu ŐvvGe3]߱͛ӼE-;Y n\*{e+n4ք-$}_!K3i2B홇T6Ю@O}+|2'F˙hPIiг ~dLzhń޹.1s(F}3>rmm'YUĦW'T6}K|z/$ IDATYu*Lcl4le҈e'4V=Bz4ÜHhHƿ3gO[FCJvf׊8ɵ.L2e{劃=jmOk܈;!.5g0q[3&"* U'[ufr§QfŬG1鰘 Mـ䀚c)7"o*L\46;Gr՘C YI ]( Bxh(a َK31JU*av= \;:< h[+]TZƂ:;m3ՙn;YRiݩe^]plI">j_ZmƝ@W/Q6eV^rL%Hܨ(j2aRq9MxOu]5,k-\NYp~+ 4ٜZd>:=haX3DO-oI@̀\NLKg~jDzlI_.H`^Lp;-`=[X;1]d3lw2p%"FUgPP$ݵjA:'&& Fҹ;d.<MiB}^ 7>o0}{DYe-bvs^> A#ޟ-lbdgzN}l,1g0_̆o)w3y_kٯiFR'N/7er!!RE/ۀ+΍1gb[* q`=]ųY S=vedɁ V%0Xr@b4nu.,|=eᥘ=&{;ɳ:g9W+Psr9‘#>J8]e+հʯ?7NNT$\=m<ȇٽWI8 |{8wr3=\r~[6*)?K}JcNK o񿓩dI7‰?kI 8רAs$^ |  q:;ʒ=q[5j=RcGef1u5WVRO lBBhռ8æ?OA`7x Ρ6EC]1Ǡ@5a4EKIbSQwN/㕝LhɛI R* d{&BⲷYSSkow{ղcg89?YMnׇV }KyEZ#n,)&;7%ɬbk$W!tzxmxF{|1u ϜBz/g{ǔvu8So{ܶޥ[!.'XwN< 5S6IBSjUWmV~)+P=A6el@8ϤC6:`4rfs?j*YWXngj 0@sbSN6O!dZE3g/9Ej¦oX`{r\1+wmp*QMO3U`Isc99|Ab}vu3qy2zVO.z8AP.aOr]ZEVF>u$a!s+擄|0ew{d0hu@UPvqG5XPo Ӟb$@z:$j `#z'YOgdn3!Cpu,>Ո'gbcaa,X$k`mKU6#73&1QcoZ@tD_d# gx6jB4Dz!F-i\L{j$e1&{ ƇgV… Gw x{w3=ҁ*AuPb~$py&Ԕhޜuo5eKTryVAΆcKg%ҪcVRE-ߍeԼ\9+RZ#m=yc0aSf`ljgYȚ+4)BBY`>ϊQ}h[6k4~U|6  6;_D+vufۖd`xBX(?_PH߻"iQ'KU1eF3;AFLN;_>~Oc<>~▿D77C.v\iavgjYe9TjRmBNdr!ݺӡ¶cDŽD&ǟ/'ď3&^"+W63-gd`zd7PZұe4>Β7_*]?2`,6taMڌ0}iG)=D>r1f)vB[NY1.hԨ1=;0y"dvvΘz}I0vؖgnooI whwmY  Pcz)Ǘo)h_M/>x#) G)0F0m㥆~@t.&7#أEp7 ] ۱`j_3e1E *k Fx~MXTTJ5soʔo8#uzw&-\qliSٻ` 5 ognϦNmh2M-F/MC]>+g#UA-|6ߡy y WUu^~%b6FCh\d丹atu'۹Y72Ȑ]I7fr%Mv!ȨuhHDZjzz!w=Ø:%iah:LF^,]"u d'mSCL],Y89wLέZ0}\$~PH/deT^Q$~޻WmnN -T~ۇ[~1,2ѷ˖"bĩb L\9r_w(q*NjtM*5-laQt-:d٢dѓcԓm4nD=S9Gv+78x)1ĜJ6e]5A9G՗i[j惓}?WٴYse;//x% "=,zTZ<E%Os}/_NFJ z!"xz@˪ԏpv8ݾʐfT7&̣݃,Uzpɓ֖u-O=c mKT[LlDz!fӧO m$' 2~}na#l%ǣWf+Pa:t\HQ}D$@ *e@USnr1^/^'@ .e`~ @ G`~@ @ (J @ @ J @ @ J @ @ J @ HHh!%TiZ+UѩT @ AA,Jqgggz}3ܸͤA /R'@ )>ٌNWzNbj@ Ye| Hg]\WZ@.$ Q4͗&k,J~93)^Hͤw0Y2Y.gV#OLNYr)I x7=K 'XV6-'fa04.黿`tԔՌJ=yk%'A)(g~QrLUAQU}N3P96LWd̴#+ LhTtJ%-٠dbUEUH:#ℊzdvԈSʺ"A 0sr_"Q}u\ssF؂fIW.i=r1or}dSgr&73IODVLlz s$'{ yY.孾x]n[c; 8ap@ Pr{qotOUE2r!U*x"bJ z@ZRFmZ>EƓl`~O+ĭ89Z_o8 xlfƎMS3^W3<+t.Էٶ{'MPM">lmz_U5 怚QESthzG'Wf=.#| 4JiX x8[4ǧM dY$ BKziA[O%Cn}J5*[>m"~}A/s-RG $%,w^;X2ɇ>#ds˹jJ*)SHOO'=&މ^gz2O; go>hJ ("}ɂgI>~ 3X .L9Ju Kx!w!Ud7gx72N5#&FVؽn9$tx%5)dbȎO5n>]/F|͆D:ջҞ.6{(=PPsØ{HF*hP=YF68L:\:̺}{yz4 »'u:Ɔ;])!iP53}Z3?1S5< 7= 30V'&/|^MjY=/%Ab؆\y-G |`</^89X!BS=ܞȰV8Rp5wT-Ӵ =pҺP=!Ö$ 'ǮD EsTV©n>{}ܩPMzdzRMfK \2%[om8݁`JT'R~Y6Mnx7ˌQ+ؽ5*P^&O37D{R^l5x(59Xػ?Kl|; [)}oj%.ߎ{eȥۿW1O6Ž?f!w2;Dq$]]^ ӡ9l9b|ޭfVF{ipz'r\kn&?2nZUcH=FZe<)Wx^;J="= oYqmYaRl_X}Rܾ. ? ql92&]*[Ąax Gr m'Wb)d9z7b\y5eN~ڕvsNɹ6{4";)Ibس]D jQm [o7'tH#τVmi[gQۀ=v}XQLzNvuٷ٣G@)([AIEhPz0;PeJg֣88z$NeI٭W !oU?+7齆IBi[k{21X2[^^9^ņ2s.Zdڸ$'ctXϩ+bF^f ٣`ά.3|I͎#/7n ~& -iYW#ȀE1%oY@[T:8ߡv˃.h f)>%pj]*OC  ?q̯mn^$4uhOTP img_>oxĽ]-?cs2e\c4zjtnYBݓimIҴ6zc1Ѽ?[Bu1@ƥR\6Fo4ٚpĿq!7CcI9|cf= [FZ=*fU@H1sXCtc_󙳧-vn0&>ߤWFRU0q[3&"*.1s(F}3*lm'uUĦW'h,ѷ=ԀS9ec]PBZaZS&6V ՔLy_ƪgCT}={6{:4hM׸w&C\j:%Yͳ>=&U'[ufr§QfŬG1鰘 Mـ䀚c)7"o*L\46;Gr՘C YI ]( Bxh(a َK31JU*av= \;:< h[+]TZ)Â:;3ՙn;YRiݩe^]plI">j_ZmƝ@W/Q6eV^rL%Hܨ(j2aRq9MxOu]5,k-\NYp~+ 4ٜ;6YOlJJ"ͧ$Uf@e.'&3Y?5cY/gw$^/D_Q-۝ʮyot;Xx3( IwhZв󉿉=媑tnN?Y?K4AS{ڥ쫦d3 >xjbWsԧt '&]PC͑9xGbVHvd+t"TÞn+&L.T;9Pp-9V'>>8!Պ3}[z=ga?@χ_"f^&`0'HWTү^#;>xNnf?RvǛK[QPvqF%7xq?[I|r,ӛi^8w2UUUQl>X8'~[c-iѺ5tۋ^$Oûz!NZwWY'skvx~ZGuTQR4fRcW*J WIWAM;X]Wg)l@u9fh+=&FÆ}'X8l$w_|LBjHאOqV&$%q饮^jڟ_pp&NC+ǂ) o)K4u?+hKP=txjգrosXޛ+FxuB=^mӅڤȾ)pXm1?KC\N^9Exa߇CWmV~)+P=A6el@8ϤC6:`4rfs?j*YWXngj 0@sbSN6O!dZE3g/9Ej¦oX^$;z/W >!jh xTӓp FUš0bXn(@Ej}oc]fu+eSḋNP {ؓ\VO]j;IȠni;)($.L}^. :ZP]Q2T[´g5Ix7k}:Ǣg찎4Z@XIv#l}'[GP-\>w5ɨ@XpFX: Z=2ؾ~R ,mm@u{LT؛.z<]u5HD8ٸ:Ьi#<ͱlQK9ӞZ?:#{?z ,>^yk5gŨ|>kf-_ţ{f5y{]zD _ g-@DT5%7g]a;[MY{y0AΆϷK%ҪcV'"2Dwc5o7Wd@Nf-i@w5F5@?*>]Y/i760eF VȦfqN"!6iN`WGim9A s?|'6PDh_W)٬P>VL*&f٢$0Lf$1v!Ҙ7҈Zjh4OfSö2(M|JzԺՀ\3{|¶=M!a{{2$^2u^3|]Z:@rAw#zyS^û\':2^?[fi˜im$ι qdZgcMv0D94>xBX(?_PH߻"iKU1eF3;AFLN;_>~Oc<>~▿D77C.v\iavgjYe9TjRmBNdr!ݺӡ¶cDŽD&ǟ/'ď3&^"+W63-gd`zd7PZұe{4>Β7_*]?2`,6taMڌ0}iG)=D>r1f)v{h,'фULJTc8?gi1:V}ۇg.Tb/4鳲.|6M6;3}f7LΖ.mFW|5i!|m\N[A$vjL6 w]Gѷ|}?($~ޗ_i2LE*/(}?_v^%V|s>J}hi,퇭y[J^."l%ǡ?qXDe klmJC-p⮥"]*(f Eh0uXf٢G0Yd 7tnTΑ]$%h h 1'ҮM@YWMPQkgږ2dU6mܥjK=uuʞo.iagqfTZ< â̒R>X/'s#%NOP<= \zeUG|`d8Q;n_neH=SG h KAd䪵e]Syǵ*]߬?8M؅,n\:ѷG2KٺzBpww/vf O@HOA9Ae:.EGJ`G!VBC8t (xyI @ ^tWꑟ@ @ #@"x@ !%Qw0"x@ $*B %@ %?7 s >7ۻ({B 3!D@(@ACX :l+*PvXPJJ-uP@ PHB$Ɇﷷ{wIewqԉ-RGY%.|v*d$ऋ(|J&"""""y$QDaVc(d+-v~HW/ymcp`KK3jjNA )6W՚A /DIq)+ dhN2hdԜ:d|>  Ps҇fĥ<""""":Ó|[ܪ Bz7k^@xQ4DՕO.붧%t4h_^ MGoFsp]~l\%x1rxUO#4ȴɨ1X~V"Y( FWMv;'k'hyfc]]X| ˱?>=mUU_B B+q,NW"s֫8PUD]]\^7h?΋ba՝/߉wd-QApX:UVA6j4h.~Jzs+u"Y ̋Os[;Q+ppn}OeǪ_ـ|\ϮGʖ_gslDm}#O7"@3k?ۥrX'rNl7l\S;^,C]7J6  %.]1,VNbۓ63FGr5]̬18\scƢ1.Ñ>~mpX`\jUUx]%o)RfYL_yETHkҠ5Z3hjA&zQ)~V|HR|@!5CMLh4L]e%z0x\jİhlϞ'az{q=@ُ- ^l.=.r}=9`Guދ=8QvMDm*3!u e+qrb,ϼω {*_ݿFC8g%.Y7 6TJ={5G}}->bw,n Xur.@ޗ`ړ3Oy bޱqDZbfQ#S*îX0*mcKq"gK= 4fcr|vJ# M)8BլN-EO ­>B>xB +GR>!/B@'? 94O+[gOcxpQ ܀eﶾQeل=t8r>SF%@f8GɍyJwZOT(9 kv<[045;^6F_o\Y}mJ1?+z`0ضp43g`W}աPk'py"j܁⑅xa;!U{qe9~f\ /-87\L{x#;qޞz\ һ] '4 }q!Q Z5_q+.)F .x>\Rm\ Jv:XZ,!"m<@[3(ml$EƸB  \(_W^Gv{? oyz$G(ZcP7ff!.9&i:j꩛|̘T|L B[hQ'X73#~%kMgcHZ-n;_X=ޕ,EޅmGWQ郴Q0ݼ5{PEŶR|5y>fgzJ‡k@ũ} >s!Occh+̀?/l؈/If:"0:w>CPUQ% PQ?.ڃA˺ducxu'3\ۢmCd[,Z a Qe 1wu% Q֨h9b'@-Mƍ:>Ó1D랹 '""""cRa[ g'3Y2&cVMl,փ''""""%HBdQ{vZDI'ky5$gg=)""""!ƧͭHV!Jv_v |vqQ+ޒ$ RgNn{'(""""!k sA~DE :=\A*R_' P!ODDDDDH*@~-OX1D04剡(ɺYD”k`*%''5v4'""""i+Uݏ *y 9F0'c8`ՉODDDDD=A%L{2m(Y-LƐDDDDDDfvCh-;EQ#XQn3߶:D̏UGDDDDDE\"(}n'%NBDDDDDs9 QNST pL!{ ODDDDD=pc7$auQNÉU+2(Y@dLhÖ&"""""Ӗ);Fz.L%^OR>%6;&.y3%X$""""nq-x bDDDDDԳE#1. s +bMF]v50;p""""""""""""""""""""""""""""""""KݪpcIENDB`fsearch-0.2.3/data/screenshots/02-main_window_menubar.png000066400000000000000000001633211446344336300233710ustar00rootroot00000000000000PNG  IHDRPsBIT|dtEXtSoftwaregnome-screenshot> IDATxw|SMnޔ!Ad"l,= @ED=AD@@P ` nҒiiyGnr=Oι' """""""""""""""""""""""""R||"""""RZp0M"""""RP4*`FAB +9|lH <*`%/y:)''/RSirWAH[k| YQg56}H- a*{NUyWDDDDDJ>Mn฼,ӧ$68 Y,[DDDDDJ@܆H9O0H/Xo8勈HHp/`@ r{߫#5&oAS^@!"""""%G^'oρm@qz<@̀koZ(/!r r{9l)&_s&oZ{8L9{MHn )gxy/<9͹,9w< ^1|V? @){ަy+)+8 r|/gxyWlS-|W9ZT$""""r3(x Ɉ<_9kϚ(*1@X9 Q$3c`ʳ__j<&+ 㩽z9$2*b1 B"""""i\NwJr~a#F͂JoM'oy 6iҤ_Y95%4\.'yV 90 É"5%]߆ "{mc؝#|׊e/2z|a)+E5nܸ͊eKKOK KINh"޾c6nܸHt/͹sS@}<:Þ^%==bEDDDDDrNHhU6Nr@Y΢9*oMLR$""""""== 2{ICz9]|@:Y|ޞ;?tk淠""""""ބQ΍U),gB +X 8SoY (j-n_~W7澚9O"""""R.W[6+x溺goǔ%?T^36e(~t X[<9  |[S>+`C񓈈Z(r.&|Eg4J"""E½Ge;إ"3ȭ/~*LJD3qH~K<[wX&^>+~x*kܞ{Ѧٶ]οwQXJ| 2Um@:9!hra}*XTf:_yͿ-:ѺR"l` ӠFS,x; !)'Mf݆Mg[@@'oTnLy+gC95bv-YwȅQr{Zη9Q52}+masy(k]KA4ol`ہDlUsh7}_w:/ \8)/e}$ڪҪ EfÃx~_r~\VkDD3~Y_ԽeW.7mq/̣aO>7;vRN׽OW u-bȹ+G;9KXb-l;ƥ˸DռfANqoZ?Ƅ{,$#жQ\Y #hnf,hOo3Z :Ҭ:{z P%5R\aeqP;\ԯr٭~[yb업Fki s}c;vzjL?LW~䞧 H @)䥌#s"[1+9 S7ʬjmߍtڱe'btiVG.a37ٹc#{aټy[cٱͬ?হ ЧfHN,&-R1{_ƳzO{Z;e' Cp1yKܙDTZ^@<} Fڤ/@ Q*(sR=P 0l h111(jƾrW7IJk:.嚜i9bWdebra:7p^#Q `'=ݍihML;ziP^]YNd aQDD`:HDJ#s`Q.'II zfp:yΟJ(ȆުT$"r kDnvfBhuH6zp69ByB}T FOHZ!2k74dKz_ 6(W,!^ w̎,DD8;~$O{{iΝ<69y!ʗ+{X\}O9~""l@5'*ԫSmBV\N/׳7xhBގJ˅Ho)ٗmy\LY'<YpW(6""Yn'~!2}nF=Sk_dΝ}e^~f;>>_AU^BT$"R*D6m\D*pxfVeybD ^ȭBHذ_7$SFàL oS[YX^bӼ2`^+e+Hb4Mo5lk_t1v^" 4`?oU/K@k氕ZdH޶yky)ȹFl]Q$^EչDغ8v>ەjbl^=39<#w泙9lHYκ@J_l-""""{(@; p\:l^ij'"""""%Qc;vUAH WXݘ{JDDDDDZ?fiflUB=P""""""*Jpq9IH HIWH(MMDDDDDDTd5P{wm/E" _tYQ-JDDDDDP H@HH@HH@HHJDe&axO8␛y+:ͽ bR{n{i΢)FeZqR&""""*?͕{Sowf|R/-qMpӍ/+Ocٌ(ϲ:YQW1 \?מ0 7;⹢Pnw '̳H htkoᾛkzs ɧ]|o_gEO1Oxq}X~ثlj ~ +%yy[sSTWqGڦ}2erL 9nBhت)iֳ }ylXa7gcX3Z@Y5%|_Nzʇ+ }2qFN3s3m4L}x<+aK#( s',5}//Y~IRcD&-:Nz""""+2޻{cФ~[]1W,ᆍRptu%za+kp ?c\m3ZmԎhU5Kì^{4^N3~n›&n:%Iذ K49ino-i6etk< ߿﷑l+_9.Փ ܇\9ĬˆБ\T+ sK-[Q! Zc*ek,}n֕‰s!T9C@I"3㑟Oty/5tP7G[UsUDDDDIC<-5͹ipEϧ,O#$ViAM/""hݱ%,2U _7FL ԞߛRnu.&A֍)>h1.^7>f+cx1}MQ>G [}l'*9nLST4f\ ntP1N$\0YƙpTtHS<1/Wj}y+٢ =~cn) Lu=yAk6TfmL{ƞQMU.hɂ˩_MRGUDmBe Xಛi/LXsm׹(Xfeh ~'T+6vbCWD'bx5 aj8q:!U9Hp#lyzb1=vϯA!ܵibTH \e+_7Vk݌O4!iC3t`8{7'"y,EZD(38 (Cy6OͲ>HGa椠?w{MwI5-K{ȭJDDDDP:imwe_9.1aOъ}t{'aDGa?Lf.yh{5TQ)[ StX;Щ^+"-ivoB- 5lmآ`Bs}|׻WCz'y[9 s 4kM _{iD+' ׾Hk,O zw{ng6aȣRֱqADnK P1,B[shsW #Px[Tx-n_mPEDDDAQwk;7Nx>;3#=#e|ɫ P""""""*p<ٻ.jDDDDDDJDDDDD$@ DDDDDDJDDDDD$@ DDDDDDTd8p%"""""R(,VZQ-JDDDDDP H@Țy|YkٸA fQDDDD$=E F4ƨ4&(e P,s0o]Z1`BDDDDV:?W.sAYЉ4q &3A)GP;\[i¥qpU*(""""D -59%@{Z  I*qRj֚t5.Q)FL!pnjwQb S JN$6paEc"""""Of? z{O j'""""TUR4q*(jAODDDDE /Re.0n—E5P"""""/1ֆc{ `S9@Zہ4K~}T1I#;0_G0KLsbۉ-[NO=9}·muWl7Хc'u^rMy?msk@;]oZ;|Y=˧b{Tbb*;]Ŋ3OCvV}V[>r}^Χ[AbVWLz1=?%#64ʻ+c:$6jw>K-;ݒ2 8o?߱t̥:K;>m_F}y|n\Y#rTd:\Q7}GVgҽާdώ${W}"m6Kɱn IDAT8XI~^|ه\NhDA^2v+LbTYՈ; \&"""1G5}U}o~jTΘBp޽宫 kIݻWz"•H޵wmWw4M>[xAVl ٣v;Ə/C8N<s/`ۉJʁeߪҫkf[L[W/O<ǷI{GҚ/(.¨޲%!.\t|VӘ={ ύlM2Tlc此17<6-乾3 h*i[H5G|ŕ9.kCfd8󼼤W5 0|ӓVr}u."""x ֩]}yvEڵs{JN6kN {2ɤ4ÉmbåpĢGz4| ՞!Bѣ|֪BiД櫝N w=@R%_>n8B(>}?rxÞ⑬)e>f{>NINz5+K&`ޫsg6mLBB1114>?˻j*<;~a45scv1E,~O?PaTlЙ7K5%'|t7sӗEgg`1 ,3eHXyLFhaoJ&0LjjLFcg:YΔ>cѦ#P-;`T+%}qh"CLjx #wVXnss$|C* yI<׮cMb`Xrkc^dv|4< V5 h* FHYl? i(|S h=41l8)O?7|~c@!cѰFO2si8ܾsw8kFYul nsGq'`l},ױ`&\Hղ%we_'B|ed/(&#5h?7W_S~bJ\rީqh%5_K&VF9KOd,}:3iJ!y\B:vf"izq*,~qw{IVi #`k^xqQ;xtxKʪZ$H:}8=/pϼu|6f=K׿<pwy5A\ʴje0:A,OY|}R>|c:SQ+&G6GRIt +F=湟n>/!TeܩX[\ModYB ft?&?{ƛ_ni/5}xvIu`H´L9z%[ 9CYJ`?,oilG]c<{[ZDp1w3 jdB;̚wuT*g;An708,>Fª/1jnXN9]qM0gA׶xgIMz{ ,7^RdcX@&}Z?$o;?ڄnٙL]'.vnwbm8g`gը:׶ntltOy{>#TmՖ,IkCE2s[dܻlmqSfNzRmF;3Hwyi*"E؉Dܰfm4K6F z\JTmفYRꄺiٚqiذ_VT؃OjR&NC="_F '!8 WUcqvRn&m6uU3 #: %%glgN\Xɒ-[sg.t"궦yeKq8H;2l7gT4 _2V@xkL]ЍC=FeGN6%ǩuf`:M+bv9qVBN=ɃxE:0›es kO5+y'2vy47/o܋G>?~\1 ^WuYOֲߪ4{۬I#yd#VLy9wsCe,t4;QulӒ}]n tqbPf]2Noţ~ʯ[ps1 rѠa̋Ō:f'^}jx]ϴ+z6L*璊 T=%ښt7>eiCkfkù][_<E6`f ΩUbk֗Q'+(W wjI֔)o_'c@\VY"J`MH~96y* q_M1rau=4CcYZ9+f 燐FBhw$o7.BsݼxwŌ_39g}^(Ng~857E2=&1jmL<$cؔOp}f^bed|4^>Nx\Q FzT.|;e'Np:enk]¯dO5!.ܡi^BʚN̼|/'}^s6Ҋ7`ԧn{%m mS9=#Y=R`||n}Ws/[D={V;bFXDؓIwplV2 IOs`b%42 3-%?$BNMϰařQj bivcw"Am5 `J/Ǻ88` %,̆pLKy[D [ED=%P2 J%>rij #}<ٮ\88]߼y'a`b b1LperDfMgz *bV=ˎ?K>IOlᐞrYB5SIs?Jh av9pd.} $< 3Z~(eWXK!a'HnWl[tSs -őmGz EzJ')Ny<ƋY11z@S^BGn3yq1넒u l{^y|^{ )ju@փ{j1.{jr.;`#-ɣ/݊W'"RXҼ=JgBS@i)tKiKa)fMDӱ.":/y{.i)tKiK))ԄOD uyx)ۣ4v)p8j NDDDDDDZxllVq~+VJJ A~CDHȁ}5<#xF,3 ە{fAJUPcG5"""""R8@K%22Fq ͌c'Nxl*HvF'Are9r`_K""""""b@ɞظqi3;w4g@7n<\.  %'1o3:]gY,,Ǜ^n0 'ĥDr{

IY+J1Jj3Nm`Pu\10}Mflz=k`Ĵ{q4Ǻ]\H[ǴefGevm~{[G+$A \N5ciMk -=xthZGX#wm*g=n{ytQhrr f9V0AT˱̣s_{G u.nK5x&GCyT2ɣsKnҋͪQq]"hLnE綹鋞 ѹu5wG/j&ujt*H!U߭UV?^ڭl;^՘Y|kf/`iowaY#]`l5qZ2bfz -fa6 Ooqs͍1P IDAT5lܣ+F>˼vlb_i ~73<`Q{/a \0''ݪxܝΉm ៴s)U'ێP~~r,#L쨆qT7[r,_Ya&mb,7jT~{s M b>3֨褭 {|Q0SqUrӵ! ċ<7ũ<-z Q=xqt*sf'OfǷTfrw|I!o/X4;t螯x,fW@dss`2vDeR3k>5"j|9]cm t=.5LlFH*gO\_N0GJn> s `KOH iY3xm%:̋# Qdef:30}._luΗ8˞=2ssS5YL՞]?'3a%vmm,ad/qag%R7x##m'IʾAFf`[z X3ۻv"Q›^@p[OcΗSfqɥ XˉX7;>Fi޼%<%ݴP5. `0-h؀( FԶd=M+mڜQ%Rrr_DDw 8oڷFw,:v dW5?wjx%3+, ` ={ޝp̽d$ Tb*hiѪR}ԏR-OUv%v-V$YGYYdy^C^ɝ͙393W1LCZѪa{7i)$gPژ^Zxxx3+J/$dniI1{\kܪ9r;x%Ɠ1x,dZ4 djG`ve jRŊ>q5"q{Wx%e3%@<<'o/cSO-g(9N -zX1ˇ}c{wn<~UP9Gq׷`iL=kBPBeLkRNApg( 3SD*))NTij\3}DT]ʼn3g8sNmMjwI Ryr^ SEGԕ$)ᗉ*qqDy$wt yvа45)} :AXgڅ]_^B߸umm >dšΖcXk<ќ!3{~GP6]'<dEL5ClE%4Ny"µOn{8 qFӹkty{ -GQSCۮo0{ ]f aIz&nPtmOGUƳ׼֥-MGlx2UP^o>ZFL jrm=/9r-8֯m>̭6m1 3YDߔht@-N[|o$I*g^}y3~@2\Y3 L|% MZ8kµ+R0DL?;8-3Uĵ_NMl@sl9Us-y}D)71}xw*`$/ȏףdBPZ"b׷L1?ˈx5Ɔ_2%-ǟisG=u?ƾ\Ubɚ\ .uJ}ߥgxmYŸN6D bVdK:vx^ƘN$may-nJҳ(!,Uh1+60^x[?%[^~2WlC[~s?Rz(ҕvY`A&uN?0sZ'w-^= eٞ[QoP\]߇l#JRds =kCm?*%9ݝeY95^ `, `8vt*ep7I;ipm5VJU1^>ifdpMHA&G/9|V$&la|O2h0FoSke;Pr}Qe[4 =eLUǗ.ߵ!O5W7u{L<:*R"g4{&p,K…$=o'=BJ^ zF\zZ z2lxNlEʙT^"E( _ҿ*ce[D%S˥/PȠ~ml_v޾)jܻtMIٛ:6:vR8FO$I$(l0>;?K U |QkU\j3v.mJ(Pʒ$I$Iƽ@(vmha>*H$I$IL*gMJJ2f$I$I$IR=&5W.Qۯ"I$I$IsLߵX15/T,I$I$I$Sf׍K$I$I$O>I$I$I (I$I$I$I$I$IRJ$I$I$d%I$I$IT@2$I$I$I*2Lw!t~s R($I$I$IRN"-*gZ w $I$I$I*ue>OS !$9qN$I$I$)2 Kbo J$I$IR PJOw=:t'ai/"Ll.k &l"> m]K˨L=)$u?ƗL X`[L8ޔ'&ø?S˴YAeKTH3@jLMr.3JR9 ӊX]I.&޿9%~{~*K""(hyFjʈ3xߴsryn,:i/$9Aȴ4qѓfCr_m}# A2W;AQ$e0nbgiT;|]lq bH(C3@TV[[;lm,DP7P?#I;`ܴ .%1$EftRQxShگ7Jv EbҲx?p _Gz(Tv#fw~k$I,w]ڑy^*#՟t mNFʁaݙ+w>:>(g*Rɓpcί~ξvT2U( `d:dTHH''9Ǻɜ +)C6oy+V5h7sн>UqĘg"ۘjlڈW'P5t;tk썳=:Nd{tFR2ʳ7vap /쪻vn 1륺^"<^Q0'?J o4j =W@笾4tr4>?ΘfJ)!ljux8V۸؍&.w}_=0y}"}){u>8D-L|w'W|uWSrV7{ys[ʵL|ٟNxWMߟ!J[Y:1VoE0OC<mqʴ}}uYϞ6;4ǧPg<?9Fqj9f?i0͜:H;򊁑I<`$ Ec=͹)X;/XaߧeTLZ<ܱw-Dd\5~`l*(yzn0}`W3EC {F@}?oK"uZ7$2GFRG/9g7P*zҳ[GER,PMKvh͉ l33f583~%@&;{p:wf(LPyl .==mdݶESYV|45ӌCwc- nɧA S@AIu0\Pٟ(,!tt z[:2y[X*kfҘ4ދ k0Ch|ĽM9ǓѪ1玑nr{ فm㽶tituҹ5|ݩ`" MLxL]Ϳ:L]Δ]|Pǰu c2\僷Cg/ÚAeGG;s=j@{s}M\wǏ02K߿ΐױi LTl=G 04ǿezO9qK2=ؗW4wZko_J_f𦋜 åU'cxcs@2([[7k?d6`vCw1$f: k:!jn(:SiJΌPNp(Q:^ Ht?2=>4O!Nr5vȡNcK`hO #sǾbc'f5OAcsO=ь0 6;X:cuљ9ǒϖ<u)<9KNн-e:'𫱸y@ $^@^7o0&=ιT ̇>͆ nKQhc}>e|E{ԑ/VOYi?3[n aoY>E%>7CqVunh<ֲ&d+_tq@[Ch$9;;Ϝ~f chTJh- \"~AU&ܹx2Md977<ľCMZiVg[39s:Yi'v./*k{l⏱mEuz2p}xkz}"}ILӫ ПY;IoySQ1ýߛ4?̗c*Oq7zp93彆TQq e+y断n2?bo`DCg5)u`ZʮXlHW8^*6mG+q聎az qA'{oo*wnٌ403J9\cir3=3z&9wc@gl?DS/ͧ9u ;M&z|U۽71=7glOg'>zs%~sFl=Nijq}؋AkaW')'1PkF GI,1L)Gi+ cypl󿓱ąIK0<7 Pւl"I˲Yh9RI<+䫵Ts'z r$`aֵk+!+ظy`M|NXs#4T4*_Sy;Jd DG"MpE%fmIPڨQ;[zN0V 7q6NHI&9kȖb4fG`/Wx{iѡAwI[ Ӆ9|֯ނ6ާ8x4 E s BX{mD|̔zd9i$?ik7m8hϱZ*w0]ǮIC&y{w2d:Nֵ5SrR~㵡7`X~wY 9Q/_#^wei7XY6g>y{3(T.1x,djl=crä8Va^_*TV Pm[:eg--=fk[5GZ};9XBoO9Zm;|a@eLkRNApg( 3SD*))z:_K~H 8q gΜϩ-^ Nx8 DZ*iYɨqpuTu*I@Je" j'7|\0QD8ɝ4 eCl>U;T}L=h̉iZÂtIH;MhX9 :A؜]!_ܾn?a r!oܺ6Uqg15>U?zB|v}24CQVݽ;ę[cmڸc,[Ffg ~bƐH*!8]AQ.񬠠95uiKLAGԩכ`$UBӵ͓i~a͑{h1DZ~}\Mh߅ٗ, oʏ|4q: gAOysI0P7oZf,yn`b }U6'ZH:c17VgvCk8^iB>F 6ށ4@kSj7mȝ?Wm' oo͛7ӗoגaL 2ջJ|4F3vhES|5 k# `w67;i@Z4{~x-սkۻw?r =ɪ}yx=3峽=ĵ_NM  w_T/M|% MZ8kµ+R_0|}/( &&NU=yN'm[0*۹g_xdRgvUڮ$(LST 7Ph- Z8yk"FLB{KԳ0N.ͳhk|=`'IHzH'%7§z%Q٭{1",z,V/T_U$늮׋Bhg/hS҆#Y2։bx#4C0O$b_B$]\/w+ܜ\{@EN_yD7 b|?,jGHo&~t֮7O63kх5bl:Ux5!&m#uNo{bUpUaؕY\i[_Rbe*\+RewTMQ,N#l3m'3]=DסD`MB _zFdn#8 ]e/(!}bE8;{FSEHD~.s_-&ԯ+ׯ'ڍ;Pڹ.zvn(>=,1%sai.k77wrG}6Xu׊;J* QQV* Q'/$G{[' ^^1U8WTpo?[/<= f g{'Q]w>k,c۶maN9r!n1g]SiZjzΈ=2bGFT͈e*e6IFؑ"Pǎ0ҊiCs!N$^t`N P42W\8&9iR %nª".ϑݜCYr;ALhG7Ov(%1vx'H.-}*]O4ERש_鼅O$k#ؾd5}='RԸwBCi1y#Pńس{{ц6< 6%Iʇٛ:.cvR8Ϧ|<!)oJP_?ꅧq+a0'c@e`cyGTXQ.$ΒS28~=8 ]OE_亿ER\k2~l."r-rR_޹~.?_!juyV˙ jڲ@$I%K$I@"o/ |"($LLL쵨4& E) J$I$I+TMOo.^8[@HR/R.$I$I$9W+N.h4DO$I$I$r@A(Ӳ.$I$I$IA!I$I$I$I$I$IRJ$I$I$d%I$I$IT@2$I$I$I* @I$I$I$PxyC]urr¢J%I$I$ISakkJ6VCl]bbn,(I$I$IJ]OBhBc"IN~\$I$I$IʦB[2$I$I$T=CS杨bsX 4S0k2Zj&c`f?eШL=)J{^&'X[xΤu?ƗL XxӫL-pJ~_{hcQ?.gJ^Hl?ܞJVcjjwAT4NVHO/0`65ii㊃'͆,xbuWc_crq9[VmǬz$VizxZD bT[Ū)#f ӧJJ_=mο=rq+Iz$Qu-?"!У#jT\ʙK%sL*a!ўgfc ,m]quqً=2+%A{{b/]&ʍl1z9M ?|is*c)0Rb:ves`eѡLω ZakdA@?OG$"kD_+i҇[n })N{zwE|S|t~al`ܴ .%1$Eft ځzPt t~S邴G6.{~%IÚ3W=W}t}jYccV4|+HHH !6oHSxJ!S 7#oq3]›~G9y J<0_ehOo_s;}52]P91ZL3sq1杩;pYؕV*&-ǣzن0T( j j'Kǜ_>}dBQE$umN**[Oru99V*Sieg0~M_|p"Bڧ!8zweھXRa-uB=|F2yx=n}qt΂p]5\k?5 zn^Fyfގ9 nwT}>k0Tu=wfP64I6iS ٙ[l⒞h9n$k=.[m14۵X% sdNsm(iFVsD,KCk*WI㌩ԟmV/%+ݨ}ypmDz<'S~a]Emߗ=mwD6ۏ 4^eИoޡ[comq"ۣ#zǥqx3#fTzT^vTPWVDȸim +_^mF>]p;J 6MͬUr Zcg sb6IVa~ğ{pؗ_Y{_2 tS |ɇc0;|š;JUӟJӗ׺:ޙrm Eʒߜ':wFzdtAC~ʔ8nov<2 .zKC803LxQ>xe\@65p`1LA'xd%/{]NwLJf|> ]?s[.( nK5|8lhx@t566 x/1^AOθ7Jb4U;~fmU9m!Guټg_ؽt(~]c -Zքljޚ>VNۉ6\Вr`)?k2-o**f{gCد|'}F3ń퇈/ 2>JO*by|3- A4tV˴MWb玻thD@S.gUrא**S;Na\ӣ,p%ʅ]O/qfvK@Oi*6GI,ee*>Q7ro'䋦ۂFksonx4}4 Y;g'HIŇsdtNT]^,@慌SuqvӹCemM1HN 5^C[Ch$9;;Ϝg\=|J.j06_EPUI3w.&m6?}&vؙFڼ1yVS'D]zZ,ֱI*n)${L ;q_q6z"g?C<QۗDvezRrrfkn qsRP۽71=7glOM/.Ŧ/._dQ|qjlXc3$*[V _C,\ Ys/ojsZs#4T4*N-R {o(\Q]q4©qS npz$BkF8Q̱0Ӑ#f xboʨ[zURcO56yo'݊䡛7g. -yg6]AX-H"ޥmTݣ#3}[O% ߿>LlҐIݣL|<ShY]bfDBƣRH ct]8-:4h]Ѷ߯mWsJ f3sti銖SRU&[ZR{jwrE{8hׄ c1Ǚ+,>׈ǥ]Y D͓>y{3BAgLao8}ўkSLKa׆"MT.7MdLi[r@ ڢw܁Rʘ.֤[P/x/)f TRRrmQUuZL3:իVt 'AHKɱH+WIR/UP; %I vvTᄇg,W06NC*9h_4*;`ygLeŜfN6hn^HGATNDf,q;g#WU8s3gN9a,kghgNWا\͚){{/w- ](4ai4jRv33LIt9BUC\}ݸ >]q \-r`nۦ 锗~Saqv0Ç8ts2x kbs2{W'] eCl>U;kfǧ._Lb0E3'C;?h ۣ;jE˳8T(cTL|Q%eSTO-\?|4vcQ~9N4GΗkS.xP躌Edo?Xϰ#@:zˣ#j6"_&+?!lGEh+xE3, WsIp e? >@WJ{Glǹp&Lϰ~s$@O(ia9 NeEq['3{Toߓ ~:F*};*ĭM~%tџFN!>d mtuc- oʏ|4q: g< PH숺(BC¸ёpj>[am,ܲ=gb }U6'ZH:cO e 8m#؀7 1WXǍ2ln(wҀhZu'}yl#oBΚp 9(rjBG94Z\t7q(6̓ҧ]jYAAsk^Җ#6p?:"W N|<3,--{ ^%=]d{?QhqX |5}ҁrگǹFH< kC9jE{䪿yB5F̭6m1 'Kj_x^cFLl/E~ny+ذ'f :^mc_PQ,Xʆ)L\z*낆/'|ެǜZ:)Pr66IO՗=C $ʕ?s<36iy=NX7$whWo`>|g%?kNlcѱzh޵];Z@K{9gt*cʅ7\͛kɌPRsqS-*@ 9PXUp<o.ZhZqxHzX0j %SrTL d\,V ~EN3@¬pze?7S46E}!.iH>:E7Sha}c'>T¬FFqϯ *V޷)P':fӹpk6uBtk >=3E!Db|׺E[◷}ŵ{HWuh?XA8x×M`0=9]/{{ х5bl:Ux5!&my $mO6CYwm)s<-O޹1psr5_zU#FhD2^/;M>1{H "=D"$"cbpq.*,DU'~86~j#=n#4Ny#;#eˑ4=`Qyؓ99OJ[k1nb`UEXX. =4_өpZIX9]ǯМ_!&oD?X]s}#eJ:P4r5tq6֏sqaGxi..=+)gkr3gĢWh-7o vOXR,zvn(> =j8--SϪV8 7:Ib4pWٷkF1jK1'\}3:Za,j"AlG~BDŬ"A&-8 (cӋ,()ۻԞvMOQkBJ!VŜkٛXČ̅pw!܅oAb1y+ٺkōD%(lUa(|gΡc}꡻/ mF( FR\Ǯ'ymo9v TgAH݌##VqȈ]f22bX$#Q劉_uHhcGB @iENҴ9B'o|/:UPN },Ӽtaɗ*mRNE݄UEts~gxhSNڲhVc"~(w+.fڤby?'0wb\c9'z!EGiO$kپd59ƽK׼##=5s_Xua^pe-D|vsBN6$d[t~]xpA#HٽhCVr&q IDAT ܎EO$=Et=m9|v~" oէ5R-?LwlݲSvۢع)n(L9ׅnGs|0ىy{ظ0X8$IsM2%Ϲe.lK?,!+N?_!ju9V˙ jJ~G$IPRYC2$ǁE/r_TN@Z5?kmEmL9֔(EQ:-III t7 iZ MR.f"J$I$I+TMOo.^8[@HR/"gK$I$IT<prvp0VI$I$IRS.(HebR~ K$I$I$)7$I$I$IRJ$I$I$d%I$I$IT@2$I$I$I* @I$I$I$ $I$I$I \<!.:9bnaQ $I$I$Iʩ\PqqERV!6.11pppA$I$I$I̧ !a4xY!1$'?.I$I$I$eSTa !@@L-DI$I$ITJ)NTQBN9,Y)5eU5a1U0o32hTnԽE[hIJgRu?ƗL XxӫL-pJ~_{hcԿv~%I/rKRnLV155 *}Je'L+vbatq' ~fAȴ4qѓfCr<1:bg1O-|pQcs<$>34\ =Ls-K" U*bՔ3gSSpԯ잶O9۸ri$=CӨv`NceWL̥9&Yh38EPϕwٗ.~FXkt=wNtb pѻ+" hլ*h31t=v[w27z_ėg|tS2ʳ7vaperY_}7+ NyN5'6IΘdernqoJQ0'?J4 o4j =W;{$#LDJ-F*jUURjU_5c%KDDH"!DdܕX)z=s>|\9C{R׭ %W^OY{5={+%'el+`‰vrA'jh*nn@Onܓ6Q@N1kv<ųj791`Wkgrxއtk''a^G[.#~4Q>PScaoҍ!f+_?^֞kCFlα,|@W ,Sꂧc:m؏Ք٣`mTzvǍHtT8_}˙l^ԗ(ѯO5Θ.3xkRE},bbxT@׆bʸ'>Lm?6!##^, ,0w ÊvL.LՎQJO}8]}s]&d|ymqY[h֜Móy}!걜mx[+OnːuqhVݘ"i_(-(xE"YL:!}']C2_<g3j]dS221뛻 ƅفO_ wȞq<*Rl֩4}ymTDmJ@]IЏK3=m]%.{ezcrmwnڣKnfZ1_:CNEbE~X3׈O/W ׷-P ~Jh:4_佪S?i+zqMEݪ?àep,LNBuL6uggP6s.ƴMՇlf޹\=S>ϼ-o.WW.@S%*,3*NdMK٤|r46Fd%ƸwwI._ܩ9j+07F]0gFύ8Y=7z0@8gf8ei0 }3EW3]*1jגbL#)9l?EC;\N?<[R7'J 3~ț0c)і}o3{|IȦ3s7xF_%^c_HLO?>/.A.^qb@iEUr%ӂ&1) kL4b-$o9VN''ۮ߬N㒐Wߕ)y.{!tp|rzImKtG\۶}+*%ҍ߲طXoږxw(bW=1DDiQY~L|[ɊJr(WzʵsȮ$!Ӹit)I< {դV8YJT h^m-lЂ.=ԭၞzg]ڌL.Tl71N*F̅ LYfI@) ȆȤ?JCa_ luH%|#} ^_ tğ^idQQZmƲvOv}NFW9k9v^ɛ t>g. ΧE'ϰsJ'k URZ;.2W#pt$e& ?7)=`D6 -(Ӱq%.1QkWU8u$ KԮ=U?iʖ=(R-g+57򨒓I= kv Xy7 ɻyr5:-Ўs>Hf0?Vfn̉ WSǗ:U_Ȝ-E!y=+ 9~1V5;z nz1wI=Y&qjf49:/L1 ¤񫋟ٲm%_`㋧kMGiՙh @KBT'_߬(\r|jZVR;rU<2;r+LY{z8xHXiPuDGx'zT j#8`[ز˒@l R*8\pOC/suf[@]QmndLzˤƒV3JRɫwcⲷ}K~_ӎf2[eh;̈́Ix7IF'ako.5dR3nӺ0_V8ynRu,^sKڪ*O'ȢF0=|NUQҋD9g##u. mycʦC35; >ջ094@و261Gߺ4u߹@ C6D~H6&>":*%aYt՛ox#iڶF"Ս~\-VJ9/ҩQ늖S EWk{{l|̜1-(Wf?=50iyv?GhlC_;~Tˮ~;+gy9)'a{+-=%?Lg 17,G_yWgiqIN!k-r+ܾ`rP (_(e!PՅż;`ՆQXbe)J*f_)(SJIGBd$)2LEJ]tވ PEPxP IK̹$Uu {GGJ{}H"#`i&317mrq^ |;im=F@k?i7+R2Qd9qtu6b * Y˹Kt5ɳ[a_C# 墉η:7^uѕSd@`Z_"N䍬VVXSt2)BU82~շ @˵пӛ٘#u^ cǹ1nak>ٹ>p2w+Ѷ}8 fi{8<ϻU`5#GDBd4 ҋ] {@ ɤ5Ϣ,l |㫈EZTswI C -N"f-,iƥu?:8\՗s5 ŸW[N{39~00619zˣ#vNbI{J1¡GEEt Lʑ1p{ 0Acx9Uto#"^;qm1&ehW?2>CTZU[$Ig+/D䖵?eѪL *Ń}ʷJS;H:}h?p)9Ep F6~D^}rAoDr(Zu 0"v ۴@O|>t@.^> ,)P*Ԩ.c'IHAwSƘ:gݴ=k>${gf  eXz ~LnͲRI+Xv,^>4 ڞtw ͙ӡ>a/5jīAo [ھ)L>MFGz|96@1kv `Ԧ#f֟k*֮m- k~Pΰr?i/)}13eH2" aV (]Gcנn ٕ%ϢJ 7B&3aŅ 9~-r\X1ɛnPݜ7.-}ks~[Yc`eݸ*>׏}EzkxR,ٿ1AD %̮9#eE?o}+Ty'eVطaΎ:8wwjw]YoAAV*~|:@"|]|]f.=<{sfoP֠OOҵy(AOᲱ <[0ض_оyp\6cOa+p Esi㎛Wg% ckyG^m|fnvf֌2 z}UH9yei%e7|<":tY>e%[5|li7f ; tѡY#KcvK_|ҥU c6f/]]O'Z_k, y"}"/0_Se_v[^E~QZKc1"e5mOŇuu Iv̎Mcإlv,cXg:ٱ"_L/-|:%Cɮ^6-9J:S#'g .{sٚgD EW$9,>^ԉ$˭Pewhܫ~X^$^iEtm[?|._^xsDiڴ"?o! Q?uٗ-^gh9z>-![?ɩr^gYh}:u˖y8/sRqӯ~0z,x{4&Ȥ|Ro3@ !j׮RYxNrY5C!lQE<^线H4 8d|?5ٿkmK]ɳZW$IBiIKK٬$dPk5h4j$XD@ 8"Kص˅t:-UVGNs@ @y;]j J@  XPear K @ A@ 3@ @ @ LD%@ f"(@ @ 0@ @ ט''Ãe{]\ܱy@ TPBiVCb=*(@ @y[dYdS{eY&.>_8@ @ EXzLpyxzYAD|+bcSEO @ xUb)+QqwJC{rK{m6 $!\k<YJX\H\ %=Y3?] %Ŭ )VTpR*mOK&{>p6%qB@ aN߄C~ Lbi<J5Y3oTrGuaӛIf{Ө;i^y IDAT jW9ȣSOmWAqˆ_1Y.xֿיq ^ 6BI1w-3xOzϏwfÕ8.,o|nZե<]ĕx7 .a;BJJ ))wi]O[ QQf JssVi0L_a:%a{opBnxEP$Uel*f8"ou;KiaQ%>}uG,H$IX53TDMdI)ku2Z@)IYI6Yڸ-CE F3˒qk'3nORu ϒ Isb.X&^vխLxӟJ.Tk #Ty2qgtW 'g_ڍNڄߙ㎣6%3Bҗԫ6ca+qi66?+G+%Jt]?r"f[JLΟjzVZKjOeVxYSuFN7OK'Nh7I( >Ij1$>>NE}|sdz ށe<`y)\3c@jDF@'@9twFW͹jzQ+V7=w6oz.!ygCo<}? rn'cdאT NTi7]qO´̨PuW T;S5a?ǫ\J7&KGit{&5})٧VǢÈ4Cv=(W==y+ ׆c[Eɳ(6+ab'no`_͘U设ް!tx2<8,í|u4kΦټ>Wΐ{XN}vW<-' eȺ8vqnLt]gJ͖?"~@鬉A u!w/[eS3R.)]n M̍*ڿӞ-[hk7)yܝSW͕c|T&MEup 'm[O3#鏰(Ek; Zv zoԎ+Xp1?#>3ʿg /PޏK3=m]%.{eVC9l\spXr31C7KNEbE~l׈O/W )Csvc6y3 _)gʖ7S+CpYR)݈[ww'&w2N0@Q DFe]ӳ<מ/WƈN~:~;5GmcFq+la\? F 'L]9 F<Ҧ+dt+UE4^ZqW켝i4MvԮSO>.?O@V8@DF$s|tDgŞ|=ʓΑſ`(ٕl,%2mfϑ; t}SN9BB8f̲NFʵhbWJ͊9L¶l#Sbm̾CpmFoYZ 7meuj;c]lDK"Wm?&닭dE^ir9+Q_X`ډrdqMɐJi4R)%Ӳ;ZŲg=5(ԀN#_jLC'3\Zh3~t2*Uʩ_dϱBMl`)QK_<+{7О3bmFo&\ K*̘FYr#k5IY @sYmk~ 1aaɤ?JCa_ &.ٗ.wT(Cv#YM|ԷJ@wE&j]C2ª|5N6d|>x ~S Fdiqق< W"b8u1vUSGбNSOQQl ܃-u|*zވC*9saW۰{?q@,_|̖a~TNݘH/uP:9[0 s|tDY4~'g$^~UO9ME*EAGodD=/nYr$ ciFʬbV8OAR_(6+|, `W?-7BWeJ~Oך# 3(;dNI5%.jYKUPhʭ2e%g&Y`[O9e E,{B/rb <[y!'")V-eJP)SMWAQCK)S0zTx#CsG@zS/x]%CGѪcvn@06-S3=qWK 5NjqX$A#b^=iNc2P6e@_z04֬.8$0k{ҭ*%$4gOV4 9:bF`>_ux6mG2 Oaki5:R/;ͱ' oRI+Xv,0kZYO폙,<@Y'/\MH/@:ucȮ̤(yͦ4̄r&4|ٷy#F:VL`?^or&OO廟A&7h^JO:=X7imhGӚlڝEN߲&Z# <,x/&YW*z;6ccL3f#gS/mc!!jWDL,jЪ?_FG_Wve. A/ԥks;&1. Q,w+9/[ס)nI+(~[5?ݘ,7Eg鎴o'}!]QƆ ܂zQxՄ/b{)̃偻Gex+Z &omۙsX3JzQ88ժ γfһ|7Zk۪L>Ux4idӮXHR7pnjvDĩo ˲j@;P9?gmiX7\gl ?Cشj̴qضqW9{C9f"Wc~gy|2=]n!UnS-eٱ7`3YuB' J%Vy8hjCߵ}L|mK̭ˢPP<vMh`<䧰$}‹)m:<_|T̚I"J"ʐE4sEoZT}7<zW]/>ګ̪o}w\qq!)ӳ@{}3wsѵ:>۹b>U*5g Z-9t^طT>Ƚ&ʖeMʗ,IǗ5%{>e1 h ߒR6msy )V'^ +W B@GJR2/OS$<39Eڨ!nۤt5}`nyYu|~Jg &\Q%߳EUAw4;Mnl筨I "BQf JssVi( =W :wwrO1s$|~6wa1~{?wF 2>OD Gﯢ5 4x1Lo k<|,a;BJJ ))wi]O[/1]C+*klQ,( Os]- o2Ψ@@i*aZ ϾOSѣ3?FPƄ7w;|{9gO /:RLJ x~Zg:W}JY*$ Ij8+3lg&3EA^ȓ63SJaנ-d9)Sʓֳ/ϴM|ֹ6eP/Q/}Oƭx!>JQֽo/8D'!=(W==y+ ׆-:ב=gMHX?])Qj94'uP|euWӳYR{r([ƶ«\ &ȚFk'7tۢ^{tw9^ Yg *eY;\tYi;*qQ08l\spXrS  ͼs7~q3zTN{{ ^aE;&x{ e`&jGݨSF'>设//tx2<8,í|u4kΦټ>Wΐ{ZN}vW<-' eȺ8vqnLt]gJ_`lC.d.ΚH:6!la\? F 'L]9Cs'աIV}) IDAT)[n=Ȏ?¢c0h-Ek? S;Pc,0ڳ$ҍ,QqgQa|w]n 4(v ˔~u(oyew䭃a=_/N~:~;5Gmc6uggP!k z'e {j|"wOKUW:8?ymI:Y[/7hо=l>G$pdjmEӳ<מ/W?]⟈}]~έpzr JdD"ޞ(׈O/W /`yӽԬsd/~0emLz}!! ϚK?>/.A.ro+tߴ-GSVhb] ZeDʪ :%pjמz4ZeKD]:Om4t2ըը 6cY'z>N'RUa᫜5A;/Y]ѶhȞ ~wM]dF`Hܥ _E]:4Ey6Dp4Z7?i \;Q?W:NkՑg_Xܛ&R¦R u]6#?y=МeVۚ­ilTpȈz^t=܄]] F|/g6('eU|SA7DҫKԪ/d Gi(Ka=KbGjc^DcfYwv/zeyǸ|ɡ'+Xڹ4hf49:FM1 )ZKlhS4ZI7J)BBo’K[e  EVVnG#|ӬIӶuĸ.(ZCY2la4<Đw=*"!L<{>&)c^KJ8'Y;}%V?#٘訔+R)/BxMb?ҟ1/0#Lyo%^HۢKM&-rj2VYKgcKs _1,(kulH`|^9n_0UB P2ZmV:Pex+DfZ*AR(PnkkKҲB[();Ǭ˶bEJ"q &u!,,pm;#8;b}D!k9w.]д&(kaT2.,6?~+K LT|FQow-03JNAPJ:"#IAVg/R#Fi*2(ŃjnXHZbΝ'HFWA9vRM&od핶’,ǙIҍǹ==xxmଃkѱiڢq+՜A=pݪ?wtl $22 [M <6ן4}:5ƳzicBއ?<`=?vB¸.ةi+%>NvщW}Ui/yuIL7i`R)?~?ZC8H ]#l兜YڟhRIL>t$oEP>5H8wQUߙID#%@ FUA"6PJAq]uEQpuAA (P^:&$S~drxޡxsبG7UVJYdti-4TNN5mI Qٲa/$.nm{ig1SO$dhU'hޢu+mN:%?_K{r3Ң~wSҼO+kɒw5y`U ,I#tTYzn s3CMYRSrtO 7D_V iҎEktN}E6ICWԑsGZkkZR=W ;jk qdM-Ohr} +K˟Y5!kƊò7Vzch'm$9t`a]Y)[i-?cg% Z[H_v[io5ЬP.] AVTrΤ W(Y)]{]Nk֣Js8eZtEaMZT)u"?S5k?[ؕ}[Z<_q-УmRV vRӞu:uu]U~~z{EVcկiħQzwk5w/Ck?[/ͺP[ck㓴4w8RGv5D]X7P;GhLk Z􋔭zk<\SɛW?RJ+I|,޽)&*~ Q-/|["kw)Bv)95pRV[_f|_ZFVkrXoUr4, i=LO7R}biV^l_MWWt]JrykO~y\Z3_w}^iN VoZ=J5jǪeZYcTtYt_kJ2Tvt5ZwEE)U|9gxI`Uqqj]E߬oޫj̓8EjJjz6=T>vdJRYw5X>V/op&묖N5Uf{?yX95=:G+*4YRpSM\¦vP;4K?:.u4RZ_Mhүw}nO>ۚ!EGϨBD~D—=oGm-A/C.v_7q\zkԶT^CIKOվTJy}VU /*e\7}pmWoZY̾U6zV쟥 ڨ/SX1\׆Hs5`KMJ? {Uma*dy}!#(x%QX,#$()UR~]mq-.%C>B:{Z=K+!ѡ:Kgnٕij.'^N:=Z5wV_3jvVbuM7=>M MbE:G$uK{gSvNރ#?"Զutu=gRBPDVM3=~G>ݞߎYS1H=UWi5oq=Ŭ+a Bo~%ZT>:3NύK h&o%|suJ[OӬe71Tk5Q_l(͍M6bd]B3|.%QʯBv5^6[-p8eB?V(\Jϣ${I_X,%''+((H.L-.)aݞ&%{"@]S+F%Atεue3!s$)juU&#kSlA'P()'*(&s<P`r#@~Pz!(09P`#0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DC(0DCaJ?\( =z q(0D"@!"@!"@!"@!"@!"@!"@!"@!"@!"@!"@!"@!"@!"@! ʯn:k5њ8~mPXSGUj'kjr4f9Ӟ'wd5%EI=~u>_.S_VlV5RMjccd u|8_}:{>fNY4Z*ޯܯy 5Iv8s^^R|Pd\釤75ھE_ωVhUZEu NX2Zζi—.nz |mLj46$I.\=.WmW+<'oO_|ȡd:>c_?[b$"{yԕ--^CoMUYoU1=]$HN$@6,_&IЯO~l=Gs澫W(I~qӴ-CUaISɉr@6>a*㲂JWTlXm۴7_j֪dU)W҃i;4)u4-9U+'Ekv(Yj UeLMoj;?B/`Uĝ;3ׯshzX)#ə"9znScg)-5n֓t@׻ 0\=~C +?]tK~_ܹC[dgz-IC, W ۩ g=n>>TjAn=r[q_WIL{_kOQo2>K*/oԸdV%ޤᓞҽ?h ѡ,-n_U J[pfmKn.ՕM:USUPUlL']RI;d W諸@!аjѦZie}Z<{>:Gr.ERe.vb)]J]jlJ ~z|[91e*m[-uyp?wM}f13WRc=vgl}+$ρeqc=ʤbդQCrXF೒׬R ]z7ReTwW.Ywm.KHЙ4Ks5PSKM-)f8%(HANNZ.Mz*E3ǰ|cEB@3H"w8j>f6)%ݟ(t璔B-+9YT*Hr[o[jZڳzjJ{Ex9LsWjҥ;A˞Vۛi$[" H>'jثzf'aP? 9Nr{AϹӽݵuzÅj޴ֻUPEzt3<5:v@Rd$녮.gqkEa*L;y @#3z*a E0@E)>_'W6mڣfi`,I9h?;MWSIi(>9ul&%z%j궡}WښAK]VRajZLߤfj7)g<9 5lP_q===H*RHNjof.ޡNI}/JJ)J4vIh^6c}V+/kȨڽgF}Bϝ&X,rKM/kdsP#OM^_e5dk(zyݻ<]WЌ/kqTz@&5kj={LԺ&:Y+Ѹޡr.@/(Yurz(_=QBTWм9ԗsR JǪ5FJESf+6uEkx~7ʴ[,6 mucb4 ;.e>).1\[h\Pmboa*G{!]ާ,]_mPt !}X{ Y>Α,dsᶖ27za;`F@iB(PO^tQ^#C< (L7ErsmdgsȽ3<(o幔2־yAp 2I=M“=T`+@s8WxRpr t (|M$-@DXw܌mÓa{&0g/뾯s<4@O*'[Lzװ=_=O(o_A5$dH^3IPɍrR&4d%eZPX+(ٲ}VRބ"ǡ]~ɓ5/ @n3%vIENDB`fsearch-0.2.3/debian/000077500000000000000000000000001446344336300143635ustar00rootroot00000000000000fsearch-0.2.3/debian/README000066400000000000000000000002641446344336300152450ustar00rootroot00000000000000The Debian Package fsearch ---------------------------- Comments regarding the Package -- Christian Boxdörfer Sat, 25 Sep 2021 13:16:38 +0200 fsearch-0.2.3/debian/README.Debian000066400000000000000000000003061446344336300164230ustar00rootroot00000000000000fsearch for Debian ----------------- -- Christian Boxdörfer Sat, 25 Sep 2021 13:16:38 +0200 fsearch-0.2.3/debian/README.source000066400000000000000000000004331446344336300165420ustar00rootroot00000000000000fsearch for Debian ----------------- -- Christian Boxdörfer Sat, 25 Sep 2021 13:16:38 +0200 fsearch-0.2.3/debian/changelog000066400000000000000000000014331446344336300162360ustar00rootroot00000000000000fsearch (0.2.3) unstable; urgency=medium * New upstream release. -- Christian Boxdörfer Sat, 05 Aug 2023 14:55:43 +0200 fsearch (0.2.2) unstable; urgency=medium * New upstream release. -- Christian Boxdörfer Mon, 22 Aug 2022 12:05:35 +0200 fsearch (0.2.1) unstable; urgency=medium * New upstream release. -- Christian Boxdörfer Wed, 17 Aug 2022 19:49:55 +0200 fsearch (0.2) unstable; urgency=medium * New upstream release. -- Christian Boxdörfer Mon, 15 Aug 2022 14:35:12 +0200 fsearch (0.1) unstable; urgency=medium * Initial Release. -- Christian Boxdörfer Sat, 25 Sep 2021 13:16:38 +0200 fsearch-0.2.3/debian/compat000066400000000000000000000000021446344336300155610ustar00rootroot000000000000009 fsearch-0.2.3/debian/control000066400000000000000000000013221446344336300157640ustar00rootroot00000000000000Source: fsearch Section: utils Priority: optional Maintainer: Christian Boxdörfer Build-Depends: debhelper (>=9), build-essential, libtool, pkg-config, libicu-dev, libpcre2-dev, libglib2.0-dev, libgtk-3-dev, libxml2-utils, meson Standards-Version: 3.9.6 Homepage: https://cboxdoerfer.github.io/fsearch/ Package: fsearch Architecture: any Replaces: fsearch-trunk Breaks: fsearch-trunk Depends: ${shlibs:Depends}, ${misc:Depends} Description: A fast graphical file search utility FSearch is a fast file search utility, based on GTK3. It supports regular expressions, wildcards, fast sorting, instant results with millions of files and more. fsearch-0.2.3/debian/copyright000066400000000000000000000030751446344336300163230ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: FSearch Source: https://github.com/cboxdoerfer/fsearch Files: * Copyright: License: GPL-2.0+ Files: debian/* Copyright: 2021 Christian Boxdörfer License: GPL-2.0+ License: GPL-2.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". # Please also look if there are files or directories which have a # different copyright/license attached and list them here. # Please avoid picking licenses with terms that are more restrictive than the # packaged work, as it may make Debian's contributions unacceptable upstream. # # If you need, there are some extra license texts available in two places: # /usr/share/debhelper/dh_make/licenses/ # /usr/share/common-licenses/ fsearch-0.2.3/debian/fsearch-docs.docs000066400000000000000000000000431446344336300175730ustar00rootroot00000000000000README.Debian README.source README fsearch-0.2.3/debian/fsearch.cron.d.ex000066400000000000000000000002131446344336300175120ustar00rootroot00000000000000# #Regular cron jobs for the fsearch package # 0 4 * **root[-x / usr / bin / fsearch_maintenance] && / usr / bin / fsearch_maintenance fsearch-0.2.3/debian/manpage.1.ex000066400000000000000000000031701446344336300164710ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" (C) Copyright 2021 Christian Boxdörfer , .\" .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH Fsearch SECTION "September 25 2021" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME fsearch \- program to do something .SH SYNOPSIS .B fsearch .RI [ options ] " files" ... .br .B bar .RI [ options ] " files" ... .SH DESCRIPTION This manual page documents briefly the .B fsearch and .B bar commands. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBfsearch\fP is a program that... .SH OPTIONS These programs follow the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the Info files. .TP .B \-h, \-\-help Show summary of options. .TP .B \-v, \-\-version Show version of program. .SH SEE ALSO .BR bar (1), .BR baz (1). .br The programs are documented fully by .IR "The Rise and Fall of a Fooish Bar" , available via the Info system. fsearch-0.2.3/debian/manpage.md.ex000066400000000000000000000073561446344336300167430ustar00rootroot00000000000000% fsearch(SECTION) | User Commands % % "September 25 2021" [comment]: # The lines above form a Pandoc metadata block. They must be [comment]: # the first ones in the file. [comment]: # See https://pandoc.org/MANUAL.html#metadata-blocks for details. [comment]: # pandoc -s -f markdown -t man package.md -o package.1 [comment]: # [comment]: # A manual page package.1 will be generated. You may view the [comment]: # manual page with: nroff -man package.1 | less. A typical entry [comment]: # in a Makefile or Makefile.am is: [comment]: # [comment]: # package.1: package.md [comment]: # pandoc --standalone --from=markdown --to=man $< --output=$@ [comment]: # [comment]: # The pandoc binary is found in the pandoc package. Please remember [comment]: # that if you create the nroff version in one of the debian/rules [comment]: # file targets, such as build, you will need to include pandoc in [comment]: # your Build-Depends control field. [comment]: # Remove the lines starting with `[comment]:' in this file in order [comment]: # to avoid warning messages from pandoc. # NAME fsearch - program to do something # SYNOPSIS **fsearch** **-e** _this_ [**\-\-example=that**] [{**-e** | **\-\-example**} _this_] [{**-e** | **\-\-example**} {_this_ | _that_}] **fsearch** [{**-h** | *\-\-help**} | {**-v** | **\-\-version**}] # DESCRIPTION This manual page documents briefly the **fsearch** and **bar** commands. This manual page was written for the Debian distribution because the original program does not have a manual page. Instead, it has documentation in the GNU info(1) format; see below. **fsearch** is a program that... # OPTIONS The program follows the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the **info**(1) files. **-e** _this_, **\-\-example=**_that_ : Does this and that. **-h**, **\-\-help** : Show summary of options. **-v**, **\-\-version** : Show version of program. # FILES /etc/foo.conf : The system-wide configuration file to control the behaviour of fsearch. See **foo.conf**(5) for further details. ${HOME}/.foo.conf : The per-user configuration file to control the behaviour of fsearch. See **foo.conf**(5) for further details. # ENVIRONMENT **FOO_CONF** : If used, the defined file is used as configuration file (see also the section called “FILES”). # DIAGNOSTICS The following diagnostics may be issued on stderr: Bad configuration file. Exiting. : The configuration file seems to contain a broken configuration line. Use the **\-\-verbose** option, to get more info. **fsearch** provides some return codes, that can be used in scripts: Code Diagnostic 0 Program exited successfully. 1 The configuration file seems to be broken. # BUGS The program is currently limited to only work with the foobar library. The upstream BTS can be found at http://bugzilla.foo.tld. # SEE ALSO **bar**(1), **baz**(1), **foo.conf**(5) The programs are documented fully by The Rise and Fall of a Fooish Bar available via the **info**(1) system. # AUTHOR Christian Boxdörfer : Wrote this manpage for the Debian system. # COPYRIGHT Copyright © 2007 Christian Boxdörfer This manual page was written for the Debian system (and may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or (at your option) any later version published by the Free Software Foundation. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. [comment]: # Local Variables: [comment]: # mode: markdown [comment]: # End: fsearch-0.2.3/debian/manpage.sgml.ex000066400000000000000000000111041446344336300172670ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> FIRSTNAME"> SURNAME"> September 25 2021"> SECTION"> christian.boxdoerfer@posteo.de"> Fsearch"> Debian"> GNU"> GPL"> ]>

&dhemail;
&dhfirstname; &dhsurname; 2003 &dhusername; &dhdate; &dhucpackage; &dhsection; &dhpackage; program to do something &dhpackage; DESCRIPTION This manual page documents briefly the &dhpackage; and bar commands. This manual page was written for the &debian; distribution because the original program does not have a manual page. Instead, it has documentation in the &gnu; Info format; see below. &dhpackage; is a program that... OPTIONS These programs follow the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the Info files. Show summary of options. Show version of program. SEE ALSO bar (1), baz (1). The programs are documented fully by The Rise and Fall of a Fooish Bar available via the Info system. AUTHOR This manual page was written by &dhusername; &dhemail; for the &debian; system (and may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the &gnu; General Public License, Version 2 any later version published by the Free Software Foundation. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. fsearch-0.2.3/debian/manpage.xml.ex000066400000000000000000000254261446344336300171410ustar00rootroot00000000000000 .
will be generated. You may view the manual page with: nroff -man .
| less'. A typical entry in a Makefile or Makefile.am is: DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" manpage.1: manpage.xml $(XP) $(DB2MAN) $< The xsltproc binary is found in the xsltproc package. The XSL files are in docbook-xsl. A description of the parameters you can use can be found in the docbook-xsl-doc-* packages. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include xsltproc and docbook-xsl in your Build-Depends control field. Alternatively use the xmlto command/package. That will also automatically pull in xsltproc and docbook-xsl. Notes for using docbook2x: docbook2x-man does not automatically create the AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as ... . To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be found in the docbook-xsl-doc-html package. Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` General documentation about man-pages and man-page-formatting: man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ --> ]> &dhtitle; &dhpackage; &dhfirstname; &dhsurname; Wrote this manpage for the Debian system.
&dhemail;
2007 &dhusername; This manual page was written for the Debian system (and may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or (at your option) any later version published by the Free Software Foundation. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.
&dhucpackage; &dhsection; &dhpackage; program to do something &dhpackage; this this that &dhpackage; DESCRIPTION This manual page documents briefly the &dhpackage; and bar commands. This manual page was written for the Debian distribution because the original program does not have a manual page. Instead, it has documentation in the GNU info 1 format; see below. &dhpackage; is a program that... OPTIONS The program follows the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the info 1 files. Does this and that. Show summary of options. Show version of program. FILES /etc/foo.conf The system-wide configuration file to control the behaviour of &dhpackage;. See foo.conf 5 for further details. ${HOME}/.foo.conf The per-user configuration file to control the behaviour of &dhpackage;. See foo.conf 5 for further details. ENVIRONMENT FOO_CONF If used, the defined file is used as configuration file (see also ). DIAGNOSTICS The following diagnostics may be issued on stderr: Bad configuration file. Exiting. The configuration file seems to contain a broken configuration line. Use the option, to get more info. &dhpackage; provides some return codes, that can be used in scripts: Code Diagnostic 0 Program exited successfully. 1 The configuration file seems to be broken. BUGS The program is currently limited to only work with the foobar library. The upstreams BTS can be found at . SEE ALSO bar 1 , baz 1 , foo.conf 5 The programs are documented fully by The Rise and Fall of a Fooish Bar available via the info 1 system.
fsearch-0.2.3/debian/postinst.ex000066400000000000000000000016761446344336300166160ustar00rootroot00000000000000#!/bin/sh # postinst script for fsearch # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `configure' # * `abort-upgrade' # * `abort-remove' `in-favour' # # * `abort-remove' # * `abort-deconfigure' `in-favour' # `removing' # # for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in configure) ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 fsearch-0.2.3/debian/postrm.ex000066400000000000000000000016431446344336300162510ustar00rootroot00000000000000#!/bin/sh # postrm script for fsearch # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `remove' # * `purge' # * `upgrade' # * `failed-upgrade' # * `abort-install' # * `abort-install' # * `abort-upgrade' # * `disappear' # # for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; *) echo "postrm called with unknown argument \`$1'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 fsearch-0.2.3/debian/preinst.ex000066400000000000000000000012631446344336300164070ustar00rootroot00000000000000#!/bin/sh # preinst script for fsearch # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `install' # * `install' # * `upgrade' # * `abort-upgrade' # for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in install|upgrade) ;; abort-upgrade) ;; *) echo "preinst called with unknown argument \`$1'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 fsearch-0.2.3/debian/prerm.ex000066400000000000000000000015561446344336300160550ustar00rootroot00000000000000#!/bin/sh # prerm script for fsearch # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `remove' # * `upgrade' # * `failed-upgrade' # * `remove' `in-favour' # * `deconfigure' `in-favour' # `removing' # # for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in remove|upgrade|deconfigure) ;; failed-upgrade) ;; *) echo "prerm called with unknown argument \`$1'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 fsearch-0.2.3/debian/rules000077500000000000000000000003511446344336300154420ustar00rootroot00000000000000#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. export DH_VERBOSE = 1 %: dh $@ override_dh_auto_configure: dh_auto_configure -- \ -Dchannel=PPA-stable fsearch-0.2.3/debian/source/000077500000000000000000000000001446344336300156635ustar00rootroot00000000000000fsearch-0.2.3/debian/source/format000066400000000000000000000000151446344336300170720ustar00rootroot000000000000003.0 (native) fsearch-0.2.3/meson.build000066400000000000000000000024421446344336300153050ustar00rootroot00000000000000project('fsearch', 'c', version: '0.2.3', meson_version: '>= 0.45.0', default_options: ['c_std=c11', 'channel=other', ], ) app_id = 'io.github.cboxdoerfer.FSearch' cc = meson.get_compiler('c') gnome = import('gnome') i18n = import('i18n') have_malloc_trim = meson.get_compiler('c').has_function('malloc_trim') config_h = configuration_data() config_h.set('HAVE_MALLOC_TRIM', have_malloc_trim) config_h.set_quoted('APP_ID', app_id) config_h.set_quoted('PACKAGE_VERSION', meson.project_version()) config_h.set_quoted('VERSION', meson.project_version()) config_h.set_quoted('GETTEXT_PACKAGE', 'fsearch') config_h.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir'))) config_h.set_quoted('PACKAGE_WEBSITE', 'https://github.com/cboxdoerfer/fsearch') config_h.set_quoted('PACKAGE_ICON_NAME', app_id) config_h.set_quoted('PACKAGE_NAME', 'FSearch') config_h.set_quoted('BUILD_CHANNEL', get_option('channel')) add_project_arguments('-DHAVE_CONFIG_H', language : 'c') # ensure off_t is 64bit add_project_arguments('-D_FILE_OFFSET_BITS=64', language : 'c') fsearch_include_dirs = include_directories( '.', ) subdir('data') subdir('src') subdir('po') configure_file( output: 'config.h', configuration: config_h, ) fsearch-0.2.3/meson_options.txt000066400000000000000000000005011446344336300165720ustar00rootroot00000000000000option('channel', type: 'combo', choices: [ 'other', 'AUR-stable', 'AUR-devel', 'copr-stable', 'copr-nightly', 'PPA-stable', 'PPA-nightly', 'snap-stable', 'snap-nightly', 'flathub-stable', 'flathub-nightly', 'OBS-deb-stable', 'OBS-rpm-stable' ], description: 'The distribution channel for FSearch', ) fsearch-0.2.3/po/000077500000000000000000000000001446344336300135575ustar00rootroot00000000000000fsearch-0.2.3/po/LINGUAS000066400000000000000000000002271446344336300146050ustar00rootroot00000000000000# Keep list sorted alphabetically ar ber bg ca de el es eu fi fr gl he hu id ie it ja ko lt mr nb_NO nl pl pt pt_BR ru sk sv te tr tzm uk zh_CN en_GB fsearch-0.2.3/po/Makevars000066400000000000000000000064701446344336300152620ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8 # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Christian Boxdörfer # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes fsearch-0.2.3/po/POTFILES.in000066400000000000000000000010161446344336300153320ustar00rootroot00000000000000data/io.github.cboxdoerfer.FSearch.desktop.in.in data/io.github.cboxdoerfer.FSearch.appdata.xml.in src/fsearch.c src/fsearch_database.c src/fsearch_file_utils.c src/fsearch_filter.c src/fsearch_filter_editor.c src/fsearch_filter_editor.ui src/fsearch_listview_popup.c src/fsearch_overlay.ui src/fsearch_preferences.ui src/fsearch_preferences_ui.c src/fsearch_preferences_widgets.c src/fsearch_statusbar.c src/fsearch_statusbar.ui src/fsearch_window.c src/fsearch_window.ui src/fsearch_window_actions.c src/main.c src/menus.ui fsearch-0.2.3/po/ar.po000066400000000000000000001535031446344336300145300ustar00rootroot00000000000000# Arabic translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # Mubarak AlQahtani , 2021. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2021-01-13 10:23+0300\n" "Last-Translator: Mubarak AlQahtani \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "X-Generator: Gtranslator 3.36.0\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "تطبيق بحث عن الملفات يركز على الأداء والميزات المتقدمة" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "بحث;fsearch;ملفات;مجلدات;موسيقى;فيديو;مستندات;بحث;أداة;كل شيء;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "استبعاد الملفات والمجلدات المخفية" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "فرز..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "Mubarak AlQahtani" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "أداة بحث تركز على الأداء والميزات المتقدمة" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "اظهر زر البحث" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "حدث قاعدة البيانات" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "إظهار معلومات الإصدار" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "تحميل قاعدة البيانات..." #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "جارِ حذف الملفات ..." #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "فرز..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open file" msgid "Failed to build open command" msgstr "فشل فتح الملف" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "فشل فتح الملف" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get path" msgstr "فشل فتح الملف" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get parent path" msgstr "فشل فتح الملف" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "مجلدات" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "الكل" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "مجلدات" #: src/fsearch_filter.c:113 msgid "Files" msgstr "ملفات" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "مؤرشفة" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "صوتية" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "مستندات" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "صور" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "فيديو" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_ألغِ" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_موافق" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "اسم" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "البحث في المسار" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "طابق حالة الأحرف" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "قاعدة بيانات فارغة" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "مجلدات" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "تحميل قاعدة البيانات..." #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "هذا لن يستغرق وقتًا طويلاً." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "تحديث قاعدة البيانات" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "هذا قد يستغرق بعض الوقت." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "استعلام فارغ" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "اضغط على Ctrl + F وابدأ في الكتابة" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "لم يتم العثور على نتائج" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "جرب بحثًا مختلفًا" #: src/fsearch_overlay.ui:368 #, fuzzy msgid "Sorting results…" msgstr "فرز..." #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "التفضيلات" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "تفعيل المظهر الداكن" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "تمكين زخارف النافذة من جانب العميل (يتطلب إعادة التشغيل)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "استخدام الوحدات الثنائية بدلاً من الوحدات العشرية" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "تذكر حجم النافذة" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "باستخدام اختصارات لوحة المفاتيح أو إدخالات القائمة" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "مع النقر المزدوج" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "التصرف بعد فتح الملف بنجاح:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "لا شيء" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "تصغير" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "إغلاق" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "عام:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "إظهار مصطلحات البحث المميزة" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "عرض التلميحات" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "إظهار الرموز في عمود الاسم" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "تذكر ترتيب العمود" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "تذكر ترتيب الفرز" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "افتح المسار بالنقر المزدوج في عمود المسار" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "نقرة واحدة لفتح" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "النتائج:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "إظهار حالة فهرسة قاعدة البيانات" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "شريط الحالة:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "إظهار نوافذ التحذير عندما:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "فشل فتح الملف / المجلد" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "نوافذ الحوارات:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "الواجهة" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "البحث في المسار عندما يحتوي الاستعلام على فواصل المسارات" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "البحث أثناء الكتابة" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "إخفاء النتائج عندما يكون البحث فارغًا" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "طابق الحالة عندما يحتوي الاستعلام على حرف كبير واحد على الأقل" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "مجلدات" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Remove selected path" msgid "Remove selected filter" msgstr "إزالة المسار المحدد" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "عدد الملفات المحددة" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "أظهر التصفية" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "بحث" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "تحديث قاعدة البيانات عند التشغيل" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "تحديث" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 #, fuzzy msgid "" "Add path to be included in database\n" " " msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "إزالة المسار المحدد" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "تضمين" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "اضف مسار ليتم استبعاده من قاعدة البيانات" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "دعم أحرف البدل. يجب فصل الإدخالات المتعددة بـ \";\"" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "استبعاد ملفات:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "مثال: الملفات من نوع \".git؛ *. tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "استبعاد الملفات والمجلدات المخفية" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "استبعاد" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "قاعدة البيانات" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" " تمكين المظهر الداكن: \n" "\n" "في حالة التمكين ، يُطلب من سمة النظام استخدام تصميم أغمق للتطبيق (أي " "عناصر واجهة مستخدم داكنة على نص ساطع) .\n" "\n" "لاحظ أنه ليست كل سمات النظام توفر مثل هذا المتغير الغامق ، وبالتالي فإن " "تمكين هذا الإعداد قد لا يكون له تأثير." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" " تمكين الزخارف من جانب العميل: \n" "\n" "في حالة التمكين ، يتم عرض إدخال البحث والقائمة الرئيسية في شريط عنوان " "النافذة.\n" "\n" "في حالة التعطيل ، يتم عرض القائمة الرئيسية كشريط قوائم مع إدخال البحث " "أسفلها.\n" "هذا يشبه تصميم واجهة مستخدم أكثر تقليدية ويأخذ مساحة أكبر قليلاً." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" " استخدم الوحدات الثنائية بدلاً من الوحدات العشرية: \n" "\n" "تتحكم هذه الإعدادات في كيفية عرض أحجام الملفات.\n" "\n" "• الوحدات الثنائية: يشير هذا إلى بادئات IEC الثنائية (مثل 1 " "كيلو بايت = 1024 بايت) \n" "• الوحدات العشرية: يشير هذا إلى بادئات النظام الدولي للوحدات " "العشرية (على سبيل المثال ، 1 كيلو بايت = 1000 بايت) " #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" " تذكر حجم النافذة: \n" "\n" "في حالة التمكين ، ستتم استعادة حجم النافذة من الجلسة السابقة عند فتح نافذة " "FSearch.\n" "\n" "لاحظ أن بعض مديري النوافذ يتجاهلون هذا الطلب ويفرضون أن يكون للنافذة حجم " "مختلف." #: src/fsearch_preferences.ui:1385 #, fuzzy msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" " السلوك بعد فتح الملف بنجاح: \n" "\n" "عند فتح ملف / مجلد بنجاح ، يمكن تنفيذ أحد الإجراءات التالية:\n" "\n" "• لا شيء: لم يحدث شيء.\n" "• تصغير: يتم تصغير نافذة FSearch المحددة حاليًا.\n" "لاحظ أنه ليست كل الأنظمة تسمح بتصغير النوافذ.\n" "• إغلاق: قم بإنهاء FSearch.\n" "\n" "يمكنك تكوين ما إذا كان يجب تشغيل هذه الإجراءات عند فتح الملف باستخدام\n" "\n" "• اختصارات لوحة المفاتيح أو إدخالات القائمة و / أو\n" "• النقر بالماوس " #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" " إظهار مصطلحات البحث المميزة: \n" "\n" "في حالة التمكين ، سيتم تمييز مصطلحات البحث في عرض النتائج. على سبيل المثال ، " "عندما تبحث عن \"foo\" ، سيتم تمييز جميع مظاهر foo في أسماء " "الملفات / المجلدات بأحرف غامقة:\n" "\n" "foo bar.txt\n" "ملف. foo\n" "\n" "يعمل هذا أيضًا مع التعبيرات العادية وتعبيرات أحرف البدل التي تبدأ بعلامة " "النجمة أو تنتهي بها." #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" " إظهار تلميحات الأدوات: \n" "\n" "في حالة التمكين ، سيعرض عرض النتائج المسار الكامل للملف / المجلد المركّز في " "نافذة تلميح أداة صغيرة." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" " إظهار الرموز في عمود الاسم: \n" "\n" "في حالة التمكين ، ستظهر أيقونات الملف / المجلد في عمود الاسم." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" " تذكر ترتيب العمود: \n" "\n" "في حالة التمكين ، سيتم استعادة تكوين العمود الخاص بعرض النتائج من الجلسة " "السابقة عند فتح نافذة FSearch. يتضمن ذلك حجم جميع الأعمدة وإمكانية رؤيتها." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" " تذكر ترتيب الفرز: \n" "\n" "في حالة التمكين ، سيتم استعادة ترتيب عرض النتائج من الجلسة السابقة عند فتح " "نافذة FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" " افتح المسار بالنقر المزدوج في عمود المسار: \n" "\n" "في حالة التمكين ، سيؤدي النقر المزدوج في عمود المسار إلى فتح المسار المحدد." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" " نقرة واحدة للفتح: \n" "\n" "في حالة التمكين ، سيتم فتح الملف / المجلد المحدد بنقرة واحدة. إذا كنت تريد " "فقط تحديد ملف / مجلد أثناء تنشيط هذا الإعداد ، فستحتاج إلى الضغط باستمرار " "على Ctrl في نفس الوقت أثناء النقر فوق الملف / المجلد." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" " إظهار حالة فهرسة قاعدة البيانات: \n" "\n" "في حالة التمكين ، يتم عرض المسار الذي تتم فهرسته حاليًا في شريط الحالة." #: src/fsearch_preferences.ui:1550 #, fuzzy msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" " إظهار مربعات حوار التحذير: \n" "\n" "في حالة التمكين ، يتم عرض مربع حوار تحذير عندما:\n" "\n" "• فشل فتح ملف أو مجلد" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" " البحث في المسار عندما يحتوي الاستعلام على فواصل مسار: \n" "\n" "في حالة التمكين ، ستتم مطابقة مصطلحات البحث التي تحتوي على فواصل المسارات " "(أي \"/\") تلقائيًا مع المسار الكامل لملف أو مجلد." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" " حالة المطابقة عندما يحتوي طلب البحث على حرف كبير واحد على الأقل: \n" "\n" "في حالة التمكين ، ستؤدي مصطلحات البحث التي تحتوي على حرف واحد كبير على الأقل " "إلى بدء بحث حساس لحالة الأحرف. هذا يعني أن عبارة بحث مثل Foo ستطابق " " FooBar.txt وليس foobar.txt ." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" " إخفاء النتائج عندما يكون البحث فارغًا: \n" "\n" "في حالة التمكين ، لا يتم عرض أي نتائج بحث عندما يكون إدخال البحث فارغًا.\n" "\n" "إذا تم تعطيله ، فسيتم عرض جميع الملفات والمجلدات عندما يكون إدخال البحث " "فارغًا." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" " ابحث أثناء الكتابة: \n" "\n" "في حالة التمكين ، يتم تحديث البحث تلقائيًا مع كل ضغطة مفتاح.\n" "\n" "في حالة التعطيل ، يتم تحديث البحث فقط عند الضغط على Enter أو الضغط " "على زر البحث." #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" " تحديث قاعدة البيانات عند البدء: \n" "\n" "في حالة التمكين ، سيتم تحديث قاعدة البيانات تلقائيًا في الخلفية عند بدء " "FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" " المجلدات المستبعدة: \n" "\n" "تحتوي هذه القائمة على جميع المجلدات التي تريد استبعادها من قاعدة البيانات.\n" "\n" "• نشط: إذا تم تمكينه ، فسيتم استبعاد المسار من قاعدة البيانات\n" "ولا يمكن البحث فيها.\n" "• المسار: المسار الكامل المطلوب استبعاده." #: src/fsearch_preferences.ui:1677 #, fuzzy #| msgid "" #| "Exclude folder from database:\n" #| "\n" #| "This button opens a dialog where you can select a folder you want to " #| "exclude from the database." msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" " استبعاد مجلد من قاعدة البيانات: \n" "\n" "يفتح هذا الزر نافذة حوار حيث يمكنك تحديد المجلد الذي تريد استبعاده من قاعدة " "البيانات." #: src/fsearch_preferences.ui:1694 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| "This removes the selected folder from the list of excluded folders." msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" " إزالة صف محدد: \n" "\n" "يؤدي هذا إلى إزالة المجلد المحدد من قائمة المجلدات المستبعدة." #: src/fsearch_preferences.ui:1711 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" " المجلدات المستبعدة: \n" "\n" "تحتوي هذه القائمة على جميع المجلدات التي تريد استبعادها من قاعدة البيانات.\n" "\n" "• نشط: إذا تم تمكينه ، فسيتم استبعاد المسار من قاعدة البيانات\n" "ولا يمكن البحث فيها.\n" "• المسار: المسار الكامل المطلوب استبعاده." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" " استبعاد مجلد من قاعدة البيانات: \n" "\n" "يفتح هذا الزر نافذة حوار حيث يمكنك تحديد المجلد الذي تريد استبعاده من قاعدة " "البيانات." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" " إزالة صف محدد: \n" "\n" "يؤدي هذا إلى إزالة المجلد المحدد من قائمة المجلدات المستبعدة." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" " استبعاد الملفات والمجلدات من قاعدة البيانات: \n" "\n" "هذه قائمة من الملفات (أو المجلدات) مفصولة بفاصلة منقوطة تريد استبعادها من " "قاعدة البيانات. على سبيل المثال ، سيستبعد .git؛ .cache؛ *. swp جميع " "الملفات أو المجلدات التي تسمى إما .git أو .cache أو تنتهي " "بـ .swp ." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" " استبعاد الملفات والمجلدات المخفية: \n" "\n" "في حالة التمكين ، سيتم استبعاد الملفات والمجلدات المخفية من قاعدة البيانات " " (أي جميع الملفات أو المجلدات التي تبدأ بحرف نقطة) ." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "ركز على أحد الإعدادات للحصول على وصف مفصل لما يفعله." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 #, fuzzy msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" " إضافة مجلد إلى قاعدة البيانات: \n" "\n" "يفتح هذا الزر مربع حوار حيث يمكنك تحديد المجلد الذي تريد تضمينه في قاعدة " "البيانات للبحث." #: src/fsearch_preferences.ui:1888 #, fuzzy msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" " إزالة الصف المحدد: \n" "\n" "يؤدي هذا إلى إزالة المجلد المحدد من قائمة المجلدات المضمنة." #: src/fsearch_preferences.ui:1905 #, fuzzy msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" " إضافة مجلد إلى قاعدة البيانات: \n" "\n" "يفتح هذا الزر مربع حوار حيث يمكنك تحديد المجلد الذي تريد تضمينه في قاعدة " "البيانات للبحث." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "مساعدة" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "اختر مجلد" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_اختر" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "مجلدات" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "نشط" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "مسار" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "اسم" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "استعلام فارغ" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d عناصر" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d عناصر" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "جاري الاستعلام ..." #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "فرز..." #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "فرز..." #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "عدد نتائج البحث" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "لا نتائج" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_ألغِ" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "فهرس:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "عدد المجلدات المحددة" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "عدد الملفات المحددة" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "إلغاء تحديث قاعدة البيانات" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "عدد عناصر قاعدة البيانات" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(فارغ)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "مصطلح البحث يحتوي على فواصل المسار.\n" "تم تنشيط البحث في المسار مؤقتًا لهذا المصطلح." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "حالة" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "مصطلح البحث يحتوي على فواصل المسار.\n" "تم تنشيط البحث في المسار مؤقتًا لهذا المصطلح." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "مسار" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "تعابير منطقية" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "حجم" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "النوع" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "تاريخ التعديل" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "نافذة جديدة" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "تحديث قاعدة البيانات" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "البحث في المسار" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "طابق حالة الأحرف" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "تمكين التعابير المنطقية (RegEx)" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "أظهر شريط الحالة" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "أظهر التصفية" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "اظهر زر البحث" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "حول" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "خروج" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "بحث" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "حدد عامل تصفية" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "هل تريد حقًا فتح %d ملف (ملفات)؟" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "جارِ فتح الملفات ..." #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "هل تريد حقًا إزالة %d ملف (ملفات)؟" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "جارِ حذف الملفات ..." #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "جارِ نقل الملفات إلى المهملات ..." #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "جارِ حذف الملفات ..." #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "جارِ نقل الملفات إلى المهملات ..." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "هل تريد حقًا فتح %d ملف (ملفات)؟" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "جارِ فتح الملفات ..." #: src/menus.ui:6 msgid "_File" msgstr "_مجلد" #: src/menus.ui:9 msgid "New Window" msgstr "نافذة جديدة" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_فتح" #: src/menus.ui:21 msgid "Open Folder" msgstr "فتح مجلد" #: src/menus.ui:29 msgid "Update Database" msgstr "تحديث قاعدة البيانات" #: src/menus.ui:35 msgid "Cancel Update" msgstr "إلغاء التحديث" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "نافذة جديدة" #: src/menus.ui:54 msgid "_Edit" msgstr "_تحرير" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_نسخ" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "_قص" #: src/menus.ui:69 msgid "Select All" msgstr "اختر الكل" #: src/menus.ui:74 msgid "Deselect All" msgstr "الغاء تحديد الكل" #: src/menus.ui:78 msgid "Invert Selection" msgstr "عكس التحديد" #: src/menus.ui:92 msgid "_View" msgstr "إظهار" #: src/menus.ui:109 msgid "_Search" msgstr "بحث" #: src/menus.ui:126 msgid "_Help" msgstr "مساعدة" #: src/menus.ui:171 msgid "Open _With" msgstr "فتح باستخدام" #: src/menus.ui:185 msgid "_Open Folder" msgstr "فتح مجلد" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "ارسال الى سلة المحذوفات" #, fuzzy #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "إضافة مسار ليتم تضمينه في قاعدة البيانات" #, fuzzy #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ " إضافة مجلد إلى قاعدة البيانات: \n" #~ "\n" #~ "يفتح هذا الزر مربع حوار حيث يمكنك تحديد المجلد الذي تريد تضمينه في قاعدة " #~ "البيانات للبحث." #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "مصطلح البحث يحتوي على أحرف كبيرة.\n" #~ "تم تنشيط Match Case مؤقتًا لهذا المصطلح." #~ msgid "page0" #~ msgstr "صفحة 0" #~ msgid "page1" #~ msgstr "صفحة 1" #~ msgid "page2" #~ msgstr "صفحة 2" #, fuzzy #~| msgid "page3" #~ msgid "page30" #~ msgstr "صفحة 3" #~ msgid "page18" #~ msgstr "صفحة 18" #, fuzzy #~| msgid "page3" #~ msgid "page31" #~ msgstr "صفحة 3" #, fuzzy #~| msgid "page3" #~ msgid "page32" #~ msgstr "صفحة 3" #, fuzzy #~| msgid "page3" #~ msgid "page33" #~ msgstr "صفحة 3" #, fuzzy #~| msgid "page3" #~ msgid "page34" #~ msgstr "صفحة 3" #, fuzzy #~| msgid "page5" #~ msgid "page35" #~ msgstr "صفحة 5" #, fuzzy #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ " المجلدات المضمنة: \n" #~ "\n" #~ "تحتوي هذه القائمة على جميع المجلدات التي تريد تضمينها في قاعدة البيانات.\n" #~ "\n" #~ "• نشط: في حالة التمكين ، سيتم تضمين المسار في قاعدة البيانات " #~ "التي سيتم البحث فيها.\n" #~ "• المسار: المسار الكامل المطلوب تضمينه.\n" #~ "• تحديث: هذا الإعداد مفيد إذا كنت تريد استبعاد مسارات معينة من " #~ "الوجود\n" #~ "تحديث (على سبيل المثال ، مسار إلى محرك أقراص USB بطيء لا يتغير كثيرًا) " #~ "" #, fuzzy #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ " إزالة الصف المحدد: \n" #~ "\n" #~ "يؤدي هذا إلى إزالة المجلد المحدد من قائمة المجلدات المضمنة." #~ msgid "Do you want to keep the window open?" #~ msgstr "هل تريد ابقاء النافذة مفتوحة" #~ msgid "_Copy Filepath" #~ msgstr "نسخ مسار ملف" #~ msgid "Update" #~ msgstr "تحديث" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d عناصر" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "آخر تحديث: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "حذف" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "الحد من عدد النتائج:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ " عدد النتائج المحدد: \n" #~ "\n" #~ "في حالة التمكين ، سيقتصر عدد نتائج البحث على الرقم المحدد.\n" #~ "\n" #~ "إن عرض الكثير من النتائج له تأثير كبير على الأداء ، خاصةً عندما لا يتم فرز " #~ "القائمة حسب الاسم. سيتم تحسين هذا في الإصدارات المستقبلية." #~ msgid "Background tasks are active." #~ msgstr "مهام الخلفية نشطة." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "إغلاق النافذة غير ممكن الآن.\n" #~ "من فضلك انتظر لحظة ثم حاول مرة أخرى." #~ msgid "label" #~ msgstr "طابع" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "انتقل إلى تحرير ← تفضيلات ← قاعدة بيانات وأضف بعض المواقع/المسارات" #~ msgid "page4" #~ msgstr "صفحة 4" #~ msgid "page6" #~ msgstr "صفحة 6" #~ msgid "page7" #~ msgstr "صفحة 7" #~ msgid "page8" #~ msgstr "صفحة 8" #~ msgid "page9" #~ msgstr "صفحة 9" #~ msgid "page10" #~ msgstr "صفحة 10" #~ msgid "page11" #~ msgstr "صفحة 11" #~ msgid "page12" #~ msgstr "صفحة 12" #~ msgid "page13" #~ msgstr "صفحة 13" #~ msgid "page14" #~ msgstr "صفحة 14" #~ msgid "page15" #~ msgstr "صفحة 15" #~ msgid "page16" #~ msgstr "صفحة 16" #~ msgid "page17" #~ msgstr "صفحة 17" #~ msgid "page19" #~ msgstr "صفحة 19" #~ msgid "page20" #~ msgstr "صفحة 20" #~ msgid "page21" #~ msgstr "صفحة 21" #~ msgid "page22" #~ msgstr "صفحة 22" #~ msgid "page23" #~ msgstr "صفحة 23" #~ msgid "page24" #~ msgstr "صفحة 24" #~ msgid "page25" #~ msgstr "صفحة 25" #~ msgid "page26" #~ msgstr "صفحة 26" #~ msgid "page27" #~ msgstr "صفحة27" #~ msgid "page28" #~ msgstr "صفحة 28" #~ msgid "page29" #~ msgstr "الصفحة 29" #~ msgid "system-search" #~ msgstr "نظام-بحث" fsearch-0.2.3/po/ber.po000066400000000000000000001075361446344336300147030ustar00rootroot00000000000000# Language ber translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-10-19 00:26+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Berber \n" "Language: ber\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.1-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "ⴼ-ⵙⵓⵔⵜⵛ" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "ⴰⵔⵣⵣⵓ;fsearch;ⵉⴼⵓⵢⵍⴰ;ⵉⵙⴷⴰⵡⵏ;ⴰⵥⴰⵡⴰⵏ;ⴰⴼⵉⴷⵢⵓ;ⵜⵉⵏⵜⴰⵎⵉⵏ;ⴰⴼ;ⵉⵎⵉⵙ;ⵎⴰⵕⵕⴰ;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "ⴰⴼⵔⴰⵏ..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "ⵓⴱⵓⵄⵍⵉ ⵃⴰⴽⵉⵎ" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "ⵙⵎⴰⵍ ⴰⴱⴰⵡ ⵏ ⵓⵔⵣⵣⵓ" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "ⵙⴷⵖⵉ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "ⵙⵎⴰⵍ ⵓⵎⵍⴰⵏ ⵏ ⵜⵍⵇⵇⵉⵎⵜ" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "ⴰⴽⵜⵓⵔ ⵏ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "ⵓⴽⵓⵙ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "ⴰⴼⵔⴰⵏ..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Single click to open" msgid "Failed to build open command" msgstr "ⴰⴷⵔ ⵢⴰⵏ ⵓⵎⴰⵕ ⴰⴼⴰⴷ ⴰⴷ ⵉⵕⵥⵎ" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Single click to open" msgid "Failed to get path" msgstr "ⴰⴷⵔ ⵢⴰⵏ ⵓⵎⴰⵕ ⴰⴼⴰⴷ ⴰⴷ ⵉⵕⵥⵎ" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Single click to open" msgid "Failed to get parent path" msgstr "ⴰⴷⵔ ⵢⴰⵏ ⵓⵎⴰⵕ ⴰⴼⴰⴷ ⴰⴷ ⵉⵕⵥⵎ" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "ⵉⵙⴷⴰⵡⵏ" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "ⵎⴰⵕⵕⴰ" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "ⵉⵙⴷⴰⵡⵏ" #: src/fsearch_filter.c:113 msgid "Files" msgstr "ⵉⴼⴰⵢⵍⵓⵜⵏ" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_ⵙⵔ" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_ⵡⴰⵅⵅⴰ" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "ⵉⵙⵎ" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "ⴰⵔⵣⵣⵓ ⴳ ⵓⴱⵔⵉⴷ" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "ⵉⵙⴷⴰⵡⵏ" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "ⴰⴽⵜⵓⵔ ⵏ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "ⴰⵢⴰ ⵓⵔ ⵉⵜⵜⴰⵙⵉ ⴰⵜⵜⴰⵙ." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "ⵓⴽⵜⵓⵔ ⵏ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "ⴰⴷⵔ ⵅ Ctrl + F ⴷ ⵜⴰⵡⵍⴷ ⵜⵜⴰⵔⵉⴷ" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "ⴰⵔⵎ ⵢⴰⵏ ⵓⵔⵣⵣⵓ ⵢⴰⴹⵏ" #: src/fsearch_overlay.ui:368 #, fuzzy msgid "Sorting results…" msgstr "ⴰⴼⵔⴰⵏ..." #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "ⵙ ⵙⵉⵏ ⵏ ⵡⴰⴷⴷⴰⵔⵏ" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "ⵙⵎⵥⵉ" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "ⵔⴳⵍ" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "ⴰⵎⴰⵜⴰⵢ:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "ⴰⴷⵔ ⵢⴰⵏ ⵓⵎⴰⵕ ⴰⴼⴰⴷ ⴰⴷ ⵉⵕⵥⵎ" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "ⵜⵉⵢⵓⴼⴰ:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 #, fuzzy msgid "Dialogs:" msgstr "ⵉⵎⵙⴰⵡⴰⵍⵏ" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "ⴰⵏⴳⵔⵓⴷⵎ" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "ⵔⵣⵓ ⴰⴷⴷⴰⵢ ⵜⵜⴰⵔⴰⴷ" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "ⵉⵙⴷⴰⵡⵏ" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Select a Filter" msgid "Edit selected filter" msgstr "ⵙⵜⵉ ⵢⴰⵏ ⵓⵙⵜⵜⴰⵢ" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "ⵙⴽⵏ ⴰⵙⵜⴰⵢ" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "ⵔⵣⵓ" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "ⵙⴷⵖⵉ" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "ⵙⵓⵎⵓ" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "ⴰⵎ. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "ⵜⴰⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_ⵜⵉⵡⵉⵙⵉ" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "ⵙⵜⵉ ⵢⴰⵏ ⵓⵙⴷⴰⵡ" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_ⵙⵜⵢ" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "ⵉⵙⴷⴰⵡⵏ" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "ⴰⴱⵔⵉⴷ" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "ⵕⵥⵎ (ⵉ)ⴰⴼⴰⵢⵍⵓ(ⵜⵏ)" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "ⵉⵙⵎ" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d ⵉⴼⵔⴷⴰⵙ" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d ⵉⴼⵔⴷⴰⵙ" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "ⴰⴼⵔⴰⵏ..." #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "ⴰⴼⵔⴰⵏ..." #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 ⵓⴼⵔⴷⵉⵙ" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_ⵙⵔ" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy #| msgid "Select folder" msgid "Number of selected folders" msgstr "ⵙⵜⵉ ⵢⴰⵏ ⵓⵙⴷⴰⵡ" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy #| msgid "Select a Filter" msgid "Number of selected files" msgstr "ⵙⵜⵉ ⵢⴰⵏ ⵓⵙⵜⵜⴰⵢ" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "ⵙⵔ ⴰⵙⴷⵖⵉ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(ⵡⴰⵍⵓ)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "ⴰⵎⴷⵢⴰ" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ⴰⴱⵔⵉⴷ" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "ⴰⴷⴷⵓⴷ" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "ⴰⵙⵔⵜⵓ" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "ⴰⵙⴰⴽⵓⴷ ⵉⵜⵜⵓⵙⵏⴼⵍⵏ" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "ⴼ-ⵙⵓⵔⵜⵛ" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "ⵜⴰⵣⵏⵓⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "ⵙⴷⵖⵉ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "ⴰⵔⵣⵣⵓ ⴳ ⵓⴱⵔⵉⴷ" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "ⵙⴽⵏ ⴰⵙⵜⴰⵢ" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "ⵙⵎⴰⵍ ⴰⴱⴰⵡ ⵏ ⵓⵔⵣⵣⵓ" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "ⵖⴼ" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "ⴼⴼⵖ" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "ⵔⵣⵓ…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "ⵙⵜⵉ ⵢⴰⵏ ⵓⵙⵜⵜⴰⵢ" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "ⵉⵙ ⵜⵔⵉⴷ ⴰⴷ ⵜⵕⵥⵎⴷ %d ⵉⴼⴰⵢⵍⵓⵜⵏ ⴰ ?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "ⴰⵕⵥⵥⵓⵎ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "ⵉⵙ ⵜⵔⵉⴷ ⴰⴷ ⵜⴽⴽⵙ %d (ⵉ)ⴰⴼⴰⵢⵍⵓ(ⵜⵏ)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "ⵓⴽⵓⵙ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "ⴰⵎⵓⵜⵜⵉ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ ⵙ ⵓⵚⵏⵏⴰⵊ…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "ⵓⴽⵓⵙ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "ⴰⵎⵓⵜⵜⵉ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ ⵙ ⵓⵚⵏⵏⴰⵊ…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "ⵉⵙ ⵜⵔⵉⴷ ⴰⴷ ⵜⵕⵥⵎⴷ %d ⵉⴼⴰⵢⵍⵓⵜⵏ ⴰ ?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "ⴰⵕⵥⵥⵓⵎ ⵏ ⵉⴼⴰⵢⵍⵓⵜⵏ…" #: src/menus.ui:6 msgid "_File" msgstr "_ⴰⴼⴰⵢⵍⵓ" #: src/menus.ui:9 msgid "New Window" msgstr "ⵜⴰⵣⵏⵓⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_ⵕⵥⵎ" #: src/menus.ui:21 msgid "Open Folder" msgstr "ⵕⵥⵎ ⴰⵙⴷⴰⵡ" #: src/menus.ui:29 msgid "Update Database" msgstr "ⵙⴷⵖⵉ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ" #: src/menus.ui:35 msgid "Cancel Update" msgstr "ⵙⵔ ⴰⵙⴷⵖⵉ" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "ⵜⴰⵣⵏⵓⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ" #: src/menus.ui:54 msgid "_Edit" msgstr "_ⵙⵏⴼⵍ" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_ⵙⵙⵏⵖⵍ" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "ⵙⵜⵉ ⵎⴰⵕⵕⴰ" #: src/menus.ui:74 msgid "Deselect All" msgstr "" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "_ⵥⵕ" #: src/menus.ui:109 msgid "_Search" msgstr "_ⴰⵔⵣⵣⵓ" #: src/menus.ui:126 msgid "_Help" msgstr "_ⵜⵉⵡⵉⵙⵉ" #: src/menus.ui:171 msgid "Open _With" msgstr "ⵕⵥⵎ_ⵙ" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_ⵕⵥⵎ ⴰⵙⴷⴰⵡ" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "ⵙⵉⵜⵜⵉ ⵙ_ⵓⵚⵏⵏⴰⵊ" #~ msgid "page0" #~ msgstr "ⵜⴰⵙⵏⴰ0" #~ msgid "page1" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~ msgid "page2" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "ⵜⴰⵙⵏⴰ0" #~ msgid "Do you want to keep the window open?" #~ msgstr "ⵉⵙ ⵜⵔⵉⴷ ⴰⴷ ⵜⴰⵊⵊⴷ ⴰⵙⴰⵜⵎ ⵉⵕⵥⵎ?" #~ msgid "_Copy Filepath" #~ msgstr "_ⵙⵙⵏⵖⵍ ⴰⴱⵔⵉⴷ ⵓⴼⴰⵢⵍⵓ" #~ msgid "Update" #~ msgstr "ⵙⴷⵖⵉ" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d ⵉⴼⵔⴷⴰⵙ" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "ⴰⵙⴷⵖⵉ ⴰⵎⴳⴳⴰⵔⵓ:%Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_ⴽⴽⵙ" #~ msgid "…" #~ msgstr "…" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "ⵜⴰⵙⵏⴰ1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "ⵜⴰⵙⵏⴰ0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "ⵜⴰⵙⵏⴰ0" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "ⵙⵙⵏⵖⵍ" #~ msgid "Add…" #~ msgstr "ⵔⵏⵓ…" #~ msgid "Remove" #~ msgstr "ⴽⴽⵙ" #, fuzzy #~| msgid "Enable" #~ msgid "Enable menubar" #~ msgstr "ⵙⵔⴼⵓ" #~ msgid "Move to Trash" #~ msgstr "ⵙⵉⵜⵜⵉ ⵙ ⵓⵚⵏⵏⴰⵊ" #~ msgid "Loading Database..." #~ msgstr "ⴰⴽⵜⵓⵔ ⵏ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ…" #~ msgid "..." #~ msgstr "..." #, fuzzy #~ msgid "Updating Database..." #~ msgstr "ⵓⴽⵜⵓⵔ ⵏ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ…" #~ msgid "Search..." #~ msgstr "ⵔⵣⵓ..." #~ msgid "Add" #~ msgstr "ⵔⵏⵓ" fsearch-0.2.3/po/bg.po000066400000000000000000002101341446344336300145100ustar00rootroot00000000000000# Bulgarian translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-05-08 23:15+0000\n" "Last-Translator: Kalam Mekhar \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.12.1\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "Търсене на файлове" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Инструмент за търсене, фокусиран върху висока производителност и разширени " "възможности" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "търсене;fsearch;файлове;папки;музика;видео;документи;намиране;инструмент;" "всичко;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Графично приложение за търсене на файлове" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch ви помага да намерите файлове и папки, възможно най- лесно и бързо. " "Просто, напишете няколко букви и резултатите от търсенето ще се появят почти " "моментално." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Има много функции, които правят търсенето възможно най -ефективно и мощно. " "Като:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Игнориране на резултата (напр. търсенето на „fsearch“ ще съвпадне и с " "„FSearch“)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Регулярни изрази" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Поддръжка на заместващи символи" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Поддръжка на филтри (напр. само търсене на аудио файлове)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Изключване на определени файлове и папки" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "Бързо сортиране по име, път, размер, дата на промяна и разширение" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Забележка: Поради пясъчника на Flatpak, FSearch не може да намери всеки файл " "във вашата система." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Стандартно оформление на потребителският интерфейс" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Оформлението да наподобява изгледа на Gnome" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Първоначално издание." #: src/fsearch.c:243 msgid "Saving…" msgstr "Запазване…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "cybercop (cybercop_montana@abv.bg)" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Инструмент за търсене, фокусиран върху висока производителност и разширени " "възможности" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Отваряне на нов прозорец на приложението" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Покажи настройките на програмата" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Задаване на шаблон за търсене" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Обновяване на базата с данни и изход" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Показване на информация за версията и изход" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Зареждане на папки…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Зареждане на файлове…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Сортиране…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Стартиране на десктоп файлове" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Неуспешно отваряне:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Стартиране на десктоп файлове" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Отваряне на нов прозорец на приложението" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Файлът не може да бъде отворен" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Стартиране на десктоп файлове" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Неуспешно отваряне:" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Стартиране на десктоп файлове" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Покажи настройките на програмата" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Стартиране на десктоп файлове" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Неуспешно отваряне:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Папка" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Неизвестен тип" #: src/fsearch_filter.c:111 msgid "All" msgstr "Всички" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Папки" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Файлове" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Програми" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Архиви" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Аудио" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Документи" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Снимки" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Видео" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Имената на макроси не трябва да съдържат символи `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Отказ" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_ОК" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Редактиране на филтър" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Име:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Уникалното име на този филтър" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Уникално име на филтър" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Търсене в пътя" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Активиране на регулярни изрази" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Случай на съвпадение" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Запитване:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Макрос:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Макросът за този филтър. Макросът ви позволява да получите достъп до този " "филтър от търсеният елемент, като напишете неговия текст, последван от ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Свойства…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Друга програма…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Базата с данни е празна" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Добавяне на папки" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Зареждане на базата с данни…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Това няма да отнеме много време." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Обновяване на Базата с данни…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Това може да отнеме известно време." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Няма задание" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Натиснете Ctrl + F и започнете да пишете" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Не са намерени резултати" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Опитайте с друго търсене" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Сортиране на резултатите…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Предпочитания" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Включване на тъмната тема" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Активиране на декорации от страна на клиента (изисква рестартиране)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Използване на бинарни единици вместо десетични" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Запомняне на размера на прозореца" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Излизане при Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "с преки пътища или елементи в менюто" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "с двойно кликване" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Поведение след успешно отваряне на файл:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Нищо" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Минимизиране" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Затваряне" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Общи:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Показване на маркираните думи за търсене" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Показване на подсказки" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Показване на икони в имената на колоните" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Запомняне конфигурацията на колоните" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Запомняне на реда на подреждане" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Отваряне на пътя с двойно кликване в колоната с пътя" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Отваряне с едно кликване" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Стартиране на десктоп файлове" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Резултати:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Показване на статуса на индексиране на базата с данни" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Лента на състоянието:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Показване на диалог за предупреждение, когато:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "файлът / папката не могат да бъдат отворени" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Диалози:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Интерфейс" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Търсене в пътя, когато заявката съдържа разделители" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Търсене по време на въвеждането" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Скриване на резултатите, когато заявката е празна" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Съвпадение на резултата, когато заявката съдържа поне една главна буква" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Добавяне на нов филтър" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Премахване на избраният филтър" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Редактиране на избраният филтър" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Възстановяване на филтрите по подразбиране" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Филтър:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Търсене" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Обновяване на базата с данни при стартиране" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Обновяване на всички" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "час (а) и" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "минута (и)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Добавяне на път, който ще бъде включен в базата с данни\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Премахване на избраният път" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Включване" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Добавянето на пътя ще бъде изключено от базата с данни" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Поддържа заместващи символи. Многократните записи трябва да бъдат разделени " "от ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Изключване на файлове:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "напр. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Изключване на скритите файлове и папки" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Изключване" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "База с данни" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Активиране на тъмна тема:\n" "\n" "Ако е включено, системната тема ще задава тъмен стил на приложенията (т.е " "тъмен интерфейс и светъл текст).\n" "\n" "Имайте предвид, че не всички системни теми имат тъмен вариант, така, че " "включването на тази настройка може да няма ефект." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Активиране на клиентска декорация:\n" "\n" "Ако е включено, полето за търсене и основното меню ще бъдат показвани в " "заглавието на прозореца.\n" "\n" "Ако е включено, основното меню е показано, като лента с менюта с полето за " "търсене под него.\n" "Това е по-традиционно оформление на потребителския интерфейс и отнема малко " "повече място." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Използване на бинарни единици, вместо десетични:(напр.\n" "\n" "Тази настройка определя, как да бъде показан файловият размер.\n" " \n" " Бинарни единици: Това се отнася до двоични IEC префикси (напр. 1 " "KiB = 1024 bytes)\n" " Десетични единици: Това се отнася до десетичните SI префикси " "(напр. 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Запомняне на размера на прозореца:\n" "\n" "Ако е активирано, размерът на прозореца от предишната сесия ще бъде " "възстановен, когато отворите прозорец на FSearch.\n" "\n" "Имайте предвид, че някои мениджъри на прозорци пренебрегват тази заявка и " "принуждават прозореца да има различен размер." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Поведение след успешно отваряне на файл:\n" "\n" "Когато файл/папка бъдат отворени успешно може да бъде изпълнено едно от " "следните действия:\n" " • Нищо: Нищо не се случва.\n" " • Минимизиране: Текущо избраният прозорец на FSearch ще бъде " "минимизиран.\n" " • Затваряне: Изход от FSearch.\n" "\n" "Можете да конфигурирате дали тези действия при отваряне на файла да се " "задействат с\n" " • клаваишна комбинация или елементите на менюто и/или\n" " • кликване с мишката" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Показване на маркирани думи за търсене:\n" "\n" "Ако е активирано, думите за търсене ще бъдат маркирани в изгледа с " "резултати. Например, когато търсите \"foo\", всички намерени foo в " "имената на файлове / папки ще бъдат маркирани с удебелени символи:\n" "\n" "\n" " foobar.txt\n" " file.foo\n" "\n" "Това също е приложимо за регулярни изрази и изрази със заместващи символи, " "започващи или завършващи със звездичка. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Показване на подсказки:\n" "\n" "Ако е активирано, изгледът с резултати ще покаже пълния път на фокусирания " "файл/папка в малък прозорец с подсказка." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Показване на икони в имената на колоните:\n" "\n" "Ако е активирано в имената на колоните ще бъдат показвани икони на файл/" "папка." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Заполни конфигурацията на колоните:\n" "\n" "Ако е активирано, конфигурацията на колоните на изгледа с резултатите от " "предходната сесия ще бъде възстановена, когато отново отворите прозореца на " "FSearch. Това включва размера и видомостта на всички колони." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Запомни реда на сортиране:\n" "\n" "Ако е активирано, редът на сортиране на изгледа с резултати от предишната " "сесия ще бъде възстановен, когато отворите прозореца на FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Отваряне на пътя при двойно кликване в колоната с пътя:\n" "\n" "Ако е активирано, при двойно кликване в колоната с пътя ще бъде отворен " "избраният път." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Единично кликване за отваряне:\n" "\n" "Ако е активирано, при еднократно кликване ще бъде отворен избраният файл/" "папка. Ако само искате да маркирате избраният файл/папка, докато тази " "настройка е активна, вие трябва да задържите Ctrl по времето, когато " "кликвате върху файла/папката." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Показване на състоянието на индексиране на базата данни: \n" "\n" "Ако е активирано, пътят, който в момента се индексира, се показва в лентата " "на състоянието." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Показване на диалог за предупреждение:\n" "\n" "Ако е активирано ще се покаже диалог за предупреждение, когато файл или " "папка не могат да бъдат отворени." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Търсене в пътя, когато заявката съдържа разделители на пътища:\n" "\n" "Ако е активирано, думите за търсене, съдържащи разделители на пътища (т.е. " "\"/\"), ще бъдат автоматично съпоставени с пълния път на файл или папка." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Съвпадение на регистър, когато заявката съдържа поне един главен знак:\n" "\n" "Ако е активирана, думите за търсене, съдържащи поне един главен регистър, ще " "задействат търсене, чувствително на малки и големи букви. Това означава, че " "термин за търсене като Foo ще съответства на FooBar.txt , " "но не и foobar.txt ." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Скриване на съдържанието, когато няма резултати от търсенето:\n" "\n" "Ако е активирано, нищо няма да се показва, когато няма резултати от " "търсенето.\n" "\n" "Ако е изключено, ще се показват всички файлове и папки, когато няма " "резултати от търсенето." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Търсене по време на въвеждане:\n" "\n" "Ако е активирано, резултатите от търсенето ще бъдат автоматично обновявани " "след натискането на всеки клавиш.\n" "\n" "Ако е изключено, търсенето ще бъде обновено само след натискане на Enter или на бутона за търсене. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Обновяване на базата с данни при стартиране\n" "\n" "Ако е активирано, базата с данни ще бъде обновена във фонов режим, когато " "стартирате FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Included folders:\n" #| "\n" #| "This list contains all folders you want to include in the database.\n" #| "\n" #| "\t• Active: If enabled, the path will included in the database to " #| "be searched in.\n" #| "\t• Path: The full path to be included.\n" #| "\t• One Filesystem: If enabled, FSearch won't cross filesystem " #| "boundraries for this folder" msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Изключени папки:\n" "\n" "Този списък съдържа всички папки, които искате да изключите от базата с " "данни за търсене.\n" "\n" " • Активно: Ако е активирано, пътят ще бъде изключен от базата с " "данни.\n" " • Път: Пълният път ще бъде изключен.\n" " • Една файлова система: Ако е активирано, FSearch няма да пресича " "границата на файловата система за тази папка" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Добавяне на на папка към базата с данни:\n" "\n" "Този бутон отваря диалог, където ще можете да изберете папка, която да " "добавите папка към базата с данни за търсене." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Премахване на избраният ред:\n" "\n" "Това премахва избраната папка от списъка с включените папки." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Изключени папки:\n" "\n" "Този списък съдържа всички папки, които искате да изключите от базата с " "данни за търсене.\n" "\n" " • Активно: Ако е активирано, пътят ще бъде изключен от базата с " "данни и не може да се извърши търсене в него.\n" " • Път: Пълният път ще бъде изключен." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Изключване на папка от базата с данни:\n" "\n" "Този бутон отваря диалог, където ще можете да изберете папка, която да " "изключите от базата с данни." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Премахване на избраният ред:\n" "\n" "Това премахва избраната папка от списъка с изключените папки." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Изключване на файлове и папки от базата с данни:\n" "\n" "Това е списък с файлове (или папки), разделени с двоеточие, които искате да " "изключите от базата данни. Например .git; .cache; *. Swp ще изключи " "всички файлове или папки, които се наричат .git или .cache " "или завършват с .swp ." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Изключване на скритите файлове и папки:\n" "\n" "Ако е активирано, скритите файлове и папки ще бъдат изключени от базата с " "данни (т.е. всички файлове или папки, които започват с точка)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Фокусирайте настройката, за да получите подробно описание на това, което " "прави." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Периодично обновяване на базата с данни в посочен времеви интервал:\n" "\n" "Ако е активирано и FSearch работи продължително време, базата с данни ще " "бъде обновява периодично в зададеният времеви интервал.\n" "\n" "Ако искате да актуализирате базата данни във фонов режим, дори когато " "FSearch не работи, трябва да използвате инструменти като cron или systemd " "таймери, за да задействате периодично актуализацията с:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Стартиране на десктоп файлове:\n" "\n" "Ако е активирано, активирането на файл .desktop ще стартира " "определеното приложение за този файл. По този начин FSearch може да действа " "като програма за стартиране на приложения. В противен случай .desktop " "файл ще бъде отворен с манипулатора по подразбиране за този тип файлове, " "който обикновено е текстов редактор." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Филтри:\n" "\n" "Това е списък с всички налични филтри. Филтърът е предварително дефинирано " "търсене.\n" "\n" " • Име:Уникален и описателен идентификатор за филтъра\n" " • Макрос: Като напишете текста на макроса, последван от ':' , можете " "да активирате филтъра при поискване\n" " • Запитване: Думата за търсене, по която трябва да се филтрира " "базата с данни" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Добавяне на нов филтър:\n" "\n" "Този бутон ще отвори диалог, където ще можете да редактирате новия филтър." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Премахване на избраният филтър:\n" "\n" "Този бутон премахва текущо избрания филтър." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Редактиране на избраният филтър:\n" "\n" "Този бутон ще отвори диалог, където ще можете да редактирате избрания филтър." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Възстановяване на филтрите по подразбиране:\n" "\n" "Този бутон ще възстанови стандартната конфигурация на филтрите.\n" "\n" "⚠ Всички филтри, които са създадени и редактирани от потребителят ще бъдат " "изгубени!⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Излизане при Escape:\n" "\n" "Ако е активирано, FSearch се затваря, когато се натисне клавишът Escape, " "вместо прозорецът да бъде минимизиран." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Помощ" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Избор на папка" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Избор" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Добавяне на филтър" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Активно" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Път" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Една файлова система" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Име" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Макрос" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Запитване" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d елемент" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d елемента" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Запитване…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Зареждане…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Сканиране…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Брой на резултатите от търсенето" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 елемента" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Отказ" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Индекс:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Брой на избраните папки" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Брой на избраните файлове" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Отказ от обновяването на базата" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Брой на елементите в базата с данни" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(празно)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Търсеният израз съдържа разделители.\n" "Търсене в пътя е временно активирано за този израз." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "Папка" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Търсеният израз съдържа разделители.\n" "Търсене в пътя е временно активирано за този израз." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "Път" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "Регулярен израз" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Размер" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Тип (файлово разширение)" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Разширение" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Дата на последна промяна" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can take a vew seconds with many results.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Сортирането по Тип може да отнеме няколко секунди с много " "резултати.\n" "\n" "Този ред на сортиране не е постоянен, той ще бъде нулиран, когато думата за " "търсене се промени." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "Търсене на файлове" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Нов прозорец" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Обновяване на базата с данни" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Търсене в Пътя" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Случай на съвпадение" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Включване на регулярни изрази" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Показване на лентата на състоянието" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Показване на филтър" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Показване на бутон за търсене" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Относно" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Изход" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Търсене…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Избор на Филтър" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Наистина ли искате да отворите %d файл (а)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Отваряне на Файл (ове)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Наистина ли искате да премахнете %d файл (а)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Изтриване на файловете…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Преместване на файловете в кошчето…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Изтриване на файловете…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Преместване на файловете в кошчето…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Наистина ли искате да отворите %d прозореца със свойствата на файла ?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Отваряне на свойствата на файла…" #: src/menus.ui:6 msgid "_File" msgstr "_Файл" #: src/menus.ui:9 msgid "New Window" msgstr "Нов прозорец" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Отваряне" #: src/menus.ui:21 msgid "Open Folder" msgstr "Отваряне на папка" #: src/menus.ui:29 msgid "Update Database" msgstr "Обновяване на базата с данни" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Отказ от обновяване" #: src/menus.ui:42 msgid "Close Window" msgstr "Затваряне на прозореца" #: src/menus.ui:54 msgid "_Edit" msgstr "_Редактиране" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Копиране" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "_Отрязване" #: src/menus.ui:69 msgid "Select All" msgstr "Избор на всички" #: src/menus.ui:74 msgid "Deselect All" msgstr "Премахване на цялата селекция" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Обръщане на селекцията" #: src/menus.ui:92 msgid "_View" msgstr "_Преглед" #: src/menus.ui:109 msgid "_Search" msgstr "_Търсене" #: src/menus.ui:126 msgid "_Help" msgstr "_Помощ" #: src/menus.ui:171 msgid "Open _With" msgstr "Отваряне с" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Отваряне на папка" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Копиране като текст" #: src/menus.ui:217 msgid "Path + Name" msgstr "Път + Име" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Преместване в кошчето" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Добавяне на път, който ще бъде включен в базата с данни\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Добавяне на папка към базата с данни:\n" #~ "\n" #~ " Този бутон ще отвори диалог, където ще можете " #~ "да изберете папка, която да бъде включена в базата с данни \n" #~ " за търсене.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Думата за търсене съдържа главни букви.\n" #~ "Точно съвпадение е временно активирано за този израз." #~ msgid "page0" #~ msgstr "страница0" #~ msgid "page1" #~ msgstr "страница1" #~ msgid "page2" #~ msgstr "страница2" #~ msgid "page30" #~ msgstr "страница30" #~ msgid "page18" #~ msgstr "страница18" #~ msgid "page31" #~ msgstr "страница31" #~ msgid "page32" #~ msgstr "страница32" #~ msgid "page33" #~ msgstr "страница33" #~ msgid "page34" #~ msgstr "страница34" #~ msgid "page35" #~ msgstr "страница35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Включени папки\n" #~ "\n" #~ " Този списък съдържа всички папки, които " #~ "искате да включите в базата с данни за търсене.\n" #~ "\n" #~ " • Активно: Ако е активирано, пътят ще " #~ "бъде включен в базата с данни за търсене.\n" #~ " • Път: Ще бъде включен пълният път.\n" #~ " • Обновяване: Тази настройка се " #~ "използва, ако искате да изключите някой от съществуващите пътища\n" #~ " от\n" #~ " обновяване (напр. път към бавно USB " #~ "устройство, което не се променя често)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Премахване на избраният ред:\n" #~ "\n" #~ " Това премахва избраната папка от списъка с " #~ "включените папки.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Искате ли да оставите прозореца отворен?" #~ msgid "_Copy Filepath" #~ msgstr "_Копиране на пътя до файла" #~ msgid "Building lookup list…" #~ msgstr "Изграждане на списък за търсене …" #~ msgid "Update" #~ msgstr "Обновяване" #~ msgid "≥%'d Items" #~ msgstr "≥%'d елемента" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Последно обновяване: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Изтриване" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Ограничаване броя на резултатите:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Ограничаване на броят на резултатите:\n" #~ "\n" #~ "Ако е активирано, броят на резултатите ще бъде ограничен до зададения " #~ "брой.\n" #~ "\n" #~ "Показването на много резултати има значително въздействие върху " #~ "производителността, особено когато списъкът не е сортиран по име. Това ще " #~ "бъде подобрено в бъдещи версии." #~ msgid "Background tasks are active." #~ msgstr "Задачите във фонов режим са активни." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Затварянето на прозореца не е възможно точно сега.\n" #~ "Моля, изчакайте малко и опитайте отново." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Отидете до Редактиране → Настройки → База с данни и добавете " #~ "желаните местоположения" #~ msgid "page4" #~ msgstr "страница4" #~ msgid "page6" #~ msgstr "страница6" #~ msgid "page7" #~ msgstr "страница7" #~ msgid "page8" #~ msgstr "страница8" #~ msgid "page9" #~ msgstr "страница9" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "страница1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "страница1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "страница0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "страница1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "страница0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "страница0" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Копиране" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Включване на тъмната тема може би няма да има ефект.\n" #~ "Някои платформи не поддържат тъмни теми, а други използват тъмни теми по " #~ "подразбиране." #~ msgid "Add…" #~ msgstr "Добавяне…" #~ msgid "Remove" #~ msgstr "Премахване" #~ msgid "Follow symbolic links" #~ msgstr "Следване на символните връзки" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "Информация: Опция \"Включи тъмната тема\" може да няма ефект,\n" #~ "защото не всяка GTK+ тема предлага тъмен вариант." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Включване на регулярни изрази" #~ msgid "Open Containing Folder" #~ msgstr "Отваряне на съдържащата папка" #~ msgid "Open File(s) in File Manager" #~ msgstr "Отваряне на файл (ове) във Файлов мениджър" #~ msgid "Move to Trash" #~ msgstr "Преместване в кошчето" #~ msgid "Show Menubar" #~ msgstr "Показване на лента с менюта" #~ msgid "Enable" #~ msgstr "Включване" #~ msgid "Loading Database..." #~ msgstr "Зареждане на базата с данни…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Обновяване на базата с данни..." #~ msgid "Add..." #~ msgstr "Добавяне..." #~ msgid "Search..." #~ msgstr "Търсене..." #~ msgid "Add" #~ msgstr "Добавяне" #~ msgid "files?" #~ msgstr "файловете?" #~ msgid "C_ut" #~ msgstr "Отрязване" fsearch-0.2.3/po/ca.po000066400000000000000000001072431446344336300145110ustar00rootroot00000000000000# Catalan translations for FSearch package. # Copyright (C) 2019 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2019. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta3.24-8ede-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2019-10-12 12:52+0000\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.9-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 #, fuzzy msgid "A file search application focusing on performance and advanced features" msgstr "" "Una eina de cerca caracteritzada pel seu rendiment i les prestacions " "avançades" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "Exclou els fitxers i les carpetes amagats" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "S’està carregant la base de dades…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Una eina de cerca caracteritzada pel seu rendiment i les prestacions " "avançades" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "Obre amb una altra aplicació" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Mostra el botó de cerca" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Actualitza la base de dades" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "S’està carregant la base de dades…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "S’estan suprimint els fitxers…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "S’està carregant la base de dades…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "Obre amb una altra aplicació" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Carpetes" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Tot" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Carpetes" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Fitxers" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "Una altra aplicació" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Nom" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Cerca al camí" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Fes concordar les majúscules" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "Una altra aplicació" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Base de dades buida" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Carpetes" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "S’està carregant la base de dades…" #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "Això pot trigar una estona." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "S’està actualitzant la base de dades…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Això pot trigar una estona." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Consulta buida" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Premeu Ctrl + F i comenceu a escriure" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "No s’ha trobat cap resultat" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Proveu de fer una cerca diferent" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferències" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Activa el tema fosc" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Utilitza unitats binàries en comptes d’unitats decimals" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Recorda la mida de la finestra" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Mostra els indicadors de funcions" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Mostra icones al nom de les columnes" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Recorda la configuració de les columnes" #: src/fsearch_preferences.ui:413 #, fuzzy msgid "Remember sort order" msgstr "Recorda la mida de la finestra" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "Actualitza la base de dades en iniciar" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "Mostra la barra d’estat" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interfície" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Cerca al camí quan la consulta inclogui separadors de camí" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Cerca mentre es tecleja" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Amaga els resultats si la cerca és buida" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "Cerca al camí quan la consulta inclogui separadors de camí" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Carpetes" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "Nombre de resultats de la cerca" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "Nombre de resultats de la cerca" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Mostra el filtre" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Cerca" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Actualitza la base de dades en iniciar" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Inclou" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Podeu fer servir comodins. Separeu diverses entrades amb un «;»" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Exclou els fitxers:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "p. ex., «.git;*.tmp»" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Exclou els fitxers i les carpetes amagats" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Exclou" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de dades" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_Ajuda" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "Seleccioneu un filtre" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "Desselecciona-ho tot" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Carpetes" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Camí" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Obre fitxers" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nom" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Consulta buida" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d elements" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elements" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "S’està carregant la base de dades…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Nombre de resultats de la cerca" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elements" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "Nombre de resultats de la cerca" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "Nombre de resultats de la cerca" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "Actualitza la base de dades en iniciar" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "Nombre de resultats de la cerca" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(buit)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "MAJÚSCULES" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "CAMÍ" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "EXPRESSIÓREGULAR" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Mida" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipus" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Data de modificació" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "Finestra nova" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "Actualitza la base de dades" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Cerca al camí" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Fes concordar les majúscules" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Activa les expressions regulars" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Mostra la barra d’estat" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Mostra el filtre" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Mostra el botó de cerca" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "Cerca" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Seleccioneu un filtre" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "Realment voleu suprimir" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "Obre fitxers" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Realment voleu suprimir" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "S’estan suprimint els fitxers…" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "S’estan enviant els fitxers a la paperera…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "S’estan suprimint els fitxers…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "S’estan enviant els fitxers a la paperera…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Realment voleu suprimir" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Obre fitxers" #: src/menus.ui:6 msgid "_File" msgstr "_Fitxer" #: src/menus.ui:9 msgid "New Window" msgstr "Finestra nova" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Obre" #: src/menus.ui:21 msgid "Open Folder" msgstr "Obre una carpeta" #: src/menus.ui:29 msgid "Update Database" msgstr "Actualitza la base de dades" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Finestra nova" #: src/menus.ui:54 msgid "_Edit" msgstr "_Edita" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copia" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "Desselecciona-ho tot" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desselecciona-ho tot" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverteix la selecció" #: src/menus.ui:92 msgid "_View" msgstr "_Visualitza" #: src/menus.ui:109 msgid "_Search" msgstr "_Cerca" #: src/menus.ui:126 msgid "_Help" msgstr "_Ajuda" #: src/menus.ui:171 msgid "Open _With" msgstr "O_bre amb" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Obre una carpeta" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Envia a la _paperera" #~ msgid "page0" #~ msgstr "pàgina0" #~ msgid "page1" #~ msgstr "pàgina1" #, fuzzy #~ msgid "page2" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "pàgina0" #~ msgid "_Copy Filepath" #~ msgstr "_Copia el camí del fitxer" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d elements" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Darrera actualització: %d %m %Y, %H:%M" #~ msgid "_Delete" #~ msgstr "_Suprimeix" #~ msgid "Limit number of results:" #~ msgstr "Limita el nombre de resultats:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Aneu a Edita ▸ Preferències ▸ Base de dades i afegiu algunes " #~ "ubicacions" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "pàgina1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "pàgina0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "pàgina0" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Copia" #~ msgid "Remove" #~ msgstr "Suprimeix" #~ msgid "Follow symbolic links" #~ msgstr "Segueix els enllaços simbòlics" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "Observeu: «Activa el tema fosc» pot no tenir cap efecte\n" #~ "perquè no tots els temes GTK inclouen versions fosques." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Activa les expressions regulars" #~ msgid "Open Containing Folder" #~ msgstr "Abre la carpeta contenidora" #~ msgid "Open File(s) in File Manager" #~ msgstr "Obre els fitxers al gestor de fitxers" #~ msgid "Move to Trash" #~ msgstr "Envia a la paperera" #~ msgid "Show Menubar" #~ msgstr "Mostra la barra de menús" #, fuzzy #~ msgid "Enable" #~ msgstr "Activa les expressions regulars" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "S’està carregant la base de dades…" #~ msgid "..." #~ msgstr "…" #~ msgid "Updating Database..." #~ msgstr "S’està actualitzant la base de dades…" #~ msgid "Search..." #~ msgstr "Cerca…" #~ msgid "Add" #~ msgstr "Afegeix" #~ msgid "files?" #~ msgstr "fitxers?" #~ msgid "C_ut" #~ msgstr "_Retalla" fsearch-0.2.3/po/de.po000066400000000000000000001517161446344336300145220ustar00rootroot00000000000000# German translations for FSearch package # German translation for FSearch. # Copyright (C) 2016 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-15 12:19+0000\n" "Last-Translator: Christian Boxdörfer \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Eine Dateisuche mit Schwerpunkt Geschwindigkeit und erweitertem " "Funktionsumfang" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "suchen;fsearch;Dateien;Ordner;Musik;Video;Dokumente;finden;Werkzeug;alles;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Ein grafisches Datei-Suchprogramm" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch hilft dabei, Dateien und Ordner so einfach und schnell wie möglich, " "zu finden. Die Ergebnisse aktualisieren sich umgehend mit jedem Buchstaben " "der eingegeben wird." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Um die Suche so effizient und nützlich wie möglich zu machen, werden unter " "anderem folgende Funktionen unterstützt:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Groß- und Kleinschreibung ignorieren (z.B. findet man mit \"fsearch\" auch " "\"FSearch\")" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Reguläre Ausdrücke" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Wildcard-Unterstützung" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filter (z.B. reduziere die Ergebnisse auf Audio-Dateien)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Bestimmte Dateien und Ordner ausschließen" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Schnelles Sortieren nach Name, Pfad, Größe, Änderungsdatum und Datei-" "Erweiterung" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Hinweis: Flatpak Anwendungen haben aufgrund einer Sandbox, keinen " "vollständigen Zugriff auf das Dateisystem. Daher kann FSearch nicht alle " "Dateien im System finden." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Die Standard-Oberfläche" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Eine Oberfläche die sich am GNOME Design orientiert" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Erste Veröffentlichung." #: src/fsearch.c:243 msgid "Saving…" msgstr "Speichere…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Christian Boxdörfer" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Eine Dateisuche mit Schwerpunkt Leistung und erweitertem Funktionsumfang" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Ein neues Anwendungsfenster öffnen" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Anwendungseinstellungen anzeigen" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Suchbegriff festlegen" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Datenbank aktualisieren und beenden" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Versionsinformationen anzeigen und beenden" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Lade Ordner …" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Lade Dateien …" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Sortiere …" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Error while opening folder" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Fehler beim Öffnen des Ordners" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "Fehler beim Erstellen des Öffnen-Kommandos" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Fehler beim Ausführen der Anwendung" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Anwendungs-Informationen sind nicht verfügbar" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Standard Display nicht verfügbar" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Error when removing file" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Fehler beim Entfernen der Datei" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Fehler beim Erstellen des Pfads" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Fehler beim Ausführen der Anwendung" #: src/fsearch_file_utils.c:259 #, fuzzy #| msgid "Error when getting information for content type" msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Fehler beim Laden des Dateityps" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Keine Standardanwendung bekannt" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Error when opening parent folder" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Fehler beim Öffnen des übergeordneten Ordners" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "Pfad konnte nicht erstellt werden" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Ordner" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Unbekannter Dateityp" #: src/fsearch_filter.c:111 msgid "All" msgstr "Alles" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Ordner" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Dateien" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Anwendungen" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archive" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumente" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Bilder" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Videos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Makro-Namen dürfen kein `:` Zeichen enthalten." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Abbrechen" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Filter bearbeiten" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Name:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Der eindeutige Name dieses Filters" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Eindeutiger Name des Filters" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Suche in Pfad" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Reguläre Ausdrücke" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Beachte Groß- und Kleinschreibung" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Suchanfrage:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Makro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Das Makro dieses Filters. Ein Makro erlaubt es den Filter im Such-" "Eingabefeld zu aktivieren, indem man dessen den Makro-Namen, gefolgt von " "einem ':' eingibt\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Eigenschaften…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Andere Anwendung …" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Leere Datenbank" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Ordner hinzufügen" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Lade Datenbank …" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Dies wird nicht lange dauern." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Aktualisiere Datenbank …" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Dies kann einige Zeit dauern." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Leere Suche" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Drücke Strg + F und tippe los." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Keine Ergebnisse gefunden" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Versuche eine andere Suche" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Sortiere Ergebnisse …" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Einstellungen" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Aktiviere dunkles Thema" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Aktiviere kombinierte Titel-/Menüleiste (benötigt Neustart)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "SI Dezimalpräfixe anstatt IEC Binärpräfixe verwenden" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Fenstergröße wiederherstellen" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Beim Betätigen von Escape die Anwendung beenden" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "mit Tastaturkürzeln oder Menüeinträgen" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "mit einem Doppelklick" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Verhalten nach erfolgreichem Öffnen eines Elementes:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nichts" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimieren" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Schließen" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Allgemein:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Suchbegriffe in der Ergebnisliste hervorheben" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Tooltips anzeigen" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Symbole in der Namensspalte anzeigen" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Spaltenkonfiguration wiederherstellen" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Sortierreihenfolge wiederherstellen" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Öffne Ordner mit Doppelklick in Pfad-Spalte" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Einfach-Klick zum Öffnen" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Desktop-Dateien aufrufen" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Ergebnisse:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Status der Indexierung anzeigen" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Statusleiste:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Zeige Warndialoge an, wenn:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "Datei / Verzeichnis konnte nicht geöffnet werden" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Dialoge:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Bedienoberfläche" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Pfad beachten, falls die Suche Pfadseparatoren enthält" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Suche beim Tippen starten" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Bei leerem Suchfeld nichts anzeigen" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Groß- und Kleinschreibung beachten, falls die Suche Großbuchstaben enthält" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Filter hinzufügen" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Gewählten Filter entfernen" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Ausgewählten Filter bearbeiten" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Standardfilter wiederherstellen" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filter:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Suche" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Datenbank beim Start aktualisieren" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Aktualisieren alle" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "Stunde(n) und" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "Minute(n)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Pfad zur Datenbank hinzufügen\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Gewählten Pfad entfernen" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Einschließen" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Pfad aus der Datenbank ausschließen" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Unterstützt Wildcards. Einträge müssen mit ';' getrennt werden" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Dateien ausschließen:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "z. B. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Versteckte Dateien und Ordner ausschließen" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Ausschließen" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Datenbank" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Dunkles Thema aktivieren:\n" "\n" "Wenn aktiviert wird das System-Thema gebeten, einen dunkleren Stil für die " "Anwendung zu benutzen(z.B. Dunkle UI Elemente auf hellem Text).\n" "\n" "Nicht alle System-Themen stellen eine solche dunklere Variante zur " "Verfügung, deshalb wird diese Option eventuell keinen Effekt haben." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Kombinierte Titel-/Menüleiste (CSD) aktivieren:\n" "\n" "Wenn aktiviert werden die Suchleiste und das Menü in der Fenster-Titelleiste " "angezeigt.\n" "\n" "Wenn deaktiviert wird das Menü als eine Menü-leiste mit der Suchleiste " "darunter angezeigt.\n" "Dies ähnelt einem traditionellen UI Layout und verbraucht ein wenig mehr " "Platz." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Binäre Einheiten statt dezimalen Einheiten verwenden:\n" "\n" "Diese Option kontrolliert wie Dateigrößen angezeigt werden.\n" "\n" "\t• Binäre Einheiten: Dies bezieht sich auf binäre IEC Präfixe (z." "B. 1 KiB = 1024 Bytes)\n" "\t• Dezimale Einheiten: Dies bezieht sich auf dezimale SI Präfixe " "(z.B. 1 kB = 1000 Bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Fenstergröße merken:\n" "\n" "Falls aktiviert, wird beim Öffnen eines FSearch Fensters die Fenstergröße " "der vorherigen Sitzung wiederhergestellt.\n" "\n" "Beachten Sie, dass einige Fenstermanager diese Anforderung ignorieren und " "eine andere Fenstergröße erzwingen." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Verhalten nach dem erfolgreichen Öffnen einer Datei:\n" "\n" "Wenn eine Datei oder ein Ordner erfolgreich geöffnet wurde, kann eine der " "folgenden Aktionen durchgeführt werden:\n" "\t• Nichts: Nichts unternehmen.\n" "\t• Minimieren: Das aktuelle FSearch-Fenster wird minimiert.\n" "\t• Schließen: FSearch beenden.\n" "\n" "Sie können auswählen, ob diese Aktion ausgelöst werden soll wenn die Datei " "geöffnet wurde durch\n" "\t• Tastenkombination oder Menüeintrag und/oder\n" "\t• Mausklick" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Suchbegriffe hervorheben:\n" "\n" "Falls aktiviert, werden Suchbegriffe in der Ergebnisansicht hervorgehoben. " "Falls beispielsweise nach \"foo\" gesucht wird, werden alle Vorkommnisse von " "foo in Datei- und Ordnernamen in Fettschrift dargestellt:\n" "\n" "\t\tfoobar.txt\n" "\t\tfile.foo\n" "\n" "Dies funktioniert ebenfalls bei regulären Ausdrücken und Platzhaltern, die " "mit einem Stern beginnen oder enden. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Tooltips anzeigen:\n" "\n" "Falls aktiviert, wird im Ergebnisfenster der vollständige Pfad der Datei / " "des Ordners unter dem Mauszeiger als Tooltip angezeigt." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Symbole in der Namensspalte anzeigen:\n" "\n" "Falls aktiviert, werden Datei/Ordner -Symbole in der Namensspalte angezeigt." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Spalteneinstellung merken:\n" "\n" "Wenn aktiviert, wird die Spalteneinstellung der vorherigen Sitzung wieder " "hergestellt wenn ein neues FSearch-Fenster geöffnet wird. Dies beinhaltet " "Größe und Sichtbarkeit aller Spalten." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Sortierreihenfolge merken:\n" "\n" "Falls aktiviert, wird die Sortierreihenfolge der vorherigen Sitzung " "wiederhergestellt, wenn ein neues FSearch-Fenster geöffnet wird." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Pfad per Doppelklick auf die Pfad-Spalte öffnen:\n" "\n" "Falls aktiviert, öffnet ein Doppelklick auf die Pfad-Spalte den ausgewählten " "Pfad." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Per Einzelklick öffnen:\n" "\n" "Falls aktiviert, wird die Datei / der Ordner durch einen einzelnen Klick " "geöffnet. Falls die Datei / der Ordner nur ausgewählt werden soll, während " "diese Einstellung aktiv ist, muss Ctrl während des Klickens gedrückt " "gehalten werden." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Indizierungsstatus anzeigen:\n" "\n" "Falls aktiviert, wird in der Statuszeile angezeigt welcher Pfad gerade " "indiziert wird." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Warndialoge anzeigen:\n" "\n" "Falls aktiviert, wird ein Warndialog angezeigt, wenn eine Datei oder ein " "Ordner nicht geöffnet werden kann." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "In Pfaden suchen, wenn die Suche einen Pfadseparator enthält:\n" "\n" "Wenn aktiviert wird bei Suchen, die einen Pfadseparator (z.B. \"/\") " "enthalten, automatisch der komplette Pfad der Datei oder des Ordners " "durchsucht." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Groß-/Kleinschreibung beachten wenn die Suche mindestens einen " "Großbuchstaben enthält:\n" "\n" "Falls aktiviert, wird bei Suchbegriffen, die mindestens einen Großbuchstaben " "enthalten, nach Groß-/Kleinschreibung unterschieden. Das bedeutet ein " "Suchbegriff wie Foo findet FooBar.txt aber nicht foobar." "txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Suchergebnisse verstecken wenn das Suchfeld leer ist:\n" "\n" "Falls aktiviert, werden bei leerem Suchfeld keine Ergebnisse angezeigt.\n" "\n" "Falls deaktiviert, werden alle Dateien und Ordner angezeigt, wenn das " "Suchfeld leer ist." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Suche beim Tippen starten:\n" "\n" "Falls aktiviert, wird die Suche bei jeder Zeicheneingabe aktualisiert.\n" "\n" "Falls deaktiviert, wird die Suche erst gestartet wenn Return gedrückt " "oder der Suchknopf angeklickt wird. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Datenbank beim Start aktualisieren:\n" "\n" "Falls aktiviert, wird die Datenbank nach dem Start von FSearch automatisch " "im Hintergrund aktualisiert." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Einbezogene Ordner:\n" "\n" "Liste der Ordner, die in die Datenbank aufgenommen werden sollen.\n" "\n" "\t• Aktiv: Falls aktiviert, wird der Ordner in die Datenbank " "aufgenommen und kann durchsucht werden.\n" "\t• Pfad: Der vollständige Pfad der in die Datenbank aufgenommen " "werden soll.\n" "\t• Ein-Dateisystem: Falls aktiviert, wird FSearch Ordner die auf " "einem anderen Dateisystem liegen ignorieren" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Ordner zur Datenbank hinzufügen:\n" "\n" "Öffnet einen Dialog, um einen Ordner auszuwählen der zur Datenbank " "hinzugefügt werden soll." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Auswählten Ordner entfernen:\n" "\n" "Entfernt den ausgewählten Ordner aus der Liste." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Ausgeschlossene Ordner:\n" "\n" "Liste der Ordner, die von der Suche ausgenommen werden sollen.\n" "\n" "\t• Aktiv: Falls aktiviert, wird der Ordner nicht in die Datenbank " "aufgenommen und kann nicht durchsucht werden.\n" "\t• Pfad: Der vollständige Pfad der ausgenommen werden soll." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Ordner von Datenbank ausschliessen:\n" "\n" "Öffnet einen Dialog, um Ordner von der Datenbank auszuschliessen." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Auswahl entfernen:\n" "\n" "Entfernt den ausgewählten Ordner aus der Liste der ausgeschlossenen Ordner." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Dateien und Ordner aus der Datenbank ausschliessen:\n" "\n" "Eine durch Semikolon getrennte Liste von Dateien oder Ordnern, die von der " "Datenbank ausgenommen werden sollen. Beispielsweise wird .git;.cache;*." "swp alle Dateien oder Ordner namens .git oder .cache " "ausschliessen, oder solche die auf .swp enden." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Versteckte Dateien und Ordner ausschließen:\n" "\n" "Falls aktiviert, werden versteckte Dateien und Ordner aus der Datenbank " "ausgeschlossen (d.h. alle Dateien und Ordner deren Namen mit einem " "Punkt . beginnt)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Positionieren Sie den Mauszeiger über einer Einstellung, um eine " "detaillierte Beschreibung zu erhalten." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Periodisches Aktualisieren der Datenbank in einem bestimmten " "Zeitintervall:\n" "\n" "Wenn aktiviert und solange FSearch läuft wird die Datenbank periodisch im " "angegebenen Zeitintervall aktualisiert.\n" "\n" "Wenn Sie die Datenbank im Hintergrund aktualisieren möchten, selbst wenn " "FSearch gerade nicht läuft, sollten Sie Werkzeuge wie cron oder systemd-" "Timer verwenden, um die Aktualisierung periodisch auszulösen:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Desktop-Dateien ausführen:\n" "\n" "Falls aktiviert, wird die zu einer .desktop Datei zugehörige " "Anwendung ausgeführt. FSearch funktioniert somit wie ein Anwendungsstarter. " "Falls deaktiviert, wird die .desktop Datei von der zugehörigen " "Standardanwendung geöffnet, welche in den meisten Fällen ein Text-Editor ist." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filter:\n" "\n" "Dies ist eine Liste aller verfügbaren Filter. Ein Filter entspricht einer " "vorgefertigten Suchanfrage.\n" "\n" "\t• Name: Ein eindeutiger Name der den Filter beschreibt\n" "\t• Makro: Durch das Tippen dieses Texts im Suchfeld, gefolgt von " "einem ':', wird der Filter ausgeführt\n" "\t• Query: Die Suchanfrage die bei der Aktivierung dieses Filters " "ausgeführt werden soll" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Einen neuen Filter hinzufügen:\n" "\n" "Öffnet einen Dialog, mit dem ein neuer Filter erstellt werden kann." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Ausgewählten Filter entfernen:\n" "\n" "Entfernt den ausgewählten Filter." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Ausgewählten Filter bearbeiten:\n" "\n" "Öffnet einen Dialog, mit dem der ausgewählte Filter bearbeitet werden kann." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Standardfilter wiederherstellen:\n" "\n" "Dies stellt die Standardkonfiguration der Filter wieder her.\n" "\n" "⚠ Alle Filter die manuell bearbeitet oder hinzugefügt wurden, werden hiermit " "gelöscht! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Anwendung bei der Betätigung von Escape beenden:\n" "\n" "Falls aktiviert, wird FSearch beim Betätigen der Escape Taste vollständig " "beendet und nicht nur minimiert." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Hilfe" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Ordner auswählen" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Auswählen" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Filter hinzufügen" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktiv" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Pfad" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Einzelnes Dateisystem" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Name" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Makro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Suche" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d Eintrag" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Einträge" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Suche …" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Lade …" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Scanne …" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Anzahl der Suchergebnisse" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Einträge" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "Abbrechen" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indexierung:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Anzahl der ausgewählten Ordner" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Anzahl der ausgewählten Dateien" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Aktualisierung abbrechen" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Anzahl der Datenbankeinträge" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(leer)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Suche enthält Großbuchstaben.\n" "Beachte Groß- und Kleinschreibung wurde automatisch für diese Abfrage " "aktiviert." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "GROẞ-/Klein" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Suche enthält Pfadseparatoren.\n" "Suche in Pfad wurde automatisch für diese Abfrage aktiviert." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "PFAD" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Größe" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Typ" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Erweiterung" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Geändert am" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Sortieren nach Typ kann unter Umständen einige Sekunden dauern.\n" "\n" "Diese Sortierreihenfolge wird außerdem bei der nächsten Suche zurückgesetzt." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch im Internet" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Spenden" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Fehlerberichte und Funktionsanfragen" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub Sponsors" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Neues Fenster" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Datenbank aktualisieren" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Suche in Pfad" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Beachte Groß- und Kleinschreibung" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Aktiviere RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Zeige Statusleiste" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Zeige Filter" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Suchschaltfläche anzeigen" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Über" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Beenden" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Suche …" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Wähle einen Filter" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Möchten Sie wirklich %d Datei(en) öffnen?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Öffne Datei(en) …" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Möchten Sie wirklich %d Datei(en) löschen?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Lösche Elemente …" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Verschiebe Elemente in den Papierkorb …" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Ein Fehler ist augetreten." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "Lösche %d Datei(en)." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "Verschiebe %d Datei(en) in den Papierkorb." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "Die Änderungen werden erst nach einer Datenbankaktualisierung erkannt. Dies " "wird mit einem zukünftigen Update behoben." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Möchten Sie wirklich %d Dateieigenschaften öffnen?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Öffne Dateieigenschaften…" #: src/menus.ui:6 msgid "_File" msgstr "_Datei" #: src/menus.ui:9 msgid "New Window" msgstr "Neues Fenster" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Öffnen" #: src/menus.ui:21 msgid "Open Folder" msgstr "Ordner öffnen" #: src/menus.ui:29 msgid "Update Database" msgstr "Datenbank aktualisieren" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Aktualisierung abbrechen" #: src/menus.ui:42 msgid "Close Window" msgstr "Fenster schließen" #: src/menus.ui:54 msgid "_Edit" msgstr "_Bearbeiten" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopieren" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "_Ausschneiden" #: src/menus.ui:69 msgid "Select All" msgstr "Alles auswählen" #: src/menus.ui:74 msgid "Deselect All" msgstr "Auswahl aufheben" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Auswahl umkehren" #: src/menus.ui:92 msgid "_View" msgstr "_Ansicht" #: src/menus.ui:109 msgid "_Search" msgstr "_Suche" #: src/menus.ui:126 msgid "_Help" msgstr "_Hilfe" #: src/menus.ui:171 msgid "Open _With" msgstr "Öffnen _mit" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Ordner _öffnen" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Als Text kopieren" #: src/menus.ui:217 msgid "Path + Name" msgstr "Pfad + Name" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "In den Papierkorb verschieben" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Pfad zur Datenbank hinzufügen\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Pfad zu Datenbank hinzufügen:\n" #~ "\n" #~ "Öffnet einen Dialog, mit dem ein Ordner zur Suchdatenbank hinzugefügt " #~ "werden kann.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Suche enthält Großbuchstaben.\n" #~ "GROẞ-/Klein wurde automatisch für diese Abfrage aktiviert." #~ msgid "page0" #~ msgstr "page0" #~ msgid "page1" #~ msgstr "page1" #~ msgid "page2" #~ msgstr "page2" #~ msgid "page30" #~ msgstr "page30" #~ msgid "page18" #~ msgstr "page18" #~ msgid "page31" #~ msgstr "page31" #~ msgid "page32" #~ msgstr "page32" #~ msgid "page33" #~ msgstr "page33" #~ msgid "page34" #~ msgstr "page34" #~ msgid "page35" #~ msgstr "page35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Einbezogene Ordner:\n" #~ "\n" #~ "Diese Liste enthält diejenigen Ordner, die in die Datenbank einbezogen " #~ "werden sollen.\n" #~ "\n" #~ "\t• Aktiv: Falls aktiviert, wird der Pfad in die Suchdatenbank " #~ "aufgenommen.\n" #~ "\t• Pfad: Der vollständige Pfad, der einbezogen werden soll.\n" #~ "\t• Aktualisieren: Mit dieser Einstellung können bestimmte Pfade " #~ "von der Aktualisierung ausgenommen werden (z.B. der Pfad zu einem " #~ "langsamen USB Laufwerk, dessen Inhalt sich selten ändert).\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Ausgewählten Pfad entfernen:\n" #~ "\n" #~ "Entfernt den ausgewählten Ordner aus der Liste der Ordner, die in der " #~ "Datenbank enthalten sind.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Möchten Sie das Fenster offen lassen?" #~ msgid "_Copy Filepath" #~ msgstr "Pfad kopieren" #~ msgid "Building lookup list…" #~ msgstr "Nachschlageliste erstellen …" #~ msgid "Update" #~ msgstr "Aktualisieren" #~ msgid "≥%'d Items" #~ msgstr "≥%'d Einträge" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Zuletzt aktualisiert: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Löschen" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Anzahl der Ergebnisse beschränken:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Anzahl der Ergebnisse beschränken:\n" #~ "\n" #~ "Falls aktiviert, wird die Anzahl der Suchergebnisse auf die angegebene " #~ "Anzahl beschränkt.\n" #~ "\n" #~ "Das Anzeigen vieler Ergebnisse hat einen signifikanten Einfluss auf die " #~ "Geschwindigkeit, vor allem wenn die Liste nicht nach Namen sortiert ist. " #~ "Dies wird in zukünftigen Versionen verbessert werden." #~ msgid "Background tasks are active." #~ msgstr "Hintergrundaufgaben sind aktiv." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Ein Schließen des Fensters ist im Moment nicht möglich.\n" #~ "Bitte warten Sie einen Moment und versuchen Sie es dann erneut." #~ msgid "label" #~ msgstr "Bezeichnung" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Gehe zu Bearbeiten → Einstellungen → Datenbank und füge einige " #~ "Ordner zur Überwachung hinzu" #~ msgid "page4" #~ msgstr "page4" #~ msgid "page6" #~ msgstr "page6" #~ msgid "page7" #~ msgstr "page7" #~ msgid "page8" #~ msgstr "page8" #~ msgid "page9" #~ msgstr "page9" #~ msgid "page10" #~ msgstr "page10" #~ msgid "page11" #~ msgstr "page11" #~ msgid "page12" #~ msgstr "page12" #~ msgid "page13" #~ msgstr "page13" #~ msgid "page14" #~ msgstr "page14" #~ msgid "page15" #~ msgstr "page15" #~ msgid "page16" #~ msgstr "page16" #~ msgid "page17" #~ msgstr "page17" #~ msgid "page19" #~ msgstr "page19" #~ msgid "page20" #~ msgstr "page20" #~ msgid "page21" #~ msgstr "page21" #~ msgid "page22" #~ msgstr "page22" #~ msgid "page23" #~ msgstr "page23" #~ msgid "page24" #~ msgstr "page24" #~ msgid "page25" #~ msgstr "page25" #~ msgid "page26" #~ msgstr "page26" #~ msgid "page27" #~ msgstr "page27" #~ msgid "page28" #~ msgstr "page28" #~ msgid "page29" #~ msgstr "page29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Kopieren" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Aktiviere dunkles Thema hat unter Umständen keine Auswirkungen.\n" #~ "Einige Plattformen unterstützen kein dunkles Erscheinungsbild oder " #~ "verwenden dies bereits standardmäßig." #~ msgid "Add…" #~ msgstr "Hinzufügen…" #~ msgid "Remove" #~ msgstr "Entfernen" #~ msgid "Follow symbolic links" #~ msgstr "Folge symbolischen Links" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Aktiviere dunkles Thema\" könnte keinen Effekt haben,\n" #~ "da nicht jedes GTK+ Thema über eine dunkle Version verfügt." #~ msgid "Enable menubar" #~ msgstr "Menüleiste anzeigen" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "INFO: FSearch muss neu gestartet werden um die Anzeige der Menüleiste zu " #~ "ändern.\n" #~ msgid "Open Containing Folder" #~ msgstr "Beinhaltenden Ordner öffnen" #~ msgid "Open File(s) in File Manager" #~ msgstr "Datei(en) in Dateimanager öffnen" #~ msgid "Move to Trash" #~ msgstr "In den Papierkorb verschieben" #~ msgid "Show Menubar" #~ msgstr "Zeige Menüleiste" #~ msgid "Enable" #~ msgstr "Aktivieren" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Lade Datenbank…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Aktualisiere Datenbank..." #~ msgid "Search..." #~ msgstr "Suche..." #~ msgid "Add" #~ msgstr "Hinzufügen" #~ msgid "files?" #~ msgstr "Elemente wirklich entfernen?" #~ msgid "C_ut" #~ msgstr "Auss_chneiden" #~ msgid "Selected Folder and Files" #~ msgstr "Markierte Ordner und Dateien" fsearch-0.2.3/po/el.po000066400000000000000000001405171446344336300145270ustar00rootroot00000000000000# Greek translations for FSearch package. # Copyright (C) 2016 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-06-20 18:14+0000\n" "Last-Translator: lepa22 \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.13.1-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Μια εφαρμογή αναζήτησης αρχείων που επικεντρώνεται στις επιδόσεις και τις " "προηγμένες δυνατότητες" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Μια εφαρμογή αναζήτησης αρχείων με γραφικό περιβάλλον" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "To FSearch σας βοηθά να βρείτε αρχεία και φακέλους με όσο το δυνατόν πιο " "εύκολα και γρήγορα. Απλώς πληκτρολογείστε μερικά γράμματα και τα " "αποτελέσματα της αναζήτησης θα εμφανιστούν σχεδόν ακαριαία." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Υπάρχουν πολλά χαρακτηριστικά που κάνουν την αναζήτηση όσο το δυνατόν " "αποτελεσματική και ισχυρή. Όπως:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Αγνόηση πεζών-κεφαλαίων (π.χ. κάνοντας αναζήτηση για \"fsearch\" θα " "ταιριάξει και το \"FSearch\" επίσης)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Υποστήριξη φίλτρων (π.χ. αναζήτηση μόνο για αρχεία ήχου)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Αποκλεισμός συγκεκριμένων αρχείων και φακέλων" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Γρήγορη ταξινόμηση κατά όνομα, διαδρομή, μέγεθος, χρόνο τροποποίησης και " "επέκταση" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Σημείωση: Εξαιτίας του sandboxing του Flatpak, το FSearch δεν είναι δυνατό " "να βρει κάθε αρχείο στο σύστημά σας." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Μια διαρρύθμιση που ακολουθεί πιο πιστά το στυλ του GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 msgid "Saving…" msgstr "Αποθήκευση…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Ευχαριστίες στον μεταφραστή" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Μια εφαρμογή αναζήτησης που δίνει έμφαση στις επιδόσεις και τα προηγμένα " "χαρακτηριστικά" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Άνοιγμα νέου παραθύρου εφαρμογής" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Εμφάνιση των προτιμήσεων της εφαρμογής" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Ορισμός μοτίβου (pattern) αναζήτησης" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Ενημέρωση της βάσης δεδομένων και έξοδος" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Εμφάνιση πληροφοριών έκδοσης και έξοδος" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Φόρτωση φακέλων…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Φόρτωση αρχείων…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ταξινόμηση…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Αποτυχία ανοίγματος:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Άνοιγμα νέου παραθύρου εφαρμογής" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Αποτυχία ανοίγματος αρχείου" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Αποτυχία ανοίγματος:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Εμφάνιση των προτιμήσεων της εφαρμογής" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Αποτυχία ανοίγματος:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Φάκελος" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Άγνωστος τύπος" #: src/fsearch_filter.c:111 msgid "All" msgstr "Όλα" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Φάκελοι" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Αρχεία" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Εφαρμογές" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Αρχειοθετημένα" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Ήχοι" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Έγγραφα" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Εικόνες" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Βίντεο" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" "Τα ονόματα μακροεντολών δεν επιτρέπεται να περιέχουν τον χαρακτήρα `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Άκυρο" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Τροποποίηση φίλτρου" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Όνομα:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Το μοναδικό όνομα αυτού του φίλτρου" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Μοναδικό όνομα φίλτρου" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Αναζήτηση στη διαδρομή" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Ταίριασμα πεζών-κεφαλαίων" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Ερώτημα:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Μακροεντολή:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Η μακροεντολή για αυτό το φίλτρο. Μια μακροεντολή σας επιτρέπει την πρόσβαση " "σε αυτό το φίλτρο από την είσοδο αναζήτησης πληκτρολογώντας το κείμενό της " "ακολουθούμενο από ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Ιδιότητες…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Άλλη Εφαρμογή…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Κενή βάση δεδομένων" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Προσθήκη φακέλων" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Φόρτωση βάσης δεδομένων…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Αυτό δεν θα πάρει πολύ χρόνο." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Η βάση δεδομένων ενημερώνεται…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Αυτό μπορεί να πάρει λίγο χρόνο." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Κενό ερώτημα" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Πίεσε Ctrl + F και ξεκίνα να πληκτρολογείς" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Δε βρέθηκαν αποτελέσματα" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Δοκίμασε διαφορετική αναζήτηση" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Ταξινόμηση αποτελεσμάτων…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Προτιμήσεις" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Ενεργοποίηση σκοτεινού θέματος" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" "Ενεργοποίηση διακοσμήσεων παραθύρου από την πλευρά του πελάτη (client-side " "decorations) (απαιτείται επανεκκίνηση)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Χρήση δυαδικών μονάδων αντί δεκαδικών μονάδων" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Απομνημόνευση μεγέθους παραθύρου" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Έξοδος στο Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "με συντομεύσεις πληκτρολογίου ή καταχωρήσεις μενού" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "με διπλό κλικ" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Συμπεριφορά μετά το επιτυχές άνοιγμα ενός αρχείου:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Τίποτα" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Ελαχιστοποίηση" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Κλείσιμο" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Γενικά:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Εμφάνιση επισημασμένων όρων αναζήτησης" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Εμφάνιση επεξηγήσεων" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Εμφάνιση εικονιδίων στη στήλη ονόματος" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Απομνημόνευση διαμόρφωσης στηλών" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Απομνημόνευση σειράς ταξινόμηση" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Άνοιγμα διαδρομής με διπλό κλικ στη στήλη διαδρομής" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Μονό κλικ για άνοιγμα" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Αποτελέσματα:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Εμφάνιση κατάστασης ευρετηρίου βάσης δεδομένων" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Γραμμή κατάστασης:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Εμφάνιση προειδοποιητικών διαλόγων όταν:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "Το άνοιγμα του αρχείου / φακέλου απέτυχε" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Διάλογοι:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Διεπαφή" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Αναζήτηση στη διαδρομή όταν το ερώτημα περιέχει διαχωριστές διαδρομής" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Αναζήτηση κατά την πληκτρολόγηση" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Απόκρυψη αποτελεσμάτων όταν η αναζήτηση είναι κενή" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Ταίριασμα πεζών-κεφαλαίων όταν το ερώτημα περιέχει τουλάχιστον έναν κεφαλαίο " "χαρακτήρα" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Προσθήκη νέου φίλτρου" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Αφαίρεση επιλεγμένου φίλτρου" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Επεξεργασία επιλεγμένου φίλτρου" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Επαναφορά προεπιλεγμένων φίλτρων" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Φίλτρο:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Αναζήτηση" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Ενημέρωση της βάσης δεδομένων κατά την εκκίνηση" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Ενημέρωση κάθε" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "ώρα(ες) και" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "λεπτό(ά)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Αφαίρεση επιλεγμένης διαδρομής" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Συμπερίλαβε" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Προσθήκη διαδρομής που θα εξαιρείτε από τη βάση δεδομένων" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Υποστηρίζονται wildcards. Πολλαπλές εισαγωγές πρέπει να διαχωρίζονται με ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Απόκλεισε αρχεία:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "π.χ. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Αποκλεισμός κρυφών αρχείων και φακέλων" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Απόκλεισε" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Βάση δεδομένων" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" " Ενεργοποίηση σκοτεινού θέματος: \n" "\n" "Εάν είναι ενεργοποιημένο, ζητείται από το θέμα του συστήματος να " "χρησιμοποιήσει ένα πιο σκούρο στυλ για την εφαρμογή (δηλ. Σκοτεινά " "στοιχεία διεπαφής χρήστη σε φωτεινό κείμενο) .\n" "\n" "Λάβετε υπόψη ότι δεν παρέχουν όλα τα θέματα συστήματος μια πιο σκοτεινή " "παραλλαγή, επομένως η ενεργοποίηση αυτής της ρύθμισης ενδέχεται να μην έχει " "αποτέλεσμα." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" " Χρήση δυαδικών μονάδων αντί δεκαδικών μονάδων:\n" "\n" "Αυτές οι ρυθμίσεις ελέγχουν τον τρόπο εμφάνισης του μεγέθους αρχείων.\n" "\n" "\t• Δυαδικές μονάδες: Αυτό αναφέρεται σε δυαδικά προθέματα IEC (π." "χ. 1 KiB = 1024 byte)\n" "\t• Δεκαδικές μονάδες: Αυτό αναφέρεται σε δεκαδικά προθέματα SI (π." "χ. 1 kB = 1000 byte)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" " Εμφάνιση κατάστασης ευρετηρίου βάσης δεδομένων:\n" "\n" "Εάν είναι ενεργοποιημένη, η διαδρομή που βρίσκεται αυτήν τη στιγμή στο " "ευρετήριο εμφανίζεται στη γραμμή κατάστασης." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" " Εμφάνιση παραθύρων προειδοποίησης:\n" "\n" "Εάν είναι ενεργοποιημένο, εμφανίζεται ένα παράθυρο προειδοποίησης όταν ένα " "αρχείο ή φάκελος απέτυχε να ανοίξει." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Εστιάστε σε μια ρύθμιση για να λάβετε μια λεπτομερή περιγραφή του τι κάνει." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Βοήθεια" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Επιλογή φακέλου" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Επιλογή" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Προσθήκη φίλτρου" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Ενεργό" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Διαδρομή" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Ένα σύστημα αρχείων" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Όνομα" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Eρώτημα" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d Αντικείμενο" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Αντικείμενα" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Φόρτωση…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Σάρωση…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Αριθμός αποτελεσμάτων αναζήτησης" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Αντικείμενα" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Άκυρο" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Ευρετήριο:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Αριθμός επιλεγμένων φακέλων" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Αριθμός επιλεγμένων αρχείων" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Ακύρωση ενημέρωσης βάσης δεδομένων" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Αριθμός αντικειμένων από τη βάση δεδομένων" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(κενό)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Ο όρος αναζήτησης περιέχει διαχωριστικά διαδρομής.\n" "Η Αναζήτηση σε Διαδρομή ενεργοποιήθηκε προσωρινά για αυτόν τον όρο." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "ΠΕΖΑ-ΚΕΦΑΛΑΙΑ" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Ο όρος αναζήτησης περιέχει διαχωριστικά διαδρομής.\n" "Η Αναζήτηση σε Διαδρομή ενεργοποιήθηκε προσωρινά για αυτόν τον όρο." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ΔΙΑΔΡΟΜΗ" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Μέγεθος" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Τύπος" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Ημερομηνία τροποποίησης" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Νέο παράθυρο" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Ενημέρωση βάσης δεδομένων" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Αναζήτηση στη διαδρομή" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Ταίριασμα πεζών-κεφαλαίων" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Ενεργοποίηση RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Εμφάνιση γραμμής κατάστασης" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Εμφάνιση φίλτρου" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Εμφάνιση κουμπιού αναζήτησης" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Περί" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Έξοδος" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Αναζήτηση…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Επιλογή φίλτρου" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Θέλετε πραγματικά να ανοίξετε %d αρχείο(α);" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Άνοιγμα αρχείου(ων)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Θέλετε πραγματικά να αφαιρέσετε %d αρχείο(α);" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Διαγραφή αρχείων…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Μετακίνηση αρχείων στον κάδο απορριμμάτων…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Διαγραφή αρχείων…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Μετακίνηση αρχείων στον κάδο απορριμμάτων…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Θέλετε πραγματικά να ανοίξετε %d παράθυρα ιδιοτήτων αρχείου;" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Άνοιγμα ιδιοτήτων αρχείου…" #: src/menus.ui:6 msgid "_File" msgstr "_Αρχείο" #: src/menus.ui:9 msgid "New Window" msgstr "Νέο παράθυρο" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Άνοιγμα" #: src/menus.ui:21 msgid "Open Folder" msgstr "Άνοιγμα φακέλου" #: src/menus.ui:29 msgid "Update Database" msgstr "Ενημέρωση βάσης δεδομένων" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Ακύρωση ενημέρωσης" #: src/menus.ui:42 msgid "Close Window" msgstr "Κλείσιμο Παραθύρου" #: src/menus.ui:54 msgid "_Edit" msgstr "_Επεξεργασία" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Αντιγραφή" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Α_ποκοπή" #: src/menus.ui:69 msgid "Select All" msgstr "Επιλογή όλων" #: src/menus.ui:74 msgid "Deselect All" msgstr "Αποεπιλογή όλων" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Αντιστροφή επιλογής" #: src/menus.ui:92 msgid "_View" msgstr "_Προβολή" #: src/menus.ui:109 msgid "_Search" msgstr "_Αναζήτηση" #: src/menus.ui:126 msgid "_Help" msgstr "_Βοήθεια" #: src/menus.ui:171 msgid "Open _With" msgstr "Άνοιγμα _Με" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Άνοιγμα φακέλου" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Μετακίνηση στα απορρίματα" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Προσθήκη διαδρομής που θα συμπεριληφθεί στη βάση δεδομένων\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Ο όρος αναζήτησης περιέχει κεφαλαίους χαρακτήρες.\n" #~ "Το Ταίριασμα πεζών/κεφαλαίων ενεργοποιήθηκε προσωρινά για αυτόν " #~ "τον όρο." #~ msgid "page0" #~ msgstr "σελίδα0" #~ msgid "page1" #~ msgstr "σελίδα1" #~ msgid "page2" #~ msgstr "σελίδα2" #~ msgid "page30" #~ msgstr "σελίδα30" #~ msgid "page18" #~ msgstr "σελίδα18" #~ msgid "page31" #~ msgstr "σελίδα31" #~ msgid "page32" #~ msgstr "σελίδα32" #~ msgid "page33" #~ msgstr "σελίδα33" #~ msgid "page34" #~ msgstr "σελίδα34" #~ msgid "page35" #~ msgstr "σελίδα35" #~ msgid "Do you want to keep the window open?" #~ msgstr "Θέλετε να κρατήσετε το παράθυρο ανοιχτό;" #~ msgid "_Copy Filepath" #~ msgstr "_Αντιγραφή τοποθεσίας αρχείου" #~ msgid "Update" #~ msgstr "Ενημέρωση" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d Αντικείμενα" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Τελευταία ενημέρωση: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Διαγραφή" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Περιορισμός του αριθμού των αποτελεσμάτων:" #~ msgid "Background tasks are active." #~ msgstr "Οι εργασίες παρασκηνίου είναι ενεργές." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Το κλείσιμο του παραθύρου δεν επιτρέπετε αυτήν την στιγμή.\n" #~ "Παρακαλώ περιμένετε και προσπαθήστε ξανά." #~ msgid "label" #~ msgstr "ετικέτα" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Πήγαινε στο Επεξεργασία → Προτιμήσεις → Βάση δεδομένων και " #~ "πρόσθεσε μερικές τοποθεσίες" #~ msgid "page4" #~ msgstr "σελίδα4" #~ msgid "page6" #~ msgstr "σελίδα6" #~ msgid "page7" #~ msgstr "σελίδα7" #~ msgid "page8" #~ msgstr "σελίδα8" #~ msgid "page9" #~ msgstr "σελίδα9" #~ msgid "page10" #~ msgstr "σελίδα10" #~ msgid "page11" #~ msgstr "σελίδα11" #~ msgid "page12" #~ msgstr "σελίδα12" #~ msgid "page13" #~ msgstr "σελίδα13" #~ msgid "page14" #~ msgstr "σελίδα14" #~ msgid "page15" #~ msgstr "σελίδα15" #~ msgid "page16" #~ msgstr "σελίδα16" #~ msgid "page17" #~ msgstr "σελίδα17" #~ msgid "page19" #~ msgstr "σελίδα19" #~ msgid "page20" #~ msgstr "σελίδα20" #~ msgid "page21" #~ msgstr "σελίδα21" #~ msgid "page22" #~ msgstr "σελίδα22" #~ msgid "page23" #~ msgstr "σελίδα23" #~ msgid "page24" #~ msgstr "σελίδα24" #~ msgid "page25" #~ msgstr "σελίδα25" #~ msgid "page26" #~ msgstr "σελίδα26" #~ msgid "page27" #~ msgstr "σελίδα27" #~ msgid "page28" #~ msgstr "σελίδα28" #~ msgid "page29" #~ msgstr "σελίδα29" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Αντιγραφή" #~ msgid "Remove" #~ msgstr "Αφαίρεση" #~ msgid "Follow symbolic links" #~ msgstr "Ακολούθησε συμβολικές συνδέσεις" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: Η \"Ενεργοποίηση σκοτεινού θέματος\" μπορεί να μην έχει " #~ "αποτέλεσμα,\n" #~ "καθώς δεν παρέχουν όλα τα GTK+ θέματα σκοτεινή έκδοση." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Ενεργοποίηση RegEx" #~ msgid "Open Containing Folder" #~ msgstr "Άνοιγμα περιέχοντος φακέλου" #~ msgid "Open File(s) in File Manager" #~ msgstr "Άνοιγμα αρχείου(ων) στον διαχειριστή αρχείων" #~ msgid "Move to Trash" #~ msgstr "Μετακίνηση στα απορρίματα" #~ msgid "Show Menubar" #~ msgstr "Εμφάνιση γραμμής μενού" #, fuzzy #~ msgid "Enable" #~ msgstr "Ενεργοποίηση RegEx" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Φόρτωση βάσης δεδομένων..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Η βάση δεδομένων ενημερώνεται..." #~ msgid "Search..." #~ msgstr "Αναζήτηση..." #~ msgid "Add" #~ msgstr "Προσθήκη" #~ msgid "files?" #~ msgstr "αρχεία;" #~ msgid "C_ut" #~ msgstr "Α_ποκοπή" #~ msgid "Selected Folder and Files" #~ msgstr "Επιλεγμένοι φάκελοι και αρχεία" fsearch-0.2.3/po/en_GB.po000066400000000000000000001460121446344336300150750ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-15 12:19+0000\n" "Last-Translator: Christian Boxdörfer \n" "Language-Team: English (United Kingdom) \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "A file search application focusing on performance and advanced features" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "A graphical file search application" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Regular expressions" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Wildcard support" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filter support (e.g. only search for audio files)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Exclude certain files and folders" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "Fast sort by name, path, size, modification time and extension" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "The default UI layout" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "A layout more closely following GNOME HIGs" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Initial release." #: src/fsearch.c:243 msgid "Saving…" msgstr "Saving…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Christian Boxdörfer" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "A search utility focusing on performance and advanced features" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Open a new application window" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Show the application preferences" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Set the search pattern" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Update the database and exit" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Print version information and exit" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Loading folders…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Loading files…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Sorting…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Error while opening folder" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Error while opening folder" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "Failed to build open command" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Error when launching desktop file" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Failed to get application information" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Failed to get default display" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Error when removing file" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Error when removing file" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Failed to get path" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Error when launching desktop file" #: src/fsearch_file_utils.c:259 #, fuzzy #| msgid "Error when getting information for content type" msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Error when getting information for content type" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "No default application registered" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Error when opening parent folder" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Error when opening parent folder" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "Failed to get parent path" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Folder" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Unknown Type" #: src/fsearch_filter.c:111 msgid "All" msgstr "All" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Folders" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Files" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Applications" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archives" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documents" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Pictures" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Videos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Macro names must not contain `:` characters." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Cancel" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Edit filter" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Name:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "The unique name of this filter" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Unique filter name" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Search in path" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Enable regular expressions" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Match case" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Query:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Macro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Properties…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Other Application…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Empty Database" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Add folders" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Loading database…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "This won't take long." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Updating database…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "This may take a while." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Empty Query" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Press Ctrl + F and start typing." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "No Results Found" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Try a different search" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Sorting results…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferences" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Enable dark theme" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Enable client-side decorations (requires restart)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Use binary units instead of decimal units" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Remember window size" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Exit on Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "with keyboard shortcuts or menu entries" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "with double click" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Behaviour after successfully opening a file:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nothing" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimize" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Close" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "General:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Show highlighted search terms" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Show tooltips" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Show icons in name column" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Remember column configuration" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Remember sort order" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Open path with double click in path column" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Single click to open" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Launch desktop files" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Results:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Show database indexing status" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Statusbar:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Show warning dialogs when:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "file / folder failed to open" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Dialogues:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interface" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Search in path when query contains path separators" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Search as you type" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Hide results when search is empty" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "Match case when query contains at least one upper case character" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Add new filter" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Remove selected filter" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Edit selected filter" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Restore default filters" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filter:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Search" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Update database on start" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Update every" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "hour(s) and" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minute(s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Add path to be included in database\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Remove selected path" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Include" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Add path to be excluded from database" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Supports wildcards. Multiple entries must be separated by ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Exclude files:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "e.g. ‘.git;*.tmp’" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Exclude hidden files and folders" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Exclude" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Database" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. ‘/’) will be " "automatically matched against the full path of a file or folder." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Focus a setting to get a detailed description of what it does." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Help" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Select folder" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Select" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Add filter" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Active" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Path" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "One Filesystem" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Name" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Macro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Query" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d Item" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Items" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Querying…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Loading…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Scanning…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Number of search results" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Items" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "Cancel" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Index:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Number of selected folders" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Number of selected files" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Cancel database update" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Number of database items" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(empty)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASE" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "PATH" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Size" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Type" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extension" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Date Modified" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch Online" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Donate" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Bug Reports and Feature Requests" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub Sponsors" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "New window" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Update database" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Search in Path" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Match Case" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Enable RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Show Statusbar" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Show Filter" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Show search button" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "About" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Quit" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Search…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Select a filter" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Do you really want to open %d file(s)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Opening Files…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Do you really want to remove %d file(s)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Deleting files…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Moving files to trash…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Something went wrong." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "Deleted %d file(s)." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "Moved %d file(s) to the trash." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Do you really want to open %d file property windows?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Opening file properties…" #: src/menus.ui:6 msgid "_File" msgstr "_File" #: src/menus.ui:9 msgid "New Window" msgstr "New Window" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Open" #: src/menus.ui:21 msgid "Open Folder" msgstr "Open Folder" #: src/menus.ui:29 msgid "Update Database" msgstr "Update Database" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Cancel Update" #: src/menus.ui:42 msgid "Close Window" msgstr "Close window" #: src/menus.ui:54 msgid "_Edit" msgstr "_Edit" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copy" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Cu_t" #: src/menus.ui:69 msgid "Select All" msgstr "Select All" #: src/menus.ui:74 msgid "Deselect All" msgstr "Deselect All" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Invert Selection" #: src/menus.ui:92 msgid "_View" msgstr "_View" #: src/menus.ui:109 msgid "_Search" msgstr "_Search" #: src/menus.ui:126 msgid "_Help" msgstr "_Help" #: src/menus.ui:171 msgid "Open _With" msgstr "Open _With" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Open Folder" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copy as Text" #: src/menus.ui:217 msgid "Path + Name" msgstr "Path + Name" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Move to _Trash" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Add path to be included in database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Add folder to database:\n" #~ "\n" #~ " This button opens a dialog where you can select a " #~ "folder you want to include in the database for\n" #~ " searching.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Search term contains upper case characters.\n" #~ "Match Case was temporarily activated for this term." #~ msgid "page0" #~ msgstr "page0" #~ msgid "page1" #~ msgstr "page1" #~ msgid "page2" #~ msgstr "page2" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "page0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "page1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "page0" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #, fuzzy #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Do you want to keep the window open?" #~ msgid "_Copy Filepath" #~ msgstr "_Copy Filepath" #~ msgid "Building lookup list…" #~ msgstr "Building lookup list…" #~ msgid "Update" #~ msgstr "Update" #~ msgid "≥%'d Items" #~ msgstr "≥%'d Items" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Last updated: %d/%m/%Y %H:%M" #~ msgid "_Delete" #~ msgstr "_Delete" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Limit number of results:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgid "Background tasks are active." #~ msgstr "Background tasks are active." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "Go to Edit → Preferences → Database and add some locations" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "page0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "page1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "page0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "page1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "page0" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Copy" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgid "Add…" #~ msgstr "Add…" #~ msgid "Remove" #~ msgstr "Remove" #~ msgid "Follow symbolic links" #~ msgstr "Follow symbolic links" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgid "Enable menubar" #~ msgstr "Enable menubar" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgid "Open Containing Folder" #~ msgstr "Open Containing Folder" #~ msgid "Open File(s) in File Manager" #~ msgstr "Open File(s) in File Manager" #~ msgid "Move to Trash" #~ msgstr "Move to Trash" #~ msgid "Show Menubar" #~ msgstr "Show Menubar" #~ msgid "Enable" #~ msgstr "Enable" fsearch-0.2.3/po/es.po000066400000000000000000001600621446344336300145330ustar00rootroot00000000000000# Spanish translations for FSearch package # Spanish translation for FSearch. # Copyright (C) 2016 Pavel Milanes, CO7WT # This file is distributed under the same license as the FSearch package. # , 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-06-02 07:17+0000\n" "Last-Translator: Arturo \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.13-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Herramienta de búsqueda centrada en la velocidad y con prestaciones avanzadas" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "buscar;fsearch;archivos;carpetas;música;video;documentos;encontrar;" "herramienta;todo;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Una aplicación gráfica para buscar archivos" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch le ayuda a encontrar archivos y carpetas de la forma más fácil y " "rápida posible. Solo tiene que escribir unas cuantas letras y los resultados " "de la búsqueda aparecerán casi al instante." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Hay un montón de características que hacen que la búsqueda sea lo más " "eficiente y potente posible. Por ejemplo:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignorar mayúsculas y minúsculas (p. ej., la búsqueda de «fsearch» coincidirá " "con «FSearch»)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Expresiones regulares" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Admitir caracteres comodín" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Admitir filtros (p. ej., para buscar solo archivos de audio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Excluir determinados archivos y carpetas" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Ordenación rápida por nombre, ruta, tamaño, fecha de modificación y extensión" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Nota: debido al aislamiento de Flatpak, FSearch no puede encontrar todos los " "archivos del sistema." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "El diseño de la interfaz por defecto" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Un diseño más cercano a las directrices de GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "La versión inicial." #: src/fsearch.c:243 msgid "Saving…" msgstr "Guardando…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" "Arturo Martínez\n" "Eugenio Monforte\n" "Toni Estévez" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Una herramienta de búsqueda rápida con prestaciones avanzadas" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Abrir una ventana nueva de la aplicación" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Mostrar las preferencias de la aplicación" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Definir el patrón de búsqueda" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Actualizar la base de datos y salir" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Mostrar información de la versión y salir" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Cargando carpetas…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Cargando archivos…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ordenando…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Iniciar archivos del escritorio" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "No se pudo abrir:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Iniciar archivos del escritorio" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Abrir una ventana nueva de la aplicación" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "No pudo abrirse el archivo" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Iniciar archivos del escritorio" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "No se pudo abrir:" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Iniciar archivos del escritorio" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Mostrar las preferencias de la aplicación" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Iniciar archivos del escritorio" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "No se pudo abrir:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Carpeta" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tipo desconocido" #: src/fsearch_filter.c:111 msgid "All" msgstr "Todo" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Carpetas" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Archivos" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Aplicaciones" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archivadores" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documentos" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Imágenes" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Vídeos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Los nombres de las macros no deben contener caracteres `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "Cancelar" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Sí" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Editar filtro" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Nombre:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "El nombre único de este filtro" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Nombre del filtro único" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Buscar en la ruta" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Habilitar expresiones regulares" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Distinguir mayúsculas y minúsculas" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Consulta:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Macro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "La macro para este filtro. Una macro le permite acceder a este filtro desde " "la entrada de búsqueda al escribir su texto seguido de ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Propiedades…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Otra aplicación…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Base de datos vacía" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Añadir carpetas" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Cargando la base de datos…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Esta acción no llevará mucho tiempo." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Actualizando la base de datos…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Esta acción puede demorar un rato." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Consulta vacía" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Presione Ctrl + F y comience a escribir" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "No se ha encontrado ningún resultado" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Pruebe con otra búsqueda" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Ordenando los resultados…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferencias" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Activar tema oscuro" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Habilitar Client Side Decoration (requiere reinicio)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Utilizar unidades binarias en lugar de decimales" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Recordar tamaño de la ventana" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Salir con Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "Con atajos del teclado o entradas de menú" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "Con doble clic" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Comportamiento tras abrir un archivo con éxito:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nada" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimizar" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Cerrar" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "General:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Mostrar términos de búsqueda resaltado" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Mostrar descripciones emergentes" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Mostrar iconos en la columna Nombre" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Recordar configuración de columnas" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Recuerde el orden de clasificación" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Abrir ruta con doble clic en la columna Ruta" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Abrir con un clic" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Iniciar archivos del escritorio" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Resultados:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Mostrar el estado del indexado de la base de datos" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Barra de estado:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Mostrar advertencias cuando:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "No se pudo abrir archivo / carpeta" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Diálogos:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interfaz" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Buscar en la ruta cuando la consulta tenga separadores de ruta" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Buscar mientras escribe" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Ocultar resultados cuando la búsqueda esté vacía" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Coincidencia de mayúsculas y minúsculas cuando la consulta contiene al menos " "un carácter en mayúsculas" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Agregar nuevo filtro" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Eliminar el filtro seleccionado" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Editar filtros seleccionados" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Restaurar los filtros predeterminados" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filtro:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Buscar" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Actualizar base de datos al inicio" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Actualizar cada" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "hora(s) y" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minuto(s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Agregar ruta para ser incluido en la base de datos\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Eliminar la ruta seleccionada" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Incluir" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Agregar ruta para ser excluida de la base de datos" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Admite comodines. Separe las entradas mediante «;»" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Excluir archivos:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "p. ej., «.git;*.tmp»" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Excluir archivos y carpetas ocultos" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Excluir" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de datos" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Activar tema oscuro:\n" "\n" "Si está habilitado, se pide al tema del sistema que utilice un estilo más " "oscuro para la aplicación (es decir, elementos de interfaz de usuario " "oscuros en texto brillante).\n" "\n" "Tenga en cuenta que no todos los temas del sistema proporcionan una variante " "más oscura, por lo que habilitar esta configuración podría no tener efecto." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Habilitar Client Side Decorations:\n" "\n" "Si está activada, la entrada de búsqueda y el menú principal se muestran en " "la barra de título de la ventana.\n" "\n" "Si está desactivado, el menú principal se muestra como una barra de menús " "con la entrada de búsqueda debajo de él.\n" "Esto se asemeja a un diseño de interfaz de usuario más traditonal y toma un " "poco más de espacio." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Utilizar unidades binarias en lugar de unidades decimales:\n" "\n" "Esta configuración controla cómo se muestran los tamaños de archivo.\n" "\n" "\t• Unidades binarias: Esto se refiere a los prefijos binarios (p. " "ej. 1 KiB = 1024 bytes)\n" "\t• Unidades decimales: Esto se refiere a los prefijos del SI (p. " "ej. 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Recordar tamaño de la ventana:\n" "\n" "Si está habilitado, el tamaño de la ventana de la sesión anterior se " "restaurará al abrir una ventana de FSearch.\n" "\n" "Tenga en cuenta que algunos administradores de ventanas ignoran esta " "solicitud y fuerzan la ventana a tener un tamaño diferente." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Comportamiento después de abrir correctamente un archivo:\n" "\n" "Cuando se abre correctamente un archivo/carpeta, se puede realizar una de " "las siguientes acciones:\n" "\t• Nada: No sucede nada.\n" "\t• Minimizar: La ventana de FSearch actualmente seleccionada se " "minimiza.\n" "\t• Cerrar: Salir de FSearch.\n" "\n" "Puede configurar si esas acciones deben activarse cuando se abre el archivo " "con\n" "\t• atajos de teclado o entradas de menú y/o\n" "\t• clic del ratón" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Mostrar términos de búsqueda resaltado:\n" "\n" "Si está habilitado, los términos de búsqueda se resaltarán en la vista de " "resultados. Por ejemplo, al buscar \"fu\" todas las apariciones de fu " "en los nombres de archivos/carpetas se resaltarán con caracteres en " "negrita:\n" "\n" "\tfulano.txt\n" "\tarchivo.fu\n" "\n" "Esto también funciona para expresiones regulares y expresiones comodín que " "comienzan o terminan con un asterisco. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Mostrar descripciones emergentes:\n" "\n" "Si está habilitada, la vista de resultados mostrará la ruta de acceso " "completa del archivo/carpeta enfocado en una pequeña ventana de información " "emergente." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Mostrar iconos en la columna Nombre:\n" "\n" "Si está habilitado, los iconos de archivos/carpetas se mostrarán en la " "columna Nombre." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Recordar configuración de columnas:\n" "\n" "Si está habilitada, la configuración de columnas de la vista de resultados " "de la sesión anterior se restaurará al abrir una ventana de FSearch. Esto " "incluye el tamaño y la visibilidad de todas las columnas." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Recuerde el orden de clasificación:\n" "\n" "Si está habilitada, el ordenamiento de la vista de resultados de la sesión " "anterior se restaurará cuando abra una nueva ventanda de FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Abrir ruta con doble clic en la columna Ruta:\n" "\n" "Si está habilitado, al hacer doble clic en la columna de ruta se abrirá la " "ruta seleccionada." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Abrir con un clic:\n" "\n" "Si está habilitado, un solo clic abrirá el archivo/carpeta seleccionado. Si " "solo desea seleccionar un archivo/carpeta mientras esta configuración está " "activa, debe mantener presionada la tecla Ctrl al mismo tiempo " "mientras hace clic en el archivo/carpeta." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Mostrar el estado del indexado de la base de datos:\n" "\n" "Si está habilitada, la ruta de acceso que se está indexando actualmente se " "muestra en la barra de estado." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Mostrar advertencias:\n" "\n" "Si está habilitado, se mostrará un cuadro de diálogo de advertencia cuando " "un archivo o carpeta no se pudo abrir." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Buscar en la ruta cuando la consulta tenga separadores de ruta:\n" "\n" "Si está habilitado, los términos de búsqueda que contienen separadores de " "ruta (p. ej. \"/\") se compararán automáticamente con la ruta completa de un " "archivo o carpeta." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Coincidir mayúsculas y minúsculas cuando la consulta contiene al menos un " "carácter en mayúsculas:\n" "\n" "Si está habilitado, los términos de búsqueda que contengan al menos un " "carácter en mayúscula provocará una búsqueda sensible a mayúsculas y " "minúsculas. Esto significa que un término de búsqueda como Fu " "coincidirá con Fulano.txt pero no fulano.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ocultar resultados cuando la búsqueda esté vacía:\n" "\n" "Si está habilitado, no se muestra ningún resultado de búsqueda cuando la " "entrada de búsqueda esté vacía.\n" "\n" "Si está deshabilitada, todos los archivos y carpetas se mostrarán cuando la " "entrada de búsqueda esté vacía." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Buscar mientras escribe:\n" "\n" "Si está habilitado, la búsqueda se actualiza automáticamente con cada " "pulsación de tecla.\n" "\n" "Si está deshabilitada, la búsqueda solo se actualiza cuando presiona " "Enter o presiona el botón de búsqueda. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Actualizar base de datos al inicio:\n" "\n" "Si está habilitada, la base de datos se actualizará automáticamente en " "segundo plano al iniciar FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Included folders:\n" #| "\n" #| "This list contains all folders you want to include in the database.\n" #| "\n" #| "\t• Active: If enabled, the path will included in the database to " #| "be searched in.\n" #| "\t• Path: The full path to be included.\n" #| "\t• One Filesystem: If enabled, FSearch won't cross filesystem " #| "boundraries for this folder" msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Carpetas incluidas:\n" "\n" "Esta lista contiene todas las carpetas que desea incluir en la base de " "datos.\n" "\n" "\t• Activo: Si está habilitada, la ruta de acceso se incluirá en la " "base de datos y se podrá buscar en ella.\n" "\t• Ruta: La ruta completa para ser incluida.\n" "\t• Sistema de archivos único: Si está habilitado, FSearch no cruzará " "los límites del sistema de archivos para esta carpeta" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Incluir carpeta en la base de datos:\n" "\n" "Este botón abre un cuadro de diálogo donde puede seleccionar una carpeta que " "desea incluir en la base de datos para la búsqueda." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Eliminar la fila seleccionada:\n" "\n" "Esto elimina la carpeta seleccionada de la lista de carpetas incluidas." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Carpetas excluidas:\n" "\n" "Esta lista contiene todas las carpetas que desea excluir de la base de " "datos.\n" "\n" "\t• Activo: Si está habilitada, la ruta de acceso se excluirá de la " "base de datos y no se podrá buscar en ella.\n" "\t• Ruta: La ruta completa para ser excluida." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Excluir carpeta de la base de datos:\n" "\n" "Este botón abre un cuadro de diálogo donde puede seleccionar una carpeta que " "desea excluir de la base de datos." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Eliminar la fila seleccionada:\n" "\n" "Esto elimina la carpeta seleccionada de la lista de carpetas excluidas." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Excluir archivos y carpetas de la base de datos:\n" "\n" "Se trata de una lista separada por punto y coma de los archivos (o carpetas) " "que desea excluir de la base de datos. Por ejemplo .git;.cache;*.swp " "excluirá todos los archivos o carpetas que se llaman .git o ." "cache o terminan con .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Excluir archivos y carpetas ocultos:\n" "\n" "Si está habilitado, los archivos y carpetas ocultos se excluirán de la base " "de datos. (es decir, todos los archivos o carpetas que comienzan con un " "carácter de punto).." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Enfoque una configuración para obtener una descripción detallada de lo que " "hace." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Actualizar periódicamente la base de datos en un intervalo de tiempo " "específico:\n" "\n" "Si está habilitado y mientras FSearch esté en ejecución, la base de datos se " "actualizará periódicamente con el intervalo de tiempo dado.\n" "\n" "Si desea actualizar la base de datos en segundo plano, incluso cuando " "FSearch no está ejecución, debe usar herramientas como cron o Systemd timer " "para activar periódicamente la actualización con:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Iniciar archivos del escritorio:\n" "\n" "Si está habilitado, la activación de un archivo .desktop iniciará la " "aplicación definida dentro de ese archivo. De esta manera, FSearch puede " "actuar como un lanzador de aplicaciones. En caso contrario, el archivo ." "desktop se abrirá con el manipulador por defecto para este tipo de " "archivos, que suele ser un editor de texto." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filtros:\n" "\n" "Esta es una lista de todos los filtros disponibles. Un filtro es una " "búsqueda predefinida.\n" "\n" "\t• Nombre: Un identificador único y descriptivo para el filtro\n" "\t• Macro: Escribiendo el texto de la macro seguido de un ':' puede " "habilitar el filtro pedido\n" "\t• Consulta: El término de búsqueda por el que se debe filtrar la " "base de datos" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Añadir un nuevo filtro:\n" "\n" "Este botón abre un cuadro de diálogo donde puede editarse un nuevo filtro." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Eliminar el filtro seleccionado:\n" "\n" "Este botón elimina el filtro actualmente seleccionado." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Editar filtro seleccionado:\n" "\n" "Este botón abre un cuadro de diálogo donde se puede editar el filtro " "seleccionado." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Restaurar filtros predeterminados:\n" "\n" "Este botón restaura la configuración del filtro por defecto.\n" "\n" "⚠ ¡Todos los filtros creados o editados por el usuario se perderán! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Salir con Escape:\n" "\n" "Si está habilitado, FSearch se cierra cuando se pulsa la tecla Escape en " "lugar de minimizar la ventana." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Ayuda" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Seleccione la carpeta" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "Seleccionar" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Añadir filtros" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Activar" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Ruta" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Un sistema de archivos" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nombre" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Macro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Consulta" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d elemento" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elementos" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Consultando…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Cargando…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Escaneando…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Cantidad de resultados" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elementos" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "Cancelar" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Índice:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Cantidad de carpetas seleccionadas" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Cantidad de ficheros seleccionados" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Cancelar la actualización de la base de datos" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Cantidad de elementos en la base de datos" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(vacío)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "El término de búsqueda contiene separadores de ruta.\n" "Buscar en la ruta se activó temporalmente para este término." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "MAYÚSCULAS" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "El término de búsqueda contiene separadores de ruta.\n" "Buscar en la ruta se activó temporalmente para este término." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "RUTA" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "EXPRESIONES REGULARES" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tamaño" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipo" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extensión" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Fecha de modificación" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can take a vew seconds with many results.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Ordenar por Tipo puede tardar unos segundos con muchos resultados.\n" "\n" "Este orden de clasificación no es persistente, se restablecerá cuando cambie " "el término de búsqueda." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nueva ventana" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Actualizar base de datos" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Buscar en la ruta" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Distinguir mayúsculas y minúsculas" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Activar expresiones regulares" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Mostrar barra de estado" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Mostrar filtro" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Mostrar botón de busca" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Acerca de" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Salir" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Buscar…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Seleccione un filtro" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "¿En verdad quiere abrir %d archivo(s)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Abrir archivo(s)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "¿En verdad quiere eliminar %d archivo(s)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Eliminando archivos…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Enviando archivos a la papelera…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Eliminando archivos…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Enviando archivos a la papelera…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "¿En verdad quiere abrir %d ventanas de propiedades de archivo?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Abrir propiedades de archivo…" #: src/menus.ui:6 msgid "_File" msgstr "_Archivo" #: src/menus.ui:9 msgid "New Window" msgstr "Ventana nueva" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Abrir" #: src/menus.ui:21 msgid "Open Folder" msgstr "Abrir carpeta" #: src/menus.ui:29 msgid "Update Database" msgstr "Actualizar base de datos" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Cancelar actualización" #: src/menus.ui:42 msgid "Close Window" msgstr "Cerrar ventana" #: src/menus.ui:54 msgid "_Edit" msgstr "_Editar" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copiar" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Cor_tar" #: src/menus.ui:69 msgid "Select All" msgstr "Seleccionar todo" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desmarcar todo" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Invertir selección" #: src/menus.ui:92 msgid "_View" msgstr "_Ver" #: src/menus.ui:109 msgid "_Search" msgstr "_Buscar" #: src/menus.ui:126 msgid "_Help" msgstr "Ay_uda" #: src/menus.ui:171 msgid "Open _With" msgstr "Abrir _con" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Abrir carpeta" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copiar como texto" #: src/menus.ui:217 msgid "Path + Name" msgstr "Ruta + Nombre" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Enviar a la _papelera" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Agregar ruta para ser incluido en la base de datos\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Añadir carpeta a la base de datos:\n" #~ "\n" #~ " Este botón abre un cuadro de diálogo donde puede " #~ "seleccionar la carpeta que desea incluir en la base de\n" #~ " datos para realizar búsquedas.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "El término de búsqueda contiene caracteres en mayúsculas.\n" #~ "Distinguir mayúsculas y minúsculas se activó temporalmente para " #~ "este término." #~ msgid "page0" #~ msgstr "Página 0" #~ msgid "page1" #~ msgstr "Página 1" #~ msgid "page2" #~ msgstr "Página 2" #~ msgid "page30" #~ msgstr "página30" #~ msgid "page18" #~ msgstr "Página 18" #~ msgid "page31" #~ msgstr "página31" #~ msgid "page32" #~ msgstr "página32" #~ msgid "page33" #~ msgstr "página33" #~ msgid "page34" #~ msgstr "página34" #~ msgid "page35" #~ msgstr "Página35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Carpetas incluidas:\n" #~ "\n" #~ " Esta lista contiene todas las carpetas que desea " #~ "incluir en la base de datos.\n" #~ "\n" #~ " • Activo: Si está habilitada, la ruta de " #~ "acceso se incluirá en la\n" #~ " base de datos en la que se buscará.\n" #~ " • Ruta: La ruta completa que se incluirá.\n" #~ " • Actualizar: Esta configuración es útil si " #~ "desea excluir ciertas\n" #~ " rutas de acceso de la actualización (p. ej. una " #~ "ruta a una unidad USB\n" #~ " lenta que no cambia a menudo)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Eliminar la fila seleccionada:\n" #~ "\n" #~ " Esto elimina la carpeta seleccionada de la lista de " #~ "carpetas incluidas.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "¿Desea mantener la ventana abierta?" #~ msgid "_Copy Filepath" #~ msgstr "_Copiar ruta de archivo" #~ msgid "Building lookup list…" #~ msgstr "Creando lista de búsqueda…" #~ msgid "Update" #~ msgstr "Actualizar" #~ msgid "≥%'d Items" #~ msgstr "≥%'d elementos" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Última actualización: %d.%m.%Y, %H:%M" #~ msgid "_Delete" #~ msgstr "_Eliminar" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Limitar cantidad de resultados a:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Limitar cantidad de resultados a:\n" #~ "\n" #~ "Si está habilitado, el número de resultados de búsqueda se limitará al " #~ "número especificado.\n" #~ "\n" #~ "Mostrar muchos resultados tiene un impacto significativo en el " #~ "rendimiento, especialmente cuando la lista no está ordenada por nombre. " #~ "Esto se mejorará en futuras versiones." #~ msgid "Background tasks are active." #~ msgstr "Las tareas en segundo plano están activas." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Ahora mismo, cerrar la ventana no es posible.\n" #~ "Por favor, espere un momento y luego trate nuevamente." #~ msgid "label" #~ msgstr "etiqueta" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Vaya a Editar ▸ Preferencias ▸ Base de datos y añada algunas " #~ "ubicaciones" #~ msgid "page4" #~ msgstr "Página 4" #~ msgid "page6" #~ msgstr "Página 6" #~ msgid "page7" #~ msgstr "Página 7" #~ msgid "page8" #~ msgstr "Página 8" #~ msgid "page9" #~ msgstr "Página 9" #~ msgid "page10" #~ msgstr "Página 10" #~ msgid "page11" #~ msgstr "Página 11" #~ msgid "page12" #~ msgstr "Página 12" #~ msgid "page13" #~ msgstr "Página 13" #~ msgid "page14" #~ msgstr "Página 14" #~ msgid "page15" #~ msgstr "Página 15" #~ msgid "page16" #~ msgstr "Página 16" #~ msgid "page17" #~ msgstr "Página 17" #~ msgid "page19" #~ msgstr "Página 19" #~ msgid "page20" #~ msgstr "Página 20" #~ msgid "page21" #~ msgstr "Página 21" #~ msgid "page22" #~ msgstr "Página 22" #~ msgid "page23" #~ msgstr "Página 23" #~ msgid "page24" #~ msgstr "Página 24" #~ msgid "page25" #~ msgstr "Página 25" #~ msgid "page26" #~ msgstr "Página 26" #~ msgid "page27" #~ msgstr "Página 27" #~ msgid "page28" #~ msgstr "Página 28" #~ msgid "page29" #~ msgstr "Página 29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Copiar" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Habilitar tema oscuro podría no tener efecto.\n" #~ "Algunas plataformas no admiten temas oscuros y otras siempre usan temas " #~ "oscuros de forma predeterminada." #~ msgid "Add…" #~ msgstr "Agregar…" #~ msgid "Remove" #~ msgstr "Quitar" #~ msgid "Follow symbolic links" #~ msgstr "Seguir enlaces simbólicos" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "Nota: «Activar tema oscuro» puede no funcionar,\n" #~ "ya que no todos los temas GTK+ incluyen una versión oscura." #~ msgid "Enable menubar" #~ msgstr "Activar barra de menú" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "INFO: Activar/Desactivar la barra de menú aplicará en el próximo reinicio " #~ "del programa\n" #~ msgid "Open Containing Folder" #~ msgstr "Abrir carpeta contenedora" #~ msgid "Open File(s) in File Manager" #~ msgstr "Abrir archivo(s) en el explorador" #~ msgid "Move to Trash" #~ msgstr "Enviar a la papelera" #~ msgid "Show Menubar" #~ msgstr "Mostrar barra de menús" #, fuzzy #~ msgid "Enable" #~ msgstr "Activar expresiones regulares" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Cargando base de datos…" #~ msgid "..." #~ msgstr "…" #~ msgid "Updating Database..." #~ msgstr "Actualizando base de datos…" #~ msgid "Search..." #~ msgstr "Buscar…" #~ msgid "Add" #~ msgstr "Añadir" #~ msgid "files?" #~ msgstr "¿archivos?" #~ msgid "C_ut" #~ msgstr "C_ortar" #~ msgid "Selected Folder and Files" #~ msgstr "Seleccionar carpetas y archivos" fsearch-0.2.3/po/eu.po000066400000000000000000001440661446344336300145430ustar00rootroot00000000000000# Basque translations for fsearch package. # Copyright (C) 2022 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2022. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1.42-6286\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-06-28 22:15+0000\n" "Last-Translator: Alexander Gabilondo \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.13.1-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "Fsearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Errendimenduan eta funtzio aurreratuetan zentratzen den fitxategiak " "bilatzeko aplikazioa" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "bilatu;fsearch;fitxategiak;karpetak;musika;bideoa;dokumentuak;aurkitu;tresna;" "dena;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Fitxategiak bilatzeko aplikazio grafikoa" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch-ek fitxategiak eta karpetak ahalik eta errazen eta azkarren " "aurkitzen laguntzen dizu. Idatzi letra batzuk eta bilaketa-emaitzak berehala " "agertuko dira." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Ezaugarri asko daude bilaketa ahalik eta eraginkorrena eta indartsuena " "egiten dutenak. Hala nola:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ezikusi letra larriak eta xeheak (adibidez, \"fsearch\" bilatuta \"FSearch\" " "ere topatuko luke)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Adierazpen erregularrak" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Onartu komodin karaktereak" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Onartu iragazkiak (adib. bilatu soilik audio fitxategiak)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Baztertu hainbat fitxategi eta karpetak" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Ordenazio azkarra izena, bidea, tamaina, aldatze-data eta luzapenean " "oinarrituta" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Oharra: Flatpak-en ingurune isolatuaren ondorioz, FSearch-ek ezin ditu zure " "sistemako fitxategi guztiak aurkitu." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Lehenetsitako interfazearen diseinua" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "GNOMEren jarraibideak hurbilagotik jarraitzen duen diseinua" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 #, fuzzy msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Hasierako bertsioa." #: src/fsearch.c:243 msgid "Saving…" msgstr "Gordetzen…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Alexander Gabilondo" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Errendimenduan eta funtzio aurreratuetan zentratzen den bilatze-tresna" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Ireki aplikazioaren leiho berri bat" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Erakutsi aplikazioaren hobespenak" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Ezarri bilaketa-eredua" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Eguneratu datu-basea eta irten" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Erakutsi bertsioaren informazioa eta irten" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Karpetak kargatzen…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Fitxategiak kargatzen…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ordenatzen…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Ezin izan da ireki:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Ireki aplikazioaren leiho berri bat" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Fitxategia irekitzeak huts egin du" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Ezin izan da ireki:" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Erakutsi aplikazioaren hobespenak" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Ezin izan da ireki:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Karpeta" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Mota ezezaguna" #: src/fsearch_filter.c:111 msgid "All" msgstr "Guztiak" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Karpetak" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Fitxategiak" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Aplikazioak" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Artxiboak" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audioak" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumentuak" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Irudiak" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Bideoak" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Makro-izenek ez dute `:` karaktererik izan behar." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "Utzi" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "Ados" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Editatu iragazkia" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Izena:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Iragazki honen izen bakarra" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Iragazkiaren izen esklusiboa" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Bilatu bidean" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Gaitu adierazpen erregularrak" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Bereizi maiuskulak eta minuskulak" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Kontsulta:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Makroa:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Iragazki honen makroa. Makro batek aukera ematen dizu erabiltzeko iragazki " "hau bilaketa-sarreratik bere testua idatzita eta ondoren ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Propietateak…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Beste aplikazio bat…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Hustu datu-basea" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Gehitu karpetak" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Datu-basea kargatzen…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Honek ez du luze joko." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Datu-basea eguneratzen…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Honek denbora pixka bat beharko du." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Emaitzarik ez" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Sakatu Ctrl + F eta hasi idazten" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Emaitzarik ez" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Saiatu beste bilaketa bat" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Emaitzak ordenatzen…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Hobespenak" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Aktibatu gai iluna" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Aktibatu bezeroaren aldeko apaingarriak (berrabiarazi behar da)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Erabili unitate bitarrak hamartarren ordez" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Gogoratu leihoaren tamaina" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Irten Esc sakatuta" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "laster-tekla edo menuko sarreren bidez" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "klik bikoitzaren bidez" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Fitxategi bat ongi ireki ondorengo jokaera:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Ezer ez" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimizatu" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Itxi" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Orokorra:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Nabarmendu bilaketaren terminoak" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Erakutsi tresna-aholkuak" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Erakutsi ikonoak izenen zutabean" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Gogoratu zutabeen ezarpenak" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Gogoratu ordenaren irizpidea" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Ireki bidea Bidea zutabean klik bikoitza egitean" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Ireki klik bakarra egitean" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Abiarazi mahaigaineko fitxategiak" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Emaitzak:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Erakutsi datu-basearen indexatze-egoera" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Egoera-barra:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Erakutsi oharrak horrelakoetan:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "Ezin izan da fitxategia / karpeta ireki" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Elkarrizketak:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interfazea" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Bilatu bidean kontsultak bide-bereizleak dituenean" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Bilatu idatzi ahala" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Ezkutatu emaitzak bilaketa hutsik dagoenean" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Kontuan hartu maiuskulak eta minuskulak kontsultak gutxienez karaktere " "maiuskula bat duenean" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Gehitu iragazki berria" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Kendu hautatutako iragazkia" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Editatu hautatutako iragazkia" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Leheneratu iragazki lehenetsiak" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Iragazkia:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Bilatu" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Eguneratu datu-basea abiatzean" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Eguneratu" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "ordu eta" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minutuero" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Gehitu datu-basean sartzeko bidea\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Kendu hautatutako bidea" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Barne du" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Gehitu datu-basetik baztertu beharreko bidea" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Onartu komodinak. Sarrerak ';' bidez bereizi behar dira" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Baztertu fitxategiok:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "adib. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Baztertu ezkutuko fitxategiak eta karpetak" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Baztertu" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Datu-basea" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Gaitu gai iluna:\n" "\n" "Gaituta badago, sistemako gaiari aplikaziorako estilo ilunagoa erabiltzeko " "eskatuko zaio (hau da, UI elementu ilunak testu distiratsuan).\n" "\n" "Kontuan izan sistemako gai guztiek ez dutela aldaera ilunagoa, beraz ezarpen " "hau gaituz gero, baliteke eraginik ez izatea." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Gaitu bezeroen aldeko apaingarriak:\n" "\n" "Gaituta badago, bilaketa-sarrera eta menu nagusia leihoaren izenburu-barran " "bistaratuko dira.\n" "\n" "Desgaituta badago, menu nagusia menu-barra gisa bistaratzen da bilaketa-" "sarrera azpian duela.\n" "Honek UI diseinu tradizional baten antza du eta leku apur bat gehiago " "hartzen du." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Erabili unitate bitarrak hamartarren ordez:\n" "\n" "Ezarpen honek fitxategien tamainak nola bistaratzen diren kontrolatzen du.\n" "\n" "\t• Unitate bitarrak: Honek IEC aurrizki bitarrei egiten die " "erreferentzia (e.b. 1 KiB = 1024 bytes)\n" "\t• Unitate hamartarrak: Honek SI aurrizki bitarrei egiten die " "erreferentzia (e.b. 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Gogoratu leihoaren tamaina:\n" "\n" "Gaituta badago, aurreko saioko leihoaren tamaina berreskuratuko da FSearch " "leiho bat irekitzean.\n" "\n" "Kontuan izan leiho-kudeatzaile batzuek eskaera hau baztertzen dutela eta " "leihoa beste tamaina bat behartzen dutela." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Fitxategi bat ongi ireki ondorengo jokaera::\n" "\n" "Fitxategi/karpeta bat ongi irekitzen denean ekintza hauetako bat egin " "daiteke:\n" "\t• Ezer ez : Ez da ezer gertatzen.\n" "\t• Minimizatu: Une honetan hautatutako FSearch leihoa minimizatu " "egiten da. \n" "\t• Itxi: Irten FSearch-etik.\n" "\n" "Fitxategia irekitzean ekintza horiek abiarazi behar diren konfigura dezakezu " "honela:\n" "\t• laster tekla edo menuko sarreren bidez edota\n" "\t• saguan klik eginez" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Nabarmendu bilaketa-terminoak:\n" "\n" "Gaituta badago, bilaketa-terminoak emaitzen ikuspegian nabarmenduko dira. " "Adibidez \"fo\" bilatzen duzunean feren agerpen guztiak karaktere " "lodiekin nabarmenduko dira fitxategi/karpetetan:\n" "\n" "\tfereka.txt\n" "\tfitxategia.fe\n" "\n" "Honek izartxo batekin hasten edo amaitzen diren adierazpen erregular eta " "komodinetarako ere balio du. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Erakutsi tresna-aholkuak:\n" "\n" "Gaituta badago, emaitzen ikuspegiak fokatutako fitxategi/karpetaren bide " "osoa erakutsiko du leiho txiki batean." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Erakutsi ikonoak izenaren zutabean:\n" "\n" "Gaituta badago, fitxategi/karpeta ikonoak agertuko dira izenaren zutabean." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Gogoratu zutabeen ezarpenak:\n" "\n" "Gaituta badago, aurreko saioko emaitzen ikuspegiaren zutabeen konfigurazioa " "berrezarriko da FSearch leiho bat irekitzean. Honek zutabe guztien tamaina " "eta ikusgarritasuna barne hartzen ditu." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Gogoratu ordena:\n" "\n" "Gaituta badago, aurreko saioko emaitzen ikuspegiaren ordena berrezarriko da " "FSearch leiho bat irekitzean." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Ireki bidea bidearen zutabean klik bikoitza egitean:\n" "\n" "Gaituta badago, bidea zutabean klik bikoitza eginez gero, hautatutako bidea " "irekiko da." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Klik batez ireki:\n" "\n" "Gaituta badago, klik bakarrean hautatutako fitxategi/karpeta irekiko da. " "Ezarpen hau aktibo dagoen bitartean, fitxategi/karpeta bat hautatzea " "bakarrik nahi baduzu, aldi berean sakatuta eduki behar duzu Ktrl " "fitxategia/karpeta sakatzen duzun bitartean." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Erakutsi datu-basearen indexatze-egoera:\n" "\n" "Gaituta badago, une honetan indexatzen ari den bidea bistaratzen da egoera-" "barran." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Erakutsi abisuak:\n" "\n" "Gaituta badago, abisu bat bistaratuko da baldin eta fitxategi edo karpeta " "baten irekitzeak huts egiten badu." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Bilatu bidean kontsultak bide-bereizleak dituenean:\n" "\n" "Gaituta badago, bide-bereizleak dituzten bilaketa-terminoak (hau da, \"/\") " "automatikoki konparatuko dira fitxategi edo karpeta baten bide osoarekin." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Bereizi maiuskulak eta minuskulak kontsultak gutxienez karaktere " "maiuskula bat duenean:\n" "\n" "Gaituta badago, bilaketa-terminoak gutxienez karaktere maiuskula bat badu " "maiuskulak eta minuskulak bereizten dituen bilaketa abiaraziko da. Horrek " "esan nahi du Fe bezalako bilaketa-terminoak Fereka.txt " "topatuko duela baina ez fereka.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ezkutatu emaitzak bilaketa-sarrera hutsik dagoenean:\n" "\n" "Gaituta badago, ez da bilaketa-emaitzarik bistaratuko bilaketa-sarrera " "hutsik dagoenean.\n" "\n" "Desgaituta badago, fitxategi eta karpeta guztiak bistaratuko dira bilaketa-" "sarrera hutsik dagoenean." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Bilatu idatzi ahala:\n" "\n" "Gaituta badago, bilaketa automatikoki eguneratzen da tekla sakatze " "bakoitzean.\n" "\n" "Desgaituta badago, bilaketa Sartu sakatzen duzunean edo bilaketa-" "botoia sakatzen duzunean soilik eguneratuko da. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Eguneratu datu-basea abiatzean:\n" "\n" "Gaituta badago, datu-basea automatikoki eguneratuko da atzeko planoan " "FSearch abiaraztean." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Included folders:\n" #| "\n" #| "This list contains all folders you want to include in the database.\n" #| "\n" #| "\t• Active: If enabled, the path will included in the database to " #| "be searched in.\n" #| "\t• Path: The full path to be included.\n" #| "\t• One Filesystem: If enabled, FSearch won't cross filesystem " #| "boundraries for this folder" msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Sartutako karpetak:\n" "\n" "Zerrenda honek datu-basean sartu nahi dituzun karpeta guztiak ditu.\n" "\n" "\t• Aktiboa: Gaituta badago, bidea datu-basean sartuko da eta bilatu " "ahal izango da.\n" "\t• Bidea: Sartu beharreko bide osoa.\n" "\t• Fitxategi-sistema bakarra: Gaituta badago, FSearch-ek ez ditu " "karpeta honen fitxategi-sistemaren mugak zeharkatuko" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Sartu karpeta datu-basetik:\n" "\n" "Botoi honek elkarrizketa-koadro bat irekitzen du, non datu-basean sartu nahi " "duzun karpeta bat hauta dezakezun." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Kendu hautatutako lerroa:\n" "\n" "Honek aukeratutako karpeta sartuen zerrendatik kentzen du." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Baztertutako karpetak:\n" "\n" "Zerrenda honek datu-basetik baztertu nahi dituzun karpeta guztiak ditu.\n" "\n" "\t• Aktiboa: Gaituta badago, bide hau datu-basetik kanpo geratuko da " "eta ez du bertan bilatuko.\n" "\t• Bidea: Baztertu beharreko bide osoa." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Baztertu karpeta datu-basetik:\n" "\n" "Botoi honek elkarrizketa-koadro bat irekitzen du, non datu-basetik baztertu " "nahi duzun karpeta bat hauta dezakezun." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Kendu hautatutako lerroa:\n" "\n" "Honek aukeratutako karpeta baztertuen zerrendatik kentzen du." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Baztertu fitxategiak eta karpetak datu-basetik:\n" "\n" "Hau datu-basetik baztertu nahi dituzun puntu eta komaz bereizitako " "fitxategien (edo karpeten) zerrenda bat da . Adibidez .git;.cache;*.swp .git edo .cache deitzen diren fitxategi edo karpeta guztiak " "baztertuko ditu edo .swp-z amaitzen direnak." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Baztertu ezkutuko fitxategiak eta karpetak:\n" "\n" "Gaituta badago, ezkutuko fitxategiak eta karpetak datu-basetik kanpo " "geratuko dira (hau da, puntu karaktere batekin hasten diren fitxategi edo " "karpeta guztiak)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Fokuratu ezarpen bat egiten duenaren deskribapen zehatza lortzeko." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Aldian-aldian eguneratu datu-basea denbora-tarte zehatz batean:\n" "\n" "Gaituta badago eta FSearch martxan dagoen bitartean, datu-basea aldian-" "aldian eguneratuko da zehaztutako denbora-tartearekin.\n" "\n" "Datu-basea atzeko planoan eguneratu nahi baduzu, nahiz eta FSearch " "exekutatzen ez egon, cron edo systemd bezalako tenporizadoreak erabili " "beharko zenuke eguneratzea aldian-aldian abiarazteko:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Abiarazi mahaigaineko fitxategiak:\n" "\n" "Gaituta badago, mahaigaineko fitxategi bat aktibatzeak definitutako " "aplikazioa abiaraziko du fitxategi horren barruan. Horrela, FSearch-ek " "aplikazioen abiarazle gisa jardun dezake. Bestela, mahaigaineko " "fitxategia mota honetako fitxategien kudeatzaile lehenetsiarekin irekiko da, " "normalean testu-editorea." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Iragazkiak:\n" "\n" "Hau da erabilgarri dauden iragazki guztien zerrenda. Iragazkia aurrez " "zehaztutako bilaketa bat da.\n" "\n" "• Izena: iragazkiaren identifikatzaile esklusibo eta deskribatzailea\n" "• Makroa: makro testua ':' baten ondoren idatziz gero, iragazkia " "gaitu dezakezu.\n" "• Kontsulta: datu-basean iragazi behar den bilaketa-terminoa" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Gehitu iragazki berria:\n" "\n" "Botoi honek elkarrizketa-koadro bat irekitzen du, non iragazki berri bat " "editatu dezakezu." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Kendu hautatutako iragazkia:\n" "\n" "Botoi honek une honetan hautatutako iragazkia kentzen du." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Editatu hautatutako iragazkia:\n" "\n" "Botoi honek elkarrizketa-koadro bat irekitzen du, non editatu dezakezun " "hautatutako iragazkia." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Berrezarri iragazki lehenetsiak:\n" "\n" "Botoi honek iragazkien konfigurazio lehenetsia berrezartzen du.\n" "\n" "⚠ Erabiltzaileak sortu edo editatu dituen iragazki guztiak galduko dira! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Irten Esc sakatuta:\n" "\n" "Gaituta badago, FSearch irtengo da Esc tekla sakatzen denean leihoa " "minimizatu beharrean." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Laguntza" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Hautatu karpeta" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "Hautatu" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Gehitu iragazkia" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktibatu" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Bidea" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Fitxategi-sistema bat" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Izena" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Makroa" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Kontsulta" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d elementu" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elementu" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Kontsulta egiten…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Kargatzen…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Eskaneatzen…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Bilaketaren emaitzen kopurua" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elementu" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "Utzi" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Aurkibidea:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Hautatutako kapeta kopurua" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Hautatutako fitxategi kopurua" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Gelditu datu-basearen eguneraketa" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Datu-basearen elementu kopurua" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(hutsa)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Bilaketa-terminoak bide-bereizleak ditu.\n" "Bidean bilatzea termino honentzat aldi baterako aktibatu da." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "MAIUSKULAK" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Bilaketa-terminoak bide-bereizleak ditu.\n" "Bidean bilatzea termino honentzat aldi baterako aktibatu da." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "BIDEA" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "ADIERAZPEN ERREGULARRAK" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tamaina" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Mota" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Luzapena" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Aldatze-data" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can take a vew seconds with many results.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Motaren arabera segundo batzuk eman dezake emaitza asko badaude.\n" "\n" "Ordena hau ez da iraunkorra, bilaketa-terminoa aldatzen denean berrezarri " "egingo da." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "Fsearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Leiho berria" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Eguneratu datu-basea" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Bilatu bidean" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Bereizi maiuskulak eta minuskulak" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Gaitu adierazpen erregularrak" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Erakutsi egoera-barra" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Erakutsi iragazkiak" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Erakutsi bilatzeko botoia" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Honi buruz" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Irten" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Bilatu…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Hautatu iragazki bat" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Benetan %d fitxategi(ak) ireki nahi dituzu?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Fitxategiak irekitzen…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Benetan %d fitxategi(ak) ezabatu nahi dituzu?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Fitxategiak ezabatzen…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Fitxategiak zakarrontzira bidaltzen…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Fitxategiak ezabatzen…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Fitxategiak zakarrontzira bidaltzen…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Benetan nahi al duzu %d fitxategien propietateen leihoak ireki?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Fitxategien propietateak irekitzen…" #: src/menus.ui:6 msgid "_File" msgstr "_Fitxategia" #: src/menus.ui:9 msgid "New Window" msgstr "Leiho berria" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Ireki" #: src/menus.ui:21 msgid "Open Folder" msgstr "Ireki karpeta" #: src/menus.ui:29 msgid "Update Database" msgstr "Eguneratu datu-basea" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Gelditu eguneraketa" #: src/menus.ui:42 msgid "Close Window" msgstr "Itxi leihoa" #: src/menus.ui:54 msgid "_Edit" msgstr "_Editatu" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopiatu" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Ebaki" #: src/menus.ui:69 msgid "Select All" msgstr "Hautatu guztiak" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desautatu guztiak" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Alderantzikatu hautapena" #: src/menus.ui:92 msgid "_View" msgstr "_Ikusi" #: src/menus.ui:109 msgid "_Search" msgstr "_Bilatu" #: src/menus.ui:126 msgid "_Help" msgstr "_Laguntza" #: src/menus.ui:171 msgid "Open _With" msgstr "Ireki _honekin" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Ireki karpeta" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Kopiatu testu gisa" #: src/menus.ui:217 msgid "Path + Name" msgstr "Bidea + Izena" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Eraman _zakarrontzira" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Gehitu datu-basean sartzeko bidea\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Gehitu karpeta datu-basean:\n" #~ "\n" #~ " Botoi honek elkarrizketa-koadro bat irekitzen du, " #~ "non datu-basean sartu nahi duzun karpeta bat hauta dezakezun\n" #~ " bilatzeko.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Bilaketa-terminoak letra larriak ditu.\n" #~ "Maiuskulak eta minuskulak bereiztea termino honentzat aldi " #~ "baterako aktibatu da." #~ msgid "page0" #~ msgstr "0 orria" #~ msgid "page1" #~ msgstr "1 orria" #~ msgid "page2" #~ msgstr "2 orria" #~ msgid "page30" #~ msgstr "30 orria" #~ msgid "page18" #~ msgstr "18. orria" #~ msgid "page31" #~ msgstr "31. orria" #~ msgid "page32" #~ msgstr "32. orria" #~ msgid "page33" #~ msgstr "33. orria" #~ msgid "page34" #~ msgstr "34. orria" #~ msgid "page35" #~ msgstr "35 orria" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Sartutako karpetak:\n" #~ "\n" #~ " Zerrenda honek datu-basean sartu nahi dituzun " #~ "karpeta guztiak ditu.\n" #~ "\n" #~ " • Aktiboa: Gaituta badago, bide hau bilatu " #~ "nahi den datu-basean sartuko da.\n" #~ " • Bidea: Sartu beharreko bide osoa.\n" #~ " • Eguneratu: Ezarpen hau erabilgarria da " #~ "bide batzuk eguneratzetik\n" #~ " baztertu nahi badituzu (e.b. sarri aldatzen ez " #~ "den USB disko geldo baterako\n" #~ " bidea)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Kendu hautatutako lerroa:\n" #~ "\n" #~ " Honek hautatutako karpeta sartzen diren karpeten " #~ "zerrendatik kentzen du.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Leihoa zabalik mantendu nahi duzu?" fsearch-0.2.3/po/fi.po000066400000000000000000001173011446344336300145200ustar00rootroot00000000000000# Finnish translations for FSearch package. # Copyright (C) 2019 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2019. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta3.24-8ede-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-07-23 05:21+0000\n" "Last-Translator: Ammuu5 \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "Suorituskykyyn ja lisäominaisuuksiin keskittyvä hakutyökalu" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Graafinen tiedostojen hakusovellus" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch auttaa sinua löytämään tiedostoja ja kansioita mahdollisimman " "helposti ja nopeasti. Kirjoita vain muutama kirjain, ja hakutulokset tulevat " "näkyviin lähes välittömästi." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ei huomioi isoja ja pieniä kirjaimia (esim. haku \"fsearch\" vastaa myös " "\"FSearch\" hakua)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Säännölliset lausekkeet" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Suodatintuki (esim. vain äänitiedostojen haku)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Ohita tietyt tiedostot ja kansiot" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Huomautus: Flatpakin hiekkalaatikon vuoksi FSearch ei löydä kaikkia " "järjestelmäsi tiedostoja." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Käyttöliittymän oletusasettelu" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Ensimmäinen julkaisu." #: src/fsearch.c:243 msgid "Saving…" msgstr "Tallennetaan…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Suorituskykyyn ja lisäominaisuuksiin keskittyvä hakutyökalu" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Avaa uusi sovellusikkuna" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Näytä sovelluksen asetukset" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Aseta hakukuvio" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Päivitä tietokanta ja poistu" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Näytä versiotiedot ja poistu" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Ladataan kansioita…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Ladataan tiedostoja…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Lajitellaan…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Avaaminen epäonnistui:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Avaa uusi sovellusikkuna" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Tiedoston avaaminen epäonnistui" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Avaaminen epäonnistui:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Näytä sovelluksen asetukset" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Avaaminen epäonnistui:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Kansio" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tuntematon tyyppi" #: src/fsearch_filter.c:111 msgid "All" msgstr "Kaikki" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Kansiot" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Tiedostot" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Sovellukset" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arkistot" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Ääni" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Asiakirjat" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Kuvat" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Videot" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Makrojen nimet eivät saa sisältää `:`-merkkejä." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Peruuttaa" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Muokkaa suodatinta" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Nimi:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Tämän suodattimen yksilöllinen nimi" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Yksilöllinen suodattimen nimi" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Etsi polusta" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Ota säännölliset lausekkeet käyttöön" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Sama kirjainkoko" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Kysely:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Makro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Ominaisuudet…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Muu sovellus…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Tyhjä tietokanta" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Lisää kansioita" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Ladataan tietokanta…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Tämä ei kestä kauan." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Päivitetään tietokantaa…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Tämä voi kestää jonkin aikaa." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Tyhjä haku" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Paina Ctrl + F ja aloita kirjoittaminen" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Ei tuloksia" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Kokeile eri Hakusanalla" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Lajitellaan tuloksia…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Asetukset" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Käytä tummaa teemaa" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" "Ota asiakaspuolen koristeet (CSD) käyttöön (vaatii uudelleenkäynnistyksen)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Käytä binääri yksiköitä desimaali yksiköiden sijaan" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Muista ikkunan koko" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "pikanäppäimillä tai valikkomerkinnöillä" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "kaksoisnapsauttamalla" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Käyttäytyminen tiedoston avaamisen jälkeen:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Ei mitään" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimoi" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Sulje" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Yleiset:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Näytä korostut hakusanat" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Näytä työkaluvihjeet" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Näytä kuvakkeet Nimi-sarakkeesta" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Muista sarakemääritykset" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Muista lajittelujärjestys" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Avaa polku kaksoisnapsauttamalla polkusaraketta" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Avaa yhdellä napsautuksella" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Tulokset:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Näytä tietokannan indeksoinnin tila" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Tilapalkki:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Näytä varoitusikkunat kun:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "tiedoston / kansion avaaminen epäonnistuu" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Valintaikkunat:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Käyttöliittymä" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Etsi polusta, kun haku sisältää polkuerottimia" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Etsi kirjoitettaessa" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Piilota tulokset, kun haku on tyhjä" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "Sama kirjainkoko, kun kysely sisältää vähintään yhden ison kirjaimen" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Lisää uusi suodatin" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Poista valittu suodatin" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Muokkaa valittua suodatinta" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Palauta oletussuodattimet" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Suodatin:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Etsi" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Päivitä tietokanta käynnistyksen yhteydessä" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Päivitä joka" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "tunti(a) ja" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minuutti(a)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Lisää tietokantaan sisällytettävä polku\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Poista valittu polku" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Sisällytä" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Lisää tietokannasta poissuljettava polku" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Tukee yleismerkkejä. Useat merkinnät on eroteltava toisistaan merkillä ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Ohita tiedostot:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "esim. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Ohita piilotetut tiedostot ja kansiot" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Ohita" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Tietokanta" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Kohdista asetukseen saadaksesi yksityiskohtaisen kuvauksen sen toiminnasta." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Ohje" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Valitse kansio" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Valitse" #: src/fsearch_preferences_ui.c:326 #, fuzzy #| msgid "Add folders" msgid "Add filter" msgstr "Lisää kansioita" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktiivinen" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Polku" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Avaa tiedosto(t)" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nimi" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Haku" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d kohdetta" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d kohdetta" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Kysellään…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Ladataan…" #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "Lajitellaan…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Hakutulosten lukumäärä" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 kohdetta" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Peruuttaa" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indeksi:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Valittujen kansioiden määrä" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Valittujen tiedostojen määrä" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Peruuta tietokannan päivitys" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Tietokantakohteiden määrä" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(tyhjä)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Hakusana sisältää polkuerottimia\n" "Etsi polusta aktivoitiin väliaikaisesti tälle hakusanalle." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "KIRJAINKOKO" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Hakusana sisältää polkuerottimia\n" "Etsi polusta aktivoitiin väliaikaisesti tälle hakusanalle." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "POLKU" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "SÄÄNNÖLLINEN LAUSEKE" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Koko" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tyyppi" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Laajennus" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Muokattu" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Uusi ikkuna" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Päivitä tietokanta" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Etsi polusta" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Sama kirjainkoko" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Käytä säännöllisiä lausekkeita" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Näytä tilapalkki" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Näytä suodatin" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Näytä Etsi-painike" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Tietoja" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Sulje" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Etsi…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Valitse suodatin" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Haluatko todella avata %d tiedosto(n/a)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Avataan tiedosto(ja)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Haluatko todella poistaa %d tiedosto(n/a)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Poistetaan tiedostoja…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Siirretään tiedostoja roskakoriin…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Poistetaan tiedostoja…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Siirretään tiedostoja roskakoriin…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Haluatko todella avata %d tiedosto(n/a)?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Avataan tiedosto(ja)…" #: src/menus.ui:6 msgid "_File" msgstr "_Tiedosto" #: src/menus.ui:9 msgid "New Window" msgstr "Uusi ikkuna" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Avaa" #: src/menus.ui:21 msgid "Open Folder" msgstr "Avaa kansio" #: src/menus.ui:29 msgid "Update Database" msgstr "Päivitä tietokanta" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Peruuta päivitys" #: src/menus.ui:42 msgid "Close Window" msgstr "Sulje ikkuna" #: src/menus.ui:54 msgid "_Edit" msgstr "_Muokkaa" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopioi" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Leik_kaa" #: src/menus.ui:69 msgid "Select All" msgstr "Valitse kaikki" #: src/menus.ui:74 msgid "Deselect All" msgstr "Poista kaikkien valinta" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Käänteinen valinta" #: src/menus.ui:92 msgid "_View" msgstr "_Näytä" #: src/menus.ui:109 msgid "_Search" msgstr "_Etsi" #: src/menus.ui:126 msgid "_Help" msgstr "_Ohje" #: src/menus.ui:171 msgid "Open _With" msgstr "Avaa _Sovelluksessa" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Avaa kansio" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Siirrä _roskakoriin" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Lisää tietokantaan sisällytettävä polku\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Hakusana sisältää isoja kirjaimia.\n" #~ "Sama kirjainkoko aktivoitiin väliaikaisesti tälle hakusanalle." #~ msgid "page0" #~ msgstr "sivu0" #~ msgid "page1" #~ msgstr "sivu1" #~ msgid "page2" #~ msgstr "sivu2" #, fuzzy #~| msgid "page3" #~ msgid "page30" #~ msgstr "sivu3" #~ msgid "page18" #~ msgstr "sivu18" #, fuzzy #~| msgid "page3" #~ msgid "page31" #~ msgstr "sivu3" #, fuzzy #~| msgid "page3" #~ msgid "page32" #~ msgstr "sivu3" #, fuzzy #~| msgid "page3" #~ msgid "page33" #~ msgstr "sivu3" #, fuzzy #~| msgid "page3" #~ msgid "page34" #~ msgstr "sivu3" #, fuzzy #~| msgid "page5" #~ msgid "page35" #~ msgstr "sivu5" #~ msgid "Do you want to keep the window open?" #~ msgstr "Haluatko pitää ikkunan auki?" #~ msgid "_Copy Filepath" #~ msgstr "_Kopioi tiedostopolku" #~ msgid "Update" #~ msgstr "Päivitä" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d kohdetta" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Viimeksi päivitetty: %d.%m.%Y %H:%M" #~ msgid "_Delete" #~ msgstr "_Poista" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Rajoita tulosten määrää:" #~ msgid "Background tasks are active." #~ msgstr "Taustatehtävät ovat aktiivisia." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Ikkunan sulkeminen ei ole mahdollista juuri nyt.\n" #~ "Odota hetki ja yritä uudelleen." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "Valitse Muokkaa → Asetukset → Tietokanta ja lisää sijainteja" #~ msgid "page4" #~ msgstr "sivu4" #~ msgid "page6" #~ msgstr "sivu6" #~ msgid "page7" #~ msgstr "sivu7" #~ msgid "page8" #~ msgstr "sivu8" #~ msgid "page9" #~ msgstr "sivu9" #~ msgid "page10" #~ msgstr "sivu10" #~ msgid "page11" #~ msgstr "sivu11" #~ msgid "page12" #~ msgstr "sivu12" #~ msgid "page13" #~ msgstr "sivu13" #~ msgid "page14" #~ msgstr "sivu14" #~ msgid "page15" #~ msgstr "sivu15" #~ msgid "page16" #~ msgstr "sivu16" #~ msgid "page17" #~ msgstr "sivu17" #~ msgid "page19" #~ msgstr "sivu19" #~ msgid "page20" #~ msgstr "sivu20" #~ msgid "page21" #~ msgstr "sivu21" #~ msgid "page22" #~ msgstr "sivu22" #~ msgid "page23" #~ msgstr "sivu23" #~ msgid "page24" #~ msgstr "sivu24" #~ msgid "page25" #~ msgstr "sivu25" #~ msgid "page26" #~ msgstr "sivu26" #~ msgid "page27" #~ msgstr "sivu27" #~ msgid "page28" #~ msgstr "sivu28" #~ msgid "page29" #~ msgstr "sivu29" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Kopioi" #~ msgid "Remove" #~ msgstr "Poista" #~ msgid "Follow symbolic links" #~ msgstr "Seuraa symbolisia linkkejä" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "TIEDOKSI: \"Käytä tummaa teemaa\" ei ehkä vaikuta,\n" #~ "koska kaikki GTK+ teemat eivät tarjoa tummaa versiota." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Käytä säännöllisiä lausekkeita" #~ msgid "Open Containing Folder" #~ msgstr "Avaa sisältävä kansio" #~ msgid "Open File(s) in File Manager" #~ msgstr "Avaa tiedosto(t) tiedostonhallinnassa" #~ msgid "Move to Trash" #~ msgstr "Siirrä roskakoriin" #~ msgid "Show Menubar" #~ msgstr "Näytä valikkopalkki" #, fuzzy #~ msgid "Enable" #~ msgstr "Käytä säännöllisiä lausekkeita" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Ladataan tietokanta…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Päivitetään tietokantaa..." #~ msgid "Search..." #~ msgstr "Etsi..." #~ msgid "Add" #~ msgstr "Lisää" #~ msgid "files?" #~ msgstr "tiedostot?" #~ msgid "C_ut" #~ msgstr "L_eikkaa" fsearch-0.2.3/po/fr.po000066400000000000000000001564511446344336300145420ustar00rootroot00000000000000# French translations for FSearch package. # Copyright (C) 2016 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-19 10:22+0000\n" "Last-Translator: rene-coty \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Un utilitaire de recherche axé sur la performance et avec des " "fonctionnalités avancées" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "rechercher;fsearch;fichiers;dossiers;musique;vidéos;documents;trouver;outil;" "tout;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Une interface graphique pour la recherche de fichiers" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "Fsearch vous aide à trouver des fichiers et des dossiers aussi facilement et " "rapidement que possible. Tapez quelques lettres et les résultats de " "recherche s'afficheront presque instantanément." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "De nombreuses fonctionnalités rendent la recherche aussi efficace que " "puissante :" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignorer la casse (p. ex., la recherche de \"fsearch\" correspondra aussi à " "\"FSearch\")" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Expressions régulières" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Prise en charge des caractères génériques" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" "Prise en charge des filtres (p. ex., recherchez uniquement des fichiers " "audio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Exclure certains fichiers et dossiers" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Triez rapidement par nom, chemin d'accès, taille, heure de modification et " "extension de fichier" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Remarque : En raison du conteneur Flatpak, FSearch ne peut pas trouver tous " "les fichiers de votre système." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Disposition de l’interface utilisateur par défaut" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Une interface s'inspirant de l'ergonomie IHM de GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Version initiale." #: src/fsearch.c:243 msgid "Saving…" msgstr "Enregistrement…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" "Traducteurs :\n" "Pierre-Louis K., Roxfr,\n" "Mathieu B., mbousq," #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Un utilitaire de recherche axé sur la performance et les fonctionnalités " "avancées" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Ouvrir une nouvelle fenêtre d'application" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Afficher les préférences de l'application" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Définir le modèle de recherche" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Mettre à jour la base de données et quitter" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Imprimer les informations sur la version et quitter" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Chargement des dossiers…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Chargement des fichiers…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Tri des résultats…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Erreur lors de l’ouverture du dossier" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "Échec de la construction de la commande d’ouverture" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Erreur lors du lancement du fichier de bureau" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Échec de l’obtention des informations de l’application" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Échec de l’obtention de l’affichage par défaut" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Erreur lors de la suppression du fichier" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Échec de l’obtention du chemin" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Erreur lors du lancement du fichier de bureau" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Erreur lors de l’obtention des informations pour le type de contenu" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Aucune application par défaut enregistrée" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Erreur lors de l’ouverture du dossier parent" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "Échec de l’obtention du chemin parent" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Dossier" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Type inconnu" #: src/fsearch_filter.c:111 msgid "All" msgstr "Tout" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Dossiers" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Fichiers" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Applications" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archives" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documents" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Images" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Vidéos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Les noms des macros ne doivent pas contenir le caractère « : »." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Annuler" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Modifier le filtre" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Nom :" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Le nom unique de ce filtre" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Nom de filtre unique" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Rechercher dans le chemin d’accès" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Activer les expressions régulières" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Respecter la casse" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Requête :" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Macro :" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "La macro pour ce filtre. Une macro vous permet d'accéder à ce filtre à " "partir de la barre de recherche en saisissant son texte suivi de « : »\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Propriétés…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Autre application…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Base de données vide" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Ajouter des dossiers" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Chargement de la base de données…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Cela ne sera pas long." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Mise à jour de la base de données…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Ceci peut prendre un peu de temps." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Requête vide" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Appuyez sur Ctrl + F et commencez à écrire." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Aucun résultat trouvé" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Essayez une recherche différente" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Tri des résultats…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Préférences" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Activer le thème sombre" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Activer les décorations coté client (requiert le redémarrage)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Utiliser des unités binaires au lieu des unités décimales" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Se souvenir de la taille de la fenêtre" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Quitter sur Échap" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "avec des raccourcis clavier ou des entrées de menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "avec un double clic" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Comportement à l'ouverture réussie d'un dossier :" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Rien" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimiser" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Fermer" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Général :" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Mettre en évidence les termes de recherche" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Afficher les infobulles" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Afficher les icônes dans la colonne de nom" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Se souvenir de la configuration des colonnes" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Se souvenir de l'ordre de tri" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" "Ouvrir le chemin d’accès en double-cliquant dans la colonne correspondante" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Simple clique pour ouvrir" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Exécuter les fichiers .desktop" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Résultats :" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Afficher le status d'indexation de la base de données" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Barre d'état :" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Afficher un avertissement lorsque :" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "le fichier/dossier n'a pas pu être ouvert" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Dialogues :" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interface" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" "Rechercher dans le chemin d’accès quand la requête contient des séparateurs " "de chemin d’accès" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Rechercher au fur et à mesure de la saisie" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Cacher les résultats lorsque la recherche est vide" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "Respecter la casse quand la requête contient des majuscules" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Ajouter un nouveau filtre" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Supprimer le filtre sélectionné" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Modifier le filtre sélectionné" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Restaurer les filtres par défaut" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filtre :" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Rechercher" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Mettre à jour la base de données au démarrage" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Mettre à jour toutes les" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "heure(s) et" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minute(s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Ajouter le chemin d’accès à inclure dans la base de données\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Retirer le chemin d’accès sélectionné" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Inclure" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Ajouter le chemin d’accès à exclure de la base de données" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Les jokers sont acceptés. Séparez les entrées avec un point-virgule" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Exclure les fichiers :" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "par ex. « .git;*.tmp »" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Exclure les fichiers et dossiers cachés" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Exclure" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de données" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Activer le thème sombre :\n" "\n" "Si cette option est activée, il sera demandé au thème système d'utiliser un " "style plus sombre pour l'application (ex : éléments de l'interface " "sombres avec texte clair).\n" "\n" "Notez que certains thèmes système ne fournissent pas une variante sombre, " "dans ce cas cette option n'aura aucun effet." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Activer les décorations côté client :\n" "\n" "Si cette option est activée, la barre de recherche et le menu principal " "s'affichent dans la barre de titre de la fenêtre.\n" "\n" "Si cette option est désactivée, le menu principal s'affiche sous la forme " "d'une barre de menus avec la barre de recherche en dessous.\n" "Cette disposition est plus traditionnelle et prend un peu plus d'espace." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Utiliser des unités binaires au lieu des unités décimales :\n" "\n" "Ce paramètre contrôle la manière dont les tailles de fichier sont " "affichées.\n" "\n" "\t• Unités binaires : Ceci fait référence aux préfixes binaires IEC " "(par exemple 1 Kio = 1024 octets)\n" "\t• Unités décimales : Cela fait référence aux préfixes décimaux SI " "(par exemple 1 ko = 1000 octets)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Se rappeler de la taille de la fenêtre :\n" "\n" "Si cette option est activée, la taille de la fenêtre de la session " "précédente sera restaurée lorsque vous ouvrez une fenêtre FSearch.\n" "\n" "Notez que certains gestionnaires de fenêtres ignorent cette demande et " "forcent la fenêtre à avoir une taille différente." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Comportement après l'ouverture réussie d'un fichier :\n" "\n" "Lorsqu'un fichier/dossier a été ouvert avec succès, l'une des actions " "suivantes peut être effectuée :\n" "\t• Rien : Rien ne se passe.\n" "\t• Réduire : La fenêtre FSearch est réduite.\n" "\t• Fermer : Quitter FSearch.\n" "\n" "Vous pouvez configurer si ces actions doivent être déclenchées lorsque le " "fichier a été ouvert avec\n" "\t• un raccourci clavier ou les entrées de menu et/ou\n" "\t• un clic de souris" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Mettre en évidence les termes de recherche :\n" "\n" "Si cette option est activée, les termes de recherche seront mis en évidence. " "Par exemple, lorsque vous recherchez « foo », toutes les occurrences de " "foo dans les noms de fichiers et de dossiers seront mis en gras :\n" "\n" "\tfoo bar.txt\n" "\tfichier. foo\n" "\n" "Cela fonctionne également pour les expressions régulières et les expressions " "génériques commençant ou finissant par un astérisque. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Afficher les infobulles :\n" "\n" "Si cette option est activée, les résultats afficheront le chemin d’accès " "complet du fichier/dossier sélectionné dans une infobulle." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Afficher les icônes dans la colonne de nom :\n" "\n" "Si cette option est activée, les icônes de fichier/dossier seront affichées " "dans la colonne de nom." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Se souvenir de la configuration des colonnes :\n" "\n" "Si cette option est activée, la configuration des colonnes de la page des " "résultats de la session précédente sera restaurée lorsque vous ouvrez une " "nouvelle fenêtre FSearch. Cela inclut la taille et la visibilité de toutes " "les colonnes." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Se souvenir de l'ordre de tri :\n" "\n" "Si cette option est activée, l'ordre de tri de la page des résultats de la " "session précédente sera restauré lorsque vous ouvrez une nouvelle fenêtre " "FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Ouvrir le chemin d’accès avec un double clic :\n" "\n" "Si cette option est activée, un double-clic dans la colonne du chemin " "d’accès ouvrira celui-ci." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Un seul clic pour ouvrir :\n" "\n" "Si cette option est activée, un simple clic ouvrira le fichier/dossier " "sélectionné. Si vous souhaitez uniquement sélectionner un fichier/dossier " "pendant que ce paramètre est actif, vous devez maintenir Ctrl en même " "temps tout en cliquant sur le fichier/dossier." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Afficher l'état de l'indexation de la base de données :\n" "\n" "Si cette option est activée, le chemin d'accès en cours d'indexation est " "affiché dans la barre d'état." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Afficher les boîtes de dialogue d'avertissement :\n" "\n" "Si cette option est activée, une boîte de dialogue d'avertissement " "s'affichera lorsqu'un fichier ou un dossier n'a pas pu s'ouvrir." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Rechercher dans le chemin lorsque la requête contient des séparateurs de " "chemin :\n" "\n" "Si cette option est activée, les termes de recherche contenant des " "séparateurs de chemin d'accès (c'est-à-dire \"/\") seront automatiquement " "comparés au chemin d'accès complet d'un fichier ou d'un dossier." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Faire correspondre la casse lorsque la requête contient au moins un " "caractère majuscule :\n" "\n" "Si cette option est activée, les termes de recherche contenant au moins un " "caractère majuscule déclencheront une recherche sensible à la casse. Cela " "signifie qu'un terme de recherche comme Toto correspondra à " "TotoBar.txt mais pas à totobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Masquer les résultats lorsque la recherche est vide :\n" "\n" "Si cette option est activée, aucun résultat de recherche n'est affiché " "lorsque la zone de recherche est vide.\n" "\n" "Si cette option est désactivée, tous les fichiers et dossiers sont affichés " "lorsque la zone de recherche est vide." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Afficher les résultats en temps réel :\n" "\n" "Si cette option est activée, la recherche est automatiquement mise à jour à " "chaque frappe.\n" "\n" "Si cette option est désactivée, la recherche n'est mise à jour que lorsque " "vous appuyez sur Entrée ou sur l'icône de recherche. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Mettre à jour la base de données au démarrage :\n" "\n" "Si cette option est activée, la base de données sera mise à jour " "automatiquement en arrière-plan lorsque vous démarrez FSearch." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Dossiers inclus :\n" "\n" "Cette liste contient tous les dossiers que vous souhaitez inclure dans la " "base de données.\n" "\n" "\t• Actif : Si activé, le chemin d'accès sera inclus dans la base de " "donnée pour être recherché.\n" "\t• Chemin d'accès : Le chemin d'accès complet à inclure.\n" "\t• Système de fichiers unique : Si activé, FSearch ne franchira pas " "les limites du système de fichiers pour ce dossier (recherchera uniquement " "dans la partition spécifiée)" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Ajouter le dossier dans la base de données :\n" "\n" "Ce bouton ouvre une boîte de dialogue dans laquelle vous pouvez inclure un " "dossier dans la base de données pour être recherché." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Supprimer la ligne sélectionnée :\n" "\n" "Ceci retire le dossier sélectionné de la liste des dossiers inclus." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Dossiers exclus :\n" "\n" "Cette liste contient tous les dossiers que vous souhaitez exclure de la base " "de données.\n" "\n" "\t• Actif : Si activé, le chemin sera exclu de la base de donnée et " "ne pourra être recherché.\n" "\t• Chemin d'accès : Le chemin d'accès complet à exclure." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Exclure le dossier de la base de données :\n" "\n" "Ce bouton ouvre une boîte de dialogue dans laquelle vous pouvez sélectionner " "un dossier que vous souhaitez exclure de la base de données." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Supprimer la ligne sélectionnée :\n" "\n" "Ceci retire le dossier sélectionné de la liste des dossiers exclus." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Exclure des fichiers et des dossiers de la base de données :\n" "\n" "Il s'agit d'une liste de fichiers (ou de dossiers) séparés par des points-" "virgules que vous souhaitez exclure de la base de données. Par exemple, ." "git;.cache;*.swp exclura tous les fichiers ou dossiers appelés .git ou .cache ou se terminant par .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Exclure les fichiers et dossiers cachés :\n" "\n" "Si cette option est activée, les fichiers et dossiers cachés seront exclus " "de la base de données (c'est-à-dire tous les fichiers ou dossiers " "commençant par un point)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Placez le curseur sur un paramètre pour afficher l'aide." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Mettre à jour périodiquement la base de données à un intervalle de temps " "spécifique :\n" "\n" "Si cette option est activée, tant que FSearch est en cours d'exécution, la " "base de données sera mise à jour périodiquement avec l'intervalle de temps " "donné.\n" "\n" "Si vous souhaitez mettre à jour la base de données en arrière-plan lorsque " "FSearch n'est pas en cours d'exécution, vous devez utiliser des outils comme " "les minuteries Cron ou Systemd pour déclencher périodiquement la mise à jour " " :\n" "\n" " fsearch --update-database " #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Exécuter les fichiers .desktop :\n" "\n" "Si cette option est activée, l'exécution d'un fichier .desktop " "lancera l'application correspondante. Ainsi, FSearch se comporte comme un " "lanceur d'applications. Sinon, le fichier .desktop sera ouvert avec " "the l'application par défaut pour ce type d'extension de fichier, " "habituellement un éditeur de texte." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filtres :\n" "\n" "Il s'agit d'une liste de tous les filtres disponibles. Un filtre est une " "recherche prédéfinie.\n" "\n" "\t• Nom : Un identifiant unique qui décrit le filtre\n" "\t• Macro : En saisissant le texte de la macro suivi d'un « : » ; " "vous pouvez activer le filtre sur demande\n" "\t• Requête : Le terme de recherche par lequel la base de données " "doit être filtrée" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Ajouter un nouveau filtre :\n" "\n" "Ce bouton ouvre une boîte de dialogue dans laquelle vous pouvez éditer un " "nouveau filtre." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Supprimer le filtre sélectionné :\n" "\n" "Ce bouton supprime le filtre sélectionné." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Modifier le filtre sélectionné :\n" "\n" "Ce bouton ouvre une boîte de dialogue dans laquelle vous pouvez modifier le " "filtre sélectionné." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Restaurer les filtres par défaut :\n" "\n" "Ce bouton restaure la configuration des filtres par défaut.\n" "\n" "⚠ Tous les filtres créés ou modifiés par l'utilisateur seront perdus ! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Quitter sur Échap :\n" "\n" "Si cette option est activée, FSearch se ferme lorsque la touche Échap est " "enfoncée au lieu de réduire la fenêtre." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Aide" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Sélectionnez un dossier" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Sélectionner" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Ajouter un filtre" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Actif" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Chemin d'accès" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Système de fichiers unique" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nom" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Macro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Requête" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d élément" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d éléments" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Requête en cours…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Chargement…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Balayage…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Nombre de résultats de recherche" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 élément" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "Annuler" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Index :" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Nombre de dossiers sélectionnés" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Nombre de fichiers sélectionnés" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Annuler la mise à jour de la base de données" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Nombre d'éléments dans la base de données" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(vide)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Le terme de recherche des caractères majuscules.\n" "Correspondre à la casse a été temporairement activé pour ce terme." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASSE" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Le terme de recherche contient un séparateur de chemin d'accès.\n" "Rechercher dans le chemin d'accès a été temporairement activé pour ce " "terme." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "CHEMIN" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Taille" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Type" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extension" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Date de modification" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Le tri par Type peut prendre quelques secondes avec de nombreux " "résultats.\n" "\n" "Cet ordre de tri n'est pas permanent, il sera réinitialisé lorsque le terme " "de recherche changera." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch en ligne" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Faire un don" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Rapports de bogues et requêtes pour de nouvelles fonctionnalités" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub Sponsors" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nouvelle fenêtre" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Mettre à jour la base de données" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Rechercher dans le chemin d'accès" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Respecter la casse" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Activer les expressions régulières" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Afficher la barre d'état" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Afficher le filtre" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Afficher le bouton de recherche" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "À propos" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Quitter" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Rechercher…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Sélectionner un filtre" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Voulez-vous vraiment ourvrir %d fichier(s) ?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Ouverture des fichiers…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Voulez-vous vraiment supprimer %d fichier(s) ?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Suppression des fichiers…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Déplacement des fichiers dans la corbeille…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Quelque chose s’est mal passé." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "%d fichier(s) supprimé(s)." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "%d fichier(s) déplacé(s) dans la corbeille." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "La base de données doit être mise à jour avant de prendre connaissance de " "ces changements ! Ceci sera réparé dans de futures mises à jour." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Voulez-vous vraiment ouvrir %d fenêtre(s) de propriétés ?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Ouverture des propriétés du fichier…" #: src/menus.ui:6 msgid "_File" msgstr "_Fichier" #: src/menus.ui:9 msgid "New Window" msgstr "Nouvelle fenêtre" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Ouvrir" #: src/menus.ui:21 msgid "Open Folder" msgstr "Ouvrir le dossier" #: src/menus.ui:29 msgid "Update Database" msgstr "Mettre à jour la base de données" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Annuler la mise à jour" #: src/menus.ui:42 msgid "Close Window" msgstr "Fermer la fenêtre" #: src/menus.ui:54 msgid "_Edit" msgstr "_Modifier" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copier" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Cou_per" #: src/menus.ui:69 msgid "Select All" msgstr "Tout sélectionner" #: src/menus.ui:74 msgid "Deselect All" msgstr "Tout désélectionner" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverser la sélection" #: src/menus.ui:92 msgid "_View" msgstr "_Affichage" #: src/menus.ui:109 msgid "_Search" msgstr "_Rechercher" #: src/menus.ui:126 msgid "_Help" msgstr "_Aide" #: src/menus.ui:171 msgid "Open _With" msgstr "Ouvrir _avec" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Ouvrir le dossier" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copier texte" #: src/menus.ui:217 msgid "Path + Name" msgstr "Chemin d'accès + Nom" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Déplacer dans la _corbeille" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Ajouter le chemin d’accès à inclure dans la base de données\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Ajouter un dossier à la base de données :\n" #~ "\n" #~ " Ce bouton ouvre une boîte de dialogue dans laquelle " #~ "vous pouvez sélectionner un dossier que vous souhaitez inclure dans la " #~ "base de données pour\n" #~ " recherche.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Un terme de la recherche contient des lettres majuscules.\n" #~ "Respecter la casse a été temporariement activé pour ce terme." #~ msgid "page0" #~ msgstr "page0" #~ msgid "page1" #~ msgstr "page1" #~ msgid "page2" #~ msgstr "page2" #~ msgid "page30" #~ msgstr "page30" #~ msgid "page18" #~ msgstr "page18" #~ msgid "page31" #~ msgstr "page31" #~ msgid "page32" #~ msgstr "page32" #~ msgid "page33" #~ msgstr "page33" #~ msgid "page34" #~ msgstr "page34" #~ msgid "page35" #~ msgstr "page35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Dossiers inclus :\n" #~ "\n" #~ "Cette liste contient tous les dossiers que vous souhaitez inclure dans la " #~ "base de données.\n" #~ "\n" #~ " • Actif : Si cette option est activée, le " #~ "chemin sera inclus dans la base de données à rechercher.\n" #~ " • Chemin : Le chemin complet à inclure.\n" #~ " • Mise à jour : Ce paramètre est utile si " #~ "vous souhaitez éviter que certains chemins ne soient\n" #~ " mis à jour (par exemple, un chemin vers une clé " #~ "USB lente qui ne change pas souvent)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Supprimer la ligne sélectionnée :\n" #~ "\n" #~ " Ceci supprime le dossier sélectionné de la liste " #~ "des dossiers inclus.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Voulez-vous garder la fenêtre ouverte ?" #~ msgid "_Copy Filepath" #~ msgstr "_Copier le chemin d'accès du fichier" #~ msgid "Building lookup list…" #~ msgstr "Construction de la liste de recherche…" #~ msgid "Update" #~ msgstr "Mettre à jour" #~ msgid "≥%'d Items" #~ msgstr "≥%'d éléments" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Dernière mise à jour : %d/%m/%Y à %H:%M" #~ msgid "_Delete" #~ msgstr "_Supprimer" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Limiter le nombre de résultats :" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Nombre limité de résultats :\n" #~ "\n" #~ "S'il est activé, le nombre de résultats de recherche sera limité au " #~ "nombre spécifié.\n" #~ "\n" #~ "L'affichage de nombreux résultats a un impact significatif sur les " #~ "performances, en particulier lorsque la liste n'est pas triée par nom. " #~ "Cela sera amélioré dans les versions futures." #~ msgid "Background tasks are active." #~ msgstr "Des tâches d'arrière-plan sont actives." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Fermer la fenêtre n'est pas possible pour le moment.\n" #~ "Veuillez patienter un instant puis réessayer." #~ msgid "label" #~ msgstr "Étiquette" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Allez dans Édition → Préférences → Base de données et ajoutez " #~ "quelques dossiers" #~ msgid "page4" #~ msgstr "page4" #~ msgid "page6" #~ msgstr "page6" #~ msgid "page7" #~ msgstr "page7" #~ msgid "page8" #~ msgstr "page8" #~ msgid "page9" #~ msgstr "page9" #~ msgid "page10" #~ msgstr "page10" #~ msgid "page11" #~ msgstr "page11" #~ msgid "page12" #~ msgstr "page12" #~ msgid "page13" #~ msgstr "page13" #~ msgid "page14" #~ msgstr "page14" #~ msgid "page15" #~ msgstr "page15" #~ msgid "page16" #~ msgstr "page16" #~ msgid "page17" #~ msgstr "page17" #~ msgid "page19" #~ msgstr "page19" #~ msgid "page20" #~ msgstr "page20" #~ msgid "page21" #~ msgstr "page21" #~ msgid "page22" #~ msgstr "page22" #~ msgid "page23" #~ msgstr "page23" #~ msgid "page24" #~ msgstr "page24" #~ msgid "page25" #~ msgstr "page25" #~ msgid "page26" #~ msgstr "page26" #~ msgid "page27" #~ msgstr "page27" #~ msgid "page28" #~ msgstr "page28" #~ msgid "page29" #~ msgstr "page29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Copier" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Activer le thème sombre pourrait ne pas avoir d'effet.\n" #~ "Certaines plateformes ne prennent pas en charge les thèmes sombres et " #~ "d'autres les utilisent toujours par défaut." #~ msgid "Add…" #~ msgstr "Ajouter…" #~ msgid "Remove" #~ msgstr "Supprimer" #~ msgid "Follow symbolic links" #~ msgstr "Suivre les liens symboliques" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "Attention : « Activer le thème obscur » pourrait ne pas avoir d'effet,\n" #~ "puisque tous les thèmes GTK+ n'offrent pas de version sombre." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Activer les expressions régulières" #~ msgid "Open Containing Folder" #~ msgstr "Ouvrir le dossier contenant" #~ msgid "Open File(s) in File Manager" #~ msgstr "Ouvrir le(s) fichier(s) dans le gestionnaire de fichiers" #~ msgid "Move to Trash" #~ msgstr "Déplacer dans la corbeille" #~ msgid "Show Menubar" #~ msgstr "Afficher la barre de menus" #, fuzzy #~ msgid "Enable" #~ msgstr "Activer les expressions régulières" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Chargement de la base de données…" #~ msgid "..." #~ msgstr "…" #~ msgid "Updating Database..." #~ msgstr "Mise à jour de la base de données…" #~ msgid "Search..." #~ msgstr "Rechercher…" #~ msgid "Add" #~ msgstr "Ajouter" #~ msgid "files?" #~ msgstr "fichiers ?" #~ msgid "C_ut" #~ msgstr "C_ouper" #~ msgid "Selected Folder and Files" #~ msgstr "Dossiers et Fichiers Sélectionnés" fsearch-0.2.3/po/fsearch.pot000066400000000000000000000700631446344336300157240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the fsearch package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: fsearch\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 msgid "Saving…" msgstr "" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "" #: src/fsearch_filter.c:113 msgid "Files" msgstr "" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "" #: src/menus.ui:6 msgid "_File" msgstr "" #: src/menus.ui:9 msgid "New Window" msgstr "" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "" #: src/menus.ui:21 msgid "Open Folder" msgstr "" #: src/menus.ui:29 msgid "Update Database" msgstr "" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 msgid "Close Window" msgstr "" #: src/menus.ui:54 msgid "_Edit" msgstr "" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "" #: src/menus.ui:74 msgid "Deselect All" msgstr "" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "" #: src/menus.ui:109 msgid "_Search" msgstr "" #: src/menus.ui:126 msgid "_Help" msgstr "" #: src/menus.ui:171 msgid "Open _With" msgstr "" #: src/menus.ui:185 msgid "_Open Folder" msgstr "" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "" fsearch-0.2.3/po/gl.po000066400000000000000000001066631446344336300145350ustar00rootroot00000000000000# Galician translations for FSearch package. # Copyright (C) 2018 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2018. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta3.4-e3cd\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2018-10-23 21:29+0000\n" "Last-Translator: Iván \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.3-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 #, fuzzy msgid "A file search application focusing on performance and advanced features" msgstr "" "Utilidade de procura enfocada no rendemento e funcionalidades avanzadas" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "Excluír ficheiros e cartafoles agochados" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "Cargando a base de datos..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Utilidade de procura enfocada no rendemento e funcionalidades avanzadas" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "Abrir con outro aplicativo" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Amosar botón da procura" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Actualizar base de datos" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "Cargando a base de datos..." #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "Eliminando ficheiros..." #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "Cargando a base de datos..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "Abrir con outro aplicativo" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Cartafoles" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Todo" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Cartafoles" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Ficheiros" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "Outro aplicativo" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Nome" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Procurar na ruta" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Coincidencia maiúsculas e minúsculas" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "Outro aplicativo" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Baleirar base de datos" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Cartafoles" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "Cargando a base de datos..." #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "Isto pode tardar unha miga." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "Actualizando a base de datos..." #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Isto pode tardar unha miga." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Borrar consulta" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Prema Ctrl + F e comece a escribir" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Non se atoparon resultados" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Tentar cunha procura distinta" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferencias" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Activar o tema escuro" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Usar unidades binarias no canto de unidades decimais" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Lembrar o tamaño da xanela" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Amosar axuda emerxente" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Amosar iconas na columna dos nomes" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Lembrar a configuración das columnas" #: src/fsearch_preferences.ui:413 #, fuzzy msgid "Remember sort order" msgstr "Lembrar o tamaño da xanela" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "Actualizar a base de datos ao iniciar" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "Amosar barra do estado" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interface" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Procurar na ruta cando a consulta contén separadores de ruta" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Procurar mentres escribo" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Agochar resultados cando a procura está baleira" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "Procurar na ruta cando a consulta contén separadores de ruta" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Cartafoles" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "Número de resultados da procura" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "Número de resultados da procura" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Amosar filtro" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Procurar" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Actualizar a base de datos ao iniciar" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Incluír" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Acepta comodíns. Múltiples entradas deben separarse con «;»" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Excluír ficheiros:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "Exemplo: «.git;*.tmp»" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Excluír ficheiros e cartafoles agochados" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Excluír" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de datos" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "Axuda" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "Seleccionar un filtro" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "Desmarcar todo" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Cartafoles" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Ruta" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Abrir ficheiro(s)" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nome" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Borrar consulta" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d elementos" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elementos" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "Cargando a base de datos..." #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Número de resultados da procura" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elementos" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "Número de resultados da procura" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "Número de resultados da procura" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "Actualizar a base de datos ao iniciar" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "Número de resultados da procura" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(baleiro)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASO" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "RUTA" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "EXPRESIÓNS REGULARES" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tamaño" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipo" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Data de modificación" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "Nova xanela" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "Actualizar base de datos" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Procurar na ruta" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Coincidencia maiúsculas e minúsculas" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Activar expresións regulares" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Amosar barra do estado" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Amosar filtro" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Amosar botón da procura" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "Procurar" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Seleccionar un filtro" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "Confirma a eliminación" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "Abrir ficheiro(s)" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Confirma a eliminación" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "Eliminando ficheiros..." #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "Movendo ficheiros ao lixo..." #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "Eliminando ficheiros..." #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "Movendo ficheiros ao lixo..." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Confirma a eliminación" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Abrir ficheiro(s)" #: src/menus.ui:6 msgid "_File" msgstr "_Ficheiro" #: src/menus.ui:9 msgid "New Window" msgstr "Nova xanela" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Abrir" #: src/menus.ui:21 msgid "Open Folder" msgstr "Abrir cartafol" #: src/menus.ui:29 msgid "Update Database" msgstr "Actualizar base de datos" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Nova xanela" #: src/menus.ui:54 msgid "_Edit" msgstr "_Editar" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copiar" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "Desmarcar todo" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desmarcar todo" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverter selección" #: src/menus.ui:92 msgid "_View" msgstr "_Ver" #: src/menus.ui:109 msgid "_Search" msgstr "_Procurar" #: src/menus.ui:126 msgid "_Help" msgstr "Axuda" #: src/menus.ui:171 msgid "Open _With" msgstr "Abrir _con" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Abrir cartafol" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Mover ao _lixo" #~ msgid "page0" #~ msgstr "páxina0" #~ msgid "page1" #~ msgstr "páxina1" #, fuzzy #~ msgid "page2" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "páxina0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "páxina1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "páxina0" #~ msgid "_Copy Filepath" #~ msgstr "_Copiar ruta ao ficheiro" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d elementos" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Última actualización: %d-%m-%Y, %H:%M" #~ msgid "_Delete" #~ msgstr "_Eliminar" #~ msgid "Limit number of results:" #~ msgstr "Limitar o número de resultados:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Ir a Editar → Preferencias → Base de datos e engadir algunhas " #~ "localizacións" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "páxina0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "páxina1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "páxina1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "páxina0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "páxina1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "páxina0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "páxina0" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Copiar" #~ msgid "Remove" #~ msgstr "Eliminar" #~ msgid "Follow symbolic links" #~ msgstr "Seguir ligazóns simbólicas" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFORMACIÓN: «Activar o tema escuro» quizais non funcione\n" #~ "porque non todos os temas GTK+ teñen unha versión escura." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Activar expresións regulares" #~ msgid "Open Containing Folder" #~ msgstr "Abrir cartafol contedor" #~ msgid "Open File(s) in File Manager" #~ msgstr "Abrir ficheiro(s) co xestor de ficheiros" #~ msgid "Move to Trash" #~ msgstr "Mover ao lixo" #~ msgid "Show Menubar" #~ msgstr "Amosar barra do menú" #, fuzzy #~ msgid "Enable" #~ msgstr "Activar expresións regulares" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Cargando a base de datos..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Actualizando a base de datos..." #~ msgid "Search..." #~ msgstr "Procurar..." #~ msgid "Add" #~ msgstr "Engadir" #~ msgid "files?" #~ msgstr "ficheiros?" #~ msgid "C_ut" #~ msgstr "C_ortar" fsearch-0.2.3/po/he.po000066400000000000000000001502051446344336300145160ustar00rootroot00000000000000# Hebrew translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-16 20:17+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "יישום חיפוש קבצים ממוקד ביצועים ותכונות מתקדמות" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "חיפוש;קבצים;תיקיות;מוזיקה;סרטון;וידאו;סרטונים;קליפים;מסמכים;מסמך;חיפוש;איתור;" "כלי;הכול;fsearch;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "יישום גרפי לחיפוש קבצים" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch מסייע לך למצוא קבצים ותיקיות בצורה הקלה והמהירה ביותר. עליך פשוט " "להקליד מספר אותיות ותוצאות החיפוש תופענה כמעט מיידית." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "ישנן מגוון יכולות שהופכות את החיפוש ליעיל ועצמתי במיוחד. כגון:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "התעלמות מרישיות (כלומר: חיפוש אחר „fsearch” ימצא גם את „FSearch”)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "ביטויים רגולריים" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "תמיכה בתווי הכללה" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "תמיכה במסננים (כלומר: חיפוש אחר קובצי שמע בלבד)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "להחריג קבצים ותיקיות מסוימים" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "מיון מהיר לפי שם, נתיב, גודל, מועד השינוי האחרון וסיומת" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "לתשומת לבך: עקב יכולות הבידוד של Flatpak, אין ל־FSearch אפשרות למצוא כל קובץ " "אפשרי במערכת שלך." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "פריסת מנשק המשתמש כבררת מחדל" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "פריסה שיותר דומה לקווי העיצוב המנחים של GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "מהדורה ראשונית." #: src/fsearch.c:243 msgid "Saving…" msgstr "מתבצעת שמירה…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Yaron Shahrabani " #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "כלי חיפוש ממוקד ביצועים ותכונות מתקדמות" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "פתיחת חלון יישום חדש" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "הצגת העדפות היישום" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "הגדרת תבנית החיפוש" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "עדכון מסד הנתונים ויציאה" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "הצגת מידע על הגרסה ויציאה" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "תיקיות נטענות…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "קבצים נטענים…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "מתבצע מיון…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "שגיאה בפתיחת התיקייה" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "בניית פקודת הפתיחה נכשלה" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "שגיאה בהפעלת קובץ desktop" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "קבלת פרטי היישום נכשלה" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "קבלת תצוגת ברירת המחדל נכשלה" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "שגיאה בהסרת קובץ" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "קבלת הנתיב נכשלה" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "שגיאה בהפעלת קובץ desktop" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "שגיאה בקבלת מידע על סוג התוכן" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "לא נרשם יישומון ברירת מחדל" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "שגיאה בפתיחת תיקיית ההורה" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "שגיאה בקבלת נתיב ההורה" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "תיקייה" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "סוג לא ידוע" #: src/fsearch_filter.c:111 msgid "All" msgstr "הכול" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "תיקיות" #: src/fsearch_filter.c:113 msgid "Files" msgstr "קבצים" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "יישומים" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "ארכיונים" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "שמע" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "מסמכים" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "תמונות" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "סרטונים" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "שמות המאקרואים לא יכולים להכיל תווי `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_ביטול" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_אישור" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "עריכת מסנן" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "שם:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "השם הייחודי של המסנן הזה" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "שם ייחודי למסנן" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "חיפוש בנתיב" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "הפעלת ביטויים רגולריים" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "התאמת רישיות" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "שאילתה:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "מאקרו:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "המאקרו למסנן הזה. מאקרו מאפשר לך לגשת למסנן הזה מרשומת החיפוש על ידי הקלדת " "הטקסט ולאחריו ‚:’:\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "מאפיינים…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "יישום אחר…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "מסד נתונים ריק" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "הוספת תיקיות" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "מסד הנתונים נטען…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "פעולה זו לא תארוך זמן רב." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "מסד הנתונים מתעדכן…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "פעולה זו עשויה לארוך זמן מה." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "שאילתה ריקה" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "יש ללחוץ Ctrl + F ולהתחיל להקליד." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "לא נמצאו תוצאות" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "כדאי לנסות חיפוש אחר" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "התוצאות ממוינות…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "העדפות" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "הפעלת ערכת צבעים כהה" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "הפעלת קישוטים בצד לקוח (דורש הפעלה מחדש)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "להשתמש ביחידות בינריות במקום ביחידות עשרוניות" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "לזכור את גודל החלון" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "יציאה עם Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "עם קיצורי מקשים או רשומות בתפריט" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "עם לחיצה כפולה" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "התנהגות לאחר פתיחת קובץ מוצלחת:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "כלום" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "מזעור" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "סגירה" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "כללי:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "הצגת מונחי חיפוש מודגשים" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "הצגת חלוניות עצה" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "הצגת סמלים בעמודת השם" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "שמירת תצורת העמודות" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "שמירת אופן המיון" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "לחיצה כפולה בעמודת הנתיב תפתח את הנתיב" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "לחיצה בודדת לפתיחה" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "הפעלת קובצי desktop" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "תוצאות:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "הצגת מצב הסידור באינדקס של מסד הנתונים" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "שורת מצב:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "להציג חלוניות אזהרה כאשר:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "פתיחת הקובץ / תיקייה נכשלה" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "חלוניות:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "מנשק" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "חיפוש בנתיב כאשר השאילתה מכילה מפרידי נתיב" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "חיפוש בזמן הקלדה" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "הסתרת התוצאות כאשר החיפוש ריק" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "להתאים רישיות כשהשאילתה מכילה לפחות אות אחת לטינית גדולה" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "הוספת מסנן חדש" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "הסרת המסנן הנבחר" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "עריכת המסנן הנבחר" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "שחזור מסנני ברירת המחדל" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "מסנן:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "חיפוש" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "עדכון מסד הנתונים עם ההפעלה" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "עדכון בכל" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "שעות ו־" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "דקה/ות" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "הוספת נתיב להכללה במסד הנתונים\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "הסרת הנתיב הנבחר" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "לכלול" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "הוספת נתיב להחרגה ממסד הנתונים" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "יש תמיכה בתווי הכללה. יש להפריד בין רשומות עם ‚;’" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "קבצים מוחרגים:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "למשל: „‎.git;*.tmp”" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "להחריג קבצים ותיקיות מוסתרים" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "החרגה" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "מסד נתונים" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "הפעלת ערכת עיצוב כהה:\n" "\n" "אם פעילה, ערכת העיצוב של המערכת תקבל בקשה להשתמש בסגנון כהה יותר של המערכת " "(למשל: רכיבי תצוגה כהים על כתב כהה).\n" "\n" "נא לשים לב שלא כל ערכות העיצוב של המערכת מספקות הגוון כהה, לכן הפעלת ההגדרה " "הזאת עשויה לא להשפיע כלל." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "הפעלת עיטורי צד־לקוח:\n" "\n" "אם האפשרות פעילה, רשומת החיפוש והתפריט הראשי מוצגים בשורת הכותרת של החלון.\n" "\n" "אם מושבת, התפריט הראשי מוצג כסרגל תפריטים עם רשומת חיפוש מתחתיו.\n" "מדמה פריסת מנשק משתמש מסורתית יותר ודורשת מעט יותר מקום." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "שימוש ביחידות בינריות במקום ביחידות עשרוניות:\n" "\n" "ההגדרות האלו שולטות באופן הצגת גדלי הקבצים.\n" "\n" "\t• יחידות בינריות: מתייחס לקידומת בינריות לפי IEC (כלומר 1 KiB‏ = " "1024 בתים)\n" "\t• יחידות עשרוניות: מתייחס לקידומות עשרוניות לפי SI (כלומר 1 ק״ב " "= 1000 בתים)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "שמירת גודל החלון:\n" "\n" "אם האפשרות פעילה, גודל החלון מההפעלה הקודמת ישוחזר עם פתיחת החלון של " "FSearch.\n" "\n" "נא לשים לב שחלק ממנהלי החלונות מתעלמים מהבקשה הזאת וכופים גודל שונה על החלון." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "התנהגות לאחר פתיחת קובץ בהצלחה:\n" "\n" "כאשר קובץ/תיקייה נפתחו בהצלחה ניתן לבצע את הפעולות הבאות:\n" "\t• כלום: לא קורה שום דבר.\n" "\t• מזעור: החלון הנוכחי הנבחר של FSearch יתמזער.\n" "\t• סגירה: יציאה מ־FSearch.\n" "\n" "אפשר להגדיר אם הפעולות האלו תופעלנה כאשר קובץ נפתח עם\n" "\t• קיצורי מקלדת או רשומות בתפריט ו/או\n" "\t• לחיצה עם העכבר" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "הצגת ביטויי חיפוש מודגשים:\n" "\n" "אם האפשרות פעילה, ביטויי החיפוש יודגשו בתצוגת התוצאות. למשל: חיפוש אחר „foo” " "ידגיש את כל המופעים של foo בשמות קבצים/תיקיות באותיות בולטות:\n" "\n" "foobar.txt\n" "file.foo\n" "\n" "עובד גם עם ביטויים רגולריים וביטויים עם תווי הכללה שמתחילים או מסתיימים " "בכוכבית. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "הצגת חלוניות עצה:\n" "\n" "אם האפשרות מופעלת, תצוגת התוצאות תציג את הנתיב המלא של הקובץ/נתיב בחלון עצה " "קטן." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "הצגת סמלים בעמודות השם:\n" "\n" "אם האפשרות פעילה, סמלי קובץ/תיקייה יוצגו בעמודת השם." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "שימור הגדרות העמודות:\n" "\n" "אם פעילה, הגדרת העמודות של תצוגת התוצאות מההפעלה הקודמת תשוחזר עם פתיחת חלון " "FSearch. כולל את הגודל ומצב התצוגה של כל העמודות." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "לזכור את סדר המיון:\n" "\n" "אם האפשרות פעילה, סדר המיון של תצוגת התוצאות מההפעלה הקודמת ישוחזר עם פתיחת " "החלון של FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "לפתוח נתיב בלחיצה כפולה בעמודת הנתיב:\n" "\n" "אם האפשרות פעילה, לחיצה כפולה על עמודת הנתיב תפתח את הנתיב הנבחר." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "לחיצה בודדה לפתיחה:\n" "\n" "אם האפשרות מופעלת, לחיצה בודדה תפתח את הקובץ/תיקייה הנבחרים. כדי רק לבחור " "בקובץ/תיקייה כשהאפשרות הזאת פעילה, יש להחזיק את Ctrl בזמן הלחיצה על " "הקובץ/תיקייה." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "הצגת מצב הסידור באינדקס של מסד הנתונים:\n" "\n" "אם האפשרות פעילה, הנתיב שכרגע מסודר באינדקס מוצג בשורת המצב." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "הצגת חלוניות אזהרה:\n" "\n" "אם האפשרות פעילה, חלונית אזהרה תוצג כאשר פתיחה של קובץ או תיקייה נכשלה." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "חיפוש בנתיב כאשר השאילתה מכילה מפרידי נתיב:\n" "\n" "אם האפשרות פעילה, ביטויי החיפוש שמכילים מפרידי נתיב (למשל: „/”) ייבדקו אל " "מול הנתיב המלא של קובץ או תיקייה." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "לבצע התאמה של רישיות כאשר השאילתה מכילה לפחות תו אחד גדול:\n" "\n" "אם האפשרות פעילה, ביטויים לחיפוש שמכילים לפחות אות אחת גדולה יפעילו מצב תלוי " "רישיות. כלומר שביטויים כמו Foo ימצאו את FooBar.txt אך לא את " "foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "הסתרת תוצאות כאשר החיפוש ריק:\n" "\n" "אם האפשרות פעילה, לא מוצגות תוצאות חיפוש כאשר רשומת החיפוש ריקה.\n" "\n" "אם האפשרות מושבתת, כל הקבצים והתיקיות יוצגו כאשר רשומת החיפוש ריקה." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "חיפוש תוך כדי הקלדה:\n" "\n" "אם האפשרות פעילה, החיפוש יעודכן אוטומטית עם כל לחיצה על מקש.\n" "\n" "אם האפשרות מושבתת, החיפוש יעודכן רק בלחיצה על Enter או על כפתור " "החיפוש. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "עדכון מסד הנתונים עם הפתיחה:\n" "\n" "אם פעילה, מסד הנתונים יעודכן ברקע אוטומטית עם הפעלת FSearch." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "תיקיות נכללות:\n" "\n" "רשימה זו מכילה את כל התיקיות להכללה במסד הנתונים.\n" "\n" "\t• פעיל: אם פעיל, הנתיב יוכלל במסד הנתונים לחיפוש.\n" "\t• נתיב: הנתיב המלא להכללה.\n" "\t• מערכת קבצים יחידה: אם פעיל, FSearch לא יחצה גבולות בין מערכות " "קבצים לתיקייה הזאת" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "הוספת תיקייה למסד הנתונים:\n" "\n" "כפתור זה פותח חלונית בה ניתן לבחור תיקייה להכללה במסד הנתונים לחיפוש." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "הסרת השורה הנבחרת:\n" "\n" "מסירה את התיקייה הנבחרת מרשימת התיקיות המוכללות." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "תיקיות מוחרגות:\n" "\n" "רשימה זו מכילה את כל התיקיות להחרגה ממסד הנתונים.\n" "\n" "\t• פעיל: אם פעיל, הנתיב יוחרג ממסד הנתונים ולא ניתן לחפש אחריו.\n" "\t• נתיב: הנתיב המלא להחרגה." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "החרגת תיקייה ממסד הנתונים:\n" "\n" "כפתור זה פותח חלונית בה ניתן לבחור תיקייה להחרגה ממסד הנתונים." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "הסרת השורה הנבחרת:\n" "\n" "מסירה את התיקייה הנבחרת מרשימת התיקיות המוחרגות." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "החרגת קבצים ותיקיות ממסד הנתונים:\n" "\n" "זו רשימה, המופרדת בפסיקים, של קבצים (או תיקיות) שברצונך להחריג ממסד הנתונים. " "למשל ‎.git;.cache;*.swp יחריגו את כל הקבצים והתיקיות שנקראים או ‎." "git או ‎.cache או מסתיימים ב־‎.swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "החרגת קבצים ותיקיות נסתרים:\n" "\n" "אם האפשרות פעילה, קבצים ותיקיות שהוסתרו יוחרגו ממסד הנתונים (דהיינו כל " "הקבצים או התיקיות שמתחילים בתו נקודה)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "אפשר להתמקד בהגדרה כלשהי כדי לקבל תיאור על אופן פעולתה." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "לעדכן את מסד הנתונים באופן סדיר בהפרשי זמן קבועים:\n" "\n" "אם האפשרות פעילה וכל עוד FSearch פעיל, מסד הנתונים יעודכן באופן סדיר במרווחי " "הזמן שצוינו.\n" "\n" "אם ברצונך לעדכן את מסד הנתונים ברקע, אפילו כאשר FSearch אינו פעיל, עליך " "להשתמש בכלים כמו cron או המתזמנים של systemd כדי להריץ את העדכון עם:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "הפעלת קובצי desktop:\n" "\n" "אם האפשרות פעילה, הפעלת קובץ ‎.desktop תפעיל את היישום שמוגדר בקובץ " "הזה. כך FSearch יכול להתנהג כמו משגר יישומים. אחרת, קובץ ה־‎.desktop " "ייפתח עם המטפל בסוג הקבצים האלה כברירת מחדל, בדרך כלל זה עורך טקסט." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "מסננים:\n" "\n" "זאת רשימת כל המסננים הזמינים. מסנן הוא חיפוש מוגדר מראש.\n" "\n" "\t• שם: מזהה ייחודי ומפורט על המסנן\n" "\t• מאקרו: על ידי הקלטת מאקרו שלאחריו ‚:’ אפשר להפעיל סינון לפי " "דרישה\n" "\t• שאילתה: ביטוי החיפוש שלפיו יסונן מסד הנתונים" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "הוספת מסנן חדש:\n" "\n" "כפתור זה פותח חלונית בה ניתן לערוך מסנן חדש." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "הסרת המסנן הנבחר:\n" "\n" "כפתור זה מסיר את המסנן הנבחר." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "עריכת המסנן הנבחר:\n" "\n" "כפתור זה פותח חלונית בה ניתן לערוך את המסנן הנבחר." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "שחזור מסנני ברירת המחדל:\n" "\n" "כפתור זה משחזר את הגדרת ברירת המחדל של המסננים.\n" "\n" "⚠ כל המסננים שנוצרו או נערכו על ידי המשתמש יאבדו לעד! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "יציאה עם Escape:\n" "\n" "אם האפשרות פעילה, FSearch ייסגר עם לחיצה על כפתור ה־Escape במקום רק מזעור " "החלון." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "עזרה" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "בחירת תיקייה" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "ב_חירה" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "הוספת מסנן" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "פעיל" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "נתיב" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "מערכת קבצים אחת" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "שם" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "מאקרו" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "שאילתה" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "פריט %'d" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d פריטים" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "מתבצע תשאול…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "בטעינה…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "מתבצעת סריקה…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "מספר תוצאות החיפוש" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 פריטים" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "ביטול" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "אינדקס:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "מספר התיקיות שנבחרו" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "מספר הקבצים שנבחרו" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "ביטול עדכון מסד הנתונים" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "מספר פריטי מסד הנתונים" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(ריק)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "הביטוי לחיפוש מכיל אותיות גדולות.\n" "התאמת רישיות הופעלה זמנית עבור הביטוי הזה." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "רישיות" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "הביטוי לחיפוש מכיל מפרידי נתיב.\n" "חיפוש בנתיב הופעל זמנית עבור הביטוי הזה." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "נתיב" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "ביטויים רגולריים" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "גודל" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "סוג" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "הרחבה" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "מועד השינוי" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "מיון לפי סוג עלול לארוך מספר שניות כשיש הרבה תוצאות.\n" "\n" "בנוסף, סדר המיון הזה אינו קבוע והוא יאופס כשתנאי החיפוש ישתנו." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch מקוון" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "תרומה" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "פורום" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "דיווחי תקלות ובקשות פיתוח" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "מממנים דרך GitHub" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "חלון חדש" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "עדכון מסד נתונים" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "חיפוש בנתיב" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "התאמת רישיות" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "הפעלת ביטוי רגולרי" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "הצגת שורת מצב" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "הצגת מסנן" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "הצגת כפתור חיפוש" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "על אודות" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "יציאה" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "חיפוש…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "בחירת מסנן" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "לפתוח %d קבצים?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "קבצים נפתחים…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "להסיר %d קבצים?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "הקבצים נמחקים…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "קבצים מועברים לאשפה…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "משהו השתבש." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "נמחקו %d קבצים." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "%d קבצים הועברו לאשפה." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "יש לעדכן את מסד הנתונים בטרם הוא יהיה מודע לשינויים האלה! יתוקן בעדכונים " "העתידיים." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "לפתוח %d חלונות מאפייני קבצים?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "מאפייני הקובץ נפתחים…" #: src/menus.ui:6 msgid "_File" msgstr "_קובץ" #: src/menus.ui:9 msgid "New Window" msgstr "חלון חדש" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_פתיחה" #: src/menus.ui:21 msgid "Open Folder" msgstr "פתיחת תיקייה" #: src/menus.ui:29 msgid "Update Database" msgstr "עדכון מסד הנתונים" #: src/menus.ui:35 msgid "Cancel Update" msgstr "ביטול עדכון" #: src/menus.ui:42 msgid "Close Window" msgstr "סגירת החלון" #: src/menus.ui:54 msgid "_Edit" msgstr "_עריכה" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "ה_עתקה" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "ג_זירה" #: src/menus.ui:69 msgid "Select All" msgstr "בחירה בהכול" #: src/menus.ui:74 msgid "Deselect All" msgstr "ביטול בחירה" #: src/menus.ui:78 msgid "Invert Selection" msgstr "היפוך בחירה" #: src/menus.ui:92 msgid "_View" msgstr "ת_צוגה" #: src/menus.ui:109 msgid "_Search" msgstr "_חיפוש" #: src/menus.ui:126 msgid "_Help" msgstr "ע_זרה" #: src/menus.ui:171 msgid "Open _With" msgstr "פתיחה _עם" #: src/menus.ui:185 msgid "_Open Folder" msgstr "פתיחת _תיקייה" #: src/menus.ui:207 msgid "Copy as Text" msgstr "העתקה כטקסט" #: src/menus.ui:217 msgid "Path + Name" msgstr "נתיב + שם" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "העברה ל_אשפה" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "הוספת נתיב להכללה במסד הנתונים\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "הוספת תיקייה למסד הנתונים:\n" #~ "\n" #~ " כפתור זה פותח חלונית בה ניתן לבחור תיקייה שתיכלל " #~ "במסד הנתונים לצורכי חיפוש.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "ביטוי החיפוש מכיל אותיות גדולות.\n" #~ "התאמת רישיות הופעלה זמנית עבור הביטוי הזה." #~ msgid "page0" #~ msgstr "עמוד0" #~ msgid "page1" #~ msgstr "עמוד1" #~ msgid "page2" #~ msgstr "עמוד2" #~ msgid "page30" #~ msgstr "עמוד30" #~ msgid "page18" #~ msgstr "עמוד18" #~ msgid "page31" #~ msgstr "עמוד31" #~ msgid "page32" #~ msgstr "עמוד32" #~ msgid "page33" #~ msgstr "עמוד33" #~ msgid "page34" #~ msgstr "עמוד34" #~ msgid "page35" #~ msgstr "עמוד35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "תיקיות כלולות:\n" #~ "\n" #~ " רשימה זו מכילה את כל התיקיות שברצונך לכלול במסד " #~ "הנתונים.\n" #~ "\n" #~ " • פעיל: אם מופעל, הנתיב יכלל במסד הנתונים " #~ "לחיפוש בו.\n" #~ " • נתיב: הנתיב המלא שיש לכלול.\n" #~ " • עדכון: הגדרה זו שימושית להחרגת נתיבים " #~ "מסוימים\n" #~ " מעדכון\n" #~ " (למשל: נתיב להתקן USB אטי שלא מתעדכן בתדירות " #~ "גבוהה)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "הסרת השורה הנבחרת:\n" #~ "\n" #~ " מסירה את התיקייה הנבחרת מרשימת התיקיות שנכללות.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "להשאיר את החלון פתוח?" #~ msgid "_Copy Filepath" #~ msgstr "ה_עתקת נתיב קובץ" #~ msgid "Building lookup list…" #~ msgstr "רשימת החיפוש נבנית…" #~ msgid "Update" #~ msgstr "עדכון" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d פריטים" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "עדכון אחרון: %Y-%m-%d %H:%M" #~ msgid "Limit number of results:" #~ msgstr "הגבלת מספר התוצאות:" #~ msgid "system-search" #~ msgstr "system-search" fsearch-0.2.3/po/hu.po000066400000000000000000001110321446344336300145310ustar00rootroot00000000000000# Hungarian translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-07-18 03:41+0000\n" "Last-Translator: Doma Gergő \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Egy fájlkereső alkalmazás, mely a teljesítményre és a fejlett képességekre " "összpontosít" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "keres;search;fsearch;fájlok;mappák;könyvtárak;zene;videó;dokumentumok;talál;" "megtalál;rátalál;találat;eszköz;minden;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "Rejtett fájlok és mappák kizárása" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "Adatbázis betöltése…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Egy keresési segédprogram, mely a teljesítményre és a fejlett képességekre " "összpontosít" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "Megnyitás más alkalmazással" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Keresés gomb mutatása" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Adatbázis frissítése" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "Verzióinformáció megjelenítése" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "Adatbázis betöltése…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "Fájlok törlése…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "Adatbázis betöltése…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open file" msgid "Failed to build open command" msgstr "Fájl megnyitása sikertelen" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "Megnyitás más alkalmazással" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Fájl megnyitása sikertelen" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get path" msgstr "Fájl megnyitása sikertelen" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get parent path" msgstr "Fájl megnyitása sikertelen" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Mappák" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Összes" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Mappák" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Fájlok" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "Más alkalmazás" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Név" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Keresés az élérési útban" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Kis- és nagybetű különböző" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "Más alkalmazás" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Adatbázis kiürítése" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Mappák" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Adatbázis betöltése…" #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "Ez eltarthat egy ideig." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "Adatbázis frissítése..." #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Ez eltarthat egy ideig." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Lekérdezés kiürítése" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Nyomj Ctrl + F-et és kezdj el gépelni" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nincs találat" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Próbálj ki egy másik keresést" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Beállítások" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Sötét téma engedélyezése" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Használj bináris egységeket a decimálisak helyett" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Ablakméret megjegyzése" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "gyorsbillentyűkkel vagy menübejegyzésekkel" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "dupla kattintással" #: src/fsearch_preferences.ui:273 #, fuzzy msgid "Behaviour after successfully opening a file:" msgstr "Viselkedés a fájl sikeres megnyitása után" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Lekicsinyít" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Bezár" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Eszköztippek mutatása" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Ikonok mutatása a név oszlopban" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Oszlopok elrendezésének megjegyzése" #: src/fsearch_preferences.ui:413 #, fuzzy msgid "Remember sort order" msgstr "Ablakméret megjegyzése" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "Adatbázis frissítése indításkor" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "Státuszsor mutatása" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Figyelmeztető párbeszédpanelek megjelenítése, ha:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "fájl / mappa megnyitása sikertelen" #: src/fsearch_preferences.ui:615 #, fuzzy msgid "Dialogs:" msgstr "Párbeszédpanelek" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Felület" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" "Keresés az elérési útban, ha a lekérdezésben útvonal elválasztó karakter van" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Keresés gépelés közben" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Eredmények elrejtése, ha a keresési mező üres" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "" "Keresés az elérési útban, ha a lekérdezésben útvonal elválasztó karakter van" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Mappák" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "Keresési eredmények száma" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "Keresési eredmények száma" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Szűrés mutatása" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Keresés" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Adatbázis frissítése indításkor" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Belefoglalás" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Helyettesítő karakterek támogatva. A bejegyzéseket ';'-vel kell elválasztani" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Fájlok kizárása:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "pl. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Rejtett fájlok és mappák kizárása" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Kizárás" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Adatbázis" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_Súgó" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "Szűrő kiválasztása" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "Minden kijelölés megszüntetése" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Mappák" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Elérési út" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Fájl(ok) megnyitása" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Név" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Lekérdezés kiürítése" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d elem" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elem" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "Adatbázis betöltése…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Keresési eredmények száma" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elem" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "Keresési eredmények száma" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "Keresési eredmények száma" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "Adatbázis frissítése indításkor" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "Keresési eredmények száma" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(üres)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "BETŰMÉRET" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ÚT" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGULÁRIS KIFEJEZÉS" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Méret" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Típus" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Módosítás dátuma" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "Új ablak" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "Adatbázis frissítése" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Keresés az élérési útban" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Kis- és nagybetű különböző" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Reguláris kifejezések engedélyezése" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Státuszsor mutatása" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Szűrés mutatása" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Keresés gomb mutatása" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "Keresés" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Szűrő kiválasztása" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "Biztosan el akarsz távolítani" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "Fájl(ok) megnyitása" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Biztosan el akarsz távolítani" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Fájlok törlése…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Fájlok áthelyezése a Kukába…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Fájlok törlése…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Fájlok áthelyezése a Kukába…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Biztosan el akarsz távolítani" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Fájl(ok) megnyitása" #: src/menus.ui:6 msgid "_File" msgstr "_Fájl" #: src/menus.ui:9 msgid "New Window" msgstr "Új ablak" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Megnyitás" #: src/menus.ui:21 msgid "Open Folder" msgstr "Mappa megnyitása" #: src/menus.ui:29 msgid "Update Database" msgstr "Adatbázis frissítése" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Új ablak" #: src/menus.ui:54 msgid "_Edit" msgstr "_Szerkesztés" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Másol" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "Minden kijelölés megszüntetése" #: src/menus.ui:74 msgid "Deselect All" msgstr "Minden kijelölés megszüntetése" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Kijelölés megfordítása" #: src/menus.ui:92 msgid "_View" msgstr "_Nézet" #: src/menus.ui:109 msgid "_Search" msgstr "_Keresés" #: src/menus.ui:126 msgid "_Help" msgstr "_Súgó" #: src/menus.ui:171 msgid "Open _With" msgstr "Megnyitás _ezzel" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Mappa megnyitása" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Áthelyezés a K_ukába" #~ msgid "page0" #~ msgstr "0. lap" #~ msgid "page1" #~ msgstr "1. lap" #, fuzzy #~ msgid "page2" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "0. lap" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "1. lap" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "0. lap" #~ msgid "Do you want to keep the window open?" #~ msgstr "Nyitva akarja hagyni az ablakot?" #~ msgid "_Copy Filepath" #~ msgstr "_Elérési út másolása" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d elem" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Utoljára frissítve: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Törlés" #~ msgid "Limit number of results:" #~ msgstr "Eredmények számának korlátozása:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Nyisd meg a Szerkesztés → Beállítások → Adatbázis-t és adj hozzá " #~ "néhány helyet" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "0. lap" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "1. lap" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "1. lap" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "0. lap" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "1. lap" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "0. lap" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "0. lap" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Másol" #~ msgid "Remove" #~ msgstr "Eltávolít" #~ msgid "Follow symbolic links" #~ msgstr "Szimbolikus linkek követése" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "MEGJEGYZÉS: \"Sötét téma engedélyezése\" lehet hogy hatástalan,\n" #~ "mivel nem minden GTK+ téma biztosít sötét változatot." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Reguláris kifejezések engedélyezése" #~ msgid "Open Containing Folder" #~ msgstr "Tartalmazó mappa megnyitása" #~ msgid "Open File(s) in File Manager" #~ msgstr "Fájl(ok) megnyitása fájlkezelőben" #~ msgid "Move to Trash" #~ msgstr "Áthelyezés a Kukába" #~ msgid "Show Menubar" #~ msgstr "Menüsor mutatása" #, fuzzy #~ msgid "Enable" #~ msgstr "Reguláris kifejezések engedélyezése" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Adatbázis betöltése…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Adatbázis frissítése..." #~ msgid "Search..." #~ msgstr "Keresés..." #~ msgid "Add" #~ msgstr "Hozzáad" #~ msgid "files?" #~ msgstr "fájlt?" #~ msgid "C_ut" #~ msgstr "_Kivág" fsearch-0.2.3/po/id.po000066400000000000000000001027251446344336300145220ustar00rootroot00000000000000# Indonesian translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2021-10-30 00:43+0000\n" "Last-Translator: Reza Almanda \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.9-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Ekpresi reguler" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Dukungan wildcard" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Dukungan filter ( khusus pencarian file audio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Rilis awal." #: src/fsearch.c:243 msgid "Saving…" msgstr "Menyimpan…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Reza Almanda (rezaalmanda.github.io)" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Buka jendela aplikasi baru" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Tampilkan preferensi aplikasi" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Atur pola pencarian" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Perbarui basisdata dan keluar" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Cetak informasi versi dan keluar" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Memuat folder…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Memuat berkas…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Penyortiran…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Gagal membuka:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Buka jendela aplikasi baru" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Gagal membuka berkas" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Gagal membuka:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Tampilkan preferensi aplikasi" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Gagal membuka:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Folder" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tipe Tidak Diketahui" #: src/fsearch_filter.c:111 msgid "All" msgstr "Semua" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Folder" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Berkas" #: src/fsearch_filter.c:115 #, fuzzy #| msgid "Other Application…" msgid "Applications" msgstr "Aplikasi lainnya…" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arsip" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumen" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Gambar" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Video" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Batal" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Ok" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Nama" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Cari di Jalur" #: src/fsearch_filter_editor.ui:87 #, fuzzy #| msgid "Regular expressions" msgid "Enable regular expressions" msgstr "Ekpresi reguler" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Cocokan huruf" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Properti…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Aplikasi lainnya…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Basis Data Kosong" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Tambah folder" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Memuat database…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Ini tidak akan lama." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Memperbarui Basisdata…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Ini mungkin memakan waktu cukup lama." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Kueri Kosong" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Tekan Ctrl + F dan mulai mengetik" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Tidak ada hasil yang ditemukan" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Coba pencarian lain" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Menyortir hasil…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferensi" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Aktifkan tema gelap" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Aktifkan dekorasi client-side (memerlukan restart)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Gunakan unit biner, bukan unit desimal" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Ingat ukuran jendela" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "dengan pintasan papan tik atau entri menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "dengan klik dua kali" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Tidak ada" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimalkan" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Tutup" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Umum:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Tampilkan istilah pencarian yang disorot" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Tampilkan tooltips" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Tampilkan ikon di kolom nama" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Ingat konfigurasi kolom" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Ingat susunan urutan" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Buka jalur dengan klik ganda di kolom jalur" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Satu klik untuk membuka" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Hasil:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Bilah status:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Tampilkan dialog peringatan ketika:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "berkas / folder gagal dibuka" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Dialog:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Antarmuka" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Cari di jalur ketika kueri berisi pemisah jalur" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Cari saat Anda mengetik" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Sembunyikan hasil saat pencarian kosong" #: src/fsearch_preferences.ui:701 #, fuzzy #| msgid "Search in path when query contains path separators" msgid "Match case when query contains at least one upper case character" msgstr "Cari di jalur ketika kueri berisi pemisah jalur" #: src/fsearch_preferences.ui:769 #, fuzzy #| msgid "Add folders" msgid "Add new filter" msgstr "Tambah folder" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Number of selected files" msgid "Remove selected filter" msgstr "Jumlah berkas yang dipilih" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "Jumlah berkas yang dipilih" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Tampilkan Filter" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Cari" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Perbarui setiap" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "jam dan" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minit" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Sertakan" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Menambahkan lokasi yang akan dikecualikan dari database" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Mendukung wildcard. Beberapa entri harus dipisahkan oleh ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Kecualikan berkas:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "contoh \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Mengecualikan" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Database" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" " Tampilkan tooltips:\n" "\n" "Jika diaktifkan, hasil tangkapan akan menampilkan lokasi lengkap file/folder " "yang dituju di jendela tooltip kecil." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" " Tampilkan ikon di kolom nama:\n" "\n" "Jika diaktifkan, ikon file/folder akan ditampilkan di kolom nama." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" " Ingat konfigurasi kolom:\n" "\n" "Jika diaktifkan, konfigurasi kolom tampilan hasil dari sesi sebelumnya akan " "dipulihkan saat Anda membuka jendela FSearch. Ini termasuk ukuran dan " "visibilitas semua kolom." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Bantuan" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Pilih folder" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Pilih" #: src/fsearch_preferences_ui.c:326 #, fuzzy #| msgid "Add folders" msgid "Add filter" msgstr "Tambah folder" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktif" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Jalur" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nama" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Kueri Kosong" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d Item" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Item" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Memuat…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Memindai…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Jumlah hasil pencarian" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Item" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Batal" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indeks:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Jumlah folder yang dipilih" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Jumlah berkas yang dipilih" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Batalkan pembaruan database" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Jumlah item basisdata" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(kosong)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "JALUR" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Ukuran" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Jenis" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Ekstensi" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Tanggal Dimodifikasi" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Jendela baru" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Memperbarui database" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Cari di Jalur" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Cocokan huruf" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Aktifkan RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Tampilkan Bilah status" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Tampilkan Filter" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Tampilkan Tombol Pencarian" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Tentang" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Keluar" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Cari…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Pilih filter" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Anda pasti mahu buka %d fail?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Membuka berkas…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Anda pasti mahu hapuskan %d fail?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Menghapus file…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Memindahkan file ke sampah…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Menghapus file…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Memindahkan file ke sampah…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Apakah Anda benar-benar ingin membuka jendela properti file %d?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Membuka properti file…" #: src/menus.ui:6 msgid "_File" msgstr "_Fail" #: src/menus.ui:9 msgid "New Window" msgstr "Buka Jendela" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Buka" #: src/menus.ui:21 msgid "Open Folder" msgstr "Buka Folder" #: src/menus.ui:29 msgid "Update Database" msgstr "Perbarui Database" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Batalkan Pembaruan" #: src/menus.ui:42 msgid "Close Window" msgstr "Tutup Jendela" #: src/menus.ui:54 msgid "_Edit" msgstr "_Sunting" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Salin" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Poto_ng" #: src/menus.ui:69 msgid "Select All" msgstr "Pilih Semua" #: src/menus.ui:74 msgid "Deselect All" msgstr "Batal pilih semua" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Pemilihan Invert" #: src/menus.ui:92 msgid "_View" msgstr "_Lihat" #: src/menus.ui:109 msgid "_Search" msgstr "_Cari" #: src/menus.ui:126 msgid "_Help" msgstr "_Bantuan" #: src/menus.ui:171 msgid "Open _With" msgstr "Buka_dengan" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Buka Folder" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Salin sebagai Teks" #: src/menus.ui:217 msgid "Path + Name" msgstr "Path + Nama" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Pindah ke _Sampah" #~ msgid "page0" #~ msgstr "page0" #~ msgid "page1" #~ msgstr "page1" #~ msgid "page2" #~ msgstr "halaman2" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "page0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "page1" #, fuzzy #~| msgid "page1" #~ msgid "page31" #~ msgstr "page1" #, fuzzy #~| msgid "page2" #~ msgid "page32" #~ msgstr "halaman2" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "page0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "page0" #~ msgid "Do you want to keep the window open?" #~ msgstr "Anda mahu biar jendela terbuka?" #~ msgid "_Copy Filepath" #~ msgstr "_Salin Jalur Berkas" #~ msgid "Building lookup list…" #~ msgstr "Membuat daftar pencarian …" #~ msgid "Update" #~ msgstr "Perbarui" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Terakhir Diperbarui: %Y-%m-%d %H:%M" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Batasi jumlah hasil:" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Memuat database…" fsearch-0.2.3/po/ie.po000066400000000000000000000701461446344336300145240ustar00rootroot00000000000000# Interlingue translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-07-30 09:55+0200\n" "Last-Translator: Christian \n" "Language-Team: Interlingue\n" "Language: ie\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 msgid "Saving…" msgstr "" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "" #: src/fsearch_filter.c:113 msgid "Files" msgstr "" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "" #: src/menus.ui:6 msgid "_File" msgstr "" #: src/menus.ui:9 msgid "New Window" msgstr "" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "" #: src/menus.ui:21 msgid "Open Folder" msgstr "" #: src/menus.ui:29 msgid "Update Database" msgstr "" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 msgid "Close Window" msgstr "" #: src/menus.ui:54 msgid "_Edit" msgstr "" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "" #: src/menus.ui:74 msgid "Deselect All" msgstr "" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "" #: src/menus.ui:109 msgid "_Search" msgstr "" #: src/menus.ui:126 msgid "_Help" msgstr "" #: src/menus.ui:171 msgid "Open _With" msgstr "" #: src/menus.ui:185 msgid "_Open Folder" msgstr "" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "" fsearch-0.2.3/po/it.po000066400000000000000000001560211446344336300145400ustar00rootroot00000000000000# Italian translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-01-16 07:54+0000\n" "Last-Translator: marco bra \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.10.1\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Un'applicazione per la ricerca di file con un focus su prestazioni e " "funzioni avanzate" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "cerca;fsearch;file;cartelle;musica;video;documenti;trova;strumento;tutto;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Un'applicazione grafica per la ricerca di file" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch vi aiuta a trovare file e cartelle nel modo più facile e veloce " "possibile. Basta digitare alcune lettere e i risultati della ricerca " "appariranno quasi istantaneamente." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Ci sono molte caratteristiche che rendono la ricerca più efficiente e " "potente. Come ad esempio:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignora le maiuscole e le minuscole (ad esempio la ricerca di \"fsearch\" " "corrisponderà anche a \"FSearch\")" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Espressioni regolari" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Supporto caratteri jolly" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Supporto per i filtri (ad esempio ricerca solo di file audio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Escludi alcuni file e cartelle" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Ordinamento veloce per nome, percorso, dimensione, tempo di modifica ed " "estensione" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Nota: A causa del sandboxing di Flatpak, FSearch non può trovare tutti i " "file sul tuo sistema." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Il layout predefinito dell'UI" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Un layout che segue più da vicino le HIG di GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Release iniziale." #: src/fsearch.c:243 msgid "Saving…" msgstr "Salvataggio…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Lorenzo Maria Fasoli" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Uno strumento di ricerca con un focus sulle prestazioni e sulle funzioni " "avanzate" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Apri una nuova finestra dell'applicazione" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Mostra le preferenze dell'applicazione" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Imposta il modello di ricerca" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Aggiorna il database ed esce" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Mostra informazioni di versione ed esce" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Caricamento cartelle…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Caricamento file…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ordinamento…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Impossibile aprire:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Apri una nuova finestra dell'applicazione" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Impossibile aprire il file" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Impossibile aprire:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Mostra le preferenze dell'applicazione" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Impossibile aprire:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Cartella" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tipo Sconosciuto" #: src/fsearch_filter.c:111 msgid "All" msgstr "Tutti" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Cartelle" #: src/fsearch_filter.c:113 msgid "Files" msgstr "File" #: src/fsearch_filter.c:115 #, fuzzy #| msgid "Other Application…" msgid "Applications" msgstr "Altra Applicazione…" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archivi" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documenti" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Immagini" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Video" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Annulla" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Nome" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Cerca nel Percorso" #: src/fsearch_filter_editor.ui:87 #, fuzzy #| msgid "Regular expressions" msgid "Enable regular expressions" msgstr "Espressioni regolari" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Corrispondenza" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Proprietà…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Altra Applicazione…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Svuota il database" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Aggiungi Cartelle" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Caricamento Database…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Non servirà molto tempo." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Aggiornamento database…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Potrebbe volerci un po' di tempo." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Svuota la query" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Premi Ctrl + F ed inizia a scrivere" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nessun Risultato Trovato" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Prova una ricerca differente" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Ordino risultati…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferenze" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Abilita il tema scuro" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Abilita decorazioni lato-client (richiede riavvio)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Usa unità binarie al posto di unità decimali" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Ricorda la dimensione della finestra" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "con scorciatoie da tastiera o con voci di menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "con doppio click" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Comportamento dopo aver aperto un file con successo:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nessuno" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimizza" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Chiudi" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Generale:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Mostra termini di ricerca evidenziandoli" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Mostra suggerimenti" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Mostra icone nella colonna del nome" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Ricorda configurazione colonne" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Ricorda ordine di ordinamento" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Apri percorso con doppio click nella colonna del percorso" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Click singolo per aprire" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Risultati:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Mostra stato di indicizzazione del database" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Barra di stato:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Mostra messaggi di avvertimento quando:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "Impossibile aprire il file / cartella" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Finestre di dialogo:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interfaccia" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Cerca nel percorso quando la query contiene separatori di percorso" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Cerca mentre digiti" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Nascondi i risultati quando la ricerca è vuota" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Valuta maiuscole quando la query contiene almeno un carattere maiuscolo" #: src/fsearch_preferences.ui:769 #, fuzzy #| msgid "Add folders" msgid "Add new filter" msgstr "Aggiungi Cartelle" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Remove selected path" msgid "Remove selected filter" msgstr "Rimuovi percorso selezionato" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "Numero di file selezionati" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Mostra Filtro" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Cerca" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Aggiorna il database all'avvio" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Aggiorna ogni" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "ora(e) e" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minuto(i)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Aggiungi percorso che deve essere incluso nel database\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Rimuovi percorso selezionato" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Includi" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Aggiungi percorso da escludere dal database" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Supporta i caratteri jolly. Immissioni multiple devono essere separate da \";" "\"" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Escludi i file:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "p.es. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Escludi file e cartelle nascoste" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Escludi" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Database" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Abilita tema scuro:\n" "\n" "Se abilitato, viene chiesto al tema di sistema di utilizzare uno stile più " "scuro per l'applicazione (cioè elementi UI scuri su testo chiaro).\n" "\n" "Si noti che non tutti i temi di sistema forniscono una tale variante più " "scura, quindi l'abilitazione di questa impostazione potrebbe non avere " "effetto." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Abilita decorazioni lato client:\n" "\n" "Se abilitato, la voce di ricerca e il menu principale sono visualizzati " "nella barra del titolo della finestra.\n" "\n" "Se disabilitato, il menu principale viene visualizzato come una barra di " "menu con la voce di ricerca sotto di essa.\n" "Questo assomiglia a un layout UI più tradizionale e richiede un po' più di " "spazio." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Usa unità binarie invece di unità decimali:\n" "\n" "Questa impostazione controlla come vengono visualizzate le dimensioni dei " "file.\n" "\n" "\t• Unità Binarie: Questo si riferisce ai prefissi IEC binari (es. " "1 KiB = 1024 bytes)\n" "\t• Unità Decimali: Questo si riferisce ai prefissi decimali SI " "(es. 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Ricorda dimensione finestra:\n" "\n" "Se abilitato, la dimensione della finestra della sessione precedente sarà " "ripristinata quando aprite una finestra di FSearch.\n" "\n" "Notate che alcuni gestori di finestre ignorano questa richiesta e forzano la " "finestra ad avere una dimensione diversa." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t\tNote that not all systems allow windows to be minimized.\n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Comportamento dopo aver aperto con successo un file:\n" "\n" "Quando un file/cartella è stato aperto con successo, può essere eseguita una " "delle seguenti azioni:\n" "\t• Nulla: Non accade nulla.\n" "\t• Minimizza: La finestra di FSearch correntemente selezionata " "diventa minimizzata. \n" "\t\tSi noti che non tutti i sistemi permettono di minimizzare le finestre.\n" "\t• Chiudi: Chiude FSearch.\n" "\n" "Puoi configurare se queste azioni devono essere attivate quando il file è " "stato aperto con\n" "\t• scorciatoie da tastiera o voci di menu e/o\n" "\t• click del mouse" #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Mostra i termini di ricerca evidenziati:\n" "\n" "Se abilitato, i termini di ricerca saranno evidenziati nella vista dei " "risultati. Per esempio quando si cerca \"foo\" tutte le occorrenze di " "foo nei nomi di file/cartelle saranno evidenziate con caratteri in " "grassetto:\n" "\n" "\t\tfoobar.txt\n" "\t\tfile.foo\n" "\n" "Questo funziona anche per le espressioni regolari e le espressioni jolly che " "iniziano o finiscono con un asterisco. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Mostra suggerimenti:\n" "\n" "Se abilitato, la vista dei risultati mostrerà il percorso completo del file/" "cartella focalizzato in una piccola finestra di suggerimento." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Mostra le icone nella colonna dei nomi:\n" "\n" "Se abilitato, le icone dei file/cartelle saranno mostrate nella colonna del " "nome." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Ricorda la configurazione delle colonne:\n" "\n" "Se abilitato, la configurazione delle colonne della vista dei risultati " "dalla sessione precedente sarà ripristinata quando aprite una finestra di " "FSearch. Questo include la dimensione e la visibilità di tutte le colonne." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Ricorda l'ordine di ordinamento:\n" "\n" "Se abilitato, l'ordine della vista dei risultati della sessione precedente " "sarà ripristinato quando si apre una finestra di FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Aprire il percorso con un doppio clic nella colonna del percorso:\n" "\n" "Se abilitato, il doppio clic nella colonna del percorso apre il percorso " "selezionato." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Un solo clic per aprire:\n" "\n" "Se abilitato, un solo clic aprirà il file/cartella selezionato. Se vuoi " "selezionare solo un file/cartella mentre questa impostazione è attiva, devi " "tenere premuto Ctrl allo stesso tempo mentre clicchi sul file/" "cartella." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Mostra lo stato di indicizzazione del database:\n" "\n" "Se abilitato, il percorso che viene attualmente indicizzato viene " "visualizzato nella barra di stato." #: src/fsearch_preferences.ui:1550 #, fuzzy #| msgid "" #| "Show warning dialogs:\n" #| "\n" #| "If enabled, a warning dialog is displayed when:\n" #| "\n" #| "\t• a file or folder failed to open\n" msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Mostra finestre di avviso:\n" "\n" "Se abilitato, viene visualizzata una finestra di dialogo di avviso quando:\n" "\n" "\t- un file o una cartella non riesce ad aprirsi\n" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Cerca nel percorso quando la query contiene separatori di percorso:\n" "\n" "Se abilitato, i termini di ricerca che contengono separatori di percorso " "(cioè \"/\") saranno automaticamente abbinati al percorso completo di un " "file o di una cartella." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Fà corrispondere al maiuscolo/minuscolo quando la query contiene almeno " "un carattere maiuscolo:\n" "\n" "Se abilitato, i termini di ricerca che contengono almeno un carattere " "maiuscolo attiveranno una ricerca sensibile alle maiuscole. Questo significa " "che un termine di ricerca come Foo corrisponderà a FooBar.txt " "ma non a foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Nascondi i risultati quando la ricerca è vuota:\n" "\n" "Se abilitato, nessun risultato di ricerca viene visualizzato quando la voce " "di ricerca è vuota.\n" "\n" "Se disattivato, tutti i file e le cartelle saranno visualizzati quando la " "voce di ricerca è vuota." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Cerca mentre digiti:\n" "\n" "Se abilitato, la ricerca viene aggiornata automaticamente ad ogni pressione " "dei tasti.\n" "\n" "Se disattivato, la ricerca viene aggiornata solo quando si preme Enter o il pulsante di ricerca. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Aggiorna il database all'avvio:\n" "\n" "Se abilitato, il database sarà aggiornato automaticamente in background " "quando si avvia FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Cartelle escluse:\n" "\n" "Questa lista contiene tutte le cartelle che vuoi escludere dal database.\n" "\n" "\t• Attiva: Se abilitato, il percorso sarà escluso dal database\n" "\t\t e non potrà essere cercato.\n" "\t• Percorso: Il percorso completo da escludere." #: src/fsearch_preferences.ui:1677 #, fuzzy #| msgid "" #| "Exclude folder from database:\n" #| "\n" #| "This button opens a dialog where you can select a folder you want to " #| "exclude from the database." msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Escludi cartella dal database:\n" "\n" "Questo pulsante apre una finestra di dialogo dove puoi selezionare una " "cartella che vuoi escludere dal database." #: src/fsearch_preferences.ui:1694 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| "This removes the selected folder from the list of excluded folders." msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Rimuovi la riga selezionata:\n" "\n" "Questo rimuove la cartella selezionata dalla lista delle cartelle escluse." #: src/fsearch_preferences.ui:1711 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Cartelle escluse:\n" "\n" "Questa lista contiene tutte le cartelle che vuoi escludere dal database.\n" "\n" "\t• Attiva: Se abilitato, il percorso sarà escluso dal database\n" "\t\t e non potrà essere cercato.\n" "\t• Percorso: Il percorso completo da escludere." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Escludi cartella dal database:\n" "\n" "Questo pulsante apre una finestra di dialogo dove puoi selezionare una " "cartella che vuoi escludere dal database." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Rimuovi la riga selezionata:\n" "\n" "Questo rimuove la cartella selezionata dalla lista delle cartelle escluse." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Escludi file e cartelle dal database:\n" "\n" "Questa è una lista separata da punti e virgola di file (o cartelle) che vuoi " "escludere dal database. Per esempio .git;.cache;*.swp escluderà tutti " "i files o cartelle che siano nominate sia .git o .cache o che " "terminino con .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Escludi files o cartelle nascoste:\n" "\n" "Se abilitato, i file e le cartelle nascoste saranno esclusi dal database " "(cioè tutti i file o le cartelle che iniziano con un punto)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Metti a fuoco un'impostazione per ottenere una descrizione dettagliata di " "ciò che fa." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Aggiorna periodicamente il database ad un intervallo di tempo specifico:\n" "\n" "Se abilitato e finché FSearch è in esecuzione, il database sarà aggiornato " "periodicamente con l'intervallo di tempo dato.\n" "\n" "Se volete aggiornare il database in background, anche quando FSearch non è " "in esecuzione, dovreste usare strumenti come cron o systemd timers per " "attivare periodicamente l'aggiornamento:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Aggiungere la cartella al database:\n" "\n" " Questo pulsante apre una finestra di dialogo in cui è " "possibile selezionare una cartella che si desidera includere nel database " "per\n" " la ricerca.\n" " " #: src/fsearch_preferences.ui:1888 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| " This removes the selected folder from the list of " #| "included folders.\n" #| " " msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Rimuovi la riga selezionata:\n" "\n" " Questo rimuove la cartella selezionata dalla lista " "delle cartelle incluse.\n" " " #: src/fsearch_preferences.ui:1905 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Aggiungere la cartella al database:\n" "\n" " Questo pulsante apre una finestra di dialogo in cui è " "possibile selezionare una cartella che si desidera includere nel database " "per\n" " la ricerca.\n" " " #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Aiuto" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Seleziona cartella" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Seleziona" #: src/fsearch_preferences_ui.c:326 #, fuzzy #| msgid "Add folders" msgid "Add filter" msgstr "Aggiungi Cartelle" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Attivo" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Percorso" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Un Filesystem" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nome" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Svuota la query" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "Oggetti: %'d" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "Oggetti: %'d" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Interrogazione…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Caricamento…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Scansione…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Numero di risultati di ricerca" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Elementi" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Annulla" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indice:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Numero di cartelle selezionate" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Numero di file selezionati" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Annulla l'aggiornamento del database" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Numero di elementi del database" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(vuoto)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Il termine di ricerca contiene separatori di percorso.\n" "Cerca in Percorso è stato temporaneamente attivato per questo termine." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASE" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Il termine di ricerca contiene separatori di percorso.\n" "Cerca in Percorso è stato temporaneamente attivato per questo termine." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "PERCORSO" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Dimensione" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipo" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Estensione" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Ultima modifica" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can be very slow with many results and it can't be " #| "aborted.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "L'ordinamento per Tipo può essere molto lento con molti risultati e " "non può essere interrotto.\n" "\n" "Questo ordinamento non è persistente, sarà resettato quando il termine di " "ricerca cambia." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nuova finestra" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Aggiorna il database" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Cerca nel Percorso" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Corrispondenza" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Abilita RegEx (espressioni regolari)" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Mostra Barra di stato" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Mostra Filtro" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Mostra Pulsante Cerca" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Informazioni" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Esce" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Cerca…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Seleziona un Filtro" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Vuoi veramente aprire il/i file %d?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Apertura File…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Vuoi veramente eliminare il/i file %d?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Elimino file…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Sposto i file nel cestino…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Elimino file…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Sposto i file nel cestino…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Vuoi davvero aprire %d finestre di proprietà dei file?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Apertura delle proprietà dei file…" #: src/menus.ui:6 msgid "_File" msgstr "_File" #: src/menus.ui:9 msgid "New Window" msgstr "Nuova Finestra" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Apri" #: src/menus.ui:21 msgid "Open Folder" msgstr "Apri Cartella" #: src/menus.ui:29 msgid "Update Database" msgstr "Aggiorna Database" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Annulla Aggiornamento" #: src/menus.ui:42 msgid "Close Window" msgstr "Chiudi Finestra" #: src/menus.ui:54 msgid "_Edit" msgstr "_Modifica" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copia" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Tagli_a" #: src/menus.ui:69 msgid "Select All" msgstr "Seleziona Tutti" #: src/menus.ui:74 msgid "Deselect All" msgstr "Deseleziona Tutti" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverti Selezione" #: src/menus.ui:92 msgid "_View" msgstr "_Visualizza" #: src/menus.ui:109 msgid "_Search" msgstr "_Cerca" #: src/menus.ui:126 msgid "_Help" msgstr "_Aiuto" #: src/menus.ui:171 msgid "Open _With" msgstr "Apri _Con" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Apri Cartella" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copia come Testo" #: src/menus.ui:217 msgid "Path + Name" msgstr "Percorso + Nome" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Sposta nel _Cestino" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Aggiungi percorso che deve essere incluso nel database\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Aggiungere la cartella al database:\n" #~ "\n" #~ " Questo pulsante apre una finestra di dialogo in cui " #~ "è possibile selezionare una cartella che si desidera includere nel " #~ "database per\n" #~ " la ricerca.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Il termine di ricerca contiene caratteri maiuscoli.\n" #~ "Il maiuscolo/minuscolo è stato temporaneamente attivato per questo " #~ "termine." #~ msgid "page0" #~ msgstr "pagina0" #~ msgid "page1" #~ msgstr "pagina1" #~ msgid "page2" #~ msgstr "pagina2" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "pagina0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "pagina1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "pagina0" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Cartelle incluse:\n" #~ "\n" #~ " Questa lista contiene tutte le cartelle che vuoi " #~ "includere nel database.\n" #~ "\n" #~ " • Attivo: Se abilitato, il percorso sarà " #~ "incluso nel database in cui cercare.\n" #~ " • Percorso: Il percorso completo da " #~ "includere.\n" #~ " • Aggiorna: Questa impostazione è molto " #~ "utile se vuoi escludere certi percorsi \n" #~ " dal'essere\n" #~ " aggiornati (es. un percorso che punta ad un " #~ "drive USB lento il quale non cambia spesso)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Rimuovi la riga selezionata:\n" #~ "\n" #~ " Questo rimuove la cartella selezionata dalla lista " #~ "delle cartelle incluse.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Vuoi tenere aperta la finestra?" #~ msgid "_Copy Filepath" #~ msgstr "_Copia percorso" #~ msgid "Update" #~ msgstr "Aggiorna" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "Oggetti: %'d" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Ultimo aggiornamento: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Elimina" #~ msgid "Limit number of results:" #~ msgstr "Limita il numero dei risultati:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "Vai a Modifica → Preferenze → Database e aggiungi posizioni" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "pagina0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "pagina1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "pagina1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "pagina0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "pagina1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "pagina0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "pagina0" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Copia" #~ msgid "Remove" #~ msgstr "Rimuovi" #~ msgid "Follow symbolic links" #~ msgstr "Segui i link simbolici (symlink)" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Abilità il tema scuro\" potrebbe non avere alcun effetto\n" #~ "dato che non tutti i temi GTK+ sono provvisti di una versione scura." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Abilita RegEx (espressioni regolari)" #~ msgid "Open Containing Folder" #~ msgstr "Apri la cartella superiore" #~ msgid "Open File(s) in File Manager" #~ msgstr "Apri file nel Gestore dei file" #~ msgid "Move to Trash" #~ msgstr "Sposta nel cestino" #~ msgid "Show Menubar" #~ msgstr "Mostra barra dei menu" #~ msgid "Enable" #~ msgstr "Abilita" #~ msgid "Loading Database..." #~ msgstr "Caricando il database..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Aggiornando il database..." #~ msgid "Search..." #~ msgstr "Cerca..." #~ msgid "Add" #~ msgstr "Aggiungi" fsearch-0.2.3/po/ja.po000066400000000000000000001152511446344336300145160ustar00rootroot00000000000000# Japanese translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2021-05-15 00:44+0000\n" "Last-Translator: Jacque Fresco \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.7-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 #, fuzzy msgid "A file search application focusing on performance and advanced features" msgstr "検索ユーティリティはパフォーマンスと追加機能にフォーカスしています" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "隠しファイルと隠しフォルダを除外" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "ソート中..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "検索ユーティリティはパフォーマンスと追加機能にフォーカスしています" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "他のアプリケーションで開く" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "検索ボタンを表示" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "データベースをアップデート" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "バージョン情報を表示" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "データベースを読み込み中…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "ファイルを削除中…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "ソート中..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open file" msgid "Failed to build open command" msgstr "ファイルを開けませんでした" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "他のアプリケーションで開く" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "ファイルを開けませんでした" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get path" msgstr "ファイルを開けませんでした" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get parent path" msgstr "ファイルを開けませんでした" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "フォルダ" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "すべて" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "フォルダ" #: src/fsearch_filter.c:113 msgid "Files" msgstr "ファイル" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "他のアプリケーション" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "圧縮ファイル" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "オーディオ" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "ドキュメント" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "画像ファイル" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "動画ファイル" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "名前" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "パスを検索" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "大文字小文字を区別" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "他のアプリケーション" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "空のデータベース" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "フォルダ" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "データベースを読み込み中…" #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "しばらくかかるかもしれません。" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "データベースをアップデート中…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "しばらくかかるかもしれません。" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "空のクエリ" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Ctrl + Fを押して入力してください" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "検索結果なし" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "違う条件で検索してみてください" #: src/fsearch_overlay.ui:368 #, fuzzy msgid "Sorting results…" msgstr "ソート中..." #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "設定" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "暗い色のテーマを有効" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "ウィンドウサイズを記憶" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "一般:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "検索文字列を強調表示" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "ツールチップを表示" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "名前カラムにアイコンを表示" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "カラム設定を記憶" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "並び替え順を記憶" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "結果:" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "起動時にデータベースをアップデート" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "ステータスバーを表示" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "インターフェイス" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "クエリがパス区切り文字を含む場合はパスを検索" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "文字入力ごとに検索" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "検索結果が空の場合は結果を隠す" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "クエリがパス区切り文字を含む場合はパスを検索" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "フォルダ" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "検索ヒット数" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "検索ヒット数" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "フィルターを表示" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "検索" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "起動時にデータベースをアップデート" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "更新" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "含む" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "ワイルドカードをサポート。複数のエントリーは ';' で分割します" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "除外ファイル:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "例. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "隠しファイルと隠しフォルダを除外" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "除外" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "データベース" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "検索文字列を強調表示:\n" "\n" "有効にした場合、検索結果内で検索した文字列を強調表示します。例えば「foo」と検" "索した場合ファイル/フォルダ名のfooを含む部分が太字で強調表示されま" "す。\n" "\n" "\t\tfoobar.txt\n" "\t\tfile.foo\n" "\n" "正規表現とワイルドカードでも動作します。 " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "並び替え順を記憶\n" "\n" "有効にした場合、以前のセッションで使用した並び順が記憶されます。" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "ヘルプ(_H)" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "フィルターを選択" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "すべての選択を解除" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "フォルダ" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "有効" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "パス" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "ファイルを開く" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "名前" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "空のクエリ" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d 個" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d 個" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "表示中…" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "ソート中..." #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "ソート中..." #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "検索ヒット数" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 個" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "Cancel Update" msgid "Cancel" msgstr "アップデートを中断" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "インデックス:" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "検索ヒット数" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "検索ヒット数" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "起動時にデータベースをアップデート" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "データベースに登録されたアイテム数" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(空)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains upper case characters.\n" #| "Match Case was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "検索文字列に大文字が含まれています。\n" "大文字/小文字を区別は一時的に有効です。" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "大文字小文字" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains upper case characters.\n" #| "Match Case was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "検索文字列に大文字が含まれています。\n" "大文字/小文字を区別は一時的に有効です。" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "パス" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "正規表現" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "サイズ" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "タイプ" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "更新日時" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "新しいウィンドウ" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "データベースをアップデート" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "パスを検索" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "大文字小文字を区別" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "正規表現を有効" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "ステータスバーを表示" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "フィルターを表示" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "検索ボタンを表示" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "このソフトウェアについて" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "終了" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "検索" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "フィルターを選択" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "本当に" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "ファイルを開く" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "本当に" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "ファイルを削除中…" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "ゴミ箱に移動中…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "ファイルを削除中…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "ゴミ箱に移動中…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "本当に" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "ファイルを開く" #: src/menus.ui:6 msgid "_File" msgstr "ファイル(_F)" #: src/menus.ui:9 msgid "New Window" msgstr "新しいウィンドウ" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "開く(_O)" #: src/menus.ui:21 msgid "Open Folder" msgstr "フォルダを開く" #: src/menus.ui:29 msgid "Update Database" msgstr "データベースをアップデート" #: src/menus.ui:35 msgid "Cancel Update" msgstr "アップデートを中断" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "新しいウィンドウ" #: src/menus.ui:54 msgid "_Edit" msgstr "編集(_E)" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "コピー(_C)" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "すべて選択" #: src/menus.ui:74 msgid "Deselect All" msgstr "すべての選択を解除" #: src/menus.ui:78 msgid "Invert Selection" msgstr "選択を反転" #: src/menus.ui:92 msgid "_View" msgstr "表示(_V)" #: src/menus.ui:109 msgid "_Search" msgstr "検索(_S)" #: src/menus.ui:126 msgid "_Help" msgstr "ヘルプ(_H)" #: src/menus.ui:171 msgid "Open _With" msgstr "次で開く(_W)" #: src/menus.ui:185 msgid "_Open Folder" msgstr "フォルダを開く(_O)" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "ゴミ箱に送る(_T)" #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "検索文字列に大文字が含まれています。\n" #~ "大文字/小文字を区別は一時的に有効です。" #~ msgid "page0" #~ msgstr "ページ0" #~ msgid "page1" #~ msgstr "ページ1" #, fuzzy #~ msgid "page2" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "ページ0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "ページ1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "ページ0" #~ msgid "Update" #~ msgstr "更新" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d 個" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "最終更新日: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "削除(_D)" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "検索結果数を制限:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "編集→設定→データベースから場所を追加して下さい" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "ページ0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "ページ1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "ページ1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "ページ0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "ページ1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "ページ0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "ページ0" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "コピー(_C)" #~ msgid "Remove" #~ msgstr "削除" #~ msgid "Follow symbolic links" #~ msgstr "シンボリックリンクに追従" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "お知らせ: ”暗い色のテーマを有効” はGTK+の\n" #~ "暗い色のテーマによって機能しないかもしれません。" #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "正規表現を有効" #~ msgid "Open Containing Folder" #~ msgstr "親フォルダを開く" #~ msgid "Open File(s) in File Manager" #~ msgstr "ファイルマネージャーで開く" #~ msgid "Move to Trash" #~ msgstr "ゴミ箱に送る" #~ msgid "Show Menubar" #~ msgstr "メニューバーを表示" #, fuzzy #~ msgid "Enable" #~ msgstr "正規表現を有効" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "データベースを読み込み中…" #~ msgid "..." #~ msgstr "…" #~ msgid "Updating Database..." #~ msgstr "データベースをアップデート中…" #~ msgid "Search..." #~ msgstr "検索…" #~ msgid "Add" #~ msgstr "追加" #~ msgid "files?" #~ msgstr "個のファイルを削除しますか?" #~ msgid "C_ut" #~ msgstr "切り取り(_U)" #~ msgid "Selected Folder and Files" #~ msgstr "選択されたフォルダとファイル" fsearch-0.2.3/po/ko.po000066400000000000000000001107121446344336300145320ustar00rootroot00000000000000# Japanese translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-04-29 18:12+0000\n" "Last-Translator: 이정희 \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.12.1\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "성능 및 고급 기능에 중점을 둔 파일 검색 프로그램" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;검색;" "파일;폴더;음악;비디오;문서;찾기;도구;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "그래픽 파일 검색 프로그램" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "정규식" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "와일드카드 지원" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "숨김 파일 과 폴더 제외" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "데이터베이스 로딩중…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "이정희 " #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "성능과 고급 기능에 중점을 둔 검색 프로그램" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "다른 프로그램 열기" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "검색 버튼 보이기" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "데이터베이스 업데이트" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "버전 정보 보기" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "데이터베이스 로딩중…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "파일 삭제 중…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "데이터베이스 로딩중…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open file" msgid "Failed to build open command" msgstr "파일을 열 수 없습니다." #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "다른 프로그램 열기" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "파일을 열 수 없습니다." #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get path" msgstr "파일을 열 수 없습니다." #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get parent path" msgstr "파일을 열 수 없습니다." #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "폴더" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "모두" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "폴더" #: src/fsearch_filter.c:113 msgid "Files" msgstr "파일" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "다른 프로그램" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "파일명" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "현재 경로에서 검색" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "일치하는 결과" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "다른 프로그램" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "빈 데이터베이스" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "폴더" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "데이터베이스 로딩중…" #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "작업에 시간이 걸릴 수 있습니다" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "데이터베이스 업데이트" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "이 작업은 다소 시간이 걸릴 수 있습니다." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "빈 쿼리" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Ctrl + F를 누르고 입력 시작" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "결과를 찾을 수 없음" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "다른 검색 시도" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "기본 설정" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "어두운 테마 활성화" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "소수 단위 대신 이진 단위 사용" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "창 크기 기억하기" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "키보드 단축키 또는 메뉴 항목 사용" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "더블 클릭 사용" #: src/fsearch_preferences.ui:273 #, fuzzy msgid "Behaviour after successfully opening a file:" msgstr "파일을 열고 나서 할 일" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "최소화" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "닫기" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "도구 설명 표시" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "이름 열에 아이콘 표시" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "열 구성 기억하기" #: src/fsearch_preferences.ui:413 #, fuzzy msgid "Remember sort order" msgstr "현재 검색 창 크기 저장" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "프로그램 시작 시 DB 업데이트" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "상태 표시줄 보이기" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "다음과 같은 경우 경고 대화 상자 표시:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "파일 / 폴더를 열지 못했습니다" #: src/fsearch_preferences.ui:615 #, fuzzy msgid "Dialogs:" msgstr "대화상자" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "인터페이스" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "쿼리에 경로 구분 기호가 포함된 경우 경로에서 검색" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "입력하면서 검색" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "검색 결과가 없으면 결과 숨김" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "검색어에 겅로를 포함하여 검색하는 경우 경로 검색" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "폴더" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "검색 결과 수" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "검색 결과 수" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "필터 보이기" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "검색" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "시작 시 데이터베이스 업데이트" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "포함하기" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "와일드카드를 지원합니다. 여러 항목은 ';'으로 구분해야 합니다" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "파일 제외하기:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "예. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "숨김 파일 및 폴더 제외하기" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "제외하기" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "데이터베이스" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "도움말(_H)" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "필터 선택" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "전체선택 해제" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "폴더" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "경로" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "파일 열기" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "이름" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "검색어가 없습니다." #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d개 항목" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d개 항목" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "데이터베이스 로딩중…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "검색 결과 수" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0개 항목" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "검색 결과 수" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "검색 결과 수" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "프로그램 시작 시 DB 업데이트" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "검색 결과 수" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(비어있음)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "대소문자" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "경로" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "정규식" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "크기" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "유형" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "수정 날짜" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "새 검색창" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "데이터베이스 업데이트" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "경로에서 검색" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "대소문자 구분" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "정규식 활성화" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "상태 표시줄 표시" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "필터 표시" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "검색 버튼 표시" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "검색" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "필터 선택" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "정말 삭제 하시겠습니까?" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "파일 열기" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "정말 삭제 하시겠습니까?" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "파일 삭제 중…" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "휴지통으로 이동 중…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "파일 삭제 중…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "휴지통으로 이동 중…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "정말 삭제 하시겠습니까?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "파일 열기" #: src/menus.ui:6 msgid "_File" msgstr "파일(_F)" #: src/menus.ui:9 msgid "New Window" msgstr "새 창" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "열기(_O)" #: src/menus.ui:21 msgid "Open Folder" msgstr "폴더 열기" #: src/menus.ui:29 msgid "Update Database" msgstr "데이터베이스 업데이트" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "새 검색창" #: src/menus.ui:54 msgid "_Edit" msgstr "편집(_E)" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "복사(_C)" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "전체선택 해제" #: src/menus.ui:74 msgid "Deselect All" msgstr "모두 선택 해제" #: src/menus.ui:78 msgid "Invert Selection" msgstr "선택 반전" #: src/menus.ui:92 msgid "_View" msgstr "보기(_V)" #: src/menus.ui:109 msgid "_Search" msgstr "검색(_S)" #: src/menus.ui:126 msgid "_Help" msgstr "도움말(_H)" #: src/menus.ui:171 msgid "Open _With" msgstr "다른프로그램으로 열기(_W)" #: src/menus.ui:185 msgid "_Open Folder" msgstr "폴더 열기(_O)" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "휴지통으로 이동(_T)" #~ msgid "page0" #~ msgstr "페이지0" #~ msgid "page1" #~ msgstr "페이지1" #, fuzzy #~ msgid "page2" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "페이지0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "페이지1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "페이지0" #~ msgid "Do you want to keep the window open?" #~ msgstr "현재 검색창을 유지하시겠습니까?" #~ msgid "_Copy Filepath" #~ msgstr "파일경로 복사" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d 건" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "최근 업데이트: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "삭제(_D)" #~ msgid "Limit number of results:" #~ msgstr "검색 결과 수 제한:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "편집 → 설정 → 데이터베이스에서 위치를 추가하세요" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "페이지0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "페이지1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "페이지1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "페이지0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "페이지1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "페이지0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "페이지0" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "복사(_C)" #~ msgid "Remove" #~ msgstr "제거" #~ msgid "Follow symbolic links" #~ msgstr "심볼릭 링크 따라가기" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "알림: 모든 GTK+ 테마가 어두운 버전을 제공하는 것이 아니기 때문에,\n" #~ "어두운 색상의 GTK 테마가 작동하지 않을 수 있습니다." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "정규표현식 가능" #~ msgid "Open Containing Folder" #~ msgstr "포함된 폴더 열기" #~ msgid "Open File(s) in File Manager" #~ msgstr "파일관리자에서 파일열기" #~ msgid "Move to Trash" #~ msgstr "휴지통으로 이동" #~ msgid "Show Menubar" #~ msgstr "메뉴 보이기" #, fuzzy #~ msgid "Enable" #~ msgstr "정규표현식 가능" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "데이터베이스 로딩중…" #~ msgid "..." #~ msgstr "…" #~ msgid "Updating Database..." #~ msgstr "데이터베이스 업데이트" #~ msgid "Search..." #~ msgstr "검색중…" #~ msgid "Add" #~ msgstr "추가" #~ msgid "files?" #~ msgstr "파일을 삭제하시겠습니까?" #~ msgid "C_ut" #~ msgstr "잘라내기(_U)" #~ msgid "Selected Folder and Files" #~ msgstr "선택된 파일 및 폴더" fsearch-0.2.3/po/lt.po000066400000000000000000001557541446344336300145570ustar00rootroot00000000000000# Lithuanian translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2021-10-10 17:04+0000\n" "Last-Translator: Gediminas Murauskas \n" "Language-Team: Lithuanian \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n%10>=2 && (n%100<10 || n" "%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3;\n" "X-Generator: Weblate 4.9-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Failų paieškos programa, kuri daugiausia dėmesio skiria našumui ir " "išplėstinėmis ypatybėmis" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "paieška;fsearch;failai;aplankai;muzika;vaizdo įrašai;dokumentai;rasti;" "įrankis;viskas;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Grafinė failų paieškos programa" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch padeda kuo lengviau ir greičiau rasti failus ir aplankus. Tiesiog " "įveskite kelias raides ir paieškos rezultatai pasirodys beveik iš karto." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Yra daug funkcijų, kurios daro paiešką kuo efektyvesnę ir galingesnę. " "Pavyzdžiui:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Nepaisyti didžiųjų ir mažųjų raidžių (pvz., Paieška „fsearch“ atitiks ir " "„FSearch“)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Reguliarusis reiškinys" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Pakaitos simbolių palaikymas" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filtravimo palaikymas (pvz., ieškoti tik garso failų)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Išskirkite tam tikrus failus ir aplankus" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Greitas rūšiavimas pagal pavadinimą, kelią, dydį, modifikavimo laiką ir " "plėtinį" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Pastaba: dėl „Flatpak“ atliekamo „sandboxing“, „FSearch“ negali rasti " "kiekvieno failo jūsų sistemoje." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Numatytasis vartotojo sąsajos išdėstymas" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Išdėstymas, labiau atitinkantis GNOME HIG" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Pirminis leidimas." #: src/fsearch.c:243 msgid "Saving…" msgstr "Išsaugoma…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Moo, Gediminas Murauskas" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Paieškos programa, kuri susitelkia ties našumu ir išplėstinėmis ypatybėmis" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Atverti naują programos langą" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Rodyti programos nuostatas" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Paieškos šablono nustatymas" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Atnaujinti duomenų bazę ir išeiti" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Rodyti spausdinimo versijos informaciją ir išeiti" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Įkeliami aplankai…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Įkeliami failai…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Rūšiuojama…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Nepavyko atidaryti:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Atverti naują programos langą" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Nepavyko atverti failo" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Nepavyko atidaryti:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Rodyti programos nuostatas" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Nepavyko atidaryti:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Aplankas" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Nežinomas tipas" #: src/fsearch_filter.c:111 msgid "All" msgstr "Visi" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Aplankai" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Failai" #: src/fsearch_filter.c:115 #, fuzzy #| msgid "Other Application…" msgid "Applications" msgstr "Kitą programą…" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archyvai" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Garso įrašai" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumentai" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Paveikslai" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Vaizdo įrašai" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Atsisakyti" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Gerai" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Pavadinimas" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Ieškoti kelyje" #: src/fsearch_filter_editor.ui:87 #, fuzzy #| msgid "Regular expressions" msgid "Enable regular expressions" msgstr "Reguliarusis reiškinys" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Skirti didžiąsias ir mažąsias raides" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Savybės…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Kitą programą…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Duomenų bazė tuščia" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Pridėti aplankus" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Įkeliama duomenų bazė…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Tai ilgai neužtruks." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Atnaujinama duomenų bazė…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Tai gali šiek tiek užtrukti." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Tuščia užklausa" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Paspauskite Ctrl + F ir pradėkite rašyti" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nerasta jokių rezultatų" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Pabandykite kitą paiešką" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Rūšiuojama rezultatus…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Nuostatos" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Įjungti tamsią temą" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Įgalinti kliento-pusės dekoracijas (reikalauja perkrovimo)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Vietoj dešimtainių vienetų, naudoti dvejetainius vienetus" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Prisiminti lango dydį" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "naudojant sparčiuosius klavišus ar meniu įrašus" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "naudojant dvikartį spustelėjimą" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Elgsena, sėkmingai atvėrus failą:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nieko" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Suskleisti" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Užverti" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Bendra:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Rodyti paryškintus paieškos terminus" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Rodyti paaiškinimus" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Rodyti pavadinimo stulpelyje piktogramas" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Prisiminti stulpelių konfigūraciją" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Prisiminti rikiavimo tvarką" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Atidarykite kelią dukart spustelėjant kelio stulpelyje" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Atverti vienkarčiu spustelėjimu" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Rezultatai:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Rodyti duomenų bazės indeksavimo būseną" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Būsenos juosta:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Rodyti įspėjimo dialogus, kai:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "nepavyko atverti failo/aplanko" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Dialogai:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Sąsaja" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Ieškoti kelyje, kai užklausoje yra kelio skirtukai" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Ieškoti, renkant tekstą" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Slėpti rezultatus, kai paieškos laukas tuščias" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Sutapatinti raidžių dydžius, kai užklausoje yra bent vienas didžiųjų raidžių " "simbolis" #: src/fsearch_preferences.ui:769 #, fuzzy #| msgid "Add folders" msgid "Add new filter" msgstr "Pridėti aplankus" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Remove selected path" msgid "Remove selected filter" msgstr "Pašalinti pasirinktą kelią" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "Pasirinktų failų skaičius" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Rodyti filtrą" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Ieškoti" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Paleidus programą, atnaujinti duomenų bazę" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Atnaujinti kiekvieną" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "valanda(-os) ir" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minutė(-s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Pašalinti pasirinktą kelią" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Įtraukti" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Pridėti kelią, kurio nereikia traukti į duomenų bazę" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Palaiko pakaitos simbolius. Keli įrašai privalo būti atskirti \";" "\" (kabliataškiu)" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Išbraukti failus:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "pvz., \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Išbraukti paslėptus failus ir aplankus" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Išbraukti" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Duomenų bazė" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" " Įgalinti tamsią temą: \n" "\n" "Jei įgalinta, sistemos tema bus prašoma naudoti tamsesnį programos stilių " " (t. Y. Tamsūs vartotojo sąsajos elementai ant šviesaus teksto) \n" "\n" "Atminkite, kad ne visose sistemos temose pateikiamas toks tamsesnis " "variantas, todėl šio nustatymo įgalinimas gali neturėti jokio poveikio." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" " Įgalinti kliento-pusės dekoracijas: \n" "\n" "Jei įgalinta, paieškos įrašas ir pagrindinis meniu yra rodomi lango " "pavadinimo juostoje.\n" "\n" "Jei jis išjungta, pagrindinis meniu yra rodomas kaip meniu juosta, po kuria " "yra paieškos įrašas.\n" "Tai primena labiau tradicinį vartotojo sąsajos išdėstymą ir užima šiek tiek " "daugiau vietos." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" " Vietoje dešimtainių vienetų naudokite dvejetainius vienetus: \n" "\n" "Šie nustatymai kontroliuoja, kaip rodomi failų dydžiai.\n" "\n" "• Dvejetainiai vienetai: Tai reiškia dvejetainius IEC priešdėlius " " (pvz., 1 KiB = 1024 baitai) \n" "• Dešimtainiai vienetai: Tai reiškia dešimtainius SI priešdėlius " " (pvz., 1 kB = 1000 baitų) " #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" " Prisiminti lango dydį: \n" "\n" "Jei įgalinta, ankstesnio seanso lango dydis bus atkurtas, kai atidarysite " "„FSearch“ langą.\n" "\n" "Atminkite, kad kai kurie langų tvarkytuvai nepaiso šios užklausos ir " "priverčia langą būti kitokio dydžio." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t\tNote that not all systems allow windows to be minimized.\n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" " Elgesys sėkmingai atidarius failą: \n" "\n" "Kai failas / aplankas buvo sėkmingai atidarytas, galima atlikti vieną iš šių " "veiksmų:\n" "• Nieko: nieko nevyksta.\n" "• Sumažinti: šiuo metu pasirinktas „FSearch“ langas sumažinamas ir " "nuleidžiamas.\n" "Atkreipkite dėmesį, kad ne visos sistemos leidžia sumažinti ir nuleisti " "langus.\n" "• Uždaryti: „FSearch“ uždaroma.\n" "\n" "Galite sukonfigūruoti, ar tie veiksmai turėtų būti suaktyvinti atidarius " "failą\n" "• spartieji klavišai arba meniu įrašai ir (arba)\n" "• pelės paspaudimas " #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" " Rodyti paryškintus paieškos terminus: \n" "\n" "Jei įgalinta, paieškos terminai bus paryškinti rezultatų rodinyje. " "Pavyzdžiui, kai ieškote „foo“, visi foo parodymai failų / aplankų " "pavadinimuose bus išskirti paryškintais rašmenimis:\n" "\n" " foo bar.txt\n" "failas. foo \n" "\n" "Tai taip pat tinka įprastoms ir „wildcard“ išraiškoms, prasidedančioms arba " "besibaigiančioms žvaigždute. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Rodyti patarimus:\n" "\n" "Jei įgalinta, rezultatų rodinyje bus rodomas visas pasirinkto failo / " "aplanko kelias mažame patarimo lange." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Rodyti piktogramas vardo stulpelyje:\n" "\n" "Jei įgalinta, failo / aplanko piktogramos bus rodomos pavadinimo stulpelyje." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Prisiminti stulpelio konfigūraciją:\n" "\n" "Jei įgalinta, ankstesnio seanso rezultatų rodinio stulpelių konfigūracija " "bus atkurta, kai atidarysite FSearch langą. Tai apima visų stulpelių dydį ir " "matomumą." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Prisiminkite rūšiavimo tvarką:\n" "\n" "Jei įgalinta, ankstesnio seanso rezultatų rodinio rūšiavimo tvarka bus " "atkurta, kai atidarysite FSearch langą." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Atidarykite kelią dukart spustelėdami kelio stulpelyje:\n" "\n" "Jei įgalinta, dukart spustelėjus kelio stulpelyje bus atidarytas pasirinktas " "kelias." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Atidaryti vienu paspaudimu:\n" "\n" "Jei įgalinta, vienu paspaudimu atidaromas pasirinktas failas / aplankas. Jei " "norite pasirinkti failą / aplanką tik tada, kai šis parametras yra aktyvus, " "spustelėdami failą / aplanką, tuo pačiu metu laikydami Ctrl." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Rodyti duomenų bazės indeksavimo būseną:\n" "\n" "Jei įjungta, būsenos juostoje rodomas kelias, kuris šiuo metu indeksuojamas." #: src/fsearch_preferences.ui:1550 #, fuzzy #| msgid "" #| "Show warning dialogs:\n" #| "\n" #| "If enabled, a warning dialog is displayed when:\n" #| "\n" #| "\t• a file or folder failed to open\n" msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Rodyti įspėjimo dialogus:\n" "\n" "Jei įgalinta, perspėjimo dialogas yra rodomas, kai:\n" "\n" "• failo ar aplanko nepavyko atidaryti\n" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Ieškokite kelyje, kai užklausoje yra kelio skyriklių:\n" "\n" "Jei įgalinta, paieškos terminai, kuriuose yra kelio skyrikliai (t. y. „/“), " "bus automatiškai suderinti (matched) su visu failo ar aplanko keliu." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Sutapatinti raidžių dydį, kai užklausoje yra bent vienas didžiosios " "raidės simbolis:\n" "\n" "Jei įgalinta, paieškos terminai, kuriuose yra bent vienas didžiosios raidės " "simbolis, suaktyvins į didžiąsias ar mažąsias raides jautria paiešką. Tai " "reiškia, kad toks paieškos terminas kaip Foo atitiks FooBar.txt , bet ne foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Slėpti rezultatus, kai paieška tuščia:\n" "\n" "Jei įgalinta, paieškos rezultatai nebus rodomi, kai paieškos įrašas " "tuščias.\n" "\n" "Jei išjungta, visi failai ir aplankai bus rodomi, kai paieškos įrašas bus " "tuščias." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Ieškokite bevedant tekstą:\n" "\n" "Jei įjungta, paieška yra automatiškai atnaujinama kiekvieną kartą paspaudus " "klavišą.\n" "\n" "Jei ji išjungta, paieška atnaujinama tik paspaudus Enter arba " "paspaudus paieškos mygtuką. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Atnaujinti duomenų bazę startuojant:\n" "\n" "Jei įgalinta, duomenų bazė bus automatiškai atnaujinta fone, kai „FSearch“ " "bus paleistas." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Netrauktini aplankai:\n" "\n" "Šiame sąraše yra visi aplankai, kuriuos norite netraukti į duomenų bazę.\n" "\n" "• Aktyvus: jei įgalinta, kelias bus pašalintas iš duomenų bazės\n" "ir jame nebus galima ieškoti.\n" "• Kelias: visas kelias, kurį reikia netraukti." #: src/fsearch_preferences.ui:1677 #, fuzzy #| msgid "" #| "Exclude folder from database:\n" #| "\n" #| "This button opens a dialog where you can select a folder you want to " #| "exclude from the database." msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Išskirti aplanką, kuris neturi būti traukiamas į duomenų bazę:\n" "\n" "Šis mygtukas atveria dialogo langą, kuriame galite pasirinkti aplanką, kuris " "neturi būti traukiamas į duomenų bazę." #: src/fsearch_preferences.ui:1694 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| "This removes the selected folder from the list of excluded folders." msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Pašalinti pasirinktą eilutę:\n" "\n" "Tai pašalina pasirinktą aplanką iš aplankų, kurie neturi būti traukiami, " "sąrašo." #: src/fsearch_preferences.ui:1711 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Netrauktini aplankai:\n" "\n" "Šiame sąraše yra visi aplankai, kuriuos norite netraukti į duomenų bazę.\n" "\n" "• Aktyvus: jei įgalinta, kelias bus pašalintas iš duomenų bazės\n" "ir jame nebus galima ieškoti.\n" "• Kelias: visas kelias, kurį reikia netraukti." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Išskirti aplanką, kuris neturi būti traukiamas į duomenų bazę:\n" "\n" "Šis mygtukas atveria dialogo langą, kuriame galite pasirinkti aplanką, kuris " "neturi būti traukiamas į duomenų bazę." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Pašalinti pasirinktą eilutę:\n" "\n" "Tai pašalina pasirinktą aplanką iš aplankų, kurie neturi būti traukiami, " "sąrašo." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" " Išskirkite failus ir aplankus iš duomenų bazės, kad jie nebūtų " "traukiami: \n" "\n" "Tai yra kabliataškiais atskirtas failų (arba aplankų) sąrašas, kurį norite " "pašalinti iš duomenų bazės. Pvz., .git;.cache;*.swp netrauks visų " "failų ar aplankų, kurie vadinami .git arba .cache arba " "baigiasi .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Išskirkite paslėptus failus ir aplankus:\n" "\n" "Jei bus įjungta, paslėpti failai ir aplankai nebus įtraukti į duomenų bazę " "(t. y. Visi failai ar aplankai, prasidedantys taškiniu simboliu)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Pasirinkite nustatymą, kad gautumėte išsamų jo veikimo aprašymą." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" " Periodiškai atnaujinti duomenų bazę kas tam tikrą laiko tarpą: \n" "\n" "Jei įgalinta ir tol, kol veikia „FSearch“, duomenų bazė bus periodiškai " "atnaujinama nurodytu laiko intervalu.\n" "\n" "Jei norite atnaujinti duomenų bazę fone, net kai „FSearch“ neveikia, " "turėtumėte naudoti tokius įrankius kaip „cron“ arba „systemd“ laikmačius, " "kad periodiškai suaktyvintumėte atnaujinimą su:\n" "\n" " fsearch --update-database " #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Pridėti aplanką prie duomenų bazės:\n" "\n" "Šis mygtukas atveria dialogo langą, kuriame galite pasirinkti aplanką, kurį " "norite įtraukti į duomenų bazę\n" "ieškojimui.\n" " " #: src/fsearch_preferences.ui:1888 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| " This removes the selected folder from the list of " #| "included folders.\n" #| " " msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Pašalinti pasirinktą eilutę:\n" "\n" "Tai pašalins pasirinktą aplanką iš įtrauktų aplankų sąrašo.\n" " " #: src/fsearch_preferences.ui:1905 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Pridėti aplanką prie duomenų bazės:\n" "\n" "Šis mygtukas atveria dialogo langą, kuriame galite pasirinkti aplanką, kurį " "norite įtraukti į duomenų bazę\n" "ieškojimui.\n" " " #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Žinynas" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Pasirinkti aplanką" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Pažymėti" #: src/fsearch_preferences_ui.c:326 #, fuzzy #| msgid "Add folders" msgid "Add filter" msgstr "Pridėti aplankus" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktyvus" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Kelias" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Viena failų sistema" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Pavadinimas" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Tuščia užklausa" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d elementų" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d elementų" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Užklausiama…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Įkeliama…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Skenuojama…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Paieškos rezultatų skaičius" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elementų" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Atsisakyti" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indeksas:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Pasirinktų aplankų skaičius" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Pasirinktų failų skaičius" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Atsisakyti duomenų bazės atnaujinimo" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Duomenų bazės elementų skaičius" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(tuščia)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Paieškos termine yra kelio skyrikliai.\n" "Šiam terminui buvo laikinai suaktyvinta paieška kelyje." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "REGISTRAS" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Paieškos termine yra kelio skyrikliai.\n" "Šiam terminui buvo laikinai suaktyvinta paieška kelyje." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "KELIAS" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REG REIŠK" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Dydis" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipas" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Plėtinys" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Keitimo data" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can be very slow with many results and it can't be " #| "aborted.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Rūšiavimas pagal tipą su daug rezultatų gali būti labai lėtas ir jo " "nutraukti negalima.\n" "\n" "Ši rūšiavimo tvarka nėra nuolatinė, ji bus nustatyta iš naujo, kai pasikeis " "paieškos terminas." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Naujas langas" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Atnaujinti duomenų bazę" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Ieškoti kelyje" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Skirti didžiąsias ir mažąsias raides" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Įjungti reguliariuosius reiškinius" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Rodyti būsenos juostą" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Rodyti filtrą" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Rodyti paieškos mygtuką" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Apie" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Išeiti" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Ieškoti…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Pasirinkti filtrą" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Ar tikrai norite atverti %d failą(-us)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Atveriami failai…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Ar tikrai norite pašalinti %d failą(-us)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Ištrinami failai…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Perkeliami failai į šiukšlinę…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Ištrinami failai…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Perkeliami failai į šiukšlinę…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Ar tikrai norite atidaryti %d failo savybių langus?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Atidaromos failo ypatybės…" #: src/menus.ui:6 msgid "_File" msgstr "_Failas" #: src/menus.ui:9 msgid "New Window" msgstr "Naujas langas" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Atverti" #: src/menus.ui:21 msgid "Open Folder" msgstr "Atverti aplanką" #: src/menus.ui:29 msgid "Update Database" msgstr "Atnaujinti duomenų bazę" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Atsisakyti atnaujinimo" #: src/menus.ui:42 msgid "Close Window" msgstr "Uždaryti langą" #: src/menus.ui:54 msgid "_Edit" msgstr "_Taisa" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopijuoti" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Iškirp_ti" #: src/menus.ui:69 msgid "Select All" msgstr "Žymėti viską" #: src/menus.ui:74 msgid "Deselect All" msgstr "Nuimti žymėjimą nuo visų" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Invertuoti žymėjimą" #: src/menus.ui:92 msgid "_View" msgstr "_Rodinys" #: src/menus.ui:109 msgid "_Search" msgstr "_Paieška" #: src/menus.ui:126 msgid "_Help" msgstr "Ž_inynas" #: src/menus.ui:171 msgid "Open _With" msgstr "Atverti, _naudojant" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Atverti aplanką" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Kopijuoti kaip tekstą" #: src/menus.ui:217 msgid "Path + Name" msgstr "Kelias + pavadinimas" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Perkelti į _šiukšlinę" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Pridėti kelią, kuris bus įtrauktas į duomenų bazę\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Pridėti aplanką prie duomenų bazės:\n" #~ "\n" #~ "Šis mygtukas atveria dialogo langą, kuriame galite pasirinkti aplanką, " #~ "kurį norite įtraukti į duomenų bazę\n" #~ "ieškojimui.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Paieškos terminą sudaro didžiosios raidės.\n" #~ "Raidžių dydžių vienodinimas buvo laikinai suaktyvinta šiam " #~ "terminui." #~ msgid "page0" #~ msgstr "puslapis0" #~ msgid "page1" #~ msgstr "puslapis1" #~ msgid "page2" #~ msgstr "puslapis2" #, fuzzy #~| msgid "page3" #~ msgid "page30" #~ msgstr "puslapis3" #~ msgid "page18" #~ msgstr "puslapis18" #, fuzzy #~| msgid "page3" #~ msgid "page31" #~ msgstr "puslapis3" #, fuzzy #~| msgid "page3" #~ msgid "page32" #~ msgstr "puslapis3" #, fuzzy #~| msgid "page3" #~ msgid "page33" #~ msgstr "puslapis3" #, fuzzy #~| msgid "page3" #~ msgid "page34" #~ msgstr "puslapis3" #, fuzzy #~| msgid "page5" #~ msgid "page35" #~ msgstr "puslapis5" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ " Įtraukti aplankai: \n" #~ "\n" #~ "Šiame sąraše yra visi aplankai, kuriuos norite įtraukti į duomenų bazę.\n" #~ "\n" #~ "• Aktyvus: jei įgalinta, kelias bus įtrauktas į duomenų bazę, " #~ "kurioje bus ieškoma.\n" #~ "• Kelias: visas kelias, kurį reikia įtraukti.\n" #~ "• Atnaujinti: Šis nustatymas naudingas, jei norite pašalinti tam " #~ "tikrus kelius\n" #~ "kad jie nebūtų\n" #~ "atnaujinami (pvz., kelias į lėtą USB diską, kuris dažnai nesikeičia) " #~ "\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Pašalinti pasirinktą eilutę:\n" #~ "\n" #~ "Tai pašalins pasirinktą aplanką iš įtrauktų aplankų sąrašo.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Ar norite palikti langą atvertą?" #~ msgid "_Copy Filepath" #~ msgstr "_Kopijuoti failo kelią" #~ msgid "Update" #~ msgstr "Atnaujinti" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d elementų" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Paskutinį kartą atnaujinta: %Y %m %d, %H:%M" #~ msgid "_Delete" #~ msgstr "Iš_trinti" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Riboti rezultatų skaičių:" #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Šiuo metu neįmanoma užverti lango.\n" #~ "Palaukite minutėlę ir bandykite dar kartą." #~ msgid "label" #~ msgstr "etiketė" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Pereikite į Taisa → Nuostatos → Duomenų bazė ir pridėkite kurias " #~ "nors vietas" #~ msgid "page4" #~ msgstr "puslapis4" #~ msgid "page6" #~ msgstr "puslapis6" #~ msgid "page7" #~ msgstr "puslapis7" #~ msgid "page8" #~ msgstr "puslapis8" #~ msgid "page9" #~ msgstr "puslapis9" #~ msgid "page10" #~ msgstr "puslapis10" #~ msgid "page11" #~ msgstr "puslapis11" #~ msgid "page12" #~ msgstr "puslapis12" #~ msgid "page13" #~ msgstr "puslapis13" #~ msgid "page14" #~ msgstr "puslapis14" #~ msgid "page15" #~ msgstr "puslapis15" #~ msgid "page16" #~ msgstr "puslapis16" #~ msgid "page17" #~ msgstr "puslapis17" #~ msgid "page19" #~ msgstr "puslapis19" #~ msgid "page20" #~ msgstr "puslapis20" #~ msgid "page21" #~ msgstr "puslapis21" #~ msgid "page22" #~ msgstr "puslapis22" #~ msgid "page23" #~ msgstr "puslapis23" #~ msgid "page24" #~ msgstr "puslapis24" #~ msgid "page25" #~ msgstr "puslapis25" #~ msgid "page26" #~ msgstr "puslapis26" #~ msgid "page27" #~ msgstr "puslapis27" #~ msgid "page28" #~ msgstr "puslapis28" #~ msgid "page29" #~ msgstr "puslapis29" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Kopijuoti" #~ msgid "Remove" #~ msgstr "Šalinti" #~ msgid "Follow symbolic links" #~ msgstr "Sekti simbolinėmis nuorodomis" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFORMACIJA: \"Įjungti tamsią temą\" gali neveikti,\n" #~ "kadangi ne kiekviena GTK+ tema pateikia tamsią versiją." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Įjungti reguliariuosius reiškinius" #~ msgid "Open Containing Folder" #~ msgstr "Atverti vidinį aplanką" #~ msgid "Open File(s) in File Manager" #~ msgstr "Atverti failą(-us) failų tvarkytuvėje" #~ msgid "Move to Trash" #~ msgstr "Perkelti į šiukšlinę" #~ msgid "Show Menubar" #~ msgstr "Rodyti meniu juostą" #, fuzzy #~ msgid "Enable" #~ msgstr "Įjungti reguliariuosius reiškinius" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Įkeliama duomenų bazė…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Atnaujinama duomenų bazė..." #~ msgid "Search..." #~ msgstr "Ieškoti..." #~ msgid "Add" #~ msgstr "Pridėti" #~ msgid "files?" #~ msgstr "failus?" #~ msgid "C_ut" #~ msgstr "_Iškirpti" #~ msgid "Selected Folder and Files" #~ msgstr "Pažymėta aplankų ir failų" fsearch-0.2.3/po/meson.build000066400000000000000000000000501446344336300157140ustar00rootroot00000000000000i18n.gettext('fsearch', preset: 'glib') fsearch-0.2.3/po/mr.po000066400000000000000000000727031446344336300145460ustar00rootroot00000000000000# Marathi translations for fsearch package. # Copyright (C) 2022 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2022. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1.42-6286\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-06-06 07:15+0000\n" "Last-Translator: Prachi Joshi \n" "Language-Team: Marathi \n" "Language: mr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.13-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "कार्यप्रदर्शन आणि प्रगत वैशिष्ट्यांवर लक्ष केंद्रित करणारे फाइल शोध अप्लिकेशन" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "शोधा;fsearch;फाइल्स;फोल्डर्स;संगीत;व्हिडिओ;कागदपत्रे;शोधा;साधन;सर्वकाही;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "ग्राफिकल फाइल शोध अप्लिकेशन" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch तुम्हाला फाइल्स आणि फोल्डर्स शक्य तितक्या सहज आणि जलद शोधण्यात मदत करते. फक्त " "काही अक्षरे टाइप करा आणि शोध परिणाम जवळजवळ त्वरित दिसून येतील." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "अशी बरीच वैशिष्ट्ये आहेत जी शोध शक्य तितक्या कार्यक्षम आणि शक्तिशाली बनवतात. जसे:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "केसकडे दुर्लक्ष करा (उदा. \"fsearch\" शोधणे \"FSearch\" शी देखील जुळेल)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 msgid "Saving…" msgstr "" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "" #: src/fsearch_filter.c:113 msgid "Files" msgstr "" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "" #: src/menus.ui:6 msgid "_File" msgstr "" #: src/menus.ui:9 msgid "New Window" msgstr "" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "" #: src/menus.ui:21 msgid "Open Folder" msgstr "" #: src/menus.ui:29 msgid "Update Database" msgstr "" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 msgid "Close Window" msgstr "" #: src/menus.ui:54 msgid "_Edit" msgstr "" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "" #: src/menus.ui:74 msgid "Deselect All" msgstr "" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "" #: src/menus.ui:109 msgid "_Search" msgstr "" #: src/menus.ui:126 msgid "_Help" msgstr "" #: src/menus.ui:171 msgid "Open _With" msgstr "" #: src/menus.ui:185 msgid "_Open Folder" msgstr "" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "" fsearch-0.2.3/po/nb_NO.po000066400000000000000000001121761446344336300151220ustar00rootroot00000000000000# Norwegian Bokmal translations for FSearch package. # Copyright (C) 2019 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2019. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta3.24-8ede-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-10-20 16:26+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.1\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSøk" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 #, fuzzy msgid "A file search application focusing on performance and advanced features" msgstr "Et søkeverktøy med fokus på ytelse og avanserte funksjoner" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "søk;fsearch;filer;mapper;musikk;video;dokumenter;finn;verktøy;alt;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "Utelat skjulte filer og mapper" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "Sorterer…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Allan Nordhøy" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Et søkeverktøy med fokus på ytelse og avanserte funksjoner" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "Åpne med annet program" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Vis søkeknapp" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Oppdater database" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "Vis versjonsinfo" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "Laster database…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "Sletter filer…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "Sorterer…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy msgid "Failed to build open command" msgstr "Klarte ikke å åpne fil" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "Åpne med annet program" #: src/fsearch_file_utils.c:160 #, fuzzy msgid "Failed to get default display" msgstr "Klarte ikke å åpne fil" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy msgid "Failed to get path" msgstr "Klarte ikke å åpne fil" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy msgid "Failed to get parent path" msgstr "Klarte ikke å åpne fil" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Mapper" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Alle" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Mapper" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Filer" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "Annet program" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arkiver" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Lyd" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumenter" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Bilder" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Video" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Oppdater" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Navn" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Søk i sti" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Skill mellom store og små bokstaver" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "Annet program" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Tøm database" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Mapper" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "Laster database…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Dette tar ikke lang tid." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "Oppdaterer database…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Dette kan ta sin tid." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Tøm spørring" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Trykk Ctrl + F og begynn å skrive" #: src/fsearch_overlay.ui:304 #, fuzzy msgid "No Results Found" msgstr "Resultatløst" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Prøv et annet søk" #: src/fsearch_overlay.ui:368 #, fuzzy msgid "Sorting results…" msgstr "Sorterer…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Innstillinger" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Ifør mørk drakt" #: src/fsearch_preferences.ui:147 #, fuzzy msgid "Enable client-side decorations (requires restart)" msgstr "Skru på dekorasjoner på klientsiden (omstart kreves)" #: src/fsearch_preferences.ui:162 #, fuzzy msgid "Use binary units instead of decimal units" msgstr "Bruk totallsenheter istedenfor titallsenheter" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Husk vindusstørrelse" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "med tastatursnarveier eller menyoppføringer" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "med dobbeltklikk" #: src/fsearch_preferences.ui:273 #, fuzzy msgid "Behaviour after successfully opening a file:" msgstr "Foretagende etter åpning av fil" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimer" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Lukk" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Generelt:" #: src/fsearch_preferences.ui:352 #, fuzzy msgid "Show highlighted search terms" msgstr "Vis framhevede søkeord" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Vis verktøystips" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Vis ikoner i navnekolonne" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Husk kolonneoppsett" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Husk sorteringsrekkefølge" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Åpne sti ved å dobbeltklikke i sti-kolonnen" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Trykk én gang for å åpne" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Resultater:" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "Oppdater database ved oppstart" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Statusfelt:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Vis advarselsdialoger når:" #: src/fsearch_preferences.ui:592 #, fuzzy msgid "file / folder failed to open" msgstr "klarte ikke å åpne fil/mappe" #: src/fsearch_preferences.ui:615 #, fuzzy msgid "Dialogs:" msgstr "Dialogvinduer" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Grensesnitt" #: src/fsearch_preferences.ui:659 #, fuzzy msgid "Search in path when query contains path separators" msgstr "Søk i sti når spørring inneholder stiinndelere" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Søk mens du skriver" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Skjul resultatløse søkeresultater" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "Søk i sti når spørring inneholder stiinndelere" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Mapper" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Number of selected files" msgid "Remove selected filter" msgstr "Antall valgte filer" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "Antall valgte filer" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Vis filter" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Søk" #: src/fsearch_preferences.ui:887 #, fuzzy msgid "Update database on start" msgstr "Oppdater database ved oppstart" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "Oppdater" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Inkluder" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Støtter jokertegn. Flerfoldige oppføringer må inndeles med \";\"" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Ekskluder filer:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "f.eks. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Utelat skjulte filer og mapper" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Utelat" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Database" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_Hjelp" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Velg mappe" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Velg" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Mapper" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 #, fuzzy msgid "Active" msgstr "Aktiv" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Sti" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Åpne fil(er)" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Navn" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Tøm spørring" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format msgid "%'d Item" msgstr "%'d elementer" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, fuzzy, c-format msgid "%'d Items" msgstr "%'d elementer" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Utfører spørring…" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "Sorterer…" #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "Sorterer…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Antall søkeresultater" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 elementer" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Oppdater" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indeks:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Antall valgte mapper" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Antall valgte filer" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "Oppdater database ved oppstart" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Antall databaseelementer" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(tom)" #: src/fsearch_statusbar.ui:407 #, fuzzy msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Søket inneholder stiinndelere.\n" "Søk i sti ble midlertidig påslått for dette søket." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 #, fuzzy msgid "CASE" msgstr "VERSAL" #: src/fsearch_statusbar.ui:514 #, fuzzy msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Søket inneholder stiinndelere.\n" "Søk i sti ble midlertidig påslått for dette søket." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "STI" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "Regulært uttrykk" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Størrelse" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Type" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Dato endret" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSøk" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "Nytt vindu" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "Oppdater database" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Søk i sti" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Skill mellom store og små bokstaver" #: src/fsearch_window.ui:317 src/menus.ui:120 #, fuzzy msgid "Enable RegEx" msgstr "Skru på regulære uttrykk" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Vis statusfelt" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Vis filter" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Vis søkeknapp" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Om" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Avslutt" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "Søk" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Velg et filter" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "Ønsker du virkelig å fjerne %d fil(er)?" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "Åpne fil(er)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Ønsker du virkelig å fjerne %d fil(er)?" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "Sletter filer…" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "Flytter filer til papirkurv…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "Sletter filer…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "Flytter filer til papirkurv…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Ønsker du virkelig å fjerne %d fil(er)?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Åpne fil(er)…" #: src/menus.ui:6 msgid "_File" msgstr "_Fil" #: src/menus.ui:9 msgid "New Window" msgstr "Nytt vindu" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Åpne" #: src/menus.ui:21 msgid "Open Folder" msgstr "Åpne mappe" #: src/menus.ui:29 msgid "Update Database" msgstr "Oppdater database" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Avbryt oppdatering" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Nytt vindu" #: src/menus.ui:54 msgid "_Edit" msgstr "_Rediger" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopier" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "Fravelg alt" #: src/menus.ui:74 msgid "Deselect All" msgstr "Fravelg alt" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverter utvalg" #: src/menus.ui:92 msgid "_View" msgstr "_Vis" #: src/menus.ui:109 msgid "_Search" msgstr "_Søk" #: src/menus.ui:126 msgid "_Help" msgstr "_Hjelp" #: src/menus.ui:171 msgid "Open _With" msgstr "Åpne _med" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Åpne mappe" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Flytt til _papirkurv" #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Søket inneholder store bokstaver.\n" #~ "Skill mellom store og små bokstaver ble midlertidig påslått for " #~ "dette søket." #, fuzzy #~ msgid "page0" #~ msgstr "side0" #~ msgid "page1" #~ msgstr "side1" #, fuzzy #~ msgid "page2" #~ msgstr "side0" #, fuzzy #~ msgid "page30" #~ msgstr "side0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "side1" #, fuzzy #~ msgid "page31" #~ msgstr "side0" #, fuzzy #~ msgid "page32" #~ msgstr "side0" #, fuzzy #~ msgid "page33" #~ msgstr "side0" #, fuzzy #~ msgid "page34" #~ msgstr "side0" #, fuzzy #~ msgid "page35" #~ msgstr "side0" #~ msgid "Do you want to keep the window open?" #~ msgstr "Ønsker du å beholde vinduet oppe?" #~ msgid "_Copy Filepath" #~ msgstr "_Kopier filsti" #~ msgid "Update" #~ msgstr "Oppdater" #, fuzzy #~ msgid "≥%'d Items" #~ msgstr "%'d elementer" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Sist oppdatert: %d %m %Y %H:%M" #~ msgid "_Delete" #~ msgstr "_Slett" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Begrens antall resultat:" #~ msgid "Background tasks are active." #~ msgstr "Bakgrunnsoppgaver aktive." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Lukking av vindu er ikke mulig nå.\n" #~ "Vent et øyeblikk og prøv igjen." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Gå til Rediger → Innstillinger → Database og legg til noen " #~ "plasseringer" #, fuzzy #~ msgid "page4" #~ msgstr "side0" #, fuzzy #~ msgid "page6" #~ msgstr "side0" #, fuzzy #~ msgid "page7" #~ msgstr "side0" #, fuzzy #~ msgid "page8" #~ msgstr "side0" #, fuzzy #~ msgid "page9" #~ msgstr "side0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "side1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "side1" #, fuzzy #~ msgid "page20" #~ msgstr "side0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "side1" #, fuzzy #~ msgid "page22" #~ msgstr "side0" #, fuzzy #~ msgid "page23" #~ msgstr "side0" #, fuzzy #~ msgid "page24" #~ msgstr "side0" #, fuzzy #~ msgid "page25" #~ msgstr "side0" #, fuzzy #~ msgid "page26" #~ msgstr "side0" #, fuzzy #~ msgid "page27" #~ msgstr "side0" #, fuzzy #~ msgid "page28" #~ msgstr "side0" #, fuzzy #~ msgid "page29" #~ msgstr "side0" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Kopier" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Skru på mørk drakt trenger ikke å ha noen effekt.\n" #~ "Noen plattformer støtter ikke ikledelse av mørk drakt, og andre bruker " #~ "mørke drakter som forvalg." #~ msgid "Add…" #~ msgstr "Legg til…" #~ msgid "Remove" #~ msgstr "Fjern" #~ msgid "Follow symbolic links" #~ msgstr "Følg symbolske lenker" #, fuzzy #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Ifør mørk drakt\" kan være nytteløst,\n" #~ "siden ikke alle GTK-drakter tilbyr en mørk versjon." #, fuzzy #~ msgid "Enable menubar" #~ msgstr "Skru på regulære uttrykk" #, fuzzy #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "Info: Å skru på eller av menypanelet vises kun etter at FSearch har blitt " #~ "startet på ny.\n" #~ msgid "Open Containing Folder" #~ msgstr "Åpner inneholdende mappe" #~ msgid "Open File(s) in File Manager" #~ msgstr "Åpne fil(er) i filbeandler" #~ msgid "Move to Trash" #~ msgstr "Flytt til papirkurv" #~ msgid "Show Menubar" #~ msgstr "Vis menyfelt" #, fuzzy #~ msgid "Enable" #~ msgstr "Skru på regulære uttrykk" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Laster database…" #, fuzzy #~ msgid "..." #~ msgstr "…" #, fuzzy #~ msgid "Updating Database..." #~ msgstr "Oppdaterer database…" #~ msgid "Add..." #~ msgstr "Legg til…" #, fuzzy #~ msgid "Search..." #~ msgstr "Søk…" #~ msgid "Add" #~ msgstr "Legg til" #~ msgid "files?" #~ msgstr "filer?" #~ msgid "C_ut" #~ msgstr "Klipp _ut" fsearch-0.2.3/po/nl.po000066400000000000000000001463411446344336300145410ustar00rootroot00000000000000# Dutch translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-16 20:17+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "Een zoekhulpmiddel met als doel snelheid en uitgebreide mogelijkheden" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "zoeken;fsearch;bestanden;mappen;muziek;video;documenten;vinden;hulpmiddel;" "alles;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Een grafisch zoekhulpmiddel" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch helpt je op eenvoudige wijze bestanden en mappen te zoeken. Typ een " "paar letters en je ziet meteen resultaat." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Er zijn veel functies die FSearch efficiënt doch krachtig maken, waaronder:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Negeer hoofdlettergebruik (voorbeeld: zoeken naar ‘fsearch’ levert ook " "‘FSearch’ op als resultaat)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Reguliere uitdrukkingen" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Jokertekens" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filtermogelijkheden (bijv. alleen audiobestanden)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Sluit verborgen bestanden en mappen uit" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "Sorteer op naam, locatie, grootte, bewerkdatum en bestandsextensie" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Let op: Flatpak schermt bepaalde delen van het systeem af, waardoor FSearch " "niet alles kan doorzoeken." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "De standaard vormgeving" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Een vormgeving die meer overeenkomt met de GNOME-ontwerprichtlijnen" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Eerste uitgave." #: src/fsearch.c:243 msgid "Saving…" msgstr "Bezig met opslaan…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Heimen Stoffels" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Een zoekhulpmiddel, gericht op snelheid en uitgebreide mogelijkheden" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Nieuw toepassingsvenster openen" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Toepassingsvoorkeuren openen" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Zoekpatroon instellen" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Databank bijwerken en afsluiten" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Versie-informatie tonen en afsluiten" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Bezig met laden van mappen…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Bezig met laden van bestanden…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Bezig met sorteren…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "De map kan niet worden geopend" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "De openen-opdracht kan niet worden aangeropen" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Het desktopbestand kan niet worden geopend" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Er kan geen toepassingsinformatie worden getoond" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Het standaard beeldscherm kan niet worden opgevraagd" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Het bestand kan niet worden verwijderd" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "De locatie kan niet worden opgevraagd" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Het desktopbestand kan niet worden geopend" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Er kan geen bestandsinformatie worden opgevraagd" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Er is geen standaardtoepassing ingesteld" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "De bovenliggende map kan niet worden geopend" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "De bovenliggende locatie kan niet worden geopend" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Map" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Onbekend type" #: src/fsearch_filter.c:111 msgid "All" msgstr "Alles" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Mappen" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Bestanden" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Toepassingen" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archieven" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Audio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documenten" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Afbeeldingen" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Video's" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Macronamen mogen niet het teken ‘:’ bevatten." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Annuleren" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Oké" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Filter aanpassen" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Naam:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "De unieke naam van dit filter" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Unieke filternaam" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Locatie doorzoeken" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Reguliere uitdrukkingen gebruiken" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Hoofdlettergevoelig" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Zoekopdracht:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Macro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "De macro van dit filter. Met een macro kan een filter worden gebruikt in het " "zoekvak door de tekst te typen, gevolgd door ‘:’\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Eigenschappen…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Andere toepassing…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Lege databank" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Mappen toevoegen" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Bezig met laden van databank…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Dit kan even duren." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Bezig met bijwerken van databank…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Dit kan even duren." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Blanco zoekopdracht" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Druk op Ctrl + F en begin met typen." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Geen resultaten gevonden" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Probeer een andere zoekopdracht" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Bezig met sorteren…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Voorkeuren" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Donker thema gebruiken" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Decoraties aan clientzijde gebruiken (herstart vereist)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Binaire eenheden in plaats van decimale gebruiken" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Vensterafmetingen onthouden" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Afsluiten met escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "met sneltoetsen of via het menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "middels dubbelklikken" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Wat te doen na het openen van een bestand:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Niets" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimaliseren" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Sluiten" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Algemeen:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Zoektermen markeren" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Hulpballonnen tonen" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Pictogrammen tonen in naamkolom" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Kolomindeling onthouden" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Sorteervolgorde onthouden" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Locatie openen door te dubbelklikken in de locatiekolom" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Eénmaal klikken om te openen" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Desktop-bestanden starten" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Resultaten:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Databank-bijwerkstatus tonen" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Statusbalk:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Waarschuwingen tonen als:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "bestand/map niet kan worden geopend" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Vensters:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Uiterlijk" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Locatie doorzoeken als de zoekopdracht locatie-scheidingstekens bevat" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Zoeken tijdens typen" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Resultaten verbergen als zoekopdracht blanco is" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Tekstgrootte moet overeenkomen als de zoekopdracht minstens één hoofdletter " "bevat" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Filter toevoegen" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Geselecteerd filter verwijderen" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Geselecteerd filter aanpassen" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Standaardfilters herstellen" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filter:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Zoeken" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Databank bijwerken na opstarten" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Bijwerken, elke" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "uur en" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minute(n)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Voeg doe op te nemen locatie toe\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Geselecteerde locatie verwijderen" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Opnemen" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Voeg de uit te sluiten locatie toe" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Jokertekens worden ondersteund. Scheid meerdere items met ‘;’" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Bestanden uitsluiten:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "bijv. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Verborgen bestanden en mappen uitsluiten" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Uitsluiten" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Databank" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Donker thema gebruiken:\n" "\n" "Schakel in om het donkere systeemthema te gebruiken in FSearch (donkere " "vormgeving met lichte tekst).\n" "\n" "Let op: niet alle systeemthema's bieden een donkere variant, dus deze " "instelling kan ook géén effect hebben." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Decoraties aan clientzijde gebruiken:\n" "\n" "Schakel in om het zoekvak en hoofdmenu op de titelbalk te tonen.\n" "\n" "Schakel uit om het hoofdmenu als menubalk te tonen en het zoekvak " "daaronder.\n" "Dit laatste zorgt voor een traditionelere vormgeving, maar neem iets meer " "ruimte in beslag." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Binaire eenheden in plaats van decimale gebruiken:\n" "\n" "Met deze instelling kun je aangeven hoe bestandsgroottes moeten worden " "getoond.\n" "\n" "\t• Binaire eenheden: dit verwijst naar binaire IEC-voorvoegsels " "(voorbeeld: 1 KiB = 1024 bytes)\n" "\t• Decimale eenheden: dit verwijst naar decimale SI-voorvoegsels " "(voorbeeld: 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Vensterafmetingen onthouden:\n" "\n" "Schakel in om de vensterafmetingen van de vorige sessie te gebruiken als je " "een FSearch-venster opent.\n" "\n" "Let op: sommige vensterbeheerders negeren dit verzoek en dwingen hun eigen " "afmetingen af." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Wat te doen na het openen van een bestand:\n" "\n" "Als een bestand of map geopend is, kan één van de volgende acties worden " "uitgevoerd:\n" "\n" "\t• Niets: er wordt geen actie ondernomen.\n" "\t• Minimaliseren: minimaliseer het huidige FSearch-venster. \t• " "Sluiten: sluit FSearch af.\n" "\n" "Je kunt aangeven of deze acties moeten worden uitgevoerd als het bestand " "geopend is middels\n" "\n" "\t• sneltoetsen of menu-items en/of\n" "\t• muisklik" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Zoektermen markeren:\n" "\n" "Schakel in om de zoektermen te markeren in het resultatenvenster. Voorbeeld: " "als je zoekt naar ‘iets’, dan worden alle items met iets in de " "bestands- of mapnaam vetgedrukt getoond:\n" "\n" "\tietsbar.txt\n" "\tbestand.iets\n" "\n" "Dit werkt tevens voor reguliere uitdrukkingen en jokertekens die beginnen " "met of eindigen op een sterretje. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Hulpballonnen tonen:\n" "\n" "Schakel in om de volledige locatie in een geselecteerd(e) bestand/map in het " "resultatenvenster te tonen in een kleine hulpballon." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Pictogrammen tonen in naamkolom:\n" "\n" "Schakel in om pictogrammen te tonen in de naamkolom." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Kolomindeling onthouden:\n" "\n" "Schakel in om de kolomindeling van het resultatenvenster te onthouden op " "basis van de indeling van de vorige sessie. Dit omvat de grootte en " "zichtbaarheid van alle kolommen." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Sorteervolgorde onthouden:\n" "\n" "Schakel in om de sorteervolgorde van het resultatenvenster te onthouden op " "basis van de volgorde van de vorige sessie." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Locatie openen door te dubbelklikken in de locatiekolom:\n" "\n" "Schakel in om de geselecteerde locatie te openen door te dubbelklikken in de " "locatiekolom." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Eénmaal klikken om te openen:\n" "\n" "Schakel in om de geselecteerde map of het geselecteerde bestand te openen " "met één muisklik. Selecteren kan dan door Ctrl-klik te gebruiken." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Databank-bijwerkstatus tonen:\n" "\n" "Schakel in om op de statusbalk aan te geven welke locatie momenteel wordt " "geïndexeerd." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Waarschuwingen tonen als:\n" "\n" "Schakel in om waarschuwingen te tonen als een bestand of map niet kan worden " "geopend." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Locatie doorzoeken als zoekopdracht locatie-scheidingstekens bevat:\n" "\n" "Schakel in om zoektermen met locatie-scheidingstekens (bijv. ‘/’) " "automatisch overeen te laten komen met de volledige locatie van een bestand " "of map." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Tekstgrootte moet overeenkomen als de zoekopdracht minstens één " "hoofdletter bevat:\n" "\n" "Schakel in om van zoekopdrachten met minimaal één hoofdletter een " "hoofdlettergevoelige zoekopdracht te maken. Dit betekent dat termen als " "Iets overeenkomen met IetsBar.txt, maar niet met ietsbar." "txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Resultaten verbergen als zoekopdracht blanco is:\n" "\n" "Schakel in om geen zoekresultaten te tonen als de zoekopdracht blanco is.\n" "\n" "Schakel uit om alle bestanden en mappen te tonen als de zoekopdracht blanco " "is." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Zoeken tijdens typen:\n" "\n" "Schakel in om automatisch te zoeken na iedere toetsaanslag.\n" "\n" "Schakel uit om alleen te zoeken zodra je op Enter of de zoekknop " "drukt. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Databank bijwerken na opstarten:\n" "\n" "Schakel in om de databank automatisch bij te werken op de achtergrond zodra " "je FSearch opent." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Ingesloten mappen:\n" "\n" "Deze lijst bevat alle mappen die je wilt opnemen in de databank.\n" "\n" "\t• Actief: schakel in om een locatie uit te sluiten en dus niet te " "doorzoeken.\n" "\t• Locatie: de volledige uit te sluiten locatie.\n" "\t•Eén bestandssysteem: schakel in om alléén het huidige " "bestandssysteem te doorzoeken." #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Map opnemen:\n" "\n" "Met deze knop open je een venster waar je een map kunt kiezen die je wilt " "opnemen." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Geselecteerde rij verwijderen:\n" "\n" "Hiermee verwijder je de geselecteerde map van de lijst met ingesloten mappen." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Uitgesloten mappen:\n" "\n" "Deze lijst bevat alle mappen die je niet wilt opnemen in de databank.\n" "\n" "\t• Actief: schakel in om een locatie uit te sluiten en dus niet te " "doorzoeken.\n" "\t• Locatie: de volledige uit te sluiten locatie." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Map uitsluiten:\n" "\n" "Met deze knop open je een venster waar je een map kunt kiezen die je wilt " "uitsluiten." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Geselecteerde rij verwijderen:\n" "\n" "Hiermee verwijder je de geselecteerde map van de lijst met uitgesloten " "mappen." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Mappen en bestanden uitsluiten van databank:\n" "\n" "Dit is een puntkommagescheiden lijst met bestanden (of mappen) die je niet " "wilt opnemen in de databank. Voorbeeld: .git;.cache;*.swp sluit alle " "bestanden of mappen uit de .git of .cache heten of eindigen op " ".swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Verborgen bestanden en mappen uitsluiten:\n" "\n" "Schakel in om verborgen bestanden en mappen niet op te nemen in de databank " "(dit zijn alle bestanden en mappen die beginnen met een punt)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Plaats de cursor boven een instelling om een hulpballon te tonen." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Launch desktop files:\n" "\n" " If enabled, activating a .desktop file will launch the application " "defined\n" " within that file. This way FSearch can act like an application launcher. " "Otherwise the .desktop\n" " file will be opened with the default handler for this type of files, which " "is usually a text\n" " editor." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filters:\n" "\n" " This is a list of all available filters. A filter is a predefined search.\n" "\n" " • Name: A unique and descriptive identifier for the filter\n" " • Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" " • Query: The search term by which the database should be filtered" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Filter toevoegen:\n" "\n" "Met deze knop open je een venster waar je een nieuw filter kunt bewerken." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Geselecteerd filter verwijderen:\n" "\n" "Hiermee verwijder je het geselecteerde filter." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Geselecteerd filter bewerken:\n" "\n" "Met deze knop open je een venster waar je een filter kunt bewerken." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Standaardfilters herstellen:\n" "\n" "Met deze knop herstel je de standaard filterconfiguratie.\n" "\n" "⚠ Alle door de zelfgemaakte of -bewerkte filters worden gewist! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Afsluiten met espace\n" "\n" "Schakel in om FSearch af te sluiten met de espacetoets in plaats van het " "venster te minimaliseren." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Hulp" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Kies een map" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Selecteren" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Filter toevoegen" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Actief" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Locatie" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Eén bestandssysteem" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Naam" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Macro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Zoekopdracht" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d item" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d items" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Bezig met zoeken…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Bezig met laden…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Bezig met doorzoeken…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Aantal zoekresultaten" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 items" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "Annuleren" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Index:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Aantal geselecteerde mappen" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Aantal geselecteerde bestanden" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Databank bijwerken afbreken" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Aantal databankitems" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(leeg)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "De zoekterm bevat hoofdletters.\n" "De optie Hoofdlettergevoelig is tijdelijk ingeschakeld." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "HOOFDLETTERS" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "De zoekterm bevat locatie-scheidingstekens.\n" "De optie Locatie doorzoeken is tijdelijk ingeschakeld." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "LOCATIE" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Grootte" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Type" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extensie" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Aangepast op" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Sorteren op type kan enkele seconden duren als er veel resultaten " "zijn.\n" "\n" "Deze volgorde wordt niet permanent ingesteld." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch-website" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Doneren" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Bugmeldingen- en ideeënpagina" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub-sponsoren" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nieuw venster" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Databank bijwerken" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Locatie doorzoeken" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Hoofdlettergevoelig" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Reguliere uitdrukkingen gebruiken" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Statusbalk tonen" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Filter tonen" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Zoekknop tonen" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Over" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Afsluiten" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Zoeken…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Selecteer een filter" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Weet je zeker dat je %d bestand(en) wilt openen?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Bezig met openen…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Weet je zeker dat je %d bestand(en) wilt verwijderen?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Bezig met verwijderen…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Bezig met verplaatsen naar prullenbak…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Er is iets misgegaan." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "Er is/zijn %d bestan(en) verwijderd." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "Er is/zijn %d bestan(en) naar de prullenbak verplaatst." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "De databank dient te worden bijgewerkt voordat de wijzigingen worden " "getoond. Dit wordt in een toekomstige versie opgelost." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Weet je zeker dat je %d bestandseigenschap(pen) wilt openen?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Bezig met openen…" #: src/menus.ui:6 msgid "_File" msgstr "_Bestand" #: src/menus.ui:9 msgid "New Window" msgstr "Nieuw venster" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Openen" #: src/menus.ui:21 msgid "Open Folder" msgstr "Map openen" #: src/menus.ui:29 msgid "Update Database" msgstr "Databank bijwerken" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Update afbreken" #: src/menus.ui:42 msgid "Close Window" msgstr "Venster sluiten" #: src/menus.ui:54 msgid "_Edit" msgstr "B_ewerken" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopiëren" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Kni_ppen" #: src/menus.ui:69 msgid "Select All" msgstr "Alles selecteren" #: src/menus.ui:74 msgid "Deselect All" msgstr "Niets selecteren" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Selectie omkeren" #: src/menus.ui:92 msgid "_View" msgstr "Bee_ld" #: src/menus.ui:109 msgid "_Search" msgstr "_Zoeken" #: src/menus.ui:126 msgid "_Help" msgstr "_Hulp" #: src/menus.ui:171 msgid "Open _With" msgstr "Openen _met" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Map _openen" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Kopiëren als tekst" #: src/menus.ui:217 msgid "Path + Name" msgstr "Locatie + naam" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Verplaatsen naar _prullenbak" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Voeg doe op te nemen locatie toe\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Map toevoegen aan databank:\n" #~ "\n" #~ "Met deze knop open je een venster waar je een map kunt kiezen die je wilt " #~ "toevoegen aan de databank.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "De zoekterm bevat hoofdletters.\n" #~ "De optie Hoofdlettergevoelig is tijdelijk ingeschakeld." #~ msgid "page0" #~ msgstr "pagina0" #~ msgid "page1" #~ msgstr "pagina1" #~ msgid "page2" #~ msgstr "pagina2" #~ msgid "page30" #~ msgstr "pagina30" #~ msgid "page18" #~ msgstr "pagina18" #~ msgid "page31" #~ msgstr "pagina31" #~ msgid "page32" #~ msgstr "pagina32" #~ msgid "page33" #~ msgstr "pagina33" #~ msgid "page34" #~ msgstr "pagina34" #~ msgid "page35" #~ msgstr "pagina35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Opgenomen mappen:\n" #~ "\n" #~ "Deze lijst bevat alle mappen die je wilt opnemen in de databank.\n" #~ "\n" #~ "\t• Actief: schakel in om de locatie op te nemen in de databank.\n" #~ "\t• Locatie: de volledige op te nemen locatie.\n" #~ "\t• Bijwerken: deze instelling kan worden gebruikt om bepaalde " #~ "locaties uit te sluiten\n" #~ "\t\t\tbij het bijwerken (bijv. als de locatie op een langzame usb-" #~ "schijf staat)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Geselecteerde rij verwijderen:\n" #~ "\n" #~ "Hiermee verwijder je de geselecteerde map van de lijst met opgenomen " #~ "mappen.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Wil je het venster openhouden?" #~ msgid "_Copy Filepath" #~ msgstr "Bestandspad _kopiëren" #~ msgid "Building lookup list…" #~ msgstr "Bezig met samenstellen van opzoeklijst…" #~ msgid "Update" #~ msgstr "Bijwerken" #~ msgid "≥%'d Items" #~ msgstr ">%'d items" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Laatst bijgewerkt: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Verwijderen" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Aantal zoekresultaten beperken:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Aantal zoekresultaten beperken:\n" #~ "\n" #~ "Schakel in om het aantal zoekresultaten te beperken tot een bepaald " #~ "aantal.\n" #~ "\n" #~ "Hoe meer resultaten je toont, hoe slechter de prestaties worden, vooral " #~ "als de lijst ongesorteerd is. Dit wordt in toekomstige versies verbeterd." #~ msgid "Background tasks are active." #~ msgstr "Achtergrondtaken zijn actief." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Het venster kan momenteel niet worden gesloten.\n" #~ "Wacht even en probeer het dan opnieuw." #~ msgid "label" #~ msgstr "label" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Ga naar Bewerken → Voorkeuren → Databank en voeg locaties toe" #~ msgid "page4" #~ msgstr "pagina4" #~ msgid "page6" #~ msgstr "pagina6" #~ msgid "page7" #~ msgstr "pagina7" #~ msgid "page8" #~ msgstr "pagina8" #~ msgid "page9" #~ msgstr "pagina9" #~ msgid "page10" #~ msgstr "pagina10" #~ msgid "page11" #~ msgstr "pagina11" #~ msgid "page12" #~ msgstr "pagina12" #~ msgid "page13" #~ msgstr "pagina13" #~ msgid "page14" #~ msgstr "pagina14" #~ msgid "page15" #~ msgstr "pagina15" #~ msgid "page16" #~ msgstr "pagina16" #~ msgid "page17" #~ msgstr "pagina17" #~ msgid "page19" #~ msgstr "pagina19" #~ msgid "page20" #~ msgstr "pagina20" #~ msgid "page21" #~ msgstr "pagina21" #~ msgid "page22" #~ msgstr "pagina22" #~ msgid "page23" #~ msgstr "pagina23" #~ msgid "page24" #~ msgstr "pagina24" #~ msgid "page25" #~ msgstr "pagina25" #~ msgid "page26" #~ msgstr "pagina26" #~ msgid "page27" #~ msgstr "pagina27" #~ msgid "page28" #~ msgstr "pagina28" #~ msgid "page29" #~ msgstr "pagina29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Kopiëren" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Donker thema inschakelen werkt niet overal.\n" #~ "Sommige systemen hebben geen ondersteuning voor donkere thema's en " #~ "anderen hebben het standaard." #~ msgid "Add…" #~ msgstr "Toevoegen…" #~ msgid "Remove" #~ msgstr "Verwijderen" #~ msgid "Follow symbolic links" #~ msgstr "Symbolische koppelingen volgen" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFORMATIE: 'Donker thema gebruiken' kan soms geen effect hebben\n" #~ "omdat niet elk GTK+-thema een donkere variant heeft." #~ msgid "Enable menubar" #~ msgstr "Menubalk tonen" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "Let op: herstart FSearch om de menubalk te tonen of verbergen.\n" #~ msgid "Open Containing Folder" #~ msgstr "Bijbehorende map openen" #~ msgid "Open File(s) in File Manager" #~ msgstr "Bestand(en) openen in bestandsbeheerder" #~ msgid "Move to Trash" #~ msgstr "Verplaatsen naar prullenbak" #~ msgid "Show Menubar" #~ msgstr "Menubalk tonen" #~ msgid "Enable" #~ msgstr "Inschakelen" #~ msgid "Loading Database..." #~ msgstr "Bezig met laden van databank..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Bezig met bijwerken van databank..." #~ msgid "Add..." #~ msgstr "Toevoegen..." #~ msgid "Search..." #~ msgstr "Zoeken..." #~ msgid "Add" #~ msgstr "Toevoegen" #~ msgid "files?" #~ msgstr "wilt verwijderen?" #~ msgid "C_ut" #~ msgstr "K_nippen" #~ msgid "Selected Folder and Files" #~ msgstr "Geselecteerde map en bestanden" fsearch-0.2.3/po/pl.po000066400000000000000000001556611446344336300145500ustar00rootroot00000000000000# Polish translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-13 19:25+0000\n" "Last-Translator: Daniel Napora \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Narzędzie wyszukiwania, koncentrujące się na wydajności i zaawansowanych " "funkcjach" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "szukanie;fsearch;pliki;katalogi;muzyka;wideo;dokumenty;szukanie;narzędzie;" "wszystko;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Graficzna aplikacja do wyszukiwania plików" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch pomaga znaleźć pliki i katalogi tak łatwo i szybko, jak to możliwe. " "Wystarczy wpisać kilka liter, a wyniki wyszukiwania pojawią się niemal " "natychmiast." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Posiada wiele funkcjonalności, które sprawiają, że wyszukiwanie jest " "efektywne i wydajne, jak to tylko możliwe. Na przykład:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignorowanie wielkość liter (np. wyszukiwanie „fsearch” również dopasuje się " "do „FSearch”)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Wyrażenia regularne" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Obsługa symboli wieloznacznych" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Obsługa filtrów (np. tylko wyszukiwanie plików audio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Wykluczenie pewnych plików i katalogów" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Szybkie sortowanie według nazwy, ścieżki, rozmiaru, czasu modyfikacji i " "rozszerzenia" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Uwaga: ze względu na piaskownicę Flatpak, FSearch nie może znaleźć każdego " "pliku w twoim systemie." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Domyślny układ interfejsu użytkownika" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Układ bardziej zbliżony do GNOME HIG" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Pierwsze wydanie." #: src/fsearch.c:243 msgid "Saving…" msgstr "Zapisywanie…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Daniel Napora " #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Narzędzie wyszukiwania, koncentrujące się na wydajności i zaawansowanych " "funkcjach" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Otwórz nowe okno aplikacji" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Pokaż ustawienia aplikacji" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Ustaw wzorzec wyszukiwania" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Uaktualnij bazę danych i wyjdź" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Pokaż informacje o wersji i wyjdź" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Ładowanie katalogów…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Ładowanie plików…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Sortowanie…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Error while opening folder" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Błąd podczas otwierania katalogu" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Nie udało się otworzyć:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Błąd podczas uruchamiania pliku desktop" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Nie udało się uzyskać informacji o aplikacji" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Nie udało się otworzyć pliku" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Error when removing file" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Błąd podczas usuwania pliku" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Nie udało się ustalić ścieżki" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Error when launching desktop file" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Błąd podczas uruchamiania pliku desktop" #: src/fsearch_file_utils.c:259 #, fuzzy #| msgid "Error when getting information for content type" msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Błąd podczas uzyskiwania informacji o typie zawartości" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Nie ma skojarzonej domyślnej aplikacji" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Error when opening parent folder" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Błąd podczas otwierania katalogu nadrzędnego" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Nie udało się otworzyć:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Katalog" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Nieznany typ" #: src/fsearch_filter.c:111 msgid "All" msgstr "Wszystkie" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Katalogi" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Pliki" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Aplikacje" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Archiwa" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Dźwiękowe" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Dokumenty" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Obrazy" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Wideo" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Nazwy makr nie mogą zawierać znaków `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Anuluj" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "Gotowe" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Edytuj filtr" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Nazwa:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Unikalna nazwa tego filtra" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Unikalna nazwa filtra" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Szukaj w ścieżce" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Włącz wyrażenia regularne" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Uwzględniaj wielkość liter" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Zapytanie:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Makro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Makro dla tego filtra. Makro pozwala na używanie tego filtra w polu " "wyszukiwania poprzez wpisanie makra a następnie ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Właściwości…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Inna aplikacja…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Pusta baza danych" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Dodaj katalogi" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Ładowania bazy danych…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "To nie potrwa długo." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Aktualizowanie bazy danych…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "To może trochę potrwać." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Puste zapytanie" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "" #| "Press Ctrl + F and start typing\n" #| " " msgid "Press Ctrl + F and start typing." msgstr "" "Naciśnij Ctrl + F i zacznij pisać\n" " " #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nie znaleziono wyników" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Spróbuj innego wyszukiwania" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Sortowanie wyników…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferencje" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Włącz ciemny motyw" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Włącz dekoracje client-side (wymaga restartu)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Użyj jednostek binarnych zamiast jednostek dziesiętnych" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Pamiętaj rozmiar okna" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Wyjdź przy pomocy Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "za pomocą skrótu klawiszowego lub z menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "za pomocą podwójnego kliknięcia" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Zachowanie po udanym otwarciu pliku:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nie rób nic" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimalizuj" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Zamknij" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Ogólne:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Podświetlaj wyszukiwane na liście wyników" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Wyświetlaj podpowiedzi" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Pokaż ikony w kolumnie Nazwa" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Pamiętaj konfigurację kolumn" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Pamiętaj porządek sortowania" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Otwórz ścieżkę przez dwuklik w kolumnie ścieżka" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Pojedyncze kliknięcie otwiera" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Uruchamiaj pliki desktop" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Lista wyników:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Pokaż status indeksowania bazy danych" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Pasek stanu:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Pokaż ostrzeżenie gdy:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "nie udało się otworzyć pliku / katalogu" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Okna dialogowe:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interfejs" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Wyszukuj w ścieżce gdy kwerenda zawiera separatory ścieżki" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Wyszukiwanie podczas pisania" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Ukryj wyniki gdy pole wyszukiwania jest puste" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Rozróżniaj wielkość liter gdy zapytanie zawiera choć jedną wielką literę" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Dodaj nowy filtr" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Usuń zaznaczony filtr" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Edytuj zaznaczony filtr" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Przywróć domyślne filtry" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filtr:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Szukaj" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Uaktualnij bazę danych przy starcie" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Aktualizuj co" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "godzin" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minut(y)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Dodaj ścieżkę do bazy danych\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Usuń zaznaczoną ścieżkę" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Dołącz" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Dodaj ścieżkę, aby ją wykluczyć z bazy danych" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Obsługuje symbole wieloznaczne. Wpisy muszą być oddzielone znakiem ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Wyklucz pliki:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "np.: \".git; *.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Wykluczenie ukrytych plików i katalogów" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Wyklucz" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Baza danych" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Włącz ciemny motyw:\n" "\n" "Jeśli zaznaczone, motyw systemowy jest proszony o zastosowanie ciemnego " "stylu aplikacji (tj. ciemnych elementów interfejsu użytkownika z jasnym " "tekstem) .\n" "\n" "Należy pamiętać, że nie wszystkie motywy systemowe zapewniają tak ciemny " "wariant, dlatego włączenie tego ustawienia może nie przynieść efektu." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Włącz dekoracje client-side:\n" "\n" "Jeśli opcja jest włączona, pozycja wyszukiwania i menu główne są wyświetlane " "na pasku tytułu okna.\n" "\n" "Jeśli wyłączone, menu główne jest wyświetlane jako pasek menu z wpisem " "wyszukiwania poniżej.\n" "Przypomina to bardziej tradycyjny układ interfejsu użytkownika i zajmuje " "trochę więcej miejsca." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Użyj jednostek binarnych zamiast jednostek dziesiętnych:\n" "\n" "To ustawienie kontroluje sposób wyświetlania rozmiarów plików.\n" "\n" "• Jednostki binarne: Dotyczy to binarnych przedrostków IEC (np. " "1 KiB = 1024 bajty) \n" "• Jednostki dziesiętne: dotyczy to dziesiętnych przedrostków SI " "(np. 1 kB = 1000 bajtów) " #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Pamiętaj rozmiar okna:\n" "\n" "Jeśli jest włączona, rozmiar okna z poprzedniej sesji zostanie przywrócony, " "kiedy ponownie otworzysz okno FSearch.\n" "\n" "Zauważ, że niektóre menedżery okien ignorują to żądanie i wymuszają, aby " "okno miało inny rozmiar." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Zachowanie po udanym otwarciu pliku:\n" "\n" "Po pomyślnym otwarciu pliku / katalogu można wykonać jedną z następujących " "czynności:\n" "\n" "• Nie rób nic: nic się nie dzieje.\n" "• Minimalizuj: Aktualnie wybrane okno FSearch zostaje " "zminimalizowane.\n" "• Zamknij: Zamknij FSearch.\n" "\n" "Możesz skonfigurować, czy te akcje mają być uruchamiane, gdy plik został " "otwarty za pomocą\n" "\n" "• skrótu klawiaturowego lub z menu i / lub\n" "• kliknięcia myszą " #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Podświetlaj wyszukiwane na liście wyników:\n" "\n" "Jeśli ta opcja jest włączona, wyszukiwane hasła będą podświetlone w widoku " "wyników. Na przykład, kiedy szukasz \"foo\", wszystkie wystąpienia foo w nazwach plików / katalogów zostaną wyróżnione pogrubionymi znakami:\n" "\n" " foo bar.txt\n" "plik. foo \n" "\n" "Działa to również w przypadku wyrażeń regularnych i wyrażeń wieloznacznych " "rozpoczynających się lub kończących gwiazdką. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Wyświetlaj podpowiedzi:\n" "\n" "Jeśli ta opcja jest włączona, widok wyników pokaże pełną ścieżkę do " "wybranego pliku / katalogu w małym oknie podpowiedzi." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Pokaż ikony w kolumnie Nazwa:\n" "\n" "Jeśli jest włączona, ikony plików / katalogów będą wyświetlane w kolumnie " "Nazwa." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Pamiętaj konfigurację kolumn:\n" "\n" "Jeśli jest włączona, konfiguracja kolumn widoku wyników z poprzedniej sesji " "zostanie przywrócona po otwarciu okna FSearch. Obejmuje to rozmiar i " "widoczność wszystkich kolumn." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Pamiętaj porządek sortowania:\n" "\n" "Jeśli jest włączona, porządek sortowania widoku wyników z poprzedniej sesji " "zostanie przywrócony po otwarciu okna FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Otwórz ścieżkę przez dwuklik w kolumnie ścieżka:\n" "\n" "Jeśli jest włączona, dwukrotne kliknięcie w kolumnie ścieżki otworzy wybraną " "ścieżkę." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Pojedyncze kliknięcie otwiera:\n" "\n" "Jeśli ta opcja jest włączona, pojedyncze kliknięcie otworzy wybrany plik / " "katalog. Jeśli chcesz wybrać plik / katalog tylko wtedy, gdy to ustawienie " "jest aktywne, musisz przytrzymać klawisz Ctrl podczas klikania " "pliku / katalogu." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Pokaż status indeksowania bazy danych:\n" "\n" "Jeśli jest włączona, aktualnie indeksowana ścieżka jest wyświetlana na pasku " "stanu." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Pokaż ostrzeżenie gdy:\n" "\n" "Jeśli jest włączona, okno dialogowe z ostrzeżeniem jest wyświetlane, gdy:\n" "\n" "• plik lub katalog nie otworzył się" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Wyszukij w ścieżce, gdy kwerenda zawiera separatory ścieżki:\n" "\n" "Jeśli ta opcja jest włączona, wyszukiwane hasła zawierające separatory " "ścieżek (np. \"/\") będą automatycznie dopasowywane do pełnej ścieżki pliku " "lub katalogu." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Rozróżniaj wielkość liter gdy zapytanie zawiera choć jedną wielką literę:" "\n" "\n" "Jeśli ta opcja jest włączona, wyszukiwane hasła zawierające co najmniej " "jedną wielką literę uruchamiają wyszukiwanie z uwzględnieniem wielkości " "liter. Oznacza to, że wyszukiwane hasło, takie jak Foo , będzie " "pasowało do FooBar.txt , ale nie do foobar.txt ." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ukryj wyniki gdy pole wyszukiwania jest puste:\n" "\n" "Jeśli jest włączona, żadne wyniki wyszukiwania nie są wyświetlane, gdy pole " "wyszukiwania jest puste.\n" "\n" "Jeśli jest wyłączona, wszystkie pliki i katalogi będą wyświetlane, gdy pole " "wyszukiwania jest puste." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Wyszukiwanie podczas pisania:\n" "\n" "Jeśli jest włączona, wyszukiwanie jest automatycznie aktualizowane po każdym " "naciśnięciu klawisza.\n" "\n" "Jeśli jest wyłączona, wyszukiwanie jest aktualizowane tylko po naciśnięciu " "klawisza Enter lub naciśnięciu przycisku wyszukiwania. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Uaktualnij bazę danych przy starcie:\n" "\n" "Jeśli jest włączona, baza danych będzie aktualizowana automatycznie w tle po " "uruchomieniu FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Included folders:\n" #| "\n" #| "This list contains all folders you want to include in the database.\n" #| "\n" #| "\t• Active: If enabled, the path will included in the database to " #| "be searched in.\n" #| "\t• Path: The full path to be included.\n" #| "\t• One Filesystem: If enabled, FSearch won't cross filesystem " #| "boundraries for this folder" msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Dołączone katalogi:\n" "\n" "Ta lista zawiera wszystkie katalogi, które chcesz dołączyć do bazy danych.\n" "\n" "• Aktywna: jeśli włączone, ścieżka zostanie dołączona do bazy " "danych\n" "i można będzie ją przeszukiwać.\n" "• Ścieżka: pełna ścieżka do dołączenia.\n" "• Jeden system plików Jeśli włączone, FSearch nie będzie zaglądał do " "innych systemów plików w tym katalogu" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Dodaj katalog do bazy danych:\n" "\n" "Ten przycisk otwiera okno dialogowe, w którym możesz wybrać katalog, który " "chcesz dołączyć do bazy danych." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Usuń zaznaczony wiersz:\n" "\n" "Spowoduje to usunięcie wybranego katalogu z listy dołączanych katalogów." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Wyklucz:\n" "\n" "Ta lista zawiera wszystkie katalogi, które chcesz wykluczyć z bazy danych.\n" "\n" "• Aktywna: jeśli włączone, ścieżka zostanie wykluczona z bazy " "danych\n" "i nie można będzie jej przeszukiwać.\n" "• Ścieżka: pełna ścieżka do wykluczenia." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Wyklucz katalog z bazy danych:\n" "\n" "Ten przycisk otwiera okno dialogowe, w którym możesz wybrać katalog, który " "chcesz wykluczyć z bazy danych." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Usuń zaznaczony wiersz:\n" "\n" "Spowoduje to usunięcie wybranego katalogu z listy wykluczonych katalogów." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Wyklucz pliki i katalogi z bazy danych:\n" "\n" "To jest rozdzielona średnikami lista plików (lub katalogów), które chcesz " "wykluczyć z bazy danych. Na przykład .git; .cache; *. swp wykluczy " "wszystkie pliki lub katalogi, które mają nazwę .git lub .cache " " lub kończą się na .swp ." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Wykluczenie ukrytych plików i katalogów:\n" "\n" "Jeśli ta opcja jest włączona, ukryte pliki i katalogizostaną wykluczone z " "bazy danych (tj. wszystkie pliki lub katalogi, które zaczynają się od " "kropki) ." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Najedź myszą na opcję, aby uzyskać szczegółowy opis tego co robi." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Cyklicznie uaktualniaj bazę danych w określonym odstępie czasu:\n" "\n" "Jeśli zaznaczone oraz FSearch jest uruchomiony, baza danych będzie " "cyklicznie aktualizowana w podamym odstępie czasowym.\n" "\n" "Jeśli chcesz aktualizować bazę danych w tle, nawet gdy FSearch nie jest " "uruchomiony, możesz użyć narzędzi takich jak cron lub timery systemd aby " "cyklicznie aktualizować bazę danych za pomocą komendy:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Uruchamiaj pliki .desktop:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filtry:\n" "\n" "To jest lista wszystkich dostępnych filtrów. Filtr to predefiniowane " "wyszukiwanie.\n" "\n" "\t• Nazwa: Unikalny i opisowy identyfikator filtra\n" "\t• Makro: wpisując makro, a następnie ':' możesz włączyć filtr na " "żądanie\n" "\t• Zapytanie: Ciąg wyszukiwania, po którym baza ma być odpytywana" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Dodaj nowy filtr:\n" "\n" "Ten przycisk otwiera okno dialogowe, w którym możesz edytować nowy filtr." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Usuń zaznaczony filtr:\n" "\n" "Spowoduje to usunięcie wybranego filtru." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Edytuj wybrany filtr:\n" "\n" "Ten przycisk otwiera okno dialogowe, w którym możesz edytować wybrany filtr." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Przywróć domyślne filtry:\n" "\n" "Ten przycisk przywraca domyślną konfigurację filtrów.\n" "\n" "⚠ Wszystkie filtry utworzone lub edytowane przez użytkownika zostaną " "utracone! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Zakończ za pomocą Escape:\n" "\n" "Jeśli włączone, FSearch kończy pracę gdy wciśniesz Escape - zamiast " "minimalizacji okna." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Pomoc" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Zaznacz katalog" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "Zaznacz" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Dodaj filtry" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Aktywna" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Ścieżka" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Jeden system plików" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nazwa" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Makro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Zapytanie" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d wynik" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d wyniki" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Odpytywanie…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Ładowanie…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Skanowanie…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Liczba wyników wyszukiwania" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 wyników" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Anuluj" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Indeksowanie:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Ilość zaznaczonych katalogów" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Ilość zaznaczonych plików" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Anuluj aktualizację bazy danych" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Ilość plików w bazie danych" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(puste)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Wyszukiwany ciąg zawiera separatory ścieżki.\n" "Wyszukiwanie w ścieżce zostało tymczasowo aktywowane." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASE" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Wyszukiwany ciąg zawiera separatory ścieżki.\n" "Wyszukiwanie w ścieżce zostało tymczasowo aktywowane." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ŚCIEŻKA" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Rozmiar" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Typ" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Rozszerzenie" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Data modyfikacji" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Sortowanie wg typu może zająć kilka sekund przy wielu wynikach.\n" "\n" "Ten porządek sortowania nie jest stały, zostanie zresetowany przy zmianie " "wyszukiwania." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch online" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Przekaż dotację" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Raporty o błędach i propozycje funkcjonalności" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "Sponsorzy GitHub" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nowe okno" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Uaktualnij bazę danych" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Szukaj w ścieżce" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Uwzględniaj wielkość liter" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Wyrażenia regularne" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Pokaż pasek stanu" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Pokaż filtr" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Pokaż przycisk Szukaj" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "O programie" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Zakończ" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Szukaj…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Wybierz filtr" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Na pewno chcesz otworzyć %d plik(i)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Otwieranie plików…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Na pewno chcesz usunąć %d plik(i)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Usuwanie plików…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Przenoszenie plików do kosza…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Coś poszło nie tak." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "Usuwanięto %d plik(ów)." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "%d plik(ów) przeniesiono do kosza." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "Baza danych musi być zaktualizowana zanim zmiany będą dla niej widoczne! To " "będzie naprawione w przyszłych wersjach." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Na pewno chcesz otworzyć okno właściwości pliku %d?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Otwieranie okna właściwości plików…" #: src/menus.ui:6 msgid "_File" msgstr "_Plik" #: src/menus.ui:9 msgid "New Window" msgstr "Nowe okno" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Otwórz" #: src/menus.ui:21 msgid "Open Folder" msgstr "Otwórz katalog" #: src/menus.ui:29 msgid "Update Database" msgstr "Uaktualnij bazę danych" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Przerwij Aktualizację" #: src/menus.ui:42 msgid "Close Window" msgstr "Zamknij okno" #: src/menus.ui:54 msgid "_Edit" msgstr "_Edycja" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopiuj" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Wy_tnij" #: src/menus.ui:69 msgid "Select All" msgstr "Zaznacz wszystko" #: src/menus.ui:74 msgid "Deselect All" msgstr "Odznacz wszystko" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Odwróć zaznaczenie" #: src/menus.ui:92 msgid "_View" msgstr "_Widok" #: src/menus.ui:109 msgid "_Search" msgstr "_Szukaj" #: src/menus.ui:126 msgid "_Help" msgstr "_Pomoc" #: src/menus.ui:171 msgid "Open _With" msgstr "Otwórz za pomocą" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Otwórz katalog" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Kopiuj jako tekst" #: src/menus.ui:217 msgid "Path + Name" msgstr "Ścieżka + Nazwa" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Przenieś do kosza" #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Anuluj aktualizacja bazy danych\n" #~ " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Wybierz Filtr\n" #~ " " #~ msgid "" #~ "Search\n" #~ " " #~ msgstr "" #~ "Szukaj\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Dodaj ścieżkę do bazy danych\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Dodaj ścieżkę do bazy danych\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Dodaj ścieżkę do bazy danych\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Dodaj ścieżkę do bazy danych\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Dodaj ścieżkę do bazy danych\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Dodaj katalog do bazy danych:\n" #~ "\n" #~ " Ten przycisk otwiera okno dialogowe, w którym " #~ "możesz wybrać katalog, który chcesz uwzględnić w bazie danych do " #~ "wyszukiwania.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Wyszukiwany ciąg zawiera duże litery.\n" #~ "Dopasowane wielkości liter zostało tymczasowo aktywowane." #~ msgid "page0" #~ msgstr "page0" #~ msgid "page1" #~ msgstr "page1" #~ msgid "page2" #~ msgstr "page2" #~ msgid "page30" #~ msgstr "page30" #~ msgid "page18" #~ msgstr "page18" #~ msgid "page31" #~ msgstr "page31" #~ msgid "page32" #~ msgstr "page32" #~ msgid "page33" #~ msgstr "page33" #~ msgid "page34" #~ msgstr "page34" #~ msgid "page35" #~ msgstr "page35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Dołącz katalogi:\n" #~ "\n" #~ " Ta lista zawiera wszystkie katalogi, które " #~ "chcesz uwzględnić w bazie danych.\n" #~ "\n" #~ " • Aktywna: jeśli włączone, ścieżka " #~ "zostanie uwzględniona w bazie danych, w której ma być przeszukiwana.\n" #~ " • Ścieżka: pełna ścieżka do " #~ "uwzględnienia.\n" #~ " • Aktualizacja: To ustawienie jest " #~ "przydatne, jeśli chcesz wykluczyć pewne ścieżki\n" #~ " z aktualizacji (np. ścieżka do wolnego " #~ "dysku USB na którym nieczęsto się coś zmienia) \n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Usuń zaznaczony wiersz:\n" #~ "\n" #~ " Spowoduje to usunięcie wybranego katalogu z listy " #~ "dołączonych katalogów.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Czy chcesz aby okno pozostało widoczne?" #~ msgid "_Copy Filepath" #~ msgstr "_Kopiuj ścieżkę" #~ msgid "Building lookup list…" #~ msgstr "Budowanie listy wyszukiwania…" #~ msgid "Update" #~ msgstr "Aktualizacja" #~ msgid "≥%'d Items" #~ msgstr "≥%'d wyniki" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Ostatnia aktualizacja: %Y-%m-%d % H: %M" #~ msgid "_Delete" #~ msgstr "_Usuń" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Ogranicz liczbę wyników:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Ogranicz liczbę wyników:\n" #~ "\n" #~ "Jeśli jest włączona, liczba wyników wyszukiwania będzie ograniczona do " #~ "określonej liczby.\n" #~ "\n" #~ "Wyświetlanie wielu wyników ma znaczący wpływ na wydajność, zwłaszcza gdy " #~ "lista nie jest posortowana według nazwy. Zostanie to poprawione w " #~ "przyszłych wersjach." #~ msgid "Background tasks are active." #~ msgstr "Zadania w tle są wykonywane." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Zamknięcie okna nie jest możliwe w tej chwili.\n" #~ "Poczekaj chwilę i spróbuj ponownie." #~ msgid "label" #~ msgstr "etykieta" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Przejdź do Edycja → Preferencje → Baza danych i dodaj jakieś " #~ "lokalizacje" #~ msgid "page4" #~ msgstr "page4" #~ msgid "page6" #~ msgstr "page6" #~ msgid "page7" #~ msgstr "page7" #~ msgid "page8" #~ msgstr "page8" #~ msgid "page9" #~ msgstr "page9" #~ msgid "page10" #~ msgstr "page10" #~ msgid "page11" #~ msgstr "page11" #~ msgid "page12" #~ msgstr "page12" #~ msgid "page13" #~ msgstr "page13" #~ msgid "page14" #~ msgstr "page14" #~ msgid "page15" #~ msgstr "page15" #~ msgid "page16" #~ msgstr "page16" #~ msgid "page17" #~ msgstr "page17" #~ msgid "page19" #~ msgstr "page19" #~ msgid "page20" #~ msgstr "page20" #~ msgid "page21" #~ msgstr "page21" #~ msgid "page22" #~ msgstr "page22" #~ msgid "page23" #~ msgstr "page23" #~ msgid "page24" #~ msgstr "page24" #~ msgid "page25" #~ msgstr "page25" #~ msgid "page26" #~ msgstr "page26" #~ msgid "page27" #~ msgstr "page27" #~ msgid "page28" #~ msgstr "page28" #~ msgid "page29" #~ msgstr "page29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Kopiuj" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Włącz ciemny motyw może nie zadziałać.\n" #~ "Niektóre platformy nie wspierają ciemnych motywów, a inne zawsze ich " #~ "używają domyślnie." #~ msgid "Add…" #~ msgstr "Dodaj…" #~ msgid "Remove" #~ msgstr "Usuń" #~ msgid "Follow symbolic links" #~ msgstr "Podążaj za dowiązaniami symbolicznymi" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Włącz ciemny motyw\" może nie przynieść efektu,\n" #~ "ponieważ nie każdy temat GTK + udostępnia wersję ciemną." #~ msgid "Enable menubar" #~ msgstr "Pokaż pasek menu" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "INFO: Włączenie/Wyłączenie paska menu wymaga restartu FSearch.\n" #~ msgid "Open Containing Folder" #~ msgstr "Otwórz katalog" #~ msgid "Open File(s) in File Manager" #~ msgstr "Otwórz pliki w Menedżerze plików" #~ msgid "Move to Trash" #~ msgstr "Usuń" #~ msgid "Show Menubar" #~ msgstr "Pokaż pasek menu" #~ msgid "Enable" #~ msgstr "Włącz" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Ładowania bazy danych…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Aktualizowanie bazy danych..." #~ msgid "Search..." #~ msgstr "Szukaj..." #~ msgid "Add" #~ msgstr "Dodaj" #~ msgid "files?" #~ msgstr "pliki?" #~ msgid "C_ut" #~ msgstr "C_ut" fsearch-0.2.3/po/pt.po000066400000000000000000001570331446344336300145530ustar00rootroot00000000000000# Portuguese translations for FSearch package # Portuguese translation for FSearch. # Copyright (C) 2016 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-07-14 01:18+0000\n" "Last-Translator: Ricardo Simões \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Um utilitário de busca de ficheiros, focado em desempenho e recursos " "avançados" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "busca;fsearch;arquivos;pastas;músicas;vídeos;documentos;encontrar;ferramenta;" "everything;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Uma aplicação de pesquisa em modo gráfico" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "O Fsearch ajuda a encontrar ficheiros e pastas da maneira mais fácil e " "rápida. Escreva alguma letras e os resultados surgem quase de imediato." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Existem muitas características que tornam a pesquisa o mais eficiente e " "poderosa possível, tais como:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignorar a capitalização (ex: pesquisar por \"fsearch\" é o mesmo que " "pesquisar por \"FSearch\")" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Expressões regulares" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Suporte a wildcards" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filtro (ex: pesquisar apenas ficheiros áudio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Excluir determinados ficheiros e pastas" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Organizar rapidamente por nome, caminho, tamanho, tempo de modificação e " "extensão" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Nota: Devido ao sandboxing do Flatpak, o FSearch não pode encontrar todos os " "ficheiros no seu sistema." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Interface de Utilizador padrão" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Um modelo que segue de perto as normas GNOME" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Versão inicial." #: src/fsearch.c:243 msgid "Saving…" msgstr "A gravar…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Silvério Santos" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Um utilitário de busca focado em performance e funções avançadas" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Abre uma nova janela" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Exibir preferências da aplicação" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Define o padrão de pesquisa" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Atualiza a base de dados e sai" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Mostra informações da versão e sai" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Carregando as pastas…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "A carregar ficheiros…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ordenando…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Abre uma nova janela" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Falhou ao abrir o ficheiro" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Exibir preferências da aplicação" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Pasta" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tipo desconhecido" #: src/fsearch_filter.c:111 msgid "All" msgstr "Tudo" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Pastas" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Ficheiros" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Aplicação" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arquivos" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Áudio" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documentos" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Fotos" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Vídeos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "Cancelar" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Nome" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Procurar no Caminho" #: src/fsearch_filter_editor.ui:87 #, fuzzy #| msgid "Regular expressions" msgid "Enable regular expressions" msgstr "Expressões regulares" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Coincidir Capitalização" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Propriedades…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Outra aplicação…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Base de Dados Vazia" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Adicionar pastas" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Carregando a base de dados…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Isto pode demorar um pouco." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "A atualizar a base de dados…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Isto pode demorar um bocado." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Consulta Vazia" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Carregar em Ctrl + F e começar a escrever" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Não foram encontrados resultados" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Tentar uma pesquisa diferente" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "A ordenar os resultados…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferências" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Ativar tema escuro" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Ativar decorações do lado do cliente (necessita reinicio da aplicação)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Use unidades binárias em vez de unidades decimais" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Lembrar tamanho da janela" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "com atalhos de teclado ou entradas de menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "com clique duplo" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Comportamento após abrir ficheiro com sucesso:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nada" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimizar" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Fechar" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Geral:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Exibir termos de pesquisa destacados" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Mostrar dicas" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Mostrar ícones no nome da coluna" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Lembrar configuração da colina" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Lembrar ordem de classificação" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Abrir diretório com clique duplo na coluna de caminho" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Abrir com clique único" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Resultados:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Mostrar status de indexação da base de dados" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Barra de Estado:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Mostrar caixa de diálogo de aviso quando:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "Falhar ao abrir arquivo/pasta" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Caixas de diálogo:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interface" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Procurar no caminho quando a consulta contém separadores de caminho" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Procure enquanto escreve" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Esconder resultados quando a pesquisa está vazia" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Coincidir maiúsculas e minúsculas quando a pesquisa contém pelo menos um " "caractere maiúsculo" #: src/fsearch_preferences.ui:769 #, fuzzy #| msgid "Add folders" msgid "Add new filter" msgstr "Adicionar pastas" #: src/fsearch_preferences.ui:785 #, fuzzy #| msgid "Remove selected path" msgid "Remove selected filter" msgstr "Remover caminho selecionado" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Number of selected files" msgid "Edit selected filter" msgstr "Quantidade de ficheiros selecionados" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Mostrar Filtro" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Pesquisar" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Atualizar base de dados ao iniciar" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Atualizar a cada" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "hora(s) e" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minuto(s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Adicionar o caminho a ser incluído na base de dados\n" "…………………\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Remover caminho selecionado" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Incluir" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Adicionar caminho para ser excluído da base de dados" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Suporta coringas. Entradas múltiplas devem ser separadas por ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Excluir ficheiros:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "Ex. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Excluir ficheiros e pastas escondidos" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Excluir" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de Dados" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Ativar tema escuro:\n" "\n" "Se ativado, o tema do sistema é solicitado a usar um estilo mais escuro para " "a aplicação (i.e. elementos de IU escuros em texto claro).\n" "\n" "Observe que nem todos os temas do sistema fornecem uma variante mais escura, " "portanto, ativar essa configuração pode não surtir efeito." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Ativar decorações do lado do cliente:\n" "\n" "Se ativado, o termo de busca e o menu principal serão exibidos na barra de " "título da janela.\n" "\n" "Se desativado, o menu principal será exibido como uma barra de menu com o " "termo de busca abaixo dele.\n" "Isso se assemelha a um layout mais tradicional da IU e ocupa um pouco mais " "de espaço." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Usar unidades binárias em vez de unidades decimais: \n" "\n" "Esta configuração controla como os tamanhos dos ficheiros são exibidos.\n" "\n" "\t• Unidades binárias: refere-se aos prefixos IEC binários (por " "exemplo, 1 KiB = 1024 bytes)\n" "\t• Unidades decimais: refere-se aos prefixos SI decimais (por " "exemplo, 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Lembrar o tamanho da janela:\n" "\n" "Se ativado, o tamanho da janela da sessão anterior será restaurado quando " "abrir uma janela FSearch.\n" "\n" "Observe que alguns gerenciadores de janela ignoram esta solicitação e forçam " "a janela a ter um tamanho diferente." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t\tNote that not all systems allow windows to be minimized.\n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Comportamento após abrir um ficheiro com sucesso:\n" "\n" "Quando um ficheiro/pasta for aberto com sucesso, uma das seguintes ações " "pode ser realizada:\n" "\t• Nada: Nada acontece.\n" "\t• Minimizar: A janela atualmente selecionada do FSearch será " "minimizada. \n" "\t\tAviso, nem todos os sistemas permitem que as janelas sejam minimizadas.\n" "\t• Fechar: Sair do FSearch.\n" "\n" "Pode definir se essas ações deveriam ser executadas quando o ficheiro for " "aberto com\n" "\t• atalhos de teclado ou entradas de menu e/ou\n" "\t• clique do mouse" #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Mostrar termos de busca destacados:\n" "\n" "Se ativado, os termos de busca serão destacados nos resultados. Por exemplo, " "quando procura por \"foo\" todas as ocorrências de nome foo em " "ficheiros/pastas serão destacadas em negrito:\n" "\n" "\t\tfoobar.txt\n" "\t\tfile.foo\n" "\n" "Isto também aplica para expressões regulares e expressões com caracteres " "especiais que começam ou terminam com um asterisco. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Mostrar dicas de contexto:\n" "\n" "Se ativado, os resultados também mostrarão o caminho completo do ficheiro/" "pasta em questão numa pequena janela dedicada." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Mostrar ícones na coluna de nome:\n" "\n" "Se ativado, os ícones de ficheiros/pastas serão mostrados na coluna de nome." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Lembrar da configuração da coluna:\n" "\n" "Se ativado, a configuração da coluna da exibição de resultados da sessão " "anterior será restaurada quando abrir uma janela FSearch. Isso inclui o " "tamanho e a visibilidade de todas as colunas." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Lembrar da ordem de classificação:\n" "\n" "Se ativada, a ordem de classificação da exibição de resultados da sessão " "anterior será restaurada quando abrir uma janela FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Abrir o caminho com um clique duplo na coluna de caminho:\n" "\n" "Se ativado, um clique duplo na coluna de caminho abrirá o caminho " "selecionado." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Clique único para abrir:\n" "\n" "Se ativado, um clique único abrirá o ficheiro/pasta selecionado. Se quiser " "apenas selecionar um ficheiro/pasta enquanto esta configuração estiver " "ativa, precisará segurar o Ctrl e ao mesmo tempo clicar no ficheiro/" "pasta." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Mostrar status de indexação da base de dados:\n" "\n" "Se ativado, o caminho que está sendo indexado atualmente é exibido na barra " "de status." #: src/fsearch_preferences.ui:1550 #, fuzzy #| msgid "" #| "Show warning dialogs:\n" #| "\n" #| "If enabled, a warning dialog is displayed when:\n" #| "\n" #| "\t• a file or folder failed to open\n" msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Mostrar diálogo de aviso:\n" "\n" "Se ativado, um diálogo de aviso será exibido quando:\n" "\n" "\t• um ficheiro ou pasta falhou ao abrir\n" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Pesquisar no caminho quando a consulta contém separadores de caminho:\n" "\n" "Se ativado, os termos de busca contendo separadores de caminho (ou seja, \"/" "\") serão automaticamente comparados com o caminho completo de um ficheiro " "ou pasta." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Coincidir maiúsculas e minúsculas quando a busca contém pelo menos um " "caractere maiúsculo:\n" "\n" "Se ativado, os termos de busca contendo pelo menos um caractere em " "maiúsculas irão acionar uma busca sensível a maiúsculas e minúsculas. Isto " "significa que um termo de busca como Foo irá corresponder ao " "FooBar.txt mas não ao foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ocultar resultados quando a busca está vazia:\n" "\n" "Se ativado, nenhum resultado de busca será exibido quando a entrada de busca " "estiver vazia.\n" "\n" "Se desativado, todos os ficheiros e pastas serão exibidos quando a entrada " "de busca estiver vazia." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Pesquisar enquanto digita:\n" "\n" "Se ativado, a pesquisa é atualizada automaticamente a cada pressionamento de " "tecla.\n" "\n" "Se desativado, a pesquisa só é atualizada quando pressiona Enter ou " "pressiona o botão de pesquisa. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Atualizar base de dados ao iniciar:\n" "\n" "Se ativado, a base de dados será atualizada automaticamente em segundo plano " "quando iniciar o FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Pastas excluídas:\n" "\n" "Esta lista contém todas as pastas que deseja excluir da base de dados.\n" "\n" "\t• Ativo: Se ativado, o caminho será excluído da base de dados\n" "\t\t e não pode ser procurado.\n" "\t• Caminho: O caminho completo a ser excluído." #: src/fsearch_preferences.ui:1677 #, fuzzy #| msgid "" #| "Exclude folder from database:\n" #| "\n" #| "This button opens a dialog where you can select a folder you want to " #| "exclude from the database." msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Excluir pasta da base de dados:\n" "\n" "Este botão abre um diálogo onde pode selecionar uma pasta que deseja excluir " "da base de dados." #: src/fsearch_preferences.ui:1694 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| "This removes the selected folder from the list of excluded folders." msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Remover linha selecionada:\n" "\n" "Isto remove a pasta selecionada da lista de pastas excluídas." #: src/fsearch_preferences.ui:1711 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Pastas excluídas:\n" "\n" "Esta lista contém todas as pastas que deseja excluir da base de dados.\n" "\n" "\t• Ativo: Se ativado, o caminho será excluído da base de dados\n" "\t\t e não pode ser procurado.\n" "\t• Caminho: O caminho completo a ser excluído." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Excluir pasta da base de dados:\n" "\n" "Este botão abre um diálogo onde pode selecionar uma pasta que deseja excluir " "da base de dados." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Remover linha selecionada:\n" "\n" "Isto remove a pasta selecionada da lista de pastas excluídas." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Excluir ficheiros e pastas da base de dados:\n" "\n" "Esta é uma lista de ficheiros (ou pastas) separada por ponto-e-vírgula que " "deseja excluir da base de dados. Por examplo .git;.cache;*.swp " "excluirá todos os ficheiros ou pastas tipo .git ou .cache ou " "que terminar com .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Excluir ficheiros e pastas ocultos:\n" "\n" "Se ativado, ficheiros e pastas ocultos serão excluídos da base de dados " "(ou seja, todos os ficheiros ou pastas que começam com um caractere de " "ponto)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Focar uma definição para obter uma descrição detalhada dela." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Atualizar periodicamente a base de dados num intervalo de tempo:\n" "\n" "Se ativado, desde que o FSearch estiver em execução, a base de dados será " "atualizada periodicamente com o intervalo de tempo definido.\n" "\n" "Se quiser atualizar a base de dados em segundo plano, mesmo quando o FSearch " "não estiver em execução, precisa usar ferramentas como cron ou timer do " "systemd para acionar periodicamente a atualização via:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Adicionar pasta a base de dados:\n" "\n" " Este botão abre uma caixa de diálogo onde pode " "selecionar uma pasta que deseja incluir na base de dados para\n" " pesquisa.\n" " " #: src/fsearch_preferences.ui:1888 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| " This removes the selected folder from the list of " #| "included folders.\n" #| " " msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Remover linha selecionada:\n" "\n" " Isso remove a pasta selecionada da lista de pastas " "incluídas.\n" " " #: src/fsearch_preferences.ui:1905 #, fuzzy #| msgid "" #| "Add folder to database:\n" #| "\n" #| " This button opens a dialog where you can select a " #| "folder you want to include in the database for\n" #| " searching.\n" #| " " msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Adicionar pasta a base de dados:\n" "\n" " Este botão abre uma caixa de diálogo onde pode " "selecionar uma pasta que deseja incluir na base de dados para\n" " pesquisa.\n" " " #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Ajuda" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Selecione uma pasta" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Selecionar" #: src/fsearch_preferences_ui.c:326 #, fuzzy #| msgid "Add folders" msgid "Add filter" msgstr "Adicionar pastas" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Ativo" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Caminho" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Um sistema de ficheiros" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nome" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Consulta Vazia" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d Itens" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Itens" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "A consultar…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "A carregar…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "A pesquisar…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Número de Resultados de Pesquisa" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Itens" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "Cancelar" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Índice:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Quantidade de pastas selecionadas" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Quantidade de ficheiros selecionados" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Cancelar atualização da base de dados" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Quantidade de itens na base de dados" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(vazio)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Pesquisar por termos que contenham separadores de caminho.\n" "Pesquisar no Caminho foi temporariamente ativado por este termo." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "CASO" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Pesquisar por termos que contenham separadores de caminho.\n" "Pesquisar no Caminho foi temporariamente ativado por este termo." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "CAMINHO" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tamanho" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipo" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extensão" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Data de Modificação" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can be very slow with many results and it can't be " #| "aborted.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Ordenar por Tipo pode ser lento, se tiver muitos resultados e não " "pode ser abortado.\n" "\n" "Esta ordenação não é persistente e será resetada quando o termo pesquisado " "mudar." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nova janela" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Atualizar base de dados" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Procurar no Caminho" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Coincidir Capitalização" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Ativar RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Mostrar Barra de Estado" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Mostrar Filtro" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Mostrar Botão de Pesquisa" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Sobre" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Sair" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Pesquisar…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Selecionar um filtro" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Deseja mesmo abrir %d ficheiro(s)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "A abrir ficheiro(s)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Deseja mesmo remover %d ficheiro(s)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "A apagar ficheiros…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "A mover ficheiros para o lixo…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "A apagar ficheiros…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "A mover ficheiros para o lixo…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Realmente quer abrir janela de propriedade do ficheiro %d?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Abrindo propriedade do ficheiro…" #: src/menus.ui:6 msgid "_File" msgstr "_Ficheiro" #: src/menus.ui:9 msgid "New Window" msgstr "Nova Janela" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Abrir" #: src/menus.ui:21 msgid "Open Folder" msgstr "Abrir Pasta" #: src/menus.ui:29 msgid "Update Database" msgstr "Atualizar Base de Dados" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Cancelar atualização" #: src/menus.ui:42 msgid "Close Window" msgstr "Fechar janela" #: src/menus.ui:54 msgid "_Edit" msgstr "_Editar" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copiar" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Cor_tar" #: src/menus.ui:69 msgid "Select All" msgstr "Selecionar tudo" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desmarcar Tudo" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverter Seleção" #: src/menus.ui:92 msgid "_View" msgstr "_Ver" #: src/menus.ui:109 msgid "_Search" msgstr "_Pesquisar" #: src/menus.ui:126 msgid "_Help" msgstr "_Ajuda" #: src/menus.ui:171 msgid "Open _With" msgstr "Abrir _Como" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Abrir Pasta" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copiar como Texto" #: src/menus.ui:217 msgid "Path + Name" msgstr "Caminho + Nome" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Mover para o _Lixo" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Adicionar o caminho a ser incluído na base de dados\n" #~ "…………………\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Adicionar pasta a base de dados:\n" #~ "\n" #~ " Este botão abre uma caixa de diálogo onde pode " #~ "selecionar uma pasta que deseja incluir na base de dados para\n" #~ " pesquisa.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Pesquisar termos que contenham maiúsculas.\n" #~ "Coincidir Capitalização foi temporariamente ativado por este termo." #~ msgid "page0" #~ msgstr "Página 0" #~ msgid "page1" #~ msgstr "Página 1" #~ msgid "page2" #~ msgstr "página2" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "Página 0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "Página 1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "Página 0" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Pastas incluídas:\n" #~ "\n" #~ " Esta lista contém todas as pastas que deseja " #~ "incluir na base de dados.\n" #~ "\n" #~ " • Ativo: Se ativado, o caminho será incluído " #~ "na base de dados a ser pesquisado.\n" #~ " • Caminho: O caminho completo a ser " #~ "incluído.\n" #~ " • Atualizar: Esta configuração é útil se " #~ "quiser excluir certos caminhos de\n" #~ " ser\n" #~ " atualizados (por exemplo, um caminho de USB " #~ "antigo que não muda conteúdo com freqüência)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Remover linha selecionada:\n" #~ "\n" #~ " Isso remove a pasta selecionada da lista de pastas " #~ "incluídas.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Você quer manter a janela aberta?" #~ msgid "_Copy Filepath" #~ msgstr "_Copiar Caminho do Ficheiro" #~ msgid "Update" #~ msgstr "Atualizar" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d Itens" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Última atualização: %H:%M %d/%m/%Y" #~ msgid "_Delete" #~ msgstr "_Eliminar" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Limitar número de resultados a:" #~ msgid "Background tasks are active." #~ msgstr "Tarefas em segundo plano estão ativas." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Não é possível fechar a janela agora.\n" #~ "Por favor aguarde um momento e depois tente novamente." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Ir a Editar → Preferências → Base de Dados e adicionar algumas " #~ "localizações" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "Página 0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "Página 1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "Página 1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "Página 0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "Página 1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "Página 0" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Copiar" #~ msgid "Add…" #~ msgstr "Adicionar…" #~ msgid "Remove" #~ msgstr "Remover" #~ msgid "Follow symbolic links" #~ msgstr "Seguir ligações simbólicas" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Ativar tema escuro\" pode não surtir efeito,\n" #~ "já que nem todos os temas GTK+ disponibilizam versão escura." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Ativar RegEx" #~ msgid "Open Containing Folder" #~ msgstr "Abrir Pasta de Conteúdo" #~ msgid "Open File(s) in File Manager" #~ msgstr "Abrir ficheiro(s) no Gestor de Ficheiros" #~ msgid "Move to Trash" #~ msgstr "Mover para o Lixo" #~ msgid "Show Menubar" #~ msgstr "Mostrar Barra de Menu" #, fuzzy #~ msgid "Enable" #~ msgstr "Ativar RegEx" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "Carregando a base de dados…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "A atualizar a Base de Dados..." #~ msgid "Search..." #~ msgstr "Pesquisar..." #~ msgid "Add" #~ msgstr "Adicionar" #~ msgid "files?" #~ msgstr "Arquivos?" #~ msgid "C_ut" #~ msgstr "C_ortar" #~ msgid "Selected Folder and Files" #~ msgstr "Pastas e Ficheiros Selecionados" fsearch-0.2.3/po/pt_BR.po000066400000000000000000001642731446344336300151420ustar00rootroot00000000000000# Tradução para protuguês brasileiro efetuada por Gustavo Henrique Machado da Silva (www.linkedin.com/in/gustavohmsilva) # Embora o software original possa não possuir as mesmas licenças, a tradução produzida por mim está protegida sobre o # Creative Commons, Attribution-ShareAlike 4.0 International # Contate-me via email no endereço gustavohmsilva@member.fsf.org # # Translation to brazilian portuguese done by Gustavo Henrique Machado da Silva (www.linkedin.com/in/gustavohmsilva) # Even though this software may not share the same licenses, the translation produced by me is protected under # Creative commons, Attribution-ShareAlike 4.0 International # You can contact me over email on gustavohmsilva@member.fsf.org # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-03-28 13:27+0000\n" "Last-Translator: Gustavo Costa \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.12-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Um utilitário de busca de arquivos focado em desempenho e recursos avançados" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "busca;fsearch;arquivos;pastas;músicas;vídeos;documentos;encontrar;ferramenta;" "everything;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Software de busca de arquivos com interface gráfica" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch ajuda a encontrar arquivos e pastas de maneira fácil e rápida. Basta " "digitar algumas letras e os resultados da busca aparecerão quase " "instantaneamente." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Existem muitos recursos que tornam a pesquisa o mais eficiente e poderosa " "possível. Tais como:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ignorar maiúsculas e minúsculas (por exemplo, a busca por \"fsearch\" também " "corresponderá a \"FSearch\")" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Expressões regulares" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Suporte a caractere curinga" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Suporte a filtro (por exemplo, pesquisa apenas por arquivos de áudio)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Excluir certos arquivos e pastas" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Classificação rápida por nome, localização, tamanho, tempo de modificação e " "extensão" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Aviso: devido ao isolamento de processos do Flatpak, FSearch não consegue " "encontrar todos os arquivos em seu sistema." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "O layout padrão da interface de usuário" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Um layout mais semelhante ao GNOME HIGs" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Lançamento inicial." #: src/fsearch.c:243 msgid "Saving…" msgstr "Salvando…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" "Atílio Antônio\n" "inkhorn\n" "Gustavo Costa " #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Um utilitário de busca focado em desempenho e recursos avançados" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Abre uma nova janela" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Mostra as preferências" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Define o padrão de pesquisa" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Atualiza a base de dados e sai" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Mostra informações da versão e sai" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Carregando as pastas…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Carregando os arquivos…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Ordenando…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Iniciar arquivos desktop" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Iniciar arquivos desktop" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Abre uma nova janela" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Falha ao abrir arquivo" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Iniciar arquivos desktop" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Iniciar arquivos desktop" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Mostra as preferências" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Iniciar arquivos desktop" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Falha ao abrir:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Pasta" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Tipo desconhecido" #: src/fsearch_filter.c:111 msgid "All" msgstr "Tudo" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Pastas" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Arquivos" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Aplicações" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arquivos compactados" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Áudios" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Documentos" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Fotos" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Vídeos" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "Cancelar" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_OK" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Editar filtro" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Nome:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "O nome exclusivo deste filtro" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Nome do filtro exclusivo" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Pesquisar no caminho" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Habilitar expressões regulares" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Coincidir maiúsculas e minúsculas" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Consulta:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Macro:" #: src/fsearch_filter_editor.ui:171 #, fuzzy #| msgid "" #| "The macro for this filter. A macro allows you to\n" #| " access this filter from the search entry by " #| "typing its text followed by ':'\n" #| " " msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "A macro para este filtro. Uma macro permite\n" " acessar este filtro a partir da entrada de " "pesquisa digitando seu texto seguido de ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Propriedades…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Outro aplicativo…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Base de dados vazia" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Adicionar pastas" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Carregando a base de dados…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Isso não vai demorar muito." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Atualizando a base de dados…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Isso pode demorar um pouco." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Consulta vazia" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Pressione Ctrl + F e comece a digitar" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nenhum resultado encontrado" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Tente uma pesquisa diferente" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Ordenando os resultados…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Preferências" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Habilitar tema escuro" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Habilitar decorações do lado do cliente (requer reinicialização)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Usar unidades binárias ao invés de decimais" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Lembrar tamanho da janela" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "com atalhos de teclado ou entradas de menu" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "com duplo clique" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Comportamento após abrir um arquivo com sucesso:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Nenhum" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Minimizar" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Fechar" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Geral:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Exibir termos de busca destacados" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Mostrar dicas de contexto" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Mostrar ícones na coluna nome" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Lembrar configuração da coluna" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Lembrar ordenação" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Abrir caminho com duplo clique na coluna caminho" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Clique único para abrir" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Iniciar arquivos desktop" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Resultados:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Mostrar status de indexação da base de dados" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Barra de status:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Mostrar diálogos de aviso quando:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "erro ao abrir arquivo/pasta" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Diálogos:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Interface" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Pesquisar no caminho quando a consulta contém separadores de caminho" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Pesquisar enquanto digita" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Esconder resultados quando a pesquisa estiver vazia" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Coincidir maiúsculas e minúsculas quando a pesquisa contém pelo menos um " "caractere maiúsculo" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Adicionar novo filtro" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Remover o filtro selecionado" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Editar filtro selecionado" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Restaurar filtros padrão" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filtro:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Pesquisar" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Atualizar base de dados ao iniciar" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Atualizar a cada" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "hora(s) e" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "minuto(s)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Adicionar caminho para ser incluído na base de dados\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Remover o caminho selecionado" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Incluir" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Adicionar caminho para ser excluído da base de dados" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Suporta caractere curinga. Múltiplas entradas precisam ser separadas por ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Excluir arquivos:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "exemplo: \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Excluir arquivos e pastas ocultas" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Excluir" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Base de dados" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Habilitar tema escuro:\n" "\n" "Se habilitado, o tema do sistema é solicitado a usar um estilo mais escuro " "para o aplicativo (i.e. elementos de IU escuros em texto claro).\n" "\n" "Observe que nem todos os temas do sistema fornecem uma variante mais escura, " "portanto, habilitar essa configuração pode não surtir efeito." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Habilitar decorações do lado do cliente:\n" "\n" "Se habilitado, o termo de busca e o menu principal serão exibidos na barra " "de título da janela.\n" "\n" "Se desabilitado, o menu principal será exibido como uma barra de menu com o " "termo de busca abaixo dele.\n" "Isso se assemelha a um layout mais tradicional da IU e ocupa um pouco mais " "de espaço." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Usar unidades binárias ao invés de unidades decimais: \n" "\n" "Esta configuração controla como os tamanhos dos arquivos são exibidos.\n" "\n" "\t• Unidades binárias: refere-se aos prefixos IEC binários (por " "exemplo, 1 KiB = 1024 bytes)\n" "\t• Unidades decimais: refere-se aos prefixos SI decimais (por " "exemplo, 1 kB = 1000 bytes)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Lembrar do tamanho da janela:\n" "\n" "Se habilitado, o tamanho da janela da sessão anterior será restaurado quando " "você abrir uma janela FSearch.\n" "\n" "Observe que alguns gerenciadores de janela ignoram esta solicitação e forçam " "a janela a ter um tamanho diferente." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t\tNote that not all systems allow windows to be minimized.\n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Comportamento após abrir um arquivo com sucesso:\n" "\n" "Quando um arquivo/pasta for aberto com sucesso, uma das seguintes ações pode " "ser realizada:\n" "\t• Nada: Nada acontece.\n" "\t• Minimizar: A janela atualmente selecionada do FSearch será " "minimizada. \n" "\t\tAviso, nem todos os sistemas permitem que as janelas sejam minimizadas.\n" "\t• Fechar: Sair do FSearch.\n" "\n" "Você pode definir se essas ações deveriam ser executadas quando o arquivo " "for aberto com\n" "\t• atalhos de teclado ou entradas de menu e/ou\n" "\t• clique do mouse" #: src/fsearch_preferences.ui:1409 #, fuzzy #| msgid "" #| "Show highlighted search terms:\n" #| "\n" #| "If enabled, the search terms will be highlighted in the results view. For " #| "example when you search for \"foo\" all appearances of foo in file/" #| "folder names will be highlighted with bold characters:\n" #| "\n" #| "\t\tfoobar.txt\n" #| "\t\tfile.foo\n" #| "\n" #| "This also works for regular expressions and wildcard expressions starting " #| "or ending with an asterisk. " msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Mostrar termos de busca destacados:\n" "\n" "Se habilitado, os termos de busca serão destacados nos resultados. Por " "exemplo, quando você procura por \"foo\" todas as ocorrências de nome " "foo em arquivos/pastas serão destacadas em negrito:\n" "\n" "\t\tfoobar.txt\n" "\t\tfile.foo\n" "\n" "Isto também aplica para expressões regulares e expressões com caracteres " "especiais que começam ou terminam com um asterisco. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Mostrar dicas de contexto:\n" "\n" "Se habilitado, os resultados também mostrarão o caminho completo do arquivo/" "pasta em questão em uma pequena janela dedicada." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Mostrar ícones na coluna Nome:\n" "\n" "Se habilitado, os ícones de arquivos/pastas serão mostrados na coluna Nome." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Lembrar da configuração da coluna:\n" "\n" "Se habilitado, a configuração da coluna da exibição de resultados da sessão " "anterior será restaurada quando você abrir uma janela FSearch. Isso inclui o " "tamanho e a visibilidade de todas as colunas." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Lembrar da ordem de classificação:\n" "\n" "Se ativada, a ordem de classificação da exibição de resultados da sessão " "anterior será restaurada quando você abrir uma janela FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Abrir caminho com duplo clique na coluna caminho:\n" "\n" "Se habilitado, um duplo clique na coluna caminho abrirá o caminho " "selecionado." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Clique único para abrir:\n" "\n" "Se habilitado, um clique único abrirá o arquivo/pasta selecionado. Se você " "quiser apenas selecionar um arquivo/pasta enquanto esta configuração estiver " "ativa, você precisará segurar o Ctrl e ao mesmo tempo clicar no " "arquivo/pasta." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Mostrar status de indexação da base de dados:\n" "\n" "Se habilitado, o caminho que está sendo indexado atualmente é exibido na " "barra de status." #: src/fsearch_preferences.ui:1550 #, fuzzy #| msgid "" #| "Show warning dialogs:\n" #| "\n" #| "If enabled, a warning dialog is displayed when:\n" #| "\n" #| "\t• a file or folder failed to open\n" msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Mostrar diálogo de aviso:\n" "\n" "Se habilitado, um diálogo de aviso será exibido quando:\n" "\n" "\t• um arquivo ou pasta falhou ao abrir\n" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Pesquisar no caminho quando a consulta contém separadores de caminho:\n" "\n" "Se habilitado, os termos de busca contendo separadores de caminho (ou seja, " "\"/\") serão automaticamente comparados com o caminho completo de um arquivo " "ou pasta." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Coincidir maiúsculas e minúsculas quando a busca contém pelo menos um " "caractere maiúsculo:\n" "\n" "Se habilitado, os termos de busca contendo pelo menos um caractere em " "maiúsculas irão acionar uma busca sensível a maiúsculas e minúsculas. Isto " "significa que um termo de busca como Foo irá corresponder ao " "FooBar.txt mas não ao foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ocultar resultados quando a busca está vazia:\n" "\n" "Se habilitado, nenhum resultado de busca será exibido quando a entrada de " "busca estiver vazia.\n" "\n" "Se desabilitado, todos os arquivos e pastas serão exibidos quando a entrada " "de busca estiver vazia." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Pesquisar enquanto digita:\n" "\n" "Se habilitado, a pesquisa é atualizada automaticamente a cada pressionamento " "de tecla.\n" "\n" "Se desabilitado, a pesquisa só é atualizada quando você pressiona Enter ou pressiona o botão de pesquisa. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Atualizar base de dados ao iniciar:\n" "\n" "Se habilitado, a base de dados será atualizada automaticamente em segundo " "plano quando você iniciar o FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Pastas excluídas:\n" "\n" "Esta lista contém todas as pastas que você deseja excluir da base de dados.\n" "\n" "\t• Ativo: Se habilitado, o caminho será excluído da base de dados\n" "\t\t e não pode ser procurado.\n" "\t• Caminho: O caminho completo a ser excluído." #: src/fsearch_preferences.ui:1677 #, fuzzy #| msgid "" #| "Exclude folder from database:\n" #| "\n" #| "This button opens a dialog where you can select a folder you want to " #| "exclude from the database." msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Excluir pasta da base de dados:\n" "\n" "Este botão abre um diálogo onde você pode selecionar uma pasta que deseja " "excluir da base de dados." #: src/fsearch_preferences.ui:1694 #, fuzzy #| msgid "" #| "Remove selected row:\n" #| "\n" #| "This removes the selected folder from the list of excluded folders." msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Remover linha selecionada:\n" "\n" "Isto remove a pasta selecionada da lista de pastas excluídas." #: src/fsearch_preferences.ui:1711 #, fuzzy #| msgid "" #| "Excluded folders:\n" #| "\n" #| "This list contains all folders you want to exclude from the database.\n" #| "\n" #| "\t• Active: If enabled, the path will excluded from the database\n" #| "\t\t and can't be searched in.\n" #| "\t• Path: The full path to be excluded." msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Pastas excluídas:\n" "\n" "Esta lista contém todas as pastas que você deseja excluir da base de dados.\n" "\n" "\t• Ativo: Se habilitado, o caminho será excluído da base de dados\n" "\t\t e não pode ser procurado.\n" "\t• Caminho: O caminho completo a ser excluído." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Excluir pasta da base de dados:\n" "\n" "Este botão abre um diálogo onde você pode selecionar uma pasta que deseja " "excluir da base de dados." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Remover linha selecionada:\n" "\n" "Isto remove a pasta selecionada da lista de pastas excluídas." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Excluir arquivos e pastas da base de dados:\n" "\n" "Esta é uma lista de arquivos (ou pastas) separada por ponto-e-vírgula que " "você deseja excluir da base de dados. Por examplo .git;.cache;*.swp " "excluirá todos os arquivos ou pastas tipo .git ou .cache ou " "que terminar com .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Excluir arquivos e pastas ocultos:\n" "\n" "Se habilitado, arquivos e pastas ocultos serão excluídos da base de dados " "(ou seja, todos os arquivos ou pastas que começam com um caractere de " "ponto)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Focalize no ajuste para obter uma descrição detalhada do que ele faz." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Atualizar periodicamente a base de dados em um intervalo de tempo:\n" "\n" "Se habilitado, desde que o FSearch estiver em execução, a base de dados será " "atualizada periodicamente com o intervalo de tempo definido.\n" "\n" "Se você quiser atualizar a base de dados em segundo plano, mesmo quando o " "FSearch não estiver em execução, você precisa usar ferramentas como cron ou " "timer do systemd para acionar periodicamente a atualização via:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 #, fuzzy #| msgid "" #| "Launch desktop files:\n" #| "\n" #| " If enabled, activating a .desktop file will " #| "launch the application defined\n" #| " within that file. This way FSearch can act like an " #| "application launcher. Otherwise the .desktop\n" #| " file will be opened with the default handler for " #| "this type of files, which is usually a text\n" #| " editor.\n" #| " " msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Iniciar arquivos desktop:\n" "\n" " Se habilitado, a ativação de um arquivo .desktop iniciará o aplicativo definido\n" " dentro do arquivo. Dessa forma, o FSearch pode atuar " "como um inicializador de aplicativos. Caso contrário, o arquivo .desktop\n" " será aberto com o manipulador padrão para este tipo de " "arquivos, que geralmente é um editor\n" " de texto.\n" " " #: src/fsearch_preferences.ui:1850 #, fuzzy #| msgid "" #| "Filters:\n" #| "\n" #| " This is a list of all available filters. A filter " #| "is a predefined search.\n" #| "\n" #| " • Name: A unique and descriptive identifier " #| "for the filter\n" #| " • Macro: By typing the macro text followed " #| "by a ':' you can enable the filter on demand\n" #| " • Query: The search term by which the " #| "database should be filtered\n" #| " " msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filtros:\n" "\n" " Esta é uma lista de todos os filtros disponíveis. Um " "filtro é uma pesquisa predefinida.\n" "\n" " • Nome: Um identificador exclusivo e descritivo " "para o filtro\n" " • Macro: Ao digitar o texto da macro seguido " "por um ':' você pode habilitar o filtro sob demanda\n" " • Consulta: O termo de pesquisa pelo qual a " "base de dados deve ser filtrado\n" " " #: src/fsearch_preferences.ui:1871 #, fuzzy #| msgid "" #| "Add a new filter:\n" #| "\n" #| " This button opens a dialog where you can edit a new " #| "filter.\n" #| " " msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Adicionar um novo filtro:\n" "\n" " Este botão abre uma caixa de diálogo onde você pode " "editar um novo filtro.\n" " " #: src/fsearch_preferences.ui:1888 #, fuzzy #| msgid "" #| "Remove selected filter:\n" #| "\n" #| " This button removes the currently selected filter.\n" #| " " msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Remover filtro selecionado:\n" "\n" " Este botão remove o filtro selecionado.\n" " " #: src/fsearch_preferences.ui:1905 #, fuzzy #| msgid "" #| "Edit selected filter:\n" #| "\n" #| " This button opens a dialog where you can edit the " #| "selected filter.\n" #| " " msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Editar filtro selecionado:\n" "\n" " Este botão abre uma caixa de diálogo onde você pode " "editar o filtro selecionado.\n" " " #: src/fsearch_preferences.ui:1922 #, fuzzy #| msgid "" #| "Restore default filters:\n" #| "\n" #| " This button restores the default filter " #| "configuration.\n" #| "\n" #| " ⚠ All filters which were created or edited by the " #| "user will be lost! ⚠\n" #| " " msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Restaurar filtros padrão:\n" "\n" " Este botão restaura a configuração de filtro padrão.\n" "\n" " ⚠ Todos os filtros que foram criados ou editados pelo " "usuário serão perdidos! ⚠\n" " " #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Ajuda" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Selecione uma pasta" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Selecionar" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Adicionar filtro" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Ativo" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Caminho" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Um sistema de arquivos" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Nome" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Macro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Consulta" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d itens" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d itens" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Consultando…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Carregando…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Procurando…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Número de resultados da pesquisa" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Itens" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "Cancelar" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Índice:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Número de pastas selecionadas" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Número de arquivos selecionados" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Cancelar atualização da base de dados" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Número de itens na base de dados" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(vazio)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "O termo de busca contém separadores de caminho.\n" "Pesquisar no caminho foi temporariamente ativado para este termo." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "MAIÚSCULAS•MINÚSCULAS" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "O termo de busca contém separadores de caminho.\n" "Pesquisar no caminho foi temporariamente ativado para este termo." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "CAMINHO" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGEX" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tamanho" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tipo" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Extensão" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Data de modificação" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can be very slow with many results and it can't be " #| "aborted.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "A ordenação por Tipo pode ser muito lenta com muitos resultados e não " "pode ser abortada.\n" "\n" "Esta ordem de classificação não é persistente, ela será redefinida quando o " "termo de busca mudar." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Nova janela" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Atualizar base de dados" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Pesquisar no caminho" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Coincidir maiúsculas e minúsculas" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Habilitar RegEx" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Mostrar barra de status" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Mostrar filtro" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Mostrar botão de pesquisa" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Sobre" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Sair" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Pesquisar…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Selecione um filtro" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Você realmente quer abrir %d arquivo(s)?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Abrindo arquivos…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Você realmente quer remover %d arquivo(s)?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Excluindo arquivos…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Movendo arquivos para a lixeira…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Excluindo arquivos…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Movendo arquivos para a lixeira…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Você realmente quer abrir janela de propriedade do arquivo %d?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Abrindo propriedade do arquivo…" #: src/menus.ui:6 msgid "_File" msgstr "_Arquivo" #: src/menus.ui:9 msgid "New Window" msgstr "Nova janela" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Abrir" #: src/menus.ui:21 msgid "Open Folder" msgstr "Abrir pasta" #: src/menus.ui:29 msgid "Update Database" msgstr "Atualizar base de dados" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Cancelar atualização" #: src/menus.ui:42 msgid "Close Window" msgstr "Fechar janela" #: src/menus.ui:54 msgid "_Edit" msgstr "_Editar" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Copiar" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Cor_tar" #: src/menus.ui:69 msgid "Select All" msgstr "Selecionar tudo" #: src/menus.ui:74 msgid "Deselect All" msgstr "Desmarcar tudo" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Inverter seleção" #: src/menus.ui:92 msgid "_View" msgstr "_Ver" #: src/menus.ui:109 msgid "_Search" msgstr "_Pesquisar" #: src/menus.ui:126 msgid "_Help" msgstr "_Ajuda" #: src/menus.ui:171 msgid "Open _With" msgstr "Abrir _com" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Abrir pasta" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Copiar como texto" #: src/menus.ui:217 msgid "Path + Name" msgstr "Caminho + Nome" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Mover para a lixeira" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Adicionar caminho para ser incluído na base de dados\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Adicionar pasta a base de dados:\n" #~ "\n" #~ " Este botão abre uma caixa de diálogo onde você pode " #~ "selecionar uma pasta que deseja incluir na base de dados para\n" #~ " pesquisa.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "O termo de busca contém caracteres maiúsculos.\n" #~ "Coincidir maiúsculas e minúsculas foi temporariamente ativado para " #~ "este termo." #~ msgid "page0" #~ msgstr "página0" #~ msgid "page1" #~ msgstr "página1" #~ msgid "page2" #~ msgstr "página2" #~ msgid "page30" #~ msgstr "página30" #~ msgid "page18" #~ msgstr "página18" #~ msgid "page31" #~ msgstr "página31" #~ msgid "page32" #~ msgstr "página32" #~ msgid "page33" #~ msgstr "página33" #~ msgid "page34" #~ msgstr "página34" #, fuzzy #~| msgid "page5" #~ msgid "page35" #~ msgstr "página5" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Pastas incluídas:\n" #~ "\n" #~ " Esta lista contém todas as pastas que você deseja " #~ "incluir na base de dados.\n" #~ "\n" #~ " • Ativo: Se habilitado, o caminho será " #~ "incluído na base de dados a ser pesquisado.\n" #~ " • Caminho: O caminho completo a ser " #~ "incluído.\n" #~ " • Atualizar: Esta configuração é útil se " #~ "você quiser excluir certos caminhos de\n" #~ " ser\n" #~ " atualizados (por exemplo, um caminho de USB " #~ "antigo que não muda conteúdo com freqüência)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Remover linha selecionada:\n" #~ "\n" #~ " Isso remove a pasta selecionada da lista de pastas " #~ "incluídas.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Deseja manter a janela aberta?" #~ msgid "_Copy Filepath" #~ msgstr "_Copiar Caminho do Arquivo" #~ msgid "Update" #~ msgstr "Atualizar" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d itens" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Última atualização: %H:%M, %d-%m-%y" #~ msgid "_Delete" #~ msgstr "_Excluir" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Limitar número de resultados:" #~ msgid "Background tasks are active." #~ msgstr "Tarefas em segundo plano estão ativas." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Não é possível fechar a janela agora.\n" #~ "Por favor aguarde um momento e então tente novamente." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Vá em Editar → Preferências → Base de Dados e adicione algumas " #~ "localizações" #~ msgid "page4" #~ msgstr "página4" #~ msgid "page6" #~ msgstr "página6" #~ msgid "page7" #~ msgstr "página7" #~ msgid "page8" #~ msgstr "página8" #~ msgid "page9" #~ msgstr "página9" #~ msgid "page10" #~ msgstr "página10" #~ msgid "page11" #~ msgstr "página11" #~ msgid "page12" #~ msgstr "página12" #~ msgid "page13" #~ msgstr "página13" #~ msgid "page14" #~ msgstr "página14" #~ msgid "page15" #~ msgstr "página15" #~ msgid "page16" #~ msgstr "página16" #~ msgid "page17" #~ msgstr "página17" #~ msgid "page19" #~ msgstr "página19" #~ msgid "page20" #~ msgstr "página20" #~ msgid "page21" #~ msgstr "página21" #~ msgid "page22" #~ msgstr "página22" #~ msgid "page23" #~ msgstr "página23" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "Página 0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "Página 0" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Copiar" #~ msgid "Add…" #~ msgstr "Adicionar…" #~ msgid "Remove" #~ msgstr "Remover" #~ msgid "Follow symbolic links" #~ msgstr "Seguir ligações simbólicas" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Ativar tema escuro\" pode não ter efeito,\n" #~ "pois nem todo tema GTK+ fornece uma versão escura." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Ativar RegEx" #~ msgid "Open Containing Folder" #~ msgstr "Abrir Pasta superior" #~ msgid "Open File(s) in File Manager" #~ msgstr "Abrir arquivo(s) no Gerenciador de Arquivos" #~ msgid "Move to Trash" #~ msgstr "Mover para a Lixeira" #~ msgid "Show Menubar" #~ msgstr "Mostrar barra de menu" #~ msgid "Enable" #~ msgstr "Ativar RegEx" #~ msgid "Loading Database..." #~ msgstr "Carregando base de dados…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Atualizando base de dados..." #~ msgid "Search..." #~ msgstr "Pesquisar..." #~ msgid "Add" #~ msgstr "Adicionar" #~ msgid "files?" #~ msgstr "arquivos?" #~ msgid "C_ut" #~ msgstr "R_ecortar" #~ msgid "Selected Folder and Files" #~ msgstr "Pastas e Arquivos Selecionados" fsearch-0.2.3/po/ru.po000066400000000000000000002053071446344336300145540ustar00rootroot00000000000000# Russian translations for FSearch package. # Copyright (C) 2016 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2016. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-05-24 09:18+0000\n" "Last-Translator: Сергей \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.13-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Инструмент поиска файлов, нацеленный на быстродействие и продвинутые " "возможности" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" "поиск; файлы; папки; музыка; видео; документы; найти; инструмент; все;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Приложение для поиска файлов с графическим интерфейсом" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch помогает находить файлы и папки максимально просто и быстро. Просто " "введите несколько букв, и результаты поиска появятся практически мгновенно." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Существует множество функций, которые делают поиск максимально эффективным и " "мощным. Такие как:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Игнорировать регистр (например, поиску «fsearch» также будет соответствовать " "«FSearch»)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Регулярные выражения" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Поддержка подстановочных знаков" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Поддержка фильтров (например, поиск только аудиофайлов)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Исключать определенные файлы и папки" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Быстрая сортировка по имени, пути, размеру, времени модификации и расширению" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Примечание: благодаря песочнице Flatpak FSearch не может найти все файлы в " "вашей системе." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Макет интерфейса по молчанию" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Макет, более близкий к GNOME HIG" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Первый релиз." #: src/fsearch.c:243 msgid "Saving…" msgstr "Сохранение…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Konstantin Yablochkin @yakonstb" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" "Инструмент поиска, нацеленный на быстродействие и продвинутые возможности" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Открыть новое окно приложения" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Показать настройки программы" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Установить шаблон поиска" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Обновить базу данных и выйти" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Показать информацию о версии и выйти" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Загрузка папок…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Загрузка файлов…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Сортировка…" #: src/fsearch_file_utils.c:132 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Запускать .desktop файлы" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open:" msgid "Failed to build open command" msgstr "Не удалось открыть:" #: src/fsearch_file_utils.c:151 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Запускать .desktop файлы" #: src/fsearch_file_utils.c:154 #, fuzzy #| msgid "Open a new application window" msgid "Failed to get application information" msgstr "Открыть новое окно приложения" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "Невозможно открыть файл" #: src/fsearch_file_utils.c:182 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Запускать .desktop файлы" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get path" msgstr "Не удалось открыть:" #: src/fsearch_file_utils.c:245 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Запускать .desktop файлы" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 #, fuzzy #| msgid "Show the application preferences" msgid "No default application registered" msgstr "Показать настройки программы" #: src/fsearch_file_utils.c:348 #, fuzzy #| msgid "Launch desktop files" msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Запускать .desktop файлы" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open:" msgid "Failed to get parent path" msgstr "Не удалось открыть:" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Папка" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Неизвестный тип" #: src/fsearch_filter.c:111 msgid "All" msgstr "Все" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Папки" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Файлы" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Приложения" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Архивы" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Аудио" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Документы" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Изображения" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Видео" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Имена макросов не должны содержать символ «:»." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Отмена" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Принять" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Редактор фильтра" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Имя:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Уникальное имя для этого фильтра" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Уникальное имя фильтра" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Искать в пути к файлу/папке" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Включить регулярные выражения" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Учитывать регистр" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Запрос:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Макрос:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Макрос для этого фильтра. Макрос позволяет вам получить доступ к этому " "фильтру из поисковой записи, введя его текст, за которым следует «:»\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Характеристики…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Другая программа…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Пустая база данных" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Добавить папки" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Загрузка базы данных…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Это не займет много времени." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Обновление базы данных…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Это может занять некоторое время." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Пустой запрос" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Нажмите Ctrl + F и начинайте печатать" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Результатов не найдено" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Попробуйте другой запрос" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Сортировка результатов…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Параметры" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Включить тёмную тему" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Использовать заголовок окна приложения (требуется перезапуск)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Использовать двоичные единицы вместо десятичных" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Запоминать размер окна" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Выход по клавише Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "с помощью горячих клавиш или пунктов меню" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "с помощью двойного щелчка мышью" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Поведение после успешного открытия файла:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Ничего не делать" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Свернуть" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Закрыть" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Основное:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Выделять найденный текст в списке" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Показывать подсказки" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Показывать иконки в колонке «имя»" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Запоминать конфигурацию колонок" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Запоминать порядок сортировки" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Открыть путь щёлкнув дважды по колонке пути" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Открывать одним щелчком мыши" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Запускать .desktop файлы" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Результаты:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Показывать состояние индексирования базы данных" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Строка состояния:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Открыть окно с предупреждением если:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "файл / папку невозможно открыть" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Окна:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Интерфейс" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Искать в пути к файлу/папке, когда запрос содержит разделители («/»)" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Искать по мере набора" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Спрятать результаты, когда поиск пустой" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Учитывать регистр, когда запрос содержит хотя бы один символ верхнего " "регистра" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Добавить новый фильтр" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Убрать выбранный фильтр" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Редактировать выбранный фильтр" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Восстановить фильтры, установленные по умолчанию" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Фильтр:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Поиск" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Обновлять базу данных при старте" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Обновлять каждые" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "час(ов) и" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "минут(у)" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Добавить путь для в базу данных\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Убрать выбранный путь" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Включать" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Добавить путь для исключения из базы" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" "Можно использовать шаблоны. Несколько записей должны быть разделены знаком " "«;»" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Исключать файлы:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "например, «.git;*.tmp»" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Исключать скрытые файлы и папки" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Исключать" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "База данных" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Включить тёмную тему:\n" "\n" "Если этот параметр включён, системной теме будет указано использовать более " "тёмный стиль для приложения (т.е. яркий цвет текста на тёмных элементах " "интерфейса).\n" "\n" "Обратите внимание, что не все системные темы предоставляют такой более " "тёмный вариант, поэтому включение этого параметра может не иметь эффекта." #: src/fsearch_preferences.ui:1326 #, fuzzy #| msgid "" #| "Enable client-side decorations:\n" #| "\n" #| "If enabled, the search entry and main menu are displayed in the window " #| "title bar.\n" #| "\n" #| "If disabled, the main menu is displayed as a menu bar with the search " #| "entry below it.\n" #| "This resembles a more traditonal UI layout and takes a little bit more " #| "space." msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Использовать заголовок окна приложения:\n" "\n" "Если этот параметр включён, строка поиска и главное меню будут отображаться " "в самом заголовке окна.\n" "\n" "Если этот параметр отключён, главное меню отображается в виде строки меню с " "поисковой записью под ней.\n" "Это напоминает более традиционный макет пользовательского интерфейса и " "занимает немного больше места." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Использовать двоичные единицы вместо десятичных:\n" "\n" "Этот параметр определяет способ отображения размеров файлов.\n" "\n" "• Двоичные единицы: Имеются ввиду двоичные приставки стандарта IEC " "(например, 1 КиБ = 1024 байта)\n" "• Десятичные единицы: Имеются ввиду десятичные приставки в системе СИ " "(например, 1 кБ = 1000 байт)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Запомнить размер окна:\n" "\n" "Если этот параметр включён, размер окна предыдущего сеанса будет " "восстановлен при открытии окна FSearch.\n" "\n" "Обратите внимание, что некоторые оконные менеджеры игнорируют этот запрос и " "заставляют окно иметь другой размер." #: src/fsearch_preferences.ui:1385 #, fuzzy #| msgid "" #| "Behaviour after successfully opening a file:\n" #| "\n" #| "When a file/folder was succesfully opened one of the following actions " #| "can be performed:\n" #| "\t• Nothing: Nothing happens.\n" #| "\t• Minimize: The currently selected FSearch window becomes " #| "minimized. \n" #| "\t• Close: Quit FSearch.\n" #| "\n" #| "You can configure if those actions should be triggered when the file was " #| "opened with\n" #| "\t• keyboard shortcuts or menu entries and/or\n" #| "\t• mouse click" msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Поведение после успешного открытия файла:\n" "\n" "После успешного открытия файла/папки можно выполняется одно из следующих " "действий:\n" "\t• Ничего: Не производится никаких действий.\n" "\t• Свернуть: Текущее выбранное окно FSearch будет свёрнуто. \n" "\t• Закрыть: Выйти из FSearch.\n" "\n" "Вы можете настроить, какие из этих действий будут выполняться при открытии " "файла с помощью\n" "\t• комбинаций клавиш или пунктов меню и/или\n" "\t• щелчком мыши" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Показывать выделением поисковые запросы:\n" "\n" "Если этот параметр включён, условия поиска будут выделены в окне " "результатов. Например, при поиске по запросу «foo» все foo в именах " "файлов / папок будут выделены жирным шрифтом:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "Это также работает для регулярных выражений и выражений с подстановочными " "знаками, начинающихся или заканчивающихся звездочкой. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Показывать всплывающие подсказки:\n" "\n" "Если этот параметр включён, то при наведении указателя, в списке результатов " "будет отображаться подсказка с полным путём к выбранному файлу/папке." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Показать значки в названиях столбцов:\n" "\n" "Если этот параметр включён, в названиях столбцов будут отображаться значки " "файлов/папок." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Запомнить конфигурацию колонок:\n" "\n" "Если этот параметр включён, конфигурация колонок в представлении результатов " "из предыдущего сеанса при открытии окна FSearch будет восстановлена. Этот " "параметр включает размер и видимость всех столбцов." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Помнить порядок сортировки:\n" "\n" "Если этот параметр включён, при запуске окна FSearch будет восстановлен " "порядок сортировки результатов предыдущего сеанса." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Открыть путь двойным щелчком в колонке:\n" "\n" "Если этот параметр включён, то двойной щелчок в колонке откроет выбранный " "путь." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Один щелчок для открытия:\n" "\n" "Если этот параметр включён, то один щелчок откроет выбранный файл/папку. " "Если вы хотите выбрать только файл/папку, когда этот параметр активен, вам " "нужно одновременно удерживая Ctrl, щёлкнуть по файлу/папке." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Показывать состояние индексирования базы данных:\n" "\n" "Если этот параметр включён, путь, который в настоящее время индексируется, " "отображается в строке состояния." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Показывать диалоговые окна с предупреждениями:\n" "\n" "Если этот параметр включён, при неудачном открытии файла или папки " "отобразится диалоговое окно с предупреждением." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Искать в пути, если запрос содержит разделители:\n" "\n" "Если этот параметр включён, условия поиска, содержащие разделители путей " "(например, «/»), будут автоматически сопоставляться с полным путем к файлу " "или папке." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Учитывать регистр, когда запрос содержит хотя бы один символ верхнего " "регистра:\n" "\n" "Если этот параметр включён, поисковые запросы, содержащие хотя бы один " "символ верхнего регистра, будут запускать поиск с учётом регистра. Это " "означает, что поисковый запрос Foo будет соответствовать FooBar." "txt, но не foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Спрятать результаты, когда поиск пустой:\n" "\n" "Если этот параметр включён, результаты поиска не будут отображаться, когда " "поисковая запись пуста.\n" "\n" "Если этот параметр отключён, все файлы и папки будут отображаться, при " "пустой поисковой записи." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Искать по мере набора:\n" "\n" "Если этот параметр включён, поиск автоматически обновляется при каждом " "нажатии клавиши.\n" "\n" "Если этот параметр отключён, поиск обновляется только после нажатия " "Enter или кнопки поиска. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Обновлять базу при старте:\n" "\n" "Если этот параметр включён, база данных будет обновляться автоматически в " "фоновом режиме при запуске FSearch." #: src/fsearch_preferences.ui:1656 #, fuzzy #| msgid "" #| "Included folders:\n" #| "\n" #| "This list contains all folders you want to include in the database.\n" #| "\n" #| "\t• Active: If enabled, the path will included in the database to " #| "be searched in.\n" #| "\t• Path: The full path to be included.\n" #| "\t• One Filesystem: If enabled, FSearch won't cross filesystem " #| "boundraries for this folder" msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Включённые папки:\n" "\n" "Этот список содержит все папки, которые вы хотите включить в базу данных.\n" "\n" "\t• Активно: Если этот параметр включён, то путь будет включён в базу " "для поиска.\n" "\t• Путь: Полный путь, который необходимо включить в поиск.\n" "\t• Одна файловая система: Если этот параметр включён, FSearch не " "будет пересекать границы файловой системы для этой папки" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Добавить папку в базу данных:\n" "\n" "Эта кнопка открывает диалоговое окно, в котором вы можете выбрать папку для " "включения в базу данных поиска." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Удалить выбранный вариант:\n" "\n" "Это действие удаляет выбранную папку из списка включённых папок." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Исключенные папки:\n" "\n" "Этот список содержит все папки, которые вы хотите исключить из базы данных.\n" "\n" "\t• Активно: Если этот параметр включён, то путь будет исключён из " "базы и поиск в нем будет невозможен.\n" "\t• Путь: Полный путь, который необходимо исключить." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Исключить папку из базы данных:\n" "\n" "Эта кнопка открывает диалоговое окно, в котором вы можете выбрать папку для " "исключения из базы данных." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Удалить выбранный вариант:\n" "\n" "Это действие удаляет выбранную папку из списка исключённых папок." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Исключить файлы и папки из базы данных:\n" "\n" "Это список файлов (или папок), разделённых точкой с запятой, которые вы " "хотите исключить из базы данных. Например, .git; .cache; *. Swp " "исключит все файлы или папки, которые начинаются с .git или ." "cache или заканчиваются на .swp ." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Исключить скрытые файлы и папки:\n" "\n" "Если этот параметр включён, скрытые файлы и папки будут исключены из базы " "данных (т.е. все файлы и папки, начинающиеся с точки) ." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Наведите мышью на настройку для получения подробностей." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" " Периодически обновлять базу данных через определенный промежуток " "времени: \n" "\n" "Если этот параметр включён, то база данных будет периодически обновляться с " "заданным интервалом времени пока работает FSearch.\n" "\n" "Если вы хотите обновить базу данных в фоновом режиме, даже если FSearch не " "запущен, вам следует использовать такие инструменты, как cron или systemd " "таймеры, чтобы периодически запускать обновление с помощью:\n" "\n" " fsearch --update-database " #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Запускать .desktop файлы:\n" "\n" "Если этот параметр включён, активация файла .desktop запустит " "приложение, прописанное внутри этого файла. Таким образом, FSearch может " "действовать как средство запуска приложений. Иначе, .desktop файл " "будет открыт приложением, установленным по умолчанию для этого типа файлов, " "обычно это текстовый редактор." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Фильтры:\n" "\n" "Список всех доступных фильтров. Фильтр - это определённый заранее поисковый " "запрос.\n" "\n" "\t• Имя: Уникальный и наглядный идентификатор фильтра\n" "\t• Макрос: Введя текстовое обозначение макроса с «:» в конце, вы " "можете включить необходимый фильтр.\n" "\t• Запрос: Критерий поиска, по которому следует фильтровать базу " "данных" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Добавить новый фильтр:\n" "\n" "Эта кнопка открывает диалоговое окно, в котором вы можете отредактировать " "новый фильтр." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Удалить выбранный фильтр:\n" "\n" "Это кнопка удаляет выбранный в данный момент фильтр." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Редактировать выбранный фильтр:\n" "\n" "Эта кнопка открывает диалоговое окно, в котором вы можете редактировать " "выбранный фильтр." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Восстановить фильтры, установленные по умолчанию:\n" "\n" "Эта кнопка восстановит конфигурацию фильтров, установленных по умолчанию.\n" "\n" "⚠ Все фильтры, созданные или изменённые пользователем, будут потеряны! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Выход по клавише Escape:\n" "\n" "Если этот параметр включён, то при нажатии клавиши Escape приложение FSearch " "будет закрыто вместо сворачивания окна." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Справка" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Выберите папку" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Выбрать" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Добавить фильтр" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Активно" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Путь" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Одна файловая система" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Имя" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Макрос" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Запрос" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d элемент" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d элемент(а/ов)" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Идёт запрос…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Загрузка…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Сканирование…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Количество результатов поиска" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 элементов" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Отмена" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Индексирование:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Количество выбранных папок" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Количество выбранных файлов" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Отменить обновление базы данных" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Количество элементов базы данных" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(пусто)" #: src/fsearch_statusbar.ui:407 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Поисковый запрос содержит разделители путей.\n" "Поиск в пути к файлу/папке был временно активирован для этого запроса." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "РЕГИСТР" #: src/fsearch_statusbar.ui:514 #, fuzzy #| msgid "" #| "Search term contains path separators.\n" #| "Search in Path was temporarily activated for this term." msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Поисковый запрос содержит разделители путей.\n" "Поиск в пути к файлу/папке был временно активирован для этого запроса." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ПУТЬ" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "РЕГ ВЫР" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Размер" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Тип" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Расширение" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Дата изменения" #: src/fsearch_window.c:662 #, fuzzy #| msgid "" #| "Sorting by Type can take a vew seconds with many results.\n" #| "\n" #| "This sort order is not persistent, it will be reset when the search term " #| "changes." msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Сортировка по ТИПУ может занять пару секунд и привести к большому " "количеству результатов.\n" "\n" "Этот порядок сортировки не является постоянным, он будет сброшен при " "изменении поискового запроса." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Новое окно" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Обновить базу данных" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Искать в пути к файлу/папке" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Учитывать регистр" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Включить регулярные выражения" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Показать строку состояния" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Показать фильтр" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Показать кнопку поиска" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "О приложении" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Выйти" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Поиск…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Выбрать фильтр" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Вы действительно хотите открыть столько (%d) файлов?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Открыть файл(ы)…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Вы действительно хотите удалить столько (%d) файлов?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Удаление файлов…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Перемещение файлов в корзину…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Удаление файлов…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "Перемещение файлов в корзину…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Вы действительно хотите открыть окно свойств файла %d?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Открытие свойств файла…" #: src/menus.ui:6 msgid "_File" msgstr "_Файл" #: src/menus.ui:9 msgid "New Window" msgstr "Новое окно" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Открыть" #: src/menus.ui:21 msgid "Open Folder" msgstr "Открыть папку" #: src/menus.ui:29 msgid "Update Database" msgstr "Обновить базу данных" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Отменить обновление" #: src/menus.ui:42 msgid "Close Window" msgstr "Закрыть окно" #: src/menus.ui:54 msgid "_Edit" msgstr "_Правка" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Копировать" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "_Вырезать" #: src/menus.ui:69 msgid "Select All" msgstr "Выделить всё" #: src/menus.ui:74 msgid "Deselect All" msgstr "Снять выделение" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Инвертировать выделение" #: src/menus.ui:92 msgid "_View" msgstr "_Вид" #: src/menus.ui:109 msgid "_Search" msgstr "_Поиск" #: src/menus.ui:126 msgid "_Help" msgstr "_Справка" #: src/menus.ui:171 msgid "Open _With" msgstr "От_крыть с помощью" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Открыть _папку" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Копировать как текст" #: src/menus.ui:217 msgid "Path + Name" msgstr "Путь + Имя" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "_Переместить в корзину" #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Добавить путь для в базу данных\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Добавить папку в базу данных:\n" #~ "\n" #~ "\tЭта кнопка открывает диалоговое окно, в котором вы можете выбрать " #~ "папку, которую хотите включить в базу данных\n" #~ "\tдля поиска.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Поисковый запрос содержит символы верхнего регистра.\n" #~ "Учёт регистра был временно активирован для этого запроса." #~ msgid "page0" #~ msgstr "страница0" #~ msgid "page1" #~ msgstr "страница1" #~ msgid "page2" #~ msgstr "страница2" #~ msgid "page30" #~ msgstr "страница30" #~ msgid "page18" #~ msgstr "страница18" #~ msgid "page31" #~ msgstr "страница31" #~ msgid "page32" #~ msgstr "страница32" #~ msgid "page33" #~ msgstr "страница33" #~ msgid "page34" #~ msgstr "страница34" #~ msgid "page35" #~ msgstr "страница35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Включенные папки:\n" #~ "\n" #~ " Этот список содержит все папки, которые вы хотите " #~ "включить в базу данных.\n" #~ "\n" #~ " • Активно: Если этот параметр включен, путь " #~ "будет включен в базу данных для поиска.\n" #~ " • Путь: Полный путь, который необходимо " #~ "включить.\n" #~ " • Обновлять: Этот параметр полезен, если вы " #~ "хотите исключить определенные пути\n" #~ " из\n" #~ " обновления (например, путь к медленному USB-" #~ "накопителю, который меняется не часто)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Удалить выбранный вариант:\n" #~ "\n" #~ "Это действие удаляет выбранную папку из списка включенных папок.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Хотите оставить окно открытым?" #~ msgid "_Copy Filepath" #~ msgstr "Копировать п_уть" #~ msgid "Building lookup list…" #~ msgstr "Создание списка поиска…" #~ msgid "Update" #~ msgstr "Обновлять" #~ msgid "≥%'d Items" #~ msgstr "≥%'d элемент(а/ов)" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Последнее обновление: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Удалить" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Ограничить количество результатов:" #~ msgid "Background tasks are active." #~ msgstr "Выполняются фоновые задачи." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Нельзя закрыть окно прямо сейчас.\n" #~ "Пожалуйста подождите минуту и попробуйте ещё раз." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Перейдите в Правка → Параметры → База данных и добавьте пути поиска" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "страница4" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "страница6" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "страница7" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "страница8" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "страница9" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "страница10" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "страница11" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "страница12" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "страница13" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "страница14" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "страница15" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "страница16" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "страница17" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "страница19" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "страница20" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "страница21" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "страница22" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "страница23" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "страница24" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "страница25" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "страница26" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "страница27" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "страница28" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "страница29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Копировать" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Включение тёмной темы может не дать эффекта.\n" #~ "Некоторые платформы не поддерживают тёмную тему, а другие всегда " #~ "используют тёмные темы по умолчанию." #~ msgid "Add…" #~ msgstr "Добавить…" #~ msgid "Remove" #~ msgstr "Удалить" #~ msgid "Follow symbolic links" #~ msgstr "Следовать по символьным ссылкам" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "ИНФОРМАЦИЯ: «Включить тёмную тему» может не иметь эффекта,\n" #~ "т.к. не все темы GTK+ имеют тёмную версию." #~ msgid "Enable menubar" #~ msgstr "Показывать панель меню" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "ИНФОРМАЦИЯ: включение / отключение строки меню вступает в силу после " #~ "перезапуска FSearch.\n" #~ msgid "Open Containing Folder" #~ msgstr "Открыть содержащую папку" #~ msgid "Open File(s) in File Manager" #~ msgstr "Открыть файл(ы) в файловом менеджере" #~ msgid "Move to Trash" #~ msgstr "Переместить в корзину" #~ msgid "Show Menubar" #~ msgstr "Показать строку меню" #~ msgid "Enable" #~ msgstr "Включить" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Загрузка базы данных..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Обновление базы данных..." #~ msgid "Search..." #~ msgstr "Поиск..." #~ msgid "Add" #~ msgstr "Добавить" #~ msgid "files?" #~ msgstr "файлы?" #~ msgid "C_ut" #~ msgstr "_Вырезать" #~ msgid "Selected Folder and Files" #~ msgstr "Выбранные папки и файлы" fsearch-0.2.3/po/sk.po000066400000000000000000001030021446344336300145300ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: Slovak (FSearch)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2018-01-02 18:35+0000\n" "Last-Translator: Dávid Bolvanský \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 2.19-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 #, fuzzy msgid "A file search application focusing on performance and advanced features" msgstr "Program na vyhľadávanie súborov zameraný na výkon a pokročilé funkcie" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "Vylúčiť skryté súbory a priečinky" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "Načítavanie databázy..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Program na vyhľadávanie súborov zameraný na výkon a pokročilé funkcie" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "Otvoriť s iným programom" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Zobraziť tlačidlo vyhľadávania" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Aktualizovať databázu" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "Načítavanie databázy..." #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "Vymazávanie súborov..." #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "Načítavanie databázy..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "Otvoriť s iným programom" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Priečinky" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Všetky" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Priečinky" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Súbory" #: src/fsearch_filter.c:115 #, fuzzy msgid "Applications" msgstr "Iný program" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Názov" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Vyhľadať v umiestnení" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "Rozlišovať veľké a malé písmená" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 #, fuzzy msgid "Other Application…" msgstr "Iný program" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Vyprázdniť databázu" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Priečinky" #: src/fsearch_overlay.ui:108 #, fuzzy msgid "Loading Database…" msgstr "Načítavanie databázy..." #: src/fsearch_overlay.ui:123 #, fuzzy msgid "This won't take long." msgstr "Môže to chvíľu trvať." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 #, fuzzy msgid "Updating Database…" msgstr "Aktualizácia databázy..." #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Môže to chvíľu trvať." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Žiadna požiadavka na vyhľadanie" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Stlačte Ctrl + F a začnite písať" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Nič nenájdené" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Skúste iné vyhľadávanie" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Nastavenia" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Povoliť tmavú tému" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Používať binárne jednotky namiesto desatinných jednotiek" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Zapamätať veľkosť okna" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Zobraziť tipy" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Zobraziť ikony v stĺpci s názvami" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Zapamätať nastavenie stĺpcov" #: src/fsearch_preferences.ui:413 #, fuzzy msgid "Remember sort order" msgstr "Zapamätať veľkosť okna" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "Aktualizovať databázu pri spustení" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "Zobraziť stavový riadok" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Rozhranie" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" "Vyhľadávať v umiestnení, ak požiadavka na vyhľadanie obsahuje oddeľovače " "ciest" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Vyhľadávať počas písania" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Skryť výsledky pri prázdnej požiadavke na vyhľadanie" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "" "Vyhľadávať v umiestnení, ak požiadavka na vyhľadanie obsahuje oddeľovače " "ciest" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Priečinky" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Zobraziť filter" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Vyhľadávanie" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Aktualizovať databázu pri spustení" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Zahrnúť" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Podporuje zástupné znaky. Ďalšie položky musia byť oddelené ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Vylúčiť súbory:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "napríklad: \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Vylúčiť skryté súbory a priečinky" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Vylúčiť" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Databáza" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_Pomocnik" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "Vybrať filter" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "Zrušiť výber všetkých" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Priečinky" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Umiestnenie" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "Otvoriť súbor(y)" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Názov" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "Žiadna požiadavka na vyhľadanie" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "Počet položiek: %'d" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "Počet položiek: %'d" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "Načítavanie databázy..." #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 položiek" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "Aktualizovať databázu pri spustení" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "Počet výsledkov vyhľadávania" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(prázdne)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "VEĽKÉ A MALÉ PÍSMENÁ" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "UMIESTNENIE" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "REGULÁRNE VÝRAZY" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Veľkosť" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Typ" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Dátum zmeny" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 #, fuzzy msgid "New window" msgstr "Nové okno" #: src/fsearch_window.ui:234 #, fuzzy msgid "Update database" msgstr "Aktualizovať databázu" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Vyhľadať v umiestnení" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Rozlišovať veľké a malé písmená" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Povoliť regulárne výrazy" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Zobraziť stavový riadok" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Zobraziť filter" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Zobraziť tlačidlo vyhľadávania" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 #, fuzzy msgid "Search…" msgstr "Vyhľadávanie" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Vybrať filter" #: src/fsearch_window_actions.c:88 #, fuzzy, c-format msgid "Do you really want to open %d file(s)?" msgstr "Naozaj chcete odstrániť" #: src/fsearch_window_actions.c:90 #, fuzzy msgid "Opening Files…" msgstr "Otvoriť súbor(y)" #: src/fsearch_window_actions.c:176 #, fuzzy, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Naozaj chcete odstrániť" #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Deleting files…" msgstr "Vymazávanie súborov..." #: src/fsearch_window_actions.c:180 #, fuzzy msgid "Moving files to trash…" msgstr "Presúvanie súborov do koša..." #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Deleted %d file(s)." msgstr "Vymazávanie súborov..." #: src/fsearch_window_actions.c:215 #, fuzzy, c-format msgid "Moved %d file(s) to the trash." msgstr "Presúvanie súborov do koša..." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Naozaj chcete odstrániť" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Otvoriť súbor(y)" #: src/menus.ui:6 msgid "_File" msgstr "_Súbor" #: src/menus.ui:9 msgid "New Window" msgstr "Nové okno" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Otvoriť" #: src/menus.ui:21 msgid "Open Folder" msgstr "Otvoriť priečinok" #: src/menus.ui:29 msgid "Update Database" msgstr "Aktualizovať databázu" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Nové okno" #: src/menus.ui:54 msgid "_Edit" msgstr "_Upraviť" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopírovať" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "Zrušiť výber všetkých" #: src/menus.ui:74 msgid "Deselect All" msgstr "Zrušiť výber všetkých" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Obrátiť výber" #: src/menus.ui:92 msgid "_View" msgstr "_Zobraziť" #: src/menus.ui:109 msgid "_Search" msgstr "_Hľadať" #: src/menus.ui:126 msgid "_Help" msgstr "_Pomocnik" #: src/menus.ui:171 msgid "Open _With" msgstr "Otvoriť _s" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Otvoriť priečinok" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Presunúť do koša" #~ msgid "_Copy Filepath" #~ msgstr "_Kopírovať cestu k súboru" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "Počet položiek: %'d" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Naposledny aktualizované: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Vymazať" #~ msgid "Limit number of results:" #~ msgstr "Limit výsledkov vyhľadávania:" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Prejdite do Upraviť → Nastavenia → Databáza a pridajte nejaké " #~ "umiestnenia" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_Kopírovať" #~ msgid "Remove" #~ msgstr "Odstrániť" #~ msgid "Follow symbolic links" #~ msgstr "Sledovať symbolické odkazy" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "Informácia: Nastavenie \"Povoliť tmavú tému\" nemusí mať žiadny vplyv na " #~ "program,\n" #~ "keďže nie každá GTK+ téma podporuje tmavú verziu." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "Povoliť regulárne výrazy" #~ msgid "Open Containing Folder" #~ msgstr "Otvoriť priečinok so súborom" #~ msgid "Open File(s) in File Manager" #~ msgstr "Otvoriť súbor(y) v správcovi súborov" #~ msgid "Move to Trash" #~ msgstr "Presunúť do koša" #~ msgid "Show Menubar" #~ msgstr "Zobraziť ponuku" #, fuzzy #~ msgid "Enable" #~ msgstr "Povoliť regulárne výrazy" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Načítavanie databázy..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Aktualizácia databázy..." #~ msgid "Search..." #~ msgstr "Vyhľadať..." #~ msgid "Add" #~ msgstr "Pridať" #, fuzzy #~ msgid "files?" #~ msgstr "súborov?" #~ msgid "C_ut" #~ msgstr "_Vystrihnúť" #~ msgid "Selected Folder and Files" #~ msgstr "Vybraté súbory a priečinky" fsearch-0.2.3/po/sv.po000066400000000000000000000704231446344336300145550ustar00rootroot00000000000000# Swedish translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2021-10-10 17:04+0000\n" "Last-Translator: Luna Jernberg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.9-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 msgid "Saving…" msgstr "" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "" #: src/fsearch_filter.c:113 msgid "Files" msgstr "" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "" #: src/menus.ui:6 msgid "_File" msgstr "" #: src/menus.ui:9 msgid "New Window" msgstr "" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "" #: src/menus.ui:21 msgid "Open Folder" msgstr "" #: src/menus.ui:29 msgid "Update Database" msgstr "" #: src/menus.ui:35 msgid "Cancel Update" msgstr "" #: src/menus.ui:42 msgid "Close Window" msgstr "" #: src/menus.ui:54 msgid "_Edit" msgstr "" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 msgid "Select All" msgstr "" #: src/menus.ui:74 msgid "Deselect All" msgstr "" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "" #: src/menus.ui:109 msgid "_Search" msgstr "" #: src/menus.ui:126 msgid "_Help" msgstr "" #: src/menus.ui:171 msgid "Open _With" msgstr "" #: src/menus.ui:185 msgid "_Open Folder" msgstr "" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "" fsearch-0.2.3/po/te.po000066400000000000000000001266261446344336300145440ustar00rootroot00000000000000# Telugu translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.58-6c306-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-09-09 07:36+0000\n" "Last-Translator: akash rao \n" "Language-Team: Telugu \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "ఎఫ్ సర్చ్" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "పనితనం మరియు ఆధునిక ఫీచర్ లు కలిగిఉన్న ఫైల్ లు వెతికే అప్లికేషన్" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "సర్చ్;ఎఫ్ సర్చ్; ఫైల్ లు;ఫోల్డరు లు;సంగీతం;వీడియో;డాక్యుమెంట్లు;కనుగొను;పనిముట్టు;సమస్తమూ;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 #, fuzzy #| msgid "Exclude hidden files and folders" msgid "Exclude certain files and folders" msgstr "కనపడని ఫైల్ లనీ ఫోల్డర్ లనీ చేర్చకుము" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "డేటాబేస్ ని తెస్తున్నాము…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "" "మీ సేవలు కొనియాడుటకు ఈ వాక్యం కలదు. అనువాదకులలో ఒకరిగా మీరు గుర్తింపు పొందదలచిన యెడల, మీ పేరుని " "అనువాదిత వాక్యములో చేర్చండి. వేరువేరు పేర్ల నడుమ కొత్త లైను సంజ్ఞ ఉండవలెను." #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "పనిచేయు తత్వము మరియు ఆధునిక ఫీచర్ లు గల అన్వేషణా పనిముట్టు" #: src/fsearch.c:905 #, fuzzy msgid "Open a new application window" msgstr "మరొక అప్లికేషను తో తెరువుము" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "వెతుకు బటన్ ని చూపుము" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "డేటాబేస్ ని ఆధునికీకరణ చేయుము" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "వర్షన్ సమాచారము చూపించుము" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "డేటాబేస్ ని తెస్తున్నాము…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "ఫైల్ లని తీసివేస్తున్నాము…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "డేటాబేస్ ని తెస్తున్నాము…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Failed to open file" msgid "Failed to build open command" msgstr "ఫైల్ తెరవలేకపోయాము" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 #, fuzzy msgid "Failed to get application information" msgstr "మరొక అప్లికేషను తో తెరువుము" #: src/fsearch_file_utils.c:160 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get default display" msgstr "ఫైల్ తెరవలేకపోయాము" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get path" msgstr "ఫైల్ తెరవలేకపోయాము" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Failed to open file" msgid "Failed to get parent path" msgstr "ఫైల్ తెరవలేకపోయాము" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "ఫోల్డరులు" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "అన్నీ" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "ఫోల్డరులు" #: src/fsearch_filter.c:113 msgid "Files" msgstr "ఫైల్ లు" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 #, fuzzy msgid "_Cancel" msgstr "అప్డేట్" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "పేరు" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "దారి లో వెతుకుము" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 #, fuzzy #| msgid "Match Case" msgid "Match case" msgstr "పెద్ద లేక చిన్న అక్షరములుగా చేయుము" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "ఖాళీ డేటాబేస్" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "ఫోల్డరులు" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "డేటాబేస్ ని తెస్తున్నాము…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "ఇందుకు ఎక్కువ సమయం పట్టదు." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "డేటాబేస్ ని అప్డేట్ చేస్తున్నాము…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "ఇందుకు కొంత సమయం పట్టవచ్చు." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "ఖాళీ ప్రశ్న" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Ctrl + F వత్తి టైప్ చేయడం ఆరంభించండి" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "ఫలితాలు లేవు" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "ఇంకొక వెతుకులాటని ప్రయత్నించుము" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "ఇష్టాలు" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "చీకటి థీం ని చైతన్య పరచండి" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "డెసిమల్ యూనిట్ ల బదులుగా బైనరీ యూనిట్ లని ఉపయోగించుము" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "కిటికీ కొలతలని గుర్తు పెట్టుకొనుము" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "కీబోర్డు షార్టుకట్ లు లేక మెన్యూ లోని విషయము ల తో" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "డబుల్ క్లిక్ తో" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "ఫైల్ ని విజయవంతముగా తెరిచిన పిమ్మట ప్రవర్తన:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "చిన్నదిగా చేయుము" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "మూయుము" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "కాంతివంతముగా చేసిన వెతికే టర్మ్ లని చూపించుము" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "పనిముట్టు సలహాలని చూపించుము" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "పేరు అను నిలువు వరస లో ఐకాన్ లని చూపించుము" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "నిలువు వరస కాంఫిగరేషన్ ని గుర్తు పెట్టుకొనుము" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "వరుసలో పేర్చు క్రమమును గుర్తు పెట్టుకొనుము" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "దారి యొక్క నిలువు వరస లో డబుల్ క్లిక్ చేసి దారి ని తెరువుము" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "ఒక క్లిక్ చేసి తెరువుము" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "" #: src/fsearch_preferences.ui:520 #, fuzzy msgid "Show database indexing status" msgstr "ఆరంభములో డేటాబేస్ ని ఆధునికీకరించుము" #: src/fsearch_preferences.ui:541 #, fuzzy msgid "Statusbar:" msgstr "స్టాటస్ బార్ ని చూపుము" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "ఇలాంటి చోట వార్నింగ్ సూచనలు చూపుము:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "ఫైల్ / ఫోల్డరు ని తెరవలేకున్నాము" #: src/fsearch_preferences.ui:615 #, fuzzy msgid "Dialogs:" msgstr "సూచనలు" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "ఇంటర్ఫేస్" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "ప్రశ్నలో దారులను విడదీయు సూచికలు ఉన్నపుడు దారిలో వెతుకుము" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "టైపు చేస్తూ వెతకండి" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "వెతుకులాట ఖాళీగా ఉన్నపుడు ఫలితాలను మరుగు పరచుము" #: src/fsearch_preferences.ui:701 #, fuzzy msgid "Match case when query contains at least one upper case character" msgstr "ప్రశ్నలో కనీసం ఒక్క పెద్ద అక్షరమైననూ ఉన్నయెడల మిగతా అన్నీ అందులోకి మార్చుము" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "ఫోల్డరులు" #: src/fsearch_preferences.ui:785 #, fuzzy msgid "Remove selected filter" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_preferences.ui:801 #, fuzzy msgid "Edit selected filter" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "వడపోతని చూపుము" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "వెతుకులాట" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "ఆరంభములో డేటాబేస్ ని ఆధునికీకరించుము" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "అప్డేట్" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "చేర్చుము" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "వైల్డుకార్డు లని సపోర్ట్ చేస్తుంది. చాలా విషయాలని ';' తో విడదీయండి" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "ఈ ఫైల్ లని చేర్చకుము:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "ఉదా. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "కనపడని ఫైల్ లనీ ఫోల్డర్ లనీ చేర్చకుము" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "చేర్చకుము" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "డేటాబేస్" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 #, fuzzy msgid "Help" msgstr "_సహాయం" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "Select folder" msgstr "వడపోతని ఎంచుకొనుము" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 #, fuzzy msgid "_Select" msgstr "అన్ని ఎంపికలూ తీసివేయుము" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "ఫోల్డరులు" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "పనిచేస్తోంది" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "పథము" #: src/fsearch_preferences_widgets.c:227 #, fuzzy #| msgid "Open File(s)" msgid "One Filesystem" msgstr "ఫైల్ (ల) ని తెరువుము" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "పేరు" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 #, fuzzy #| msgid "Empty Query" msgid "Query" msgstr "ఖాళీ ప్రశ్న" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d విషయములు" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d విషయములు" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "డేటాబేస్ ని తెస్తున్నాము…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 వస్తువులు" #: src/fsearch_statusbar.ui:106 #, fuzzy msgid "Cancel" msgstr "అప్డేట్" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy msgid "Number of selected folders" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy msgid "Number of selected files" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 #, fuzzy msgid "Cancel database update" msgstr "ఆరంభములో డేటాబేస్ ని ఆధునికీకరించుము" #: src/fsearch_statusbar.ui:369 #, fuzzy msgid "Number of database items" msgstr "వెతుకులాట ఫలితాల సంఖ్య" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(ఖాళీ)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "పెద్ద లేక చిన్న అక్షరం" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "దారి" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "రెజ్ ఎక్స్" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "పరిమాణము" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "రకము" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "మార్చిన తేదీ" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "ఎఫ్ సర్చ్" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "కొత్త కిటికీ" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "డేటాబేస్ ని అప్డేట్ చేయుము" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "దారి లో వెతుకుము" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "పెద్ద లేక చిన్న అక్షరములుగా చేయుము" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "RegEx ని చైతన్యం చేయుము" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "స్టాటస్ బార్ ని చూపుము" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "వడపోతని చూపుము" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "వెతుకు బటన్ ని చూపుము" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "గురించి" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "బయటకు" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "వెతుకు…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "వడపోతని ఎంచుకొనుము" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "మీరు నిజంగా %d ఫైల్ (ల) ని తెరవాలని అనుకుంటున్నారా?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "ఫైల్ లని తెరుస్తున్నాము…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "మీరు నిజంగా %d ఫైల్ (ల) ని తీసివేయాలని అనుకుంటున్నారా?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "ఫైల్ లని తీసివేస్తున్నాము…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "ఫైల్ లని చెత్తబుట్టలో వేస్తున్నాము…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "ఫైల్ లని తీసివేస్తున్నాము…" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Moving files to trash…" msgid "Moved %d file(s) to the trash." msgstr "ఫైల్ లని చెత్తబుట్టలో వేస్తున్నాము…" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "మీరు నిజంగా %d ఫైల్ (ల) ని తెరవాలని అనుకుంటున్నారా?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "ఫైల్ లని తెరుస్తున్నాము…" #: src/menus.ui:6 msgid "_File" msgstr "_ఫైలు" #: src/menus.ui:9 msgid "New Window" msgstr "కొత్త కిటికీ" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_తెరువుము" #: src/menus.ui:21 msgid "Open Folder" msgstr "ఫోల్డరుని తెరువుము" #: src/menus.ui:29 msgid "Update Database" msgstr "డేటాబేస్ ని ఆధునికీకరించుము" #: src/menus.ui:35 #, fuzzy msgid "Cancel Update" msgstr "అప్డేట్" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "కొత్త కిటికీ" #: src/menus.ui:54 msgid "_Edit" msgstr "_మార్చుము" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_కాపీ చేయుము" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "" #: src/menus.ui:69 #, fuzzy msgid "Select All" msgstr "అన్ని ఎంపికలూ తీసివేయుము" #: src/menus.ui:74 msgid "Deselect All" msgstr "అన్ని ఎంపికలూ తీసివేయుము" #: src/menus.ui:78 msgid "Invert Selection" msgstr "ఎంపికను మార్చుము" #: src/menus.ui:92 msgid "_View" msgstr "_చూడుము" #: src/menus.ui:109 msgid "_Search" msgstr "_వెతుకులాట" #: src/menus.ui:126 msgid "_Help" msgstr "_సహాయం" #: src/menus.ui:171 msgid "Open _With" msgstr "_తో తెరువుము" #: src/menus.ui:185 msgid "_Open Folder" msgstr "ఫోల్డరు _తెరువుము" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "_చెత్తబుట్ట లో వేయుము" #~ msgid "page0" #~ msgstr "పేజీ0" #~ msgid "page1" #~ msgstr "పేజీ1" #, fuzzy #~ msgid "page2" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page30" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page1" #~ msgid "page18" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page0" #~ msgid "page31" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page32" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page33" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page34" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page35" #~ msgstr "పేజీ0" #~ msgid "Do you want to keep the window open?" #~ msgstr "మీరు కిటికీలని తెరిచే ఉంచదలిచారా?" #~ msgid "_Copy Filepath" #~ msgstr "ఫైలు ఉన్న ప్రాంతానికి దారిని _కాపీ చేయుము" #~ msgid "Update" #~ msgstr "అప్డేట్" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d విషయములు" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "అఖరుసారి అప్డేట్ చేసినపుడు: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_తొలగించుము" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "ఫలితముల సంఖ్యని నియంత్రించుము:" #~ msgid "Background tasks are active." #~ msgstr "వెనక జరిగే పనులు చేతనముగా ఉన్నవి." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "ఇప్పుడు కిటికీ మూసివేయలేము.\n" #~ "కొద్దిసేపు ఆగి ప్రయత్నించుము." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "మార్చు -> ఇష్టాలు -> డేటాబేస్ కి వెళ్ళి, కొన్ని ప్రాంతాలని చేర్చండి" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "పేజీ1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "పేజీ0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "పేజీ0" #~ msgid "system-search" #~ msgstr "సిస్టం-సర్చ్" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_కాపీ చేయుము" #~ msgid "Add…" #~ msgstr "కలుపుము…" #~ msgid "Remove" #~ msgstr "తీసివేయుము" #~ msgid "Follow symbolic links" #~ msgstr "సంజ్ఞాపూరిత లింకులలోకి వెళ్ళుము" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "సమాచారం: ప్రతీ GTK+ థీం లో చీకటి వర్షన్ ఇవ్వనందున,\n" #~ "\"చీకటి థీం ని చైతన్యం చేయుము\" వలన ప్రభావం ఉండకపోవచ్చును." #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "RegEx ని చైతన్యం చేయుము" #~ msgid "Open Containing Folder" #~ msgstr "కలిగి ఉన్న ఫోల్డరుని తెరువుము" #~ msgid "Open File(s) in File Manager" #~ msgstr "ఫైల్ మేనేజరు లోని ఫైల్ (ల) ని తెరువుము" #~ msgid "Move to Trash" #~ msgstr "చెత్తబుట్టలో వేయుము" #~ msgid "Show Menubar" #~ msgstr "మెన్యూ బార్ ని చూపుము" fsearch-0.2.3/po/tr.po000066400000000000000000001520221446344336300145460ustar00rootroot00000000000000# Turkish translations for FSearch package # Turkish translation for FSearch. # Copyright (C) 2017 Şeref Erçelik, SEGO # This file is distributed under the same license as the FSearch package. # , 2017. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-16 20:17+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Performans ve gelişmiş özelliklere odaklanan bir dosya arama uygulaması" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" "arama;dosyalar;klasörler;müzik;belgeler;bul;araç;her şey;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Grafiksel dosya arama uygulaması" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch, dosya ve klasörleri olabildiğince kolay ve hızlı bulmanıza yardımcı " "olur. Sadece birkaç harf yazın ve arama sonuçları neredeyse anında " "görünecektir." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Aramayı olabildiğince verimli ve güçlü kılan birçok özellik vardır. Örneğin:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Büyük/küçük harf durumunu yok say (örn. \"fsearch\" arandığında \"FSearch\" " "ile de eşleşecektir)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Düzenli ifadeler" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Joker karakter desteği" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Filtreleme desteği (örn. yalnızca ses dosyalarını ara)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Belirli dosya ve klasörleri dışarıda bırak" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "Ada, yola, boyuta, değiştirme tarihine ve uzantıya göre hızlı sıralama" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Not: Flatpak'ın korumalı alanı nedeniyle, FSearch sisteminizdeki her dosyayı " "bulamaz." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Öntanımlı kullanıcı arayüzü düzeni" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "GNOME HIG'yi daha yakından takip eden bir düzen" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "İlk sürüm." #: src/fsearch.c:243 msgid "Saving…" msgstr "Kaydediliyor…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Oğuz Ersen" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Performansa ve gelişmiş özelliklere odaklanan bir arama programı" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Yeni bir uygulama penceresi aç" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Uygulama tercihlerini göster" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Arama kalıbını ayarla" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Veri tabanını güncelle ve çık" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Sürüm bilgilerini yazdır ve çık" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Klasörler yükleniyor…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Dosyalar yükleniyor…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Sıralanıyor…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Klasör açılırken hata oluştu" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "Aç komutu oluşturulamadı" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Masaüstü dosyası başlatılırken hata oluştu" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Uygulama bilgileri alınamadı" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Öntanımlı ekran alınamadı" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Dosya kaldırılırken hata oluştu" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Yol alınamadı" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Masaüstü dosyası başlatılırken hata oluştu" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "İçerik türü için bilgi alınırken hata oluştu" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Kayıtlı öntanımlı uygulama yok" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Üst klasör açılırken hata oluştu" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "Üst yol alınamadı" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Klasör" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Bilinmeyen Tür" #: src/fsearch_filter.c:111 msgid "All" msgstr "Hepsi" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Klasörler" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Dosyalar" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Uygulamalar" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Arşivler" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Ses" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Belgeler" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Resimler" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Videolar" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Makro adları `:` karakteri içermemelidir." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_İptal" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Tamam" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Filtreyi düzenle" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Ad:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Bu filtrenin benzersiz adı" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Benzersiz filtre adı" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Yol içinde ara" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Düzenli ifadeleri etkinleştir" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Büyük/küçük harfe duyarlı" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Sorgu:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Makro:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Bu filtre için makro. Bir makro, metnini ve ardından ':' yazarak arama " "girdisinden bu filtreye erişmenizi sağlar.\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Özellikler…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Diğer Uygulama…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "Boş Veri Tabanı" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Klasör ekle" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Veri Tabanı Yükleniyor…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Bu uzun sürmeyecek." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Veri Tabanı Güncelleniyor…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Bu biraz zaman alacak." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Boş Sorgu" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Ctrl+F tuşlarına basarak yazmaya başlayın." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Sonuç Bulunamadı" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Farklı bir arama deneyin" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Sonuçlar sıralanıyor…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Tercihler" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Koyu temayı etkinleştir" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "İstemci tarafı süslemelerini etkinleştir (yeniden başlatma gerektirir)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Onluk birimler yerine ikilik birimler kullan" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Pencere boyutunu hatırla" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Escape'te Çık" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "klavye kısayolları veya menü girdileri ile" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "çift tıklama ile" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Bir dosyayı başarıyla açtıktan sonraki davranış:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Hiçbiri" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Küçült" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Kapat" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Genel:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Vurgulanan arama terimlerini göster" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Araç ipuçlarını göster" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Ad sütununda simgeleri göster" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Sütun yapılandırmasını hatırla" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Sıralama düzenini hatırla" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Yol sütununda çift tıklama ile yolu aç" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Açmak için tek tıklama" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Masaüstü dosyalarını başlat" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Sonuçlar:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Veri tabanı indeksleme durumunu göster" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Durum çubuğu:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Uyarı pencerelerini göster:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "dosya / klasör açılamadı" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "İletişim kutuları:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Arayüz" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Sorgu yol ayırıcıları içerdiğinde yolda ara" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Yazarken ara" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Arama boş olduğunda sonuçları gizle" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" "Sorgu en az bir büyük harf karakteri içerdiğinde küçük/büyük harf durumunu " "eşleştir" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Yeni filtre ekle" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Seçili filtreyi kaldır" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Seçili filtreyi düzenle" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Öntanımlı filtreleri geri yükle" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Filtre:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Ara" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Başlangıçta veri tabanını güncelle" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Güncelleme aralığı" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "saat ve" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "dakika" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Veri tabanına dahil edilecek yolu ekle\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Seçili yolu kaldır" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Dahil et" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Veri tabanının dışında bırakılacak yolu ekle" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Joker karakterleri destekler. Çoklu girdiler ';' ile ayrılmalıdır" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Dosyaları dışarıda bırak:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "örn: \".git,*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Gizli dosya ve klasörleri dışarıda bırak" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Dışarıda bırak" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "Veri tabanı" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Koyu temayı etkinleştir:\n" "\n" "Etkinleştirilirse, sistem temasından uygulama için daha koyu bir tarz " "kullanması istenir (örn. açık renkli metin üzerinde koyu kullanıcı " "arayüzü ögeleri).\n" "\n" "Tüm sistem temalarının böyle koyu bir çeşit sağlamadığını, bu nedenle bu " "ayarın etkinleştirilmesinin bir etkisi olmayabileceğini unutmayın." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "İstemci tarafı süslemelerini etkinleştir:\n" "\n" "Etkinleştirilirse, arama girdisi ve ana menü pencerenin başlık çubuğunda " "görüntülenir.\n" "\n" "Devre dışı bırakılırsa ana menü, altında arama girdisi bulunan bir menü " "çubuğu olarak görüntülenir.\n" "Bu, daha geleneksel bir kullanıcı arayüzü düzenine benzer ve biraz daha " "fazla yer kaplar." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Onluk birimler yerine ikilik birimler kullan:\n" "\n" "Bu ayar, dosya boyutlarının nasıl görüntüleneceğini denetler.\n" "\n" "\t• İkilik birimler: Bu, ikilik IEC ön ekleri anlamına gelir (örn. " "1 KiB = 1024 bayt)\n" "\t• Onluk birimler: Bu, onluk SI ön ekleri anlamına gelir (örn. 1 " "kB = 1000 bayt)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Pencere boyutunu hatırla:\n" "\n" "Etkinleştirilirse, bir FSearch penceresi açtığınızda önceki oturumun pencere " "boyutu geri yüklenecektir.\n" "\n" "Bazı pencere yöneticilerinin bu isteği yok saydığını ve pencereyi farklı bir " "boyuta sahip olmaya zorladığını unutmayın." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Bir dosyayı başarıyla açtıktan sonraki davranış:\n" "\n" "Bir dosya/klasör başarıyla açıldığında, aşağıdaki eylemlerden biri " "gerçekleştirilebilir:\n" "\t• Hiçbiri: Hiçbir şey olmaz.\n" "\t• Küçült: Seçili olan FSearch penceresi küçültülür. \n" "\t• Kapat: FSearch'ten çık.\n" "\n" "Dosya aşağıdaki yollarla açıldığında bu eylemlerin tetiklenip " "tetiklenmeyeceğini yapılandırabilirsiniz:\n" "\t• klavye kısayolları veya menü girdileri ve/veya\n" "\t• fareyle tıklama" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Vurgulanan arama terimlerini göster:\n" "\n" "Etkinleştirilirse, arama terimleri sonuçlar görünümünde vurgulanacaktır. " "Örneğin \"foo\" için arama yaptığınızda, dosya/klasör adlarında foo " "teriminin tüm görünümleri kalın karakterlerle vurgulanacaktır:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "Bu, yıldız işaretiyle başlayan veya biten düzenli ifadeler ve joker karakter " "ifadeleri için de işe yarar. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Araç ipuçlarını göster:\n" "\n" "Etkinleştirilirse, sonuçlar görünümü odaklanılan dosyanın/klasörün tam " "yolunu küçük bir ipucu penceresinde gösterecektir." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Ad sütununda simgeleri göster:\n" "\n" "Etkinleştirilirse, dosya/klasör simgeleri ad sütununda gösterilecektir." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Sütun yapılandırmasını hatırla:\n" "\n" "Etkinleştirilirse, bir FSearch penceresi açtığınızda önceki oturumun sonuç " "görünümünün sütun yapılandırması geri yüklenecektir. Bu, tüm sütunların " "boyutunu ve görünürlüğünü içerir." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Sıralama düzenini hatırla:\n" "\n" "Etkinleştirilirse, bir FSearch penceresi açtığınızda önceki oturumun " "sonuçlar görünümünün sıralama düzeni geri yüklenecektir." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Yol sütununda çift tıklama ile yolu aç:\n" "\n" "Etkinleştirilirse, yol sütununa çift tıklamak seçili yolu açacaktır." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Açmak için tek tıklama:\n" "\n" "Etkinleştirilirse, tek bir tıklama seçilen dosya/klasörü açacaktır. Bu ayar " "etkinken yalnızca bir dosya/klasör seçmek istiyorsanız, Ctrl tuşuna " "basılı tutarak dosyaya/klasöre tıklamanız gerekir." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Veri tabanı indeksleme durumunu göster:\n" "\n" "Etkinleştirilirse, indekslenmekte olan yol durum çubuğunda görüntülenir." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Uyarı pencerelerini göster:\n" "\n" "Etkinleştirilirse, bir dosya veya klasör açılamadığında bir uyarı penceresi " "görüntülenir." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Sorgu yol ayırıcıları içerdiğinde yolda ara:\n" "\n" "Etkinleştirilirse, yol ayırıcıları (yani \"/\") içeren arama terimleri, bir " "dosya veya klasörün tam yoluyla otomatik olarak eşleştirilecektir." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Sorgu en az bir büyük harf karakteri içerdiğinde küçük/büyük harf " "durumunu eşleştir:\n" "\n" "Etkinleştirilirse, en az bir büyük harf karakteri içeren arama terimleri, " "büyük/küçük harfe duyarlı bir aramayı tetikleyecektir. Bu, Foo gibi " "bir arama teriminin FooBar.txt ile eşleşeceği ancak foobar.txt " "ile eşleşmeyeceği anlamına gelir." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Arama boş olduğunda sonuçları gizle:\n" "\n" "Etkinleştirilirse, arama girdisi boş olduğunda hiçbir arama sonucu " "görüntülenmez.\n" "\n" "Devre dışı bırakılırsa, arama girdisi boş olduğunda tüm dosyalar ve " "klasörler görüntülenecektir." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Yazarken ara:\n" "\n" "Etkinleştirilirse, arama her tuşa basıldığında otomatik olarak güncellenir.\n" "\n" "Devre dışı bırakılırsa, arama yalnızca Enter tuşuna veya ara " "düğmesine bastığınızda güncellenir. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Başlangıçta veri tabanını güncelle:\n" "\n" "Etkinleştirilirse, FSearch başlatıldığında veri tabanı arka planda otomatik " "olarak güncellenecektir." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Dahil edilen klasörler:\n" "\n" "Bu liste, veri tabanına dahil etmek istediğiniz tüm klasörleri içerir.\n" "\n" "• Etkin: Etkinleştirilirse, yol aranacak veri tabanına dahil " "edilecektir.\n" "• Yol: Dahil edilecek tam yol.\n" "• Bir Dosya Sistemi: Etkinleştirilirse, FSearch bu klasör için dosya " "sistemi sınırlarını aşmayacaktır" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Klasörü veri tabanına ekle:\n" "\n" "Bu düğme, arama için veri tabanına dahil etmek istediğiniz bir klasörü " "seçebileceğiniz bir iletişim kutusu açar." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Seçili satırı kaldır:\n" "\n" "Bu, seçilen klasörü dahil edilen klasörler listesinden kaldırır." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Dışarıda bırakılan klasörler:\n" "\n" "Bu liste, veri tabanının dışında bırakmak istediğiniz tüm klasörleri " "içerir.\n" "\n" "\t• Etkin: Etkinleştirilirse, yol veri tabanının dışında bırakılacak " "ve aranamayacaktır.\n" "\t• Yol: Dışarıda bırakılacak tam yol." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Klasörü veri tabanının dışında bırak:\n" "\n" "Bu düğme, veri tabanının dışında bırakmak istediğiniz bir klasörü " "seçebileceğiniz bir iletişim kutusu açar." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Seçili satırı kaldır:\n" "\n" "Bu, seçilen klasörü dışarıda bırakılan klasörler listesinden kaldırır." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Dosyaları ve klasörleri veri tabanının dışında bırak:\n" "\n" "Bu, veri tabanının dışında bırakmak istediğiniz dosyaların (veya " "klasörlerin) noktalı virgülle ayrılmış bir listesidir. Örneğin .git;." "cache;*.swp, .git veya .cache adına sahip ya da .swp ile biten tüm dosya veya klasörleri dışarıda bırakacaktır." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Gizli dosya ve klasörleri dışarıda bırak:\n" "\n" "Etkinleştirilirse, gizli dosyalar ve klasörler, (yani, nokta karakteriyle " "başlayan tüm dosyalar veya klasörler), veri tabanının dışında " "bırakılacaktır." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" "Ne yaptığına dair ayrıntılı bir açıklama görmek için bir ayara odaklanın." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Veri tabanını belirli bir zaman aralığında düzenli olarak güncelle:\n" "\n" "Etkinleştirildiğinde ve FSearch çalıştığı sürece, veri tabanı belirtilen " "zaman aralığında düzenli olarak güncellenecektir.\n" "\n" "Veri tabanını FSearch çalışmıyorken bile arka planda güncellemek " "istiyorsanız, güncellemeyi düzenli olarak tetiklemek için cron veya systemd " "zamanlayıcıları gibi araçlar kullanmalısınız:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" ".desktop dosyalarını başlat:\n" "\n" "Etkinleştirilirse, bir .desktop dosyasını seçmek, o dosyada " "tanımlanan uygulamayı başlatacaktır. Bu şekilde FSearch bir uygulama " "başlatıcısı gibi davranabilir. Diğer türlü, .desktop dosyası " "genellikle bir metin düzenleyici olan bu tür dosyalar için öntanımlı " "işleyici ile açılacaktır." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Filtreler:\n" "\n" "Bu, kullanılabilir tüm filtrelerin bir listesidir. Filtre, önceden " "tanımlanan bir aramadır.\n" "\n" "\t• Ad: Filtre için benzersiz ve açıklayıcı bir tanımlayıcı\n" "\t• Makro: Makro metnini ve ardından ':' yazarak filtreyi " "istendiğinde etkinleştirebilirsiniz\n" "\t• Sorgu: Veri tabanının filtrelenmesi gereken arama terimi" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Yeni filtre ekle:\n" "\n" "Bu düğme, yeni bir filtre düzenleyebileceğiniz bir iletişim kutusu açar." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Seçili filtreyi kaldır:\n" "\n" "Bu düğme o anda seçili olan filtreyi kaldırır." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Seçili filtreyi düzenle:\n" "\n" "Bu düğme, seçili filtreyi düzenleyebileceğiniz bir iletişim kutusu açar." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Öntanımlı filtreleri geri yükle:\n" "\n" "Bu düğme, öntanımlı filtre yapılandırmasını geri yükler.\n" "\n" "⚠ Kullanıcı tarafından oluşturulan veya düzenlenen tüm filtreler " "kaybolacaktır! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Escape'te Çık:\n" "\n" "Etkinleştirilirse, Escape tuşuna basıldığında FSearch penceresinin simge " "durumuna küçültülmesi yerine çıkış yapılacaktır." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Yardım" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Klasör seç" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Seç" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Filtre ekle" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Etkin" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Yol" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Bir Dosya Sistemi" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Ad" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Makro" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Sorgu" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d Öge" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Öge" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Sorgulanıyor…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Yükleniyor…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Taranıyor…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Arama Sonucu Sayısı" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 Öge" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "İptal" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "İndeks:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Seçili klasör sayısı" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Seçili dosya sayısı" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Veri tabanı güncellemesini iptal et" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Veri tabanı ögelerinin sayısı" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(boş)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Arama terimi büyük harf karakterleri içeriyor.\n" "Büyük/küçük harf duyarlılığı bu terim için geçici olarak " "etkinleştirildi." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "DURUM" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Arama terimi yol ayırıcıları içeriyor.\n" "Yol içinde ara bu terim için geçici olarak etkinleştirildi." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "YOL" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "DÜZENLİ İFADE" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Boyut" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Tür" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Uzantı" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Değiştirilme Tarihi" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Tür'e göre sıralama, birçok sonuçla birlikte birkaç saniye " "sürebilir.\n" "\n" "Bu sıralama düzeni kalıcı değildir, arama terimi değiştiğinde " "sıfırlanacaktır." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch Çevrim İçi" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Bağış Yap" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Forum" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Hata Bildirimleri ve Özellik İstekleri" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub Sponsorları" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Yeni pencere" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Veri tabanını güncelle" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Dosya Yolunda Ara" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Büyük/Küçük Harfe Duyarlı" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Düzenli İfadeleri Etkinleştir" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Durum Çubuğunu Göster" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Filtreyi Göster" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Arama Düğmesini Göster" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Hakkında" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Çık" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Ara…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Bir Filtre Seç" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "%d dosyayı gerçekten açmak istiyor musunuz?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Dosyalar Açılıyor…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "%d dosyayı gerçekten kaldırmak istiyor musunuz?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Dosyalar siliniyor…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Dosyalar çöp kutusuna taşınıyor…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Bir şeyler yanlış gitti." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "%d dosya silindi." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "%d dosya çöp kutusuna taşındı." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "Veri tabanının bu değişikliklerden haberi olması için güncellenmesi " "gerekiyor! Bu durum gelecekteki güncellemelerle düzeltilecektir." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "%d dosya özelliği penceresini gerçekten açmak istiyor musunuz?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Dosya özellikleri açılıyor…" #: src/menus.ui:6 msgid "_File" msgstr "_Dosya" #: src/menus.ui:9 msgid "New Window" msgstr "Yeni Pencere" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Aç" #: src/menus.ui:21 msgid "Open Folder" msgstr "Klasörü Aç" #: src/menus.ui:29 msgid "Update Database" msgstr "Veri Tabanını Güncelle" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Güncellemeyi İptal Et" #: src/menus.ui:42 msgid "Close Window" msgstr "Pencereyi Kapat" #: src/menus.ui:54 msgid "_Edit" msgstr "_Düzenle" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Kopyala" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Ke_s" #: src/menus.ui:69 msgid "Select All" msgstr "Tümünü Seç" #: src/menus.ui:74 msgid "Deselect All" msgstr "Tümünün Seçimini Kaldır" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Seçimi Tersine Çevir" #: src/menus.ui:92 msgid "_View" msgstr "_Görüntüle" #: src/menus.ui:109 msgid "_Search" msgstr "_Ara" #: src/menus.ui:126 msgid "_Help" msgstr "_Yardım" #: src/menus.ui:171 msgid "Open _With" msgstr "Birlikte _Aç" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_Klasörü Aç" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Metin Olarak Kopyala" #: src/menus.ui:217 msgid "Path + Name" msgstr "Yol + Ad" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "_Çöp Kutusuna Taşı" #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Veri tabanı güncellemesini iptal et\n" #~ " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Bir Filtre Seç\n" #~ " " #~ msgid "" #~ "Search\n" #~ " " #~ msgstr "" #~ "Ara\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Veri tabanına dahil edilecek yolu ekle\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Veri tabanına dahil edilecek yolu ekle\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Veri tabanına dahil edilecek yolu ekle\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Veri tabanına dahil edilecek yolu ekle\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Veri tabanına dahil edilecek yolu ekle\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Veri tabanına klasör ekle:\n" #~ "\n" #~ " Bu düğme, aramak için veri tabanına dahil etmek " #~ "istediğiniz bir klasörü seçebileceğiniz bir iletişim\n" #~ " kutusu açar.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Arama terimi büyük harf karakterleri içeriyor.\n" #~ "Büyük/Küçük Harfe Duyarlı seçeneği bu terim için geçici olarak " #~ "etkinleştirildi." #~ msgid "page0" #~ msgstr "sayfa0" #~ msgid "page1" #~ msgstr "sayfa1" #~ msgid "page2" #~ msgstr "sayfa2" #~ msgid "page30" #~ msgstr "sayfa30" #~ msgid "page18" #~ msgstr "sayfa18" #~ msgid "page31" #~ msgstr "sayfa31" #~ msgid "page32" #~ msgstr "sayfa32" #~ msgid "page33" #~ msgstr "sayfa33" #~ msgid "page34" #~ msgstr "sayfa34" #~ msgid "page35" #~ msgstr "sayfa35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Dahil edilen klasörler:\n" #~ "\n" #~ " Bu liste, veri tabanına dahil etmek istediğiniz tüm " #~ "klasörleri içerir.\n" #~ "\n" #~ " • Etkin: Etkinleştirilirse, yol aramak için " #~ "veri tabanına dahil edilecektir.\n" #~ " • Yol: Dahil edilecek tam yol.\n" #~ " • Güncelle: Bu ayar, belirli yolları " #~ "güncellemenin dışında bırakmak istiyorsanız\n" #~ " yararlıdır\n" #~ " (örneğin, fazla değişmeyen yavaş bir USB " #~ "sürücüsünün yolu)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Seçili satırı kaldır:\n" #~ "\n" #~ " Bu, seçilen klasörü dahil edilen klasörler " #~ "listesinden kaldırır.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Pencereyi açık tutmak istiyor musunuz?" #~ msgid "_Copy Filepath" #~ msgstr "_Dosya Yolunu Kopyala" #~ msgid "Building lookup list…" #~ msgstr "Arama listesi oluşturuluyor…" #~ msgid "Update" #~ msgstr "Güncelle" #~ msgid "≥%'d Items" #~ msgstr "≥%'d Öge" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Son Güncelleme Tarihi: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "Sil" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Sonuç sayısını sınırla:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Sonuç sayısını sınırla:\n" #~ "\n" #~ "Etkinleştirilirse, arama sonuçları belirtilen sayıyla " #~ "sınırlandırılacaktır.\n" #~ "\n" #~ "Çok sayıda sonucun görüntülenmesi, özellikle liste ada göre " #~ "sıralanmadığında performansı önemli derecede etkiler. Bu, sonraki " #~ "sürümlerde iyileştirilecek." #~ msgid "Background tasks are active." #~ msgstr "Arka plan görevleri etkin." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Şu anda pencereyi kapatmak mümkün değil.\n" #~ "Lütfen biraz bekleyip tekrar deneyin." #~ msgid "label" #~ msgstr "etiket" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Düzenle → Tercihler → Veri Tabanı seçeneğine gidin ve birkaç konum " #~ "ekleyin" #~ msgid "page4" #~ msgstr "sayfa4" #~ msgid "page6" #~ msgstr "sayfa6" #~ msgid "page7" #~ msgstr "sayfa7" #~ msgid "page8" #~ msgstr "sayfa8" #~ msgid "page9" #~ msgstr "sayfa9" #~ msgid "page10" #~ msgstr "sayfa10" #~ msgid "page11" #~ msgstr "sayfa11" #~ msgid "page12" #~ msgstr "sayfa12" #~ msgid "page13" #~ msgstr "sayfa13" #~ msgid "page14" #~ msgstr "sayfa14" #~ msgid "page15" #~ msgstr "sayfa15" #~ msgid "page16" #~ msgstr "sayfa16" #~ msgid "page17" #~ msgstr "sayfa17" #~ msgid "page19" #~ msgstr "sayfa19" #~ msgid "page20" #~ msgstr "sayfa20" #~ msgid "page21" #~ msgstr "sayfa21" #~ msgid "page22" #~ msgstr "sayfa22" #~ msgid "page23" #~ msgstr "sayfa23" #~ msgid "page24" #~ msgstr "sayfa24" #~ msgid "page25" #~ msgstr "sayfa25" #~ msgid "page26" #~ msgstr "sayfa26" #~ msgid "page27" #~ msgstr "sayfa27" #~ msgid "page28" #~ msgstr "sayfa28" #~ msgid "page29" #~ msgstr "sayfa29" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Kopyala" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Karanlık temayı etkinleştir seçeneği bir etkiye sahip " #~ "olmayabilir.\n" #~ "Bazı platformlar karanlık temayı desteklemez ve diğerleri her zaman " #~ "öntanımlı olarak karanlık temalar kullanır." #~ msgid "Add…" #~ msgstr "Ekle…" #~ msgid "Remove" #~ msgstr "Sil" #~ msgid "Follow symbolic links" #~ msgstr "Sembolik Linkleri Takip Et" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "BİLGİ: \"Karanlık Temayı Aktifleştir\" çalışmayabilir,\n" #~ "Çünkü her GTK + teması karanlık temayı desteklemiyor." #~ msgid "Enable menubar" #~ msgstr "Menü çubuğunu etkinleştir" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "BİLGİ: Menü çubuğunun etkinleştirilmesi/devre dışı bırakılması FSearch " #~ "yeniden başlatıldıktan sonra etkili olur.\n" #~ msgid "Open Containing Folder" #~ msgstr "Dosyayı İçeren Klasörü Aç" #~ msgid "Open File(s) in File Manager" #~ msgstr "Dosyayı Dosya Yöneticisi İle Aç" #~ msgid "Move to Trash" #~ msgstr "Çöp Sepetine Taşı" #~ msgid "Show Menubar" #~ msgstr "Menü Çubuğunu Göster" #~ msgid "Enable" #~ msgstr "Etkinleştir" #~ msgid "Loading Database..." #~ msgstr "Veri Tabanı Yükleniyor..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Veri Tabanı Güncelleniyor.." #~ msgid "Add..." #~ msgstr "Ekle..." #~ msgid "Search..." #~ msgstr "Ara.." #~ msgid "Add" #~ msgstr "Ekle" #~ msgid "files?" #~ msgstr "dosyalar?" #~ msgid "C_ut" #~ msgstr "_Kes" fsearch-0.2.3/po/tzm.po000066400000000000000000001003371446344336300147350ustar00rootroot00000000000000# Language tzm translations for fsearch package. # Copyright (C) 2020 Christian Boxdörfer # This file is distributed under the same license as the fsearch package. # Christian , 2020. # msgid "" msgstr "" "Project-Id-Version: fsearch 0.1beta4.409-8e25-dirty\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2020-11-04 21:26+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Tamazight (Central Atlas) \n" "Language: tzm\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n >= 2 && (n < 11 || n > 99);\n" "X-Generator: Weblate 4.3.2-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "rzu;fsearch;ifuyla;isdawen;aẓawan;avidyu;inatamen;af;imis;maṛṛa;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "" #: src/fsearch.c:243 #, fuzzy msgid "Saving…" msgstr "Afran..." #: src/fsearch.c:430 msgid "translator-credits" msgstr "Ubuεli ḥakim" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "" #: src/fsearch.c:907 #, fuzzy #| msgid "Show Search Button" msgid "Set the search pattern" msgstr "Ssemal abra n urezzu" #: src/fsearch.c:908 #, fuzzy msgid "Update the database and exit" msgstr "Sesdɣi tisila n isefka" #: src/fsearch.c:909 #, fuzzy msgid "Print version information and exit" msgstr "Ssemal umalen n tleqqimt" #: src/fsearch_database.c:648 #, fuzzy msgid "Loading folders…" msgstr "Azdam n tsila n isefka…" #: src/fsearch_database.c:656 #, fuzzy msgid "Loading files…" msgstr "Tukkesa n ifuyla…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 #, fuzzy msgid "Sorting…" msgstr "Afran..." #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "" #: src/fsearch_file_utils.c:135 #, fuzzy #| msgid "Single click to open" msgid "Failed to build open command" msgstr "Yan ukliki i uṛeẓẓum" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 #, fuzzy #| msgid "Single click to open" msgid "Failed to get path" msgstr "Yan ukliki i uṛeẓẓum" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "" #: src/fsearch_file_utils.c:350 #, fuzzy #| msgid "Single click to open" msgid "Failed to get parent path" msgstr "Yan ukliki i uṛeẓẓum" #: src/fsearch_file_utils.c:407 #, fuzzy msgid "Folder" msgstr "Isdawen" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "" #: src/fsearch_filter.c:111 msgid "All" msgstr "Maṛṛa" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Isdawen" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Ifuyla" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Imesli" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Inatamn" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Tiwlafin" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Ividyuten" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Sser" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_WAX" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "" #: src/fsearch_filter_editor.ui:50 #, fuzzy #| msgid "Name" msgid "Name:" msgstr "Isem" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "" #: src/fsearch_filter_editor.ui:73 #, fuzzy #| msgid "Search in Path" msgid "Search in path" msgstr "Rzu g uɣaras" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "" #: src/fsearch_overlay.ui:60 #, fuzzy msgid "Add folders" msgstr "Isdawen" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Azdam n tsila n isefka…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "asedɣi n tsila n isefka…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "" #: src/fsearch_overlay.ui:256 #, fuzzy #| msgid "Press Ctrl + F and start typing" msgid "Press Ctrl + F and start typing." msgstr "Adr Ctrl + F i usenti n tirra" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "" #: src/fsearch_overlay.ui:368 #, fuzzy msgid "Sorting results…" msgstr "Afran..." #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "s sin iklikn" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Walu" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Ssemẓi" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Rgel" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Anatam:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Yan ukliki i uṛeẓẓum" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Tiyufa:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Anegrudm" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Rzu adday ttarad" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "" #: src/fsearch_preferences.ui:769 #, fuzzy msgid "Add new filter" msgstr "Isdawen" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "" #: src/fsearch_preferences.ui:801 #, fuzzy #| msgid "Select a Filter" msgid "Edit selected filter" msgstr "Dɣer kra n usettay" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "" #: src/fsearch_preferences.ui:847 #, fuzzy #| msgid "Show Filter" msgid "Filter:" msgstr "Ssemal tastayt" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Rzu" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Ssedɣi tisila n isefka akd usenti" #: src/fsearch_preferences.ui:907 #, fuzzy msgid "Update every" msgstr "Ssedɣi" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "am \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "tisila n isefka" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Tiwisi" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Stey Asdaw" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "S_tey" #: src/fsearch_preferences_ui.c:326 #, fuzzy msgid "Add filter" msgstr "Isdawen" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Aɣaras" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Isem" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "" #: src/fsearch_statusbar.c:56 #, fuzzy, c-format #| msgid "%'d Items" msgid "%'d Item" msgstr "%'d Iferdas" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d Iferdas" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "" #: src/fsearch_statusbar.c:170 #, fuzzy msgid "Loading…" msgstr "Afran..." #: src/fsearch_statusbar.c:175 #, fuzzy msgid "Scanning…" msgstr "Afran..." #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 iferdas" #: src/fsearch_statusbar.ui:106 #, fuzzy #| msgid "_Cancel" msgid "Cancel" msgstr "_Sser" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "" #: src/fsearch_statusbar.ui:228 #, fuzzy #| msgid "Select folder" msgid "Number of selected folders" msgstr "Stey Asdaw" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 #, fuzzy #| msgid "Select a Filter" msgid "Number of selected files" msgstr "Dɣer kra n usettay" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Sser asedɣi tisila n isefka" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(ixwa)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ABRID" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Tiɣzi" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Anaw" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 #, fuzzy #| msgid "FSearch" msgid "FSearch Online" msgstr "FSearch" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Asatm amaynu" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Ssedɣi tisila n isefka" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Rzu g uɣaras" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Ssemal tastayt" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Ssemal abra n urezzu" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Ɣef" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Ffeɣ" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Rzu…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Dɣer kra n usettay" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Is nit texsed ad teṛẓemed %d ifuyla?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Aṛeẓẓum Ifuyla…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Is nit texsed ad tekkesed %d ifuyla?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Tukkesa n ifuyla…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "" #: src/fsearch_window_actions.c:215 #, fuzzy, c-format #| msgid "Deleting files…" msgid "Deleted %d file(s)." msgstr "Tukkesa n ifuyla…" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" #: src/fsearch_window_actions.c:247 #, fuzzy, c-format msgid "Do you really want to open %d file property windows?" msgstr "Is nit texsed ad teṛẓemed %d ifuyla?" #: src/fsearch_window_actions.c:251 #, fuzzy msgid "Opening file properties…" msgstr "Aṛeẓẓum Ifuyla…" #: src/menus.ui:6 msgid "_File" msgstr "A_faylu" #: src/menus.ui:9 msgid "New Window" msgstr "Asatm Amaynu" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Ṛẓem" #: src/menus.ui:21 msgid "Open Folder" msgstr "Ṛẓem Asdaw" #: src/menus.ui:29 msgid "Update Database" msgstr "ssedɣi tisila n isefka" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Sser Asedɣi" #: src/menus.ui:42 #, fuzzy msgid "Close Window" msgstr "Asatm Amaynu" #: src/menus.ui:54 msgid "_Edit" msgstr "_Ssenfel" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Ssenɣel" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "_Bbi" #: src/menus.ui:69 msgid "Select All" msgstr "Stey Maṛṛa" #: src/menus.ui:74 msgid "Deselect All" msgstr "Kkes astay maṛṛa" #: src/menus.ui:78 msgid "Invert Selection" msgstr "" #: src/menus.ui:92 msgid "_View" msgstr "Ẓe_ṛ" #: src/menus.ui:109 msgid "_Search" msgstr "_Arezzu" #: src/menus.ui:126 msgid "_Help" msgstr "_Tiwisi" #: src/menus.ui:171 msgid "Open _With" msgstr "Ṛẓem _s" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Ṛ_ẓem Asdaw" #: src/menus.ui:207 msgid "Copy as Text" msgstr "" #: src/menus.ui:217 msgid "Path + Name" msgstr "" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "" #~ msgid "page0" #~ msgstr "Tasna0" #~ msgid "page1" #~ msgstr "Tasna1" #~ msgid "page2" #~ msgstr "Tasna2" #, fuzzy #~| msgid "page3" #~ msgid "page30" #~ msgstr "Tasna3" #~ msgid "page18" #~ msgstr "Tasna18" #, fuzzy #~| msgid "page3" #~ msgid "page31" #~ msgstr "Tasna3" #, fuzzy #~| msgid "page3" #~ msgid "page32" #~ msgstr "Tasna3" #, fuzzy #~| msgid "page3" #~ msgid "page33" #~ msgstr "Tasna3" #, fuzzy #~| msgid "page3" #~ msgid "page34" #~ msgstr "Tasna3" #, fuzzy #~| msgid "page5" #~ msgid "page35" #~ msgstr "Tasna5" #~ msgid "Do you want to keep the window open?" #~ msgstr "Is texsed ad tajjed asatm iṛẓem?" #~ msgid "_Copy Filepath" #~ msgstr "Ssen_ɣel abrid n usdaw" #~ msgid "Update" #~ msgstr "Ssedɣi" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d Iferdas" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Tasedɣit Tameggarut: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_Kkes" #~ msgid "…" #~ msgstr "…" #~ msgid "page4" #~ msgstr "Tasna4" #~ msgid "page6" #~ msgstr "Tasna6" #~ msgid "page7" #~ msgstr "Tasna7" #~ msgid "page8" #~ msgstr "Tasna8" #~ msgid "page9" #~ msgstr "Tasna9" #~ msgid "page10" #~ msgstr "Tasna10" #~ msgid "page11" #~ msgstr "Tasna11" #~ msgid "page12" #~ msgstr "Tasna12" #~ msgid "page13" #~ msgstr "Tasna13" #~ msgid "page14" #~ msgstr "Tasna14" #~ msgid "page15" #~ msgstr "Tasna15" #~ msgid "page16" #~ msgstr "Tasna16" #~ msgid "page17" #~ msgstr "Tasna17" #~ msgid "page19" #~ msgstr "Tasna19" #~ msgid "page20" #~ msgstr "Tasna20" #~ msgid "page21" #~ msgstr "Tasna21" #~ msgid "page22" #~ msgstr "Tasna22" #~ msgid "page23" #~ msgstr "Tasna23" #~ msgid "page24" #~ msgstr "Tasna24" #~ msgid "page25" #~ msgstr "Tasna25" #~ msgid "page26" #~ msgstr "Tasna26" #~ msgid "page27" #~ msgstr "Tasna27" #~ msgid "page28" #~ msgstr "Tasna28" #~ msgid "page29" #~ msgstr "Tasna29" #~ msgid "system-search" #~ msgstr "Arezzu-unegraw" fsearch-0.2.3/po/uk.po000066400000000000000000001761601446344336300145510ustar00rootroot00000000000000# Ukrainian translations for FSearch package. # Copyright (C) 2018 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # , 2018. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-18 08:14+0000\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "" "Програма пошуку файлів, орієнтована на швидкість та розширені можливості" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "" "пошук;fsearch;файли;каталоги;музика;відео;документи;шукати;засіб;everything;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "Графічна програма для пошуку файлів" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch шукає файли і каталоги так легко і швидко, наскільки це можливо. " "Просто введіть кілька літер і результати пошуку зʼявляться майже миттєво." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "" "Має багато можливостей, що роблять пошук ефективним і потужним, наскільки це " "можливо. Як-от:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "" "Ігнорування регістру (наприклад, під запит «fsearch» підпадатиме «FSearch»)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "Регулярні вирази" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "Підтримка шаблонів" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "Підтримка фільтру (наприклад, пошук лише звукових файлів)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "Виключення з пошуку певних файлів і каталогів" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "" "Швидке сортування за назвою, шляхом, розміром, часом зміни і розширенням" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "" "Примітка: Через пісочницю Flatpak, FSearch не зможе знайти кожен файл у " "Вашій системі." #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "Типовий вигляд КІ" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "Щільніше компонування через GNOME HIG" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "Початковий випуск." #: src/fsearch.c:243 msgid "Saving…" msgstr "Зберігання…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "Andrij Mizyk " #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "Пошукова утиліта, орієнтована на швидкість і розширені можливості" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "Відкрити нове вікно програми" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "Показати параметри програми" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "Вказати шаблон пошуку" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "Оновити базу даних і вийти" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "Вивести дані про версію і вийти" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "Завантаження каталогів…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "Завантаження файлів…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "Сортування…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "Помилка під час відкривання теки" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "Не вдалося збудувати відкриту команду" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "Помилка під час запуску стільничного файлу" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "Не вдалося отримати інформацію про програму" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "Не вдалося отримати типовий екран" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "Помилка під час вилучення файлу" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "Помилка отримання шляху" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "Помилка під час запуску стільничного файлу" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "Помилка під час отримання інформації про тип вмісту" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "Не зареєстровано типової програми" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "Помилка під час відкривання батьківської теки" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "Не вдалося отримати батьківський шлях" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "Каталог" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "Невідомий тип" #: src/fsearch_filter.c:111 msgid "All" msgstr "Усе" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "Каталоги" #: src/fsearch_filter.c:113 msgid "Files" msgstr "Файли" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "Програми" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "Архіви" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "Аудіо" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "Документи" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "Зображення" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "Відео" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "Назви макросів не повинні містити знаки `:`." #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "_Скасувати" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_Прийняти" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "Змінити фільтр" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "Назва:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "Унікальна назва фільтру" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "Унікальна назва фільтру" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "Шукати в назві шляху" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "Дозволити регулярні вирази" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "Враховувати регістр" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "Запит:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "Макрос:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "Макрос для цього фільтру. Макрос дозволяє отримати доступ до фільтру з поля " "пошуку, ввівши його текст перед знаком ':'\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "Властивості…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "Інші програми…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "База порожня" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "Додати каталоги" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "Завантаження бази даних…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "Це не займе багато часу." #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "Оновлення бази…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "Це займе деякий час." #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "Порожній запит" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "Натисніть Ctrl + F і почніть набирати." #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "Нічого не знайдено" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "Спробуйте написати інакше" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "Сортування результатів…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "Налаштування" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "Увімкнути темну тему" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "Увімкнути декорації на стороні клієнта (потрібен перезапуск)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "Вживати двійкові одиниці замість десяткових" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "Памʼятати розмір вікна" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "Виходити клавішею Escape" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "комбінаціями клавіш або пунктами меню" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "подвійним клацанням" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "Дії після успішного відкривання файлу:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "Нічого" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "Згорнути" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "Закрити" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "Основне:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "Виділяти пошуковий текст" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "Показувати підказки" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "Показувати значки в стовпці назви" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "Памʼятати налаштування стовпців" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "Памʼятати порядок сортування" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "Відкривати подвійним клацанням у стовпці шляху" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "Відкривати одним клацанням" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "Запускати файли стільниці" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "Результати:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "Показувати стан індексування бази даних" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "Рядок стану:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "Показувати вікно попередження, якщо:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "не вдалося відкрити файл / каталог" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "Вікна:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "Інтерфейс" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "Шукати в шляху, якщо запит містить роздільники" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "Шукати під час набирання" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "Ховати результати, якщо пошукове поле порожнє" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "Враховувати регістр, якщо запит містить хоча б одну велику літеру" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "Додати новий фільтр" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "Вилучити вибраний фільтр" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "Змінити вибраний фільтр" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "Відновити типові фільтри" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "Фільтр:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "Пошук" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "Оновляти базу під час запуску" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "Оновляти кожні" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "годин і" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "хвилин" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "Додати шлях для включення в базу\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "Вилучити вибраний шлях" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "Враховувати" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "Додати шлях, який потрібно виключити з бази" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "Підтримуються шаблони. Записи повинні розділятися знаком ';'" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "Виключати файли:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "напр. \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "Не враховувати приховані файли і каталоги" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "Виключати" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "База даних" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "Увімкнути темну тему:\n" "\n" "Якщо ввімкнено, системна тема запитується на використання темного стилю " "програми (як-от яскравий текст на темних елементах КІ).\n" "\n" "Зауважте, що не всі системні теми мають темний вигляд, тому ввімкнення цього " "параметра може не мати ефекту." #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "Увімкнути декорації на стороні клієнта:\n" "\n" "Якщо ввімкнено, пошукове поле й основне меню відображатимуться в області " "заголовка.\n" "\n" "Якщо вимкнено, основне меню відображатиметься як стрічка меню, а пошукове " "поле під ним.\n" "Що нагадує традиційніший вигляд КІ, але потребує більше простору." #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "Вживати двійкові одиниці замість десяткових:\n" "\n" "Цей параметр визначає, як відображатимуться розміри файлів.\n" "\n" "\t• Двійкові одиниці: відповідає двійковим префіксам МЕК (напр.: 1 " "КіБ = 1024 байти)\n" "\t• Десяткові одиниці: відповідає десятковим префіксам SI (напр.: " "1 кБ = 1000 байтів)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "Памʼятати розмір вікна:\n" "\n" "Якщо ввімкнено, розмір вікна відновлятиметься з попереднього сеансу коли ви " "відкриєте нове вікно FSearch.\n" "\n" "Зауважте, що деякі керівники вікон нехтують цим запитом і задають інший " "розмір вікна." #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "Поведінка після успішного відкривання файлу:\n" "\n" "Після успішного відкривання файлу/теки виконується одна з наступних дій:\n" "\t• Нічого: нічого не робити.\n" "\t• Згорнути: поточне відкрите вікно FSearch згорнеться.\n" "\t• Закрити: вийти з FSearch.\n" "\n" "Виконання цих дій можна налаштувати, коли файл відкривається за допомогою\n" "\t• комбінацій клавіш або пунктів меню і/або\n" "\t• клацанням миші" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "Виділяти пошуковий текст:\n" "\n" "Якщо ввімкнено, то шуканий текст виділятиметься в списку результатів. " "Наприклад, якщо ви шукаєте «foo», всі видимі foo в назвах файлів/" "каталогів виділятимуться жирним шрифтом:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "Це також працює з регулярними виразами і шаблонами, що починаються і " "закінчуються знаком зірочки. " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "Показувати підказки:\n" "\n" "Якщо ввімкнено, то при наведенні курсора на файл/теку в списку результатів " "появиться підказка з повним шляхом файлу." #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "Показувати значки в стовпці назви:\n" "\n" "Якщо ввімкнено, в стовпці з назвою відображатимуться значки файлів/тек." #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "Памʼятати налаштування стовпців:\n" "\n" "Якщо ввімкнено, налаштування стовпців списку результатів відновлятимуться з " "попереднього сеансу коли ви відкриєте нове вікно FSearch. Сюди входять " "розмір і вигляд усіх стовпців." #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "Памʼятати порядок сортування:\n" "\n" "Якщо ввімкнено, порядок сортування списку результатів відновлятиметься з " "попереднього сеансу коли ви відкриватимете нове вікно FSearch." #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "Відкривати подвійним клацанням у стовпці шляху:\n" "\n" "Якщо ввімкнено, подвійне клацання в стовпці шляху відкриватиме вибраний шлях." #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "Відкривати одним клацанням:\n" "\n" "Якщо ввімкнено, одинарне клацання відкриватиме вибраний файл/каталог. Якщо " "ви хочете виділити файл/каталог, клацніть по них утримуючи клавішу Ctrl." #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "Показувати стан індексування бази даних:\n" "\n" "Якщо ввімкнено — в рядку стану відображатиметься шлях, що індексується." #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "Показувати вікна попереджень:\n" "\n" "Якщо ввімкнено, то вікна попереджень зʼявлятимуться коли не вдалося відкрити " "файл чи каталог." #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "Шукати в шляху, якщо запит містить роздільники:\n" "\n" "Якщо ввімкнено — пошуковий запит, що містить роздільники (такі як «/»), " "автоматично зіставлятиметься з повним шляхом файлу або теки." #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "Враховувати регістр, якщо запит містить хоча б одну велику літеру:\n" "\n" "Якщо ввімкнено — пошуковий запит, що містить принаймні одну велику літеру, " "перемикається на чутливий до регістру пошук. Це означає, що запиту на зразок " "Foo відповідатиме FooBar.txt, але не foobar.txt." #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "Ховати результати, якщо пошукове поле порожнє:\n" "\n" "Якщо ввімкнено і пошукове поле порожнє, то результати пошуку будуть " "відсутніми.\n" "\n" "Якщо вимкнено і пошукове поле порожнє — відображатимуться всі фали і " "каталоги." #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "Шукати під час набору:\n" "\n" "Якщо ввімкнено — пошук самостійно оновлюватиметься під час кожного " "натискання клавіші.\n" "\n" "Якщо вимкнено — пошук оновиться лише коли натиснути Enter або кнопку " "пошуку. " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "Оновляти базу під час запуску:\n" "\n" "Якщо ввімкнено — база даних оновлятиметься самостійно у фоновому режимі під " "час запускання FSearch." #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "Враховані каталоги:\n" "\n" "Даний список містить усі каталоги, які ви бажаєте включити в базу даних.\n" "\n" "\t• Активний: якщо ввімкнено – шлях буде враховано під час пошуку.\n" "\t• Шлях: повний шлях, який буде враховано.\n" "\t• Одна файлова система: якщо дозволено – FSearch не виходитиме за " "межі файлової системи цього каталогу" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "Додати каталог до бази даних:\n" "\n" "Ця кнопка відкриває вікно, в якому можна вибрати каталог для додавання в " "базу даних." #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "Вилучити вибраний рядок:\n" "\n" "Вилучає вибраний каталог зі списку врахованих каталогів." #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "Виключені каталоги:\n" "\n" "Даний список містить усі каталоги, які ви бажаєте виключити з бази даних.\n" "\n" "\t• Активний: якщо ввімкнено – шлях не враховуватиметься під час " "пошуку.\n" "\t• Шлях: повний шлях, який буде виключено." #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "Виключити каталог із бази даних:\n" "\n" "Ця кнопка відкриває вікно, в якому можна вибрати каталог, який потрібно " "виключити з бази даних." #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "Вилучити вибраний рядок:\n" "\n" "Вилучає вибраний каталог зі списку виключених каталогів." #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "Виключити файли і каталоги з бази даних:\n" "\n" "Це розділений крапкою з комою список файлів (чи каталогів), які ви бажаєте " "виключити з бази даних. Наприклад, .git;.cache;*.swp не враховуватиме " "всі файли чи каталоги, що називаються .git або .cache, або " "закінчується на .swp." #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "Не враховувати приховані файли і каталоги:\n" "\n" "Якщо ввімкнено — приховані файли і каталоги виключатимуться з бази даних " "(як-от: усі файли і каталоги, що починаються зі знака крапки)." #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "Наведіть вказівник на параметр, щоб отримати докладний опис." #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "Періодично оновляти базу через вказаний проміжок:\n" "\n" "Якщо ввімкнено і поки працює FSearch — база даних час від часу " "оновлятиметься через визначений проміжок часу.\n" "\n" "Якщо ви бажаєте оновлювати базу у фоновому режимі, навіть коли FSearch " "працює — можете користуватися засобами, як cron або systemd timers для " "періодичного оновлення:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "Запускати файли стільниці:\n" "\n" "Якщо дозволено, активувавши файл .desktop запуститься програма " "визначена у цьому файлі. Таким чином FSearch може працювати як запускач " "програм. В іншому випадку файл .desktop оброблятиметься типово для " "типів цього файлу, зазвичай через текстовий редактор." #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "Фільтри:\n" "\n" "Це список усіх доступних фільтрів. Фільтр – це попередньо визначений пошук.\n" "\n" "\t• Назва: Унікальний і описовий ідентифікатор фільтру\n" "\t• Макрос: Увівши текст макросу перед ':', можна увімкнути потрібний " "фільтр\n" "\t• Запит: Пошуковий запит, за яким фільтруватиметься база даних" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "Додати новий фільтр:\n" "\n" "Ця кнопка відкриває вікно, в якому можна відредагувати новий фільтр." #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "Вилучити вибраний фільтр:\n" "\n" "Ця кнопка вилучає вибраний фільтр." #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "Змінити вибраний фільтр:\n" "\n" "Ця кнопка відкриває вікно, в якому можна редагувати вибраний фільтр." #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "Відновити типовий фільтр:\n" "\n" "Ця кнопка відновить типове налаштування фільтру.\n" "\n" "⚠ Усі фільтри, створені або відредаговані користувачем, буде втрачено! ⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "Виходити клавішею Escape:\n" "\n" "Якщо дозволено – FSearch виходитиме, замість того, щоб бути згорнутим, коли " "натиснуто клавішу Escape." #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "Довідка" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "Виберіть каталог" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "_Вибрати" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "Додати фільтр" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "Активний" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "Шлях" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "Одна файлова система" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "Назва" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "Макрос" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "Запит" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d обʼєкт" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d обʼєктів" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "Іде запит…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "Завантаження…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "Сканування…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "Знайдені результати" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 обʼєктів" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "Скасувати" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "Індексування:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "Кількість вибраних каталогів" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "Кількість вибраних файлів" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "Скасувати оновлення бази даних" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "Кількість елементів бази даних" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(порожньо)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "Пошуковий запит містить символи верхнього регістру.\n" "Врахування регістру тимчасово активований для цього запиту." #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "РЕГ" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "Пошуковий запит містить роздільники.\n" "Пошук у шляху тимчасово активовано для цього запиту." #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "ШЛЯХ" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "ВИР" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "Розмір" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "Тип" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "Розширення" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "Дата зміни" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "Сортування за Типом із великою кількістю результатів може зайняти " "кілька секунд.\n" "\n" "Цей порядок сортування не є постійним, він скидається коли змінюється " "пошуковий запит." #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch у мережі" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "Пожертвувати" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "Форум" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "Звіти про недоліки і запити функцій" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "Спонсорство на GitHub" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "Нове вікно" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "Оновити базу даних" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "Шукати в назві шляху" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "Враховувати регістр" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "Дозволити регулярні вирази" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "Показувати рядок стану" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "Показувати фільтр" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "Показувати кнопку Пошук" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "Про програму" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "Вийти" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "Пошук…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "Обрати фільтр" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "Ви дійсно хочете відкрити стільки (%d) файлів?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "Відкриття файлів…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "Ви справді хочете видалити стільки (%d) файлів?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "Видалення файлів…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "Переміщення файлів у смітник…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "Щось пішло не так." #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "Видалено %d файл(ів)." #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "Переміщено %d файл(ів) у смітник." #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "" "Базу даних потрібно оновити, до того, як вона дізнається про ці зміни! Це " "буде виправлено в майбутніх оновленнях." #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "Ви справді хочете відкрити %d вікон властивостей файлів?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "Відкриття властивостей файлів…" #: src/menus.ui:6 msgid "_File" msgstr "_Файл" #: src/menus.ui:9 msgid "New Window" msgstr "Нове вікно" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_Відкрити" #: src/menus.ui:21 msgid "Open Folder" msgstr "Відкрити каталог" #: src/menus.ui:29 msgid "Update Database" msgstr "Оновити базу даних" #: src/menus.ui:35 msgid "Cancel Update" msgstr "Скасувати оновлення" #: src/menus.ui:42 msgid "Close Window" msgstr "Закрити вікно" #: src/menus.ui:54 msgid "_Edit" msgstr "З_міни" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_Копіювати" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "Вирі_зати" #: src/menus.ui:69 msgid "Select All" msgstr "Виділити все" #: src/menus.ui:74 msgid "Deselect All" msgstr "Скасувати виділення" #: src/menus.ui:78 msgid "Invert Selection" msgstr "Інвертувати виділене" #: src/menus.ui:92 msgid "_View" msgstr "Ви_гляд" #: src/menus.ui:109 msgid "_Search" msgstr "_Пошук" #: src/menus.ui:126 msgid "_Help" msgstr "_Довідка" #: src/menus.ui:171 msgid "Open _With" msgstr "Відкрити _через" #: src/menus.ui:185 msgid "_Open Folder" msgstr "Відкрити ка_талог" #: src/menus.ui:207 msgid "Copy as Text" msgstr "Копіювати як текст" #: src/menus.ui:217 msgid "Path + Name" msgstr "Шлях + Назва" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "Перенести в _смітник" #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Скасувати оновлення бази даних\n" #~ " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "Виберіть фільтр\n" #~ " " #~ msgid "" #~ "Search\n" #~ " " #~ msgstr "" #~ "Пошук\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "Додати шлях для включення в базу\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "Додати шлях для включення в базу\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "Додати шлях для включення в базу\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "Додати шлях для включення в базу\n" #~ " " #, fuzzy #~| msgid "" #~| "Add path to be included in database\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "Додати шлях для включення в базу\n" #~ " " #, fuzzy #~| msgid "" #~| "Add folder to database:\n" #~| "\n" #~| " This button opens a dialog where you can select a " #~| "folder you want to include in the database for\n" #~| " searching.\n" #~| " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "Додати каталог до бази даних:\n" #~ "\n" #~ " Ця кнопка відкриває вікно, в якому потрібно обрати " #~ "каталог, який бажаєте додати\n" #~ " до бази даних пошуку.\n" #~ " " #, fuzzy #~| msgid "" #~| "Search term contains upper case characters.\n" #~| "Match Case was temporarily activated for this term." #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "Запит містить великі літери.\n" #~ "Врахування регістру було тимчасово активовано для цього запиту." #~ msgid "page0" #~ msgstr "сторінка0" #~ msgid "page1" #~ msgstr "сторінка1" #~ msgid "page2" #~ msgstr "сторінка2" #~ msgid "page30" #~ msgstr "сторінка30" #~ msgid "page18" #~ msgstr "сторінка18" #~ msgid "page31" #~ msgstr "сторінка31" #~ msgid "page32" #~ msgstr "сторінка32" #~ msgid "page33" #~ msgstr "сторінка33" #~ msgid "page34" #~ msgstr "сторінка34" #~ msgid "page35" #~ msgstr "сторінка35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "Враховані каталоги:\n" #~ "\n" #~ " Цей список містить усі каталоги, які ви хочете " #~ "включити до бази даних.\n" #~ "\n" #~ " • Активний: якщо дозволено, шлях " #~ "враховуватиметься під час пошуку.\n" #~ " • Шлях: повний шлях, який потрібно " #~ "враховувати.\n" #~ " • Оновляти: цей параметр зручний, якщо ви " #~ "бажаєте виключити\n" #~ " певний шлях з періодичного оновлення\n" #~ " (напр., якщо шлях належить повільному USB-" #~ "пристрою, який рідко змінюється)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "Вилучити вибраний рядок:\n" #~ "\n" #~ " Вилучає вибраний каталог зі списку доданих " #~ "каталогів.\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "Залишити вікно відкритим?" #~ msgid "_Copy Filepath" #~ msgstr "Копіювати _шлях" #~ msgid "Building lookup list…" #~ msgstr "Будування списку пошуку…" #~ msgid "Update" #~ msgstr "Оновляти" #~ msgid "≥%'d Items" #~ msgstr "≥%'d обʼєктів" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "Останнє оновлення: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "Вида_лити" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "Обмежити к-сть результатів:" #~ msgid "" #~ "Limit number of results:\n" #~ "\n" #~ "If enabled, the number of search results will be limited to the specified " #~ "number.\n" #~ "\n" #~ "Displaying lots of results has a significant performance impact, " #~ "especially when the list isn't sorted by name. This will be improved in " #~ "future versions." #~ msgstr "" #~ "Обмежити кількість результатів:\n" #~ "\n" #~ "Якщо ввімкнено, кількість виведених пошукових результатів буде обмежено " #~ "до визначеного числа.\n" #~ "\n" #~ "Відображення великої кількості результатів негативно впливає " #~ "продуктивність, особливо коли список не сортується за назвою. Це " #~ "виправиться в подальших версіях." #~ msgid "Background tasks are active." #~ msgstr "Виконуються фонові завдання." #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "Закриття вікна зараз неможливе.\n" #~ "Зачекайте та повторіть спробу." #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "" #~ "Перейдіть у Зміни → Параметри → База даних та додайте каталоги" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "сторінка1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "сторінка0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "сторінка0" #~ msgid "system-search" #~ msgstr "system-search" #~ msgid "Copy" #~ msgstr "Копіювати" #~ msgid "" #~ "Enable dark theme might not have an effect.\n" #~ "Some platforms don't support dark theming and others always use dark " #~ "themes by default." #~ msgstr "" #~ "Увімкнення темної теми може не мати ефекту.\n" #~ "Деякі платформи не підтримують темну тему, а інші завжди використовують " #~ "темні теми за замовчуванням." #~ msgid "Add…" #~ msgstr "Додати…" #~ msgid "Remove" #~ msgstr "Видалити" #~ msgid "Follow symbolic links" #~ msgstr "Переходити за символьними посиланнями" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "INFO: \"Увімкнути темну тему\" може не дати ефекту,\n" #~ "тому що не кожна GTK+ тема підтримує темну версію." #~ msgid "Enable menubar" #~ msgstr "Відображати панель меню" #~ msgid "" #~ "INFO: Enabling/Disabling the menubar takes effect after restarting " #~ "FSearch.\n" #~ msgstr "" #~ "ІНФОРМАЦІЯ: Увімкнення / вимкнення панелі меню набуває чинності після " #~ "перезапуску FSearch.\n" #~ msgid "Open Containing Folder" #~ msgstr "Відкрити вмістимий каталог" #~ msgid "Open File(s) in File Manager" #~ msgstr "Відкрити файл(и) у Файловому менеджері" #~ msgid "Move to Trash" #~ msgstr "Перенести у смітник" #~ msgid "Show Menubar" #~ msgstr "Відображати меню" #~ msgid "Enable" #~ msgstr "Включити" #, fuzzy #~ msgid "Loading Database..." #~ msgstr "Завантаження бази даних..." #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "Оновлення бази..." #~ msgid "Search..." #~ msgstr "Пошук..." #~ msgid "Add" #~ msgstr "Додати" #~ msgid "files?" #~ msgstr "файли?" #~ msgid "C_ut" #~ msgstr "В_ирізати" fsearch-0.2.3/po/zh_CN.po000066400000000000000000001402151446344336300151230ustar00rootroot00000000000000# Chinese translations for FSearch package. # Copyright (C) 2017 THE FSearch'S COPYRIGHT HOLDER # This file is distributed under the same license as the FSearch package. # Automatically generated, 2017. # msgid "" msgstr "" "Project-Id-Version: FSearch 0.1beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-14 10:31+0200\n" "PO-Revision-Date: 2022-08-16 20:17+0000\n" "Last-Translator: Eric \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.14-dev\n" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:5 #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:7 src/main.c:35 msgid "FSearch" msgstr "FSearch" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:6 msgid "A file search application focusing on performance and advanced features" msgstr "注重性能和高级功能的文件搜索工具" #: data/io.github.cboxdoerfer.FSearch.desktop.in.in:11 msgid "" "search;fsearch;files;folders;music;video;documents;find;tool;everything;" msgstr "搜索;fsearch;文件;目录;音乐;视频;文档;查找;工具;everything;" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:8 msgid "A graphical file search application" msgstr "一个图形化的文件搜索工具" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:10 msgid "" "FSearch helps you to find files and folders as easy and fast as possible. " "Just type a few letters and search results will appear almost instantly." msgstr "" "FSearch帮助你尽可能容易和快速地找到文件和文件夹。只需键入几个字母,搜索结果几" "乎会立即出现。" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:14 msgid "" "There are a lot of features which make searching as efficient and powerful " "as possible. Such as:" msgstr "FSearch有很多功能使搜索尽可能高效和强大。比如:" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:19 msgid "" "Ignore case (e.g. searching for \"fsearch\" will match \"FSearch\" as well)" msgstr "忽略大小写(例如:搜索“fsearch”也会匹配“FSearch”)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:20 msgid "Regular expressions" msgstr "正则表达式" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:21 msgid "Wildcard support" msgstr "支持通配符" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:22 msgid "Filter support (e.g. only search for audio files)" msgstr "支持筛选器(例如:只搜索音频文件)" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:23 msgid "Exclude certain files and folders" msgstr "排除特定文件及文件夹" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:24 msgid "Fast sort by name, path, size, modification time and extension" msgstr "按名称、路径、大小、修改时间和扩展名快速排序" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:26 msgid "" "Note: Due to Flatpak's sandboxing, FSearch can't find every file on your " "system." msgstr "注意:由于Flatpak的沙箱功能,FSearch无法找到你系统中的每一个文件。" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:35 msgid "The default UI layout" msgstr "默认的用户界面布局" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:41 msgid "A layout more closely following GNOME HIGs" msgstr "一个更接近GNOME人机界面指南的布局" #. Translators: please do NOT translate this. #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:49 msgid "Christian Boxdörfer" msgstr "Christian Boxdörfer" #: data/io.github.cboxdoerfer.FSearch.appdata.xml.in:57 msgid "Initial release." msgstr "首次发布。" #: src/fsearch.c:243 msgid "Saving…" msgstr "正在保存…" #: src/fsearch.c:430 msgid "translator-credits" msgstr "翻译人员" #: src/fsearch.c:432 msgid "A search utility focusing on performance and advanced features" msgstr "注重性能和高级功能的搜索工具" #: src/fsearch.c:905 msgid "Open a new application window" msgstr "开启新窗口" #: src/fsearch.c:906 msgid "Show the application preferences" msgstr "显示首选项" #: src/fsearch.c:907 msgid "Set the search pattern" msgstr "设置搜索模式" #: src/fsearch.c:908 msgid "Update the database and exit" msgstr "更新数据库并退出" #: src/fsearch.c:909 msgid "Print version information and exit" msgstr "显示版本信息并退出" #: src/fsearch_database.c:648 msgid "Loading folders…" msgstr "正在加载文件夹…" #: src/fsearch_database.c:656 msgid "Loading files…" msgstr "正在加载文件…" #: src/fsearch_database.c:1643 src/fsearch_statusbar.c:71 #: src/fsearch_statusbar.ui:90 msgid "Sorting…" msgstr "排序中…" #: src/fsearch_file_utils.c:132 msgctxt "Will be followed by the path of the folder." msgid "Error while opening folder" msgstr "打开下列文件夹时出错" #: src/fsearch_file_utils.c:135 msgid "Failed to build open command" msgstr "构建打开命令失败" #: src/fsearch_file_utils.c:151 msgctxt "Will be followed by the path of the desktop file." msgid "Error when launching desktop file" msgstr "启动下列桌面文件时出错" #: src/fsearch_file_utils.c:154 msgid "Failed to get application information" msgstr "获取应用信息失败" #: src/fsearch_file_utils.c:160 msgid "Failed to get default display" msgstr "未能获取默认显示" #: src/fsearch_file_utils.c:182 msgctxt "Will be followed by the path of the file." msgid "Error when removing file" msgstr "删除下列文件时出错" #: src/fsearch_file_utils.c:184 src/fsearch_file_utils.c:247 msgid "Failed to get path" msgstr "获取路径失败" #: src/fsearch_file_utils.c:245 msgctxt "Will be followed by the path of the desktop file" msgid "Error when launching desktop file" msgstr "启动桌面文件时出错" #: src/fsearch_file_utils.c:259 msgctxt "Will be followed by the content type string." msgid "Error when getting information for content type" msgstr "获取下列内容类型信息时出错" #: src/fsearch_file_utils.c:261 msgid "No default application registered" msgstr "未注册默认应用程序" #: src/fsearch_file_utils.c:348 msgctxt "Will be followed by the path of the folder." msgid "Error when opening parent folder" msgstr "打开下列主文件夹时出错" #: src/fsearch_file_utils.c:350 msgid "Failed to get parent path" msgstr "获取主路径失败" #: src/fsearch_file_utils.c:407 msgid "Folder" msgstr "文件夹" #: src/fsearch_file_utils.c:413 msgid "Unknown Type" msgstr "未知类型" #: src/fsearch_filter.c:111 msgid "All" msgstr "所有" #: src/fsearch_filter.c:112 msgid "Folders" msgstr "文件夹" #: src/fsearch_filter.c:113 msgid "Files" msgstr "文件" #: src/fsearch_filter.c:115 msgid "Applications" msgstr "应用程序" #: src/fsearch_filter.c:116 msgid "Archives" msgstr "归档文件" #: src/fsearch_filter.c:117 msgid "Audio" msgstr "音频" #: src/fsearch_filter.c:118 msgid "Documents" msgstr "文档" #: src/fsearch_filter.c:119 msgid "Pictures" msgstr "图片" #: src/fsearch_filter.c:120 msgid "Videos" msgstr "视频" #: src/fsearch_filter_editor.c:79 msgid "Macro names must not contain `:` characters." msgstr "宏名称必须包含 `:` 字符。" #: src/fsearch_filter_editor.c:104 src/fsearch_preferences_ui.c:197 #: src/fsearch_preferences_ui.c:209 src/fsearch_preferences_ui.c:514 msgid "_Cancel" msgstr "取消" #: src/fsearch_filter_editor.c:105 src/fsearch_preferences_ui.c:515 msgid "_OK" msgstr "_确定" #: src/fsearch_filter_editor.ui:10 src/fsearch_preferences_ui.c:295 msgid "Edit filter" msgstr "编辑筛选器" #: src/fsearch_filter_editor.ui:50 msgid "Name:" msgstr "名称:" #: src/fsearch_filter_editor.ui:61 msgid "The unique name of this filter" msgstr "此筛选器的唯一名称" #: src/fsearch_filter_editor.ui:64 msgid "Unique filter name" msgstr "唯一的筛选器名" #: src/fsearch_filter_editor.ui:73 msgid "Search in path" msgstr "搜索路径" #: src/fsearch_filter_editor.ui:87 msgid "Enable regular expressions" msgstr "启用正则表达式" #: src/fsearch_filter_editor.ui:101 msgid "Match case" msgstr "匹配大小写" #: src/fsearch_filter_editor.ui:146 msgid "Query:" msgstr "查询:" #: src/fsearch_filter_editor.ui:160 msgid "Macro:" msgstr "宏:" #: src/fsearch_filter_editor.ui:171 msgid "" "The macro for this filter. A macro allows you to access this filter from the " "search entry by typing its text followed by ':'\n" " " msgstr "" "此筛选器的宏。宏允许你通过在搜索文本后面加上“:”从搜索条目访问这个筛选器。\n" " " #: src/fsearch_listview_popup.c:35 msgid "Properties…" msgstr "属性…" #: src/fsearch_listview_popup.c:169 msgid "Other Application…" msgstr "其他应用程序…" #: src/fsearch_overlay.ui:44 msgid "Empty Database" msgstr "空数据库" #: src/fsearch_overlay.ui:60 msgid "Add folders" msgstr "添加文件夹" #: src/fsearch_overlay.ui:108 msgid "Loading Database…" msgstr "加载数据库…" #: src/fsearch_overlay.ui:123 msgid "This won't take long." msgstr "不会花很长时间。" #: src/fsearch_overlay.ui:171 src/fsearch_statusbar.ui:312 msgid "Updating Database…" msgstr "数据库更新中…" #: src/fsearch_overlay.ui:186 src/fsearch_overlay.ui:383 msgid "This may take a while." msgstr "可能需要一些时间。" #: src/fsearch_overlay.ui:241 msgid "Empty Query" msgstr "空的查询" #: src/fsearch_overlay.ui:256 msgid "Press Ctrl + F and start typing." msgstr "按 Ctrl + F 开始输入。" #: src/fsearch_overlay.ui:304 msgid "No Results Found" msgstr "没有找到结果" #: src/fsearch_overlay.ui:319 msgid "Try a different search" msgstr "试试其他搜索条件" #: src/fsearch_overlay.ui:368 msgid "Sorting results…" msgstr "结果排序中…" #: src/fsearch_preferences.ui:63 src/fsearch_window.ui:396 src/menus.ui:84 msgid "Preferences" msgstr "选项" #: src/fsearch_preferences.ui:132 msgid "Enable dark theme" msgstr "启用暗色主题" #: src/fsearch_preferences.ui:147 msgid "Enable client-side decorations (requires restart)" msgstr "启用客户端装饰(需要重启)" #: src/fsearch_preferences.ui:162 msgid "Use binary units instead of decimal units" msgstr "使用二进制单位(代替十进制单位)" #: src/fsearch_preferences.ui:178 msgid "Remember window size" msgstr "记住窗口大小" #: src/fsearch_preferences.ui:193 msgid "Exit on Escape" msgstr "按 Escape 退出" #: src/fsearch_preferences.ui:230 msgid "with keyboard shortcuts or menu entries" msgstr "使用快捷键或菜单" #: src/fsearch_preferences.ui:245 msgid "with double click" msgstr "使用双击" #: src/fsearch_preferences.ui:273 msgid "Behaviour after successfully opening a file:" msgstr "打开文件成功后的动作:" #: src/fsearch_preferences.ui:289 msgid "Nothing" msgstr "无" #: src/fsearch_preferences.ui:290 msgid "Minimize" msgstr "最小化" #: src/fsearch_preferences.ui:291 msgid "Close" msgstr "关闭" #: src/fsearch_preferences.ui:317 msgid "General:" msgstr "常规:" #: src/fsearch_preferences.ui:352 msgid "Show highlighted search terms" msgstr "高亮显示搜索词" #: src/fsearch_preferences.ui:368 msgid "Show tooltips" msgstr "显示工具提示" #: src/fsearch_preferences.ui:383 msgid "Show icons in name column" msgstr "显示图标" #: src/fsearch_preferences.ui:398 msgid "Remember column configuration" msgstr "记住列的配置" #: src/fsearch_preferences.ui:413 msgid "Remember sort order" msgstr "记住排列顺序" #: src/fsearch_preferences.ui:428 msgid "Open path with double click in path column" msgstr "在路径列中双击打开路径" #: src/fsearch_preferences.ui:443 msgid "Single click to open" msgstr "单击打开" #: src/fsearch_preferences.ui:458 msgid "Launch desktop files" msgstr "启动桌面文件" #: src/fsearch_preferences.ui:479 msgid "Results:" msgstr "结果:" #: src/fsearch_preferences.ui:520 msgid "Show database indexing status" msgstr "显示数据库索引状态" #: src/fsearch_preferences.ui:541 msgid "Statusbar:" msgstr "状态栏:" #: src/fsearch_preferences.ui:582 msgid "Show warning dialogs when:" msgstr "显示警告窗口,当:" #: src/fsearch_preferences.ui:592 msgid "file / folder failed to open" msgstr "文件或目录打开失败" #: src/fsearch_preferences.ui:615 msgid "Dialogs:" msgstr "对话框:" #: src/fsearch_preferences.ui:640 msgid "Interface" msgstr "接口" #: src/fsearch_preferences.ui:659 msgid "Search in path when query contains path separators" msgstr "搜索路径(如有路径分隔符)" #: src/fsearch_preferences.ui:673 msgid "Search as you type" msgstr "即时搜索" #: src/fsearch_preferences.ui:687 msgid "Hide results when search is empty" msgstr "搜索条件为空时不显示结果" #: src/fsearch_preferences.ui:701 msgid "Match case when query contains at least one upper case character" msgstr "当查询包含至少一个大写字符时匹配大小写" #: src/fsearch_preferences.ui:769 msgid "Add new filter" msgstr "添加新筛选器" #: src/fsearch_preferences.ui:785 msgid "Remove selected filter" msgstr "删除所选筛选器" #: src/fsearch_preferences.ui:801 msgid "Edit selected filter" msgstr "编辑所选的筛选器" #: src/fsearch_preferences.ui:815 msgid "Restore default filters" msgstr "还原默认筛选器" #: src/fsearch_preferences.ui:847 msgid "Filter:" msgstr "筛选器:" #: src/fsearch_preferences.ui:868 src/fsearch_window.ui:625 msgid "Search" msgstr "搜索" #: src/fsearch_preferences.ui:887 msgid "Update database on start" msgstr "启动时更新数据库" #: src/fsearch_preferences.ui:907 msgid "Update every" msgstr "更新每" #: src/fsearch_preferences.ui:929 msgid "0" msgstr "0" #: src/fsearch_preferences.ui:946 msgid "hour(s) and" msgstr "小时和" #: src/fsearch_preferences.ui:958 msgid "30" msgstr "30" #: src/fsearch_preferences.ui:976 msgid "minute(s)" msgstr "分钟" #: src/fsearch_preferences.ui:1048 msgid "" "Add path to be included in database\n" " " msgstr "" "添加要包含在数据库中的路径\n" " " #: src/fsearch_preferences.ui:1065 src/fsearch_preferences.ui:1164 msgid "Remove selected path" msgstr "删除所选路径" #: src/fsearch_preferences.ui:1091 msgid "Include" msgstr "包含" #: src/fsearch_preferences.ui:1148 msgid "Add path to be excluded from database" msgstr "添加要从数据库中排除的路径" #: src/fsearch_preferences.ui:1200 src/fsearch_preferences.ui:1213 msgid "Supports wildcards. Multiple entries must be separated by ';'" msgstr "支持通配符。多个条件必须用 ';' 分开" #: src/fsearch_preferences.ui:1201 msgid "Exclude files:" msgstr "排除文件:" #: src/fsearch_preferences.ui:1214 msgid "e.g. \".git;*.tmp\"" msgstr "例如 \".git;*.tmp\"" #: src/fsearch_preferences.ui:1231 msgid "Exclude hidden files and folders" msgstr "不包含隐藏的文件及文件夹" #: src/fsearch_preferences.ui:1253 msgid "Exclude" msgstr "排除" #: src/fsearch_preferences.ui:1276 msgid "Database" msgstr "数据库" #: src/fsearch_preferences.ui:1308 msgid "" "Enable dark theme:\n" "\n" "If enabled, the system theme is asked to use a darker styling for the " "application (i.e. dark UI elements on bright text).\n" "\n" "Note that not all system themes provide such a darker variant, therefore " "enabling this setting might not have an effect." msgstr "" "启用深色主题:\n" "\n" "如果启用,系统主题将被要求为应用程序使用更暗的样式(即亮文本上的暗 UI 元" "素)。\n" "\n" "请注意,并非所有系统主题都提供这种较暗的变体,因此启用此设置可能没有效果。" #: src/fsearch_preferences.ui:1326 msgid "" "Enable client-side decorations:\n" "\n" "If enabled, the search entry and main menu are displayed in the window title " "bar.\n" "\n" "If disabled, the main menu is displayed as a menu bar with the search entry " "below it.\n" "This resembles a more traditional UI layout and takes a little bit more " "space." msgstr "" "启用客户端装饰:\n" "\n" "如果启用,搜索条目和主菜单将显示在窗口标题栏中。\n" "\n" "如果禁用,主菜单将显示为菜单栏,其下方有搜索条目。\n" "这类似于更传统的 UI 布局,并占用更多空间。" #: src/fsearch_preferences.ui:1346 msgid "" "Use binary units instead of decimal units:\n" "\n" "This settings controls how file sizes are displayed.\n" "\n" "\t• Binary units: This refers to binary IEC prefixes (e.g. 1 KiB = " "1024 bytes)\n" "\t• Decimal units: This refers to decimal SI prefixes (e.g. 1 kB " "= 1000 bytes)" msgstr "" "使用二进制单位而不是十进制单位:\n" "\n" "此设置控制文件大小的显示方式。\n" "\n" "• 二进制单位:这是指二进制 IEC 前缀(例如 1 KiB = 1024 字节)\n" "• 十进制单位: 这是指十进制 SI 前缀(例如 1 kB = 1000 字节)" #: src/fsearch_preferences.ui:1366 msgid "" "Remember window size:\n" "\n" "If enabled, the window size from the previous session will be restored when " "you open an FSearch window.\n" "\n" "Note that some window managers ignore this request and force the window to " "have a different size." msgstr "" "记住窗口大小:\n" "\n" "如果启用,当您打开 FSearch 窗口时,将恢复上一会话的窗口大小。\n" "\n" "请注意,某些窗口管理器会忽略此请求并强制窗口具有不同的大小。" #: src/fsearch_preferences.ui:1385 msgid "" "Behaviour after successfully opening a file:\n" "\n" "When a file/folder was successfully opened one of the following actions can " "be performed:\n" "\t• Nothing: Nothing happens.\n" "\t• Minimize: The currently selected FSearch window becomes " "minimized. \n" "\t• Close: Quit FSearch.\n" "\n" "You can configure if those actions should be triggered when the file was " "opened with\n" "\t• keyboard shortcuts or menu entries and/or\n" "\t• mouse click" msgstr "" "成功打开文件后的行为:\n" "\n" "成功打开文件/文件夹后,可以执行以下操作之一:\n" "• 什么都没有:什么都没有发生。\n" "• 最小化: 当前选定的 FSearch 窗口最小化。\n" "• 关闭: 退出 FSearch。\n" "\n" "您可以配置在打开文件时是否应触发这些操作\n" "• 键盘快捷键或菜单项和/或\n" "• 鼠标点击" #: src/fsearch_preferences.ui:1409 msgid "" "Show highlighted search terms:\n" "\n" "If enabled, the search terms will be highlighted in the results view. For " "example when you search for \"foo\" all appearances of foo in file/" "folder names will be highlighted with bold characters:\n" "\n" "\tfoobar.txt\n" "\tfile.foo\n" "\n" "This also works for regular expressions and wildcard expressions starting or " "ending with an asterisk. " msgstr "" "显示突出显示的搜索词:\n" "\n" "如果启用,搜索词将在结果视图中突出显示。 例如,当您搜索“foo”时,所有出现在文" "件/文件夹名称中的 foo 都将以粗体字符突出显示:\n" "\n" "foobar.txt\n" "文件。foo\n" "\n" "这也适用于以星号开头或结尾的正则表达式和通配符表达式。 " #: src/fsearch_preferences.ui:1431 msgid "" "Show tooltips:\n" "\n" "If enabled, the results view will show the full path of the focused file/" "folder in a small tooltip window." msgstr "" "显示工具提示:\n" "\n" "如果启用,结果视图将在小工具提示窗口中显示聚焦文件/文件夹的完整路径。" #: src/fsearch_preferences.ui:1448 msgid "" "Show icons in name column:\n" "\n" "If enabled, file/folder icons will be shown in the name column." msgstr "" "在名称栏中显示图标:\n" "\n" "如果启用,文件/文件夹图标将显示在名称列中。" #: src/fsearch_preferences.ui:1465 msgid "" "Remember column configuration:\n" "\n" "If enabled, the column configuration of the results view from the previous " "session will be restored when you open an FSearch window. This includes the " "size and visibility of all columns." msgstr "" "记住列配置:\n" "\n" "如果启用,当您打开 FSearch 窗口时,将恢复上一会话的结果视图的列配置。 这包括" "所有列的大小和可见性。" #: src/fsearch_preferences.ui:1482 msgid "" "Remember sort order:\n" "\n" "If enabled, the sort order of the results view from the previous session " "will be restored when you open an FSearch window." msgstr "" "记住排序顺序:\n" "\n" "如果启用,当您打开 FSearch 窗口时,将恢复上一会话的结果视图的排序顺序。" #: src/fsearch_preferences.ui:1499 msgid "" "Open path with double click in path column:\n" "\n" "If enabled, double clicking in the path column will open the selected path." msgstr "" "双击路径列打开路径:\n" "\n" "如果启用,双击路径列将打开所选路径。" #: src/fsearch_preferences.ui:1516 msgid "" "Single click to open:\n" "\n" "If enabled, a single click will open the selected file/folder. If you only " "want to select a file/folder while this setting is active, you need to a " "hold Ctrl at the same time while clicking the file/folder." msgstr "" "单击打开:\n" "\n" "如果启用,单击将打开选定的文件/文件夹。 如果您只想在此设置处于活动状态时选择" "文件/文件夹,则需要在单击文件/文件夹的同时按住 Ctrl。" #: src/fsearch_preferences.ui:1533 msgid "" "Show database indexing status:\n" "\n" "If enabled, the path that is currently being indexed is displayed in the " "statusbar." msgstr "" "显示数据库索引状态:\n" "\n" "如果启用,当前正在编制索引的路径将显示在状态栏中。" #: src/fsearch_preferences.ui:1550 msgid "" "Show warning dialogs:\n" "\n" "If enabled, a warning dialog is displayed when a file or folder failed to " "open." msgstr "" "显示警告对话框:\n" "\n" "如果启用,文件或文件夹无法打开时会显示警告对话框。" #: src/fsearch_preferences.ui:1567 msgid "" "Search in path when query contains path separators:\n" "\n" "If enabled, search terms containing path separators (i.e. \"/\") will be " "automatically matched against the full path of a file or folder." msgstr "" "搜索路径(如有路径分隔符):\n" "\n" "如果启用,包含路径分隔符(即“/”)的搜索词将自动与文件或文件夹的完整路径匹配。" #: src/fsearch_preferences.ui:1584 msgid "" "Match case when query contains at least one upper case character:\n" "\n" "If enabled, search terms containing at least one upper case character will " "trigger a case-sensitive search. This means a search term like Foo " "will match FooBar.txt but not foobar.txt." msgstr "" "当查询包含至少一个大写字符时匹配大小写:\n" "\n" "如果启用,包含至少一个大写字符的搜索词将触发区分大小写的搜索。 这意味着像 " "Foo 这样的搜索词将匹配 FooBar.txt 但不匹配 foobar.txt。" #: src/fsearch_preferences.ui:1601 msgid "" "Hide results when search is empty:\n" "\n" "If enabled, no search results are displayed when the search entry is empty.\n" "\n" "If disabled, all files and folders will be displayed when the search entry " "is empty." msgstr "" "搜索条件为空时不显示结果:\n" "\n" "如果启用,当搜索条目为空时不显示搜索结果。\n" "\n" "如果禁用,当搜索条目为空时将显示所有文件和文件夹。" #: src/fsearch_preferences.ui:1620 msgid "" "Search as you type:\n" "\n" "If enabled, the search is automatically updated with every keystroke.\n" "\n" "If disabled, the search is only updated when you hit Enter or press " "the search button. " msgstr "" "即时搜索:\n" "\n" "如果启用,每次输入都会自动更新搜索。\n" "\n" "如果禁用,则搜索仅在您按 Enter 或按搜索按钮时更新。 " #: src/fsearch_preferences.ui:1639 msgid "" "Update database on start:\n" "\n" "If enabled, the database will be updated automatically in the background " "when you start FSearch." msgstr "" "启动时更新数据库:\n" "\n" "如果启用,数据库将在您启动 FSearch 时在后台自动更新。" #: src/fsearch_preferences.ui:1656 msgid "" "Included folders:\n" "\n" "This list contains all folders you want to include in the database.\n" "\n" "\t• Active: If enabled, the path will included in the database to be " "searched in.\n" "\t• Path: The full path to be included.\n" "\t• One Filesystem: If enabled, FSearch won't cross filesystem " "boundaries for this folder" msgstr "" "包括的文件夹:\n" "\n" "此列表包含你想包括于数据库中的所有文件夹。\n" "\n" "• Active: 如启用,路径将被包括在要搜索的数据库内。\n" "• 路径: 要包括的完整路径。\n" "• One Filesystem:如启用,FSearch 不会为该文件夹跨越文件系统边界" #: src/fsearch_preferences.ui:1677 msgid "" "Add folder to database:\n" "\n" "This button opens a dialog where you can select a folder you want to include " "in the database for searching." msgstr "" "添加文件夹到数据库:\n" "\n" "此按钮会打开一个对话框,您可以在其中选择一个包含在数据库中用于搜索的文件夹。" #: src/fsearch_preferences.ui:1694 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of included folders." msgstr "" "删除选定的行:\n" "\n" "这将从包含的文件夹列表中删除选定的文件夹。" #: src/fsearch_preferences.ui:1711 msgid "" "Excluded folders:\n" "\n" "This list contains all folders you want to exclude from the database.\n" "\n" "\t• Active: If enabled, the path will excluded from the database and " "can't be searched in.\n" "\t• Path: The full path to be excluded." msgstr "" "排除的文件夹:\n" "\n" "此列表包含要从数据库中排除的所有文件夹。\n" "\n" "• Active: 如果启用,路径将从数据库中排除并且无法搜索。\n" "• 路径: 要排除的完整路径。" #: src/fsearch_preferences.ui:1731 msgid "" "Exclude folder from database:\n" "\n" "This button opens a dialog where you can select a folder you want to exclude " "from the database." msgstr "" "从数据库中排除文件夹:\n" "\n" "此按钮会打开一个对话框,您可以在其中选择要从数据库中排除的文件夹。" #: src/fsearch_preferences.ui:1748 msgid "" "Remove selected row:\n" "\n" "This removes the selected folder from the list of excluded folders." msgstr "" "删除选定的行:\n" "\n" "这将从排除的文件夹列表中删除选定的文件夹。" #: src/fsearch_preferences.ui:1765 msgid "" "Exclude files and folders from database:\n" "\n" "This is a semi-colon separated list of files (or folders) you want to " "exclude from the database. For example .git;.cache;*.swp will exclude " "all files or folders which are called either .git or .cache or " "end with .swp." msgstr "" "从数据库中排除文件和文件夹:\n" "\n" "这是要从数据库中排除的文件(或文件夹)的分号分隔列表。 例如 .git;.cache;*." "swp 将排除所有名为 .git.cache 或以 .swp。" #: src/fsearch_preferences.ui:1782 msgid "" "Exclude hidden files and folders:\n" "\n" "If enabled, hidden files and folders will be excluded from the database " "(i.e. all files or folders which start with a dot character)." msgstr "" "排除隐藏文件和文件夹:\n" "\n" "如果启用,隐藏文件和文件夹将从数据库中排除(即所有以点字符开头的文件或文件" "夹)。" #: src/fsearch_preferences.ui:1799 msgid "Focus a setting to get a detailed description of what it does." msgstr "聚焦设置以获取其功能的详细说明。" #: src/fsearch_preferences.ui:1812 msgid "" "Periodically update database at a specific time interval:\n" "\n" "If enabled and as long as FSearch is running, the database will be updated " "periodically with the given time interval.\n" "\n" "If you want to update the database in the background, even when FSearch is " "not running, you should use tools like cron or systemd timers to " "periodically trigger the update with:\n" "\n" "fsearch --update-database" msgstr "" "以特定时间间隔定期更新数据库:\n" "\n" "如果启用并且只要 FSearch 正在运行,数据库就会以给定的时间间隔定期更新。\n" "\n" "如果您想在后台更新数据库,即使 FSearch 未运行,您也应该使用 cron 或 systemd " "计时器等工具定期触发更新:\n" "\n" "fsearch --update-database" #: src/fsearch_preferences.ui:1833 msgid "" "Launch desktop files:\n" "\n" "If enabled, activating a .desktop file will launch the application " "defined within that file. This way FSearch can act like an application " "launcher. Otherwise the .desktop file will be opened with the default " "handler for this type of files, which is usually a text editor." msgstr "" "启动桌面文件:\n" "\n" "如启用,激活 .desktop 文件将启动那个文件中定义的程序。如此一来, " "FSearch 可以作为一个应用程序启动器。 不然, .desktop文件将由此文件类型" "的默认处理程序打开。通常是文本编辑器。" #: src/fsearch_preferences.ui:1850 msgid "" "Filters:\n" "\n" "This is a list of all available filters. A filter is a predefined search.\n" "\n" "\t• Name: A unique and descriptive identifier for the filter\n" "\t• Macro: By typing the macro text followed by a ':' you can enable " "the filter on demand\n" "\t• Query: The search term by which the database should be filtered" msgstr "" "筛选器:\n" "\n" "这是所有可用筛选器的列表。筛选器是预定义的搜索。\n" "\n" "• 名称: 筛选器唯一和描述性的标识符\n" "• 宏: 通过输入宏文本后加上':',你可以根据需要启用筛选器\n" "• 查询: 过滤数据库的检索项" #: src/fsearch_preferences.ui:1871 msgid "" "Add a new filter:\n" "\n" "This button opens a dialog where you can edit a new filter." msgstr "" "添加新筛选器:\n" "\n" "这个按钮打开一个对话框,你可以在其中编辑新筛选器。" #: src/fsearch_preferences.ui:1888 msgid "" "Remove selected filter:\n" "\n" "This button removes the currently selected filter." msgstr "" "删除所选的筛选器:\n" "\n" "这个按钮删除当前选中的筛选器。" #: src/fsearch_preferences.ui:1905 msgid "" "Edit selected filter:\n" "\n" "This button opens a dialog where you can edit the selected filter." msgstr "" "编辑所选的筛选器:\n" "\n" "这个按钮打开一个对话框,你可以在其中编辑选中的筛选器。" #: src/fsearch_preferences.ui:1922 msgid "" "Restore default filters:\n" "\n" "This button restores the default filter configuration.\n" "\n" "⚠ All filters which were created or edited by the user will be lost! ⚠" msgstr "" "还原默认筛选器:\n" "\n" "这个按钮还原默认的筛选器配置。\n" "\n" "⚠ 该用户编辑或创建的所有筛选器都将丢失!⚠" #: src/fsearch_preferences.ui:1941 msgid "" "Exit on Escape:\n" "\n" "If enabled, FSearch exits when the Escape key is pressed instead of the " "window being minimized." msgstr "" "按 Escape 退出:\n" "\n" "如启用,FSearch 会在按下 Escape 键时而不是最小化窗口时退出。" #: src/fsearch_preferences.ui:1960 src/fsearch_window.ui:117 src/menus.ui:150 msgid "Help" msgstr "帮助" #: src/fsearch_preferences_ui.c:194 src/fsearch_preferences_ui.c:209 msgid "Select folder" msgstr "选择文件夹" #: src/fsearch_preferences_ui.c:199 src/fsearch_preferences_ui.c:209 msgid "_Select" msgstr "选择" #: src/fsearch_preferences_ui.c:326 msgid "Add filter" msgstr "添加筛选器" #: src/fsearch_preferences_widgets.c:220 src/fsearch_preferences_widgets.c:267 msgid "Active" msgstr "激活" #: src/fsearch_preferences_widgets.c:224 src/fsearch_preferences_widgets.c:271 #: src/fsearch_window.c:620 src/menus.ui:213 src/menus.ui:261 msgid "Path" msgstr "路径" #: src/fsearch_preferences_widgets.c:227 msgid "One Filesystem" msgstr "一个文件系统" #: src/fsearch_preferences_widgets.c:290 src/fsearch_window.c:613 #: src/menus.ui:209 src/menus.ui:257 msgid "Name" msgstr "名称" #: src/fsearch_preferences_widgets.c:291 msgid "Macro" msgstr "宏" #: src/fsearch_preferences_widgets.c:292 msgid "Query" msgstr "查询" #: src/fsearch_statusbar.c:56 #, c-format msgid "%'d Item" msgstr "%'d 项" #: src/fsearch_statusbar.c:56 src/fsearch_statusbar.c:192 #, c-format msgid "%'d Items" msgstr "%'d 项" #: src/fsearch_statusbar.c:78 msgid "Querying…" msgstr "查询中…" #: src/fsearch_statusbar.c:170 msgid "Loading…" msgstr "加载中…" #: src/fsearch_statusbar.c:175 msgid "Scanning…" msgstr "扫描中…" #: src/fsearch_statusbar.ui:52 msgid "Number of Search Results" msgstr "搜索到的数量" #: src/fsearch_statusbar.ui:53 msgid "0 Items" msgstr "0 项" #: src/fsearch_statusbar.ui:106 msgid "Cancel" msgstr "取消" #: src/fsearch_statusbar.ui:153 msgid "Index:" msgstr "索引:" #: src/fsearch_statusbar.ui:228 msgid "Number of selected folders" msgstr "已择文件夹的数量" #: src/fsearch_statusbar.ui:229 src/fsearch_statusbar.ui:254 msgid "0/0" msgstr "0/0" #: src/fsearch_statusbar.ui:253 msgid "Number of selected files" msgstr "选定的文件数量" #: src/fsearch_statusbar.ui:328 src/fsearch_window.ui:248 msgid "Cancel database update" msgstr "取消更新数据库" #: src/fsearch_statusbar.ui:369 msgid "Number of database items" msgstr "数据库的项目数" #: src/fsearch_statusbar.ui:370 msgid "(empty)" msgstr "(空)" #: src/fsearch_statusbar.ui:407 msgid "" "Search term contains upper case characters.\n" "Match Case was temporarily activated for this term." msgstr "" "搜索项包含大写字符。\n" "暂将 匹配大小写 应用于此搜索项。" #: src/fsearch_statusbar.ui:438 src/fsearch_statusbar.ui:491 msgid "CASE" msgstr "实例" #: src/fsearch_statusbar.ui:514 msgid "" "Search term contains path separators.\n" "Search in Path was temporarily activated for this term." msgstr "" "搜索项包含路径分隔符。\n" "暂将 在路径中搜索 应用于此搜索项。" #: src/fsearch_statusbar.ui:545 src/fsearch_statusbar.ui:598 msgid "PATH" msgstr "路径" #: src/fsearch_statusbar.ui:651 msgid "REGEX" msgstr "正则表达式" #: src/fsearch_window.c:627 src/menus.ui:273 msgid "Size" msgstr "大小" #: src/fsearch_window.c:634 src/menus.ui:269 msgid "Type" msgstr "类型" #: src/fsearch_window.c:641 src/menus.ui:265 msgid "Extension" msgstr "扩展名" #: src/fsearch_window.c:648 src/menus.ui:277 msgid "Date Modified" msgstr "修改日期" #: src/fsearch_window.c:662 msgid "" "Sorting by Type can take a few seconds with many results.\n" "\n" "This sort order is not persistent, it will be reset when the search term " "changes." msgstr "" "按类型排序需要几秒钟,出现许多结果。\n" "\n" "此排序顺序不是持久的,它会在搜索词更改时重置。" #: src/fsearch_window.ui:58 src/fsearch_window.ui:420 src/menus.ui:129 msgid "FSearch Online" msgstr "FSearch 在线" #: src/fsearch_window.ui:74 src/fsearch_window.ui:145 src/menus.ui:131 msgid "Donate" msgstr "捐赠" #: src/fsearch_window.ui:89 src/menus.ui:142 msgid "Forum" msgstr "论坛" #: src/fsearch_window.ui:103 src/menus.ui:146 msgid "Bug Reports and Feature Requests" msgstr "缺陷报告和功能请求" #: src/fsearch_window.ui:162 src/menus.ui:133 msgid "GitHub Sponsors" msgstr "GitHub 赞助者" #: src/fsearch_window.ui:176 src/menus.ui:137 msgid "PayPal" msgstr "PayPal" #: src/fsearch_window.ui:214 msgid "New window" msgstr "新窗口打开" #: src/fsearch_window.ui:234 msgid "Update database" msgstr "更新数据源" #: src/fsearch_window.ui:289 src/menus.ui:112 msgid "Search in Path" msgstr "搜索路径" #: src/fsearch_window.ui:303 src/menus.ui:116 msgid "Match Case" msgstr "区分大小写" #: src/fsearch_window.ui:317 src/menus.ui:120 msgid "Enable RegEx" msgstr "启用正则" #: src/fsearch_window.ui:342 src/menus.ui:95 msgid "Show Statusbar" msgstr "显示状态栏" #: src/fsearch_window.ui:356 src/menus.ui:99 msgid "Show Filter" msgstr "显示筛选器" #: src/fsearch_window.ui:370 src/menus.ui:103 msgid "Show Search Button" msgstr "显示搜索按钮" #: src/fsearch_window.ui:435 src/menus.ui:155 msgid "About" msgstr "关于" #: src/fsearch_window.ui:460 src/menus.ui:47 msgid "Quit" msgstr "退出" #: src/fsearch_window.ui:572 msgid "Search…" msgstr "搜索…" #: src/fsearch_window.ui:594 msgid "Select a Filter" msgstr "选择筛选器" #: src/fsearch_window_actions.c:88 #, c-format msgid "Do you really want to open %d file(s)?" msgstr "确认要打开%d吗?" #: src/fsearch_window_actions.c:90 msgid "Opening Files…" msgstr "打开文件中…" #: src/fsearch_window_actions.c:176 #, c-format msgid "Do you really want to remove %d file(s)?" msgstr "确认要删除%d吗?" #: src/fsearch_window_actions.c:180 msgid "Deleting files…" msgstr "删除文件中…" #: src/fsearch_window_actions.c:180 msgid "Moving files to trash…" msgstr "正在移动文件到回收站…" #: src/fsearch_window_actions.c:207 src/fsearch_window_actions.c:482 msgid "Something went wrong." msgstr "出问题了。" #: src/fsearch_window_actions.c:215 #, c-format msgid "Deleted %d file(s)." msgstr "删除了 %d 个文件。" #: src/fsearch_window_actions.c:215 #, c-format msgid "Moved %d file(s) to the trash." msgstr "移动了 %d 个文件至回收站。" #: src/fsearch_window_actions.c:221 msgid "" "The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates." msgstr "需要更新数据库才能显示这些更改! 这将在未来的更新中得到修复。" #: src/fsearch_window_actions.c:247 #, c-format msgid "Do you really want to open %d file property windows?" msgstr "确认要打开%d属性窗口吗?" #: src/fsearch_window_actions.c:251 msgid "Opening file properties…" msgstr "打开文件属性中…" #: src/menus.ui:6 msgid "_File" msgstr "_文件" #: src/menus.ui:9 msgid "New Window" msgstr "新窗口" #: src/menus.ui:16 src/menus.ui:165 msgid "_Open" msgstr "_打开" #: src/menus.ui:21 msgid "Open Folder" msgstr "打开文件夹" #: src/menus.ui:29 msgid "Update Database" msgstr "更新数据库" #: src/menus.ui:35 msgid "Cancel Update" msgstr "取消更新" #: src/menus.ui:42 msgid "Close Window" msgstr "关闭窗口" #: src/menus.ui:54 msgid "_Edit" msgstr "_编辑" #: src/menus.ui:57 src/menus.ui:201 msgid "_Copy" msgstr "_复制" #: src/menus.ui:62 src/menus.ui:222 msgid "Cu_t" msgstr "剪切" #: src/menus.ui:69 msgid "Select All" msgstr "选择所有" #: src/menus.ui:74 msgid "Deselect All" msgstr "取消所有选择" #: src/menus.ui:78 msgid "Invert Selection" msgstr "反选" #: src/menus.ui:92 msgid "_View" msgstr "_视图" #: src/menus.ui:109 msgid "_Search" msgstr "_搜索" #: src/menus.ui:126 msgid "_Help" msgstr "_帮助" #: src/menus.ui:171 msgid "Open _With" msgstr "打开方式" #: src/menus.ui:185 msgid "_Open Folder" msgstr "_打开文件夹" #: src/menus.ui:207 msgid "Copy as Text" msgstr "以文本复制" #: src/menus.ui:217 msgid "Path + Name" msgstr "路径+名称" #: src/menus.ui:230 msgid "Move to _Trash" msgstr "移动到回收站" #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "取消数据库更新\n" #~ " " #~ msgid "" #~ "Select a Filter\n" #~ " " #~ msgstr "" #~ "选择筛选器\n" #~ " " #~ msgid "" #~ "Search\n" #~ " " #~ msgstr "" #~ "搜索\n" #~ " " #~ msgid "" #~ "Number of Search Results\n" #~ " " #~ msgstr "" #~ "搜索结果数量\n" #~ " " #~ msgid "" #~ "Number of selected folders\n" #~ " " #~ msgstr "" #~ "选中的文件夹数\n" #~ " " #~ msgid "" #~ "Number of selected files\n" #~ " " #~ msgstr "" #~ "选中的文件数\n" #~ " " #, fuzzy #~| msgid "" #~| "Cancel database update\n" #~| " " #~ msgid "" #~ "Cancel database update\n" #~ " " #~ msgstr "" #~ "取消数据库更新\n" #~ " " #, fuzzy #~| msgid "" #~| "Number of selected files\n" #~| " " #~ msgid "" #~ "Number of database items\n" #~ " " #~ msgstr "" #~ "选中的文件数\n" #~ " " #~ msgid "" #~ "Cancel database\n" #~ " update\n" #~ " " #~ msgstr "" #~ "取消数据库\n" #~ " 更新\n" #~ " " #~ msgid "" #~ "Number of database\n" #~ " items\n" #~ " " #~ msgstr "" #~ "数据库条目\n" #~ " 数\n" #~ " " #~ msgid "" #~ "Search term contains upper case\n" #~ " characters.\n" #~ " Match Case was temporarily " #~ "activated for this term.\n" #~ " " #~ msgstr "" #~ "搜索条目包含大写\n" #~ " 字符。\n" #~ " 暂将匹配大小写 选项应用于此检索" #~ "项。\n" #~ " " #~ msgid "page0" #~ msgstr "第0页" #~ msgid "page1" #~ msgstr "第1页" #~ msgid "page2" #~ msgstr "第2页" #~ msgid "page30" #~ msgstr "页30" #~ msgid "page18" #~ msgstr "页18" #~ msgid "page31" #~ msgstr "页31" #~ msgid "page32" #~ msgstr "页32" #~ msgid "page33" #~ msgstr "页33" #~ msgid "page34" #~ msgstr "页34" #~ msgid "page35" #~ msgstr "页35" #~ msgid "" #~ "Included folders:\n" #~ "\n" #~ " This list contains all folders you want to include " #~ "in the database.\n" #~ "\n" #~ " • Active: If enabled, the path will included " #~ "in the database to be searched in.\n" #~ " • Path: The full path to be included.\n" #~ " • Update: This setting is useful if you want " #~ "to exclude certain paths from\n" #~ " being\n" #~ " updated (e.g. a path to a slow USB drive which " #~ "doesn't change often)\n" #~ " " #~ msgstr "" #~ "包含的文件夹:\n" #~ "\n" #~ " 此列表包含要包含在数据库中的所有文件夹。\n" #~ "\n" #~ " • Active: 如果启用,路径将包含在要搜索的数" #~ "据库中。\n" #~ " • 路径: 要包含的完整路径。\n" #~ " • 更新:如果您想从\n" #~ " 存在\n" #~ " 已更新(例如,不经常更改的慢速 USB 驱动器的路" #~ "径)\n" #~ " " #~ msgid "" #~ "Remove selected row:\n" #~ "\n" #~ " This removes the selected folder from the list of " #~ "included folders.\n" #~ " " #~ msgstr "" #~ "删除选定的行:\n" #~ "\n" #~ " 这将从包含的文件夹列表中删除选定的文件夹。\n" #~ " " #~ msgid "Do you want to keep the window open?" #~ msgstr "是否保持窗口打开?" #~ msgid "_Copy Filepath" #~ msgstr "(_C)复制文件路径" #~ msgid "Building lookup list…" #~ msgstr "构建查找列表…" #~ msgid "Update" #~ msgstr "更新" #, fuzzy #~| msgid "%'d Items" #~ msgid "≥%'d Items" #~ msgstr "%'d 项" #~ msgid "Last Updated: %Y-%m-%d %H:%M" #~ msgstr "最后更新: %Y-%m-%d %H:%M" #~ msgid "_Delete" #~ msgstr "_删除" #~ msgid "…" #~ msgstr "…" #~ msgid "Limit number of results:" #~ msgstr "限制结果的数量:" #~ msgid "Background tasks are active." #~ msgstr "后台任务处于活动状态。" #~ msgid "" #~ "Closing the window isn't possible right now.\n" #~ "Please wait a moment and then try again." #~ msgstr "" #~ "目前无法关闭窗口。\n" #~ "请稍等,然后重试。" #~ msgid "Go to Edit → Preferences → Database and add some locations" #~ msgstr "前往 编辑 → 选项 → 数据库 添加路径" #, fuzzy #~| msgid "page0" #~ msgid "page4" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page6" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page7" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page8" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page9" #~ msgstr "页0" #, fuzzy #~| msgid "page1" #~ msgid "page10" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page11" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page12" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page13" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page14" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page15" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page16" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page17" #~ msgstr "页1" #, fuzzy #~| msgid "page1" #~ msgid "page19" #~ msgstr "页1" #, fuzzy #~| msgid "page0" #~ msgid "page20" #~ msgstr "页0" #, fuzzy #~| msgid "page1" #~ msgid "page21" #~ msgstr "页1" #, fuzzy #~| msgid "page0" #~ msgid "page22" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page23" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page24" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page25" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page26" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page27" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page28" #~ msgstr "页0" #, fuzzy #~| msgid "page0" #~ msgid "page29" #~ msgstr "页0" #~ msgid "system-search" #~ msgstr "system-search" #, fuzzy #~| msgid "_Copy" #~ msgid "Copy" #~ msgstr "_复制" #~ msgid "Add…" #~ msgstr "添加…" #~ msgid "Remove" #~ msgstr "删除" #~ msgid "Follow symbolic links" #~ msgstr "展开软链接" #~ msgid "" #~ "INFO: \"Enable dark theme\" might not have an effect,\n" #~ "since not every GTK+ theme provides a dark version." #~ msgstr "" #~ "消息: \"启用暗色主题\" 可能不会生效,\n" #~ "因为不是每个 gtk+ 主题都支持暗色系。" #, fuzzy #~| msgid "Enable RegEx" #~ msgid "Enable menubar" #~ msgstr "启用正则" #~ msgid "Open Containing Folder" #~ msgstr "打开文件夹" #~ msgid "Open File(s) in File Manager" #~ msgstr "在文件管理器中打开文件" #~ msgid "Move to Trash" #~ msgstr "删除到回收站" #~ msgid "Show Menubar" #~ msgstr "显示菜单" #, fuzzy #~ msgid "Enable" #~ msgstr "启用正则" #, fuzzy #~| msgid "Loading Database…" #~ msgid "Loading Database..." #~ msgstr "加载数据库…" #~ msgid "..." #~ msgstr "..." #~ msgid "Updating Database..." #~ msgstr "数据库更新中..." #~ msgid "Search..." #~ msgstr "搜索..." #~ msgid "Add" #~ msgstr "添加" #~ msgid "files?" #~ msgstr "项文件?" #~ msgid "C_ut" #~ msgstr "C_ut" fsearch-0.2.3/snap/000077500000000000000000000000001446344336300141025ustar00rootroot00000000000000fsearch-0.2.3/snap/snapcraft.yaml000066400000000000000000000016741446344336300167570ustar00rootroot00000000000000name: fsearch version: '0.2alpha' grade: devel adopt-info: fsearch base: core18 confinement: strict license: GPL-2.0+ compression: lzo apps: fsearch: command: usr/bin/fsearch extensions: [ gnome-3-28 ] plugs: - home - removable-media - udisks2 slots: - dbus-daemon common-id: io.github.cboxdoerfer.FSearch parts: fsearch: plugin: meson source: https://github.com/cboxdoerfer/fsearch.git meson-parameters: - -Dchannel=snap-nightly - --buildtype=release - --prefix=/snap/fsearch/current/usr build-packages: - gettext - libglib2.0-dev - libicu-dev - libpcre2-dev stage-packages: - libicu60 - libpcre2-8-0 organize: snap/fsearch/current/usr: usr parse-info: [ usr/share/metainfo/io.github.cboxdoerfer.FSearch.appdata.xml ] slots: dbus-daemon: interface: dbus bus: session name: io.github.cboxdoerfer.FSearchfsearch-0.2.3/src/000077500000000000000000000000001446344336300137305ustar00rootroot00000000000000fsearch-0.2.3/src/.clang-format000066400000000000000000000012651446344336300163070ustar00rootroot00000000000000BasedOnStyle: LLVM Language: Cpp IndentWidth: 4 ColumnLimit: 120 AlwaysBreakAfterReturnType: All AlignAfterOpenBracket: Align AlignOperands: AlignAfterOperator AllowAllArgumentsOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: Never AllowShortIfStatementsOnASingleLine: false BinPackArguments: false BinPackParameters: false BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Custom BraceWrapping: BeforeElse: true # Penalties PenaltyBreakAssignment: 50 PenaltyBreakBeforeFirstCallParameter: 40 PenaltyBreakComment: 10 PenaltyBreakFirstLessLess: 0 PenaltyBreakString: 10 PenaltyExcessCharacter: 10 PenaltyReturnTypeOnItsOwnLine: 30fsearch-0.2.3/src/fsearch.c000066400000000000000000001135101446344336300155100ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-application" #ifdef HAVE_CONFIG_H #include #endif #include "fsearch.h" #include "fsearch_clipboard.h" #include "fsearch_config.h" #include "fsearch_database.h" #include "fsearch_file_utils.h" #include "fsearch_limits.h" #include "fsearch_preferences_ui.h" #include "fsearch_ui_utils.h" #include "fsearch_window.h" #include "icon_resources.h" #include "ui_resources.h" #include #include #include #include #include #include struct _FsearchApplication { GtkApplication parent; FsearchDatabase *db; FsearchConfig *config; FsearchThreadPool *pool; GThreadPool *db_pool; char *option_search_term; bool new_window; guint file_manager_watch_id; bool has_file_manager_on_bus; FsearchDatabaseState db_state; guint db_timeout_id; GCancellable *db_thread_cancellable; int num_database_update_active; GMutex mutex; bool is_shutting_down; }; static const char *fsearch_bus_name = "io.github.cboxdoerfer.FSearch"; static const char *fsearch_db_worker_bus_name = "io.github.cboxdoerfer.FSearchDatabaseWorker"; static const char *fsearch_object_path = "/io/github/cboxdoerfer/FSearch"; enum { FSEARCH_SIGNAL_DATABASE_SCAN_STARTED, FSEARCH_SIGNAL_DATABASE_UPDATE_FINISHED, FSEARCH_SIGNAL_DATABASE_LOAD_STARTED, NUM_FSEARCH_SIGNALS }; typedef enum FsearchDatabaseActionType { FSEARCH_DATABASE_ACTION_SCAN, FSEARCH_DATABASE_ACTION_LOAD, NUM_FSEARCH_DATABASE_ACTION_TYPES, } FsearchDatabaseActionType; typedef struct { FsearchDatabaseActionType action; void (*update_func)(FsearchApplication *, FsearchDatabase *); void (*started_cb)(void *); void *started_cb_data; void (*finished_cb)(void *); void (*cancelled_cb)(void *); void *cancelled_cb_data; } DatabaseUpdateContext; static guint fsearch_signals[NUM_FSEARCH_SIGNALS]; G_DEFINE_TYPE(FsearchApplication, fsearch_application, GTK_TYPE_APPLICATION) static void action_set_enabled(const char *action_name, gboolean enabled); static gboolean on_database_scan_enqueue(gpointer data); static void set_accels_for_escape(GApplication *app); static gboolean on_database_auto_update(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION(user_data); g_debug("[app] scheduled database update started"); g_action_group_activate_action(G_ACTION_GROUP(self), "update_database", NULL); return G_SOURCE_CONTINUE; } static void database_auto_update_init(FsearchApplication *fsearch) { if (fsearch->db_timeout_id != 0) { g_source_remove(fsearch->db_timeout_id); fsearch->db_timeout_id = 0; } if (fsearch->config->update_database_every) { guint seconds = fsearch->config->update_database_every_hours * 3600 + fsearch->config->update_database_every_minutes * 60; if (seconds < 60) { seconds = 60; } g_debug("[app] update database every %d seconds", seconds); fsearch->db_timeout_id = g_timeout_add_seconds(seconds, on_database_auto_update, fsearch); } } static gboolean on_database_notify_status(gpointer user_data) { g_autofree char *text = user_data; g_return_val_if_fail(text, G_SOURCE_REMOVE); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; GList *windows = gtk_application_get_windows(GTK_APPLICATION(app)); for (; windows; windows = windows->next) { GtkWindow *window = windows->data; if (FSEARCH_IS_APPLICATION_WINDOW(window)) { fsearch_application_window_set_database_index_progress((FsearchApplicationWindow *)window, text); } } return G_SOURCE_REMOVE; } static void database_notify_status_cb(const char *text) { if (text) { g_idle_add(on_database_notify_status, g_strdup(text)); } } static void prepare_windows_for_db_update(FsearchApplication *app) { GList *windows = gtk_application_get_windows(GTK_APPLICATION(app)); for (; windows; windows = windows->next) { FsearchApplicationWindow *window = windows->data; if (FSEARCH_IS_APPLICATION_WINDOW(window)) { fsearch_application_window_remove_model(window); } } } static gboolean on_database_update_finished(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION_DEFAULT; FsearchDatabase *db = user_data; if (self->is_shutting_down) { g_debug("[app] update finished, but app is shutting down"); g_clear_pointer(&db, db_unref); return G_SOURCE_REMOVE; } fsearch_application_state_lock(self); if (!g_cancellable_is_cancelled(self->db_thread_cancellable)) { prepare_windows_for_db_update(self); g_clear_pointer(&self->db, db_unref); self->db = g_steal_pointer(&db); } else if (db) { g_clear_pointer(&db, db_unref); } g_cancellable_reset(self->db_thread_cancellable); self->num_database_update_active--; if (self->num_database_update_active == 0) { action_set_enabled("update_database", TRUE); action_set_enabled("cancel_update_database", FALSE); } fsearch_application_state_unlock(self); g_signal_emit(self, fsearch_signals[FSEARCH_SIGNAL_DATABASE_UPDATE_FINISHED], 0); return G_SOURCE_REMOVE; } static void database_update_finished_cb(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION_DEFAULT; self->db_state = FSEARCH_DATABASE_STATE_IDLE; g_idle_add(on_database_update_finished, user_data); } static gboolean on_database_load_started(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION(user_data); g_signal_emit(self, fsearch_signals[FSEARCH_SIGNAL_DATABASE_LOAD_STARTED], 0); return G_SOURCE_REMOVE; } static gboolean on_database_scan_started(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION(user_data); g_signal_emit(self, fsearch_signals[FSEARCH_SIGNAL_DATABASE_SCAN_STARTED], 0); return G_SOURCE_REMOVE; } static void database_load_started_cb(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION(user_data); self->db_state = FSEARCH_DATABASE_STATE_LOADING; g_idle_add(on_database_load_started, self); } static void database_scan_started_cb(gpointer user_data) { FsearchApplication *self = FSEARCH_APPLICATION(user_data); self->db_state = FSEARCH_DATABASE_STATE_SCANNING; g_idle_add(on_database_scan_started, self); } static void database_scan_and_save(FsearchApplication *app, FsearchDatabase *db) { const bool scan_successful = db_scan(db, app->db_thread_cancellable, app->config->show_indexing_status ? database_notify_status_cb : NULL); if (scan_successful && !g_cancellable_is_cancelled(app->db_thread_cancellable)) { g_autofree gchar *db_path = fsearch_application_get_database_dir(); if (db_path) { if (app->config->show_indexing_status) { database_notify_status_cb(_("Saving…")); } db_save(db, db_path); } } } static void database_load(FsearchApplication *app, FsearchDatabase *db) { g_autofree char *db_file_path = fsearch_application_get_database_file_path(); if (!db_file_path) { return; } if (!db_load(db, db_file_path, app->config->show_indexing_status ? database_notify_status_cb : NULL) && !app->config->update_database_on_launch) { // load failed -> trigger rescan g_idle_add(on_database_scan_enqueue, NULL); } } static void database_scan_or_load_enqueue(FsearchDatabaseActionType action) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; action_set_enabled("update_database", FALSE); action_set_enabled("cancel_update_database", TRUE); g_cancellable_reset(app->db_thread_cancellable); app->num_database_update_active++; DatabaseUpdateContext *ctx = calloc(1, sizeof(DatabaseUpdateContext)); g_assert(ctx); switch (action) { case FSEARCH_DATABASE_ACTION_SCAN: ctx->update_func = database_scan_and_save; ctx->started_cb = database_scan_started_cb; break; case FSEARCH_DATABASE_ACTION_LOAD: ctx->update_func = database_load; ctx->started_cb = database_load_started_cb; break; default: g_assert_not_reached(); } ctx->started_cb_data = app; ctx->finished_cb = database_update_finished_cb; g_thread_pool_push(app->db_pool, g_steal_pointer(&ctx), NULL); } static gboolean on_database_scan_enqueue(gpointer data) { database_scan_or_load_enqueue(FSEARCH_DATABASE_ACTION_SCAN); return G_SOURCE_REMOVE; } static void database_pool_func(gpointer data, gpointer user_data) { FsearchApplication *app = FSEARCH_APPLICATION(user_data); g_autofree DatabaseUpdateContext *ctx = data; g_return_if_fail(ctx); if (ctx->started_cb) { ctx->started_cb(ctx->started_cb_data); } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); fsearch_application_state_lock(app); FsearchDatabase *db = db_new(app->config->indexes, app->config->exclude_locations, app->config->exclude_files, app->config->exclude_hidden_items); fsearch_application_state_unlock(app); ctx->update_func(app, db); g_timer_stop(timer); const double seconds = g_timer_elapsed(timer, NULL); g_debug("[app] database update finished in %.2f ms", seconds * 1000); if (ctx->finished_cb) { ctx->finished_cb(db); } } static void move_search_term_to_window(FsearchApplication *app, FsearchApplicationWindow *win) { if (!app->option_search_term) { return; } GtkEntry *entry = fsearch_application_window_get_search_entry(win); g_return_if_fail(entry); gtk_entry_set_text(entry, app->option_search_term); g_clear_pointer(&app->option_search_term, g_free); } static FsearchApplicationWindow * get_first_application_window(FsearchApplication *app) { GList *windows = gtk_application_get_windows(GTK_APPLICATION(app)); if (!windows || !FSEARCH_IS_APPLICATION_WINDOW(windows->data)) { return NULL; } return FSEARCH_APPLICATION_WINDOW(windows->data); } static GString * get_application_version(void) { GString *version = g_string_new(PACKAGE_VERSION); #ifdef BUILD_CHANNEL if (g_strcmp0(BUILD_CHANNEL, "other") != 0) { g_string_append(version, " ("); g_string_append(version, BUILD_CHANNEL); g_string_append(version, ")"); } #endif return version; } static void show_url(FsearchApplication *app, const char *url) { g_return_if_fail(url); g_return_if_fail(FSEARCH_IS_APPLICATION(app)); FsearchApplicationWindow *window = get_first_application_window(app); if (!window) { return; } gtk_show_uri_on_window(GTK_WINDOW(window), url, GDK_CURRENT_TIME, NULL); } static void action_forum_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { show_url(app, "https://github.com/cboxdoerfer/fsearch/discussions/"); } static void action_bug_report_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { show_url(app, "https://github.com/cboxdoerfer/fsearch/issues/"); } static void action_donate_github_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { show_url(app, "https://github.com/sponsors/cboxdoerfer"); } static void action_donate_paypal_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { show_url(app, "https://www.paypal.com/donate/?hosted_button_id=TTXBUD7PMZXN2"); } static void action_help_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { show_url(app, "https://github.com/cboxdoerfer/fsearch/wiki/"); } static void action_about_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { g_assert(FSEARCH_IS_APPLICATION(app)); FsearchApplicationWindow *window = get_first_application_window(app); if (!window) { return; } g_autoptr(GString) version = get_application_version(); gtk_show_about_dialog(GTK_WINDOW(window), "program-name", PACKAGE_NAME, "logo-icon-name", "io.github.cboxdoerfer.FSearch", "license-type", GTK_LICENSE_GPL_2_0, "copyright", "Christian Boxdörfer", "website", "https://github.com/cboxdoerfer/fsearch", "version", version->str, "translator-credits", _("translator-credits"), "comments", _("A search utility focusing on performance and advanced features"), NULL); } static void action_quit_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { // TODO: windows need to be cleaned up manually here g_application_quit(G_APPLICATION(app)); } static void on_preferences_ui_finished(FsearchConfig *new_config) { if (!new_config) { return; } FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfigCompareResult config_diff = {.database_config_changed = true, .listview_config_changed = true, .search_config_changed = true}; if (app->config) { config_diff = config_cmp(app->config, new_config); g_clear_pointer(&app->config, config_free); } app->config = new_config; config_save(app->config); g_object_set(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", new_config->enable_dark_theme, NULL); database_auto_update_init(app); if (config_diff.database_config_changed) { database_scan_or_load_enqueue(FSEARCH_DATABASE_ACTION_SCAN); } GList *windows = gtk_application_get_windows(GTK_APPLICATION(app)); for (GList *w = windows; w; w = w->next) { FsearchApplicationWindow *window = w->data; if (config_diff.search_config_changed) { fsearch_application_window_update_query_flags(window); } if (config_diff.listview_config_changed) { fsearch_application_window_update_listview_config(window); } } set_accels_for_escape(G_APPLICATION(app)); } static void action_preferences_activated(GSimpleAction *action, GVariant *parameter, gpointer gapp) { g_assert(FSEARCH_IS_APPLICATION(gapp)); FsearchApplication *app = FSEARCH_APPLICATION(gapp); const FsearchPreferencesPage page = g_variant_get_uint32(parameter); GtkWindow *win_active = gtk_application_get_active_window(GTK_APPLICATION(app)); if (!win_active) { return; } FsearchConfig *copy_config = config_copy(app->config); preferences_ui_launch(copy_config, win_active, page, on_preferences_ui_finished); } static void action_cancel_update_database_activated(GSimpleAction *action, GVariant *parameter, gpointer user_data) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; g_cancellable_cancel(app->db_thread_cancellable); } static void action_update_database_activated(GSimpleAction *action, GVariant *parameter, gpointer user_data) { database_scan_or_load_enqueue(FSEARCH_DATABASE_ACTION_SCAN); } static void action_new_window_activated(GSimpleAction *action, GVariant *parameter, gpointer app) { GtkWindow *window = GTK_WINDOW(fsearch_application_window_new(FSEARCH_APPLICATION(app))); FsearchApplication *self = FSEARCH_APPLICATION(app); move_search_term_to_window(self, FSEARCH_APPLICATION_WINDOW(window)); fsearch_application_window_focus_search_entry(FSEARCH_APPLICATION_WINDOW(window)); gtk_window_present(window); } static void action_set_enabled(const char *action_name, gboolean enabled) { GAction *action = g_action_map_lookup_action(G_ACTION_MAP(FSEARCH_APPLICATION_DEFAULT), action_name); g_return_if_fail(action); g_debug(enabled ? "[app] enabled action: %s" : "[app] disabled action: %s", action_name); g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled); } static void fsearch_application_shutdown(GApplication *app) { g_assert(FSEARCH_IS_APPLICATION(app)); FsearchApplication *fsearch = FSEARCH_APPLICATION(app); GList *windows = gtk_application_get_windows(GTK_APPLICATION(app)); for (; windows; windows = windows->next) { GtkWindow *window = windows->data; if (FSEARCH_IS_APPLICATION_WINDOW(window)) { fsearch_application_window_prepare_shutdown(window); } } if (fsearch->file_manager_watch_id) { g_bus_unwatch_name(fsearch->file_manager_watch_id); fsearch->file_manager_watch_id = 0; } if (fsearch->db_pool) { g_debug("[app] waiting for database thread to exit..."); fsearch->is_shutting_down = true; g_cancellable_cancel(fsearch->db_thread_cancellable); g_thread_pool_free(g_steal_pointer(&fsearch->db_pool), FALSE, TRUE); g_debug("[app] database thread finished."); } g_clear_pointer(&fsearch->db, db_unref); g_clear_object(&fsearch->db_thread_cancellable); g_clear_pointer(&fsearch->option_search_term, g_free); config_save(fsearch->config); g_clear_pointer(&fsearch->config, config_free); g_mutex_clear(&fsearch->mutex); G_APPLICATION_CLASS(fsearch_application_parent_class)->shutdown(app); } static void fsearch_application_finalize(GObject *object) { G_OBJECT_CLASS(fsearch_application_parent_class)->finalize(object); } static void on_file_manager_name_appeared(GDBusConnection *connection, const gchar *name, const gchar *name_owner, gpointer user_data) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; g_return_if_fail(app); app->has_file_manager_on_bus = true; } static void on_file_manager_name_vanished(GDBusConnection *connection, const gchar *name, gpointer user_data) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; g_return_if_fail(app); app->has_file_manager_on_bus = false; } static void set_accel_for_action(GApplication *app, const char *action, const char *accel) { gtk_application_set_accels_for_action(GTK_APPLICATION(app), action, (const gchar *const[]){accel, NULL}); } static void set_accels_for_action(GApplication *app, const char *action, const gchar *const *accels) { gtk_application_set_accels_for_action(GTK_APPLICATION(app), action, accels); } static void set_accels_for_escape(GApplication *app) { FsearchApplication *fsearch = FSEARCH_APPLICATION(app); if (fsearch->config->exit_on_escape) { set_accels_for_action(app, "win.hide_window", (const gchar *const[]){NULL}); set_accels_for_action(app, "app.quit", (const gchar *const[]){"q", "Escape", NULL}); } else { set_accel_for_action(app, "win.hide_window", "Escape"); set_accel_for_action(app, "app.quit", "q"); } } static void fsearch_application_startup(GApplication *app) { g_assert(FSEARCH_IS_APPLICATION(app)); G_APPLICATION_CLASS(fsearch_application_parent_class)->startup(app); FsearchApplication *fsearch = FSEARCH_APPLICATION(app); g_mutex_init(&fsearch->mutex); config_make_dir(); char data_dir[PATH_MAX] = ""; fsearch_file_utils_init_data_dir_path(data_dir, sizeof(data_dir)); fsearch_file_utils_create_dir(data_dir); fsearch->db_thread_cancellable = g_cancellable_new(); fsearch->config = calloc(1, sizeof(FsearchConfig)); g_assert(fsearch->config); if (!config_load(fsearch->config)) { config_load_default(fsearch->config); } fsearch->db = NULL; fsearch->db_state = FSEARCH_DATABASE_STATE_IDLE; fsearch->file_manager_watch_id = g_bus_watch_name(G_BUS_TYPE_SESSION, "org.freedesktop.FileManager1", G_BUS_NAME_WATCHER_FLAGS_NONE, on_file_manager_name_appeared, on_file_manager_name_vanished, NULL, NULL); g_autoptr(GtkCssProvider) provider = gtk_css_provider_new(); gtk_css_provider_load_from_resource(provider, "/io/github/cboxdoerfer/fsearch/ui/shared.css"); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_set(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", fsearch->config->enable_dark_theme, NULL); if (fsearch->config->show_menubar) { g_autoptr(GtkBuilder) menu_builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/" "menus.ui"); GMenuModel *menu_model = G_MENU_MODEL(gtk_builder_get_object(menu_builder, "fsearch_main_menu")); gtk_application_set_menubar(GTK_APPLICATION(app), menu_model); } set_accel_for_action(app, "win.toggle_focus", "Tab"); set_accel_for_action(app, "win.focus_search", "f"); set_accel_for_action(app, "app.new_window", "n"); set_accel_for_action(app, "win.select_all", "a"); set_accel_for_action(app, "win.match_case", "i"); set_accel_for_action(app, "win.search_mode", "r"); set_accel_for_action(app, "win.search_in_path", "u"); set_accel_for_action(app, "app.update_database", "r"); set_accel_for_action(app, "app.preferences(uint32 0)", "p"); set_accel_for_action(app, "win.close_window", "w"); set_accels_for_escape(app); fsearch->db_pool = g_thread_pool_new(database_pool_func, app, 1, TRUE, NULL); fsearch->is_shutting_down = false; } static GActionEntry fsearch_app_entries[] = { {"new_window", action_new_window_activated, NULL, NULL, NULL}, {"about", action_about_activated, NULL, NULL, NULL}, {"help", action_help_activated, NULL, NULL, NULL}, {"donate_paypal", action_donate_paypal_activated, NULL, NULL, NULL}, {"donate_github", action_donate_github_activated, NULL, NULL, NULL}, {"bug_report", action_bug_report_activated, NULL, NULL, NULL}, {"forum", action_forum_activated, NULL, NULL, NULL}, {"update_database", action_update_database_activated, NULL, NULL, NULL}, {"cancel_update_database", action_cancel_update_database_activated, NULL, NULL, NULL}, {"preferences", action_preferences_activated, "u", NULL, NULL}, {"quit", action_quit_activated, NULL, NULL, NULL}}; static void fsearch_application_init(FsearchApplication *app) { g_action_map_add_action_entries(G_ACTION_MAP(app), fsearch_app_entries, G_N_ELEMENTS(fsearch_app_entries), app); } static void fsearch_application_activate(GApplication *app) { g_assert(FSEARCH_IS_APPLICATION(app)); FsearchApplication *self = FSEARCH_APPLICATION(app); if (!self->new_window) { // If there's already a window make it visible FsearchApplicationWindow *window = get_first_application_window(FSEARCH_APPLICATION(app)); if (window) { move_search_term_to_window(self, window); fsearch_application_window_focus_search_entry(FSEARCH_APPLICATION_WINDOW(window)); gtk_window_present(GTK_WINDOW(window)); return; } } g_action_group_activate_action(G_ACTION_GROUP(self), "new_window", NULL); database_auto_update_init(self); g_cancellable_reset(self->db_thread_cancellable); database_scan_or_load_enqueue(FSEARCH_DATABASE_ACTION_LOAD); if (self->config->update_database_on_launch) { database_scan_or_load_enqueue(FSEARCH_DATABASE_ACTION_SCAN); } } static gint fsearch_application_command_line(GApplication *app, GApplicationCommandLine *cmdline) { FsearchApplication *self = FSEARCH_APPLICATION(app); g_assert(FSEARCH_IS_APPLICATION(self)); g_assert(G_IS_APPLICATION_COMMAND_LINE(cmdline)); GVariantDict *dict = g_application_command_line_get_options_dict(cmdline); if (g_variant_dict_contains(dict, "new-window")) { self->new_window = true; } if (g_variant_dict_contains(dict, "preferences")) { g_action_group_activate_action(G_ACTION_GROUP(self), "preferences", g_variant_new_uint32(0)); return 0; } if (g_variant_dict_contains(dict, "update-database")) { g_action_group_activate_action(G_ACTION_GROUP(self), "update_database", NULL); return 0; } const gchar *search_term = NULL; if (g_variant_dict_lookup(dict, "search", "&s", &search_term)) { g_clear_pointer(&self->option_search_term, g_free); self->option_search_term = g_strdup(search_term); } g_application_activate(G_APPLICATION(self)); self->new_window = false; return G_APPLICATION_CLASS(fsearch_application_parent_class)->command_line(app, cmdline); } typedef struct { GMainLoop *loop; bool update_called_on_primary; } FsearchApplicationDatabaseWorker; static void on_action_group_changed(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { return; } static void on_name_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data) { FsearchApplicationDatabaseWorker *worker_ctx = user_data; g_autoptr(GDBusActionGroup) dbus_group = g_dbus_action_group_get(connection, fsearch_bus_name, fsearch_object_path); const guint signal_id = g_dbus_connection_signal_subscribe(connection, fsearch_bus_name, "org.gtk.Actions", "Changed", fsearch_object_path, NULL, G_DBUS_SIGNAL_FLAGS_NONE, on_action_group_changed, NULL, NULL); g_autoptr(GVariant) reply = g_dbus_connection_call_sync(connection, fsearch_bus_name, fsearch_object_path, "org.gtk.Actions", "DescribeAll", NULL, G_VARIANT_TYPE("(a{s(bgav)})"), G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL, NULL); g_dbus_connection_signal_unsubscribe(connection, signal_id); if (dbus_group && reply) { g_debug("[app] trigger database update in primary instance"); g_action_group_activate_action(G_ACTION_GROUP(dbus_group), "update_database", NULL); worker_ctx->update_called_on_primary = true; } if (worker_ctx) { g_clear_pointer(&worker_ctx->loop, g_main_loop_quit); } } static void on_name_lost(GDBusConnection *connection, const gchar *name, gpointer user_data) { FsearchApplicationDatabaseWorker *worker_ctx = user_data; if (worker_ctx && worker_ctx->loop) { g_main_loop_quit(worker_ctx->loop); } } static int database_scan_in_local_instance() { FsearchConfig *config = calloc(1, sizeof(FsearchConfig)); g_assert(config); if (!config_load(config)) { if (!config_load_default(config)) { g_printerr("[fsearch] failed to load config\n"); g_clear_pointer(&config, config_free); return EXIT_FAILURE; } } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); FsearchDatabase *db = db_new(config->indexes, config->exclude_locations, config->exclude_files, config->exclude_hidden_items); int res = EXIT_FAILURE; if (db_scan(db, NULL, NULL)) { g_autofree char *db_path = fsearch_application_get_database_dir(); if (db_path) { res = db_save(db, db_path) ? EXIT_SUCCESS : EXIT_FAILURE; } } g_clear_pointer(&db, db_unref); g_clear_pointer(&config, config_free); g_timer_stop(timer); const double seconds = g_timer_elapsed(timer, NULL); if (res == EXIT_SUCCESS) { g_print("[fsearch] database update finished successfully in %.2f seconds\n", seconds); } else { g_printerr("[fsearch] database update failed\n"); } return res; } static int fsearch_application_local_database_scan() { // First detect if the another instance of fsearch is already registered // If yes, trigger update there, so the UI is aware of the update and can display its progress FsearchApplicationDatabaseWorker worker_ctx = {}; worker_ctx.loop = g_main_loop_new(NULL, FALSE); const guint owner_id = g_bus_own_name(G_BUS_TYPE_SESSION, fsearch_db_worker_bus_name, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, on_name_acquired, on_name_lost, &worker_ctx, NULL); g_main_loop_run(worker_ctx.loop); g_bus_unown_name(owner_id); if (worker_ctx.update_called_on_primary) { // triggered update in primary instance, we're done here return 0; } else { // no primary instance found, perform update return database_scan_in_local_instance(); } } static gint fsearch_application_handle_local_options(GApplication *application, GVariantDict *options) { if (g_variant_dict_contains(options, "update-database")) { return fsearch_application_local_database_scan(); } if (g_variant_dict_contains(options, "version")) { g_autoptr(GString) version = get_application_version(); g_print("FSearch %s\n", version->str); return 0; } return -1; } static void fsearch_application_add_option_entries(FsearchApplication *self) { static const GOptionEntry main_entries[] = { {"new-window", 0, 0, G_OPTION_ARG_NONE, NULL, N_("Open a new application window")}, {"preferences", 0, 0, G_OPTION_ARG_NONE, NULL, N_("Show the application preferences")}, {"search", 's', 0, G_OPTION_ARG_STRING, NULL, N_("Set the search pattern"), "PATTERN"}, {"update-database", 'u', 0, G_OPTION_ARG_NONE, NULL, N_("Update the database and exit")}, {"version", 'v', 0, G_OPTION_ARG_NONE, NULL, N_("Print version information and exit")}, {NULL}}; g_assert(FSEARCH_IS_APPLICATION(self)); g_application_add_main_option_entries(G_APPLICATION(self), main_entries); } static void fsearch_application_win_added(GtkApplication *app, GtkWindow *win) { GTK_APPLICATION_CLASS(fsearch_application_parent_class)->window_added(app, win); fsearch_application_window_added(FSEARCH_APPLICATION_WINDOW(win), FSEARCH_APPLICATION(app)); } static void fsearch_application_win_removed(GtkApplication *app, GtkWindow *win) { fsearch_application_window_removed(FSEARCH_APPLICATION_WINDOW(win), FSEARCH_APPLICATION(app)); GTK_APPLICATION_CLASS(fsearch_application_parent_class)->window_removed(app, win); } static void fsearch_application_class_init(FsearchApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); GApplicationClass *g_app_class = G_APPLICATION_CLASS(klass); GtkApplicationClass *gtk_app_class = GTK_APPLICATION_CLASS(klass); object_class->finalize = fsearch_application_finalize; g_app_class->activate = fsearch_application_activate; g_app_class->startup = fsearch_application_startup; g_app_class->shutdown = fsearch_application_shutdown; g_app_class->command_line = fsearch_application_command_line; g_app_class->handle_local_options = fsearch_application_handle_local_options; gtk_app_class->window_added = fsearch_application_win_added; gtk_app_class->window_removed = fsearch_application_win_removed; fsearch_signals[FSEARCH_SIGNAL_DATABASE_SCAN_STARTED] = g_signal_new("database-scan-started", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); fsearch_signals[FSEARCH_SIGNAL_DATABASE_UPDATE_FINISHED] = g_signal_new("database-update-finished", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); fsearch_signals[FSEARCH_SIGNAL_DATABASE_LOAD_STARTED] = g_signal_new("database-load-started", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); } // Public functions void fsearch_application_state_lock(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); g_mutex_lock(&fsearch->mutex); } void fsearch_application_state_unlock(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); g_mutex_unlock(&fsearch->mutex); } FsearchDatabaseState fsearch_application_get_db_state(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); return fsearch->db_state; } uint32_t fsearch_application_get_num_db_entries(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); return fsearch->db ? db_get_num_entries(fsearch->db) : 0; } FsearchDatabase * fsearch_application_get_db(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); return db_ref(fsearch->db); } FsearchConfig * fsearch_application_get_config(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); return fsearch->config; } char * fsearch_application_get_database_file_path() { GString *file_path = g_string_new(g_get_user_data_dir()); g_string_append_c(file_path, G_DIR_SEPARATOR); g_string_append(file_path, "fsearch"); g_string_append_c(file_path, G_DIR_SEPARATOR); g_string_append(file_path, "fsearch.db"); return g_string_free(file_path, FALSE); } char * fsearch_application_get_database_dir() { GString *db_dir = g_string_new(g_get_user_data_dir()); g_string_append_c(db_dir, G_DIR_SEPARATOR); g_string_append(db_dir, "fsearch"); return g_string_free(db_dir, FALSE); } gboolean fsearch_application_has_file_manager_on_bus(FsearchApplication *fsearch) { g_assert(FSEARCH_IS_APPLICATION(fsearch)); return fsearch->has_file_manager_on_bus; } FsearchApplication * fsearch_application_new(void) { FsearchApplication *self = g_object_new(FSEARCH_APPLICATION_TYPE, "application-id", fsearch_bus_name, "flags", G_APPLICATION_HANDLES_COMMAND_LINE, NULL); fsearch_application_add_option_entries(self); return self; } fsearch-0.2.3/src/fsearch.h000066400000000000000000000037731446344336300155260ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include "fsearch_config.h" #include "fsearch_database.h" #include "fsearch_thread_pool.h" #include #include #include #include G_BEGIN_DECLS #define FSEARCH_APPLICATION_TYPE (fsearch_application_get_type()) #define FSEARCH_APPLICATION_DEFAULT (FSEARCH_APPLICATION(g_application_get_default())) G_DECLARE_FINAL_TYPE(FsearchApplication, fsearch_application, FSEARCH, APPLICATION, GtkApplication) FsearchApplication * fsearch_application_new(void); G_END_DECLS typedef enum { FSEARCH_DATABASE_STATE_SCANNING, FSEARCH_DATABASE_STATE_LOADING, FSEARCH_DATABASE_STATE_IDLE, NUM_FSEARCH_DATABASE_STATES } FsearchDatabaseState; FsearchDatabaseState fsearch_application_get_db_state(FsearchApplication *fsearch); uint32_t fsearch_application_get_num_db_entries(FsearchApplication *fsearch); FsearchDatabase * fsearch_application_get_db(FsearchApplication *fsearch); FsearchConfig * fsearch_application_get_config(FsearchApplication *fsearch); void fsearch_application_state_lock(FsearchApplication *fsearch); void fsearch_application_state_unlock(FsearchApplication *fsearch); char * fsearch_application_get_database_file_path(void); char * fsearch_application_get_database_dir(void); gboolean fsearch_application_has_file_manager_on_bus(FsearchApplication *fsearch); fsearch-0.2.3/src/fsearch_array.c000066400000000000000000000344471446344336300167210ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-dynamic-array" #include "fsearch_array.h" #include #include #include #include #include #define MAX_SORT_THREADS 8 struct DynamicArray { // number of items in array uint32_t num_items; // total size of array uint32_t max_items; // data void **data; volatile int ref_count; }; static void darray_free(DynamicArray *array) { if (array == NULL) { return; } g_debug("[darray_free] freed"); g_clear_pointer(&array->data, free); g_clear_pointer(&array, free); } DynamicArray * darray_ref(DynamicArray *array) { if (!array || g_atomic_int_get(&array->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&array->ref_count); // g_debug("[darray_ref] increased to: %d", array->ref_count); return array; } void darray_unref(DynamicArray *array) { if (!array || g_atomic_int_get(&array->ref_count) <= 0) { return; } // g_debug("[darray_unref] dropped to: %d", array->ref_count - 1); if (g_atomic_int_dec_and_test(&array->ref_count)) { g_clear_pointer(&array, darray_free); } } typedef struct { DynamicArray *m1; DynamicArray *m2; DynamicArray *dest; gpointer user_data; DynamicArrayCompareDataFunc comp_func; } DynamicArraySortContext; static void insertion_sort(DynamicArray *array, DynamicArrayCompareDataFunc comp_func, void *data) { for (uint32_t i = 0; i < array->num_items; ++i) { void *val_a = array->data[i]; uint32_t j = i; while (j > 0 && comp_func(&array->data[j - 1], &val_a, data) > 0) { array->data[j] = array->data[j - 1]; j--; } array->data[j] = val_a; } } static void merge(DynamicArray *src, DynamicArray *dest, uint32_t start_idx, uint32_t center_idx, uint32_t end_idx, GCancellable *cancellable, DynamicArrayCompareDataFunc comp_func, gpointer comp_data) { if (cancellable && g_cancellable_is_cancelled(cancellable)) { return; } uint32_t i = start_idx; uint32_t j = center_idx; for (uint32_t k = start_idx; k < end_idx; k++) { if (i < center_idx && (j >= end_idx || comp_func(&src->data[i], &src->data[j], comp_data) < 1)) { dest->data[k] = src->data[i]; i = i + 1; } else { dest->data[k] = src->data[j]; j = j + 1; } } } static void split_merge(DynamicArray *src, DynamicArray *dest, uint32_t start_idx, uint32_t end_idx, GCancellable *cancellable, DynamicArrayCompareDataFunc comp_func, gpointer comp_data) { if (end_idx - 1 <= start_idx) { return; } if (cancellable && g_cancellable_is_cancelled(cancellable)) { return; } uint32_t center_idx = (end_idx + start_idx) / 2; split_merge(dest, src, start_idx, center_idx, cancellable, comp_func, comp_data); split_merge(dest, src, center_idx, end_idx, cancellable, comp_func, comp_data); merge(src, dest, start_idx, center_idx, end_idx, cancellable, comp_func, comp_data); } static void merge_sort(DynamicArray *to_sort, DynamicArray *tmp, GCancellable *cancellable, DynamicArrayCompareDataFunc comp_func, gpointer comp_data) { split_merge(tmp, to_sort, 0, to_sort->num_items, cancellable, comp_func, comp_data); } static void sort_thread(gpointer data, gpointer user_data) { DynamicArraySortContext *ctx = data; DynamicArray *tmp = darray_copy(ctx->dest); merge_sort(ctx->dest, tmp, user_data, (DynamicArrayCompareDataFunc)ctx->comp_func, ctx->user_data); g_clear_pointer(&tmp, darray_unref); } static void merge_thread(gpointer data, gpointer user_data) { DynamicArraySortContext *ctx = data; int i = 0; int j = 0; while (true) { void *d1 = darray_get_item(ctx->m1, i); void *d2 = darray_get_item(ctx->m2, j); if (d1 && d2) { int res = ctx->comp_func(&d1, &d2, user_data); if (res < 0) { darray_add_item(ctx->dest, d1); i++; } else if (res > 0) { darray_add_item(ctx->dest, d2); j++; } else { darray_add_item(ctx->dest, d1); darray_add_item(ctx->dest, d2); i++; j++; } } else { if (d1) { darray_add_items(ctx->dest, &ctx->m1->data[i], ctx->m1->num_items - i); return; } else if (d2) { darray_add_items(ctx->dest, &ctx->m2->data[j], ctx->m2->num_items - j); return; } else { return; } } } } DynamicArray * darray_new(size_t num_items) { DynamicArray *new = calloc(1, sizeof(DynamicArray)); g_assert(new); new->max_items = num_items; new->num_items = 0; new->data = calloc(num_items, sizeof(void *)); g_assert(new->data); new->ref_count = 1; return new; } static void darray_expand(DynamicArray *array, size_t min) { g_assert(array); g_assert(array->data); const size_t old_max_items = array->max_items; const size_t expand_rate = MAX(array->max_items / 2, min - old_max_items); array->max_items += expand_rate; void *new_data = realloc(array->data, array->max_items * sizeof(void *)); g_assert(new_data); array->data = new_data; memset(array->data + old_max_items, 0, expand_rate + 1); } void darray_add_items(DynamicArray *array, void **items, uint32_t num_items) { g_assert(array); g_assert(array->data); g_assert(items); if (array->num_items + num_items > array->max_items) { darray_expand(array, array->num_items + num_items); } memcpy(array->data + array->num_items, items, num_items * sizeof(void *)); array->num_items += num_items; } void darray_add_item(DynamicArray *array, void *data) { g_assert(array); g_assert(array->data); // g_assert(data ); if (array->num_items >= array->max_items) { darray_expand(array, array->num_items + 1); } array->data[array->num_items++] = data; } bool darray_get_item_idx(DynamicArray *array, void *item, DynamicArrayCompareDataFunc compare_func, void *data, uint32_t *index) { g_assert(array); g_assert(index); if (compare_func) { return darray_binary_search_with_data(array, item, compare_func, data, index); } bool found = false; for (uint32_t i = 0; i < array->num_items; i++) { if (item == array->data[i]) { found = true; *index = i; break; } } return found; } void * darray_get_item_next(DynamicArray *array, void *item, DynamicArrayCompareDataFunc compare_func, void *data, uint32_t *next_idx) { g_assert(array); uint32_t index = 0; if (!darray_get_item_idx(array, item, compare_func, data, &index)) { return NULL; } if (index >= array->num_items - 1) { return NULL; } if (next_idx) { *next_idx = index + 1; } return array->data[index + 1]; } void * darray_get_item(DynamicArray *array, uint32_t idx) { g_assert(array); g_assert(array->data); if (idx >= array->num_items) { return NULL; } return array->data[idx]; } uint32_t darray_get_num_items(DynamicArray *array) { g_assert(array); g_assert(array->data); return array->num_items; } uint32_t darray_get_size(DynamicArray *array) { g_assert(array); g_assert(array->data); return array->max_items; } static DynamicArray * new_array_from_data(void **data, uint32_t num_items) { DynamicArray *array = darray_new(num_items); darray_add_items(array, data, num_items); return array; } static GArray * merge_sorted(GArray *merge_me, DynamicArrayCompareDataFunc comp_func, GCancellable *cancellable) { if (merge_me->len == 1) { return merge_me; } if (cancellable && g_cancellable_is_cancelled(cancellable)) { return merge_me; } const uint32_t num_threads = merge_me->len / 2; g_debug("[sort] merge with %d thread(s)", num_threads); GArray *merged_data = g_array_sized_new(TRUE, TRUE, sizeof(DynamicArraySortContext), num_threads); GThreadPool *merge_pool = g_thread_pool_new(merge_thread, NULL, (gint)num_threads, FALSE, NULL); for (int i = 0; i < num_threads; ++i) { DynamicArraySortContext *c1 = &g_array_index(merge_me, DynamicArraySortContext, 2 * i); DynamicArraySortContext *c2 = &g_array_index(merge_me, DynamicArraySortContext, 2 * i + 1); DynamicArray *i1 = c1->dest; DynamicArray *i2 = c2->dest; DynamicArraySortContext merge_ctx = {}; merge_ctx.m1 = i1; merge_ctx.m2 = i2; merge_ctx.comp_func = comp_func; merge_ctx.dest = darray_new(i1->num_items + i2->num_items); g_array_insert_val(merged_data, i, merge_ctx); g_thread_pool_push(merge_pool, &g_array_index(merged_data, DynamicArraySortContext, i), NULL); } g_thread_pool_free(g_steal_pointer(&merge_pool), FALSE, TRUE); for (int i = 0; i < merge_me->len; i++) { DynamicArraySortContext *c = &g_array_index(merge_me, DynamicArraySortContext, i); if (c && c->dest) { g_clear_pointer(&c->dest, darray_free); } } return merge_sorted(merged_data, comp_func, cancellable); } static int get_ideal_thread_count() { // int num_processors = 1; const int num_processors = (int)g_get_num_processors(); const int e = floor(log2(num_processors)); const int num_threads = (int)pow(2, e); return MAX(num_threads, MAX_SORT_THREADS); } void darray_sort_multi_threaded(DynamicArray *array, DynamicArrayCompareDataFunc comp_func, GCancellable *cancellable, void *data) { const int num_threads = get_ideal_thread_count(); if (array->num_items <= 100000 || num_threads < 2) { return darray_sort(array, comp_func, NULL, data); } g_debug("[sort] sorting with %d threads", num_threads); const int num_items_per_thread = (int)(array->num_items / num_threads); GThreadPool *sort_pool = g_thread_pool_new(sort_thread, cancellable, num_threads, FALSE, NULL); g_autoptr(GArray) sort_ctx_array = g_array_sized_new(TRUE, TRUE, sizeof(DynamicArraySortContext), num_threads); int start = 0; for (int i = 0; i < num_threads; ++i) { DynamicArraySortContext sort_ctx; sort_ctx.dest = new_array_from_data(array->data + start, i == num_threads - 1 ? array->num_items - start : num_items_per_thread); sort_ctx.comp_func = comp_func; sort_ctx.user_data = data; start += num_items_per_thread; g_array_insert_val(sort_ctx_array, i, sort_ctx); g_thread_pool_push(sort_pool, &g_array_index(sort_ctx_array, DynamicArraySortContext, i), NULL); } g_thread_pool_free(g_steal_pointer(&sort_pool), FALSE, TRUE); g_autoptr(GArray) result = merge_sorted(sort_ctx_array, comp_func, cancellable); if (result) { g_clear_pointer(&array->data, free); DynamicArraySortContext *c = &g_array_index(result, DynamicArraySortContext, 0); array->data = g_steal_pointer(&c->dest->data); array->num_items = c->dest->num_items; array->max_items = c->dest->max_items; g_clear_pointer(&c->dest, free); } } void darray_sort(DynamicArray *array, DynamicArrayCompareDataFunc comp_func, GCancellable *cancellable, void *data) { g_assert(array); g_assert(array->data); g_assert(comp_func); if (array->num_items < 64) { g_debug("[sort] insertion sort: %d\n", array->num_items); insertion_sort(array, comp_func, data); } else { g_debug("[sort] merge sort: %d\n", array->num_items); DynamicArray *src = darray_copy(array); merge_sort(array, src, cancellable, comp_func, data); g_clear_pointer(&src, darray_unref); } } bool darray_binary_search_with_data(DynamicArray *array, void *item, DynamicArrayCompareDataFunc comp_func, void *data, uint32_t *matched_index) { g_assert(array); g_assert(array->data); g_assert(comp_func); if (array->num_items <= 0) { return false; } bool result = false; uint32_t left = 0; uint32_t middle = 0; uint32_t right = array->num_items - 1; while (left <= right) { middle = left + (right - left) / 2; int32_t match = comp_func(&array->data[middle], &item, data); if (match == 0) { result = true; break; } else if (match < 0) { left = middle + 1; } else if (middle > 0) { right = middle - 1; } else { break; } } if (result && matched_index != NULL) *matched_index = middle; return result; } DynamicArray * darray_copy(DynamicArray *array) { if (!array) { return NULL; } DynamicArray *new = calloc(1, sizeof(DynamicArray)); g_assert(new); new->max_items = array->max_items; new->num_items = array->num_items; new->data = calloc(new->max_items, sizeof(void *)); g_assert(new->data); new->ref_count = 1; memcpy(new->data, array->data, new->max_items * sizeof(void *)); return new; } fsearch-0.2.3/src/fsearch_array.h000066400000000000000000000046221446344336300167160ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include #include #include typedef struct DynamicArray DynamicArray; typedef int32_t (*DynamicArrayCompareFunc)(void *a, void *b); typedef int32_t (*DynamicArrayCompareDataFunc)(void *a, void *b, void *data); bool darray_binary_search_with_data(DynamicArray *array, void *item, DynamicArrayCompareDataFunc comp_func, void *data, uint32_t *matched_index); void darray_sort_multi_threaded(DynamicArray *array, DynamicArrayCompareDataFunc comp_func, GCancellable *cancellable, void *data); void darray_sort(DynamicArray *array, DynamicArrayCompareDataFunc comp_func, GCancellable *cancellable, void *data); uint32_t darray_get_size(DynamicArray *array); uint32_t darray_get_num_items(DynamicArray *array); void * darray_get_item(DynamicArray *array, uint32_t idx); void * darray_get_item_next(DynamicArray *array, void *item, DynamicArrayCompareDataFunc compare_func, void *data, uint32_t *next_idx); bool darray_get_item_idx(DynamicArray *array, void *item, DynamicArrayCompareDataFunc compare_func, void *data, uint32_t *index); void darray_add_items(DynamicArray *array, void **items, uint32_t num_items); void darray_add_item(DynamicArray *array, void *data); DynamicArray * darray_new(size_t num_items); void darray_unref(DynamicArray *array); DynamicArray * darray_ref(DynamicArray *array); DynamicArray * darray_copy(DynamicArray *array); fsearch-0.2.3/src/fsearch_clipboard.c000066400000000000000000000077401446344336300175360ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-clipboard" #include "fsearch_clipboard.h" #include #include #include static GdkDragAction clipboard_action = GDK_ACTION_DEFAULT; static GList *clipboard_file_list = NULL; enum { URI_LIST = 1, NAUTILUS_WORKAROUND, GNOME_COPIED_FILES, KDE_CUT_SELECTION, N_CLIPBOARD_TARGETS }; static GtkTargetEntry targets[] = {{"text/uri-list", 0, URI_LIST}, {"text/plain;charset=utf-8", 0, NAUTILUS_WORKAROUND}, {"application/x-kde-cutselection", 0, KDE_CUT_SELECTION}, {"x-special/gnome-copied-files", 0, GNOME_COPIED_FILES}}; static void clipboard_clean_data(GtkClipboard *clipboard, gpointer user_data) { /* g_debug("clean clipboard!"); */ if (clipboard_file_list) { g_list_free_full(g_steal_pointer(&clipboard_file_list), (GDestroyNotify)g_free); } clipboard_action = GDK_ACTION_DEFAULT; } static void clipboard_get_data(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, gpointer user_data) { if (!clipboard_file_list) { return; } if (info == KDE_CUT_SELECTION) { // Tell KDE that the selection data should be cut g_debug("[get_data] KDE_CUT_SELECTION"); if (clipboard_action == GDK_ACTION_MOVE) gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data), 8, (guchar *)"1", 2); return; } g_autoptr(GString) list = g_string_sized_new(8192); if (info == GNOME_COPIED_FILES) { g_debug("[get_data] GNOME_COPIED_FILES"); const gchar *action = clipboard_action == GDK_ACTION_MOVE ? "cut\n" : "copy\n"; g_string_append(list, action); } else if (info == URI_LIST) { g_debug("[get_data] URI_LIST"); } else if (info == NAUTILUS_WORKAROUND) { g_debug("[get_data] NAUTILUS_WORKAROUND"); g_string_append(list, "x-special/nautilus-clipboard\n"); const gchar *action = clipboard_action == GDK_ACTION_MOVE ? "cut\n" : "copy\n"; g_string_append(list, action); } else { g_debug("[get_data] unknown format: %d", info); return; } for (GList *l = clipboard_file_list; l; l = l->next) { g_autofree gchar *file_name = g_filename_to_uri((char *)l->data, NULL, NULL); g_string_append(list, file_name); if (l->next != NULL) { if (info == URI_LIST) { g_string_append(list, "\r\n"); } else { g_string_append_c(list, '\n'); } } } if (info == NAUTILUS_WORKAROUND) { g_string_append_c(list, '\n'); } gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data), 8, (guchar *)list->str, (gint)list->len + 1); } void clipboard_copy_file_list(GList *file_list, bool copy) { GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_with_data(clip, targets, G_N_ELEMENTS(targets), clipboard_get_data, clipboard_clean_data, NULL); clipboard_file_list = file_list; clipboard_action = copy ? GDK_ACTION_COPY : GDK_ACTION_MOVE; } fsearch-0.2.3/src/fsearch_clipboard.h000066400000000000000000000014501446344336300175330ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include void clipboard_copy_file_list(GList *file_list, bool copy); fsearch-0.2.3/src/fsearch_config.c000066400000000000000000001006131446344336300170350ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-config" #include #include #include #include #include #include "fsearch_config.h" #include "fsearch_exclude_path.h" #include "fsearch_index.h" #include "fsearch_limits.h" const char *config_file_name = "fsearch.conf"; const char *config_folder_name = "fsearch"; void config_build_dir(char *path, size_t len) { g_assert(path); const gchar *xdg_conf_dir = g_get_user_config_dir(); snprintf(path, len, "%s/%s", xdg_conf_dir, config_folder_name); return; } static void config_build_path(char *path, size_t len) { g_assert(path); const gchar *xdg_conf_dir = g_get_user_config_dir(); snprintf(path, len, "%s/%s/%s", xdg_conf_dir, config_folder_name, config_file_name); return; } bool config_make_dir(void) { gchar config_dir[PATH_MAX] = ""; config_build_dir(config_dir, sizeof(config_dir)); return !g_mkdir_with_parents(config_dir, 0700); } static void config_load_handle_error(GError *error) { g_return_if_fail(error); switch (error->code) { case G_KEY_FILE_ERROR_INVALID_VALUE: fprintf(stderr, "load_config: invalid value: %s\n", error->message); break; case G_KEY_FILE_ERROR_KEY_NOT_FOUND: case G_KEY_FILE_ERROR_GROUP_NOT_FOUND: // new config, use default value and don't report anything break; default: fprintf(stderr, "load_config: unknown error: %s\n", error->message); } g_clear_pointer(&error, g_error_free); } static uint32_t config_load_integer(GKeyFile *key_file, const char *group_name, const char *key, uint32_t default_value) { GError *error = NULL; uint32_t result = g_key_file_get_integer(key_file, group_name, key, &error); if (error != NULL) { result = default_value; config_load_handle_error(error); } return result; } static bool config_load_boolean(GKeyFile *key_file, const char *group_name, const char *key, bool default_value) { GError *error = NULL; bool result = g_key_file_get_boolean(key_file, group_name, key, &error); if (error != NULL) { result = default_value; config_load_handle_error(error); } return result; } static char * config_load_string(GKeyFile *key_file, const char *group_name, const char *key, const char *default_value) { GError *error = NULL; char *result = g_key_file_get_string(key_file, group_name, key, &error); if (error != NULL) { result = g_strdup(default_value); config_load_handle_error(error); } return result; } static FsearchFilterManager * config_load_filters(GKeyFile *key_file) { if (!g_key_file_has_group(key_file, "Filters")) { return fsearch_filter_manager_new_with_defaults(); } uint32_t pos = 1; FsearchFilterManager *filters = fsearch_filter_manager_new(); while (true) { char key[100] = ""; snprintf(key, sizeof(key), "filter_%d_name", pos); g_autofree char *name = config_load_string(key_file, "Filters", key, NULL); snprintf(key, sizeof(key), "filter_%d_query", pos); g_autofree char *query = config_load_string(key_file, "Filters", key, NULL); snprintf(key, sizeof(key), "filter_%d_macro", pos); g_autofree char *macro = config_load_string(key_file, "Filters", key, NULL); snprintf(key, sizeof(key), "filter_%d_match_case", pos); bool match_case = config_load_boolean(key_file, "Filters", key, 0); snprintf(key, sizeof(key), "filter_%d_search_in_path", pos); bool search_in_path = config_load_boolean(key_file, "Filters", key, true); snprintf(key, sizeof(key), "filter_%d_enable_regex", pos); bool enable_regex = config_load_boolean(key_file, "Filters", key, false); FsearchQueryFlags flags = 0; if (match_case) { flags |= QUERY_FLAG_MATCH_CASE; } if (search_in_path) { flags |= QUERY_FLAG_SEARCH_IN_PATH; } if (enable_regex) { flags |= QUERY_FLAG_REGEX; } if (!name) { break; } FsearchFilter *f = fsearch_filter_new(name, macro, query, flags); fsearch_filter_manager_append_filter(filters, f); g_clear_pointer(&f, fsearch_filter_unref); pos++; } return filters; } static GList * config_load_indexes(GKeyFile *key_file, GList *indexes, const char *prefix) { uint32_t pos = 1; while (true) { char key[100] = ""; snprintf(key, sizeof(key), "%s_%d", prefix, pos); g_autofree char *path = config_load_string(key_file, "Database", key, NULL); snprintf(key, sizeof(key), "%s_enabled_%d", prefix, pos); bool enabled = config_load_boolean(key_file, "Database", key, true); snprintf(key, sizeof(key), "%s_update_%d", prefix, pos); bool update = config_load_boolean(key_file, "Database", key, true); snprintf(key, sizeof(key), "%s_one_filesystem_%d", prefix, pos); bool one_filesystem = config_load_boolean(key_file, "Database", key, false); pos++; if (path) { FsearchIndex *index = fsearch_index_new(FSEARCH_INDEX_FOLDER_TYPE, path, enabled, update, one_filesystem, 0); indexes = g_list_append(indexes, index); } else { break; } } return indexes; } static GList * config_load_exclude_locations(GKeyFile *key_file, GList *locations, const char *prefix) { uint32_t pos = 1; while (true) { char key[100] = ""; snprintf(key, sizeof(key), "%s_%d", prefix, pos); g_autofree char *path = config_load_string(key_file, "Database", key, NULL); snprintf(key, sizeof(key), "%s_enabled_%d", prefix, pos); bool enabled = config_load_boolean(key_file, "Database", key, true); pos++; if (path) { FsearchExcludePath *fs_path = fsearch_exclude_path_new(path, enabled); locations = g_list_append(locations, fs_path); } else { break; } } return locations; } bool config_load(FsearchConfig *config) { g_assert(config != NULL); bool result = false; g_autoptr(GKeyFile) key_file = g_key_file_new(); g_assert(key_file); g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); gchar config_path[PATH_MAX] = ""; config_build_path(config_path, sizeof(config_path)); const char *debug_message = NULL; g_autoptr(GError) error = NULL; if (g_key_file_load_from_file(key_file, config_path, G_KEY_FILE_NONE, &error)) { g_debug("[config] loading..."); // Interface config->highlight_search_terms = config_load_boolean(key_file, "Interface", "highlight_search_terms", true); config->single_click_open = config_load_boolean(key_file, "Interface", "single_click_open", false); config->launch_desktop_files = config_load_boolean(key_file, "Interface", "launch_desktop_files", true); config->restore_sort_order = config_load_boolean(key_file, "Interface", "restore_sort_order", true); config->restore_column_config = config_load_boolean(key_file, "Interface", "restore_column_configuration", true); config->double_click_path = config_load_boolean(key_file, "Interface", "double_click_path", false); config->enable_list_tooltips = config_load_boolean(key_file, "Interface", "enable_list_tooltips", true); config->enable_dark_theme = config_load_boolean(key_file, "Interface", "enable_dark_theme", false); config->show_menubar = config_load_boolean(key_file, "Interface", "show_menubar", true); config->show_statusbar = config_load_boolean(key_file, "Interface", "show_statusbar", true); config->show_filter = config_load_boolean(key_file, "Interface", "show_filter", true); config->show_search_button = config_load_boolean(key_file, "Interface", "show_search_button", false); config->show_base_2_units = config_load_boolean(key_file, "Interface", "show_base_2_units", false); config->action_after_file_open = config_load_integer(key_file, "Interface", "action_after_file_open", ACTION_AFTER_OPEN_NOTHING); config->action_after_file_open_keyboard = config_load_boolean(key_file, "Interface", "action_after_file_open_keyboard", false); config->action_after_file_open_mouse = config_load_boolean(key_file, "Interface", "action_after_file_open_mouse", false); config->exit_on_escape = config_load_boolean(key_file, "Interface", "exit_on_escape", false); config->show_indexing_status = config_load_boolean(key_file, "Interface", "show_indexing_status", true); // Warning Dialogs config->show_dialog_failed_opening = config_load_boolean(key_file, "Dialogs", "show_dialog_failed_opening", true); // Applications config->folder_open_cmd = config_load_string(key_file, "Applications", "folder_open_cmd", NULL); // Window config->restore_window_size = config_load_boolean(key_file, "Interface", "restore_window_size", false); config->window_width = config_load_integer(key_file, "Interface", "window_width", 850); config->window_height = config_load_integer(key_file, "Interface", "window_height", 600); // Columns if (config->restore_column_config) { config->show_listview_icons = config_load_boolean(key_file, "Interface", "show_listview_icons", true); config->show_path_column = config_load_boolean(key_file, "Interface", "show_path_column", true); config->show_type_column = config_load_boolean(key_file, "Interface", "show_type_column", false); config->show_extension_column = config_load_boolean(key_file, "Interface", "show_extension_column", true); config->show_size_column = config_load_boolean(key_file, "Interface", "show_size_column", true); config->show_modified_column = config_load_boolean(key_file, "Interface", "show_modified_column", true); } else { config->show_listview_icons = true; config->show_path_column = true; config->show_type_column = false; config->show_extension_column = true; config->show_size_column = true; config->show_modified_column = true; } // Column Sort config->sort_ascending = config_load_boolean(key_file, "Interface", "sort_ascending", true); config->sort_by = config_load_string(key_file, "Interface", "sort_by", "Name"); // Column Size config->name_column_width = config_load_integer(key_file, "Interface", "name_column_width", 250); config->path_column_width = config_load_integer(key_file, "Interface", "path_column_width", 250); config->extension_column_width = config_load_integer(key_file, "Interface", "extension_column_width", 100); config->type_column_width = config_load_integer(key_file, "Interface", "type_column_width", 100); config->size_column_width = config_load_integer(key_file, "Interface", "size_column_width", 75); config->modified_column_width = config_load_integer(key_file, "Interface", "modified_column_width", 75); // Column position config->name_column_pos = config_load_integer(key_file, "Interface", "name_column_pos", 0); config->path_column_pos = config_load_integer(key_file, "Interface", "path_column_pos", 1); config->type_column_pos = config_load_integer(key_file, "Interface", "type_column_pos", 2); config->size_column_pos = config_load_integer(key_file, "Interface", "size_column_pos", 3); config->modified_column_pos = config_load_integer(key_file, "Interface", "modified_column_pos", 4); // Search config->search_as_you_type = config_load_boolean(key_file, "Search", "search_as_you_type", true); config->auto_match_case = config_load_boolean(key_file, "Search", "auto_match_case", true); config->auto_search_in_path = config_load_boolean(key_file, "Search", "auto_search_in_path", true); config->match_case = config_load_boolean(key_file, "Search", "match_case", false); config->enable_regex = config_load_boolean(key_file, "Search", "enable_regex", false); config->search_in_path = config_load_boolean(key_file, "Search", "search_in_path", false); config->hide_results_on_empty_search = config_load_boolean(key_file, "Search", "hide_results_on_empty_search", false); // Database config->update_database_on_launch = config_load_boolean(key_file, "Database", "update_database_on_launch", true); config->update_database_every = config_load_boolean(key_file, "Database", "update_database_every", false); config->update_database_every_hours = config_load_integer(key_file, "Database", "update_database_every_hours", 0); config->update_database_every_minutes = config_load_integer(key_file, "Database", "update_database_every_minutes", 15); config->exclude_hidden_items = config_load_boolean(key_file, "Database", "exclude_hidden_files_and_folders", false); config->follow_symlinks = config_load_boolean(key_file, "Database", "follow_symbolic_links", false); g_autofree char *exclude_files_str = config_load_string(key_file, "Database", "exclude_files", NULL); if (exclude_files_str) { config->exclude_files = g_strsplit(exclude_files_str, ";", -1); } config->indexes = config_load_indexes(key_file, config->indexes, "location"); config->exclude_locations = config_load_exclude_locations(key_file, config->exclude_locations, "exclude_location"); config->filters = config_load_filters(key_file); result = true; debug_message = "[config] loaded in %f ms"; } else { debug_message = "[config] loading failed (%f ms)"; } g_timer_stop(timer); const double seconds = g_timer_elapsed(timer, NULL); g_debug(debug_message, seconds * 1000); return result; } bool config_load_default(FsearchConfig *config) { g_assert(config); // Search config->auto_search_in_path = true; config->auto_match_case = true; config->search_as_you_type = true; config->match_case = false; config->enable_regex = false; config->search_in_path = false; config->hide_results_on_empty_search = false; // Interface config->single_click_open = false; config->launch_desktop_files = true; config->highlight_search_terms = true; config->enable_dark_theme = false; config->enable_list_tooltips = true; config->restore_column_config = true; config->restore_sort_order = true; config->double_click_path = false; config->show_menubar = true; config->show_statusbar = true; config->show_filter = true; config->show_search_button = false; config->show_base_2_units = false; config->action_after_file_open = ACTION_AFTER_OPEN_NOTHING; config->action_after_file_open_keyboard = false; config->action_after_file_open_mouse = false; config->exit_on_escape = false; config->show_indexing_status = true; // Columns config->show_listview_icons = true; config->show_path_column = true; config->show_type_column = false; config->show_extension_column = false; config->show_size_column = true; config->show_modified_column = true; config->sort_by = NULL; config->sort_ascending = true; config->name_column_pos = 0; config->path_column_pos = 1; config->type_column_pos = 2; config->size_column_pos = 3; config->modified_column_pos = 4; config->name_column_width = 250; config->path_column_width = 250; config->extension_column_width = 100; config->type_column_width = 100; config->size_column_width = 75; config->modified_column_width = 125; // Warning Dialogs config->show_dialog_failed_opening = true; // Window config->restore_window_size = false; config->window_width = 850; config->window_height = 600; // Database config->update_database_on_launch = true; config->update_database_every = false; config->update_database_every_hours = 0; config->update_database_every_minutes = 15; config->exclude_hidden_items = false; config->follow_symlinks = false; // Locations config->indexes = NULL; FsearchExcludePath *exclude_proc = fsearch_exclude_path_new("/proc", true); FsearchExcludePath *exclude_sys = fsearch_exclude_path_new("/sys", true); config->exclude_locations = g_list_append(config->exclude_locations, exclude_proc); config->exclude_locations = g_list_append(config->exclude_locations, exclude_sys); config->filters = fsearch_filter_manager_new_with_defaults(); return true; } static void config_save_filters(GKeyFile *key_file, FsearchFilterManager *filters) { if (!filters) { return; } for (uint32_t i = 0; i < fsearch_filter_manager_get_num_filters(filters); ++i) { FsearchFilter *filter = fsearch_filter_manager_get_filter(filters, i); if (!filter) { g_assert_not_reached(); } const uint32_t pos = i + 1; char key[100] = ""; snprintf(key, sizeof(key), "filter_%d_name", pos); g_key_file_set_string(key_file, "Filters", key, filter->name); snprintf(key, sizeof(key), "filter_%d_macro", pos); g_key_file_set_string(key_file, "Filters", key, filter->macro); snprintf(key, sizeof(key), "filter_%d_query", pos); g_key_file_set_string(key_file, "Filters", key, filter->query); snprintf(key, sizeof(key), "filter_%d_match_case", pos); g_key_file_set_boolean(key_file, "Filters", key, filter->flags & QUERY_FLAG_MATCH_CASE ? true : false); snprintf(key, sizeof(key), "filter_%d_search_in_path", pos); g_key_file_set_boolean(key_file, "Filters", key, filter->flags & QUERY_FLAG_SEARCH_IN_PATH ? true : false); snprintf(key, sizeof(key), "filter_%d_enable_regex", pos); g_key_file_set_boolean(key_file, "Filters", key, filter->flags & QUERY_FLAG_REGEX ? true : false); g_clear_pointer(&filter, fsearch_filter_unref); } } static void config_save_indexes(GKeyFile *key_file, GList *indexes, const char *prefix) { if (!indexes) { return; } uint32_t pos = 1; for (GList *l = indexes; l != NULL; l = l->next) { FsearchIndex *index = l->data; if (!index) { continue; } char key[100] = ""; snprintf(key, sizeof(key), "%s_%d", prefix, pos); g_key_file_set_string(key_file, "Database", key, index->path); snprintf(key, sizeof(key), "%s_enabled_%d", prefix, pos); g_key_file_set_boolean(key_file, "Database", key, index->enabled); snprintf(key, sizeof(key), "%s_update_%d", prefix, pos); g_key_file_set_boolean(key_file, "Database", key, index->update); snprintf(key, sizeof(key), "%s_one_filesystem_%d", prefix, pos); g_key_file_set_boolean(key_file, "Database", key, index->one_filesystem); pos++; } } static void config_save_exclude_locations(GKeyFile *key_file, GList *locations, const char *prefix) { if (!locations) { return; } uint32_t pos = 1; for (GList *l = locations; l != NULL; l = l->next) { FsearchExcludePath *index = l->data; if (!index) { continue; } char key[100] = ""; snprintf(key, sizeof(key), "%s_%d", prefix, pos); g_key_file_set_string(key_file, "Database", key, index->path); snprintf(key, sizeof(key), "%s_enabled_%d", prefix, pos); g_key_file_set_boolean(key_file, "Database", key, index->enabled); pos++; } } bool config_save(FsearchConfig *config) { g_assert(config); bool result = false; g_autoptr(GKeyFile) key_file = g_key_file_new(); g_assert(key_file); g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); g_debug("[config] saving..."); // Interface g_key_file_set_boolean(key_file, "Interface", "single_click_open", config->single_click_open); g_key_file_set_boolean(key_file, "Interface", "launch_desktop_files", config->launch_desktop_files); g_key_file_set_boolean(key_file, "Interface", "highlight_search_terms", config->highlight_search_terms); g_key_file_set_boolean(key_file, "Interface", "restore_column_configuration", config->restore_column_config); g_key_file_set_boolean(key_file, "Interface", "restore_sort_order", config->restore_sort_order); g_key_file_set_boolean(key_file, "Interface", "double_click_path", config->double_click_path); g_key_file_set_boolean(key_file, "Interface", "enable_list_tooltips", config->enable_list_tooltips); g_key_file_set_boolean(key_file, "Interface", "enable_dark_theme", config->enable_dark_theme); g_key_file_set_boolean(key_file, "Interface", "show_menubar", config->show_menubar); g_key_file_set_boolean(key_file, "Interface", "show_statusbar", config->show_statusbar); g_key_file_set_boolean(key_file, "Interface", "show_filter", config->show_filter); g_key_file_set_boolean(key_file, "Interface", "show_search_button", config->show_search_button); g_key_file_set_boolean(key_file, "Interface", "show_base_2_units", config->show_base_2_units); g_key_file_set_integer(key_file, "Interface", "action_after_file_open", config->action_after_file_open); g_key_file_set_boolean(key_file, "Interface", "action_after_file_open_keyboard", config->action_after_file_open_keyboard); g_key_file_set_boolean(key_file, "Interface", "action_after_file_open_mouse", config->action_after_file_open_mouse); g_key_file_set_boolean(key_file, "Interface", "exit_on_escape", config->exit_on_escape); g_key_file_set_boolean(key_file, "Interface", "show_indexing_status", config->show_indexing_status); // Warning Dialogs g_key_file_set_boolean(key_file, "Dialogs", "show_dialog_failed_opening", config->show_dialog_failed_opening); // Window g_key_file_set_boolean(key_file, "Interface", "restore_window_size", config->restore_window_size); g_key_file_set_integer(key_file, "Interface", "window_width", config->window_width); g_key_file_set_integer(key_file, "Interface", "window_height", config->window_height); // Columns visibility g_key_file_set_boolean(key_file, "Interface", "show_listview_icons", config->show_listview_icons); g_key_file_set_boolean(key_file, "Interface", "show_path_column", config->show_path_column); g_key_file_set_boolean(key_file, "Interface", "show_type_column", config->show_type_column); g_key_file_set_boolean(key_file, "Interface", "show_extension_column", config->show_extension_column); g_key_file_set_boolean(key_file, "Interface", "show_size_column", config->show_size_column); g_key_file_set_boolean(key_file, "Interface", "show_modified_column", config->show_modified_column); g_key_file_set_boolean(key_file, "Interface", "sort_ascending", config->sort_ascending); if (config->sort_by) { g_key_file_set_string(key_file, "Interface", "sort_by", config->sort_by); } // Column width g_key_file_set_integer(key_file, "Interface", "name_column_width", config->name_column_width); g_key_file_set_integer(key_file, "Interface", "path_column_width", config->path_column_width); g_key_file_set_integer(key_file, "Interface", "extension_column_width", config->extension_column_width); g_key_file_set_integer(key_file, "Interface", "type_column_width", config->type_column_width); g_key_file_set_integer(key_file, "Interface", "size_column_width", config->size_column_width); g_key_file_set_integer(key_file, "Interface", "modified_column_width", config->modified_column_width); // Column position g_key_file_set_integer(key_file, "Interface", "name_column_pos", config->name_column_pos); g_key_file_set_integer(key_file, "Interface", "path_column_pos", config->path_column_pos); g_key_file_set_integer(key_file, "Interface", "type_column_pos", config->type_column_pos); g_key_file_set_integer(key_file, "Interface", "size_column_pos", config->size_column_pos); g_key_file_set_integer(key_file, "Interface", "modified_column_pos", config->modified_column_pos); // Applications if (config->folder_open_cmd) { g_key_file_set_string(key_file, "Applications", "folder_open_cmd", config->folder_open_cmd); } // Search g_key_file_set_boolean(key_file, "Search", "search_as_you_type", config->search_as_you_type); g_key_file_set_boolean(key_file, "Search", "auto_search_in_path", config->auto_search_in_path); g_key_file_set_boolean(key_file, "Search", "auto_match_case", config->auto_match_case); g_key_file_set_boolean(key_file, "Search", "search_in_path", config->search_in_path); g_key_file_set_boolean(key_file, "Search", "enable_regex", config->enable_regex); g_key_file_set_boolean(key_file, "Search", "match_case", config->match_case); g_key_file_set_boolean(key_file, "Search", "hide_results_on_empty_search", config->hide_results_on_empty_search); // Database g_key_file_set_boolean(key_file, "Database", "update_database_on_launch", config->update_database_on_launch); g_key_file_set_boolean(key_file, "Database", "update_database_every", config->update_database_every); g_key_file_set_integer(key_file, "Database", "update_database_every_hours", config->update_database_every_hours); g_key_file_set_integer(key_file, "Database", "update_database_every_minutes", config->update_database_every_minutes); g_key_file_set_boolean(key_file, "Database", "exclude_hidden_files_and_folders", config->exclude_hidden_items); g_key_file_set_boolean(key_file, "Database", "follow_symbolic_links", config->follow_symlinks); config_save_filters(key_file, config->filters); config_save_indexes(key_file, config->indexes, "location"); config_save_exclude_locations(key_file, config->exclude_locations, "exclude_location"); if (config->exclude_files) { g_autofree char *exclude_files_str = g_strjoinv(";", config->exclude_files); g_key_file_set_string(key_file, "Database", "exclude_files", exclude_files_str); } gchar config_path[PATH_MAX] = ""; config_build_path(config_path, sizeof(config_path)); const char *debug_message = NULL; g_autoptr(GError) error = NULL; if (g_key_file_save_to_file(key_file, config_path, &error)) { debug_message = "[config] saved in %f ms"; result = true; } else { debug_message = "[config] saving failed (%f ms)"; } g_timer_stop(timer); const double seconds = g_timer_elapsed(timer, NULL); g_debug(debug_message, seconds * 1000); return result; } static bool config_excludes_compare(void *e1, void *e2) { if (!e1 && !e2) { return true; } if (!e1 || !e2) { return false; } FsearchExcludePath *path1 = e1; FsearchExcludePath *path2 = e2; if (path1->enabled != path2->enabled) { return false; } if (g_strcmp0(path1->path, path2->path) != 0) { return false; } return true; } static bool config_indexes_compare(void *i1, void *i2) { if (!i1 && !i2) { return true; } if (!i1 || !i2) { return false; } FsearchIndex *index1 = i1; FsearchIndex *index2 = i2; if (index1->enabled != index2->enabled) { return false; } if (index1->update != index2->update) { return false; } if (index1->one_filesystem != index2->one_filesystem) { return false; } if (g_strcmp0(index1->path, index2->path) != 0) { return false; } return true; } static bool config_list_compare(GList *l1, GList *l2, bool (*cmp_func)(void *, void *)) { if (!l1 && !l2) { return true; } if (!l1 || !l2) { return false; } uint32_t len1 = g_list_length(l1); uint32_t len2 = g_list_length(l2); if (len1 != len2) { return false; } for (int i = 0; i < len1; i++) { void *data1 = g_list_nth_data(l1, i); void *data2 = g_list_nth_data(l2, i); if (!data1 || !data2 || !cmp_func(data1, data2)) { return false; } } return true; } #if !GLIB_CHECK_VERSION(2, 60, 0) // Copied from glib for backwards compatibility static gboolean g_strv_equal(const gchar *const *strv1, const gchar *const *strv2) { g_return_val_if_fail(strv1 != NULL, FALSE); g_return_val_if_fail(strv2 != NULL, FALSE); if (strv1 == strv2) return TRUE; for (; *strv1 != NULL && *strv2 != NULL; strv1++, strv2++) { if (!g_str_equal(*strv1, *strv2)) return FALSE; } return (*strv1 == NULL && *strv2 == NULL); } #endif FsearchConfigCompareResult config_cmp(FsearchConfig *c1, FsearchConfig *c2) { FsearchConfigCompareResult result = {}; if (c1->hide_results_on_empty_search != c2->hide_results_on_empty_search || c1->auto_search_in_path != c2->auto_search_in_path || c1->auto_match_case != c2->auto_match_case || c1->search_as_you_type != c2->search_as_you_type || c1->search_in_path != c2->search_in_path || c1->enable_regex != c2->enable_regex || c1->match_case != c2->match_case) { result.search_config_changed = true; } if (!fsearch_filter_manager_cmp(c1->filters, c2->filters)) { result.search_config_changed = true; } if (c1->highlight_search_terms != c2->highlight_search_terms || c1->show_listview_icons != c2->show_listview_icons || c1->single_click_open != c2->single_click_open || c1->enable_list_tooltips != c2->enable_list_tooltips) { result.listview_config_changed = true; } bool exclude_files_changed = false; if (c1->exclude_files && c2->exclude_files && !g_strv_equal((const gchar *const *)c1->exclude_files, (const gchar *const *)c2->exclude_files)) { exclude_files_changed = true; } else if ((c1->exclude_files && !c2->exclude_files) || (!c1->exclude_files && c2->exclude_files)) { exclude_files_changed = true; } bool indexes_changed = !config_list_compare(c1->indexes, c2->indexes, config_indexes_compare); bool exclude_locations_changed = !config_list_compare(c1->exclude_locations, c2->exclude_locations, config_excludes_compare); if (c1->exclude_hidden_items != c2->exclude_hidden_items || exclude_files_changed || exclude_locations_changed || indexes_changed) { result.database_config_changed = true; } return result; } FsearchConfig * config_copy(FsearchConfig *config) { FsearchConfig *copy = calloc(1, sizeof(FsearchConfig)); g_assert(copy); memcpy(copy, config, sizeof(*config)); if (config->folder_open_cmd) { copy->folder_open_cmd = g_strdup(config->folder_open_cmd); } if (config->sort_by) { copy->sort_by = g_strdup(config->sort_by); } if (config->indexes) { copy->indexes = g_list_copy_deep(config->indexes, (GCopyFunc)fsearch_index_copy, NULL); } if (config->exclude_locations) { copy->exclude_locations = g_list_copy_deep(config->exclude_locations, (GCopyFunc)fsearch_exclude_path_copy, NULL); } if (config->exclude_files) { copy->exclude_files = g_strdupv(config->exclude_files); } if (config->filters) { copy->filters = fsearch_filter_manager_copy(config->filters); } return copy; } void config_free(FsearchConfig *config) { g_assert(config); g_clear_pointer(&config->folder_open_cmd, free); g_clear_pointer(&config->sort_by, free); g_clear_pointer(&config->filters, fsearch_filter_manager_free); if (config->indexes) { g_list_free_full(g_steal_pointer(&config->indexes), (GDestroyNotify)fsearch_index_free); } if (config->exclude_locations) { g_list_free_full(g_steal_pointer(&config->exclude_locations), (GDestroyNotify)fsearch_exclude_path_free); } g_clear_pointer(&config->exclude_files, g_strfreev); g_clear_pointer(&config, free); } fsearch-0.2.3/src/fsearch_config.h000066400000000000000000000070101446344336300170370ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include #include #include "fsearch_filter_manager.h" typedef struct _FsearchConfig FsearchConfig; typedef enum FsearchConfigActionAfterOpen { ACTION_AFTER_OPEN_NOTHING = 0, ACTION_AFTER_OPEN_MINIMIZE, ACTION_AFTER_OPEN_CLOSE, N_ACTIONS_AFTER_OPEN, } FsearchConfigActionAfterOpen; typedef struct { bool database_config_changed; bool listview_config_changed; bool search_config_changed; } FsearchConfigCompareResult; struct _FsearchConfig { // Search bool hide_results_on_empty_search; bool search_in_path; bool enable_regex; bool match_case; bool auto_search_in_path; bool auto_match_case; bool search_as_you_type; bool show_base_2_units; // Applications char *folder_open_cmd; // Window bool restore_window_size; int32_t window_width; int32_t window_height; // Interface bool highlight_search_terms; bool single_click_open; bool launch_desktop_files; bool enable_dark_theme; bool enable_list_tooltips; bool restore_column_config; bool restore_sort_order; bool double_click_path; FsearchConfigActionAfterOpen action_after_file_open; bool action_after_file_open_keyboard; bool action_after_file_open_mouse; bool exit_on_escape; bool show_indexing_status; // Warning Dialogs bool show_dialog_failed_opening; // View menu bool show_menubar; bool show_statusbar; bool show_filter; bool show_search_button; // Columns bool show_listview_icons; bool show_path_column; bool show_type_column; bool show_extension_column; bool show_size_column; bool show_modified_column; char *sort_by; bool sort_ascending; uint32_t name_column_width; uint32_t path_column_width; uint32_t type_column_width; uint32_t extension_column_width; uint32_t size_column_width; uint32_t modified_column_width; uint32_t name_column_pos; uint32_t path_column_pos; uint32_t type_column_pos; uint32_t size_column_pos; uint32_t modified_column_pos; // database bool update_database_on_launch; bool update_database_every; uint32_t update_database_every_hours; uint32_t update_database_every_minutes; bool exclude_hidden_items; bool follow_symlinks; FsearchFilterManager *filters; GList *indexes; GList *exclude_locations; char **exclude_files; }; bool config_make_dir(void); bool config_load(FsearchConfig *config); bool config_load_default(FsearchConfig *config); bool config_save(FsearchConfig *config); void config_build_dir(char *path, size_t len); FsearchConfigCompareResult config_cmp(FsearchConfig *c1, FsearchConfig *c2); FsearchConfig * config_copy(FsearchConfig *config); void config_free(FsearchConfig *config); fsearch-0.2.3/src/fsearch_database.c000066400000000000000000001465411446344336300173460ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define _GNU_SOURCE #ifdef HAVE_CONFIG_H #include #endif #define G_LOG_DOMAIN "fsearch-database" #include #include #include #include #ifdef HAVE_MALLOC_TRIM #include #endif #include #include #include #include #include #include #include #include #include "fsearch_database.h" #include "fsearch_database_entry.h" #include "fsearch_exclude_path.h" #include "fsearch_index.h" #include "fsearch_memory_pool.h" #include "fsearch_task.h" #define NUM_DB_ENTRIES_FOR_POOL_BLOCK 10000 #define DATABASE_MAJOR_VERSION 0 #define DATABASE_MINOR_VERSION 9 #define DATABASE_MAGIC_NUMBER "FSDB" struct FsearchDatabase { DynamicArray *sorted_files[NUM_DATABASE_INDEX_TYPES]; DynamicArray *sorted_folders[NUM_DATABASE_INDEX_TYPES]; FsearchMemoryPool *file_pool; FsearchMemoryPool *folder_pool; GList *db_views; FsearchThreadPool *thread_pool; FsearchDatabaseIndexFlags index_flags; GList *indexes; GList *excludes; char **exclude_files; bool exclude_hidden; time_t timestamp; volatile int ref_count; GMutex mutex; }; enum { WALK_OK = 0, WALK_BADIO, WALK_CANCEL, }; bool db_register_view(FsearchDatabase *db, gpointer view) { if (g_list_find(db->db_views, view)) { g_debug("[db_register_view] view is already registered for database"); return false; } db->db_views = g_list_append(db->db_views, view); return true; } bool db_unregister_view(FsearchDatabase *db, gpointer view) { if (!g_list_find(db->db_views, view)) { g_debug("[db_unregister_view] view isn't registered for database"); return false; } db->db_views = g_list_remove(db->db_views, view); return true; } static void db_sorted_entries_free(FsearchDatabase *db) { for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { g_clear_pointer(&db->sorted_files[i], darray_unref); g_clear_pointer(&db->sorted_folders[i], darray_unref); } } static bool is_cancelled(GCancellable *cancellable) { if (cancellable && g_cancellable_is_cancelled(cancellable)) { return true; } return false; } static void db_sort_entries(FsearchDatabase *db, DynamicArray *entries, DynamicArray **sorted_entries, GCancellable *cancellable) { // first sort by path darray_sort_multi_threaded(entries, (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_path, cancellable, NULL); if (is_cancelled(cancellable)) { return; } sorted_entries[DATABASE_INDEX_TYPE_PATH] = darray_copy(entries); // then by name darray_sort(entries, (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_name, cancellable, NULL); if (is_cancelled(cancellable)) { return; } // now build individual lists sorted by all of the indexed metadata if ((db->index_flags & DATABASE_INDEX_FLAG_SIZE) != 0) { sorted_entries[DATABASE_INDEX_TYPE_SIZE] = darray_copy(entries); darray_sort_multi_threaded(sorted_entries[DATABASE_INDEX_TYPE_SIZE], (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_size, cancellable, NULL); if (is_cancelled(cancellable)) { return; } } if ((db->index_flags & DATABASE_INDEX_FLAG_MODIFICATION_TIME) != 0) { sorted_entries[DATABASE_INDEX_TYPE_MODIFICATION_TIME] = darray_copy(entries); darray_sort_multi_threaded(sorted_entries[DATABASE_INDEX_TYPE_MODIFICATION_TIME], (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_modification_time, cancellable, NULL); if (is_cancelled(cancellable)) { return; } } } static void db_sort(FsearchDatabase *db, GCancellable *cancellable) { g_assert(db); g_autoptr(GTimer) timer = g_timer_new(); // first we sort all the files DynamicArray *files = db->sorted_files[DATABASE_INDEX_TYPE_NAME]; if (files) { db_sort_entries(db, files, db->sorted_files, cancellable); if (is_cancelled(cancellable)) { return; } // now build extension sort array db->sorted_files[DATABASE_INDEX_TYPE_EXTENSION] = darray_copy(files); darray_sort_multi_threaded(db->sorted_files[DATABASE_INDEX_TYPE_EXTENSION], (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_extension, cancellable, NULL); if (is_cancelled(cancellable)) { return; } const double seconds = g_timer_elapsed(timer, NULL); g_timer_reset(timer); g_debug("[db_sort] sorted files: %f s", seconds); } // then we sort all the folders DynamicArray *folders = db->sorted_folders[DATABASE_INDEX_TYPE_NAME]; if (folders) { db_sort_entries(db, folders, db->sorted_folders, cancellable); if (is_cancelled(cancellable)) { return; } // Folders don't have a file extension -> use the name array instead db->sorted_folders[DATABASE_INDEX_TYPE_EXTENSION] = darray_ref(folders); const double seconds = g_timer_elapsed(timer, NULL); g_debug("[db_sort] sorted folders: %f s", seconds); } } static void db_update_timestamp(FsearchDatabase *db) { g_assert(db); db->timestamp = time(NULL); } static void db_entry_update_folder_indices(FsearchDatabase *db) { if (!db || !db->sorted_folders[DATABASE_INDEX_TYPE_NAME]) { return; } const uint32_t num_folders = darray_get_num_items(db->sorted_folders[DATABASE_INDEX_TYPE_NAME]); for (uint32_t i = 0; i < num_folders; i++) { FsearchDatabaseEntryFolder *folder = darray_get_item(db->sorted_folders[DATABASE_INDEX_TYPE_NAME], i); if (!folder) { continue; } db_entry_set_idx((FsearchDatabaseEntry *)folder, i); } } static uint8_t get_name_offset(const char *old, const char *new) { if (!old || !new) { return 0; } uint8_t offset = 0; while (old[offset] == new[offset] && old[offset] != '\0' && new[offset] != '\0' && offset < 255) { offset++; } return offset; } static FILE * db_file_open_locked(const char *file_path, const char *mode) { FILE *file_pointer = fopen(file_path, mode); if (!file_pointer) { g_debug("[db_file] can't open database file: %s", file_path); return NULL; } int file_descriptor = fileno(file_pointer); if (flock(file_descriptor, LOCK_EX | LOCK_NB) == -1) { g_debug("[db_file] database file is already locked by a different process: %s", file_path); g_clear_pointer(&file_pointer, fclose); } return file_pointer; } static const uint8_t * copy_bytes_and_return_new_src(void *dest, const uint8_t *src, size_t len) { memcpy(dest, src, len); return src + len; } static const uint8_t * db_load_entry_super_elements_from_memory(const uint8_t *data_block, FsearchDatabaseIndexFlags index_flags, FsearchDatabaseEntry *entry, GString *previous_entry_name) { // name_offset: character position after which previous_entry_name and entry_name differ uint8_t name_offset = *data_block++; // name_len: length of the new name characters uint8_t name_len = *data_block++; // erase previous name starting at name_offset g_string_erase(previous_entry_name, name_offset, -1); char name[256] = ""; // name: new characters to be appended to previous_entry_name if (name_len > 0) { data_block = copy_bytes_and_return_new_src(name, data_block, name_len); name[name_len] = '\0'; } // now we can build the new full file name g_string_append(previous_entry_name, name); db_entry_set_name(entry, previous_entry_name->str); if ((index_flags & DATABASE_INDEX_FLAG_SIZE) != 0) { // size: size of file/folder off_t size = 0; data_block = copy_bytes_and_return_new_src(&size, data_block, 8); db_entry_set_size(entry, size); } if ((index_flags & DATABASE_INDEX_FLAG_MODIFICATION_TIME) != 0) { // mtime: modification time file/folder int64_t mtime = 0; data_block = copy_bytes_and_return_new_src(&mtime, data_block, 8); db_entry_set_mtime(entry, mtime); } return data_block; } static bool read_element_from_file(void *restrict ptr, size_t size, FILE *restrict stream) { return fread(ptr, size, 1, stream) == 1 ? true : false; } static bool db_load_entry_super_elements(FILE *fp, FsearchDatabaseEntry *entry, GString *previous_entry_name) { // name_offset: character position after which previous_entry_name and entry_name differ uint8_t name_offset = 0; if (!read_element_from_file(&name_offset, 1, fp)) { g_debug("[db_load] failed to load name offset"); return false; } // name_len: length of the new name characters uint8_t name_len = 0; if (!read_element_from_file(&name_len, 1, fp)) { g_debug("[db_load] failed to load name length"); return false; } // erase previous name starting at name_offset g_string_erase(previous_entry_name, name_offset, -1); char name[256] = ""; // name: new characters to be appended to previous_entry_name if (name_len > 0) { if (!read_element_from_file(name, name_len, fp)) { g_debug("[db_load] failed to load name"); return false; } name[name_len] = '\0'; } // now we can build the new full file name g_string_append(previous_entry_name, name); db_entry_set_name(entry, previous_entry_name->str); // size: size of file/folder uint64_t size = 0; if (!read_element_from_file(&size, 8, fp)) { g_debug("[db_load] failed to load size"); return false; } db_entry_set_size(entry, (off_t)size); return true; } static bool db_load_header(FILE *fp) { char magic[5] = ""; if (!read_element_from_file(magic, strlen(DATABASE_MAGIC_NUMBER), fp)) { return false; } magic[4] = '\0'; if (strcmp(magic, DATABASE_MAGIC_NUMBER) != 0) { g_debug("[db_load] invalid magic number: %s", magic); return false; } uint8_t majorver = 0; if (!read_element_from_file(&majorver, 1, fp)) { return false; } if (majorver != DATABASE_MAJOR_VERSION) { g_debug("[db_load] invalid major version: %d", majorver); g_debug("[db_load] expected major version: %d", DATABASE_MAJOR_VERSION); return false; } uint8_t minorver = 0; if (!read_element_from_file(&minorver, 1, fp)) { return false; } if (minorver > DATABASE_MINOR_VERSION) { g_debug("[db_load] invalid minor version: %d", minorver); g_debug("[db_load] expected minor version: <= %d", DATABASE_MINOR_VERSION); return false; } return true; } static bool db_load_parent_idx(FILE *fp, uint32_t *parent_idx) { if (!read_element_from_file(parent_idx, 4, fp)) { g_debug("[db_load] failed to load parent_idx"); return false; } return true; } static bool db_load_folders(FILE *fp, FsearchDatabaseIndexFlags index_flags, DynamicArray *folders, uint32_t num_folders, uint64_t folder_block_size) { g_autoptr(GString) previous_entry_name = g_string_sized_new(256); g_autofree uint8_t *folder_block = calloc(folder_block_size + 1, sizeof(uint8_t)); g_assert(folder_block); if (fread(folder_block, sizeof(uint8_t), folder_block_size, fp) != folder_block_size) { g_debug("[db_load] failed to read file block"); return false; } const uint8_t *fb = folder_block; // load folders uint32_t idx = 0; for (idx = 0; idx < num_folders; idx++) { FsearchDatabaseEntryFolder *folder = darray_get_item(folders, idx); FsearchDatabaseEntry *entry = (FsearchDatabaseEntry *)folder; // TODO: db_index is currently unused // db_index: the database index this folder belongs to uint16_t db_index = 0; fb = copy_bytes_and_return_new_src(&db_index, fb, 2); fb = db_load_entry_super_elements_from_memory(fb, index_flags, entry, previous_entry_name); // parent_idx: index of parent folder uint32_t parent_idx = 0; fb = copy_bytes_and_return_new_src(&parent_idx, fb, 4); if (parent_idx != db_entry_get_idx(entry)) { FsearchDatabaseEntryFolder *parent = darray_get_item(folders, parent_idx); db_entry_set_parent(entry, parent); } else { // parent_idx and idx are the same (i.e. folder is a root index) so it has no parent db_entry_set_parent(entry, NULL); } } // fail if we didn't read the correct number of bytes if (fb - folder_block != folder_block_size) { g_debug("[db_load] wrong amount of memory read: %lu != %lu", fb - folder_block, folder_block_size); return false; } // fail if we didn't read the correct number of folders if (idx != num_folders) { g_debug("[db_load] failed to read folders (read %d of %d)", idx, num_folders); return false; } return true; } static bool db_load_files(FILE *fp, FsearchDatabaseIndexFlags index_flags, FsearchMemoryPool *pool, DynamicArray *folders, DynamicArray *files, uint32_t num_files, uint64_t file_block_size) { g_autoptr(GString) previous_entry_name = g_string_sized_new(256); g_autofree uint8_t *file_block = calloc(file_block_size + 1, sizeof(uint8_t)); g_assert(file_block); if (fread(file_block, sizeof(uint8_t), file_block_size, fp) != file_block_size) { g_debug("[db_load] failed to read file block"); return false; } const uint8_t *fb = file_block; // load folders uint32_t idx = 0; for (idx = 0; idx < num_files; idx++) { FsearchDatabaseEntry *entry = fsearch_memory_pool_malloc(pool); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FILE); db_entry_set_idx(entry, idx); fb = db_load_entry_super_elements_from_memory(fb, index_flags, entry, previous_entry_name); // parent_idx: index of parent folder uint32_t parent_idx = 0; fb = copy_bytes_and_return_new_src(&parent_idx, fb, 4); FsearchDatabaseEntryFolder *parent = darray_get_item(folders, parent_idx); db_entry_set_parent(entry, parent); darray_add_item(files, entry); } if (fb - file_block != file_block_size) { g_debug("[db_load] wrong amount of memory read: %lu != %lu", fb - file_block, file_block_size); return false; } // fail if we didn't read the correct number of files if (idx != num_files) { g_debug("[db_load] failed to read files (read %d of %d)", idx, num_files); return false; } return true; } static bool db_load_sorted_entries(FILE *fp, DynamicArray *src, uint32_t num_src_entries, DynamicArray *dest) { g_autofree uint32_t *indexes = calloc(num_src_entries + 1, sizeof(uint32_t)); g_assert(indexes); if (fread(indexes, 4, num_src_entries, fp) != num_src_entries) { return false; } else { for (uint32_t i = 0; i < num_src_entries; i++) { uint32_t idx = indexes[i]; void *entry = darray_get_item(src, idx); if (!entry) { return false; } darray_add_item(dest, entry); } } return true; } static bool db_load_sorted_arrays(FILE *fp, DynamicArray **sorted_folders, DynamicArray **sorted_files) { uint32_t num_sorted_arrays = 0; DynamicArray *files = sorted_files[0]; DynamicArray *folders = sorted_folders[0]; if (!read_element_from_file(&num_sorted_arrays, 4, fp)) { g_debug("[db_load] failed to load number of sorted arrays"); return false; } for (uint32_t i = 0; i < num_sorted_arrays; i++) { uint32_t sorted_array_id = 0; if (!read_element_from_file(&sorted_array_id, 4, fp)) { g_debug("[db_load] failed to load sorted array id"); return false; } if (sorted_array_id < 1 || sorted_array_id >= NUM_DATABASE_INDEX_TYPES) { g_debug("[db_load] sorted array id is not supported: %d", sorted_array_id); return false; } const uint32_t num_folders = darray_get_num_items(folders); sorted_folders[sorted_array_id] = darray_new(num_folders); if (!db_load_sorted_entries(fp, folders, num_folders, sorted_folders[sorted_array_id])) { g_debug("[db_load] failed to load sorted folder indexes: %d", sorted_array_id); return false; } const uint32_t num_files = darray_get_num_items(files); sorted_files[sorted_array_id] = darray_new(num_files); if (!db_load_sorted_entries(fp, files, num_files, sorted_files[sorted_array_id])) { g_debug("[db_load] failed to load sorted file indexes: %d", sorted_array_id); return false; } } return true; } bool db_load(FsearchDatabase *db, const char *file_path, void (*status_cb)(const char *)) { g_assert(file_path); g_assert(db); FILE *fp = db_file_open_locked(file_path, "rb"); if (!fp) { return false; } DynamicArray *folders = NULL; DynamicArray *files = NULL; DynamicArray *sorted_folders[NUM_DATABASE_INDEX_TYPES] = {NULL}; DynamicArray *sorted_files[NUM_DATABASE_INDEX_TYPES] = {NULL}; if (!db_load_header(fp)) { goto load_fail; } uint64_t index_flags = 0; if (!read_element_from_file(&index_flags, 8, fp)) { goto load_fail; } uint32_t num_folders = 0; if (!read_element_from_file(&num_folders, 4, fp)) { goto load_fail; } uint32_t num_files = 0; if (!read_element_from_file(&num_files, 4, fp)) { goto load_fail; } g_debug("[db_load] load %d folders, %d files", num_folders, num_files); uint64_t folder_block_size = 0; if (!read_element_from_file(&folder_block_size, 8, fp)) { goto load_fail; } uint64_t file_block_size = 0; if (!read_element_from_file(&file_block_size, 8, fp)) { goto load_fail; } g_debug("[db_load] folder size: %lu, file size: %lu", folder_block_size, file_block_size); // TODO: implement index loading uint32_t num_indexes = 0; if (!read_element_from_file(&num_indexes, 4, fp)) { goto load_fail; } // TODO: implement exclude loading uint32_t num_excludes = 0; if (!read_element_from_file(&num_excludes, 4, fp)) { goto load_fail; } // pre-allocate the folders array so we can later map parent indices to the corresponding pointers sorted_folders[DATABASE_INDEX_TYPE_NAME] = darray_new(num_folders); folders = sorted_folders[DATABASE_INDEX_TYPE_NAME]; for (uint32_t i = 0; i < num_folders; i++) { FsearchDatabaseEntryFolder *folder = fsearch_memory_pool_malloc(db->folder_pool); FsearchDatabaseEntry *entry = (FsearchDatabaseEntry *)folder; db_entry_set_idx(entry, i); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FOLDER); db_entry_set_parent(entry, NULL); darray_add_item(folders, folder); } if (status_cb) { status_cb(_("Loading folders…")); } // load folders if (!db_load_folders(fp, index_flags, folders, num_folders, folder_block_size)) { goto load_fail; } if (status_cb) { status_cb(_("Loading files…")); } // load files sorted_files[DATABASE_INDEX_TYPE_NAME] = darray_new(num_files); files = sorted_files[DATABASE_INDEX_TYPE_NAME]; if (!db_load_files(fp, index_flags, db->file_pool, folders, files, num_files, file_block_size)) { goto load_fail; } if (!db_load_sorted_arrays(fp, sorted_folders, sorted_files)) { goto load_fail; } db_sorted_entries_free(db); for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { db->sorted_files[i] = sorted_files[i]; db->sorted_folders[i] = sorted_folders[i]; } db->index_flags = index_flags; g_clear_pointer(&fp, fclose); return true; load_fail: g_debug("[db_load] load failed"); g_clear_pointer(&fp, fclose); for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { g_clear_pointer(&sorted_folders[i], darray_unref); g_clear_pointer(&sorted_files[i], darray_unref); } return false; } size_t write_data_to_file(FILE *fp, const void *data, size_t data_size, size_t num_elements, bool *write_failed) { if (data_size == 0 || num_elements == 0) { return 0; } if (fwrite(data, data_size, num_elements, fp) != num_elements) { *write_failed = true; return 0; } return data_size * num_elements; } static size_t db_save_entry_super_elements(FILE *fp, FsearchDatabaseIndexFlags index_flags, FsearchDatabaseEntry *entry, uint32_t parent_idx, GString *previous_entry_name, GString *new_entry_name, bool *write_failed) { // init new_entry_name with the name of the current entry g_string_erase(new_entry_name, 0, -1); g_string_append(new_entry_name, db_entry_get_name_raw(entry)); size_t bytes_written = 0; // name_offset: character position after which previous_entry_name and new_entry_name differ const uint8_t name_offset = get_name_offset(previous_entry_name->str, new_entry_name->str); bytes_written += write_data_to_file(fp, &name_offset, 1, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save name offset"); goto out; } // name_len: length of the new name characters const uint8_t name_len = new_entry_name->len - name_offset; bytes_written += write_data_to_file(fp, &name_len, 1, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save name length"); goto out; } // append new unique characters to previous_entry_name starting at name_offset g_string_erase(previous_entry_name, name_offset, -1); g_string_append(previous_entry_name, new_entry_name->str + name_offset); if (name_len > 0) { // name: new characters to be written to file const char *name = previous_entry_name->str + name_offset; bytes_written += write_data_to_file(fp, name, name_len, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save name"); goto out; } } if ((index_flags & DATABASE_INDEX_FLAG_SIZE) != 0) { // size: file or folder size (folder size: sum of all children sizes) const uint64_t size = db_entry_get_size(entry); bytes_written += write_data_to_file(fp, &size, 8, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save size"); goto out; } } if ((index_flags & DATABASE_INDEX_FLAG_MODIFICATION_TIME) != 0) { // mtime: modification time of file/folder const int64_t mtime = db_entry_get_mtime(entry); bytes_written += write_data_to_file(fp, &mtime, 8, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save modification time"); goto out; } } // parent_idx: index of parent folder bytes_written += write_data_to_file(fp, &parent_idx, 4, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save parent_idx"); goto out; } out: return bytes_written; } static size_t db_save_header(FILE *fp, bool *write_failed) { size_t bytes_written = 0; const char magic[] = DATABASE_MAGIC_NUMBER; bytes_written += write_data_to_file(fp, magic, strlen(magic), 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save magic number"); goto out; } const uint8_t majorver = DATABASE_MAJOR_VERSION; bytes_written += write_data_to_file(fp, &majorver, 1, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save major version number"); goto out; } const uint8_t minorver = DATABASE_MINOR_VERSION; bytes_written += write_data_to_file(fp, &minorver, 1, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save minor version number"); goto out; } out: return bytes_written; } static size_t db_save_files(FILE *fp, FsearchDatabaseIndexFlags index_flags, DynamicArray *files, uint32_t num_files, bool *write_failed) { size_t bytes_written = 0; g_autoptr(GString) name_prev = g_string_sized_new(256); g_autoptr(GString) name_new = g_string_sized_new(256); for (uint32_t i = 0; i < num_files; i++) { FsearchDatabaseEntry *entry = darray_get_item(files, i); // let's also update the idx of the file here while we're at it to make sure we have the correct // idx set when we store the fast sort indexes db_entry_set_idx(entry, i); FsearchDatabaseEntryFolder *parent = db_entry_get_parent(entry); const uint32_t parent_idx = db_entry_get_idx((FsearchDatabaseEntry *)parent); bytes_written += db_save_entry_super_elements(fp, index_flags, entry, parent_idx, name_prev, name_new, write_failed); if (*write_failed == true) return bytes_written; } return bytes_written; } static uint32_t * build_sorted_entry_index_list(DynamicArray *entries, uint32_t num_entries) { if (num_entries < 1) { return NULL; } uint32_t *indexes = calloc(num_entries + 1, sizeof(uint32_t)); g_assert(indexes); for (int i = 0; i < num_entries; i++) { FsearchDatabaseEntry *entry = darray_get_item(entries, i); indexes[i] = db_entry_get_idx(entry); } return indexes; } static size_t db_save_sorted_entries(FILE *fp, DynamicArray *entries, uint32_t num_entries, bool *write_failed) { if (num_entries < 1) { // nothing to write, we're done here return 0; } g_autofree uint32_t *sorted_entry_index_list = build_sorted_entry_index_list(entries, num_entries); if (!sorted_entry_index_list) { *write_failed = true; g_debug("[db_save] failed to create sorted index list"); return 0; } size_t bytes_written = write_data_to_file(fp, sorted_entry_index_list, 4, num_entries, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save sorted index list"); } return bytes_written; } static size_t db_save_sorted_arrays(FILE *fp, FsearchDatabase *db, uint32_t num_files, uint32_t num_folders, bool *write_failed) { size_t bytes_written = 0; uint32_t num_sorted_arrays = 0; for (uint32_t i = 1; i < NUM_DATABASE_INDEX_TYPES; i++) { if (db->sorted_folders[i] && db->sorted_files[i]) { num_sorted_arrays++; } } bytes_written += write_data_to_file(fp, &num_sorted_arrays, 4, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save number of sorted arrays: %d", num_sorted_arrays); goto out; } if (num_sorted_arrays < 1) { goto out; } for (uint32_t id = 1; id < NUM_DATABASE_INDEX_TYPES; id++) { DynamicArray *folders = db->sorted_folders[id]; DynamicArray *files = db->sorted_files[id]; if (!files || !folders) { continue; } // id: this is the id of the sorted files bytes_written += write_data_to_file(fp, &id, 4, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save sorted arrays id: %d", id); goto out; } bytes_written += db_save_sorted_entries(fp, folders, num_folders, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save sorted folders"); goto out; } bytes_written += db_save_sorted_entries(fp, files, num_files, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save sorted files"); goto out; } } out: return bytes_written; } static size_t db_save_folders(FILE *fp, FsearchDatabaseIndexFlags index_flags, DynamicArray *folders, uint32_t num_folders, bool *write_failed) { size_t bytes_written = 0; g_autoptr(GString) name_prev = g_string_sized_new(256); g_autoptr(GString) name_new = g_string_sized_new(256); for (uint32_t i = 0; i < num_folders; i++) { FsearchDatabaseEntry *entry = darray_get_item(folders, i); // TODO: actually store the folders db_index instead of always 0 const uint16_t db_index = 0; bytes_written += write_data_to_file(fp, &db_index, 2, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save folder's database index: %d", db_index); return bytes_written; } FsearchDatabaseEntryFolder *parent = db_entry_get_parent(entry); const uint32_t parent_idx = parent ? db_entry_get_idx((FsearchDatabaseEntry *)parent) : db_entry_get_idx(entry); bytes_written += db_save_entry_super_elements(fp, index_flags, entry, parent_idx, name_prev, name_new, write_failed); if (*write_failed == true) { return bytes_written; } } return bytes_written; } static size_t db_save_indexes(FILE *fp, FsearchDatabase *db, bool *write_failed) { size_t bytes_written = 0; // TODO: actually implement storing all index information const uint32_t num_indexes = 0; bytes_written += write_data_to_file(fp, &num_indexes, 4, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save number of indexes: %d", num_indexes); goto out; } out: return bytes_written; } static size_t db_save_excludes(FILE *fp, FsearchDatabase *db, bool *write_failed) { size_t bytes_written = 0; // TODO: actually implement storing all exclude information const uint32_t num_excludes = 0; bytes_written += write_data_to_file(fp, &num_excludes, 4, 1, write_failed); if (*write_failed == true) { g_debug("[db_save] failed to save number of indexes: %d", num_excludes); goto out; } out: return bytes_written; } static size_t db_save_exclude_pattern(FILE *fp, FsearchDatabase *db, bool *write_failed) { // TODO return 0; } bool db_save(FsearchDatabase *db, const char *path) { g_assert(path); g_assert(db); g_debug("[db_save] saving database to file..."); if (!g_file_test(path, G_FILE_TEST_IS_DIR)) { g_debug("[db_save] database path doesn't exist: %s", path); return false; } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); g_autoptr(GString) path_full = g_string_new(path); g_string_append_c(path_full, G_DIR_SEPARATOR); g_string_append(path_full, "fsearch.db"); g_autoptr(GString) path_full_temp = g_string_new(path_full->str); g_string_append(path_full_temp, ".tmp"); g_debug("[db_save] trying to open temporary database file: %s", path_full_temp->str); FILE *fp = db_file_open_locked(path_full_temp->str, "wb"); if (!fp) { g_debug("[db_save] failed to open temporary database file: %s", path_full_temp->str); goto save_fail; } g_debug("[db_save] updating folder indices..."); db_entry_update_folder_indices(db); bool write_failed = false; size_t bytes_written = 0; g_debug("[db_save] saving database header..."); bytes_written += db_save_header(fp, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving database index flags..."); const uint64_t index_flags = db->index_flags; bytes_written += write_data_to_file(fp, &index_flags, 8, 1, &write_failed); if (write_failed == true) { goto save_fail; } DynamicArray *files = db->sorted_files[DATABASE_INDEX_TYPE_NAME]; DynamicArray *folders = db->sorted_folders[DATABASE_INDEX_TYPE_NAME]; const uint32_t num_folders = darray_get_num_items(folders); g_debug("[db_save] saving number of folders: %d", num_folders); bytes_written += write_data_to_file(fp, &num_folders, 4, 1, &write_failed); if (write_failed == true) { goto save_fail; } const uint32_t num_files = darray_get_num_items(files); g_debug("[db_save] saving number of files: %d", num_files); bytes_written += write_data_to_file(fp, &num_files, 4, 1, &write_failed); if (write_failed == true) { goto save_fail; } uint64_t folder_block_size = 0; const uint64_t folder_block_size_offset = bytes_written; g_debug("[db_save] saving folder block size..."); bytes_written += write_data_to_file(fp, &folder_block_size, 8, 1, &write_failed); if (write_failed == true) { goto save_fail; } uint64_t file_block_size = 0; const uint64_t file_block_size_offset = bytes_written; g_debug("[db_save] saving file block size..."); bytes_written += write_data_to_file(fp, &file_block_size, 8, 1, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving indices..."); bytes_written += db_save_indexes(fp, db, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving excludes..."); bytes_written += db_save_excludes(fp, db, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving exclude pattern..."); bytes_written += db_save_exclude_pattern(fp, db, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving folders..."); folder_block_size = db_save_folders(fp, index_flags, folders, num_folders, &write_failed); bytes_written += folder_block_size; if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving files..."); file_block_size = db_save_files(fp, index_flags, files, num_files, &write_failed); bytes_written += file_block_size; if (write_failed == true) { goto save_fail; } g_debug("[db_save] saving sorted arrays..."); bytes_written += db_save_sorted_arrays(fp, db, num_files, num_folders, &write_failed); if (write_failed == true) { goto save_fail; } // now that we know the size of the file/folder block we've written, store it in the file header if (fseek(fp, (long int)folder_block_size_offset, SEEK_SET) != 0) { goto save_fail; } g_debug("[db_save] updating file and folder block size: %lu, %lu", folder_block_size, file_block_size); bytes_written += write_data_to_file(fp, &folder_block_size, 8, 1, &write_failed); if (write_failed == true) { goto save_fail; } bytes_written += write_data_to_file(fp, &file_block_size, 8, 1, &write_failed); if (write_failed == true) { goto save_fail; } g_debug("[db_save] removing current database file..."); // remove current database file unlink(path_full->str); g_clear_pointer(&fp, fclose); g_debug("[db_save] renaming temporary database file: %s -> %s", path_full_temp->str, path_full->str); // rename temporary fsearch.db.tmp to fsearch.db if (rename(path_full_temp->str, path_full->str) != 0) { goto save_fail; } const double seconds = g_timer_elapsed(timer, NULL); g_timer_stop(timer); g_debug("[db_save] database file saved in: %f ms", seconds * 1000); return true; save_fail: g_warning("[db_save] saving failed"); g_clear_pointer(&fp, fclose); // remove temporary fsearch.db.tmp file unlink(path_full_temp->str); return false; } static bool file_is_excluded(const char *name, char **exclude_files) { if (exclude_files) { for (int i = 0; exclude_files[i]; ++i) { if (!fnmatch(exclude_files[i], name, 0)) { return true; } } } return false; } static bool directory_is_excluded(const char *name, GList *excludes) { while (excludes) { FsearchExcludePath *fs_path = excludes->data; if (!strcmp(name, fs_path->path)) { if (fs_path->enabled) { return true; } return false; } excludes = excludes->next; } return false; } typedef struct DatabaseWalkContext { FsearchDatabase *db; GString *path; GTimer *timer; GCancellable *cancellable; void (*status_cb)(const char *); dev_t root_device_id; bool one_filesystem; bool exclude_hidden; } DatabaseWalkContext; static int db_folder_scan_recursive(DatabaseWalkContext *walk_context, FsearchDatabaseEntryFolder *parent) { if (walk_context->cancellable && g_cancellable_is_cancelled(walk_context->cancellable)) { g_debug("[db_scan] cancelled"); return WALK_CANCEL; } GString *path = walk_context->path; g_string_append_c(path, G_DIR_SEPARATOR); // remember end of parent path const gsize path_len = path->len; DIR *dir = NULL; if (!(dir = opendir(path->str))) { g_debug("[db_scan] failed to open directory: %s", path->str); return WALK_BADIO; } const int dir_fd = dirfd(dir); const double elapsed_seconds = g_timer_elapsed(walk_context->timer, NULL); if (elapsed_seconds > 0.1) { if (walk_context->status_cb) { walk_context->status_cb(path->str); } g_timer_start(walk_context->timer); } FsearchDatabase *db = walk_context->db; struct dirent *dent = NULL; while ((dent = readdir(dir))) { if (walk_context->cancellable && g_cancellable_is_cancelled(walk_context->cancellable)) { g_debug("[db_scan] cancelled"); g_clear_pointer(&dir, closedir); return WALK_CANCEL; } if (walk_context->exclude_hidden && dent->d_name[0] == '.') { // file is dotfile, skip // g_debug("[db_scan] exclude hidden: %s", dent->d_name); continue; } if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")) { continue; } if (file_is_excluded(dent->d_name, db->exclude_files)) { // g_debug("[db_scan] excluded: %s", dent->d_name); continue; } const size_t d_name_len = strlen(dent->d_name); if (d_name_len >= 256) { g_warning("[db_scan] file name too long, skipping: \"%s\" (len: %lu)", dent->d_name, d_name_len); continue; } // create full path of file/folder g_string_truncate(path, path_len); g_string_append(path, dent->d_name); struct stat st; int stat_flags = AT_SYMLINK_NOFOLLOW; #ifdef AT_NO_AUTOMOUNT stat_flags |= AT_NO_AUTOMOUNT; #endif if (fstatat(dir_fd, dent->d_name, &st, stat_flags)) { g_debug("[db_scan] can't stat: %s", path->str); continue; } if (walk_context->one_filesystem && walk_context->root_device_id != st.st_dev) { g_debug("[db_scan] different filesystem, skipping: %s", path->str); continue; } const bool is_dir = S_ISDIR(st.st_mode); if (is_dir && directory_is_excluded(path->str, db->excludes)) { g_debug("[db_scan] excluded directory: %s", path->str); continue; } if (is_dir) { FsearchDatabaseEntry *entry = fsearch_memory_pool_malloc(db->folder_pool); db_entry_set_name(entry, dent->d_name); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FOLDER); db_entry_set_mtime(entry, st.st_mtime); db_entry_set_parent(entry, parent); darray_add_item(db->sorted_folders[DATABASE_INDEX_TYPE_NAME], entry); db_folder_scan_recursive(walk_context, (FsearchDatabaseEntryFolder *)entry); } else { FsearchDatabaseEntry *file_entry = fsearch_memory_pool_malloc(db->file_pool); db_entry_set_name(file_entry, dent->d_name); db_entry_set_size(file_entry, st.st_size); db_entry_set_mtime(file_entry, st.st_mtime); db_entry_set_type(file_entry, DATABASE_ENTRY_TYPE_FILE); db_entry_set_parent(file_entry, parent); db_entry_update_parent_size(file_entry); darray_add_item(db->sorted_files[DATABASE_INDEX_TYPE_NAME], file_entry); } } g_clear_pointer(&dir, closedir); return WALK_OK; } static bool db_scan_folder(FsearchDatabase *db, const char *dname, bool one_filesystem, GCancellable *cancellable, void (*status_cb)(const char *)) { g_assert(dname); g_assert(dname[0] == G_DIR_SEPARATOR); g_debug("[db_scan] scan path: %s", dname); if (!g_file_test(dname, G_FILE_TEST_IS_DIR)) { g_warning("[db_scan] %s doesn't exist", dname); return false; } g_autoptr(GString) path = g_string_new(dname); // remove leading path separator '/' for root directory if (strcmp(path->str, G_DIR_SEPARATOR_S) == 0) { g_string_erase(path, 0, 1); } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); struct stat root_st; if (lstat(dname, &root_st)) { g_debug("[db_scan] can't stat: %s", dname); } DatabaseWalkContext walk_context = { .db = db, .path = path, .timer = timer, .cancellable = cancellable, .status_cb = status_cb, .root_device_id = root_st.st_dev, .one_filesystem = one_filesystem, .exclude_hidden = db->exclude_hidden, }; FsearchDatabaseEntry *entry = fsearch_memory_pool_malloc(db->folder_pool); db_entry_set_name(entry, path->str); db_entry_set_parent(entry, NULL); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FOLDER); darray_add_item(db->sorted_folders[DATABASE_INDEX_TYPE_NAME], entry); uint32_t res = db_folder_scan_recursive(&walk_context, (FsearchDatabaseEntryFolder *)entry); if (res == WALK_OK) { g_debug("[db_scan] scanned: %d files, %d folders -> %d total", db_get_num_files(db), db_get_num_folders(db), db_get_num_entries(db)); return true; } if (res == WALK_CANCEL) { g_debug("[db_scan] scan cancelled."); } else { g_warning("[db_scan] walk error: %d", res); } return false; } static gint compare_index_path(FsearchIndex *p1, FsearchIndex *p2) { return strcmp(p1->path, p2->path); } static gint compare_exclude_path(FsearchExcludePath *p1, FsearchExcludePath *p2) { return strcmp(p1->path, p2->path); } FsearchDatabase * db_new(GList *indexes, GList *excludes, char **exclude_files, bool exclude_hidden) { FsearchDatabase *db = g_new0(FsearchDatabase, 1); g_assert(db); g_mutex_init(&db->mutex); if (indexes) { db->indexes = g_list_copy_deep(indexes, (GCopyFunc)fsearch_index_copy, NULL); db->indexes = g_list_sort(db->indexes, (GCompareFunc)compare_index_path); } if (excludes) { db->excludes = g_list_copy_deep(excludes, (GCopyFunc)fsearch_exclude_path_copy, NULL); db->excludes = g_list_sort(db->excludes, (GCompareFunc)compare_exclude_path); } if (exclude_files) { db->exclude_files = g_strdupv(exclude_files); } for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { db->sorted_files[i] = NULL; db->sorted_folders[i] = NULL; } db->file_pool = fsearch_memory_pool_new(NUM_DB_ENTRIES_FOR_POOL_BLOCK, db_entry_get_sizeof_file_entry(), (GDestroyNotify)db_entry_destroy); db->folder_pool = fsearch_memory_pool_new(NUM_DB_ENTRIES_FOR_POOL_BLOCK, db_entry_get_sizeof_folder_entry(), (GDestroyNotify)db_entry_destroy); db->thread_pool = fsearch_thread_pool_init(); db->exclude_hidden = exclude_hidden; db->ref_count = 1; return db; } static void db_free(FsearchDatabase *db) { g_assert(db); g_debug("[db_free] freeing..."); db_lock(db); if (db->ref_count > 0) { g_warning("[db_free] pending references on free: %d", db->ref_count); } db_sorted_entries_free(db); g_clear_pointer(&db->file_pool, fsearch_memory_pool_free_pool); g_clear_pointer(&db->folder_pool, fsearch_memory_pool_free_pool); if (db->indexes) { g_list_free_full(g_steal_pointer(&db->indexes), (GDestroyNotify)fsearch_index_free); } if (db->excludes) { g_list_free_full(g_steal_pointer(&db->excludes), (GDestroyNotify)fsearch_exclude_path_free); } g_clear_pointer(&db->exclude_files, g_strfreev); g_clear_pointer(&db->thread_pool, fsearch_thread_pool_free); db_unlock(db); g_mutex_clear(&db->mutex); g_clear_pointer(&db, free); #ifdef HAVE_MALLOC_TRIM malloc_trim(0); #endif g_debug("[db_free] freed"); } time_t db_get_timestamp(FsearchDatabase *db) { g_assert(db); return db->timestamp; } uint32_t db_get_num_files(FsearchDatabase *db) { g_assert(db); return db->sorted_files[DATABASE_INDEX_TYPE_NAME] ? darray_get_num_items(db->sorted_files[DATABASE_INDEX_TYPE_NAME]) : 0; } uint32_t db_get_num_folders(FsearchDatabase *db) { g_assert(db); return db->sorted_folders[DATABASE_INDEX_TYPE_NAME] ? darray_get_num_items(db->sorted_folders[DATABASE_INDEX_TYPE_NAME]) : 0; } uint32_t db_get_num_entries(FsearchDatabase *db) { g_assert(db); return db_get_num_files(db) + db_get_num_folders(db); } void db_unlock(FsearchDatabase *db) { g_assert(db); g_mutex_unlock(&db->mutex); } void db_lock(FsearchDatabase *db) { g_assert(db); g_mutex_lock(&db->mutex); } bool db_try_lock(FsearchDatabase *db) { g_assert(db); return g_mutex_trylock(&db->mutex); } static bool is_valid_sort_type(FsearchDatabaseIndexType sort_type) { if (0 <= sort_type && sort_type < NUM_DATABASE_INDEX_TYPES) { return true; } return false; } bool db_has_entries_sorted_by_type(FsearchDatabase *db, FsearchDatabaseIndexType sort_type) { g_assert(db); if (is_valid_sort_type(sort_type)) { return db->sorted_folders[sort_type] ? true : false; } return false; } DynamicArray * db_get_folders_sorted_copy(FsearchDatabase *db, FsearchDatabaseIndexType sort_type) { g_assert(db); if (!is_valid_sort_type(sort_type)) { return NULL; } DynamicArray *folders = db->sorted_folders[sort_type]; return folders ? darray_copy(folders) : NULL; } DynamicArray * db_get_files_sorted_copy(FsearchDatabase *db, FsearchDatabaseIndexType sort_type) { g_assert(db); if (!is_valid_sort_type(sort_type)) { return NULL; } DynamicArray *files = db->sorted_files[sort_type]; return files ? darray_copy(files) : NULL; } DynamicArray * db_get_folders_copy(FsearchDatabase *db) { return db_get_folders_sorted_copy(db, DATABASE_INDEX_TYPE_NAME); } DynamicArray * db_get_files_copy(FsearchDatabase *db) { return db_get_files_sorted_copy(db, DATABASE_INDEX_TYPE_NAME); } bool db_get_entries_sorted(FsearchDatabase *db, FsearchDatabaseIndexType requested_sort_type, FsearchDatabaseIndexType *returned_sort_type, DynamicArray **folders, DynamicArray **files) { g_assert(db); g_assert(returned_sort_type); g_assert(folders); g_assert(files); if (!is_valid_sort_type(requested_sort_type)) { return false; } FsearchDatabaseIndexType sort_type = requested_sort_type; if (!db_has_entries_sorted_by_type(db, requested_sort_type)) { sort_type = DATABASE_INDEX_TYPE_NAME; } if (!db_has_entries_sorted_by_type(db, sort_type)) { return false; } *folders = darray_ref(db->sorted_folders[sort_type]); *files = darray_ref(db->sorted_files[sort_type]); *returned_sort_type = sort_type; return true; } DynamicArray * db_get_folders_sorted(FsearchDatabase *db, FsearchDatabaseIndexType sort_type) { g_assert(db); if (!is_valid_sort_type(sort_type)) { return NULL; } DynamicArray *folders = db->sorted_folders[sort_type]; return darray_ref(folders); } DynamicArray * db_get_files_sorted(FsearchDatabase *db, FsearchDatabaseIndexType sort_type) { g_assert(db); if (!is_valid_sort_type(sort_type)) { return NULL; } DynamicArray *files = db->sorted_files[sort_type]; return darray_ref(files); } DynamicArray * db_get_files(FsearchDatabase *db) { g_assert(db); return db_get_files_sorted(db, DATABASE_INDEX_TYPE_NAME); } DynamicArray * db_get_folders(FsearchDatabase *db) { g_assert(db); return db_get_folders_sorted(db, DATABASE_INDEX_TYPE_NAME); } FsearchThreadPool * db_get_thread_pool(FsearchDatabase *db) { g_assert(db); return db->thread_pool; } bool db_scan(FsearchDatabase *db, GCancellable *cancellable, void (*status_cb)(const char *)) { g_assert(db); bool ret = false; db_sorted_entries_free(db); db->index_flags |= DATABASE_INDEX_FLAG_NAME; db->index_flags |= DATABASE_INDEX_FLAG_SIZE; db->index_flags |= DATABASE_INDEX_FLAG_MODIFICATION_TIME; db->sorted_files[DATABASE_INDEX_TYPE_NAME] = darray_new(1024); db->sorted_folders[DATABASE_INDEX_TYPE_NAME] = darray_new(1024); for (GList *l = db->indexes; l != NULL; l = l->next) { FsearchIndex *fs_path = l->data; if (!fs_path->path) { continue; } if (!fs_path->enabled) { continue; } if (fs_path->update) { ret = db_scan_folder(db, fs_path->path, fs_path->one_filesystem, cancellable, status_cb) || ret; } if (is_cancelled(cancellable)) { return false; } } if (status_cb) { status_cb(_("Sorting…")); } db_sort(db, cancellable); if (is_cancelled(cancellable)) { return false; } return ret; } FsearchDatabase * db_ref(FsearchDatabase *db) { if (!db || g_atomic_int_get(&db->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&db->ref_count); g_debug("[db_ref] increased to: %d", db->ref_count); return db; } void db_unref(FsearchDatabase *db) { if (!db || g_atomic_int_get(&db->ref_count) <= 0) { return; } g_debug("[db_unref] dropped to: %d", db->ref_count - 1); if (g_atomic_int_dec_and_test(&db->ref_count)) { g_clear_pointer(&db, db_free); } } fsearch-0.2.3/src/fsearch_database.h000066400000000000000000000054711446344336300173470ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include "fsearch_array.h" #include "fsearch_database_index.h" #include "fsearch_thread_pool.h" #include #include #include #include typedef struct FsearchDatabase FsearchDatabase; bool db_register_view(FsearchDatabase *db, gpointer view); bool db_unregister_view(FsearchDatabase *db, gpointer view); bool db_load(FsearchDatabase *db, const char *path, void (*status_cb)(const char *)); bool db_scan(FsearchDatabase *db, GCancellable *cancellable, void (*status_cb)(const char *)); FsearchDatabase * db_ref(FsearchDatabase *db); void db_unref(FsearchDatabase *db); FsearchDatabase * db_new(GList *includes, GList *excludes, char **exclude_files, bool exclude_hidden); bool db_save(FsearchDatabase *db, const char *path); time_t db_get_timestamp(FsearchDatabase *db); uint32_t db_get_num_files(FsearchDatabase *db); uint32_t db_get_num_folders(FsearchDatabase *db); uint32_t db_get_num_entries(FsearchDatabase *db); void db_unlock(FsearchDatabase *db); void db_lock(FsearchDatabase *db); bool db_try_lock(FsearchDatabase *db); DynamicArray * db_get_folders_copy(FsearchDatabase *db); DynamicArray * db_get_files_copy(FsearchDatabase *db); DynamicArray * db_get_folders(FsearchDatabase *db); DynamicArray * db_get_files(FsearchDatabase *db); FsearchThreadPool * db_get_thread_pool(FsearchDatabase *db); bool db_has_entries_sorted_by_type(FsearchDatabase *db, FsearchDatabaseIndexType sort_type); bool db_get_entries_sorted(FsearchDatabase *db, FsearchDatabaseIndexType requested_sort_type, FsearchDatabaseIndexType *returned_sort_type, DynamicArray **folders, DynamicArray **files); DynamicArray * db_get_folders_sorted_copy(FsearchDatabase *db, FsearchDatabaseIndexType sort_type); DynamicArray * db_get_files_sorted_copy(FsearchDatabase *db, FsearchDatabaseIndexType sort_type); DynamicArray * db_get_folders_sorted(FsearchDatabase *db, FsearchDatabaseIndexType sort_type); DynamicArray * db_get_files_sorted(FsearchDatabase *db, FsearchDatabaseIndexType sort_type); fsearch-0.2.3/src/fsearch_database_entry.c000066400000000000000000000252201446344336300205550ustar00rootroot00000000000000#define _GNU_SOURCE #include "fsearch_database_entry.h" #include "fsearch_file_utils.h" #include "fsearch_string_utils.h" #include #include #include struct FsearchDatabaseEntry { FsearchDatabaseEntryFolder *parent; char *name; off_t size; int64_t mtime; // idx: index of this entry in the sorted list at pos DATABASE_INDEX_TYPE_NAME uint32_t idx; uint8_t type; uint8_t mark; }; struct FsearchDatabaseEntryFile { struct FsearchDatabaseEntry super; }; struct FsearchDatabaseEntryFolder { struct FsearchDatabaseEntry super; // db_idx: the database index this folder belongs to uint32_t db_idx; uint32_t num_files; uint32_t num_folders; }; static void build_path_recursively(FsearchDatabaseEntryFolder *folder, GString *str) { if (G_UNLIKELY(!folder)) { return; } FsearchDatabaseEntry *entry = (FsearchDatabaseEntry *)folder; if (G_LIKELY(entry->parent)) { build_path_recursively(entry->parent, str); } if (G_LIKELY(strcmp(entry->name, "") != 0)) { g_string_append(str, entry->name); } g_string_append_c(str, G_DIR_SEPARATOR); } bool db_entry_is_folder(FsearchDatabaseEntry *entry) { return entry->type == DATABASE_ENTRY_TYPE_FOLDER; } bool db_entry_is_file(FsearchDatabaseEntry *entry) { return entry->type == DATABASE_ENTRY_TYPE_FILE; } uint32_t db_entry_folder_get_num_children(FsearchDatabaseEntryFolder *entry) { g_assert(entry->super.type == DATABASE_ENTRY_TYPE_FOLDER); return entry->num_files + entry->num_folders; } uint32_t db_entry_folder_get_num_files(FsearchDatabaseEntryFolder *entry) { g_assert(entry->super.type == DATABASE_ENTRY_TYPE_FOLDER); return entry->num_files; } uint32_t db_entry_folder_get_num_folders(FsearchDatabaseEntryFolder *entry) { g_assert(entry->super.type == DATABASE_ENTRY_TYPE_FOLDER); return entry->num_folders; } size_t db_entry_get_sizeof_folder_entry() { return sizeof(FsearchDatabaseEntryFolder); } size_t db_entry_get_sizeof_file_entry() { return sizeof(FsearchDatabaseEntryFile); } GString * db_entry_get_path(FsearchDatabaseEntry *entry) { GString *path = g_string_new(NULL); db_entry_append_path(entry, path); return path; } GString * db_entry_get_path_full(FsearchDatabaseEntry *entry) { GString *path_full = g_string_new(NULL); db_entry_append_full_path(entry, path_full); return path_full; } void db_entry_append_path(FsearchDatabaseEntry *entry, GString *str) { build_path_recursively(entry->parent, str); if (str->len > 1) { g_string_set_size(str, str->len - 1); } } void db_entry_append_full_path(FsearchDatabaseEntry *entry, GString *str) { build_path_recursively(entry->parent, str); g_string_append(str, entry->name[0] == '\0' ? G_DIR_SEPARATOR_S : entry->name); } int64_t db_entry_get_mtime(FsearchDatabaseEntry *entry) { return entry ? entry->mtime : 0; } off_t db_entry_get_size(FsearchDatabaseEntry *entry) { return entry ? entry->size : 0; } const char * db_entry_get_extension(FsearchDatabaseEntry *entry) { if (G_UNLIKELY(!entry)) { return NULL; } if (entry->type == DATABASE_ENTRY_TYPE_FOLDER) { return NULL; } return fsearch_string_get_extension(entry->name); } const char * db_entry_get_name_raw_for_display(FsearchDatabaseEntry *entry) { if (G_UNLIKELY(!entry)) { return NULL; } if (strcmp(entry->name, "") != 0) { return entry->name; } return G_DIR_SEPARATOR_S; } GString * db_entry_get_name_for_display(FsearchDatabaseEntry *entry) { const char *name = db_entry_get_name_raw_for_display(entry); return name ? g_string_new(name) : NULL; } const char * db_entry_get_name_raw(FsearchDatabaseEntry *entry) { return entry ? entry->name : NULL; } FsearchDatabaseEntryFolder * db_entry_get_parent(FsearchDatabaseEntry *entry) { return entry ? entry->parent : NULL; } FsearchDatabaseEntryType db_entry_get_type(FsearchDatabaseEntry *entry) { return entry ? entry->type : DATABASE_ENTRY_TYPE_NONE; } void db_entry_append_content_type(FsearchDatabaseEntry *entry, GString *str) { g_autoptr(GString) path = db_entry_get_path_full(entry); g_autoptr(GFile) file = g_file_new_for_path(path->str); g_autoptr(GError) error = NULL; g_autoptr(GFileInfo) info = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, NULL, &error); const char *content_type = NULL; if (info) { content_type = g_file_info_get_content_type(info); } g_string_append(str, content_type ? content_type : "unknown"); } uint8_t db_entry_get_mark(FsearchDatabaseEntry *entry) { return entry ? entry->mark : 0; } uint32_t db_entry_get_idx(FsearchDatabaseEntry *entry) { return entry ? entry->idx : 0; } void db_entry_destroy(FsearchDatabaseEntry *entry) { if (G_UNLIKELY(!entry)) { return; } g_clear_pointer(&entry->name, free); } uint32_t db_entry_get_depth(FsearchDatabaseEntry *entry) { uint32_t depth = 0; while (entry && entry->parent) { entry = (FsearchDatabaseEntry *)entry->parent; depth++; } return depth; } static FsearchDatabaseEntryFolder * db_entry_get_parent_nth(FsearchDatabaseEntryFolder *entry, uint32_t nth) { while (entry && nth > 0) { entry = entry->super.parent; nth--; } return entry; } static void sort_entry_by_path_recursive(FsearchDatabaseEntryFolder *entry_a, FsearchDatabaseEntryFolder *entry_b, int *res) { if (G_UNLIKELY(!entry_a || !entry_b)) { return; } if (entry_a->super.parent) { sort_entry_by_path_recursive(entry_a->super.parent, entry_b->super.parent, res); } if (*res != 0) { return; } *res = strverscmp(entry_a->super.name, entry_b->super.name); } int db_entry_compare_entries_by_size(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { const off_t size_a = db_entry_get_size(*a); const off_t size_b = db_entry_get_size(*b); return (size_a > size_b) ? 1 : -1; } static const char * get_file_type(FsearchDatabaseEntry *entry, GHashTable *file_type_table, GHashTable *entry_table) { const FsearchDatabaseEntryType type_a = db_entry_get_type(entry); const char *name = db_entry_get_name_raw_for_display(entry); g_autofree char *type = fsearch_file_utils_get_file_type_non_localized(name, type_a == DATABASE_ENTRY_TYPE_FOLDER ? TRUE : FALSE); char *cached_type = g_hash_table_lookup(file_type_table, type); if (!cached_type) { g_hash_table_add(file_type_table, type); cached_type = g_steal_pointer(&type); } g_hash_table_insert(entry_table, entry, cached_type); return cached_type; } int db_entry_compare_entries_by_type(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b, gpointer data) { FsearchDatabaseEntryCompareContext *comp_ctx = data; const char *file_type_a = g_hash_table_lookup(comp_ctx->entry_to_file_type_table, *a); const char *file_type_b = g_hash_table_lookup(comp_ctx->entry_to_file_type_table, *b); if (!file_type_a) { file_type_a = get_file_type(*a, comp_ctx->file_type_table, comp_ctx->entry_to_file_type_table); } if (!file_type_b) { file_type_b = get_file_type(*b, comp_ctx->file_type_table, comp_ctx->entry_to_file_type_table); } return strcmp(file_type_a, file_type_b); } int db_entry_compare_entries_by_modification_time(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { return ((*a)->mtime > (*b)->mtime) ? 1 : -1; } int db_entry_compare_entries_by_position(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { return 0; } int db_entry_compare_entries_by_path(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { FsearchDatabaseEntry *entry_a = *a; FsearchDatabaseEntry *entry_b = *b; const uint32_t a_depth = db_entry_get_depth(entry_a); const uint32_t b_depth = db_entry_get_depth(entry_b); int res = 0; if (a_depth == b_depth) { sort_entry_by_path_recursive(entry_a->parent, entry_b->parent, &res); return res == 0 ? db_entry_compare_entries_by_name(a, b) : res; } else if (a_depth > b_depth) { const uint32_t diff = a_depth - b_depth; FsearchDatabaseEntryFolder *parent_a = db_entry_get_parent_nth(entry_a->parent, diff); sort_entry_by_path_recursive(parent_a, entry_b->parent, &res); return res == 0 ? 1 : res; } else { const uint32_t diff = b_depth - a_depth; FsearchDatabaseEntryFolder *parent_b = db_entry_get_parent_nth(entry_b->parent, diff); sort_entry_by_path_recursive(entry_a->parent, parent_b, &res); return res == 0 ? -1 : res; } } static void db_entry_update_folder_size(FsearchDatabaseEntryFolder *folder, off_t size) { if (!folder) { return; } folder->super.size += size; db_entry_update_folder_size(folder->super.parent, size); } int db_entry_compare_entries_by_extension(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { const char *ext_a = db_entry_get_extension(*a); const char *ext_b = db_entry_get_extension(*b); int res = strcmp(ext_a ? ext_a : "", ext_b ? ext_b : ""); if (res == 0) { return db_entry_compare_entries_by_name(a, b); } return res; } int db_entry_compare_entries_by_name(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b) { if (G_UNLIKELY(*a == NULL || *b == NULL)) { return 0; } const char *name_a = (*a)->name; const char *name_b = (*b)->name; return strverscmp(name_a ? name_a : "", name_b ? name_b : ""); } void db_entry_set_mtime(FsearchDatabaseEntry *entry, int64_t mtime) { entry->mtime = mtime; } void db_entry_set_size(FsearchDatabaseEntry *entry, off_t size) { entry->size = size; } void db_entry_set_name(FsearchDatabaseEntry *entry, const char *name) { if (entry->name) { free(entry->name); } entry->name = strdup(name ? name : ""); } void db_entry_set_parent(FsearchDatabaseEntry *entry, FsearchDatabaseEntryFolder *parent) { entry->parent = parent; if (parent) { g_assert(parent->super.type == DATABASE_ENTRY_TYPE_FOLDER); if (entry->type == DATABASE_ENTRY_TYPE_FOLDER) { parent->num_folders++; } else if (entry->type == DATABASE_ENTRY_TYPE_FILE) { parent->num_files++; } } } void db_entry_set_type(FsearchDatabaseEntry *entry, FsearchDatabaseEntryType type) { entry->type = type; } void db_entry_set_idx(FsearchDatabaseEntry *entry, uint32_t idx) { entry->idx = idx; } void db_entry_set_mark(FsearchDatabaseEntry *entry, uint8_t mark) { entry->mark = mark; } void db_entry_update_parent_size(FsearchDatabaseEntry *entry) { db_entry_update_folder_size(entry->parent, entry->size); } fsearch-0.2.3/src/fsearch_database_entry.h000066400000000000000000000065211446344336300205650ustar00rootroot00000000000000#pragma once #include #include #include typedef enum { DATABASE_ENTRY_TYPE_NONE, DATABASE_ENTRY_TYPE_FOLDER, DATABASE_ENTRY_TYPE_FILE, NUM_DATABASE_ENTRY_TYPES, } FsearchDatabaseEntryType; typedef struct FsearchDatabaseEntry FsearchDatabaseEntry; typedef struct FsearchDatabaseEntryFile FsearchDatabaseEntryFile; typedef struct FsearchDatabaseEntryFolder FsearchDatabaseEntryFolder; typedef struct FsearchDatabaseEntryCompareContext { GHashTable *file_type_table; GHashTable *entry_to_file_type_table; } FsearchDatabaseEntryCompareContext; bool db_entry_is_folder(FsearchDatabaseEntry *entry); bool db_entry_is_file(FsearchDatabaseEntry *entry); size_t db_entry_get_sizeof_folder_entry(); size_t db_entry_get_sizeof_file_entry(); uint32_t db_entry_folder_get_num_children(FsearchDatabaseEntryFolder *entry); uint32_t db_entry_folder_get_num_files(FsearchDatabaseEntryFolder *entry); uint32_t db_entry_folder_get_num_folders(FsearchDatabaseEntryFolder *entry); void db_entry_set_idx(FsearchDatabaseEntry *entry, uint32_t idx); void db_entry_set_mtime(FsearchDatabaseEntry *entry, int64_t mtime); void db_entry_set_size(FsearchDatabaseEntry *entry, off_t size); void db_entry_set_mark(FsearchDatabaseEntry *entry, uint8_t mark); void db_entry_set_name(FsearchDatabaseEntry *entry, const char *name); void db_entry_set_parent(FsearchDatabaseEntry *entry, FsearchDatabaseEntryFolder *parent); void db_entry_set_type(FsearchDatabaseEntry *entry, FsearchDatabaseEntryType type); void db_entry_update_parent_size(FsearchDatabaseEntry *entry); uint8_t db_entry_get_mark(FsearchDatabaseEntry *entry); uint32_t db_entry_get_idx(FsearchDatabaseEntry *entry); uint32_t db_entry_get_depth(FsearchDatabaseEntry *entry); GString * db_entry_get_path(FsearchDatabaseEntry *entry); GString * db_entry_get_path_full(FsearchDatabaseEntry *entry); void db_entry_append_path(FsearchDatabaseEntry *entry, GString *str); void db_entry_append_full_path(FsearchDatabaseEntry *entry, GString *str); int64_t db_entry_get_mtime(FsearchDatabaseEntry *entry); off_t db_entry_get_size(FsearchDatabaseEntry *entry); const char * db_entry_get_extension(FsearchDatabaseEntry *entry); GString * db_entry_get_name_for_display(FsearchDatabaseEntry *entry); const char * db_entry_get_name_raw_for_display(FsearchDatabaseEntry *entry); const char * db_entry_get_name_raw(FsearchDatabaseEntry *entry); FsearchDatabaseEntryFolder * db_entry_get_parent(FsearchDatabaseEntry *entry); FsearchDatabaseEntryType db_entry_get_type(FsearchDatabaseEntry *entry); void db_entry_append_content_type(FsearchDatabaseEntry *entry, GString *str); void db_entry_destroy(FsearchDatabaseEntry *entry); int db_entry_compare_entries_by_extension(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); int db_entry_compare_entries_by_size(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); int db_entry_compare_entries_by_type(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b, gpointer data); int db_entry_compare_entries_by_modification_time(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); int db_entry_compare_entries_by_position(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); int db_entry_compare_entries_by_path(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); int db_entry_compare_entries_by_name(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b); fsearch-0.2.3/src/fsearch_database_index.c000066400000000000000000000000441446344336300205200ustar00rootroot00000000000000#include "fsearch_database_index.h" fsearch-0.2.3/src/fsearch_database_index.h000066400000000000000000000021011446344336300205210ustar00rootroot00000000000000#pragma once #define DATABASE_INDEX_TYPE_NAME_STRING "Name" #define DATABASE_INDEX_TYPE_PATH_STRING "Path" #define DATABASE_INDEX_TYPE_SIZE_STRING "Size" #define DATABASE_INDEX_TYPE_MODIFICATION_TIME_STRING "Date Modified" #define DATABASE_INDEX_TYPE_FILETYPE_STRING "Type" #define DATABASE_INDEX_TYPE_EXTENSION_STRING "Extension" typedef enum { DATABASE_INDEX_FLAG_NAME = 1 << 0, DATABASE_INDEX_FLAG_PATH = 1 << 1, DATABASE_INDEX_FLAG_SIZE = 1 << 2, DATABASE_INDEX_FLAG_MODIFICATION_TIME = 1 << 3, DATABASE_INDEX_FLAG_ACCESS_TIME = 1 << 4, DATABASE_INDEX_FLAG_CREATION_TIME = 1 << 5, DATABASE_INDEX_FLAG_STATUS_CHANGE_TIME = 1 << 6, } FsearchDatabaseIndexFlags; typedef enum { DATABASE_INDEX_TYPE_NAME, DATABASE_INDEX_TYPE_PATH, DATABASE_INDEX_TYPE_SIZE, DATABASE_INDEX_TYPE_MODIFICATION_TIME, DATABASE_INDEX_TYPE_ACCESS_TIME, DATABASE_INDEX_TYPE_CREATION_TIME, DATABASE_INDEX_TYPE_STATUS_CHANGE_TIME, DATABASE_INDEX_TYPE_FILETYPE, DATABASE_INDEX_TYPE_EXTENSION, NUM_DATABASE_INDEX_TYPES, } FsearchDatabaseIndexType; fsearch-0.2.3/src/fsearch_database_search.c000066400000000000000000000226621446344336300206700ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define _GNU_SOURCE #define G_LOG_DOMAIN "fsearch-search" #include "fsearch_database_search.h" #include #include #include #include "fsearch_array.h" #include "fsearch_query_match_data.h" #define THRESHOLD_FOR_PARALLEL_SEARCH 1000 struct DatabaseSearchResult { DynamicArray *files; DynamicArray *folders; FsearchDatabase *db; FsearchDatabaseIndexType sort_type; volatile int ref_count; }; typedef struct DatabaseSearchWorkerContext { FsearchQuery *query; void **results; DynamicArray *entries; GCancellable *cancellable; int32_t thread_id; uint32_t num_results; uint32_t start_pos; uint32_t end_pos; } DatabaseSearchWorkerContext; static DatabaseSearchResult * db_search_result_new(void) { DatabaseSearchResult *result_ctx = calloc(1, sizeof(DatabaseSearchResult)); g_assert(result_ctx); result_ctx->ref_count = 1; return result_ctx; } static void db_search_result_free(DatabaseSearchResult *result) { g_clear_pointer(&result->folders, darray_unref); g_clear_pointer(&result->files, darray_unref); g_clear_pointer(&result->db, db_unref); g_clear_pointer(&result, free); } DatabaseSearchResult * db_search_result_ref(DatabaseSearchResult *result) { if (!result || g_atomic_int_get(&result->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&result->ref_count); return result; } void db_search_result_unref(DatabaseSearchResult *result) { if (!result || g_atomic_int_get(&result->ref_count) <= 0) { return; } if (g_atomic_int_dec_and_test(&result->ref_count)) { g_clear_pointer(&result, db_search_result_free); } } FsearchDatabaseIndexType db_search_result_get_sort_type(DatabaseSearchResult *result) { return result->sort_type; } FsearchDatabase * db_search_result_get_db(DatabaseSearchResult *result) { return db_ref(result->db); } DynamicArray * db_search_result_get_files(DatabaseSearchResult *result) { return darray_ref(result->files); } DynamicArray * db_search_result_get_folders(DatabaseSearchResult *result) { return darray_ref(result->folders); } static void db_search_worker_context_free(DatabaseSearchWorkerContext *ctx) { if (!ctx) { return; } g_clear_pointer(&ctx->results, free); g_clear_pointer(&ctx->entries, darray_unref); g_clear_pointer(&ctx, free); } static DatabaseSearchWorkerContext * db_search_worker_context_new(FsearchQuery *query, GCancellable *cancellable, DynamicArray *entries, int32_t thread_id, uint32_t start_pos, uint32_t end_pos) { DatabaseSearchWorkerContext *ctx = calloc(1, sizeof(DatabaseSearchWorkerContext)); g_assert(ctx); g_assert(end_pos >= start_pos); ctx->query = query; ctx->cancellable = cancellable; ctx->results = calloc(end_pos - start_pos + 1, sizeof(void *)); g_assert(ctx->results); ctx->num_results = 0; ctx->entries = darray_ref(entries); ctx->start_pos = start_pos; ctx->end_pos = end_pos; ctx->thread_id = thread_id; return ctx; } static void db_search_worker(void *data) { DatabaseSearchWorkerContext *ctx = data; g_assert(ctx); g_assert(ctx->results); FsearchQueryMatchData *match_data = fsearch_query_match_data_new(); fsearch_query_match_data_set_thread_id(match_data, ctx->thread_id); FsearchQuery *query = ctx->query; const uint32_t start = ctx->start_pos; const uint32_t end = ctx->end_pos; FsearchDatabaseEntry **results = (FsearchDatabaseEntry **)ctx->results; DynamicArray *entries = ctx->entries; if (!entries) { ctx->num_results = 0; g_debug("[db_search] entries empty"); return; } uint32_t num_results = 0; for (uint32_t i = start; i <= end; i++) { if (G_UNLIKELY(g_cancellable_is_cancelled(ctx->cancellable))) { break; } FsearchDatabaseEntry *entry = darray_get_item(entries, i); fsearch_query_match_data_set_entry(match_data, entry); if (fsearch_query_match(query, match_data)) { results[num_results++] = entry; } } g_clear_pointer(&match_data, fsearch_query_match_data_free); ctx->num_results = num_results; } static DynamicArray * db_search_entries(FsearchQuery *q, GCancellable *cancellable, DynamicArray *entries, FsearchThreadPoolFunc search_func) { const uint32_t num_entries = darray_get_num_items(entries); if (num_entries == 0) { return NULL; } const uint32_t num_threads = (num_entries < THRESHOLD_FOR_PARALLEL_SEARCH || q->wants_single_threaded_search) ? 1 : fsearch_thread_pool_get_num_threads(q->pool); const uint32_t num_items_per_thread = num_entries / num_threads; DatabaseSearchWorkerContext *thread_data[num_threads]; memset(thread_data, 0, sizeof(thread_data)); uint32_t start_pos = 0; uint32_t end_pos = num_items_per_thread - 1; if (!q->query_tree) { g_assert_not_reached(); } GList *threads = fsearch_thread_pool_get_threads(q->pool); for (uint32_t i = 0; i < num_threads; i++) { thread_data[i] = db_search_worker_context_new(q, cancellable, entries, (int32_t)i, start_pos, i == num_threads - 1 ? num_entries - 1 : end_pos); start_pos = end_pos + 1; end_pos += num_items_per_thread; fsearch_thread_pool_push_data(q->pool, threads, search_func, thread_data[i]); threads = threads->next; } threads = fsearch_thread_pool_get_threads(q->pool); while (threads) { fsearch_thread_pool_wait_for_thread(q->pool, threads); threads = threads->next; } if (g_cancellable_is_cancelled(cancellable)) { for (uint32_t i = 0; i < num_threads; i++) { g_clear_pointer(&thread_data[i], db_search_worker_context_free); } return NULL; } // get total number of entries found uint32_t num_results = 0; for (uint32_t i = 0; i < num_threads; ++i) { num_results += thread_data[i]->num_results; } DynamicArray *results = darray_new(num_results); for (uint32_t i = 0; i < num_threads; i++) { DatabaseSearchWorkerContext *ctx = thread_data[i]; if (!ctx) { break; } darray_add_items(results, (void **)ctx->results, ctx->num_results); g_clear_pointer(&ctx, db_search_worker_context_free); } return results; } DatabaseSearchResult * db_search_empty(FsearchQuery *q) { DatabaseSearchResult *result = db_search_result_new(); DynamicArray *files = NULL; DynamicArray *folders = NULL; FsearchDatabaseIndexType sort_type; db_lock(q->db); db_get_entries_sorted(q->db, q->sort_order, &sort_type, &folders, &files); result->folders = folders; result->files = files; result->db = db_ref(q->db); result->sort_type = sort_type; db_unlock(q->db); return result; } DatabaseSearchResult * db_search(FsearchQuery *q, GCancellable *cancellable) { DynamicArray *files_in = NULL; DynamicArray *folders_in = NULL; FsearchDatabaseIndexType sort_type; db_lock(q->db); db_get_entries_sorted(q->db, q->sort_order, &sort_type, &folders_in, &files_in); DynamicArray *files_res = NULL; DynamicArray *folders_res = NULL; const uint32_t num_folders = folders_in ? darray_get_num_items(folders_in) : 0; folders_res = num_folders > 0 ? db_search_entries(q, cancellable, folders_in, db_search_worker) : NULL; if (g_cancellable_is_cancelled(cancellable)) { goto search_was_cancelled; } const uint32_t num_files = files_in ? darray_get_num_items(files_in) : 0; files_res = num_files > 0 ? db_search_entries(q, cancellable, files_in, db_search_worker) : NULL; if (g_cancellable_is_cancelled(cancellable)) { goto search_was_cancelled; } g_clear_pointer(&folders_in, darray_unref); g_clear_pointer(&files_in, darray_unref); DatabaseSearchResult *result = db_search_result_new(); result->files = files_res; result->folders = folders_res; result->db = db_ref(q->db); result->sort_type = sort_type; db_unlock(q->db); return result; search_was_cancelled: g_clear_pointer(&folders_in, darray_unref); g_clear_pointer(&files_in, darray_unref); g_clear_pointer(&folders_res, darray_unref); g_clear_pointer(&files_res, darray_unref); db_unlock(q->db); return NULL; }fsearch-0.2.3/src/fsearch_database_search.h000066400000000000000000000027731446344336300206760ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include "fsearch_array.h" #include "fsearch_database_entry.h" #include "fsearch_filter.h" #include "fsearch_query.h" #include typedef struct DatabaseSearchResult DatabaseSearchResult; DynamicArray * db_search_result_get_files(DatabaseSearchResult *result); DynamicArray * db_search_result_get_folders(DatabaseSearchResult *result); FsearchDatabaseIndexType db_search_result_get_sort_type(DatabaseSearchResult *result); FsearchDatabase * db_search_result_get_db(DatabaseSearchResult *result); DatabaseSearchResult * db_search_result_ref(DatabaseSearchResult *result); void db_search_result_unref(DatabaseSearchResult *result); DatabaseSearchResult * db_search_empty(FsearchQuery *q); DatabaseSearchResult * db_search(FsearchQuery *q, GCancellable *cancellable); fsearch-0.2.3/src/fsearch_database_view.c000066400000000000000000000721061446344336300203730ustar00rootroot00000000000000#define _GNU_SOURCE #define G_LOG_DOMAIN "fsearch-database-view" #include "fsearch_database_view.h" #include "fsearch_database.h" #include "fsearch_database_search.h" #include "fsearch_selection.h" #include "fsearch_task.h" #include "fsearch_task_ids.h" #include // A DatabaseView provides a unique view into a registered database // It provides: // * filtering // * searching // * sorting // * selection handling struct FsearchDatabaseView { uint32_t id; FsearchDatabase *db; FsearchThreadPool *pool; FsearchQuery *query; DynamicArray *files; DynamicArray *folders; GHashTable *selection; FsearchDatabaseIndexType sort_order; GtkSortType sort_type; char *query_text; FsearchFilter *filter; FsearchFilterManager *filters; FsearchQueryFlags query_flags; uint32_t query_id; FsearchTaskQueue *task_queue; FsearchDatabaseViewNotifyFunc notify_func; gpointer notify_func_data; GMutex mutex; volatile int ref_count; }; typedef struct { FsearchDatabaseView *view; FsearchQuery *query; } FsearchSearchContext; static void db_view_search(FsearchDatabaseView *view, bool reset_selection); static void db_view_sort(FsearchDatabaseView *view, FsearchDatabaseIndexType sort_order, GtkSortType sort_type); // Implementation void db_view_free(FsearchDatabaseView *view) { if (!view) { return; } db_view_lock(view); g_clear_pointer(&view->filter, fsearch_filter_unref); g_clear_pointer(&view->filters, fsearch_filter_manager_free); g_clear_pointer(&view->query_text, free); g_clear_pointer(&view->task_queue, fsearch_task_queue_free); g_clear_pointer(&view->query, fsearch_query_unref); g_clear_pointer(&view->selection, fsearch_selection_free); db_view_unlock(view); db_view_unregister_database(view); g_mutex_clear(&view->mutex); g_clear_pointer(&view, free); } FsearchDatabaseView * db_view_ref(FsearchDatabaseView *view) { if (!view || g_atomic_int_get(&view->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&view->ref_count); return view; } void db_view_unref(FsearchDatabaseView *view) { if (!view || g_atomic_int_get(&view->ref_count) <= 0) { return; } if (g_atomic_int_dec_and_test(&view->ref_count)) { g_clear_pointer(&view, db_view_free); } } void db_view_unregister_database(FsearchDatabaseView *view) { g_assert(view); db_view_lock(view); if (view->selection) { fsearch_selection_unselect_all(view->selection); } g_clear_pointer(&view->files, darray_unref); g_clear_pointer(&view->folders, darray_unref); if (view->db) { db_unregister_view(view->db, view); g_clear_pointer(&view->db, db_unref); } view->pool = NULL; db_view_unlock(view); } static int32_t cmp_entries_by_name_and_path(FsearchDatabaseEntry **a, FsearchDatabaseEntry **b, void *data) { const int res = db_entry_compare_entries_by_name(a, b); if (res == 0) { return db_entry_compare_entries_by_path(a, b); } return res; } static void copy_selection(DynamicArray *old_entries, DynamicArray *new_entries, GHashTable *old_selection, GHashTable *new_selection) { if (!fsearch_selection_get_num_selected(old_selection) || darray_get_num_items(old_entries) == 0 || darray_get_num_items(new_entries) == 0) { goto out; } uint32_t num_selected = 0; const uint32_t num_new_entries = darray_get_num_items(new_entries); for (uint32_t i = 0; i < darray_get_num_items(old_entries); ++i) { FsearchDatabaseEntry *entry = darray_get_item(old_entries, i); if (fsearch_selection_is_selected(old_selection, entry)) { uint32_t found_idx = 0; // We have to perform a binary search to find the matching item in the new database. // That's not a huge issue for small selections, but when millions of items have been selected // in the old database, it can take quite a few seconds. // We should consider running this in a non-blocking way for the main thread. if (darray_binary_search_with_data(new_entries, entry, (DynamicArrayCompareDataFunc)cmp_entries_by_name_and_path, NULL, &found_idx)) { FsearchDatabaseEntry *entry_to_be_selected = darray_get_item(new_entries, found_idx); fsearch_selection_select(new_selection, entry_to_be_selected); num_selected++; if (num_selected >= num_new_entries) { // This should almost never happen, but we've selected every element in new_entries, // so we're done here. Even when there are still more selected items in old_entries. break; } } } } out: g_clear_pointer(&old_entries, darray_unref); g_clear_pointer(&new_entries, darray_unref); } static GHashTable * migrate_selection(FsearchDatabase *db_old, FsearchDatabase *db_new, GHashTable *old_selection) { db_lock(db_old); db_lock(db_new); GHashTable *new_selection = fsearch_selection_new(); copy_selection(db_get_files(db_old), db_get_files(db_new), old_selection, new_selection); copy_selection(db_get_folders(db_old), db_get_folders(db_new), old_selection, new_selection); db_unlock(db_old); db_unlock(db_new); return new_selection; } void db_view_register_database(FsearchDatabaseView *view, FsearchDatabase *db) { g_assert(view); g_assert(db); if (db == view->db) { return; } if (!db_register_view(db, view)) { return; } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); GHashTable *new_selection = NULL; if (view->db) { db_view_lock(view); new_selection = migrate_selection(view->db, db, view->selection); db_view_unlock(view); g_debug("[db_view_register_database] old_selection_count: %d", fsearch_selection_get_num_selected(view->selection)); g_debug("[db_view_register_database] new_selection_count: %d", fsearch_selection_get_num_selected(new_selection)); } const double seconds = g_timer_elapsed(timer, NULL); g_timer_reset(timer); g_debug("[db_view_register_database] migrated selection in %f seconds", seconds); db_view_unregister_database(view); db_view_lock(view); view->db = db_ref(db); if (new_selection) { g_clear_pointer(&view->selection, fsearch_selection_free); view->selection = new_selection; } view->pool = db_get_thread_pool(db); view->files = db_get_files(db); view->folders = db_get_folders(db); db_view_search(view, false); db_view_sort(view, view->sort_order, view->sort_type); db_view_unlock(view); } FsearchDatabaseView * db_view_new(const char *query_text, FsearchQueryFlags flags, FsearchFilter *filter, FsearchFilterManager *filters, FsearchDatabaseIndexType sort_order, GtkSortType sort_type, FsearchDatabaseViewNotifyFunc notify_func, gpointer notify_func_data) { FsearchDatabaseView *view = calloc(1, sizeof(struct FsearchDatabaseView)); g_assert(view); view->task_queue = fsearch_task_queue_new("fsearch_db_task_queue"); view->selection = fsearch_selection_new(); view->query_text = strdup(query_text ? query_text : ""); view->query_flags = flags; view->filter = fsearch_filter_ref(filter); view->filters = fsearch_filter_manager_copy(filters); view->sort_order = sort_order; view->sort_type = sort_type; view->notify_func = notify_func; view->notify_func_data = notify_func_data; view->ref_count = 1; static int id = 0; view->id = id++; g_mutex_init(&view->mutex); return view; } static void db_view_search_task_cancelled(gpointer data) { FsearchSearchContext *ctx = data; if (ctx->view->notify_func) { ctx->view->notify_func(ctx->view, DATABASE_VIEW_NOTIFY_SEARCH_FINISHED, ctx->view->notify_func_data); } g_clear_pointer(&ctx->view, db_view_unref); g_clear_pointer(&ctx->query, fsearch_query_unref); g_clear_pointer(&ctx, free); } static void db_view_search_task_finished(gpointer result, gpointer data) { FsearchSearchContext *ctx = data; db_view_lock(ctx->view); g_clear_pointer(&ctx->view->query, fsearch_query_unref); ctx->view->query = g_steal_pointer(&ctx->query); if (result) { DatabaseSearchResult *res = result; FsearchDatabase *db = db_search_result_get_db(res); if (ctx->view->db == db) { if (ctx->view->selection && ctx->view->query->reset_selection) { fsearch_selection_unselect_all(ctx->view->selection); } g_clear_pointer(&ctx->view->files, darray_unref); ctx->view->files = db_search_result_get_files(res); g_clear_pointer(&ctx->view->folders, darray_unref); ctx->view->folders = db_search_result_get_folders(res); ctx->view->sort_order = db_search_result_get_sort_type(res); } g_clear_pointer(&db, db_unref); g_clear_pointer(&res, db_search_result_unref); } db_view_unlock(ctx->view); if (ctx->view->notify_func) { ctx->view->notify_func(ctx->view, DATABASE_VIEW_NOTIFY_SEARCH_FINISHED, ctx->view->notify_func_data); ctx->view->notify_func(ctx->view, DATABASE_VIEW_NOTIFY_CONTENT_CHANGED, ctx->view->notify_func_data); ctx->view->notify_func(ctx->view, DATABASE_VIEW_NOTIFY_SELECTION_CHANGED, ctx->view->notify_func_data); } g_clear_pointer(&ctx->view, db_view_unref); g_clear_pointer(&ctx, free); } typedef struct { FsearchDatabaseView *view; FsearchDatabaseIndexType sort_order; GtkSortType sort_type; } FsearchSortContext; static void sort_array(DynamicArray *array, DynamicArrayCompareDataFunc sort_func, GCancellable *cancellable, bool parallel_sort, void *data) { if (!array) { return; } if (parallel_sort) { darray_sort_multi_threaded(array, sort_func, cancellable, data); } else { darray_sort(array, sort_func, cancellable, data); } } static DynamicArrayCompareDataFunc get_sort_func(FsearchDatabaseIndexType sort_order) { DynamicArrayCompareDataFunc func = NULL; switch (sort_order) { case DATABASE_INDEX_TYPE_NAME: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_name; break; case DATABASE_INDEX_TYPE_PATH: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_path; break; case DATABASE_INDEX_TYPE_SIZE: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_size; break; case DATABASE_INDEX_TYPE_EXTENSION: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_extension; break; case DATABASE_INDEX_TYPE_FILETYPE: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_type; break; case DATABASE_INDEX_TYPE_MODIFICATION_TIME: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_modification_time; break; default: func = (DynamicArrayCompareDataFunc)db_entry_compare_entries_by_position; } return func; } static DynamicArray * get_entries_sorted_from_reference_list(DynamicArray *old_list, DynamicArray *sorted_reference_list) { const uint32_t num_items = darray_get_num_items(old_list); DynamicArray *new = darray_new(num_items); for (uint32_t i = 0; i < num_items; ++i) { FsearchDatabaseEntry *entry = darray_get_item(old_list, i); db_entry_set_mark(entry, 1); } uint32_t num_marked_found = 0; const uint32_t num_items_in_sorted_reference_list = darray_get_num_items(sorted_reference_list); for (uint32_t i = 0; i < num_items_in_sorted_reference_list && num_marked_found < num_items; ++i) { FsearchDatabaseEntry *entry = darray_get_item(sorted_reference_list, i); if (db_entry_get_mark(entry)) { db_entry_set_mark(entry, 0); darray_add_item(new, entry); num_marked_found++; } } return new; } static bool sort_order_affects_folders(FsearchDatabaseIndexType sort_order) { if (sort_order == DATABASE_INDEX_TYPE_EXTENSION || sort_order == DATABASE_INDEX_TYPE_FILETYPE) { // Folders are stored in a different array than files, so they all have the same sort_type and extension (none), // therefore we don't need to sort them in such cases. return false; } return true; } static gpointer db_view_sort_task(gpointer data, GCancellable *cancellable) { FsearchSortContext *ctx = data; FsearchDatabaseView *view = ctx->view; if (!view->db) { return NULL; } DynamicArray *files = NULL; DynamicArray *folders = NULL; if (view->notify_func) { view->notify_func(view, DATABASE_VIEW_NOTIFY_SORT_STARTED, view->notify_func_data); } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); db_view_lock(view); db_lock(view->db); if (view->sort_order == ctx->sort_order) { // Sort order didn't change, use the old results files = darray_ref(view->files); folders = darray_ref(view->folders); goto out; } if (db_has_entries_sorted_by_type(view->db, ctx->sort_order)) { if (!view->query || fsearch_query_matches_everything(view->query)) { // We're matching everything, and we have the entries already sorted in our index. // So we can just return references to the sorted indices. files = db_get_files_sorted(view->db, ctx->sort_order); folders = db_get_folders_sorted(view->db, ctx->sort_order); } else { // Another fast path. First we mark all entries we have currently in the view, then we walk the sorted // index in order and add all marked entries to a new array. DynamicArray *sorted_folders = db_get_folders_sorted(view->db, ctx->sort_order); DynamicArray *sorted_files = db_get_files_sorted(view->db, ctx->sort_order); folders = get_entries_sorted_from_reference_list(view->folders, sorted_folders); files = get_entries_sorted_from_reference_list(view->files, sorted_files); g_clear_pointer(&sorted_folders, darray_unref); g_clear_pointer(&sorted_files, darray_unref); } goto out; } else { files = darray_copy(view->files); folders = darray_copy(view->folders); } DynamicArrayCompareDataFunc func = get_sort_func(ctx->sort_order); bool parallel_sort = true; FsearchDatabaseEntryCompareContext *comp_ctx = NULL; if (ctx->sort_order == DATABASE_INDEX_TYPE_FILETYPE) { // Sorting by type can be really slow, because it accesses the filesystem to determine the type of files // To mitigate that issue to a certain degree we cache the filetype for each file // To avoid duplicating the filetype in memory for each file, we also store each filetype only once in // a separate hash table. // We also disable parallel sorting. comp_ctx = calloc(1, sizeof(FsearchDatabaseEntryCompareContext)); comp_ctx->file_type_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); comp_ctx->entry_to_file_type_table = g_hash_table_new(NULL, NULL); parallel_sort = false; } g_debug("[sort] started: %d", ctx->sort_order); db_view_unlock(view); if (sort_order_affects_folders(ctx->sort_order)) { sort_array(folders, func, cancellable, parallel_sort, comp_ctx); } sort_array(files, func, cancellable, parallel_sort, comp_ctx); db_view_lock(view); if (comp_ctx) { g_clear_pointer(&comp_ctx->entry_to_file_type_table, g_hash_table_unref); g_clear_pointer(&comp_ctx->file_type_table, g_hash_table_unref); g_clear_pointer(&comp_ctx, free); } out: g_timer_stop(timer); const double seconds = g_timer_elapsed(timer, NULL); if (!g_cancellable_is_cancelled(cancellable)) { g_clear_pointer(&view->folders, darray_unref); g_clear_pointer(&view->files, darray_unref); view->folders = g_steal_pointer(&folders); view->files = g_steal_pointer(&files); view->sort_order = ctx->sort_order; view->sort_type = ctx->sort_type; g_debug("[sort] finished in %2.fms", seconds * 1000); } else { g_clear_pointer(&folders, darray_unref); g_clear_pointer(&files, darray_unref); g_debug("[sort] cancelled after %2.fms", seconds * 1000); } db_unlock(view->db); db_view_unlock(view); if (view->notify_func) { view->notify_func(view, DATABASE_VIEW_NOTIFY_SORT_FINISHED, view->notify_func_data); } return NULL; } static void db_view_sort_task_cancelled(gpointer data) { FsearchSortContext *ctx = data; g_clear_pointer(&ctx, free); } static void db_view_sort_task_finished(gpointer result, gpointer data) { db_view_sort_task_cancelled(data); } static void db_view_sort(FsearchDatabaseView *view, FsearchDatabaseIndexType sort_order, GtkSortType sort_type) { FsearchSortContext *ctx = calloc(1, sizeof(FsearchSortContext)); g_assert(ctx); ctx->view = view; ctx->sort_order = sort_order; ctx->sort_type = sort_type; fsearch_task_queue(view->task_queue, FSEARCH_TASK_ID_SORT, db_view_sort_task, db_view_sort_task_finished, db_view_sort_task_cancelled, FSEARCH_TASK_CLEAR_SAME_ID, g_steal_pointer(&ctx)); } static gpointer db_view_search_task(gpointer data, GCancellable *cancellable) { FsearchSearchContext *ctx = data; if (ctx->view->notify_func) { ctx->view->notify_func(ctx->view, DATABASE_VIEW_NOTIFY_SEARCH_STARTED, ctx->view->notify_func_data); } g_autoptr(GTimer) timer = g_timer_new(); g_timer_start(timer); DatabaseSearchResult *result = NULL; if (fsearch_query_matches_everything(ctx->query)) { result = db_search_empty(ctx->query); } else { result = db_search(ctx->query, cancellable); } const char *debug_message = NULL; const double seconds = g_timer_elapsed(timer, NULL); if (!g_cancellable_is_cancelled(cancellable)) { debug_message = "[%s] finished in %.2f ms"; } else { debug_message = "[%s] aborted after %.2f ms"; } g_timer_stop(timer); g_debug(debug_message, ctx->query->query_id, seconds * 1000); return result; } static void db_view_search(FsearchDatabaseView *view, bool reset_selection) { if (!view->db || !view->pool) { return; } FsearchSearchContext *ctx = calloc(1, sizeof(FsearchSearchContext)); g_assert(ctx); ctx->view = db_view_ref(view); g_autoptr(GString) query_id = g_string_new(NULL); g_string_printf(query_id, "query:%02d.%04d", view->id, view->query_id++); ctx->query = fsearch_query_new(view->query_text, view->db, view->sort_order, view->filter, view->filters, view->pool, view->query_flags, query_id->str, reset_selection); g_assert(ctx->query); fsearch_task_queue(view->task_queue, FSEARCH_TASK_ID_SEARCH, db_view_search_task, db_view_search_task_finished, db_view_search_task_cancelled, FSEARCH_TASK_CLEAR_SAME_ID, g_steal_pointer(&ctx)); } void db_view_set_filters(FsearchDatabaseView *view, FsearchFilterManager *filters) { if (!view) { return; } db_view_lock(view); g_clear_pointer(&view->filters, fsearch_filter_manager_free); view->filters = fsearch_filter_manager_copy(filters); db_view_search(view, true); db_view_unlock(view); } void db_view_set_filter(FsearchDatabaseView *view, FsearchFilter *filter) { if (!view) { return; } db_view_lock(view); g_clear_pointer(&view->filter, fsearch_filter_unref); view->filter = fsearch_filter_ref(filter); db_view_search(view, true); db_view_unlock(view); } void db_view_cancel_current_task(FsearchDatabaseView *view) { if (!view) { return; } fsearch_task_queue_cancel_current(view->task_queue); } FsearchQuery * db_view_get_query(FsearchDatabaseView *view) { return fsearch_query_ref(view->query); } FsearchQueryFlags db_view_get_query_flags(FsearchDatabaseView *view) { return view->query_flags; } void db_view_set_query_flags(FsearchDatabaseView *view, FsearchQueryFlags query_flags) { if (!view) { return; } db_view_lock(view); view->query_flags = query_flags; db_view_search(view, true); db_view_unlock(view); } void db_view_set_query_text(FsearchDatabaseView *view, const char *query_text) { if (!view) { return; } db_view_lock(view); g_clear_pointer(&view->query_text, free); view->query_text = strdup(query_text ? query_text : ""); db_view_search(view, true); db_view_unlock(view); } void db_view_set_sort_order(FsearchDatabaseView *view, FsearchDatabaseIndexType sort_order, GtkSortType sort_type) { if (!view) { return; } db_view_lock(view); if (view->sort_order != sort_order || view->sort_type != sort_type) { db_view_sort(view, sort_order, sort_type); } db_view_unlock(view); } uint32_t db_view_get_num_folders(FsearchDatabaseView *view) { g_assert(view); return view->folders ? darray_get_num_items(view->folders) : 0; } uint32_t db_view_get_num_files(FsearchDatabaseView *view) { g_assert(view); return view->files ? darray_get_num_items(view->files) : 0; } uint32_t db_view_get_num_entries(FsearchDatabaseView *view) { g_assert(view); return db_view_get_num_folders(view) + db_view_get_num_files(view); } GtkSortType db_view_get_sort_type(FsearchDatabaseView *view) { g_assert(view); return view->sort_type; } FsearchDatabaseIndexType db_view_get_sort_order(FsearchDatabaseView *view) { g_assert(view); return view->sort_order; } static FsearchDatabaseEntry * db_view_get_entry_for_idx(FsearchDatabaseView *view, uint32_t idx) { const uint32_t num_folders = darray_get_num_items(view->folders); if (idx < num_folders) { return darray_get_item(view->folders, idx); } idx -= num_folders; const uint32_t num_files = darray_get_num_items(view->files); if (idx < num_files) { return darray_get_item(view->files, idx); } return NULL; } GString * db_view_entry_get_path_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); GString *res = NULL; FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (entry) { res = db_entry_get_path(entry); } return res; } GString * db_view_entry_get_path_full_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? db_entry_get_path_full(entry) : NULL; } void db_view_entry_append_path_for_idx(FsearchDatabaseView *view, uint32_t idx, GString *str) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (entry) { db_entry_append_path(entry, str); } } int64_t db_view_entry_get_mtime_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? db_entry_get_mtime(entry) : 0; } off_t db_view_entry_get_size_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? db_entry_get_size(entry) : 0; } char * db_view_entry_get_extension_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (!entry) { return NULL; } const char *ext = db_entry_get_extension(entry); return g_strdup(ext ? ext : ""); } GString * db_view_entry_get_name_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? g_string_new(db_entry_get_name_raw_for_display(entry)) : NULL; } FsearchDatabaseEntry * db_view_entry_get_for_idx(FsearchDatabaseView *view, uint32_t idx) { return db_view_get_entry_for_idx(view, idx); } GString * db_view_entry_get_name_raw_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? g_string_new(db_entry_get_name_raw(entry)) : NULL; } int32_t db_view_entry_get_parent_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (!entry) { return -1; } FsearchDatabaseEntryFolder *folder = db_entry_get_parent(entry); return folder ? (int32_t)db_entry_get_idx((FsearchDatabaseEntry *)folder) : -1; } FsearchDatabaseEntryType db_view_entry_get_type_for_idx(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); return entry ? db_entry_get_type(entry) : DATABASE_ENTRY_TYPE_NONE; } static void notify_selection_changed(FsearchDatabaseView *view) { if (view->notify_func) { view->notify_func(view, DATABASE_VIEW_NOTIFY_SELECTION_CHANGED, view->notify_func_data); } } void db_view_select_toggle(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); db_view_lock(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (entry) { fsearch_selection_select_toggle(view->selection, entry); } db_view_unlock(view); notify_selection_changed(view); } void db_view_select(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); db_view_lock(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (entry) { fsearch_selection_select(view->selection, entry); } db_view_unlock(view); notify_selection_changed(view); } bool db_view_is_selected(FsearchDatabaseView *view, uint32_t idx) { g_assert(view); bool is_selected = false; db_view_lock(view); FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, idx); if (entry) { is_selected = fsearch_selection_is_selected(view->selection, entry); } db_view_unlock(view); return is_selected; } void db_view_toggle_range(FsearchDatabaseView *view, uint32_t start_idx, uint32_t end_idx) { g_assert(view); db_view_lock(view); for (uint32_t i = start_idx; i <= end_idx; i++) { FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, i); if (entry) { fsearch_selection_select_toggle(view->selection, entry); } } db_view_unlock(view); notify_selection_changed(view); } void db_view_select_range(FsearchDatabaseView *view, uint32_t start_idx, uint32_t end_idx) { g_assert(view); db_view_lock(view); for (uint32_t i = start_idx; i <= end_idx; i++) { FsearchDatabaseEntry *entry = db_view_get_entry_for_idx(view, i); if (entry) { fsearch_selection_select(view->selection, entry); } } db_view_unlock(view); notify_selection_changed(view); } void db_view_select_all(FsearchDatabaseView *view) { g_assert(view); db_view_lock(view); fsearch_selection_select_all(view->selection, view->folders); fsearch_selection_select_all(view->selection, view->files); db_view_unlock(view); notify_selection_changed(view); } void db_view_unselect_all(FsearchDatabaseView *view) { g_assert(view); db_view_lock(view); fsearch_selection_unselect_all(view->selection); db_view_unlock(view); notify_selection_changed(view); } void db_view_invert_selection(FsearchDatabaseView *view) { g_assert(view); db_view_lock(view); fsearch_selection_invert(view->selection, view->folders); fsearch_selection_invert(view->selection, view->files); db_view_unlock(view); notify_selection_changed(view); } uint32_t db_view_get_num_selected(FsearchDatabaseView *view) { g_assert(view); db_view_lock(view); const uint32_t num_selected = fsearch_selection_get_num_selected(view->selection); db_view_unlock(view); return num_selected; } void db_view_selection_for_each(FsearchDatabaseView *view, GHFunc func, gpointer user_data) { g_assert(view); db_view_lock(view); g_hash_table_foreach(view->selection, func, user_data); db_view_unlock(view); } void db_view_unlock(FsearchDatabaseView *view) { g_mutex_unlock(&view->mutex); } void db_view_lock(FsearchDatabaseView *view) { g_mutex_lock(&view->mutex); } fsearch-0.2.3/src/fsearch_database_view.h000066400000000000000000000101731446344336300203740ustar00rootroot00000000000000#pragma once #include "fsearch_database.h" #include "fsearch_database_entry.h" #include "fsearch_filter_manager.h" #include "fsearch_query.h" #include "fsearch_query_flags.h" typedef enum { DATABASE_VIEW_NOTIFY_CONTENT_CHANGED, DATABASE_VIEW_NOTIFY_SELECTION_CHANGED, DATABASE_VIEW_NOTIFY_SEARCH_STARTED, DATABASE_VIEW_NOTIFY_SEARCH_FINISHED, DATABASE_VIEW_NOTIFY_SORT_STARTED, DATABASE_VIEW_NOTIFY_SORT_FINISHED, } FsearchDatabaseViewNotify; typedef struct FsearchDatabaseView FsearchDatabaseView; typedef void (*FsearchDatabaseViewNotifyFunc)(FsearchDatabaseView *view, FsearchDatabaseViewNotify id, gpointer user_data); void db_view_unref(FsearchDatabaseView *view); FsearchDatabaseView * db_view_ref(FsearchDatabaseView *view); FsearchDatabaseView * db_view_new(const char *query_text, FsearchQueryFlags flags, FsearchFilter *filter, FsearchFilterManager *filters, FsearchDatabaseIndexType sort_order, GtkSortType sort_type, FsearchDatabaseViewNotifyFunc notify_func, gpointer notify_func_data); void db_view_cancel_current_task(FsearchDatabaseView *view); void db_view_set_thread_pool(FsearchDatabaseView *view, FsearchThreadPool *pool); void db_view_set_filter(FsearchDatabaseView *view, FsearchFilter *filter); void db_view_set_filters(FsearchDatabaseView *view, FsearchFilterManager *filters); void db_view_set_query_flags(FsearchDatabaseView *view, FsearchQueryFlags query_flags); void db_view_set_query_text(FsearchDatabaseView *view, const char *query_text); void db_view_set_sort_order(FsearchDatabaseView *view, FsearchDatabaseIndexType sort_order, GtkSortType sort_type); // NOTE: Getters are not thread save, they need to be wrapped with db_view_lock/db_view_unlock uint32_t db_view_get_num_folders(FsearchDatabaseView *view); uint32_t db_view_get_num_files(FsearchDatabaseView *view); uint32_t db_view_get_num_entries(FsearchDatabaseView *view); GtkSortType db_view_get_sort_type(FsearchDatabaseView *view); FsearchDatabaseIndexType db_view_get_sort_order(FsearchDatabaseView *view); GString * db_view_entry_get_path_for_idx(FsearchDatabaseView *view, uint32_t idx); GString * db_view_entry_get_path_full_for_idx(FsearchDatabaseView *view, uint32_t idx); void db_view_entry_append_path_for_idx(FsearchDatabaseView *view, uint32_t idx, GString *str); int64_t db_view_entry_get_mtime_for_idx(FsearchDatabaseView *view, uint32_t idx); off_t db_view_entry_get_size_for_idx(FsearchDatabaseView *view, uint32_t idx); char * db_view_entry_get_extension_for_idx(FsearchDatabaseView *view, uint32_t idx); GString * db_view_entry_get_name_for_idx(FsearchDatabaseView *view, uint32_t idx); FsearchDatabaseEntry * db_view_entry_get_for_idx(FsearchDatabaseView *view, uint32_t idx); GString * db_view_entry_get_name_raw_for_idx(FsearchDatabaseView *view, uint32_t idx); int32_t db_view_entry_get_parent_for_idx(FsearchDatabaseView *view, uint32_t idx); FsearchDatabaseEntryType db_view_entry_get_type_for_idx(FsearchDatabaseView *view, uint32_t idx); void db_view_register_database(FsearchDatabaseView *view, FsearchDatabase *db); void db_view_unregister_database(FsearchDatabaseView *view); FsearchQueryFlags db_view_get_query_flags(FsearchDatabaseView *view); FsearchQuery * db_view_get_query(FsearchDatabaseView *view); // NOTE: Selection handlers are thread safe void db_view_select_toggle(FsearchDatabaseView *view, uint32_t idx); void db_view_select(FsearchDatabaseView *view, uint32_t idx); bool db_view_is_selected(FsearchDatabaseView *view, uint32_t idx); void db_view_select_range(FsearchDatabaseView *view, uint32_t start_idx, uint32_t end_idx); void db_view_toggle_range(FsearchDatabaseView *view, uint32_t start_idx, uint32_t end_idx); void db_view_select_all(FsearchDatabaseView *view); void db_view_unselect_all(FsearchDatabaseView *view); void db_view_invert_selection(FsearchDatabaseView *view); uint32_t db_view_get_num_selected(FsearchDatabaseView *view); void db_view_selection_for_each(FsearchDatabaseView *view, GHFunc func, gpointer user_data); void db_view_unlock(FsearchDatabaseView *view); void db_view_lock(FsearchDatabaseView *view); fsearch-0.2.3/src/fsearch_exclude_path.c000066400000000000000000000014341446344336300202360ustar00rootroot00000000000000#define _GNU_SOURCE #include #include #include #include #include "fsearch_exclude_path.h" FsearchExcludePath * fsearch_exclude_path_new(const char *path, bool enabled) { FsearchExcludePath *fs_path = calloc(1, sizeof(FsearchExcludePath)); g_assert(fs_path); if (path) { fs_path->path = strdup(path); } fs_path->enabled = enabled; return fs_path; } FsearchExcludePath * fsearch_exclude_path_copy(FsearchExcludePath *src) { if (!src) { return NULL; } return fsearch_exclude_path_new(src->path, src->enabled); } void fsearch_exclude_path_free(FsearchExcludePath *fs_path) { if (!fs_path) { return; } g_clear_pointer(&fs_path->path, free); g_clear_pointer(&fs_path, free); } fsearch-0.2.3/src/fsearch_exclude_path.h000066400000000000000000000006041446344336300202410ustar00rootroot00000000000000#pragma once #include #include #include typedef struct _FsearchExcludePath { char *path; bool enabled; } FsearchExcludePath; FsearchExcludePath * fsearch_exclude_path_new(const char *path, bool enabled); FsearchExcludePath * fsearch_exclude_path_copy(FsearchExcludePath *src); void fsearch_exclude_path_free(FsearchExcludePath *fs_path); fsearch-0.2.3/src/fsearch_file_utils.c000066400000000000000000000546251446344336300177420ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-utils" #define _GNU_SOURCE #include "fsearch_file_utils.h" #include "fsearch_limits.h" #include "fsearch_string_utils.h" #include "fsearch_ui_utils.h" #include #include #include #include #include #include const char *data_folder_name = "fsearch"; static void launch_uris_ready(GObject *source_object, GAsyncResult *result, gpointer user_data); static void add_error_message_with_format(GString *error_messages, const char *description, const char *item_name, const char *reason) { if (!error_messages || !description || !item_name || !reason) { return; } g_autoptr(GString) error_message = g_string_new(NULL); g_string_printf(error_message, "%s \"%s\": %s", description, item_name, reason); g_string_append(error_messages, error_message->str); g_string_append_c(error_messages, '\n'); } static void add_error_message(GString *error_messages, const char *error_message) { if (!error_messages || !error_message) { return; } g_string_append(error_messages, error_message); g_string_append_c(error_messages, '\n'); } void fsearch_file_utils_init_data_dir_path(char *path, size_t len) { g_assert(path); g_assert(len >= 0); const gchar *xdg_data_dir = g_get_user_data_dir(); snprintf(path, len, "%s/%s", xdg_data_dir, data_folder_name); } bool fsearch_file_utils_create_dir(const char *path) { return !g_mkdir_with_parents(path, 0700); } bool fsearch_file_utils_is_desktop_file(const char *path) { const char *uri_extension = fsearch_string_get_extension(path); if (uri_extension && !strcmp(uri_extension, "desktop")) { return true; } return false; } static gboolean keyword_eval_cb(const GMatchInfo *info, GString *res, gpointer data) { g_autofree gchar *match = g_match_info_fetch(info, 0); if (!match) { return FALSE; } gchar *r = g_hash_table_lookup((GHashTable *)data, match); if (r) { g_string_append(res, r); } return FALSE; } static char * build_folder_open_cmd(const char *path, const char *path_full, const char *cmd) { if (!path || !path_full) { return NULL; } g_autofree char *path_quoted = g_shell_quote(path); g_autofree char *path_full_quoted = g_shell_quote(path_full); // The following code is mostly based on the example code found here: // https://developer.gnome.org/glib/stable/glib-Perl-compatible-regular-expressions.html#g-regex-replace-eval // // Create hash table which hold all valid keywords as keys // and their replacements as values // All valid keywords are: // - {path_raw} // The raw path of a file or folder. E.g. the path of /foo/bar is /foo // - {path_full_raw} // The raw full path of a file or folder. E.g. the full path of /foo/bar // is /foo/bar // - {path} and {path_full} // Those are the same as {path_raw} and {path_full_raw} but they get // properly escaped and quoted for the usage in shells. E.g. /foo/'bar // becomes '/foo/'\''bar' g_autoptr(GHashTable) keywords = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_insert(keywords, "{path_raw}", (char *)path); g_hash_table_insert(keywords, "{path_full_raw}", (char *)path_full); g_hash_table_insert(keywords, "{path}", path_quoted); g_hash_table_insert(keywords, "{path_full}", path_full_quoted); // Regular expression which matches multiple words (and underscores) // surrounded with {} g_autoptr(GRegex) reg = g_regex_new("{[\\w]+}", 0, 0, NULL); // Replace all the matched keywords return g_regex_replace_eval(reg, cmd, -1, 0, 0, keyword_eval_cb, keywords, NULL); } static bool file_remove_or_trash(const char *path, bool delete, GString *error_messages) { g_autoptr(GFile) file = g_file_new_for_path(path); if (!file) { add_error_message_with_format(error_messages, C_("Will be followed by the path of the file.", "Error when removing file"), path, _("Failed to get path")); return false; } g_autoptr(GError) error = NULL; if (delete) { g_file_delete(file, NULL, &error); } else { g_file_trash(file, NULL, &error); } if (error) { add_error_message(error_messages, error->message); return false; } return true; } bool fsearch_file_utils_remove(const char *path, GString *error_messages) { return file_remove_or_trash(path, true, error_messages); } bool fsearch_file_utils_trash(const char *path, GString *error_messages) { return file_remove_or_trash(path, false, error_messages); } // Structure to store files (`uris`) which should be opened with the application described by `app_info` typedef struct { GAppInfo *app_info; GList *uris; } FsearchFileUtilsLaunchUrisContext; typedef struct { GQueue *launch_uris_ctx_queue; GQueue *path_queue; GAppLaunchContext *app_launch_context; GString *error_messages; bool launch_desktop_files; FsearchFileUtilsOpenCallback callback; gpointer callback_data; } FsearchFileUtilsLaunchContext; static void launch_uris_context_free(FsearchFileUtilsLaunchUrisContext *ctx) { if (!ctx) { return; } g_clear_object(&ctx->app_info); g_list_free_full(g_steal_pointer(&ctx->uris), g_free); g_clear_pointer(&ctx, g_free); } static FsearchFileUtilsLaunchContext * launch_context_new(GAppLaunchContext *app_launch_context, bool launch_desktop_files, FsearchFileUtilsOpenCallback callback, gpointer callback_data) { g_return_val_if_fail(app_launch_context, NULL); g_return_val_if_fail(callback, NULL); FsearchFileUtilsLaunchContext *launch_ctx = g_new0(FsearchFileUtilsLaunchContext, 1); launch_ctx->app_launch_context = g_object_ref(app_launch_context); launch_ctx->launch_desktop_files = launch_desktop_files; launch_ctx->launch_uris_ctx_queue = g_queue_new(); launch_ctx->path_queue = g_queue_new(); launch_ctx->error_messages = g_string_new(NULL); launch_ctx->callback = callback; launch_ctx->callback_data = callback_data; return launch_ctx; } static void launch_context_free(FsearchFileUtilsLaunchContext *ctx) { if (!ctx) { return; } g_string_free(g_steal_pointer(&ctx->error_messages), TRUE); g_queue_free_full(g_steal_pointer(&ctx->launch_uris_ctx_queue), (GDestroyNotify)launch_uris_context_free); g_queue_free_full(g_steal_pointer(&ctx->path_queue), (GDestroyNotify)g_free); g_clear_object(&ctx->app_launch_context); g_clear_pointer(&ctx, g_free); } static void create_uris_launch_context(const char *content_type, GPtrArray *files, FsearchFileUtilsLaunchContext *ctx) { g_return_if_fail(content_type); g_return_if_fail(files); if (ctx->launch_desktop_files && g_strcmp0(content_type, "application/x-desktop") == 0) { // Desktop files which should launch their associated application need to be handled differently // The application information is not derived from the content type of the file, but from the desktop // file itself. So for each desktop file we get its own application information and don't pass any files // to it, because we only want to open the application. for (uint32_t i = 0; i < files->len; ++i) { GFile *file = g_ptr_array_index(files, i); g_autofree char *path = g_file_get_path(file); if (!path) { continue; } GDesktopAppInfo *desktop_app_info = g_desktop_app_info_new_from_filename(path); if (!desktop_app_info) { add_error_message_with_format(ctx->error_messages, C_("Will be followed by the file path.", "Error when getting information from file"), path, _("Failed to get application information")); continue; } FsearchFileUtilsLaunchUrisContext *launch_uris_ctx = g_new0(FsearchFileUtilsLaunchUrisContext, 1); launch_uris_ctx->app_info = G_APP_INFO(desktop_app_info); launch_uris_ctx->uris = NULL; g_queue_push_tail(ctx->launch_uris_ctx_queue, launch_uris_ctx); } return; } GAppInfo *app_info = g_app_info_get_default_for_type(content_type, FALSE); if (!app_info) { add_error_message_with_format(ctx->error_messages, C_("Will be followed by the content type string.", "Error when getting information for content type"), content_type, _("No default application registered")); return; } FsearchFileUtilsLaunchUrisContext *launch_uris_ctx = g_new0(FsearchFileUtilsLaunchUrisContext, 1); launch_uris_ctx->app_info = g_steal_pointer(&app_info); for (uint32_t i = 0; i < files->len; ++i) { GFile *file = g_ptr_array_index(files, i); char *uri = g_file_get_uri(file); if (uri) { launch_uris_ctx->uris = g_list_append(launch_uris_ctx->uris, uri); } } g_queue_push_tail(ctx->launch_uris_ctx_queue, launch_uris_ctx); } static void handle_callback(FsearchFileUtilsOpenCallback callback, gpointer callback_data, GString *error_message) { if (error_message->len == 0) { callback(TRUE, NULL, callback_data); } else { callback(FALSE, error_message->str, callback_data); } } static void handle_queued_uris(FsearchFileUtilsLaunchContext *launch_ctx) { if (g_queue_is_empty(launch_ctx->launch_uris_ctx_queue)) { // All files were handled, either successfully or with errors handle_callback(launch_ctx->callback, launch_ctx->callback_data, launch_ctx->error_messages); g_clear_pointer(&launch_ctx, launch_context_free); } else { FsearchFileUtilsLaunchUrisContext *uris_ctx = g_queue_pop_head(launch_ctx->launch_uris_ctx_queue); #if GLIB_CHECK_VERSION(2, 60, 0) g_app_info_launch_uris_async(uris_ctx->app_info, uris_ctx->uris, launch_ctx->app_launch_context, NULL, launch_uris_ready, launch_ctx); g_clear_pointer(&uris_ctx, launch_uris_context_free); #else g_autoptr(GError) error = NULL; g_app_info_launch_uris(uris_ctx->app_info, uris_ctx->uris, launch_ctx->app_launch_context, &error); if (error) { add_error_message(launch_ctx->error_messages, error->message); } g_clear_pointer(&uris_ctx, launch_uris_context_free); handle_queued_uris(launch_ctx); #endif } } #if GLIB_CHECK_VERSION(2, 60, 0) static void launch_uris_ready(GObject *source_object, GAsyncResult *result, gpointer user_data) { FsearchFileUtilsLaunchContext *ctx = user_data; g_autoptr(GError) error = NULL; g_app_info_launch_uris_finish(G_APP_INFO(source_object), result, &error); if (error) { add_error_message(ctx->error_messages, error->message); } handle_queued_uris(ctx); } #endif static void collect_for_content_type(GHashTable *content_types, const char *path_full, GString *error_messages) { g_return_if_fail(path_full); g_return_if_fail(content_types); g_autoptr(GError) error = NULL; g_autofree char *content_type = fsearch_file_utils_get_content_type(path_full, &error); if (!content_type) { add_error_message(error_messages, error->message); return; } if (g_hash_table_contains(content_types, content_type)) { // This content type was already added to the hash table. // Add this file to the corresponding array. GPtrArray *uris = g_hash_table_lookup(content_types, content_type); if (uris) { g_ptr_array_add(uris, g_file_new_for_path(path_full)); } } else { // This content type hasn't been handled before. // We create a new array to hold its files and add it to the hash table. GPtrArray *uris = g_ptr_array_new_with_free_func(g_object_unref); g_ptr_array_add(uris, g_file_new_for_path(path_full)); g_hash_table_insert(content_types, g_strdup(content_type), uris); } } static bool app_is_sandboxed(void) { static bool is_sandboxed = false; static gsize initialization_value = 0; if (g_once_init_enter(&initialization_value)) { g_auto(GStrv) env = g_get_environ(); if (g_file_test("/.flatpak-info", G_FILE_TEST_EXISTS)) { is_sandboxed = true; } else if (g_environ_getenv(env, "SNAP")) { is_sandboxed = true; } g_once_init_leave(&initialization_value, 1); } return is_sandboxed; } static void launch_default_for_uri_ready(GObject *source_object, GAsyncResult *result, gpointer user_data) { FsearchFileUtilsLaunchContext *launch_context = user_data; g_autoptr(GError) error = NULL; g_app_info_launch_default_for_uri_finish(result, &error); if (error) { add_error_message(launch_context->error_messages, error->message); } if (g_queue_is_empty(launch_context->path_queue)) { // All files have handled, either successfully or with errors handle_callback(launch_context->callback, launch_context->callback_data, launch_context->error_messages); g_clear_pointer(&launch_context, launch_context_free); } else { g_autofree char *uri = g_queue_pop_head(launch_context->path_queue); g_app_info_launch_default_for_uri_async(uri, launch_context->app_launch_context, NULL, launch_default_for_uri_ready, launch_context); } } static void launch_default_for_path(GList *paths, GAppLaunchContext *launch_context, FsearchFileUtilsOpenCallback callback, gpointer callback_data) { FsearchFileUtilsLaunchContext *open_default_ctx = launch_context_new(launch_context, false, callback, callback_data); for (GList *p = paths; p != NULL; p = p->next) { g_autoptr(GFile) file = g_file_new_for_path(p->data); char *uri = g_file_get_uri(file); if (uri) { g_queue_push_tail(open_default_ctx->path_queue, uri); } } g_autofree char *uri = g_queue_pop_head(open_default_ctx->path_queue); g_app_info_launch_default_for_uri_async(uri, launch_context, NULL, launch_default_for_uri_ready, g_steal_pointer(&open_default_ctx)); } void fsearch_file_utils_open_path_list(GList *paths, bool launch_desktop_files, GAppLaunchContext *app_launch_context, FsearchFileUtilsOpenCallback callback, gpointer callback_data) { g_return_if_fail(paths); if (app_is_sandboxed()) { g_debug("[open_path_list] FSearch is sandboxed. Ask the system to open the files for us."); return launch_default_for_path(paths, app_launch_context, callback, callback_data); } g_autoptr(GHashTable) content_types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_ptr_array_unref); g_autoptr(GString) error_messages = g_string_new(NULL); // Before opening any files, we first group them by their content type for (GList *p = paths; p != NULL; p = p->next) { char *path = p->data; collect_for_content_type(content_types, path, error_messages); } FsearchFileUtilsLaunchContext *launch_ctx = launch_context_new(app_launch_context, launch_desktop_files, callback, callback_data); if (error_messages->len > 0) { g_string_append(launch_ctx->error_messages, error_messages->str); } g_hash_table_foreach(content_types, (GHFunc)create_uris_launch_context, launch_ctx); if (!g_queue_is_empty(launch_ctx->launch_uris_ctx_queue)) { // This opens the uris asynchronously return handle_queued_uris(g_steal_pointer(&launch_ctx)); } // We still have to handle the callback in case the queue of uris was empty handle_callback(launch_ctx->callback, launch_ctx->callback_data, launch_ctx->error_messages); g_clear_pointer(&launch_ctx, launch_context_free); } static bool fsearch_file_utils_open_path_with_command(const char *path, const char *cmd, GString *error_message) { g_autoptr(GFile) file = g_file_new_for_path(path); g_autoptr(GFile) parent = g_file_get_parent(file); // If file has no parent it means it's the root directory. // We still want to open a folder, so we consider the root directory to be its own parent // and open it, instead of doing nothing or failing. g_autofree char *parent_path = g_file_get_path(parent ? parent : file); if (!parent_path) { add_error_message_with_format(error_message, C_("Will be followed by the path of the folder.", "Error when opening parent folder"), path, _("Failed to get parent path")); return false; } const char *error_description = C_("Will be followed by the path of the folder.", "Error while opening folder"); g_autofree char *cmd_res = build_folder_open_cmd(path, path, cmd); if (!cmd_res) { add_error_message_with_format(error_message, error_description, path, _("Failed to build open command")); return false; } g_autoptr(GError) error = NULL; if (!g_spawn_command_line_async(cmd_res, &error)) { add_error_message(error_message, error->message); return false; } return true; } bool fsearch_file_utils_open_path_list_with_command(GList *paths, const char *cmd, GString *error_message) { g_return_val_if_fail(cmd, false); g_return_val_if_fail(paths, false); for (GList *p = paths; p != NULL; p = p->next) { const char *path = p->data; fsearch_file_utils_open_path_with_command(path, cmd, error_message); } return true; } static gchar * get_content_type_description(const gchar *name) { if (!name) { return NULL; } g_autofree gchar *content_type = g_content_type_guess(name, NULL, 0, NULL); if (!content_type) { return NULL; } return g_content_type_get_description(content_type); } gchar * fsearch_file_utils_get_file_type_non_localized(const char *name, gboolean is_dir) { gchar *type = NULL; if (is_dir) { type = g_strdup("Folder"); } else { type = get_content_type_description(name); } if (type == NULL) { type = g_strdup("Unknown Type"); } return type; } gchar * fsearch_file_utils_get_file_type(const char *name, gboolean is_dir) { gchar *type = NULL; if (is_dir) { type = g_strdup(_("Folder")); } else { type = get_content_type_description(name); } if (type == NULL) { type = g_strdup(_("Unknown Type")); } return type; } #define DEFAULT_FILE_ICON_NAME "application-octet-stream" GIcon * fsearch_file_utils_get_desktop_file_icon(const char *path) { g_autoptr(GAppInfo) info = (GAppInfo *)g_desktop_app_info_new_from_filename(path); if (!info) { goto default_icon; } GIcon *icon = g_app_info_get_icon(info); if (!icon) { goto default_icon; } return g_object_ref(icon); default_icon: return g_themed_icon_new("application-x-executable"); } GIcon * fsearch_file_utils_guess_icon(const char *name, const char *path, bool is_dir) { if (is_dir) { return g_themed_icon_new("folder"); } if (fsearch_file_utils_is_desktop_file(name)) { return fsearch_file_utils_get_desktop_file_icon(path); } g_autofree gchar *content_type = g_content_type_guess(name, NULL, 0, NULL); if (!content_type) { return g_themed_icon_new(DEFAULT_FILE_ICON_NAME); } GIcon *icon = g_content_type_get_icon(content_type); return icon ? icon : g_themed_icon_new(DEFAULT_FILE_ICON_NAME); } GIcon * fsearch_file_utils_get_icon_for_path(const char *path) { g_autoptr(GFile) g_file = g_file_new_for_path(path); if (!g_file) { return g_themed_icon_new("edit-delete"); } g_autoptr(GFileInfo) file_info = g_file_query_info(g_file, "standard::icon", 0, NULL, NULL); if (!file_info) { return g_themed_icon_new("edit-delete"); } GIcon *icon = g_file_info_get_icon(file_info); return g_object_ref(icon); } char * fsearch_file_utils_get_size_formatted(off_t size, bool show_base_2_units) { if (show_base_2_units) { return g_format_size_full(size, G_FORMAT_SIZE_IEC_UNITS); } else { return g_format_size_full(size, G_FORMAT_SIZE_DEFAULT); } } char * fsearch_file_utils_get_content_type(const char *path, GError **error) { g_assert(path); g_autoptr(GFile) file = g_file_new_for_path(path); g_autoptr(GFileInfo) info = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, NULL, error); if (!info) { return NULL; } const char *content_type = g_file_info_get_content_type(info); return content_type ? g_strdup(content_type) : NULL; }fsearch-0.2.3/src/fsearch_file_utils.h000066400000000000000000000042541446344336300177400ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include typedef void (*FsearchFileUtilsOpenCallback)(gboolean result, const char *error_message, gpointer user_data); void fsearch_file_utils_init_data_dir_path(char *path, size_t len); bool fsearch_file_utils_create_dir(const char *path); bool fsearch_file_utils_trash(const char *path, GString *error_messages); bool fsearch_file_utils_remove(const char *path, GString *error_messages); void fsearch_file_utils_open_path_list(GList *paths, bool launch_desktop_files, GAppLaunchContext *app_launch_context, FsearchFileUtilsOpenCallback callback, gpointer callback_data); bool fsearch_file_utils_open_path_list_with_command(GList *paths, const char *cmd, GString *error_message); gchar * fsearch_file_utils_get_file_type(const gchar *name, gboolean is_dir); gchar * fsearch_file_utils_get_file_type_non_localized(const char *name, gboolean is_dir); GIcon * fsearch_file_utils_get_icon_for_path(const char *path); GIcon * fsearch_file_utils_guess_icon(const char *name, const char *path, bool is_dir); char * fsearch_file_utils_get_size_formatted(off_t size, bool show_base_2_units); bool fsearch_file_utils_is_desktop_file(const char *path); GIcon * fsearch_file_utils_get_desktop_file_icon(const char *path); char * fsearch_file_utils_get_content_type(const char *path, GError **error); fsearch-0.2.3/src/fsearch_filter.c000066400000000000000000000134431446344336300170610ustar00rootroot00000000000000#define _GNU_SOURCE #include "fsearch_filter.h" #include #include #include FsearchFilter * fsearch_filter_new(const char *name, const char *macro, const char *query, FsearchQueryFlags flags) { g_assert(name); FsearchFilter *filter = calloc(1, sizeof(FsearchFilter)); g_assert(filter); filter->name = strdup(name); filter->macro = strdup(macro ? macro : ""); filter->query = strdup(query ? query : ""); filter->flags = flags; filter->ref_count = 1; return filter; } bool fsearch_filter_cmp(FsearchFilter *filter_1, FsearchFilter *filter_2) { g_assert(filter_1); g_assert(filter_2); if (strcmp(filter_1->name, filter_2->name) != 0) { return false; } if (strcmp(filter_1->macro, filter_2->macro) != 0) { return false; } if (strcmp(filter_1->query, filter_2->query) != 0) { return false; } if (filter_1->flags != filter_2->flags) { return false; } return true; } FsearchFilter * fsearch_filter_copy(FsearchFilter *filter) { if (!filter) { return NULL; } return fsearch_filter_new(filter->name, filter->macro, filter->query, filter->flags); } static void fsearch_filter_free(FsearchFilter *filter) { g_clear_pointer(&filter->name, free); g_clear_pointer(&filter->macro, free); g_clear_pointer(&filter->query, free); g_clear_pointer(&filter, free); } FsearchFilter * fsearch_filter_ref(FsearchFilter *filter) { if (!filter || g_atomic_int_get(&filter->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&filter->ref_count); return filter; } void fsearch_filter_unref(FsearchFilter *filter) { if (!filter || g_atomic_int_get(&filter->ref_count) <= 0) { return; } if (g_atomic_int_dec_and_test(&filter->ref_count)) { g_clear_pointer(&filter, fsearch_filter_free); } } static const char *file_filter = "file:"; static const char *folder_filter = "folder:"; static const char *application_filter = "ext:desktop;DESKTOP"; static const char *document_filter = "ext:c;chm;cpp;csv;cxx;doc;docm;docx;dot;dotm;dotx;h;hpp;htm;html;hxx;ini;java;" "lua;mht;mhtml;ods;odt;odp;pdf;potx;potm;ppam;ppsm;ppsx;pps;ppt;pptm;pptx;rtf;" "sldm;sldx;thmx;txt;vsd;wpd;wps;wri;xlam;xls;xlsb;xlsm;xlsx;xltm;xltx;xml;C;CHM;" "CPP;CSV;CXX;DOC;DOCM;DOCX;DOT;DOTM;DOTX;H;HPP;HTM;HTML;HXX;INI;JAVA;LUA;MHT;" "MHTML;ODS;ODT;ODP;PDF;POTX;POTM;PPAM;PPSM;PPSX;PPS;PPT;PPTM;PPTX;RTF;SLDM;SLDX;" "THMX;TXT;VSD;WPD;WPS;WRI;XLAM;XLS;XLSB;XLSM;XLSX;XLTM;XLTX;XML"; static const char *audio_filter = "ext:aac;ac3;aif;aifc;aiff;au;cda;dts;fla;flac;it;m1a;m2a;m3u;m4a;mid;midi;mka;mod;" "mp2;mp3;mpa;ogg;opus;ra;rmi;spc;rmi;snd;umx;voc;wav;wma;xm;AAC;AC3;AIF;AIFC;AIFF;AU;" "CDA;DTS;FLA;FLAC;IT;M1A;M2A;M3U;M4A;MID;MIDI;MKA;MOD;MP2;MP3;MPA;OGG;OPUS;RA;RMI;" "SPC;RMI;SND;UMX;VOC;WAV;WMA;XM"; static const char *image_filter = "ext:ani;bmp;gif;ico;jpe;jpeg;jpg;pcx;png;psd;tga;tif;tiff;webp;wmf;ANI;BMP;GIF;ICO;" "JPE;JPEG;JPG;PCX;PNG;PSD;TGA;TIF;TIFF;WEBP;WMF"; static const char *video_filter = "ext:3g2;3gp;3gp2;3gpp;amr;amv;asf;avi;bdmv;bik;d2v;divx;drc;dsa;dsm;dss;dsv;evo;f4v;" "flc;fli;flic;flv;hdmov;ifo;ivf;m1v;m2p;m2t;m2ts;m2v;m4b;m4p;m4v;mkv;mp2v;mp4;mp4v;" "mpe;mpeg;mpg;mpls;mpv2;mpv4;mov;mts;ogm;ogv;pss;pva;qt;ram;ratdvd;rm;rmm;rmvb;roq;" "rpm;smil;smk;swf;tp;tpr;ts;vob;vp6;webm;wm;wmp;wmv;3G2;3GP;3GP2;3GPP;AMR;AMV;ASF;" "AVI;BDMV;BIK;D2V;DIVX;DRC;DSA;DSM;DSS;DSV;EVO;F4V;FLC;FLI;FLIC;FLV;HDMOV;IFO;IVF;" "M1V;M2P;M2T;M2TS;M2V;M4B;M4P;M4V;MKV;MP2V;MP4;MP4V;MPE;MPEG;MPG;MPLS;MPV2;MPV4;MOV;" "MTS;OGM;OGV;PSS;PVA;QT;RAM;RATDVD;RM;RMM;RMVB;ROQ;RPM;SMIL;SMK;SWF;TP;TPR;TS;VOB;" "VP6;WEBM;WM;WMP;WMV"; static const char *archive_filter = "ext:7z;ace;arj;bz2;cab;gz;gzip;jar;r00;r01;r02;r03;r04;r05;r06;r07;r08;r09;r10;" "r11;r12;r13;r14;r15;r16;r17;r18;r19;r20;r21;r22;r23;r24;r25;r26;r27;r28;r29;rar;" "tar;tgz;z;zip;7Z;ACE;ARJ;BZ2;CAB;GZ;GZIP;JAR;R00;R01;R02;R03;R04;R05;R06;R07;R08;" "R09;R10;R11;R12;R13;R14;R15;R16;R17;R18;R19;R20;R21;R22;R23;R24;R25;R26;R27;R28;" "R29;RAR;TAR;TGZ;Z;ZIP"; GList * fsearch_filter_get_default() { GList *filters = NULL; filters = g_list_append(filters, fsearch_filter_new(_("All"), NULL, NULL, 0)); filters = g_list_append(filters, fsearch_filter_new(_("Folders"), NULL, folder_filter, 0)); filters = g_list_append(filters, fsearch_filter_new(_("Files"), NULL, file_filter, 0)); filters = g_list_append(filters, fsearch_filter_new(_("Applications"), "app", application_filter, QUERY_FLAG_MATCH_CASE)); filters = g_list_append(filters, fsearch_filter_new(_("Archives"), "archive", archive_filter, QUERY_FLAG_MATCH_CASE)); filters = g_list_append(filters, fsearch_filter_new(_("Audio"), "audio", audio_filter, QUERY_FLAG_MATCH_CASE)); filters = g_list_append(filters, fsearch_filter_new(_("Documents"), "doc", document_filter, QUERY_FLAG_MATCH_CASE)); filters = g_list_append(filters, fsearch_filter_new(_("Pictures"), "pic", image_filter, QUERY_FLAG_MATCH_CASE)); filters = g_list_append(filters, fsearch_filter_new(_("Videos"), "video", video_filter, QUERY_FLAG_MATCH_CASE)); return filters; } fsearch-0.2.3/src/fsearch_filter.h000066400000000000000000000012111446344336300170540ustar00rootroot00000000000000#pragma once #include #include #include "fsearch_query_flags.h" typedef struct FsearchFilter { char *name; char *macro; char *query; FsearchQueryFlags flags; volatile int ref_count; } FsearchFilter; FsearchFilter * fsearch_filter_new(const char *name, const char *macro, const char *query, FsearchQueryFlags flags); FsearchFilter * fsearch_filter_ref(FsearchFilter *filter); bool fsearch_filter_cmp(FsearchFilter *filter_1, FsearchFilter *filter_2); FsearchFilter * fsearch_filter_copy(FsearchFilter *filter); void fsearch_filter_unref(FsearchFilter *filter); GList * fsearch_filter_get_default(); fsearch-0.2.3/src/fsearch_filter_editor.c000066400000000000000000000123301446344336300204210ustar00rootroot00000000000000#include "fsearch_filter_editor.h" #include #include #include "fsearch_string_utils.h" struct FsearchFilterEditor { FsearchFilter *filter; GtkBuilder *builder; GtkWidget *dialog; GtkWidget *ok_button; GtkEntry *name_entry; GtkEntry *macro_entry; GtkTextBuffer *query_text_buffer; GtkToggleButton *search_in_path; GtkToggleButton *enable_regex; GtkToggleButton *match_case; FsearchFilterEditorResponse *callback; gpointer data; }; static void fsearch_filter_editor_free(FsearchFilterEditor *editor) { g_clear_object(&editor->builder); g_clear_pointer(&editor->filter, fsearch_filter_unref); g_clear_pointer(&editor->dialog, gtk_widget_destroy); g_clear_pointer(&editor, free); } static void on_editor_ui_response(GtkDialog *dialog, GtkResponseType response, gpointer user_data) { FsearchFilterEditor *editor = user_data; char *name = NULL; char *query = NULL; char *macro = NULL; FsearchQueryFlags flags = 0; const char *name_str = gtk_entry_get_text(editor->name_entry); if (response == GTK_RESPONSE_OK && !fsearch_string_is_empty(name_str)) { name = g_strdup(name_str); macro = g_strdup(gtk_entry_get_text(editor->macro_entry)); GtkTextIter start, end; gtk_text_buffer_get_bounds(editor->query_text_buffer, &start, &end); query = gtk_text_buffer_get_text(editor->query_text_buffer, &start, &end, FALSE); const gboolean match_case = gtk_toggle_button_get_active(editor->match_case); const gboolean enable_regex = gtk_toggle_button_get_active(editor->enable_regex); const gboolean search_in_path = gtk_toggle_button_get_active(editor->search_in_path); if (match_case) { flags |= QUERY_FLAG_MATCH_CASE; } if (enable_regex) { flags |= QUERY_FLAG_REGEX; } if (search_in_path) { flags |= QUERY_FLAG_SEARCH_IN_PATH; } } if (editor->callback) { editor->callback(editor->filter, name, macro, query, flags, editor->data); } fsearch_filter_editor_free(editor); } static void on_macro_entry_changed(GtkEntry *entry, gpointer user_data) { FsearchFilterEditor *editor = user_data; if (!editor->ok_button) { return; } const char *macro_text = gtk_entry_get_text(entry); if (macro_text && strchr(macro_text, ':')) { gtk_widget_set_sensitive(editor->ok_button, FALSE); g_object_set(entry, "secondary-icon-name", "dialog-warning-symbolic", NULL); g_object_set(entry, "secondary-icon-tooltip-text", _("Macro names must not contain `:` characters."), NULL); } else if (!gtk_widget_get_sensitive(editor->ok_button)) { gtk_widget_set_sensitive(editor->ok_button, TRUE); g_object_set(entry, "secondary-icon-name", NULL, NULL); } } void fsearch_filter_editor_run(const char *title, GtkWindow *parent_window, FsearchFilter *filter, FsearchFilterEditorResponse callback, gpointer data) { FsearchFilterEditor *editor = calloc(1, sizeof(FsearchFilterEditor)); g_assert(editor); editor->filter = filter; editor->callback = callback; editor->data = data; editor->builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/fsearch_filter_editor.ui"); editor->dialog = GTK_WIDGET(gtk_builder_get_object(editor->builder, "FsearchFilterEditorWindow")); gtk_window_set_transient_for(GTK_WINDOW(editor->dialog), parent_window); gtk_dialog_add_button(GTK_DIALOG(editor->dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); editor->ok_button = gtk_dialog_add_button(GTK_DIALOG(editor->dialog), _("_OK"), GTK_RESPONSE_OK); g_signal_connect(editor->dialog, "response", G_CALLBACK(on_editor_ui_response), editor); editor->search_in_path = GTK_TOGGLE_BUTTON(gtk_builder_get_object(editor->builder, "filter_search_in_path")); editor->enable_regex = GTK_TOGGLE_BUTTON(gtk_builder_get_object(editor->builder, "filter_regex")); editor->match_case = GTK_TOGGLE_BUTTON(gtk_builder_get_object(editor->builder, "filter_match_case")); editor->name_entry = GTK_ENTRY(gtk_builder_get_object(editor->builder, "filter_name")); editor->macro_entry = GTK_ENTRY(gtk_builder_get_object(editor->builder, "filter_macro")); g_signal_connect(editor->macro_entry, "changed", G_CALLBACK(on_macro_entry_changed), editor); editor->query_text_buffer = GTK_TEXT_BUFFER(gtk_builder_get_object(editor->builder, "filter_query_buffer")); if (title) { gtk_window_set_title(GTK_WINDOW(editor->dialog), title); } if (filter) { gtk_entry_set_text(editor->name_entry, filter->name); gtk_entry_set_text(editor->macro_entry, filter->macro); gtk_text_buffer_set_text(editor->query_text_buffer, filter->query, -1); gtk_toggle_button_set_active(editor->search_in_path, filter->flags & QUERY_FLAG_SEARCH_IN_PATH ? TRUE : FALSE); gtk_toggle_button_set_active(editor->match_case, filter->flags & QUERY_FLAG_MATCH_CASE ? TRUE : FALSE); gtk_toggle_button_set_active(editor->enable_regex, filter->flags & QUERY_FLAG_REGEX ? TRUE : FALSE); } gtk_widget_show(editor->dialog); } fsearch-0.2.3/src/fsearch_filter_editor.h000066400000000000000000000007541446344336300204350ustar00rootroot00000000000000#pragma once #include #include "fsearch_filter.h" typedef struct FsearchFilterEditor FsearchFilterEditor; typedef void(FsearchFilterEditorResponse)(FsearchFilter *, char *, char *, char *, FsearchQueryFlags, gpointer); void fsearch_filter_editor_run(const char *title, GtkWindow *parent_window, FsearchFilter *filter, FsearchFilterEditorResponse callback, gpointer data); fsearch-0.2.3/src/fsearch_filter_editor.ui000066400000000000000000000213071446344336300206200ustar00rootroot00000000000000 600 400 False Edit filter True dialog False vertical 2 False end False False 0 True False 6 6 6 6 2 6 True False Name: 0 0 True True The unique name of this filter start True Unique filter name 1 0 Search in path True True False True 0 2 2 Enable regular expressions True True False True 0 4 2 Match case True True False True 0 3 2 True False True True 0 none True True in True True char 6 6 6 6 filter_query_buffer False True True False Query: 0 5 2 True False Macro: 0 1 True True The macro for this filter. A macro allows you to access this filter from the search entry by typing its text followed by ':' start True False alpha 1 1 True True 1 fsearch-0.2.3/src/fsearch_filter_manager.c000066400000000000000000000120621446344336300205470ustar00rootroot00000000000000#include "fsearch_filter_manager.h" #include #include struct FsearchFilterManager { GList *filters; }; void fsearch_filter_manager_free(FsearchFilterManager *manager) { if (!manager) { return; } g_list_free_full(g_steal_pointer(&manager->filters), (GDestroyNotify)fsearch_filter_unref); g_clear_pointer(&manager, free); } FsearchFilterManager * fsearch_filter_manager_new(void) { FsearchFilterManager *manager = calloc(1, sizeof(FsearchFilterManager)); g_assert(manager); manager->filters = NULL; return manager; } FsearchFilterManager * fsearch_filter_manager_new_with_defaults(void) { FsearchFilterManager *manager = fsearch_filter_manager_new(); manager->filters = fsearch_filter_get_default(); return manager; } FsearchFilterManager * fsearch_filter_manager_copy(FsearchFilterManager *manager) { FsearchFilterManager *copy = fsearch_filter_manager_new(); for (GList *l = manager->filters; l != NULL; l = l->next) { FsearchFilter *filter = l->data; copy->filters = g_list_append(copy->filters, fsearch_filter_copy(filter)); } return copy; } static gboolean filter_exists(GList *filters, FsearchFilter *filter, const char *name) { for (GList *f = filters; f != NULL; f = f->next) { FsearchFilter *ff = f->data; if (!ff || ff == filter) { continue; } if (!strcmp(ff->name, name)) { return TRUE; } } return FALSE; } static void update_filter_to_unique_name(GList *filters, FsearchFilter *filter) { uint32_t filter_name_copy = 1; char *filter_name = g_strdup(filter->name); char *new_name = g_strdup(filter->name); while (filter_exists(filters, filter, new_name)) { g_clear_pointer(&new_name, g_free); new_name = g_strdup_printf("%s (%d)", filter_name, filter_name_copy); filter_name_copy++; } g_clear_pointer(&filter->name, g_free); g_clear_pointer(&filter_name, g_free); filter->name = new_name; } void fsearch_filter_manager_append_filter(FsearchFilterManager *manager, FsearchFilter *filter) { update_filter_to_unique_name(manager->filters, filter); manager->filters = g_list_append(manager->filters, fsearch_filter_ref(filter)); } void fsearch_filter_manager_reorder(FsearchFilterManager *manager, gint *new_order, size_t new_order_len) { if (!new_order) { return; } GList *reordered_filters = NULL; for (uint32_t i = 0; i < new_order_len; ++i) { const gint old_pos = new_order[i]; GList *f = g_list_nth(manager->filters, old_pos); reordered_filters = g_list_append(reordered_filters, f->data); } g_list_free(manager->filters); manager->filters = reordered_filters; } void fsearch_filter_manager_remove(FsearchFilterManager *manager, FsearchFilter *filter) { if (!filter) { return; } manager->filters = g_list_remove(manager->filters, filter); g_clear_pointer(&filter, fsearch_filter_unref); } void fsearch_filter_manager_edit(FsearchFilterManager *manager, FsearchFilter *filter, const char *name, const char *macro, const char *query, FsearchQueryFlags flags) { if (!name) { return; } g_clear_pointer(&filter->name, g_free); g_clear_pointer(&filter->query, g_free); filter->name = g_strdup(name); filter->query = g_strdup(query ? query : ""); filter->macro = g_strdup(macro ? macro : ""); filter->flags = flags; update_filter_to_unique_name(manager->filters, filter); } FsearchFilter * fsearch_filter_manager_get_filter_for_name(FsearchFilterManager *manager, const char *name) { g_assert(name); for (GList *l = manager->filters; l != NULL; l = l->next) { FsearchFilter *filter = l->data; g_assert(filter); if (!strcmp(filter->name, name)) { return fsearch_filter_ref(filter); } } return NULL; } guint fsearch_filter_manager_get_num_filters(FsearchFilterManager *manager) { return g_list_length(manager->filters); } FsearchFilter * fsearch_filter_manager_get_filter(FsearchFilterManager *manager, guint idx) { if (idx >= g_list_length(manager->filters)) { return NULL; } GList *l = g_list_nth(manager->filters, idx); FsearchFilter *filter = l->data; return filter ? fsearch_filter_ref(filter) : NULL; } bool fsearch_filter_manager_cmp(FsearchFilterManager *manager_1, FsearchFilterManager *manager_2) { g_assert(manager_1); g_assert(manager_2); guint len1 = g_list_length(manager_1->filters); guint len2 = g_list_length(manager_2->filters); if (len1 != len2) { return false; } GList *l1 = manager_1->filters; GList *l2 = manager_2->filters; while (l1 && l2) { FsearchFilter *f1 = l1->data; FsearchFilter *f2 = l2->data; if (!fsearch_filter_cmp(f1, f2)) { return false; } l1 = l1->next; l2 = l2->next; } return true; } fsearch-0.2.3/src/fsearch_filter_manager.h000066400000000000000000000026021446344336300205530ustar00rootroot00000000000000#pragma once #include #include #include "fsearch_filter.h" typedef struct FsearchFilterManager FsearchFilterManager; void fsearch_filter_manager_free(FsearchFilterManager *manager); FsearchFilterManager * fsearch_filter_manager_new(void); FsearchFilterManager * fsearch_filter_manager_new_with_defaults(void); FsearchFilter * fsearch_filter_manager_get_filter_for_name(FsearchFilterManager *manager, const char *name); FsearchFilterManager * fsearch_filter_manager_copy(FsearchFilterManager *manager); guint fsearch_filter_manager_get_num_filters(FsearchFilterManager *manager); FsearchFilter * fsearch_filter_manager_get_filter(FsearchFilterManager *manager, guint idx); void fsearch_filter_manager_append_filter(FsearchFilterManager *manager, FsearchFilter *filter); void fsearch_filter_manager_reorder(FsearchFilterManager *manager, gint *new_order, size_t new_order_len); void fsearch_filter_manager_remove(FsearchFilterManager *manager, FsearchFilter *filter); void fsearch_filter_manager_edit(FsearchFilterManager *manager, FsearchFilter *filter, const char *name, const char *macro, const char *query, FsearchQueryFlags flags); bool fsearch_filter_manager_cmp(FsearchFilterManager *manager_1, FsearchFilterManager *manager_2); fsearch-0.2.3/src/fsearch_index.c000066400000000000000000000023221446344336300166750ustar00rootroot00000000000000#define _GNU_SOURCE #include #include #include #include #include "fsearch_index.h" FsearchIndex * fsearch_index_new(FsearchIndexType type, const char *path, bool search_in, bool update, bool one_filesystem, time_t last_updated) { FsearchIndex *index = calloc(1, sizeof(FsearchIndex)); g_assert(index); index->type = type; index->path = path ? strdup(path) : strdup(""); index->enabled = search_in; index->update = update; index->one_filesystem = one_filesystem; index->last_updated = last_updated; return index; } FsearchIndex * fsearch_index_copy(FsearchIndex *index) { if (!index) { return NULL; } return fsearch_index_new(index->type, index->path, index->enabled, index->update, index->one_filesystem, index->last_updated); } void fsearch_index_free(FsearchIndex *index) { if (!index) { return; } g_clear_pointer(&index->path, free); g_clear_pointer(&index, free); } fsearch-0.2.3/src/fsearch_index.h000066400000000000000000000012641446344336300167060ustar00rootroot00000000000000#pragma once #include #include #include typedef enum { FSEARCH_INDEX_FOLDER_TYPE, NUM_FSEARCH_INDEX_TYPES, } FsearchIndexType; typedef struct _FsearchIndex { FsearchIndexType type; char *path; bool enabled; bool update; bool one_filesystem; time_t last_updated; } FsearchIndex; FsearchIndex * fsearch_index_new(FsearchIndexType type, const char *path, bool search_in, bool update, bool one_filesystem, time_t last_updated); FsearchIndex * fsearch_index_copy(FsearchIndex *index); void fsearch_index_free(FsearchIndex *index); fsearch-0.2.3/src/fsearch_limits.h000066400000000000000000000015701446344336300171000ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #define FSEARCH_THREAD_LIMIT 32 #ifndef PATH_MAX #define PATH_MAX 4096 /* max # of characters in a path name */ #endif fsearch-0.2.3/src/fsearch_list_view.c000066400000000000000000002430671446344336300176100ustar00rootroot00000000000000 #include "fsearch_list_view.h" #include "pango/pango-attributes.h" #include "pango/pango-layout.h" #include #include #include #define TEXT_HEIGHT_FALLBACK 20 #define ROW_HEIGHT_DEFAULT 30 #define COLUMN_RESIZE_AREA_WIDTH 6 typedef enum { RUBBERBAND_SELECT_INACTIVE, RUBBERBAND_SELECT_WAITING, RUBBERBAND_SELECT_ACTIVE, NUM_RUBBERBAND_SELECT, } FsearchListviewRubberbandState; struct _FsearchListView { GtkContainer parent_instance; GList *columns; GList *columns_reversed; GdkWindow *bin_window; GdkWindow *header_window; GtkAdjustment *hadjustment; GtkAdjustment *vadjustment; guint hscroll_policy : 1; guint vscroll_policy : 1; GtkGesture *multi_press_gesture; GtkGesture *bin_drag_gesture; GtkGesture *header_drag_gesture; gboolean bin_drag_mode; gboolean col_resize_mode; FsearchListviewRubberbandState rubberband_state; gint drag_column_pos; gint x_drag_started; gint x_bin_drag_started; gint y_bin_drag_started; gint x_bin_drag_offset; gint y_bin_drag_offset; guint scroll_timeout; gint rubberband_start_idx; gint rubberband_end_idx; gboolean rubberband_extend; gboolean rubberband_modify; gboolean single_click_activate; // The cursor index should only be highlighted while the view is navigated with the keyboard gboolean highlight_cursor_idx; // cursor_idx is the row index which was last focused by the mouse (through a click) or keyboard gint cursor_idx; // hovered_idx is the row index which is currently being hovered by the mouse cursor gint hovered_idx; gint extend_started_idx; gint num_rows; gint row_height; gint header_height; gint min_list_width; gint list_height; GtkSortType sort_type; gint sort_order; FsearchListViewSortFunc sort_func; gpointer sort_func_data; FsearchListViewDrawRowFunc draw_row_func; gpointer draw_row_func_data; FsearchListViewQueryTooltipFunc query_tooltip_func; gpointer query_tooltip_func_data; gboolean has_selection_handlers; FsearchListViewIsSelectedFunc is_selected_func; FsearchListViewSelectFunc select_func; FsearchListViewSelectRangeFunc select_range_func; FsearchListViewSelectRangeFunc toggle_range_func; FsearchListViewSelectToggleFunc select_toggle_func; FsearchListViewUnselectAllFunc unselect_func; FsearchListViewNumSelectedFunc num_selected_func; gpointer selection_user_data; }; enum { VIRTUAL_ROW_ABOVE_VIEW = -1, VIRTUAL_ROW_BELOW_VIEW = -2, UNSET_ROW = -3, }; enum { FSEARCH_LIST_VIEW_SIGNAL_ROW_ACTIVATED, FSEARCH_LIST_VIEW_SIGNAL_POPUP, NUM_FSEARCH_LIST_VIEW_SIGNALS }; static guint signals[NUM_FSEARCH_LIST_VIEW_SIGNALS]; /* Properties */ enum { PROP_0, LAST_PROP, /* overridden */ PROP_HADJUSTMENT = LAST_PROP, PROP_VADJUSTMENT, PROP_HSCROLL_POLICY, PROP_VSCROLL_POLICY, }; static gboolean is_row_idx_valid(FsearchListView *view, int row_idx) { if (row_idx < 0) { return FALSE; } if (row_idx >= view->num_rows) { return FALSE; } return TRUE; } static int get_last_row_idx(FsearchListView *view) { int last_row = view->num_rows - 1; if (last_row < 0) { return UNSET_ROW; } else { return last_row; } } static inline int get_row_idx_for_sort_type(FsearchListView *view, int row_idx) { if (!is_row_idx_valid(view, row_idx)) { return row_idx; } if (view->sort_type == GTK_SORT_ASCENDING) { return row_idx; } else { return get_last_row_idx(view) - row_idx; } } static int get_hscroll_pos(FsearchListView *view) { return (int)gtk_adjustment_get_value(view->hadjustment); } static int get_vscroll_pos(FsearchListView *view) { return (int)gtk_adjustment_get_value(view->vadjustment); } static gboolean fsearch_list_view_is_selected(FsearchListView *view, int row); static void fsearch_list_view_scrollable_init(GtkScrollableInterface *iface); G_DEFINE_TYPE_WITH_CODE(FsearchListView, fsearch_list_view, GTK_TYPE_CONTAINER, G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, fsearch_list_view_scrollable_init)) static gboolean fsearch_list_view_is_text_dir_rtl(FsearchListView *view) { return gtk_widget_get_direction(GTK_WIDGET(view)) == GTK_TEXT_DIR_RTL ? TRUE : FALSE; } static GList * fsearch_list_view_get_columns_for_text_direction(FsearchListView *view) { const gboolean right_to_left_text = fsearch_list_view_is_text_dir_rtl(view); return right_to_left_text ? view->columns_reversed : view->columns; } static int fsearch_list_view_get_columns_effective_width(FsearchListView *view) { int width = 0; for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } width += column->effective_width; } return width; } static int fsearch_list_view_get_columns_width(FsearchListView *view) { int width = 0; for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } width += column->width; } return width; } static gboolean is_row_idx_fully_in_view(FsearchListView *view, int row_idx) { const int y_view_start = floor(get_vscroll_pos(view)); const int y_view_end = y_view_start + gtk_widget_get_allocated_height(GTK_WIDGET(view)) - view->header_height; const int y_row = row_idx * view->row_height; if (y_row > y_view_start && y_row + view->row_height < y_view_end) { return TRUE; } return FALSE; } static gboolean get_row_rect_in_view(FsearchListView *view, int row_idx, cairo_rectangle_int_t *rec) { if (!is_row_idx_valid(view, row_idx)) { return FALSE; } const int y_view_start = floor(get_vscroll_pos(view)); const int y_view_end = y_view_start + gtk_widget_get_allocated_height(GTK_WIDGET(view)) - view->header_height; const int y_row = row_idx * view->row_height; if (y_view_start - view->row_height < y_row && y_row < y_view_end) { rec->x = 0; rec->y = y_row - y_view_start; rec->width = gdk_window_get_width(view->bin_window); rec->height = view->row_height; return TRUE; } return FALSE; } static gboolean redraw_row(FsearchListView *view, int row_idx) { cairo_rectangle_int_t rec = {}; if (get_row_rect_in_view(view, row_idx, &rec)) { gtk_widget_queue_draw_area(GTK_WIDGET(view), rec.x, rec.y + view->header_height, rec.width, rec.height); return TRUE; } return FALSE; } static gint fsearch_list_view_num_rows_for_view_height(FsearchListView *view) { return floor((gtk_widget_get_allocated_height(GTK_WIDGET(view)) - view->header_height) / (double)view->row_height); } static gint fsearch_list_view_get_row_idx_for_y_canvas(FsearchListView *view, int y_canvas) { if (y_canvas < 0) { // we're above the first row return VIRTUAL_ROW_ABOVE_VIEW; } int row_idx = floor((double)y_canvas / (double)view->row_height); if (row_idx >= view->num_rows) { // we're below the last row row_idx = VIRTUAL_ROW_BELOW_VIEW; } return row_idx; } static void fsearch_list_view_convert_view_to_canvas_coords(FsearchListView *view, int x_view, int y_view, int *x_canvas, int *y_canvas) { if (x_canvas) { *x_canvas = get_hscroll_pos(view) + x_view; } if (y_canvas) { *y_canvas = get_vscroll_pos(view) + y_view - view->header_height; } } static gint get_font_height_for_widget(GtkWidget *widget) { PangoLayout *layout = gtk_widget_create_pango_layout(widget, NULL); g_return_val_if_fail(layout, TEXT_HEIGHT_FALLBACK); gint text_height; pango_layout_get_pixel_size(layout, NULL, &text_height); g_clear_object(&layout); return text_height; } static gint fsearch_list_view_get_row_idx_for_y_view(FsearchListView *view, int y_view) { int y_canvas = 0; fsearch_list_view_convert_view_to_canvas_coords(view, 0, y_view, NULL, &y_canvas); return fsearch_list_view_get_row_idx_for_y_canvas(view, y_canvas); } static FsearchListViewColumn * fsearch_list_view_get_col_for_x_canvas(FsearchListView *view, int x_canvas) { int width = 0; GList *columns = fsearch_list_view_get_columns_for_text_direction(view); if (fsearch_list_view_is_text_dir_rtl(view)) { width += MAX(0, gdk_window_get_width(view->bin_window) - fsearch_list_view_get_columns_effective_width(view)); } if (width > x_canvas) { return NULL; } for (GList *c = columns; c != NULL; c = c->next) { FsearchListViewColumn *col = c->data; if (!col->visible) { continue; } width += col->effective_width; if (x_canvas < width) { return col; } } return NULL; } static FsearchListViewColumn * fsearch_list_view_get_col_for_x_view(FsearchListView *view, int x_view) { int x_canvas = 0; fsearch_list_view_convert_view_to_canvas_coords(view, x_view, 0, &x_canvas, NULL); return fsearch_list_view_get_col_for_x_canvas(view, x_canvas); } static void fsearch_list_view_get_rubberband_points(FsearchListView *view, double *x1, double *y1, double *x2, double *y2) { gdouble x_drag_start = 0; gdouble y_drag_start = 0; gtk_gesture_drag_get_start_point(GTK_GESTURE_DRAG(view->bin_drag_gesture), &x_drag_start, &y_drag_start); const gdouble x_drag_start_diff = view->x_bin_drag_started - x_drag_start - get_hscroll_pos(view); const gdouble y_drag_start_diff = view->y_bin_drag_started - y_drag_start - get_vscroll_pos(view) + view->header_height; *x1 = view->x_bin_drag_started; *y1 = view->y_bin_drag_started; *x2 = view->x_bin_drag_started + view->x_bin_drag_offset - x_drag_start_diff; *y2 = view->y_bin_drag_started + view->y_bin_drag_offset - y_drag_start_diff; } static void fsearch_list_view_draw_column_header(GtkWidget *widget, GtkStyleContext *context, cairo_t *cr) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); if (!gtk_cairo_should_draw_window(cr, view->header_window)) { return; } gtk_style_context_save(context); gtk_style_context_remove_class(context, GTK_STYLE_CLASS_CELL); GList *columns = fsearch_list_view_get_columns_for_text_direction(view); for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } gtk_container_propagate_draw(GTK_CONTAINER(view), column->button, cr); } gtk_style_context_restore(context); const int view_width = gtk_widget_get_allocated_width(widget); const int columns_width = fsearch_list_view_get_columns_effective_width(view); if (columns_width < view_width) { // draw filler at the end of the column headers FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(view, 0); if (col) { // use the style context of the first column button GtkStyleContext *button_style_context = gtk_widget_get_style_context(col->button); GtkStateFlags flags = gtk_style_context_get_state(button_style_context); flags &= ~GTK_STATE_FLAG_ACTIVE; flags &= ~GTK_STATE_FLAG_PRELIGHT; flags &= ~GTK_STATE_FLAG_SELECTED; flags &= ~GTK_STATE_FLAG_FOCUSED; flags |= GTK_STATE_FLAG_INSENSITIVE; gtk_style_context_save(button_style_context); gtk_style_context_set_state(button_style_context, flags); const gboolean is_rtl = fsearch_list_view_is_text_dir_rtl(view); const int filler_x = is_rtl ? 0 : columns_width - 2; const int filler_width = view_width - columns_width + 2; gtk_render_background(button_style_context, cr, filler_x, 0, filler_width, view->header_height); gtk_render_frame(button_style_context, cr, filler_x, 0, filler_width, view->header_height); gtk_style_context_restore(button_style_context); } } } static void fsearch_list_view_draw_list(GtkWidget *widget, GtkStyleContext *context, cairo_t *cr) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); if (!gtk_cairo_should_draw_window(cr, view->bin_window)) { return; } GtkAllocation alloc; gtk_widget_get_allocation(widget, &alloc); PangoLayout *layout = gtk_widget_create_pango_layout(widget, NULL); cairo_rectangle_int_t view_rect; view_rect.x = 0; view_rect.y = view->header_height; view_rect.width = gtk_widget_get_allocated_width(widget); view_rect.height = gtk_widget_get_allocated_height(widget) - view->header_height; const int columns_width = fsearch_list_view_get_columns_effective_width(view); const int x_scroll_offset = -get_hscroll_pos(view); const int y_scroll_offset = -get_vscroll_pos(view); const int bin_window_width = gdk_window_get_width(view->bin_window); int x_offset = x_scroll_offset; const int x_rtl_offset = bin_window_width - columns_width; if (fsearch_list_view_is_text_dir_rtl(view)) { x_offset += x_rtl_offset; } const int y_offset = y_scroll_offset % view->row_height + view->header_height; const int first_visible_row = floor(-y_scroll_offset / (double)view->row_height); const int num_rows_in_view = (int)ceil(view_rect.height / (double)view->row_height) + 1; cairo_save(cr); gdk_cairo_rectangle(cr, &view_rect); cairo_clip(cr); GList *columns = fsearch_list_view_get_columns_for_text_direction(view); for (int i = 0; i < num_rows_in_view; i++) { if (first_visible_row + i >= view->num_rows) { break; } cairo_rectangle_int_t row_rect; row_rect.x = x_offset; row_rect.y = y_offset + i * view->row_height; row_rect.width = MIN(columns_width, bin_window_width); row_rect.height = view->row_height; if (view->draw_row_func) { int row_idx = first_visible_row + i; cairo_save(cr); gdk_cairo_rectangle(cr, &row_rect); cairo_clip(cr); view->draw_row_func(cr, view->bin_window, layout, context, columns, &row_rect, get_row_idx_for_sort_type(view, row_idx), fsearch_list_view_is_selected(view, row_idx), view->cursor_idx == row_idx ? TRUE : FALSE, view->hovered_idx == row_idx ? TRUE : FALSE, fsearch_list_view_is_text_dir_rtl(view), view->draw_row_func_data); cairo_restore(cr); } } if (view->highlight_cursor_idx && gtk_widget_has_focus(widget) && first_visible_row <= view->cursor_idx && view->cursor_idx <= first_visible_row + num_rows_in_view) { GtkStateFlags flags = gtk_style_context_get_state(context); flags |= GTK_STATE_FLAG_FOCUSED; if (fsearch_list_view_is_selected(view, view->cursor_idx)) { flags |= GTK_STATE_FLAG_SELECTED; } gtk_style_context_save(context); gtk_style_context_set_state(context, flags); gtk_render_focus(context, cr, x_offset, y_offset + (view->cursor_idx - first_visible_row) * view->row_height, columns_width, view->row_height); gtk_style_context_restore(context); } if (view->num_rows > 0) { gtk_style_context_save(context); gtk_style_context_add_class(context, GTK_STYLE_CLASS_SEPARATOR); uint32_t line_x = x_offset; for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!col->next) { break; } if (!column->visible) { continue; } line_x += column->effective_width; gtk_render_line(context, cr, line_x, view_rect.y, line_x, view_rect.y + view_rect.height); } gtk_style_context_restore(context); } if (view->bin_drag_mode && view->rubberband_state == RUBBERBAND_SELECT_ACTIVE) { cairo_save(cr); gtk_style_context_save(context); gtk_style_context_remove_class(context, GTK_STYLE_CLASS_VIEW); gtk_style_context_add_class(context, GTK_STYLE_CLASS_RUBBERBAND); gdouble x_drag_start = 0; gdouble y_drag_start = 0; gtk_gesture_drag_get_start_point(GTK_GESTURE_DRAG(view->bin_drag_gesture), &x_drag_start, &y_drag_start); const gdouble x_drag_start_diff = view->x_bin_drag_started - x_drag_start + x_scroll_offset; const gdouble y_drag_start_diff = view->y_bin_drag_started - y_drag_start + y_scroll_offset + view->header_height; const double x1 = x_offset + view_rect.x + view->x_bin_drag_started; const double y1 = y_scroll_offset + view_rect.y + view->y_bin_drag_started; const double x2 = x_offset + view_rect.x + view->x_bin_drag_started + view->x_bin_drag_offset - x_drag_start_diff; const double y2 = y_scroll_offset + view_rect.y + view->y_bin_drag_started + view->y_bin_drag_offset - y_drag_start_diff; GdkRectangle rect = {}; rect.width = ABS(x1 - x2); rect.height = ABS(y1 - y2); rect.x = MIN(x1, x2); rect.y = MIN(y1, y2); gdk_cairo_rectangle(cr, &rect); cairo_clip(cr); gtk_render_background(context, cr, rect.x, rect.y, rect.width, rect.height); gtk_render_frame(context, cr, rect.x, rect.y, rect.width, rect.height); gtk_style_context_restore(context); cairo_restore(cr); } cairo_restore(cr); g_clear_object(&layout); } static gboolean fsearch_list_view_draw(GtkWidget *widget, cairo_t *cr) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); GtkStyleContext *context = gtk_widget_get_style_context(widget); GdkRectangle clip_rec = {}; if (!gdk_cairo_get_clip_rectangle(cr, &clip_rec)) { return GDK_EVENT_PROPAGATE; } const int width = gtk_widget_get_allocated_width(widget); const int height = gtk_widget_get_allocated_height(widget); if (gtk_cairo_should_draw_window(cr, gtk_widget_get_window(widget))) { gtk_render_background(context, cr, 0, 0, width, height); } if (clip_rec.y + clip_rec.height > view->header_height) { fsearch_list_view_draw_list(widget, context, cr); } if (clip_rec.y < view->header_height) { fsearch_list_view_draw_column_header(widget, context, cr); } return GDK_EVENT_PROPAGATE; } static int32_t fit_row_idx_in_view(FsearchListView *view, int32_t row_idx) { if (row_idx == VIRTUAL_ROW_ABOVE_VIEW) { return 0; } else if (row_idx == VIRTUAL_ROW_BELOW_VIEW) { return get_last_row_idx(view); } else { return CLAMP(row_idx, 0, get_last_row_idx(view)); } } static void fsearch_list_view_scroll_row_into_view(FsearchListView *view, int row_idx) { row_idx = fit_row_idx_in_view(view, row_idx); if (is_row_idx_fully_in_view(view, row_idx)) { return; } int view_height = gtk_widget_get_allocated_height(GTK_WIDGET(view)) - view->header_height; int y_row = view->row_height * row_idx; int y_view_start = (int)floor(get_vscroll_pos(view)) + view->header_height; if (y_view_start >= y_row - view->row_height) { gtk_adjustment_set_value(view->vadjustment, y_row); } else { gtk_adjustment_set_value(view->vadjustment, y_row - view_height + view->row_height); } } static void fsearch_list_view_selection_changed(FsearchListView *view) { gtk_widget_queue_draw(GTK_WIDGET(view)); } static guint fsearch_list_view_selection_num_selected(FsearchListView *view) { return view->has_selection_handlers ? view->num_selected_func(view->selection_user_data) : 0; } static void fsearch_list_view_selection_clear_silent(FsearchListView *view) { if (view->has_selection_handlers) { view->unselect_func(view->selection_user_data); } } static void fsearch_list_view_selection_add(FsearchListView *view, int row) { if (view->has_selection_handlers) { view->select_func(get_row_idx_for_sort_type(view, row), view->selection_user_data); redraw_row(view, row); } } static void fsearch_list_view_selection_toggle_silent(FsearchListView *view, int row) { if (view->has_selection_handlers) { view->select_toggle_func(get_row_idx_for_sort_type(view, row), view->selection_user_data); } } static gboolean fsearch_list_view_is_selected(FsearchListView *view, int row) { if (view->has_selection_handlers) { return view->is_selected_func(get_row_idx_for_sort_type(view, row), view->selection_user_data); } return FALSE; } static void fsearch_list_view_selection_clear(FsearchListView *view) { if (view->has_selection_handlers) { view->unselect_func(view->selection_user_data); fsearch_list_view_selection_changed(view); } } static void fsearch_list_view_select_range_silent(FsearchListView *view, int32_t start_idx, int32_t end_idx, gboolean toggle) { if (!view->has_selection_handlers) { return; } if (start_idx == UNSET_ROW || end_idx == UNSET_ROW) { return; } // If both start and end index point above or below the view there's nothing to select if (start_idx == VIRTUAL_ROW_ABOVE_VIEW && end_idx == VIRTUAL_ROW_ABOVE_VIEW) { return; } if (start_idx == VIRTUAL_ROW_BELOW_VIEW && end_idx == VIRTUAL_ROW_BELOW_VIEW) { return; } // Translate VIRTUAL_ROW_ABOVE_VIEW to the first idx and VIRTUAL_ROW_BELOW_VIEW to the last idx start_idx = fit_row_idx_in_view(view, start_idx); end_idx = fit_row_idx_in_view(view, end_idx); start_idx = get_row_idx_for_sort_type(view, (gint)start_idx); end_idx = get_row_idx_for_sort_type(view, (gint)end_idx); const int32_t temp_idx = start_idx; if (start_idx > end_idx) { start_idx = end_idx; end_idx = temp_idx; } end_idx = MIN(get_last_row_idx(view), end_idx); if (toggle) { view->toggle_range_func((gint)start_idx, (gint)end_idx, view->selection_user_data); } else { view->select_range_func((gint)start_idx, (gint)end_idx, view->selection_user_data); } } static void fsearch_list_view_get_selection_modifiers(FsearchListView *view, gboolean *modify, gboolean *extend) { GtkWidget *widget = GTK_WIDGET(view); *modify = FALSE; *extend = FALSE; GdkModifierType state = 0; GdkModifierType mask; if (gtk_get_current_event_state(&state)) { mask = gtk_widget_get_modifier_mask(widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION); if ((state & mask) == mask) { *modify = TRUE; } mask = gtk_widget_get_modifier_mask(widget, GDK_MODIFIER_INTENT_EXTEND_SELECTION); if ((state & mask) == mask) { *extend = TRUE; } } } static void on_fsearch_list_view_multi_press_gesture_pressed(GtkGestureMultiPress *gesture, gint n_press, gdouble x, gdouble y, FsearchListView *view) { guint button_pressed = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); // gtk_widget_grab_focus(GTK_WIDGET(view)); if (button_pressed > 3) { gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_DENIED); return; } // gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); if (gtk_widget_get_can_focus(GTK_WIDGET(view)) && !gtk_widget_has_focus(GTK_WIDGET(view))) { gtk_widget_grab_focus(GTK_WIDGET(view)); } if (y < view->header_height) { gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_DENIED); return; } if (view->rubberband_state == RUBBERBAND_SELECT_ACTIVE) { return; } gboolean modify_selection; gboolean extend_selection; fsearch_list_view_get_selection_modifiers(view, &modify_selection, &extend_selection); int row_idx = fsearch_list_view_get_row_idx_for_y_view(view, y); // In modify selection mode (i.e. while Ctrl is pressed) the selection must not be cleared if (!is_row_idx_valid(view, row_idx) && !modify_selection) { fsearch_list_view_selection_clear(view); return; } gboolean extended_selection = FALSE; if (button_pressed == GDK_BUTTON_PRIMARY) { if (n_press == 1) { if (extend_selection) { extended_selection = TRUE; if (view->cursor_idx == UNSET_ROW) { // The cursor index hasn't been set so far. So we start and end the extended selection // at the clicked row view->cursor_idx = row_idx; } if (view->extend_started_idx == UNSET_ROW) { view->extend_started_idx = view->cursor_idx; } fsearch_list_view_selection_clear_silent(view); // Select from the last cursor index to the clicked row fsearch_list_view_select_range_silent(view, view->cursor_idx, row_idx, FALSE); // Set the cursor to the clicked row view->cursor_idx = row_idx; } else if (modify_selection) { view->cursor_idx = row_idx; fsearch_list_view_selection_toggle_silent(view, row_idx); } else { view->cursor_idx = row_idx; fsearch_list_view_selection_clear_silent(view); fsearch_list_view_selection_toggle_silent(view, row_idx); if (view->single_click_activate) { FsearchListViewColumn *col = fsearch_list_view_get_col_for_x_view(view, x); if (col) { g_signal_emit(view, signals[FSEARCH_LIST_VIEW_SIGNAL_ROW_ACTIVATED], 0, col->type, get_row_idx_for_sort_type(view, row_idx)); } } } fsearch_list_view_selection_changed(view); fsearch_list_view_scroll_row_into_view(view, view->cursor_idx); } if (n_press == 2 && !view->single_click_activate) { FsearchListViewColumn *col = fsearch_list_view_get_col_for_x_view(view, x); if (col) { g_signal_emit(view, signals[FSEARCH_LIST_VIEW_SIGNAL_ROW_ACTIVATED], 0, col->type, get_row_idx_for_sort_type(view, row_idx)); } } } if (button_pressed == GDK_BUTTON_SECONDARY && n_press == 1) { view->cursor_idx = row_idx; if (!fsearch_list_view_is_selected(view, row_idx)) { fsearch_list_view_selection_clear_silent(view); fsearch_list_view_selection_toggle_silent(view, row_idx); fsearch_list_view_selection_changed(view); } g_signal_emit(view, signals[FSEARCH_LIST_VIEW_SIGNAL_POPUP], 0); } view->highlight_cursor_idx = FALSE; gtk_widget_queue_draw(GTK_WIDGET(view)); if (!extended_selection) { view->extend_started_idx = UNSET_ROW; } } static void on_fsearch_list_view_multi_press_gesture_released(GtkGestureMultiPress *gesture, gint n_press, gdouble x, gdouble y, FsearchListView *view) { guint button_pressed = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); if (button_pressed > 3) { return; } int row_idx = fsearch_list_view_get_row_idx_for_y_view(view, y); if (row_idx < 0) { return; } } static void on_fsearch_list_view_bin_drag_gesture_end(GtkGestureDrag *gesture, gdouble offset_x, gdouble offset_y, FsearchListView *view) { // GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); if (view->bin_drag_mode) { view->bin_drag_mode = FALSE; view->rubberband_state = RUBBERBAND_SELECT_INACTIVE; view->x_bin_drag_started = -1; view->y_bin_drag_started = -1; view->x_bin_drag_offset = -1; view->y_bin_drag_offset = -1; view->rubberband_start_idx = UNSET_ROW; view->rubberband_end_idx = UNSET_ROW; view->rubberband_extend = FALSE; view->rubberband_modify = FALSE; gtk_widget_queue_draw(GTK_WIDGET(view)); } } static int cmp_row_idx(int i1, int i2) { g_assert(i1 != UNSET_ROW); g_assert(i2 != UNSET_ROW); if (i1 == i2) { return 0; } if (i1 == VIRTUAL_ROW_BELOW_VIEW || i2 == VIRTUAL_ROW_ABOVE_VIEW) { return 1; } if (i2 == VIRTUAL_ROW_BELOW_VIEW || i1 == VIRTUAL_ROW_ABOVE_VIEW) { return -1; } return i1 - i2; } static void rubberband_toggle_range(FsearchListView *view, int start_idx, int end_idx, int prev_end_idx) { int cmp_prev_new_res = cmp_row_idx(prev_end_idx, end_idx); int cmp_start_end_res = cmp_row_idx(start_idx, end_idx); int cmp_start_prev_end_res = cmp_row_idx(start_idx, prev_end_idx); if (cmp_prev_new_res == 0) { g_assert_not_reached(); } else if (cmp_prev_new_res > 0) { // end < prev_end if (cmp_start_prev_end_res >= 0) { // end < prev_end <= start // selection grows upwards fsearch_list_view_select_range_silent(view, end_idx, prev_end_idx == VIRTUAL_ROW_BELOW_VIEW ? get_last_row_idx(view) : prev_end_idx - 1, TRUE); } else { // start < prev_end if (cmp_start_end_res > 0) { // end < start < prev_end // toggle everything from end_idx to prev_end_idx, except start_idx fsearch_list_view_select_range_silent(view, end_idx, prev_end_idx, TRUE); fsearch_list_view_selection_toggle_silent(view, start_idx); } else { // start <= end < prev_end // toggle everything after end_idx til prev_end if (end_idx + 1 <= get_last_row_idx(view)) { fsearch_list_view_select_range_silent(view, end_idx + 1, prev_end_idx == VIRTUAL_ROW_BELOW_VIEW ? get_last_row_idx(view) : prev_end_idx, TRUE); } } } } else { // prev_end < end if (cmp_start_prev_end_res > 0) { // prev_end < start if (cmp_start_end_res >= 0) { // prev_end < end <= start // toggle everything from prev_end to the row before end fsearch_list_view_select_range_silent(view, prev_end_idx, end_idx == VIRTUAL_ROW_BELOW_VIEW ? get_last_row_idx(view) : end_idx - 1, TRUE); } else { // prev_end < start < end // toggle everything from prev_end to end, except start_idx fsearch_list_view_select_range_silent(view, prev_end_idx, end_idx, TRUE); fsearch_list_view_selection_toggle_silent(view, start_idx); } } else { // start <= prev_end < end // toggle everything after prev_end til end if (prev_end_idx + 1 <= get_last_row_idx(view)) { fsearch_list_view_select_range_silent(view, prev_end_idx + 1, end_idx == VIRTUAL_ROW_BELOW_VIEW ? get_last_row_idx(view) : end_idx, TRUE); } } } } static void update_rubberband_selection(FsearchListView *view) { if (!view->bin_drag_mode) { return; } gdouble offset_x; gdouble offset_y; gtk_gesture_drag_get_offset(GTK_GESTURE_DRAG(view->bin_drag_gesture), &offset_x, &offset_y); view->highlight_cursor_idx = FALSE; view->rubberband_state = RUBBERBAND_SELECT_ACTIVE; view->x_bin_drag_offset = offset_x; view->y_bin_drag_offset = offset_y; double x1, y1, x2, y2; fsearch_list_view_get_rubberband_points(view, &x1, &y1, &x2, &y2); int start_idx = fsearch_list_view_get_row_idx_for_y_canvas(view, y1); int end_idx = fsearch_list_view_get_row_idx_for_y_canvas(view, y2); int prev_start_idx = view->rubberband_start_idx; int prev_end_idx = view->rubberband_end_idx; view->rubberband_start_idx = start_idx; view->rubberband_end_idx = end_idx; // Only update selection when our end_idx changed to last time if (end_idx == prev_end_idx) { return; } // The start index should always stay the same while the rubber band is moved // only in the very first call of each rubber band selection are they different if (start_idx != prev_start_idx) { return; } view->cursor_idx = MAX(fit_row_idx_in_view(view, start_idx), fit_row_idx_in_view(view, end_idx)); view->extend_started_idx = MIN(fit_row_idx_in_view(view, start_idx), fit_row_idx_in_view(view, end_idx)); if (view->rubberband_modify) { // rubber band selection while Ctrl key is pressed rubberband_toggle_range(view, start_idx, end_idx, prev_end_idx); } else { // Normal ranged selection fsearch_list_view_selection_clear_silent(view); fsearch_list_view_select_range_silent(view, start_idx, end_idx, FALSE); } fsearch_list_view_selection_changed(view); return; } static gboolean vertical_autoscroll(gpointer data) { FsearchListView *view = data; if (!gtk_gesture_is_recognized(view->bin_drag_gesture)) { goto out; } double y_drag_start = 0; if (!gtk_gesture_drag_get_start_point(GTK_GESTURE_DRAG(view->bin_drag_gesture), NULL, &y_drag_start)) { goto out; } double y_drag_offset = 0; if (!gtk_gesture_drag_get_offset(GTK_GESTURE_DRAG(view->bin_drag_gesture), NULL, &y_drag_offset)) { goto out; } const double y_drag_point = y_drag_start + y_drag_offset; const double view_height = gtk_widget_get_allocated_height(GTK_WIDGET(view)); double scroll_offset = 0; if (y_drag_point < view->header_height) { // the cursor is above the view -> scroll up scroll_offset = y_drag_point - view->header_height; } else if (y_drag_point > view_height) { // the cursor is below the view -> scroll down scroll_offset = y_drag_point - view_height; } if (scroll_offset == 0) { goto out; } // Make sure the rubberband selection gets updated while scrolling view->hovered_idx = UNSET_ROW; gtk_adjustment_set_value(view->vadjustment, MAX(get_vscroll_pos(view) + scroll_offset, 0.0)); return G_SOURCE_CONTINUE; out: view->scroll_timeout = 0; return G_SOURCE_REMOVE; } static void add_vertical_autoscroll_timeout(FsearchListView *view) { if (view->scroll_timeout == 0) { view->scroll_timeout = g_timeout_add(33, vertical_autoscroll, view); } } static void on_fsearch_list_view_bin_drag_gesture_update(GtkGestureDrag *gesture, gdouble offset_x, gdouble offset_y, FsearchListView *view) { GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); // if (gtk_gesture_get_sequence_state(GTK_GESTURE(gesture), sequence) != GTK_EVENT_SEQUENCE_CLAIMED) { // return; // } update_rubberband_selection(view); add_vertical_autoscroll_timeout(view); gtk_widget_queue_draw(GTK_WIDGET(view)); } static void on_fsearch_list_view_bin_drag_gesture_begin(GtkGestureDrag *gesture, gdouble start_x, gdouble start_y, FsearchListView *view) { if (start_y > view->header_height && !view->single_click_activate) { if (!gtk_widget_has_focus(GTK_WIDGET(view))) { gtk_widget_grab_focus(GTK_WIDGET(view)); } view->x_bin_drag_started = start_x + get_hscroll_pos(view); view->y_bin_drag_started = start_y + get_vscroll_pos(view) - view->header_height; view->bin_drag_mode = TRUE; view->rubberband_state = RUBBERBAND_SELECT_WAITING; fsearch_list_view_get_selection_modifiers(view, &view->rubberband_modify, &view->rubberband_extend); gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); } } static void on_fsearch_list_view_header_drag_gesture_end(GtkGestureDrag *gesture, gdouble offset_x, gdouble offset_y, FsearchListView *view) { // GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); if (view->col_resize_mode) { view->col_resize_mode = FALSE; view->drag_column_pos = -1; } } static void on_fsearch_list_view_header_drag_gesture_update(GtkGestureDrag *gesture, gdouble offset_x, gdouble offset_y, FsearchListView *view) { GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); if (gtk_gesture_get_sequence_state(GTK_GESTURE(gesture), sequence) != GTK_EVENT_SEQUENCE_CLAIMED) { return; } gdouble start_x, start_y; gtk_gesture_drag_get_start_point(gesture, &start_x, &start_y); gdouble x = start_x; if (fsearch_list_view_is_text_dir_rtl(view)) { x -= offset_x; } else { x += offset_x; } GList *columns = fsearch_list_view_get_columns_for_text_direction(view); if (view->col_resize_mode) { GList *c = g_list_nth(columns, view->drag_column_pos); if (!c) { return; } FsearchListViewColumn *col = c->data; col->width = x - view->x_drag_started; col->width = MAX(30, col->width); gtk_widget_queue_resize(GTK_WIDGET(view)); } } static void on_fsearch_list_view_header_drag_gesture_begin(GtkGestureDrag *gesture, gdouble start_x, gdouble start_y, FsearchListView *view) { GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); const GdkEvent *event = gtk_gesture_get_last_event(GTK_GESTURE(gesture), sequence); GdkWindow *window = event->any.window; gint col_pos = 0; GList *columns = fsearch_list_view_get_columns_for_text_direction(view); for (GList *col = columns; col; col = col->next, col_pos++) { FsearchListViewColumn *column = col->data; if (window != column->window) { continue; } if (!column->visible) { continue; } view->col_resize_mode = TRUE; view->drag_column_pos = col_pos; view->x_drag_started = start_x - column->effective_width; if (!gtk_widget_has_focus(GTK_WIDGET(view))) { gtk_widget_grab_focus(GTK_WIDGET(view)); } gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); return; } } static gboolean fsearch_list_view_key_press_event(GtkWidget *widget, GdkEventKey *event) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); if (view->rubberband_state == RUBBERBAND_SELECT_ACTIVE) { // Don't support key press events while rubber band selection is active return GDK_EVENT_STOP; } gboolean modify_selection; gboolean extend_selection; fsearch_list_view_get_selection_modifiers(view, &modify_selection, &extend_selection); guint keyval; gdk_event_get_keyval((GdkEvent *)event, &keyval); int d_idx = 0; switch (keyval) { case GDK_KEY_Up: d_idx = -1; break; case GDK_KEY_Down: d_idx = 1; break; case GDK_KEY_Page_Up: d_idx = -fsearch_list_view_num_rows_for_view_height(view); break; case GDK_KEY_Page_Down: d_idx = fsearch_list_view_num_rows_for_view_height(view); break; case GDK_KEY_Home: d_idx = -view->cursor_idx; break; case GDK_KEY_End: d_idx = get_last_row_idx(view) - view->cursor_idx; break; case GDK_KEY_Menu: // TODO: Popup menu at the last selected item, instead of the mouse pointer position (scroll to it if necessary) g_signal_emit(view, signals[FSEARCH_LIST_VIEW_SIGNAL_POPUP], 0); return TRUE; case GDK_KEY_F10: if (extend_selection) { // Shift + F10 -> open context menu g_signal_emit(view, signals[FSEARCH_LIST_VIEW_SIGNAL_POPUP], 0); return GDK_EVENT_STOP; } default: return GDK_EVENT_PROPAGATE; } if (d_idx != 0) { int prev_focused_idx = view->cursor_idx; if (view->cursor_idx >= 0) { prev_focused_idx = view->cursor_idx; } else { prev_focused_idx = 0; } view->highlight_cursor_idx = TRUE; view->cursor_idx = CLAMP(prev_focused_idx + d_idx, 0, get_last_row_idx(view)); const guint num_selected = fsearch_list_view_selection_num_selected(view); if (extend_selection) { if (view->extend_started_idx == UNSET_ROW) { view->extend_started_idx = prev_focused_idx; } if (num_selected > 0) { fsearch_list_view_selection_clear_silent(view); } fsearch_list_view_select_range_silent(view, view->extend_started_idx, view->cursor_idx, FALSE); } else if (!modify_selection) { view->extend_started_idx = UNSET_ROW; if (num_selected > 0) { fsearch_list_view_selection_clear_silent(view); } fsearch_list_view_selection_toggle_silent(view, view->cursor_idx); } fsearch_list_view_selection_changed(view); fsearch_list_view_scroll_row_into_view(view, view->cursor_idx); return GDK_EVENT_STOP; } return GDK_EVENT_PROPAGATE; } static gint fsearch_list_view_focus_out_event(GtkWidget *widget, GdkEventFocus *event) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); redraw_row(view, view->cursor_idx); return GTK_WIDGET_CLASS(fsearch_list_view_parent_class)->focus_out_event(widget, event); } static gboolean fsearch_list_view_query_tooltip(GtkWidget *widget, int x, int y, gboolean keyboard_mode, GtkTooltip *tooltip) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); if (!view->query_tooltip_func) { return FALSE; } int row_idx = fsearch_list_view_get_row_idx_for_y_view(view, y); FsearchListViewColumn *col = fsearch_list_view_get_col_for_x_view(view, x); if (row_idx < 0 || !col) { return FALSE; } PangoLayout *layout = gtk_widget_create_pango_layout(widget, NULL); if (!layout) { return FALSE; } g_autofree char *tooltip_text = view->query_tooltip_func(layout, view->row_height, get_row_idx_for_sort_type(view, row_idx), col, view->query_tooltip_func_data); g_clear_object(&layout); if (tooltip_text) { gtk_tooltip_set_text(tooltip, tooltip_text); return TRUE; } return FALSE; } static gboolean fsearch_list_view_get_border(GtkScrollable *scrollable, GtkBorder *border) { FsearchListView *view = FSEARCH_LIST_VIEW(scrollable); border->top = view->header_height; return TRUE; } static void fsearch_list_view_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { FsearchListView *view = FSEARCH_LIST_VIEW(object); switch (prop_id) { case PROP_HADJUSTMENT: g_value_set_object(value, view->hadjustment); break; case PROP_VADJUSTMENT: g_value_set_object(value, view->vadjustment); break; case PROP_HSCROLL_POLICY: g_value_set_enum(value, view->hscroll_policy); break; case PROP_VSCROLL_POLICY: g_value_set_enum(value, view->vscroll_policy); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void update_hovered_idx_for_current_cursor_position(FsearchListView *view) { #if GTK_CHECK_VERSION(3, 20, 0) GdkSeat *seat = gdk_display_get_default_seat(gdk_display_get_default()); if (!seat) { return; } GdkDevice *pointer_device = gdk_seat_get_pointer(seat); #else GdkDeviceManager *device_manager = gdk_display_get_device_manager(gdk_display_get_default()); if (!device_manager) { return; } GdkDevice *pointer_device = gdk_device_manager_get_client_pointer(device_manager); #endif if (!pointer_device) { return; } gint x_pointer = 0; gint y_pointer = 0; const int view_width = gtk_widget_get_allocated_width(GTK_WIDGET(view)); const int x_view_in_bin_window = get_hscroll_pos(view); gdk_window_get_device_position(view->bin_window, pointer_device, &x_pointer, &y_pointer, NULL); if (x_pointer >= x_view_in_bin_window && x_pointer <= view_width) { view->hovered_idx = fsearch_list_view_get_row_idx_for_y_canvas(view, y_pointer); } } static void on_fsearch_list_view_adjustment_changed(GtkAdjustment *adjustment, FsearchListView *view) { if (gtk_widget_get_realized(GTK_WIDGET(view))) { gdk_window_move(view->bin_window, -get_hscroll_pos(view), -get_vscroll_pos(view) + view->header_height); gdk_window_move(view->header_window, -get_hscroll_pos(view), 0); // We don't receive motion events while scrolling, because the mouse cursor usually doesn't move, // but we still need to update the hovered index and rubberband, since the content below the cursor moves. update_hovered_idx_for_current_cursor_position(view); update_rubberband_selection(view); } } static void fsearch_list_view_set_adjustment_value(GtkAdjustment *adjustment, double allocated_size, double size) { const gdouble prev_value = gtk_adjustment_get_value(adjustment); const gdouble new_upper = MAX(allocated_size, size); g_object_set(adjustment, "lower", 0.0, "upper", new_upper, "page-size", (gdouble)allocated_size, "step-increment", allocated_size * 0.1, "page-increment", allocated_size * 0.9, NULL); const gdouble new_value = CLAMP(prev_value, 0, new_upper - allocated_size); if (new_value != prev_value) { gtk_adjustment_set_value(adjustment, new_value); } } static void fsearch_list_view_set_hadjustment_value(FsearchListView *view) { const gint width = gtk_widget_get_allocated_width(GTK_WIDGET(view)); fsearch_list_view_set_adjustment_value(view->hadjustment, width, view->min_list_width); } static void fsearch_list_view_set_vadjustment_value(FsearchListView *view) { const gint height = gtk_widget_get_allocated_height(GTK_WIDGET(view)) - view->header_height; fsearch_list_view_set_adjustment_value(view->vadjustment, height, view->list_height); } static void fsearch_list_view_set_hadjustment(FsearchListView *view, GtkAdjustment *adjustment) { if (adjustment && view->hadjustment == adjustment) { return; } if (view->hadjustment != NULL) { g_signal_handlers_disconnect_by_func(view->hadjustment, on_fsearch_list_view_adjustment_changed, view); g_clear_object(&view->hadjustment); } if (adjustment == NULL) { adjustment = gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } g_signal_connect(adjustment, "value-changed", G_CALLBACK(on_fsearch_list_view_adjustment_changed), view); view->hadjustment = g_object_ref_sink(adjustment); fsearch_list_view_set_hadjustment_value(view); g_object_notify(G_OBJECT(view), "hadjustment"); } static void fsearch_list_view_set_vadjustment(FsearchListView *view, GtkAdjustment *adjustment) { if (adjustment && view->vadjustment == adjustment) { return; } if (view->vadjustment != NULL) { g_signal_handlers_disconnect_by_func(view->vadjustment, on_fsearch_list_view_adjustment_changed, view); g_clear_object(&view->vadjustment); } if (adjustment == NULL) { adjustment = gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } g_signal_connect(adjustment, "value-changed", G_CALLBACK(on_fsearch_list_view_adjustment_changed), view); view->vadjustment = g_object_ref_sink(adjustment); fsearch_list_view_set_vadjustment_value(view); g_object_notify(G_OBJECT(view), "vadjustment"); } static void fsearch_list_view_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { FsearchListView *view = FSEARCH_LIST_VIEW(object); switch (prop_id) { case PROP_HADJUSTMENT: fsearch_list_view_set_hadjustment(view, g_value_get_object(value)); break; case PROP_VADJUSTMENT: fsearch_list_view_set_vadjustment(view, g_value_get_object(value)); break; case PROP_HSCROLL_POLICY: if (view->hscroll_policy != g_value_get_enum(value)) { view->hscroll_policy = g_value_get_enum(value); gtk_widget_queue_resize(GTK_WIDGET(view)); g_object_notify_by_pspec(object, pspec); } break; case PROP_VSCROLL_POLICY: if (view->vscroll_policy != g_value_get_enum(value)) { view->vscroll_policy = g_value_get_enum(value); gtk_widget_queue_resize(GTK_WIDGET(view)); g_object_notify_by_pspec(object, pspec); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static int fsearch_list_view_num_expanding_columns(FsearchListView *view) { int num_expanding = 0; for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } if (column->expand) { num_expanding++; } } return 0; } static void fsearch_list_view_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); gtk_widget_set_allocation(widget, allocation); int columns_width = fsearch_list_view_get_columns_effective_width(view); int view_width = gtk_widget_get_allocated_width(widget); int num_expanding = fsearch_list_view_num_expanding_columns(view); int x_extra_space = 0; if (num_expanding > 0 && view_width > columns_width) { x_extra_space = floor((view_width - columns_width) / (double)num_expanding); } const gboolean text_dir_rtl = fsearch_list_view_is_text_dir_rtl(view); const int x_offset = MAX(text_dir_rtl ? view_width - columns_width : 0, 0); int x = x_offset; view->min_list_width = 0; int header_font_height = 0; GList *columns = fsearch_list_view_get_columns_for_text_direction(view); // the header height is determined by the font size of the columns // they're probably the same size, so only looking at the first one would suffice, // but just to be sure we'll look for the maximum for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } header_font_height = MAX(header_font_height, get_font_height_for_widget(column->button)); } view->header_height = header_font_height + 2 * ROW_PADDING_Y; for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } GdkRectangle header_button_rect; header_button_rect.x = x; header_button_rect.y = 0; header_button_rect.width = column->width; header_button_rect.height = view->header_height; if (column->expand && !view->col_resize_mode) { header_button_rect.width += x_extra_space; } x += header_button_rect.width; column->effective_width = header_button_rect.width; view->min_list_width += column->effective_width; gtk_widget_size_allocate(column->button, &header_button_rect); if (gtk_widget_get_realized(column->button)) { int x_win = x - COLUMN_RESIZE_AREA_WIDTH / 2; if (fsearch_list_view_is_text_dir_rtl(view)) { x_win -= header_button_rect.width; } gdk_window_move_resize(column->window, x_win, header_button_rect.y, COLUMN_RESIZE_AREA_WIDTH, header_button_rect.height); } } if (gtk_widget_get_realized(widget)) { int font_height = get_font_height_for_widget(GTK_WIDGET(view)); view->row_height = font_height + 2 * ROW_PADDING_Y; view->list_height = view->row_height * view->num_rows; gdk_window_move_resize(gtk_widget_get_window(widget), allocation->x, allocation->y, allocation->width, allocation->height); gdk_window_move_resize(view->bin_window, -get_hscroll_pos(view), view->header_height, MAX(view->min_list_width, allocation->width), MAX(view->list_height, allocation->height - view->header_height)); gdk_window_move_resize(view->header_window, -get_hscroll_pos(view), 0, MAX(view->min_list_width, allocation->width), view->header_height); } fsearch_list_view_set_hadjustment_value(view); fsearch_list_view_set_vadjustment_value(view); if (fsearch_list_view_is_text_dir_rtl(view)) { const gdouble hadj_new_upper = gtk_adjustment_get_upper(view->hadjustment); gtk_adjustment_set_value(view->hadjustment, hadj_new_upper); } } static void fsearch_list_view_get_preferred_height(GtkWidget *widget, gint *minimum, gint *natural) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); *minimum = *natural = view->num_rows * view->row_height; } static void fsearch_list_view_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); *minimum = *natural = view->min_list_width; } static void fsearch_list_view_container_for_all(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data) { FsearchListView *view = FSEARCH_LIST_VIEW(container); if (!include_internals) { return; } for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; (*callback)(column->button, callback_data); } } static void fsearch_list_view_container_remove(GtkContainer *container, GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(container); for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (column->button == widget) { view->columns_reversed = g_list_remove(view->columns_reversed, column); gtk_widget_unparent(widget); return; } } } static void fsearch_list_view_map(GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); gtk_widget_set_mapped(widget, TRUE); for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!gtk_widget_get_visible(column->button) || gtk_widget_get_mapped(column->button)) { continue; } gtk_widget_map(column->button); gdk_window_raise(column->window); gdk_window_show(column->window); } gdk_window_show(view->bin_window); gdk_window_show(view->header_window); gdk_window_show(gtk_widget_get_window(widget)); } static void fsearch_list_view_grab_focus(GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); GTK_WIDGET_CLASS(fsearch_list_view_parent_class)->grab_focus(widget); } static gboolean fsearch_list_view_leave_notify_event(GtkWidget *widget, GdkEventCrossing *event) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); if (gtk_widget_get_realized(widget)) { gdk_window_set_cursor(view->bin_window, NULL); redraw_row(view, view->hovered_idx); } view->hovered_idx = UNSET_ROW; return GDK_EVENT_PROPAGATE; } static gboolean fsearch_list_view_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); const gint prev_hovered_idx = view->hovered_idx; if (event->window != view->bin_window) { view->hovered_idx = UNSET_ROW; } else { view->hovered_idx = fsearch_list_view_get_row_idx_for_y_canvas(view, (int)(event->y)); if (view->single_click_activate && view->hovered_idx >= 0) { g_autoptr(GdkCursor) cursor = gdk_cursor_new_for_display(gdk_window_get_display(event->window), GDK_HAND2); gdk_window_set_cursor(event->window, cursor); } else { gdk_window_set_cursor(event->window, NULL); } } if (prev_hovered_idx != view->hovered_idx) { redraw_row(view, prev_hovered_idx); redraw_row(view, view->hovered_idx); } return GTK_WIDGET_CLASS(fsearch_list_view_parent_class)->motion_notify_event(widget, event); } static void fsearch_list_view_unrealize_column(FsearchListView *view, FsearchListViewColumn *column) { gtk_widget_unregister_window(GTK_WIDGET(view), column->window); g_clear_pointer(&column->window, gdk_window_destroy); } static void fsearch_list_view_unrealize_columns(FsearchListView *view) { for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; fsearch_list_view_unrealize_column(view, column); } } static void fsearch_list_view_unrealize(GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); fsearch_list_view_unrealize_columns(view); gtk_widget_unregister_window(widget, view->bin_window); g_clear_pointer(&view->bin_window, gdk_window_destroy); gtk_widget_unregister_window(widget, view->header_window); g_clear_pointer(&view->header_window, gdk_window_destroy); gtk_gesture_set_window(view->multi_press_gesture, NULL); GTK_WIDGET_CLASS(fsearch_list_view_parent_class)->unrealize(widget); } static void fsearch_list_view_realize_column(FsearchListView *view, FsearchListViewColumn *col) { g_return_if_fail(gtk_widget_get_realized(GTK_WIDGET(view))); g_return_if_fail(col->button != NULL); gtk_widget_set_parent_window(col->button, view->header_window); GdkWindowAttr attrs; attrs.window_type = GDK_WINDOW_CHILD; attrs.wclass = GDK_INPUT_ONLY; attrs.visual = gtk_widget_get_visual(GTK_WIDGET(view)); attrs.event_mask = gtk_widget_get_events(GTK_WIDGET(view)) | (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK); guint attrs_mask = GDK_WA_CURSOR | GDK_WA_X | GDK_WA_Y; GdkDisplay *display = gdk_window_get_display(view->header_window); attrs.cursor = gdk_cursor_new_from_name(display, "col-resize"); attrs.y = 0; attrs.width = COLUMN_RESIZE_AREA_WIDTH; attrs.height = view->header_height; GtkAllocation allocation; gtk_widget_get_allocation(col->button, &allocation); if (fsearch_list_view_is_text_dir_rtl(view)) { attrs.x = (-COLUMN_RESIZE_AREA_WIDTH / 2); } else { attrs.x = allocation.width - COLUMN_RESIZE_AREA_WIDTH / 2; } col->window = gdk_window_new(view->header_window, &attrs, attrs_mask); gtk_widget_register_window(GTK_WIDGET(view), col->window); g_clear_object(&attrs.cursor); } static void fsearch_list_view_realize(GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); GtkAllocation allocation; GdkWindowAttr attrs; guint attrs_mask; gtk_widget_set_realized(widget, TRUE); gtk_widget_get_allocation(widget, &allocation); attrs.window_type = GDK_WINDOW_CHILD; attrs.x = allocation.x; attrs.y = allocation.y; attrs.width = allocation.width; attrs.height = allocation.height; attrs.wclass = GDK_INPUT_OUTPUT; attrs.visual = gtk_widget_get_visual(widget); attrs.event_mask = GDK_VISIBILITY_NOTIFY_MASK; attrs_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; GdkWindow *window = gdk_window_new(gtk_widget_get_parent_window(widget), &attrs, attrs_mask); gtk_widget_set_window(widget, window); gtk_widget_register_window(widget, window); gtk_widget_get_allocation(widget, &allocation); attrs.x = 0; attrs.y = view->header_height; attrs.width = MAX(view->min_list_width, allocation.width); attrs.height = MAX(view->list_height, allocation.height); attrs.event_mask = (GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | gtk_widget_get_events(widget)); view->bin_window = gdk_window_new(window, &attrs, attrs_mask); gtk_widget_register_window(widget, view->bin_window); attrs.x = 0; attrs.y = 0; attrs.width = MAX(view->min_list_width, allocation.width); attrs.height = view->header_height; attrs.event_mask = (GDK_EXPOSURE_MASK | GDK_SCROLL_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | gtk_widget_get_events(widget)); view->header_window = gdk_window_new(window, &attrs, attrs_mask); gtk_widget_register_window(widget, view->header_window); for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; fsearch_list_view_realize_column(view, column); } gtk_gesture_set_window(view->multi_press_gesture, view->bin_window); } static void fsearch_list_view_destroy(GtkWidget *widget) { FsearchListView *view = FSEARCH_LIST_VIEW(widget); g_list_free(g_steal_pointer(&view->columns_reversed)); g_list_free_full(g_steal_pointer(&view->columns), (GDestroyNotify)fsearch_list_view_column_unref); g_clear_object(&view->multi_press_gesture); g_clear_object(&view->bin_drag_gesture); g_clear_object(&view->header_drag_gesture); GTK_WIDGET_CLASS(fsearch_list_view_parent_class)->destroy(widget); } static void fsearch_list_view_class_init(FsearchListViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); GtkContainerClass *container_class = GTK_CONTAINER_CLASS(klass); object_class->set_property = fsearch_list_view_set_property; object_class->get_property = fsearch_list_view_get_property; g_object_class_override_property(object_class, PROP_HADJUSTMENT, "hadjustment"); g_object_class_override_property(object_class, PROP_VADJUSTMENT, "vadjustment"); g_object_class_override_property(object_class, PROP_HSCROLL_POLICY, "hscroll-policy"); g_object_class_override_property(object_class, PROP_VSCROLL_POLICY, "vscroll-policy"); widget_class->destroy = fsearch_list_view_destroy; widget_class->draw = fsearch_list_view_draw; widget_class->realize = fsearch_list_view_realize; widget_class->unrealize = fsearch_list_view_unrealize; widget_class->map = fsearch_list_view_map; widget_class->size_allocate = fsearch_list_view_size_allocate; widget_class->get_preferred_width = fsearch_list_view_get_preferred_width; widget_class->get_preferred_height = fsearch_list_view_get_preferred_height; widget_class->key_press_event = fsearch_list_view_key_press_event; widget_class->query_tooltip = fsearch_list_view_query_tooltip; widget_class->grab_focus = fsearch_list_view_grab_focus; widget_class->focus_out_event = fsearch_list_view_focus_out_event; widget_class->motion_notify_event = fsearch_list_view_motion_notify_event; widget_class->leave_notify_event = fsearch_list_view_leave_notify_event; container_class->forall = fsearch_list_view_container_for_all; container_class->remove = fsearch_list_view_container_remove; signals[FSEARCH_LIST_VIEW_SIGNAL_POPUP] = g_signal_new("row-popup", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); signals[FSEARCH_LIST_VIEW_SIGNAL_ROW_ACTIVATED] = g_signal_new("row-activated", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); #if GTK_CHECK_VERSION(3, 20, 0) gtk_widget_class_set_css_name(widget_class, "treeview"); #endif } static void fsearch_list_view_init(FsearchListView *view) { view->bin_window = NULL; view->hadjustment = NULL; view->vadjustment = NULL; view->num_rows = 0; view->row_height = ROW_HEIGHT_DEFAULT; view->header_height = ROW_HEIGHT_DEFAULT; view->cursor_idx = UNSET_ROW; view->highlight_cursor_idx = FALSE; view->extend_started_idx = UNSET_ROW; view->scroll_timeout = 0; view->min_list_width = 0; view->list_height = view->num_rows * view->row_height; gtk_widget_set_sensitive(GTK_WIDGET(view), TRUE); gtk_widget_set_can_focus(GTK_WIDGET(view), TRUE); view->multi_press_gesture = gtk_gesture_multi_press_new(GTK_WIDGET(view)); gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(view->multi_press_gesture), 0); g_signal_connect(view->multi_press_gesture, "pressed", G_CALLBACK(on_fsearch_list_view_multi_press_gesture_pressed), view); g_signal_connect(view->multi_press_gesture, "released", G_CALLBACK(on_fsearch_list_view_multi_press_gesture_released), view); view->bin_drag_gesture = gtk_gesture_drag_new(GTK_WIDGET(view)); g_signal_connect(view->bin_drag_gesture, "drag-begin", G_CALLBACK(on_fsearch_list_view_bin_drag_gesture_begin), view); g_signal_connect(view->bin_drag_gesture, "drag-update", G_CALLBACK(on_fsearch_list_view_bin_drag_gesture_update), view); g_signal_connect(view->bin_drag_gesture, "drag-end", G_CALLBACK(on_fsearch_list_view_bin_drag_gesture_end), view); view->header_drag_gesture = gtk_gesture_drag_new(GTK_WIDGET(view)); g_signal_connect(view->header_drag_gesture, "drag-begin", G_CALLBACK(on_fsearch_list_view_header_drag_gesture_begin), view); g_signal_connect(view->header_drag_gesture, "drag-update", G_CALLBACK(on_fsearch_list_view_header_drag_gesture_update), view); g_signal_connect(view->header_drag_gesture, "drag-end", G_CALLBACK(on_fsearch_list_view_header_drag_gesture_end), view); GtkStyleContext *style = gtk_widget_get_style_context(GTK_WIDGET(view)); gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW); gtk_style_context_add_class(style, GTK_STYLE_CLASS_LINKED); // gtk_style_context_add_class(style, GTK_STYLE_CLASS_CELL); } FsearchListView * fsearch_list_view_new(GtkAdjustment *hadjustment, GtkAdjustment *vadjustment) { return g_object_new(FSEARCH_TYPE_LIST_VIEW, "hadjustment", hadjustment, "vadjustment", vadjustment, NULL); } static void fsearch_list_view_scrollable_init(GtkScrollableInterface *iface) { iface->get_border = fsearch_list_view_get_border; } static void fsearch_list_view_column_free(FsearchListViewColumn *col) { if (!col) { return; } g_clear_pointer(&col->name, g_free); g_clear_object(&col->button); g_clear_pointer(&col, free); } void fsearch_list_view_remove_column(FsearchListView *view, FsearchListViewColumn *col) { if (!view || !col) { return; } if (view != col->view) { return; } view->columns_reversed = g_list_remove(view->columns_reversed, col); view->columns = g_list_remove(view->columns, col); if (col->visible) { view->min_list_width -= col->width; } if (gtk_widget_get_realized(GTK_WIDGET(view))) { fsearch_list_view_unrealize_column(view, col); gtk_widget_queue_resize(GTK_WIDGET(view)); } fsearch_list_view_column_unref(g_steal_pointer(&col)); } void fsearch_list_view_column_set_tooltip(FsearchListViewColumn *col, const char *tooltip) { if (!col) { return; } gtk_widget_set_tooltip_markup(col->button, tooltip); } void fsearch_list_view_column_set_emblem(FsearchListViewColumn *col, const char *emblem_name, gboolean visible) { if (!col) { return; } gtk_image_set_from_icon_name(GTK_IMAGE(col->emblem), emblem_name, GTK_ICON_SIZE_BUTTON); if (visible) { gtk_widget_show(col->emblem); } else { gtk_widget_hide(col->emblem); } } void fsearch_list_view_column_set_visible(FsearchListView *view, FsearchListViewColumn *col, gboolean visible) { if (!view || !col) { return; } if (view != col->view) { return; } if (col->visible == visible) { return; } if (col->visible) { gtk_widget_hide(col->button); view->min_list_width -= col->width; } else { gtk_widget_show(col->button); view->min_list_width += col->width; } if (gtk_widget_get_realized(GTK_WIDGET(view))) { gdk_window_raise(col->window); } col->visible = visible; gtk_widget_queue_resize(GTK_WIDGET(view)); } static void fsearch_list_view_reset_sort_indicator(FsearchListView *view) { for (GList *col = view->columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; gtk_widget_hide(column->arrow); gtk_widget_set_sensitive(column->button, TRUE); if (gtk_widget_get_realized(GTK_WIDGET(view))) { gdk_window_raise(column->window); } } } static void fsearch_list_view_update_sort_indicator(FsearchListView *view) { FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(view, view->sort_order); if (!col) { return; } fsearch_list_view_reset_sort_indicator(view); gtk_image_set_from_icon_name(GTK_IMAGE(col->arrow), view->sort_type == GTK_SORT_DESCENDING ? "pan-up-symbolic" : "pan-down-symbolic", GTK_ICON_SIZE_BUTTON); gtk_widget_show(col->arrow); } static void on_fsearch_list_view_header_button_clicked(GtkButton *button, gpointer user_data) { FsearchListViewColumn *col = user_data; GtkSortType current_sort_type = col->view->sort_type; int current_sort_order = col->view->sort_order; if (col->view->sort_func) { if (current_sort_order == col->type) { col->view->sort_func(col->type, !current_sort_type, col->view->sort_func_data); } else { col->view->sort_func(col->type, GTK_SORT_ASCENDING, col->view->sort_func_data); } } gtk_image_set_from_icon_name(GTK_IMAGE(col->arrow), "content-loading-symbolic", GTK_ICON_SIZE_BUTTON); gtk_widget_show(col->arrow); gtk_widget_set_sensitive(col->button, FALSE); } static gboolean on_fsearch_list_view_header_button_pressed(GtkWidget *widget, GdkEvent *event, gpointer user_data) { if (gdk_event_triggers_context_menu(event)) { g_autoptr(GtkBuilder) builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/menus.ui"); GMenuModel *menu_model = G_MENU_MODEL(gtk_builder_get_object(builder, "fsearch_listview_column_popup_menu")); FsearchListViewColumn *col = user_data; GtkWidget *list = GTK_WIDGET(col->view); GtkWidget *menu_widget = gtk_menu_new_from_model(G_MENU_MODEL(menu_model)); gtk_menu_attach_to_widget(GTK_MENU(menu_widget), list, NULL); #if !GTK_CHECK_VERSION(3, 22, 0) guint button; guint32 time = gdk_event_get_time(event); gdk_event_get_button(event, &button); gtk_menu_popup(GTK_MENU(menu_widget), NULL, NULL, NULL, NULL, button, time); #else gtk_menu_popup_at_pointer(GTK_MENU(menu_widget), NULL); #endif return GDK_EVENT_STOP; } return GDK_EVENT_PROPAGATE; } FsearchListViewColumn * fsearch_list_view_get_first_column_for_type(FsearchListView *view, int type) { if (!view) { return NULL; } GList *columns = fsearch_list_view_get_columns_for_text_direction(view); for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (column->type == type) { return column; } } return NULL; } void fsearch_list_view_append_column(FsearchListView *view, FsearchListViewColumn *col) { if (!view || !col) { return; } col->view = view; view->columns = g_list_append(view->columns, col); view->columns_reversed = g_list_prepend(view->columns_reversed, col); if (col->visible) { view->min_list_width += col->width; } g_signal_connect(G_OBJECT(col->button), "clicked", G_CALLBACK(on_fsearch_list_view_header_button_clicked), col); g_signal_connect(G_OBJECT(col->button), "button-press-event", G_CALLBACK(on_fsearch_list_view_header_button_pressed), col); gtk_widget_set_parent(col->button, GTK_WIDGET(view)); gtk_widget_set_parent_window(col->button, view->header_window); if (gtk_widget_get_realized(GTK_WIDGET(view))) { fsearch_list_view_realize_column(view, col); } gtk_widget_queue_resize(col->button); gtk_widget_queue_resize(GTK_WIDGET(view)); } void fsearch_list_view_set_config(FsearchListView *view, uint32_t num_rows, int sort_order, GtkSortType sort_type) { if (!view) { return; } view->cursor_idx = UNSET_ROW; view->highlight_cursor_idx = FALSE; view->extend_started_idx = UNSET_ROW; view->num_rows = num_rows; view->list_height = num_rows * view->row_height; gtk_adjustment_set_value(view->vadjustment, 0); view->sort_order = sort_order; view->sort_type = sort_type; fsearch_list_view_update_sort_indicator(view); gtk_widget_queue_resize(GTK_WIDGET(view)); } void fsearch_list_view_set_query_tooltip_func(FsearchListView *view, FsearchListViewQueryTooltipFunc func, gpointer func_data) { if (!view) { return; } view->query_tooltip_func = func; view->query_tooltip_func_data = func_data; } void fsearch_list_view_set_draw_row_func(FsearchListView *view, FsearchListViewDrawRowFunc draw_row_func, gpointer draw_row_func_data) { if (!view) { return; } view->draw_row_func = draw_row_func; view->draw_row_func_data = draw_row_func_data; } void fsearch_list_view_set_sort_func(FsearchListView *view, FsearchListViewSortFunc sort_func, gpointer sort_func_data) { if (!view) { return; } view->sort_func = sort_func; view->sort_func_data = sort_func_data; } void fsearch_list_view_set_selection_handlers(FsearchListView *view, FsearchListViewIsSelectedFunc is_selected_func, FsearchListViewSelectFunc select_func, FsearchListViewSelectToggleFunc select_toggle_func, FsearchListViewSelectRangeFunc select_range_func, FsearchListViewSelectRangeFunc toggle_range_func, FsearchListViewUnselectAllFunc unselect_func, FsearchListViewNumSelectedFunc num_selected_func, gpointer user_data) { if (!view) { return; } view->is_selected_func = is_selected_func; view->select_func = select_func; view->select_toggle_func = select_toggle_func; view->select_range_func = select_range_func; view->toggle_range_func = toggle_range_func; view->unselect_func = unselect_func; view->num_selected_func = num_selected_func; view->selection_user_data = user_data; if (is_selected_func && select_func && select_toggle_func && unselect_func) { view->has_selection_handlers = TRUE; } else { view->has_selection_handlers = FALSE; } } gint fsearch_list_view_get_cursor(FsearchListView *view) { if (!view) { return 0; } return view->cursor_idx; } void fsearch_list_view_set_cursor(FsearchListView *view, int row_idx) { if (!view) { return; } view->highlight_cursor_idx = TRUE; view->cursor_idx = CLAMP(row_idx, 0, get_last_row_idx(view)); fsearch_list_view_selection_add(view, view->cursor_idx); fsearch_list_view_scroll_row_into_view(view, row_idx); } int fsearch_list_view_get_sort_order(FsearchListView *view) { return view->sort_order; } GtkSortType fsearch_list_view_get_sort_type(FsearchListView *view) { return view->sort_type; } void fsearch_list_view_set_single_click_activate(FsearchListView *view, gboolean value) { if (!view) { return; } view->single_click_activate = value; } FsearchListViewColumn * fsearch_list_view_column_ref(FsearchListViewColumn *col) { if (!col || g_atomic_int_get(&col->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&col->ref_count); return col; } void fsearch_list_view_column_unref(FsearchListViewColumn *col) { if (!col || g_atomic_int_get(&col->ref_count) <= 0) { return; } if (g_atomic_int_dec_and_test(&col->ref_count)) { g_clear_pointer(&col, fsearch_list_view_column_free); } } FsearchListViewColumn * fsearch_list_view_column_new(int type, char *name, PangoAlignment alignment, PangoEllipsizeMode ellipsize_mode, gboolean visible, gboolean expand, uint32_t width) { FsearchListViewColumn *col = calloc(1, sizeof(FsearchListViewColumn)); g_assert(col); col->button = gtk_button_new(); gtk_widget_show(col->button); GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); col->emblem = gtk_image_new_from_icon_name("emblem-important", GTK_ICON_SIZE_BUTTON); gtk_widget_set_opacity(col->emblem, 0.3); col->arrow = gtk_image_new_from_icon_name("pan-down-symbolic", GTK_ICON_SIZE_BUTTON); GtkWidget *label = gtk_label_new(name); gtk_label_set_xalign(GTK_LABEL(label), 0.f); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), col->emblem, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), col->arrow, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(col->button), hbox); gtk_widget_show(hbox); gtk_widget_show(label); col->type = type; col->name = g_strdup(name ? name : ""); col->alignment = alignment; col->ellipsize_mode = ellipsize_mode; col->width = width; col->expand = expand; col->visible = visible; col->ref_count = 1; return col; } fsearch-0.2.3/src/fsearch_list_view.h000066400000000000000000000121421446344336300176010ustar00rootroot00000000000000#pragma once #include #include #define ROW_PADDING_Y 4 #define ROW_PADDING_X 3 G_BEGIN_DECLS #define FSEARCH_TYPE_LIST_VIEW (fsearch_list_view_get_type()) G_DECLARE_FINAL_TYPE(FsearchListView, fsearch_list_view, FSEARCH, LIST_VIEW, GtkContainer) G_END_DECLS typedef struct { GtkWidget *button; GtkWidget *arrow; GtkWidget *emblem; FsearchListView *view; int type; char *name; gint width; gint effective_width; gboolean expand; gboolean visible; PangoAlignment alignment; PangoEllipsizeMode ellipsize_mode; GdkWindow *window; volatile gint ref_count; } FsearchListViewColumn; typedef char *(*FsearchListViewQueryTooltipFunc)(PangoLayout *layout, uint32_t row_height, uint32_t row, FsearchListViewColumn *col, gpointer user_data); typedef void (*FsearchListViewDrawRowFunc)(cairo_t *cr, GdkWindow *bin_window, PangoLayout *layout, GtkStyleContext *context, GList *columns, cairo_rectangle_int_t *rect, uint32_t row, gboolean row_selected, gboolean row_focused, gboolean row_hovered, gboolean right_to_left_text, gpointer user_data); typedef void (*FsearchListViewSortFunc)(int sort_order, GtkSortType sort_type, gpointer user_data); // selection handlers typedef gboolean (*FsearchListViewIsSelectedFunc)(int row_idx, gpointer user_data); typedef void (*FsearchListViewSelectFunc)(int row_idx, gpointer user_data); typedef void (*FsearchListViewSelectToggleFunc)(int row_idx, gpointer user_data); typedef void (*FsearchListViewSelectRangeFunc)(int start_idx, int end_idx, gpointer user_data); typedef void (*FsearchListViewUnselectAllFunc)(gpointer user_data); typedef guint (*FsearchListViewNumSelectedFunc)(gpointer user_data); FsearchListViewColumn * fsearch_list_view_column_ref(FsearchListViewColumn *col); void fsearch_list_view_column_unref(FsearchListViewColumn *col); FsearchListViewColumn * fsearch_list_view_column_new(int type, char *name, PangoAlignment alignment, PangoEllipsizeMode ellipsize_mode, gboolean visible, gboolean expand, uint32_t width); FsearchListView * fsearch_list_view_new(); void fsearch_list_view_set_selection_handlers(FsearchListView *view, FsearchListViewIsSelectedFunc is_selected_func, FsearchListViewSelectFunc select_func, FsearchListViewSelectToggleFunc select_toggle_func, FsearchListViewSelectRangeFunc select_range_func, FsearchListViewSelectRangeFunc toggle_range_func, FsearchListViewUnselectAllFunc unselect_func, FsearchListViewNumSelectedFunc num_selected_func, gpointer user_data); void fsearch_list_view_column_set_visible(FsearchListView *view, FsearchListViewColumn *col, gboolean visible); void fsearch_list_view_column_set_tooltip(FsearchListViewColumn *col, const char *tooltip); void fsearch_list_view_column_set_emblem(FsearchListViewColumn *col, const char *emblem_name, gboolean visible); void fsearch_list_view_remove_column(FsearchListView *view, FsearchListViewColumn *col); void fsearch_list_view_append_column(FsearchListView *view, FsearchListViewColumn *col); FsearchListViewColumn * fsearch_list_view_get_first_column_for_type(FsearchListView *view, int type); void fsearch_list_view_set_config(FsearchListView *view, uint32_t num_rows, int sort_order, GtkSortType sort_type); gint fsearch_list_view_get_cursor(FsearchListView *view); void fsearch_list_view_set_cursor(FsearchListView *view, int row_idx); void fsearch_list_view_set_single_click_activate(FsearchListView *view, gboolean value); int fsearch_list_view_get_sort_order(FsearchListView *view); GtkSortType fsearch_list_view_get_sort_type(FsearchListView *view); void fsearch_list_view_set_sort_func(FsearchListView *view, FsearchListViewSortFunc func, gpointer sort_func_data); void fsearch_list_view_set_query_tooltip_func(FsearchListView *view, FsearchListViewQueryTooltipFunc func, gpointer func_data); void fsearch_list_view_set_draw_row_func(FsearchListView *view, FsearchListViewDrawRowFunc func, gpointer func_data); fsearch-0.2.3/src/fsearch_listview_popup.c000066400000000000000000000172651446344336300206730ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include #include "fsearch.h" #include "fsearch_listview_popup.h" static void add_file_properties_entry(GtkBuilder *builder) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; if (app && fsearch_application_has_file_manager_on_bus(app)) { GMenu *menu_properties_section = G_MENU( gtk_builder_get_object(builder, "fsearch_listview_menu_file_properties_section")); if (menu_properties_section) { g_autoptr(GMenuItem) properties_item = g_menu_item_new(_("Properties…"), "win.file_properties"); g_menu_append_item(menu_properties_section, properties_item); } } } struct content_type_context { GHashTable *content_types; GHashTable *applications; bool first_run; }; static gboolean should_remove_application_for_application_list(gpointer key, gpointer value, gpointer user_data) { GList *app_infos = user_data; const char *current_app_id = key; for (GList *app_info_iter = app_infos; app_info_iter; app_info_iter = app_info_iter->next) { GAppInfo *app_info = app_info_iter->data; const char *app_id = g_app_info_get_id(app_info); if (!g_strcmp0(app_id, current_app_id)) { return FALSE; } } return TRUE; } static void refresh_applications_for_content_type(GHashTable *applications, const char *content_type, bool first_run) { GList *app_infos = g_app_info_get_all_for_type(content_type); if (!app_infos) { // there are no applications which can open this content type, // so we must remove everything from the hash table and return g_hash_table_remove_all(applications); return; } if (first_run) { // we can safely add all applications for the first entry we process for (GList *app_info_iter = app_infos; app_info_iter; app_info_iter = app_info_iter->next) { GAppInfo *app_info = app_info_iter->data; const char *app_id = g_app_info_get_id(app_info); g_hash_table_insert(applications, g_strdup(app_id), g_object_ref(app_info)); } } else { // remove all applications which don't support the current content type g_hash_table_foreach_remove(applications, should_remove_application_for_application_list, app_infos); } g_list_free_full(g_steal_pointer(&app_infos), g_object_unref); } static void intersect_supported_appliations(gpointer key, gpointer value, gpointer user_data) { FsearchDatabaseEntry *entry = value; if (G_UNLIKELY(!entry)) { return; } struct content_type_context *ctx = user_data; if (!ctx->first_run && g_hash_table_size(ctx->applications) == 0) { // there are already no applications which can open all processed entries, // hence we don't need to process the remaining entries return; } if (db_entry_get_type(entry) == DATABASE_ENTRY_TYPE_FOLDER) { // we already know the content type for folders, so we can use a slightly more // efficient and reliable path for them here const char *dir_content_type = "inode/directory"; if (!g_hash_table_contains(ctx->content_types, dir_content_type)) { // no folder content type was added up until now, let's add one g_hash_table_add(ctx->content_types, g_strdup(dir_content_type)); // refresh the table of applications which can open all selected entries refresh_applications_for_content_type(ctx->applications, dir_content_type, ctx->first_run); ctx->first_run = false; } return; } g_autoptr(GString) name = db_entry_get_name_for_display(entry); g_return_if_fail(name); g_autofree char *content_type = g_content_type_guess(name->str, NULL, 0, NULL); if (!g_hash_table_contains(ctx->content_types, content_type)) { // a new content type, add it g_hash_table_add(ctx->content_types, content_type); // refresh the table of applications which can open all selected entries refresh_applications_for_content_type(ctx->applications, g_steal_pointer(&content_type), ctx->first_run); ctx->first_run = false; } } static void append_application_to_menu(gpointer key, gpointer value, gpointer user_data) { GMenu *menu_mime = user_data; GAppInfo *app_info = value; const char *display_name = g_app_info_get_display_name(app_info); const char *app_id = g_app_info_get_id(app_info); char detailed_action[1024] = ""; snprintf(detailed_action, sizeof(detailed_action), "win.open_with('%s')", app_id); g_autoptr(GMenuItem) menu_item = g_menu_item_new(display_name, detailed_action); g_menu_item_set_icon(menu_item, g_app_info_get_icon(app_info)); g_menu_append_item(menu_mime, menu_item); } static void fill_open_with_menu(GtkBuilder *builder, FsearchDatabaseView *db_view) { struct content_type_context content_type_ctx = {}; content_type_ctx.content_types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); content_type_ctx.applications = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); content_type_ctx.first_run = true; // find applications which can open all selected files // this basically computes the intersection of the lists of applications for each entry db_view_selection_for_each(db_view, intersect_supported_appliations, &content_type_ctx); g_hash_table_remove_all(content_type_ctx.content_types); g_clear_pointer(&content_type_ctx.content_types, g_hash_table_destroy); GMenu *menu_mime = G_MENU(gtk_builder_get_object(builder, "fsearch_listview_menu_open_with_mime_section")); // add the application menu entries to the menu g_hash_table_foreach(content_type_ctx.applications, append_application_to_menu, menu_mime); g_hash_table_remove_all(content_type_ctx.applications); g_clear_pointer(&content_type_ctx.applications, g_hash_table_destroy); // add the "Open with -> Other Application" entry char detailed_action[1024] = ""; snprintf(detailed_action, sizeof(detailed_action), "win.open_with_other('%s')", ""); g_autoptr(GMenuItem) open_with_item = g_menu_item_new(_("Other Application…"), detailed_action); g_menu_append_item(menu_mime, open_with_item); } gboolean listview_popup_menu(GtkWidget *widget, FsearchDatabaseView *db_view) { g_autoptr(GtkBuilder) builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/menus.ui"); fill_open_with_menu(builder, db_view); add_file_properties_entry(builder); GMenu *menu_root = G_MENU(gtk_builder_get_object(builder, "fsearch_listview_popup_menu")); GtkWidget *menu_widget = gtk_menu_new_from_model(G_MENU_MODEL(menu_root)); gtk_menu_attach_to_widget(GTK_MENU(menu_widget), GTK_WIDGET(widget), NULL); #if !GTK_CHECK_VERSION(3, 22, 0) gtk_menu_popup(GTK_MENU(menu_widget), NULL, NULL, NULL, NULL, GDK_BUTTON_SECONDARY, time); #else gtk_menu_popup_at_pointer(GTK_MENU(menu_widget), NULL); #endif return TRUE; } fsearch-0.2.3/src/fsearch_listview_popup.h000066400000000000000000000016451446344336300206730ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #ifdef HAVE_CONFIG_H #include #endif #include "fsearch_database_view.h" #include gboolean listview_popup_menu(GtkWidget *widget, FsearchDatabaseView *db_view); fsearch-0.2.3/src/fsearch_memory_pool.c000066400000000000000000000062651446344336300201410ustar00rootroot00000000000000#include "fsearch_memory_pool.h" #include #include typedef struct FsearchMemoryPoolFreed { struct FsearchMemoryPoolFreed *next; } FsearchMemoryPoolFreed; typedef struct { uint32_t num_used; uint32_t capacity; void *items; } FsearchMemoryPoolBlock; struct FsearchMemoryPool { GList *blocks; FsearchMemoryPoolFreed *freed_items; uint32_t block_size; size_t item_size; GDestroyNotify item_free_func; }; void fsearch_memory_pool_new_block(FsearchMemoryPool *pool) { FsearchMemoryPoolBlock *block = calloc(1, sizeof(FsearchMemoryPoolBlock)); g_assert(block); block->items = calloc(pool->block_size + 1, pool->item_size); g_assert(block->items); block->num_used = 0; block->capacity = pool->block_size; pool->blocks = g_list_prepend(pool->blocks, block); } FsearchMemoryPool * fsearch_memory_pool_new(uint32_t block_size, size_t item_size, GDestroyNotify item_free_func) { FsearchMemoryPool *pool = calloc(1, sizeof(FsearchMemoryPool)); g_assert(pool); pool->item_free_func = item_free_func; pool->block_size = block_size; pool->item_size = MAX(item_size, sizeof(FsearchMemoryPoolFreed)); fsearch_memory_pool_new_block(pool); return pool; } static void fsearch_memory_pool_free_block(FsearchMemoryPool *pool, FsearchMemoryPoolBlock *block) { if (pool->item_free_func) { for (int i = 0; i < block->num_used; i++) { void *data = block->items + i * pool->item_size; if (!data) { break; } pool->item_free_func(data); } } g_clear_pointer(&block->items, free); g_clear_pointer(&block, free); } void fsearch_memory_pool_free_pool(FsearchMemoryPool *pool) { if (!pool) { return; } for (GList *b = pool->blocks; b != NULL; b = b->next) { FsearchMemoryPoolBlock *block = b->data; g_assert(block); fsearch_memory_pool_free_block(pool, g_steal_pointer(&block)); } pool->freed_items = NULL; g_clear_pointer(&pool->blocks, g_list_free); g_clear_pointer(&pool, free); } bool fsearch_memory_pool_is_block_full(FsearchMemoryPool *pool) { FsearchMemoryPoolBlock *block = pool->blocks->data; g_assert(block); if (block->num_used < block->capacity) { return false; } return true; } void fsearch_memory_pool_free(FsearchMemoryPool *pool, void *item, bool item_clear) { if (!pool || !item) { return; } if (item_clear && pool->item_free_func) { pool->item_free_func(item); } FsearchMemoryPoolFreed *freed_items = pool->freed_items; pool->freed_items = item; pool->freed_items->next = freed_items; } void * fsearch_memory_pool_malloc(FsearchMemoryPool *pool) { if (!pool) { return NULL; } if (pool->freed_items) { void *freed_head = pool->freed_items; pool->freed_items = pool->freed_items->next; return freed_head; } if (!pool->blocks || fsearch_memory_pool_is_block_full(pool)) { fsearch_memory_pool_new_block(pool); } FsearchMemoryPoolBlock *block = pool->blocks->data; g_assert(block); return block->items + block->num_used++ * pool->item_size; } fsearch-0.2.3/src/fsearch_memory_pool.h000066400000000000000000000007271446344336300201430ustar00rootroot00000000000000#pragma once #include #include #include #include typedef struct FsearchMemoryPool FsearchMemoryPool; FsearchMemoryPool * fsearch_memory_pool_new(uint32_t block_size, size_t item_size, GDestroyNotify item_free_func); void fsearch_memory_pool_free(FsearchMemoryPool *pool, void *item, bool item_clear); void fsearch_memory_pool_free_pool(FsearchMemoryPool *pool); void * fsearch_memory_pool_malloc(FsearchMemoryPool *pool); fsearch-0.2.3/src/fsearch_overlay.ui000066400000000000000000000351621446344336300174520ustar00rootroot00000000000000 True False folder-new-symbolic True False 30 100 crossfade False center center True True 12 True False 72 system-file-manager-symbolic 0 0 True False Empty Database 0 1 Add folders True True True app.preferences uint32 2 image1 True 0 2 page0 page0 False center center True True 12 True False 72 emblem-synchronizing-symbolic 0 0 True False Loading Database… 0 1 True False This won't take long. 0 2 page1 page1 1 False center center True True 12 True False 72 emblem-synchronizing-symbolic 0 0 True False Updating Database… 0 1 True False This may take a while. 0 2 page2 page2 2 True False 30 100 crossfade False center center True True 12 True False 72 edit-find-symbolic 0 0 True False Empty Query 0 1 True False Press <b>Ctrl + F</b> and start typing. True 0 2 page0 page0 False center center True True 12 True False 72 edit-find-symbolic 0 0 True False No Results Found 0 1 True False Try a different search 0 2 page1 page1 1 False center center 30 True True 12 True False 72 emblem-synchronizing-symbolic 0 0 True False Sorting results… 0 1 True False This may take a while. 0 2 fsearch-0.2.3/src/fsearch_preferences.ui000066400000000000000000003333461446344336300202770ustar00rootroot00000000000000 300 10 100 99 1 6 True False list-add-symbolic True False list-remove-symbolic True False list-add-symbolic True False list-remove-symbolic True False list-add-symbolic True False list-remove-symbolic True False document-edit-symbolic True False document-revert-symbolic 59 30 1 10 False Preferences True True dialog False 4 4 4 4 vertical 7 False end False False 1 True True True True False 6 6 6 6 6 6 True True False 0 none True False 12 4 6 6 True False vertical 2 Enable dark theme True True False True True False True 0 Enable client-side decorations (requires restart) True True False True True False True 1 Use binary units instead of decimal units True True False True end True False True 2 Remember window size True True False True True False True 3 Exit on Escape True True False True True False True 4 True False True 0 none True False 12 6 6 6 True False False vertical 2 with keyboard shortcuts or menu entries True True False 24 True False True 1 with double click True True False 24 True False True 2 True False 6 6 True False start Behaviour after successfully opening a file: False True 0 True False start True 0 Nothing Minimize Close False True 1 False True 5 True False General: 0 0 2 True False 0 none True False 12 4 6 6 True False vertical 2 Show highlighted search terms True True False True end True False True 0 Show tooltips True True False True True False True 1 Show icons in name column True True False True True False True 2 Remember column configuration True True False True True False True 3 Remember sort order True True False True True False True 4 Open path with double click in path column True True False True True False True 5 Single click to open True True False True True False True 6 Launch desktop files True True False True True False True 7 True False Results: 0 1 True False vertical 6 True False 0 none True False 12 12 4 6 6 True False vertical 2 Show database indexing status True True False True True False True 0 True False Statusbar: False True 0 True False 0 none True False 12 12 4 6 6 True False vertical 2 True False start 6 6 Show warning dialogs when: False True 0 file / folder failed to open True True False True 24 24 True False True 1 True False Dialogs: False True 1 1 1 True False Interface False True False 6 6 6 6 2 6 Search in path when query contains path separators True True False True True 0 0 Search as you type True True False True True 0 3 Hide results when search is empty True True False True True 0 2 Match case when query contains at least one upper case character True True False True True 0 1 True False 6 True 0 none True False True True False 6 6 6 6 vertical 200 200 True True True in True True True False True 0 True False True True True Add new filter image5 True False True 0 True False True True Remove selected filter image6 True False True 1 True False True True Edit selected filter image7 False True 2 True True True Restore default filters image8 False True 3 False True 1 True True 0 True False Filter: 0 4 1 True False Search 1 False True False 6 6 6 6 vertical 6 Update database on start True True False True True False True 0 True False True Update every True True False True True False True 0 True False 6 True True 0 digits hour_adjustment 1 True True False True 1 True False hour(s) and False True 2 True True 30 number minute_adjustment 1 True True 30 False True 3 True False minute(s) False True 4 False True 1 False True 1 True True left True False 6 6 6 6 vertical 500 250 True True True True in True True True True False True 0 True False True True True Add path to be included in database image1 True False True 0 True False True True Remove selected path image2 True False True 1 False True 1 True False Include False True False 6 6 6 6 vertical 6 True False vertical 500 250 True True True True in True True True True False True 0 True False True True True Add path to be excluded from database image3 True False True 0 True False True True Remove selected path image4 True False True 1 False True 1 False True 0 True False 4 True False Supports wildcards. Multiple entries must be separated by ';' Exclude files: False True 0 True True Supports wildcards. Multiple entries must be separated by ';' e.g. ".git;*.tmp" True True 1 False True 1 Exclude hidden files and folders True True False True True False True 2 1 True False Exclude 1 False True True 2 2 True False Database 2 False True True 0 True True True True False 24 24 6 6 crossfade True False <b>Enable dark theme:</b> If enabled, the system theme is asked to use a darker styling for the application <i>(i.e. dark UI elements on bright text)</i>. Note that not all system themes provide such a darker variant, therefore enabling this setting might not have an effect. True True True page0 page0 True False <b>Enable client-side decorations:</b> If enabled, the search entry and main menu are displayed in the window title bar. If disabled, the main menu is displayed as a menu bar with the search entry below it. This resembles a more traditional UI layout and takes a little bit more space. True True True page1 page1 1 True False <b>Use binary units instead of decimal units:</b> This settings controls how file sizes are displayed. • <b>Binary units:</b> This refers to binary IEC prefixes <i>(e.g. 1 KiB = 1024 bytes)</i> • <b>Decimal units:</b> This refers to decimal SI prefixes <i>(e.g. 1 kB = 1000 bytes)</i> True True True page2 page2 2 True False <b>Remember window size:</b> If enabled, the window size from the previous session will be restored when you open an FSearch window. Note that some window managers ignore this request and force the window to have a different size. True True True page3 page3 3 True False <b>Behaviour after successfully opening a file:</b> When a file/folder was successfully opened one of the following actions can be performed: • <b>Nothing:</b> Nothing happens. • <b>Minimize:</b> The currently selected FSearch window becomes minimized. • <b>Close:</b> Quit FSearch. You can configure if those actions should be triggered when the file was opened with • <b>keyboard shortcuts or menu entries</b> and/or • <b>mouse click</b> True True True page4 page4 4 True False <b>Show highlighted search terms:</b> If enabled, the search terms will be highlighted in the results view. For example when you search for "foo" all appearances of <i>foo</i> in file/folder names will be highlighted with bold characters: <b>foo</b>bar.txt file.<b>foo</b> This also works for regular expressions and wildcard expressions starting or ending with an asterisk. True True True page5 page5 5 True False <b>Show tooltips:</b> If enabled, the results view will show the full path of the focused file/folder in a small tooltip window. True True True page6 page6 6 True False <b>Show icons in name column:</b> If enabled, file/folder icons will be shown in the name column. True True True page7 page7 7 True False <b>Remember column configuration:</b> If enabled, the column configuration of the results view from the previous session will be restored when you open an FSearch window. This includes the size and visibility of all columns. True True True page8 page8 8 True False <b>Remember sort order:</b> If enabled, the sort order of the results view from the previous session will be restored when you open an FSearch window. True True True page9 page9 9 True False <b>Open path with double click in path column:</b> If enabled, double clicking in the path column will open the selected path. True True True page10 page10 10 True False <b>Single click to open:</b> If enabled, a single click will open the selected file/folder. If you only want to select a file/folder while this setting is active, you need to a hold <i>Ctrl</i> at the same time while clicking the file/folder. True True True page11 page11 11 True False <b>Show database indexing status:</b> If enabled, the path that is currently being indexed is displayed in the statusbar. True True True page12 page12 12 True False <b>Show warning dialogs:</b> If enabled, a warning dialog is displayed when a file or folder failed to open. True True True page13 page13 13 True False <b>Search in path when query contains path separators:</b> If enabled, search terms containing path separators (i.e. "/") will be automatically matched against the full path of a file or folder. True True True page14 page14 14 True False <b>Match case when query contains at least one upper case character:</b> If enabled, search terms containing at least one upper case character will trigger a case-sensitive search. This means a search term like <i>Foo</i> will match <i>FooBar.txt</i> but not <i>foobar.txt</i>. True True True page15 page15 15 True False <b>Hide results when search is empty:</b> If enabled, no search results are displayed when the search entry is empty. If disabled, all files and folders will be displayed when the search entry is empty. True True True page16 page16 16 True False <b>Search as you type:</b> If enabled, the search is automatically updated with every keystroke. If disabled, the search is only updated when you hit <i>Enter</i> or press the search button. True True True page17 page17 17 True False <b>Update database on start:</b> If enabled, the database will be updated automatically in the background when you start FSearch. True True True page19 page19 18 True False <b>Included folders:</b> This list contains all folders you want to include in the database. • <b>Active:</b> If enabled, the path will included in the database to be searched in. • <b>Path:</b> The full path to be included. • <b>One Filesystem:</b> If enabled, FSearch won't cross filesystem boundaries for this folder True True True page20 page20 19 True False <b>Add folder to database:</b> This button opens a dialog where you can select a folder you want to include in the database for searching. True True True page21 page21 20 True False <b>Remove selected row:</b> This removes the selected folder from the list of included folders. True True True page22 page22 21 True False <b>Excluded folders:</b> This list contains all folders you want to exclude from the database. • <b>Active:</b> If enabled, the path will excluded from the database and can't be searched in. • <b>Path:</b> The full path to be excluded. True True True page23 page23 22 True False <b>Exclude folder from database:</b> This button opens a dialog where you can select a folder you want to exclude from the database. True True True page24 page24 23 True False <b>Remove selected row:</b> This removes the selected folder from the list of excluded folders. True True True page25 page25 24 True False <b>Exclude files and folders from database:</b> This is a semi-colon separated list of files (or folders) you want to exclude from the database. For example <i>.git;.cache;*.swp</i> will exclude all files or folders which are called either <i>.git</i> or <i>.cache</i> or end with <i>.swp</i>. True True True page26 page26 25 True False <b>Exclude hidden files and folders:</b> If enabled, hidden files and folders will be excluded from the database <i>(i.e. all files or folders which start with a dot character)</i>. True True True page27 page27 26 True False Focus a setting to get a detailed description of what it does. True page28 page28 27 True False <b>Periodically update database at a specific time interval:</b> If enabled and as long as FSearch is running, the database will be updated periodically with the given time interval. If you want to update the database in the background, even when FSearch is not running, you should use tools like cron or systemd timers to periodically trigger the update with: <i><tt>fsearch --update-database</tt></i> True True True page29 page29 28 True False <b>Launch desktop files:</b> If enabled, activating a <i>.desktop</i> file will launch the application defined within that file. This way FSearch can act like an application launcher. Otherwise the <i>.desktop</i> file will be opened with the default handler for this type of files, which is usually a text editor. True True True page30 page30 29 True False <b>Filters:</b> This is a list of all available filters. A filter is a predefined search. • <b>Name:</b> A unique and descriptive identifier for the filter • <b>Macro:</b> By typing the macro text followed by a ':' you can enable the filter on demand • <b>Query:</b> The search term by which the database should be filtered True True True page18 page18 30 True False <b>Add a new filter:</b> This button opens a dialog where you can edit a new filter. True True True page31 page31 31 True False <b>Remove selected filter:</b> This button removes the currently selected filter. True True True page32 page32 32 True False <b>Edit selected filter:</b> This button opens a dialog where you can edit the selected filter. True True True page33 page33 33 True False <b>Restore default filters:</b> This button restores the default filter configuration. ⚠ All filters which were created or edited by the user will be lost! ⚠ True True True page34 page34 34 True False <b>Exit on Escape:</b> If enabled, FSearch exits when the Escape key is pressed instead of the window being minimized. True True True page35 page35 35 True False Help False True 1 fsearch-0.2.3/src/fsearch_preferences_ui.c000066400000000000000000001015021446344336300205640ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-preferences-ui" #include "fsearch_preferences_ui.h" #include "fsearch_exclude_path.h" #include "fsearch_filter_editor.h" #include "fsearch_index.h" #include "fsearch_preferences_widgets.h" #include #include #include #include #include typedef struct { FsearchConfig *new_config; void (*finished_cb)(FsearchConfig *); GtkWindow *window; GtkBuilder *builder; GtkWidget *dialog; GtkWidget *main_notebook; // Interface page GtkToggleButton *enable_dark_theme_button; GtkToggleButton *show_menubar_button; GtkToggleButton *show_tooltips_button; GtkToggleButton *restore_win_size_button; GtkToggleButton *exit_on_escape_button; GtkToggleButton *restore_sort_order_button; GtkToggleButton *restore_column_config_button; GtkToggleButton *double_click_path_button; GtkToggleButton *single_click_open_button; GtkToggleButton *launch_desktop_files_button; GtkToggleButton *show_icons_button; GtkToggleButton *highlight_search_terms; GtkToggleButton *show_base_2_units; GtkBox *action_after_file_open_box; GtkFrame *action_after_file_open_frame; GtkComboBox *action_after_file_open; GtkToggleButton *action_after_file_open_keyboard; GtkToggleButton *action_after_file_open_mouse; GtkToggleButton *show_indexing_status; // Search page GtkToggleButton *auto_search_in_path_button; GtkToggleButton *auto_match_case_button; GtkToggleButton *search_as_you_type_button; GtkToggleButton *hide_results_button; GtkTreeView *filter_list; GtkTreeModel *filter_model; GtkWidget *filter_add_button; GtkWidget *filter_edit_button; GtkWidget *filter_remove_button; GtkWidget *filter_revert_button; GtkTreeSelection *filter_selection; // Database page GtkToggleButton *update_db_at_start_button; GtkToggleButton *auto_update_checkbox; GtkBox *auto_update_box; GtkBox *auto_update_spin_box; GtkWidget *auto_update_hours_spin_button; GtkWidget *auto_update_minutes_spin_button; // Dialog page GtkToggleButton *show_dialog_failed_opening; // Include page GtkTreeView *index_list; GtkTreeModel *index_model; GtkWidget *index_add_button; GtkWidget *index_remove_button; GtkTreeSelection *sel; // Exclude model GtkTreeView *exclude_list; GtkTreeModel *exclude_model; GtkWidget *exclude_add_button; GtkWidget *exclude_remove_button; GtkTreeSelection *exclude_selection; GtkToggleButton *exclude_hidden_items_button; GtkEntry *exclude_files_entry; gchar *exclude_files_str; } FsearchPreferencesInterface; enum { COLUMN_NAME, NUM_COLUMNS }; guint help_reset_timeout_id = 0; static GtkWidget *help_stack = NULL; static GtkWidget *help_expander = NULL; static GtkWidget *help_description = NULL; static void on_toggle_set_sensitive(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget *spin = GTK_WIDGET(user_data); gtk_widget_set_sensitive(spin, gtk_toggle_button_get_active(togglebutton)); } static void on_auto_update_minutes_spin_button_changed(GtkSpinButton *spin_button, gpointer user_data) { GtkSpinButton *hours_spin = GTK_SPIN_BUTTON(user_data); double minutes = gtk_spin_button_get_value(spin_button); double hours = gtk_spin_button_get_value(hours_spin); if (hours == 0 && minutes == 0) { gtk_spin_button_set_value(spin_button, 1.0); } } static void on_auto_update_hours_spin_button_changed(GtkSpinButton *spin_button, gpointer user_data) { GtkSpinButton *minutes_spin = GTK_SPIN_BUTTON(user_data); double hours = gtk_spin_button_get_value(spin_button); double minutes = gtk_spin_button_get_value(minutes_spin); if (hours == 0 && minutes == 0) { gtk_spin_button_set_value(minutes_spin, 1.0); } } static void on_remove_button_clicked(GtkButton *button, gpointer user_data) { GtkTreeView *tree_view = GTK_TREE_VIEW(user_data); GtkTreeSelection *sel = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_selected_foreach(sel, pref_treeview_row_remove, NULL); } typedef struct { GtkTreeModel *model; void (*add_path_cb)(GtkTreeModel *, const char *); } FsearchPreferencesFileChooserContext; #if !GTK_CHECK_VERSION(3, 20, 0) static void on_file_chooser_dialog_response(GtkFileChooserDialog *dialog, GtkResponseType response, gpointer user_data) { #else static void on_file_chooser_native_dialog_response(GtkNativeDialog *dialog, GtkResponseType response, gpointer user_data) { #endif FsearchPreferencesFileChooserContext *ctx = user_data; g_assert(ctx); g_assert(ctx->add_path_cb); if (response == GTK_RESPONSE_ACCEPT) { GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); GSList *filenames = gtk_file_chooser_get_filenames(chooser); if (filenames) { for (GSList *f = filenames; f != NULL; f = f->next) { gchar *filename = f->data; if (filename) { ctx->add_path_cb(ctx->model, filename); } } g_slist_free_full(g_steal_pointer(&filenames), g_free); } } #if !GTK_CHECK_VERSION(3, 20, 0) gtk_widget_destroy(GTK_WIDGET(dialog)); #else g_clear_object(&dialog); #endif g_slice_free(FsearchPreferencesFileChooserContext, g_steal_pointer(&ctx)); } static void run_file_chooser_dialog(GtkButton *button, FsearchPreferencesFileChooserContext *ctx) { GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(button)); #if !GTK_CHECK_VERSION(3, 20, 0) GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Select folder"), GTK_WINDOW(window), action, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Select"), GTK_RESPONSE_ACCEPT, NULL); g_signal_connect(dialog, "response", G_CALLBACK(on_file_chooser_dialog_response), ctx); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_widget_show(dialog); #else GtkFileChooserNative *dialog = gtk_file_chooser_native_new(_("Select folder"), GTK_WINDOW(window), action, _("_Select"), _("_Cancel")); g_signal_connect(dialog, "response", G_CALLBACK(on_file_chooser_native_dialog_response), ctx); gtk_native_dialog_set_transient_for(GTK_NATIVE_DIALOG(dialog), GTK_WINDOW(window)); gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), true); gtk_native_dialog_show(GTK_NATIVE_DIALOG(dialog)); #endif gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); } void on_filter_editor_edit_finished(FsearchFilter *old_filter, char *name, char *macro, char *query, FsearchQueryFlags flags, gpointer data) { FsearchPreferencesInterface *ui = data; fsearch_filter_manager_edit(ui->new_config->filters, old_filter, name, macro, query, flags); g_clear_pointer(&name, g_free); g_clear_pointer(¯o, g_free); g_clear_pointer(&query, g_free); pref_filter_treeview_update(ui->filter_model, ui->new_config->filters); } void on_filter_editor_add_finished(FsearchFilter *old_filter, char *name, char *macro, char *query, FsearchQueryFlags flags, gpointer data) { FsearchPreferencesInterface *ui = data; if (!name) { return; } FsearchFilter *filter = fsearch_filter_new(name, macro, query, flags); g_clear_pointer(&name, g_free); g_clear_pointer(¯o, g_free); g_clear_pointer(&query, g_free); fsearch_filter_manager_append_filter(ui->new_config->filters, filter); pref_filter_treeview_row_add(ui->filter_model, filter); g_clear_pointer(&filter, fsearch_filter_unref); } static FsearchFilter * get_selected_filter(FsearchPreferencesInterface *ui) { GtkTreeIter iter = {0}; GtkTreeModel *model = NULL; gboolean selected = gtk_tree_selection_get_selected(ui->filter_selection, &model, &iter); if (!selected) { return NULL; } g_autofree char *name = NULL; gtk_tree_model_get(model, &iter, 0, &name, -1); g_assert(name); return fsearch_filter_manager_get_filter_for_name(ui->new_config->filters, name); } static void on_filter_revert_button_clicked(GtkButton *button, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; g_clear_pointer(&ui->new_config->filters, fsearch_filter_manager_free); ui->new_config->filters = fsearch_filter_manager_new_with_defaults(); pref_filter_treeview_update(ui->filter_model, ui->new_config->filters); } static void on_filter_remove_button_clicked(GtkButton *button, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; FsearchFilter *filter = get_selected_filter(ui); if (filter) { fsearch_filter_manager_remove(ui->new_config->filters, filter); g_clear_pointer(&filter, fsearch_filter_unref); gtk_tree_selection_selected_foreach(ui->filter_selection, pref_treeview_row_remove, NULL); } } static void on_filter_edit_button_clicked(GtkButton *button, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; fsearch_filter_editor_run(_("Edit filter"), GTK_WINDOW(ui->dialog), get_selected_filter(ui), on_filter_editor_edit_finished, ui); } void on_filter_model_reordered(GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer new_order, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; guint n_filters = gtk_tree_model_iter_n_children(tree_model, NULL); fsearch_filter_manager_reorder(ui->new_config->filters, new_order, n_filters); } void on_filter_list_row_activated(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; gboolean selected = gtk_tree_selection_get_selected(ui->filter_selection, NULL, NULL); if (!selected) { return; } on_filter_edit_button_clicked(GTK_BUTTON(ui->filter_edit_button), ui); } static void on_filter_add_button_clicked(GtkButton *button, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; fsearch_filter_editor_run(_("Add filter"), GTK_WINDOW(ui->dialog), NULL, on_filter_editor_add_finished, ui); } static void on_exclude_add_button_clicked(GtkButton *button, gpointer user_data) { GtkTreeModel *model = user_data; FsearchPreferencesFileChooserContext *ctx = g_slice_new0(FsearchPreferencesFileChooserContext); ctx->model = model; ctx->add_path_cb = pref_exclude_treeview_row_add; run_file_chooser_dialog(button, ctx); } static void on_index_add_button_clicked(GtkButton *button, gpointer user_data) { GtkTreeModel *model = user_data; FsearchPreferencesFileChooserContext *ctx = g_slice_new0(FsearchPreferencesFileChooserContext); ctx->model = model; ctx->add_path_cb = pref_index_treeview_row_add; run_file_chooser_dialog(button, ctx); } static void on_filter_list_selection_changed(GtkTreeSelection *sel, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; gboolean selected = gtk_tree_selection_get_selected(sel, NULL, NULL); gtk_widget_set_sensitive(GTK_WIDGET(ui->filter_remove_button), selected); gtk_widget_set_sensitive(GTK_WIDGET(ui->filter_edit_button), selected); return; } static void on_list_selection_changed(GtkTreeSelection *sel, gpointer user_data) { gboolean selected = gtk_tree_selection_get_selected(sel, NULL, NULL); gtk_widget_set_sensitive(GTK_WIDGET(user_data), selected); } static gboolean help_reset(gpointer user_data) { if (help_stack != NULL) { gtk_stack_set_visible_child(GTK_STACK(help_stack), GTK_WIDGET(help_description)); } help_reset_timeout_id = 0; return G_SOURCE_REMOVE; } static gboolean on_help_reset(GtkWidget *widget, GdkEvent *event, gpointer user_data) { if (help_expander && !gtk_expander_get_expanded(GTK_EXPANDER(help_expander))) { return GDK_EVENT_PROPAGATE; } help_reset_timeout_id = g_timeout_add(200, help_reset, NULL); return GDK_EVENT_PROPAGATE; } static gboolean on_help_show(GtkWidget *widget, int x, int y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data) { if (help_expander && !gtk_expander_get_expanded(GTK_EXPANDER(help_expander))) { return GDK_EVENT_PROPAGATE; } if (help_reset_timeout_id != 0) { g_source_remove(help_reset_timeout_id); help_reset_timeout_id = 0; } if (help_stack != NULL) { gtk_stack_set_visible_child(GTK_STACK(help_stack), GTK_WIDGET(user_data)); } return GDK_EVENT_PROPAGATE; } static GtkWidget * builder_init_widget(GtkBuilder *builder, const char *name, const char *help) { GtkWidget *widget = GTK_WIDGET(gtk_builder_get_object(builder, name)); GtkWidget *help_widget = GTK_WIDGET(gtk_builder_get_object(builder, help)); g_signal_connect(widget, "query-tooltip", G_CALLBACK(on_help_show), help_widget); g_signal_connect(widget, "leave-notify-event", G_CALLBACK(on_help_reset), NULL); g_signal_connect(widget, "focus-out-event", G_CALLBACK(on_help_reset), NULL); return widget; } static GtkToggleButton * toggle_button_get(GtkBuilder *builder, const char *name, const char *help, bool val) { GtkToggleButton *button = GTK_TOGGLE_BUTTON(builder_init_widget(builder, name, help)); gtk_toggle_button_set_active(button, val); return button; } static void action_after_file_open_changed(GtkComboBox *widget, gpointer user_data) { int active = gtk_combo_box_get_active(widget); if (active != ACTION_AFTER_OPEN_NOTHING) { gtk_widget_set_sensitive(GTK_WIDGET(user_data), TRUE); } else { gtk_widget_set_sensitive(GTK_WIDGET(user_data), FALSE); } } static void preferences_ui_get_state(FsearchPreferencesInterface *ui) { FsearchConfig *new_config = ui->new_config; new_config->search_as_you_type = gtk_toggle_button_get_active(ui->search_as_you_type_button); new_config->enable_dark_theme = gtk_toggle_button_get_active(ui->enable_dark_theme_button); new_config->show_menubar = !gtk_toggle_button_get_active(ui->show_menubar_button); new_config->restore_column_config = gtk_toggle_button_get_active(ui->restore_column_config_button); new_config->restore_sort_order = gtk_toggle_button_get_active(ui->restore_sort_order_button); new_config->double_click_path = gtk_toggle_button_get_active(ui->double_click_path_button); new_config->enable_list_tooltips = gtk_toggle_button_get_active(ui->show_tooltips_button); new_config->restore_window_size = gtk_toggle_button_get_active(ui->restore_win_size_button); new_config->exit_on_escape = gtk_toggle_button_get_active(ui->exit_on_escape_button); new_config->update_database_on_launch = gtk_toggle_button_get_active(ui->update_db_at_start_button); new_config->update_database_every = gtk_toggle_button_get_active(ui->auto_update_checkbox); new_config->update_database_every_hours = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(ui->auto_update_hours_spin_button)); new_config->update_database_every_minutes = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(ui->auto_update_minutes_spin_button)); new_config->show_base_2_units = gtk_toggle_button_get_active(ui->show_base_2_units); new_config->action_after_file_open = gtk_combo_box_get_active(ui->action_after_file_open); new_config->action_after_file_open_keyboard = gtk_toggle_button_get_active(ui->action_after_file_open_keyboard); new_config->action_after_file_open_mouse = gtk_toggle_button_get_active(ui->action_after_file_open_mouse); new_config->show_indexing_status = gtk_toggle_button_get_active(ui->show_indexing_status); // Dialogs new_config->show_dialog_failed_opening = gtk_toggle_button_get_active(ui->show_dialog_failed_opening); new_config->auto_search_in_path = gtk_toggle_button_get_active(ui->auto_search_in_path_button); new_config->auto_match_case = gtk_toggle_button_get_active(ui->auto_match_case_button); new_config->hide_results_on_empty_search = gtk_toggle_button_get_active(ui->hide_results_button); new_config->highlight_search_terms = gtk_toggle_button_get_active(ui->highlight_search_terms); new_config->single_click_open = gtk_toggle_button_get_active(ui->single_click_open_button); new_config->launch_desktop_files = gtk_toggle_button_get_active(ui->launch_desktop_files_button); new_config->show_listview_icons = gtk_toggle_button_get_active(ui->show_icons_button); new_config->exclude_hidden_items = gtk_toggle_button_get_active(ui->exclude_hidden_items_button); g_clear_pointer(&new_config->exclude_files, g_strfreev); new_config->exclude_files = g_strsplit(gtk_entry_get_text(ui->exclude_files_entry), ";", -1); if (new_config->indexes) { g_list_free_full(g_steal_pointer(&new_config->indexes), (GDestroyNotify)fsearch_index_free); } new_config->indexes = pref_index_treeview_data_get(ui->index_list); if (new_config->exclude_locations) { g_list_free_full(g_steal_pointer(&new_config->exclude_locations), (GDestroyNotify)fsearch_exclude_path_free); } new_config->exclude_locations = pref_exclude_treeview_data_get(ui->exclude_list); } static void preferences_ui_cleanup(FsearchPreferencesInterface *ui) { g_clear_pointer(&ui->exclude_files_str, free); if (help_reset_timeout_id != 0) { g_source_remove(help_reset_timeout_id); help_reset_timeout_id = 0; } help_stack = NULL; help_expander = NULL; g_clear_object(&ui->builder); g_clear_pointer(&ui->dialog, gtk_widget_destroy); g_clear_pointer(&ui, free); } static void on_preferences_ui_response(GtkDialog *dialog, GtkResponseType response, gpointer user_data) { FsearchPreferencesInterface *ui = user_data; if (response != GTK_RESPONSE_OK) { g_clear_pointer(&ui->new_config, config_free); } else { preferences_ui_get_state(ui); } if (ui->finished_cb) { ui->finished_cb(ui->new_config); } preferences_ui_cleanup(ui); } static void preferences_ui_init(FsearchPreferencesInterface *ui, FsearchPreferencesPage page) { FsearchConfig *new_config = ui->new_config; ui->builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/fsearch_preferences.ui"); ui->dialog = GTK_WIDGET(gtk_builder_get_object(ui->builder, "FsearchPreferencesWindow")); gtk_window_set_transient_for(GTK_WINDOW(ui->dialog), ui->window); gtk_dialog_add_button(GTK_DIALOG(ui->dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); gtk_dialog_add_button(GTK_DIALOG(ui->dialog), _("_OK"), GTK_RESPONSE_OK); g_signal_connect(ui->dialog, "response", G_CALLBACK(on_preferences_ui_response), ui); ui->main_notebook = GTK_WIDGET(gtk_builder_get_object(ui->builder, "pref_main_notebook")); gtk_notebook_set_current_page(GTK_NOTEBOOK(ui->main_notebook), page); help_stack = GTK_WIDGET(gtk_builder_get_object(ui->builder, "help_stack")); help_description = GTK_WIDGET(gtk_builder_get_object(ui->builder, "help_help")); help_expander = GTK_WIDGET(gtk_builder_get_object(ui->builder, "help_expander")); // Interface page ui->enable_dark_theme_button = toggle_button_get(ui->builder, "enable_dark_theme_button", "help_dark_theme", new_config->enable_dark_theme); ui->show_menubar_button = toggle_button_get(ui->builder, "show_menubar_button", "help_csd", !new_config->show_menubar); ui->show_tooltips_button = toggle_button_get(ui->builder, "show_tooltips_button", "help_show_tooltips", new_config->enable_list_tooltips); ui->restore_win_size_button = toggle_button_get(ui->builder, "restore_win_size_button", "help_window_size", new_config->restore_window_size); ui->exit_on_escape_button = toggle_button_get(ui->builder, "exit_on_escape_button", "help_exit_on_escape", new_config->exit_on_escape); ui->restore_sort_order_button = toggle_button_get(ui->builder, "restore_sort_order_button", "help_restore_sort_order", new_config->restore_sort_order); ui->restore_column_config_button = toggle_button_get(ui->builder, "restore_column_config_button", "help_restore_column_config", new_config->restore_column_config); ui->double_click_path_button = toggle_button_get(ui->builder, "double_click_path_button", "help_double_click_path", new_config->double_click_path); ui->single_click_open_button = toggle_button_get(ui->builder, "single_click_open_button", "help_single_click_open", new_config->single_click_open); ui->launch_desktop_files_button = toggle_button_get(ui->builder, "launch_desktop_files_button", "help_launch_desktop_files", new_config->launch_desktop_files); ui->show_icons_button = toggle_button_get(ui->builder, "show_icons_button", "help_show_icons", new_config->show_listview_icons); ui->highlight_search_terms = toggle_button_get(ui->builder, "highlight_search_terms", "help_highlight_search_terms", new_config->highlight_search_terms); ui->show_base_2_units = toggle_button_get(ui->builder, "show_base_2_units", "help_units", new_config->show_base_2_units); ui->action_after_file_open_frame = GTK_FRAME( builder_init_widget(ui->builder, "action_after_file_open_frame", "help_action_after_open")); ui->action_after_file_open_box = GTK_BOX(gtk_builder_get_object(ui->builder, "action_after_file_open_box")); ui->action_after_file_open = GTK_COMBO_BOX( builder_init_widget(ui->builder, "action_after_file_open", "help_action_after_open")); gtk_combo_box_set_active(ui->action_after_file_open, new_config->action_after_file_open); g_signal_connect(ui->action_after_file_open, "changed", G_CALLBACK(action_after_file_open_changed), ui->action_after_file_open_box); if (new_config->action_after_file_open != ACTION_AFTER_OPEN_NOTHING) { gtk_widget_set_sensitive(GTK_WIDGET(ui->action_after_file_open_box), TRUE); } else { gtk_widget_set_sensitive(GTK_WIDGET(ui->action_after_file_open_box), FALSE); } ui->action_after_file_open_keyboard = toggle_button_get(ui->builder, "action_after_file_open_keyboard", "help_action_after_open", new_config->action_after_file_open_keyboard); ui->action_after_file_open_mouse = toggle_button_get(ui->builder, "action_after_file_open_mouse", "help_action_after_open", new_config->action_after_file_open_mouse); ui->show_indexing_status = toggle_button_get(ui->builder, "show_indexing_status_button", "help_show_indexing_status", new_config->show_indexing_status); // Search page ui->auto_search_in_path_button = toggle_button_get(ui->builder, "auto_search_in_path_button", "help_auto_path", new_config->auto_search_in_path); ui->auto_match_case_button = toggle_button_get(ui->builder, "auto_match_case_button", "help_auto_case", new_config->auto_match_case); ui->search_as_you_type_button = toggle_button_get(ui->builder, "search_as_you_type_button", "help_search_as_you_type", new_config->search_as_you_type); ui->hide_results_button = toggle_button_get(ui->builder, "hide_results_button", "help_hide_results", new_config->hide_results_on_empty_search); ui->filter_list = GTK_TREE_VIEW(builder_init_widget(ui->builder, "filter_list", "help_filter_list")); g_signal_connect(ui->filter_list, "row-activated", G_CALLBACK(on_filter_list_row_activated), ui); ui->filter_model = pref_filter_treeview_init(ui->filter_list, new_config->filters); g_signal_connect(ui->filter_model, "rows-reordered", G_CALLBACK(on_filter_model_reordered), ui); ui->filter_add_button = builder_init_widget(ui->builder, "filter_add_button", "help_filter_add"); g_signal_connect(ui->filter_add_button, "clicked", G_CALLBACK(on_filter_add_button_clicked), ui); ui->filter_edit_button = builder_init_widget(ui->builder, "filter_edit_button", "help_filter_edit"); g_signal_connect(ui->filter_edit_button, "clicked", G_CALLBACK(on_filter_edit_button_clicked), ui); ui->filter_remove_button = builder_init_widget(ui->builder, "filter_remove_button", "help_filter_remove"); g_signal_connect(ui->filter_remove_button, "clicked", G_CALLBACK(on_filter_remove_button_clicked), ui); ui->filter_revert_button = builder_init_widget(ui->builder, "filter_revert_button", "help_filter_revert"); g_signal_connect(ui->filter_revert_button, "clicked", G_CALLBACK(on_filter_revert_button_clicked), ui); ui->filter_selection = gtk_tree_view_get_selection(ui->filter_list); g_signal_connect(ui->filter_selection, "changed", G_CALLBACK(on_filter_list_selection_changed), ui); // Database page ui->update_db_at_start_button = toggle_button_get(ui->builder, "update_db_at_start_button", "help_update_database_on_start", new_config->update_database_on_launch); ui->auto_update_checkbox = toggle_button_get(ui->builder, "auto_update_checkbox", "help_update_database_every", new_config->update_database_every); ui->auto_update_box = GTK_BOX(builder_init_widget(ui->builder, "auto_update_box", "help_update_database_every")); ui->auto_update_spin_box = GTK_BOX(gtk_builder_get_object(ui->builder, "auto_update_spin_box")); gtk_widget_set_sensitive(GTK_WIDGET(ui->auto_update_spin_box), new_config->update_database_every); g_signal_connect(ui->auto_update_checkbox, "toggled", G_CALLBACK(on_toggle_set_sensitive), ui->auto_update_spin_box); ui->auto_update_hours_spin_button = builder_init_widget(ui->builder, "auto_update_hours_spin_button", "help_update_database_every"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->auto_update_hours_spin_button), (double)new_config->update_database_every_hours); ui->auto_update_minutes_spin_button = builder_init_widget(ui->builder, "auto_update_minutes_spin_button", "help_update_database_every"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->auto_update_minutes_spin_button), (double)new_config->update_database_every_minutes); g_signal_connect(GTK_SPIN_BUTTON(ui->auto_update_hours_spin_button), "value-changed", G_CALLBACK(on_auto_update_hours_spin_button_changed), ui->auto_update_minutes_spin_button); g_signal_connect(GTK_SPIN_BUTTON(ui->auto_update_minutes_spin_button), "value-changed", G_CALLBACK(on_auto_update_minutes_spin_button_changed), ui->auto_update_hours_spin_button); // Dialog page ui->show_dialog_failed_opening = toggle_button_get(ui->builder, "show_dialog_failed_opening", "help_warn_failed_open", new_config->show_dialog_failed_opening); // Include page ui->index_list = GTK_TREE_VIEW(builder_init_widget(ui->builder, "index_list", "help_index_list")); ui->index_model = pref_index_treeview_init(ui->index_list, new_config->indexes); ui->index_add_button = builder_init_widget(ui->builder, "index_add_button", "help_index_add"); g_signal_connect(ui->index_add_button, "clicked", G_CALLBACK(on_index_add_button_clicked), ui->index_model); ui->index_remove_button = builder_init_widget(ui->builder, "index_remove_button", "help_index_remove"); g_signal_connect(ui->index_remove_button, "clicked", G_CALLBACK(on_remove_button_clicked), ui->index_list); ui->sel = gtk_tree_view_get_selection(ui->index_list); g_signal_connect(ui->sel, "changed", G_CALLBACK(on_list_selection_changed), ui->index_remove_button); // Exclude model ui->exclude_list = GTK_TREE_VIEW(builder_init_widget(ui->builder, "exclude_list", "help_exclude_list")); ui->exclude_model = pref_exclude_treeview_init(ui->exclude_list, new_config->exclude_locations); ui->exclude_add_button = builder_init_widget(ui->builder, "exclude_add_button", "help_exclude_add"); g_signal_connect(ui->exclude_add_button, "clicked", G_CALLBACK(on_exclude_add_button_clicked), ui->exclude_model); ui->exclude_remove_button = builder_init_widget(ui->builder, "exclude_remove_button", "help_exclude_remove"); g_signal_connect(ui->exclude_remove_button, "clicked", G_CALLBACK(on_remove_button_clicked), ui->exclude_list); ui->exclude_selection = gtk_tree_view_get_selection(ui->exclude_list); g_signal_connect(ui->exclude_selection, "changed", G_CALLBACK(on_list_selection_changed), ui->exclude_remove_button); ui->exclude_hidden_items_button = toggle_button_get(ui->builder, "exclude_hidden_items_button", "help_exclude_hidden", new_config->exclude_hidden_items); ui->exclude_files_entry = GTK_ENTRY(builder_init_widget(ui->builder, "exclude_files_entry", "help_exclude_files")); ui->exclude_files_str = NULL; if (new_config->exclude_files) { ui->exclude_files_str = g_strjoinv(";", new_config->exclude_files); gtk_entry_set_text(ui->exclude_files_entry, ui->exclude_files_str); } } void preferences_ui_launch(FsearchConfig *config, GtkWindow *window, FsearchPreferencesPage page, void (*finsihed_cb)(FsearchConfig *)) { FsearchPreferencesInterface *ui = calloc(1, sizeof(FsearchPreferencesInterface)); g_assert(ui != NULL); ui->new_config = config; ui->finished_cb = finsihed_cb; ui->window = window; preferences_ui_init(ui, page); gtk_widget_show(ui->dialog); } fsearch-0.2.3/src/fsearch_preferences_ui.h000066400000000000000000000022051446344336300205710ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include "fsearch_config.h" #include typedef enum FsearchPreferencesPage { PREF_PAGE_GENERAL = 0, PREF_PAGE_SEARCH, PREF_PAGE_DATABASE, N_PREF_PAGES, } FsearchPreferencesPage; void preferences_ui_launch(FsearchConfig *config, GtkWindow *window, FsearchPreferencesPage page, void (*finsihed_cb)(FsearchConfig *)); fsearch-0.2.3/src/fsearch_preferences_widgets.c000066400000000000000000000260571446344336300216300ustar00rootroot00000000000000#include #include "fsearch_preferences_widgets.h" #include "fsearch_filter.h" #include "fsearch_exclude_path.h" #include "fsearch_index.h" enum { COL_INDEX_ENABLE, COL_INDEX_PATH, COL_INDEX_UPDATE, COL_INDEX_ONE_FS, NUM_INDEX_COLUMNS }; enum { COL_EXCLUDE_ENABLE, COL_EXCLUDE_PATH, NUM_EXCLUDE_COLUMNS }; enum { COL_FILTER_NAME, COL_FILTER_MACRO, COL_FILTER_QUERY, NUM_FILTER_COLUMNS }; static void column_text_append(GtkTreeView *view, const char *name, gboolean expand, int id) { GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(name, renderer, "text", id, NULL); gtk_tree_view_column_set_expand(col, expand); gtk_tree_view_column_set_sort_column_id(col, id); gtk_tree_view_append_column(view, col); } static bool on_column_toggled(gchar *path_str, GtkTreeModel *model, int col) { GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string(path_str); gboolean val; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, col, &val, -1); val ^= 1; gtk_list_store_set(GTK_LIST_STORE(model), &iter, col, val, -1); g_clear_pointer(&path, gtk_tree_path_free); return val; } static void on_column_exclude_toggled(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeModel *exclude_model = data; on_column_toggled(path_str, exclude_model, COL_EXCLUDE_ENABLE); } static void on_column_index_enable_toggled(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeModel *index_model = data; on_column_toggled(path_str, index_model, COL_INDEX_ENABLE); } static void on_column_index_one_fs_toggled(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeModel *index_model = data; on_column_toggled(path_str, index_model, COL_INDEX_ONE_FS); } static void on_column_index_toggled(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeModel *index_model = data; on_column_toggled(path_str, index_model, COL_INDEX_UPDATE); } static void column_toggle_append(GtkTreeView *view, GtkTreeModel *model, const char *name, int id, GCallback cb, gpointer user_data) { GtkCellRenderer *renderer = gtk_cell_renderer_toggle_new(); g_object_set(renderer, "xalign", 0.0, NULL); GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(name, renderer, "active", id, NULL); gtk_tree_view_column_set_sort_column_id(col, id); gtk_tree_view_append_column(view, col); g_signal_connect(renderer, "toggled", cb, user_data); } GList * pref_index_treeview_data_get(GtkTreeView *view) { GList *data = NULL; GtkTreeModel *model = gtk_tree_view_get_model(view); GtkTreeIter iter; gboolean valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) { g_autofree gchar *path = NULL; gboolean update = FALSE; gboolean enable = FALSE; gboolean one_filesystem = FALSE; gtk_tree_model_get(model, &iter, COL_INDEX_ENABLE, &enable, COL_INDEX_PATH, &path, COL_INDEX_UPDATE, &update, COL_INDEX_ONE_FS, &one_filesystem, -1); if (path) { FsearchIndex *index = fsearch_index_new(FSEARCH_INDEX_FOLDER_TYPE, path, enable, update, one_filesystem, 0); data = g_list_append(data, index); } valid = gtk_tree_model_iter_next(model, &iter); } return data; } GList * pref_exclude_treeview_data_get(GtkTreeView *view) { GList *data = NULL; GtkTreeModel *model = gtk_tree_view_get_model(view); if (!model) { return data; } GtkTreeIter iter; gboolean valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) { g_autofree gchar *path = NULL; gboolean enable = FALSE; gtk_tree_model_get(model, &iter, COL_EXCLUDE_PATH, &path, COL_EXCLUDE_ENABLE, &enable, -1); if (path) { FsearchExcludePath *fs_path = fsearch_exclude_path_new(path, enable); data = g_list_append(data, fs_path); } valid = gtk_tree_model_iter_next(model, &iter); } return data; } void pref_treeview_row_remove(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer userdata) { gtk_list_store_remove(GTK_LIST_STORE(model), iter); } void pref_filter_treeview_update(GtkTreeModel *filter_model, FsearchFilterManager *filters) { gtk_list_store_clear(GTK_LIST_STORE(filter_model)); for (uint32_t i = 0; i < fsearch_filter_manager_get_num_filters(filters); ++i) { FsearchFilter *filter = fsearch_filter_manager_get_filter(filters, i); pref_filter_treeview_row_add(filter_model, filter); g_clear_pointer(&filter, fsearch_filter_unref); } } void pref_filter_treeview_row_add(GtkTreeModel *filter_model, FsearchFilter *filter) { if (!filter) { return; } GtkTreeIter iter; gtk_list_store_append(GTK_LIST_STORE(filter_model), &iter); gtk_list_store_set(GTK_LIST_STORE(filter_model), &iter, COL_FILTER_NAME, filter->name, COL_FILTER_MACRO, filter->macro, COL_FILTER_QUERY, filter->query, -1); } void pref_index_treeview_row_add(GtkTreeModel *index_model, const char *path) { FsearchIndex *index = fsearch_index_new(FSEARCH_INDEX_FOLDER_TYPE, path, true, true, false, 0); GtkTreeIter iter; gtk_list_store_append(GTK_LIST_STORE(index_model), &iter); gtk_list_store_set(GTK_LIST_STORE(index_model), &iter, COL_INDEX_ENABLE, index->enabled, COL_INDEX_PATH, index->path, COL_INDEX_UPDATE, index->update, COL_INDEX_ONE_FS, index->one_filesystem, -1); } void pref_exclude_treeview_row_add(GtkTreeModel *exclude_model, const char *path) { FsearchExcludePath *fs_path = fsearch_exclude_path_new(path, true); GtkTreeIter iter; gtk_list_store_append(GTK_LIST_STORE(exclude_model), &iter); gtk_list_store_set(GTK_LIST_STORE(exclude_model), &iter, COL_EXCLUDE_ENABLE, fs_path->enabled, COL_EXCLUDE_PATH, fs_path->path, -1); } GtkTreeModel * pref_index_treeview_init(GtkTreeView *view, GList *indexes) { GtkListStore *store = gtk_list_store_new(NUM_INDEX_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_view_set_model(view, GTK_TREE_MODEL(store)); column_toggle_append(view, GTK_TREE_MODEL(store), _("Active"), COL_INDEX_ENABLE, G_CALLBACK(on_column_index_enable_toggled), store); column_text_append(view, _("Path"), TRUE, COL_INDEX_PATH); column_toggle_append(view, GTK_TREE_MODEL(store), _("One Filesystem"), COL_INDEX_ONE_FS, G_CALLBACK(on_column_index_one_fs_toggled), store); // column_toggle_append(view, // GTK_TREE_MODEL(store), // _("Update"), // COL_INDEX_UPDATE, // G_CALLBACK(on_column_index_toggled), // store); for (GList *l = indexes; l != NULL; l = l->next) { GtkTreeIter iter = {}; FsearchIndex *index = l->data; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, COL_INDEX_ENABLE, index->enabled, COL_INDEX_PATH, index->path, COL_INDEX_UPDATE, index->update, COL_INDEX_ONE_FS, index->one_filesystem, -1); } // Workaround for GTK bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3084 g_signal_connect(view, "realize", G_CALLBACK(gtk_tree_view_columns_autosize), NULL); return GTK_TREE_MODEL(store); } GtkTreeModel * pref_exclude_treeview_init(GtkTreeView *view, GList *locations) { GtkListStore *store = gtk_list_store_new(NUM_EXCLUDE_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(store)); column_toggle_append(view, GTK_TREE_MODEL(store), _("Active"), COL_EXCLUDE_ENABLE, G_CALLBACK(on_column_exclude_toggled), store); column_text_append(view, _("Path"), TRUE, COL_EXCLUDE_PATH); for (GList *l = locations; l != NULL; l = l->next) { GtkTreeIter iter = {}; FsearchExcludePath *fs_path = l->data; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, COL_EXCLUDE_ENABLE, fs_path->enabled, COL_EXCLUDE_PATH, fs_path->path, -1); } // Workaround for GTK bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3084 g_signal_connect(view, "realize", G_CALLBACK(gtk_tree_view_columns_autosize), NULL); return GTK_TREE_MODEL(store); } GtkTreeModel * pref_filter_treeview_init(GtkTreeView *view, FsearchFilterManager *filters) { GtkListStore *store = gtk_list_store_new(NUM_FILTER_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(store)); column_text_append(view, _("Name"), FALSE, COL_FILTER_NAME); column_text_append(view, _("Macro"), TRUE, COL_FILTER_MACRO); column_text_append(view, _("Query"), TRUE, COL_FILTER_QUERY); for (uint32_t i = 0; i < fsearch_filter_manager_get_num_filters(filters); ++i) { GtkTreeIter iter = {}; FsearchFilter *filter = fsearch_filter_manager_get_filter(filters, i); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, COL_FILTER_NAME, filter->name, COL_FILTER_MACRO, filter->macro, COL_FILTER_QUERY, filter->query, -1); g_clear_pointer(&filter, fsearch_filter_unref); } // Workaround for GTK bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3084 g_signal_connect(view, "realize", G_CALLBACK(gtk_tree_view_columns_autosize), NULL); return GTK_TREE_MODEL(store); } fsearch-0.2.3/src/fsearch_preferences_widgets.h000066400000000000000000000016251446344336300216270ustar00rootroot00000000000000#pragma once #include #include "fsearch_filter.h" #include "fsearch_preferences_ui.h" GList * pref_index_treeview_data_get(GtkTreeView *view); GList * pref_exclude_treeview_data_get(GtkTreeView *view); void pref_treeview_row_remove(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer userdata); void pref_filter_treeview_update(GtkTreeModel *filter_model, FsearchFilterManager *filters); void pref_filter_treeview_row_add(GtkTreeModel *index_model, FsearchFilter *filter); void pref_index_treeview_row_add(GtkTreeModel *index_model, const char *path); void pref_exclude_treeview_row_add(GtkTreeModel *model, const char *path); GtkTreeModel * pref_index_treeview_init(GtkTreeView *view, GList *locations); GtkTreeModel * pref_exclude_treeview_init(GtkTreeView *view, GList *locations); GtkTreeModel * pref_filter_treeview_init(GtkTreeView *view, FsearchFilterManager *filters); fsearch-0.2.3/src/fsearch_query.c000066400000000000000000000160031446344336300167340ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define _GNU_SOURCE #include "fsearch_query.h" #include "fsearch_database_entry.h" #include "fsearch_string_utils.h" #include #include FsearchQuery * fsearch_query_new(const char *search_term, FsearchDatabase *db, int32_t sort_order, FsearchFilter *filter, FsearchFilterManager *filters, FsearchThreadPool *pool, FsearchQueryFlags flags, const char *query_id, bool reset_selection) { FsearchQuery *q = calloc(1, sizeof(FsearchQuery)); g_assert(q); q->search_term = search_term ? strdup(search_term) : ""; q->db = db_ref(db); q->sort_order = sort_order; q->pool = pool; q->query_tree = fsearch_query_node_tree_new(q->search_term, filters, flags); if (q->query_tree) { q->triggers_auto_match_case = fsearch_query_node_tree_triggers_auto_match_case(q->query_tree); q->triggers_auto_match_path = fsearch_query_node_tree_triggers_auto_match_path(q->query_tree); q->wants_single_threaded_search = fsearch_query_node_tree_wants_single_threaded_search(q->query_tree); } if (filter && filter->query) { q->filter_tree = fsearch_query_node_tree_new(filter->query, filters, filter->flags); } q->filter = fsearch_filter_ref(filter); q->flags = flags; q->query_id = strdup(query_id ? query_id : "[missing_id]"); q->reset_selection = reset_selection; q->ref_count = 1; return q; } static void fsearch_query_free(FsearchQuery *query) { g_clear_pointer(&query->query_id, free); g_clear_pointer(&query->db, db_unref); g_clear_pointer(&query->filter, fsearch_filter_unref); g_clear_pointer(&query->search_term, free); g_clear_pointer(&query->query_tree, fsearch_query_node_tree_free); g_clear_pointer(&query, free); } FsearchQuery * fsearch_query_ref(FsearchQuery *query) { if (!query || g_atomic_int_get(&query->ref_count) <= 0) { return NULL; } g_atomic_int_inc(&query->ref_count); return query; } void fsearch_query_unref(FsearchQuery *query) { if (!query || g_atomic_int_get(&query->ref_count) <= 0) { return; } if (g_atomic_int_dec_and_test(&query->ref_count)) { g_clear_pointer(&query, fsearch_query_free); } } bool fsearch_query_matches_everything(FsearchQuery *query) { const bool empty_query = fsearch_string_is_empty(query->search_term); if (empty_query && (!query->filter || !query->filter->query || fsearch_string_is_empty(query->filter->query))) { return true; } return false; } static bool highlight(GNode *node, FsearchDatabaseEntry *entry, FsearchQueryMatchData *match_data, FsearchDatabaseEntryType type) { if (!node) { return true; } FsearchQueryNode *n = node->data; if (!n) { return false; } if (n->type == FSEARCH_QUERY_NODE_TYPE_OPERATOR) { GNode *left = node->children; g_assert(left); GNode *right = left->next; if (n->operator== FSEARCH_QUERY_NODE_OPERATOR_AND) { return highlight(left, entry, match_data, type) && highlight(right, entry, match_data, type); } else if (n->operator== FSEARCH_QUERY_NODE_OPERATOR_OR) { return highlight(left, entry, match_data, type) || highlight(right, entry, match_data, type); } else { return !highlight(left, entry, match_data, type); } } else { if (n->flags & QUERY_FLAG_FOLDERS_ONLY && type != DATABASE_ENTRY_TYPE_FOLDER) { return false; } if (n->flags & QUERY_FLAG_FILES_ONLY && type != DATABASE_ENTRY_TYPE_FILE) { return false; } return n->highlight_func ? n->highlight_func(n, match_data) : false; } } static bool matches(GNode *node, FsearchDatabaseEntry *entry, FsearchQueryMatchData *match_data, FsearchDatabaseEntryType type) { if (!node) { return true; } FsearchQueryNode *n = node->data; if (!n) { return false; } if (n->type == FSEARCH_QUERY_NODE_TYPE_OPERATOR) { GNode *left = node->children; g_assert(left); GNode *right = left->next; if (n->operator== FSEARCH_QUERY_NODE_OPERATOR_AND) { return matches(left, entry, match_data, type) && matches(right, entry, match_data, type); } else if (n->operator== FSEARCH_QUERY_NODE_OPERATOR_OR) { return matches(left, entry, match_data, type) || matches(right, entry, match_data, type); } else { return !matches(left, entry, match_data, type); } } else { if (n->flags & QUERY_FLAG_FOLDERS_ONLY && type != DATABASE_ENTRY_TYPE_FOLDER) { return false; } if (n->flags & QUERY_FLAG_FILES_ONLY && type != DATABASE_ENTRY_TYPE_FILE) { return false; } return n->search_func(n, match_data); } } static bool filter_entry(FsearchDatabaseEntry *entry, FsearchQueryMatchData *match_data, FsearchQuery *query) { if (!query->filter) { return true; } if (query->filter->query == NULL || fsearch_string_is_empty(query->filter->query)) { return true; } FsearchDatabaseEntryType type = db_entry_get_type(entry); if (query->filter_tree) { return matches(query->filter_tree, entry, match_data, type); } return true; } bool fsearch_query_highlight(FsearchQuery *query, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (G_UNLIKELY(!match_data || !entry)) { return false; } FsearchDatabaseEntryType type = db_entry_get_type(entry); GNode *token = query->query_tree; if (!filter_entry(entry, match_data, query)) { return false; } return highlight(token, entry, match_data, type); } bool fsearch_query_match(FsearchQuery *query, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (G_UNLIKELY(!match_data || !entry)) { return false; } FsearchDatabaseEntryType type = db_entry_get_type(entry); GNode *token = query->query_tree; if (!filter_entry(entry, match_data, query)) { return false; } return matches(token, entry, match_data, type); } fsearch-0.2.3/src/fsearch_query.h000066400000000000000000000044331446344336300167450ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include #include #include #include "fsearch_array.h" #include "fsearch_database.h" #include "fsearch_filter_manager.h" #include "fsearch_list_view.h" #include "fsearch_query_flags.h" #include "fsearch_query_match_data.h" #include "fsearch_query_node.h" #include "fsearch_query_tree.h" #include "fsearch_thread_pool.h" typedef struct FsearchQuery { char *search_term; FsearchDatabase *db; int32_t sort_order; FsearchThreadPool *pool; FsearchFilter *filter; FsearchFilterManager *filters; GNode *query_tree; GNode *filter_tree; FsearchQueryFlags flags; char *query_id; bool reset_selection; bool triggers_auto_match_case; bool triggers_auto_match_path; bool wants_single_threaded_search; volatile int ref_count; } FsearchQuery; FsearchQuery * fsearch_query_new(const char *search_term, FsearchDatabase *db, int32_t sort_order, FsearchFilter *filter, FsearchFilterManager *filters, FsearchThreadPool *pool, FsearchQueryFlags flags, const char *query_id, bool reset_selection); FsearchQuery * fsearch_query_ref(FsearchQuery *query); void fsearch_query_unref(FsearchQuery *query); bool fsearch_query_matches_everything(FsearchQuery *query); bool fsearch_query_match(FsearchQuery *queyr, FsearchQueryMatchData *match_data); bool fsearch_query_highlight(FsearchQuery *query, FsearchQueryMatchData *match_data); fsearch-0.2.3/src/fsearch_query_flags.h000066400000000000000000000006121446344336300201140ustar00rootroot00000000000000#pragma once #include typedef enum FsearchQueryFlags { QUERY_FLAG_MATCH_CASE = 1 << 0, QUERY_FLAG_AUTO_MATCH_CASE = 1 << 1, QUERY_FLAG_REGEX = 1 << 2, QUERY_FLAG_SEARCH_IN_PATH = 1 << 3, QUERY_FLAG_AUTO_SEARCH_IN_PATH = 1 << 4, QUERY_FLAG_FILES_ONLY = 1 << 5, QUERY_FLAG_FOLDERS_ONLY = 1 << 6, QUERY_FLAG_EXACT_MATCH = 1 << 7, } FsearchQueryFlags; fsearch-0.2.3/src/fsearch_query_lexer.c000066400000000000000000000124301446344336300201330ustar00rootroot00000000000000#include #include #include #include "fsearch_query_lexer.h" struct FsearchQueryLexer { GString *input; GQueue *char_stack; uint32_t input_pos; }; static const char *reserved_chars = ":=<>()"; static char get_next_input_char(FsearchQueryLexer *lexer) { if (lexer->input && lexer->input_pos < lexer->input->len) { return lexer->input->str[lexer->input_pos++]; } return '\0'; } static char top_char(GQueue *stack) { return (char)GPOINTER_TO_UINT(g_queue_peek_tail(stack)); } static char pop_char(GQueue *stack) { return (char)(GPOINTER_TO_UINT(g_queue_pop_tail(stack))); } static void push_char(GQueue *stack, char c) { g_queue_push_tail(stack, GUINT_TO_POINTER((guint)c)); } static char get_next_char(FsearchQueryLexer *lexer) { GQueue *stack = lexer->char_stack; if (!g_queue_is_empty(stack)) { return pop_char(stack); } return get_next_input_char(lexer); } static void give_back_char(FsearchQueryLexer *lexer, char c) { push_char(lexer->char_stack, c); } // parse_string() assumes that the first double quote was already read static void parse_quoted_string(FsearchQueryLexer *lexer, GString *string) { char c = '\0'; while ((c = get_next_char(lexer))) { if (c == '"') { return; } else { g_string_append_c(string, c); } } } FsearchQueryToken fsearch_query_lexer_get_next_token(FsearchQueryLexer *lexer, GString **result) { FsearchQueryToken token = FSEARCH_QUERY_TOKEN_NONE; char c = '\0'; /* Skip white space. */ while ((c = get_next_char(lexer)) && g_ascii_isspace(c)) { continue; } // field-term relations, and ranges switch (c) { case '\0': return FSEARCH_QUERY_TOKEN_EOS; case '=': return FSEARCH_QUERY_TOKEN_EQUAL; case ':': return FSEARCH_QUERY_TOKEN_CONTAINS; case '<': { char c1 = get_next_char(lexer); if (c1 == '=') { return FSEARCH_QUERY_TOKEN_SMALLER_EQ; } else { give_back_char(lexer, c1); return FSEARCH_QUERY_TOKEN_SMALLER; } } case '>': { char c1 = get_next_char(lexer); if (c1 == '=') { return FSEARCH_QUERY_TOKEN_GREATER_EQ; } else { give_back_char(lexer, c1); return FSEARCH_QUERY_TOKEN_GREATER; } } case '!': return FSEARCH_QUERY_TOKEN_NOT; case '(': return FSEARCH_QUERY_TOKEN_BRACKET_OPEN; case ')': return FSEARCH_QUERY_TOKEN_BRACKET_CLOSE; } give_back_char(lexer, c); // Other chars start a term or field name or reserved word g_autoptr(GString) token_value = g_string_sized_new(1024); while ((c = get_next_char(lexer))) { if (g_ascii_isspace(c)) { // word broken by whitespace break; } else if (c == '"') { parse_quoted_string(lexer, token_value); } else if (c == '\\') { // escape: get next char c = get_next_char(lexer); g_string_append_c(token_value, c); } else if (strchr(reserved_chars, c)) { if (c == ':') { // field: detected c = get_next_char(lexer); if (g_ascii_isspace(c) || c == '\0') { token = FSEARCH_QUERY_TOKEN_FIELD_EMPTY; } else { give_back_char(lexer, c); token = FSEARCH_QUERY_TOKEN_FIELD; } goto out; } // word broken by reserved character give_back_char(lexer, c); break; } else { g_string_append_c(token_value, c); } } if (!strcmp(token_value->str, "NOT")) { return FSEARCH_QUERY_TOKEN_NOT; } if (!strcmp(token_value->str, "AND") || !strcmp(token_value->str, "&&")) { return FSEARCH_QUERY_TOKEN_AND; } else if (!strcmp(token_value->str, "OR") || !strcmp(token_value->str, "||")) { return FSEARCH_QUERY_TOKEN_OR; } token = FSEARCH_QUERY_TOKEN_WORD; out: if (result) { *result = g_steal_pointer(&token_value); } return token; } FsearchQueryToken fsearch_query_lexer_peek_next_token(FsearchQueryLexer *lexer, GString **result) { // remember old lexing state size_t old_input_pos = lexer->input_pos; GQueue *old_char_stack = g_queue_copy(lexer->char_stack); FsearchQueryToken res = fsearch_query_lexer_get_next_token(lexer, result); // restore old lexing state lexer->input_pos = old_input_pos; g_clear_pointer(&lexer->char_stack, g_queue_free); lexer->char_stack = old_char_stack; return res; } FsearchQueryLexer * fsearch_query_lexer_new(const char *input) { g_assert(input); FsearchQueryLexer *lexer = calloc(1, sizeof(FsearchQueryLexer)); g_assert(lexer); lexer->input = g_string_new(input); lexer->input_pos = 0; lexer->char_stack = g_queue_new(); return lexer; } void fsearch_query_lexer_free(FsearchQueryLexer *lexer) { if (lexer == NULL) { return; } g_string_free(g_steal_pointer(&lexer->input), TRUE); g_clear_pointer(&lexer->char_stack, g_queue_free); g_clear_pointer(&lexer, free); } fsearch-0.2.3/src/fsearch_query_lexer.h000066400000000000000000000017671446344336300201530ustar00rootroot00000000000000#pragma once #include typedef enum FsearchQueryToken { FSEARCH_QUERY_TOKEN_NONE, FSEARCH_QUERY_TOKEN_EOS, FSEARCH_QUERY_TOKEN_WORD, FSEARCH_QUERY_TOKEN_FIELD, FSEARCH_QUERY_TOKEN_FIELD_EMPTY, FSEARCH_QUERY_TOKEN_AND, FSEARCH_QUERY_TOKEN_OR, FSEARCH_QUERY_TOKEN_NOT, FSEARCH_QUERY_TOKEN_CONTAINS, FSEARCH_QUERY_TOKEN_GREATER_EQ, FSEARCH_QUERY_TOKEN_GREATER, FSEARCH_QUERY_TOKEN_SMALLER_EQ, FSEARCH_QUERY_TOKEN_SMALLER, FSEARCH_QUERY_TOKEN_EQUAL, FSEARCH_QUERY_TOKEN_BRACKET_OPEN, FSEARCH_QUERY_TOKEN_BRACKET_CLOSE, NUM_FSEARCH_QUERY_TOKENS, } FsearchQueryToken; typedef struct FsearchQueryLexer FsearchQueryLexer; FsearchQueryLexer * fsearch_query_lexer_new(const char *input); void fsearch_query_lexer_free(FsearchQueryLexer *lexer); FsearchQueryToken fsearch_query_lexer_peek_next_token(FsearchQueryLexer *lexer, GString **result); FsearchQueryToken fsearch_query_lexer_get_next_token(FsearchQueryLexer *lexer, GString **result); fsearch-0.2.3/src/fsearch_query_match_data.c000066400000000000000000000170611446344336300211060ustar00rootroot00000000000000#include #include #include #include "fsearch_limits.h" #include "fsearch_query_match_data.h" #include "fsearch_utf.h" struct FsearchQueryMatchData { FsearchDatabaseEntry *entry; FsearchUtfBuilder *utf_name_builder; FsearchUtfBuilder *utf_path_builder; FsearchUtfBuilder *utf_parent_path_builder; GString *path_buffer; GString *parent_path_buffer; GString *content_type_buffer; PangoAttrList **highlights; int32_t thread_id; bool utf_name_ready; bool utf_path_ready; bool utf_parent_path_ready; bool path_ready; bool parent_path_ready; bool content_type_ready; bool matches; bool has_highlights; }; FsearchUtfBuilder * fsearch_query_match_data_get_utf_parent_path_builder(FsearchQueryMatchData *match_data) { if (!match_data->utf_parent_path_ready) { match_data->utf_parent_path_ready = fsearch_utf_builder_normalize_and_fold_case(match_data->utf_parent_path_builder, fsearch_query_match_data_get_parent_path_str(match_data)); } return match_data->utf_parent_path_builder; } FsearchUtfBuilder * fsearch_query_match_data_get_utf_name_builder(FsearchQueryMatchData *match_data) { if (!match_data->utf_name_ready) { match_data->utf_name_ready = fsearch_utf_builder_normalize_and_fold_case(match_data->utf_name_builder, db_entry_get_name_raw_for_display(match_data->entry)); } return match_data->utf_name_builder; } FsearchUtfBuilder * fsearch_query_match_data_get_utf_path_builder(FsearchQueryMatchData *match_data) { if (!match_data->utf_path_ready) { match_data->utf_path_ready = fsearch_utf_builder_normalize_and_fold_case(match_data->utf_path_builder, fsearch_query_match_data_get_path_str(match_data)); } return match_data->utf_path_builder; } const char * fsearch_query_match_data_get_name_str(FsearchQueryMatchData *match_data) { return db_entry_get_name_raw_for_display(match_data->entry); } const char * fsearch_query_match_data_get_parent_path_str(FsearchQueryMatchData *match_data) { if (!match_data->entry) { return NULL; } if (!match_data->parent_path_ready) { g_string_truncate(match_data->parent_path_buffer, 0); db_entry_append_path(match_data->entry, match_data->parent_path_buffer); match_data->parent_path_ready = true; } return match_data->parent_path_buffer->str; } const char * fsearch_query_match_data_get_path_str(FsearchQueryMatchData *match_data) { if (!match_data->entry) { return NULL; } if (!match_data->path_ready) { g_string_truncate(match_data->path_buffer, 0); db_entry_append_full_path(match_data->entry, match_data->path_buffer); match_data->path_ready = true; } return match_data->path_buffer->str; } const char * fsearch_query_match_data_get_content_type_str(FsearchQueryMatchData *match_data) { if (!match_data->entry) { return NULL; } if (!match_data->content_type_ready) { g_string_truncate(match_data->content_type_buffer, 0); db_entry_append_content_type(match_data->entry, match_data->content_type_buffer); match_data->content_type_ready = true; } return match_data->content_type_buffer->str; } FsearchDatabaseEntry * fsearch_query_match_data_get_entry(FsearchQueryMatchData *match_data) { return match_data->entry; } FsearchQueryMatchData * fsearch_query_match_data_new(void) { FsearchQueryMatchData *match_data = calloc(1, sizeof(FsearchQueryMatchData)); g_assert(match_data); match_data->utf_name_builder = calloc(1, sizeof(FsearchUtfBuilder)); match_data->utf_path_builder = calloc(1, sizeof(FsearchUtfBuilder)); match_data->utf_parent_path_builder = calloc(1, sizeof(FsearchUtfBuilder)); fsearch_utf_builder_init(match_data->utf_name_builder, 4 * PATH_MAX); fsearch_utf_builder_init(match_data->utf_path_builder, 4 * PATH_MAX); fsearch_utf_builder_init(match_data->utf_parent_path_builder, 4 * PATH_MAX); match_data->path_buffer = g_string_sized_new(PATH_MAX); match_data->parent_path_buffer = g_string_sized_new(PATH_MAX); match_data->content_type_buffer = g_string_sized_new(PATH_MAX); match_data->highlights = calloc(NUM_DATABASE_INDEX_TYPES, sizeof(PangoAttrList *)); match_data->has_highlights = false; match_data->utf_name_ready = false; match_data->utf_path_ready = false; match_data->utf_parent_path_ready = false; match_data->path_ready = false; match_data->parent_path_ready = false; match_data->content_type_ready = false; return match_data; } static void free_highlights(FsearchQueryMatchData *match_data) { if (!match_data->has_highlights) { return; } for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { if (match_data->highlights[i]) { g_clear_pointer(&match_data->highlights[i], pango_attr_list_unref); } } match_data->has_highlights = false; } void fsearch_query_match_data_free(FsearchQueryMatchData *match_data) { if (!match_data) { return; } free_highlights(match_data); g_clear_pointer(&match_data->highlights, free); fsearch_utf_builder_clear(match_data->utf_name_builder); g_clear_pointer(&match_data->utf_name_builder, free); fsearch_utf_builder_clear(match_data->utf_path_builder); g_clear_pointer(&match_data->utf_path_builder, free); fsearch_utf_builder_clear(match_data->utf_parent_path_builder); g_clear_pointer(&match_data->utf_parent_path_builder, free); g_string_free(g_steal_pointer(&match_data->path_buffer), TRUE); g_string_free(g_steal_pointer(&match_data->parent_path_buffer), TRUE); g_string_free(g_steal_pointer(&match_data->content_type_buffer), TRUE); g_clear_pointer(&match_data, free); } void fsearch_query_match_data_set_entry(FsearchQueryMatchData *match_data, FsearchDatabaseEntry *entry) { if (!match_data) { return; } // invalidate string buffers free_highlights(match_data); match_data->utf_name_ready = false; match_data->utf_path_ready = false; match_data->utf_parent_path_ready = false; match_data->path_ready = false; match_data->parent_path_ready = false; match_data->content_type_ready = false; match_data->entry = entry; } void fsearch_query_match_data_set_result(FsearchQueryMatchData *match_data, bool result) { match_data->matches = result; } bool fsearch_query_match_data_get_result(FsearchQueryMatchData *match_data) { return match_data->matches; } void fsearch_query_match_data_set_thread_id(FsearchQueryMatchData *match_data, int32_t thread_id) { match_data->thread_id = thread_id; } int32_t fsearch_query_match_data_get_thread_id(FsearchQueryMatchData *match_data) { return match_data->thread_id; } PangoAttrList * fsearch_query_match_get_highlight(FsearchQueryMatchData *match_data, FsearchDatabaseIndexType idx) { g_assert(idx < NUM_DATABASE_INDEX_TYPES); return match_data->highlights[idx]; } void fsearch_query_match_data_add_highlight(FsearchQueryMatchData *match_data, PangoAttribute *attribute, FsearchDatabaseIndexType idx) { g_assert(idx < NUM_DATABASE_INDEX_TYPES); if (!match_data->highlights[idx]) { match_data->highlights[idx] = pango_attr_list_new(); } pango_attr_list_change(match_data->highlights[idx], attribute); match_data->has_highlights = true; } fsearch-0.2.3/src/fsearch_query_match_data.h000066400000000000000000000036411446344336300211120ustar00rootroot00000000000000#pragma once #include "fsearch_database_entry.h" #include "fsearch_database_index.h" #include "fsearch_utf.h" #include #include #include typedef struct FsearchQueryMatchData FsearchQueryMatchData; FsearchQueryMatchData * fsearch_query_match_data_new(void); void fsearch_query_match_data_free(FsearchQueryMatchData *match_data); void fsearch_query_match_data_set_entry(FsearchQueryMatchData *match_data, FsearchDatabaseEntry *entry); void fsearch_query_match_data_add_highlight(FsearchQueryMatchData *match_data, PangoAttribute *attribute, FsearchDatabaseIndexType idx); PangoAttrList * fsearch_query_match_get_highlight(FsearchQueryMatchData *match_data, FsearchDatabaseIndexType idx); void fsearch_query_match_data_set_thread_id(FsearchQueryMatchData *match_data, int32_t thread_id); int32_t fsearch_query_match_data_get_thread_id(FsearchQueryMatchData *match_data); void fsearch_query_match_data_set_result(FsearchQueryMatchData *match_data, bool result); bool fsearch_query_match_data_get_result(FsearchQueryMatchData *match_data); const char * fsearch_query_match_data_get_name_str(FsearchQueryMatchData *match_data); const char * fsearch_query_match_data_get_parent_path_str(FsearchQueryMatchData *match_data); const char * fsearch_query_match_data_get_path_str(FsearchQueryMatchData *match_data); const char * fsearch_query_match_data_get_content_type_str(FsearchQueryMatchData *match_data); FsearchUtfBuilder * fsearch_query_match_data_get_utf_parent_path_builder(FsearchQueryMatchData *match_data); FsearchUtfBuilder * fsearch_query_match_data_get_utf_path_builder(FsearchQueryMatchData *match_data); FsearchUtfBuilder * fsearch_query_match_data_get_utf_name_builder(FsearchQueryMatchData *match_data); FsearchDatabaseEntry * fsearch_query_match_data_get_entry(FsearchQueryMatchData *match_data); fsearch-0.2.3/src/fsearch_query_matchers.c000066400000000000000000000315051446344336300206260ustar00rootroot00000000000000#define _GNU_SOURCE #include "fsearch_query_matchers.h" #include "fsearch_query_node.h" #include uint32_t fsearch_query_matcher_false(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return 0; } uint32_t fsearch_query_matcher_true(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return 1; } uint32_t fsearch_query_matcher_extension(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { if (!node->search_term_list) { return 0; } FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); const char *ext = db_entry_get_extension(entry); if (!ext) { return 0; } for (uint32_t i = 0; i < node->search_term_list->len; i++) { int32_t res = 0; if (node->flags & QUERY_FLAG_MATCH_CASE) { res = strcmp(ext, g_ptr_array_index(node->search_term_list, i)); } else { res = strcasecmp(ext, g_ptr_array_index(node->search_term_list, i)); } if (res == 0) { return 1; } else if (res < 0) { return 0; } } return 0; } static inline uint32_t cmp_num(int64_t num, FsearchQueryNode *node) { switch (node->comparison_type) { case FSEARCH_QUERY_NODE_COMPARISON_EQUAL: return num == node->num_start; case FSEARCH_QUERY_NODE_COMPARISON_GREATER: return num > node->num_start; case FSEARCH_QUERY_NODE_COMPARISON_SMALLER: return num < node->num_start; case FSEARCH_QUERY_NODE_COMPARISON_GREATER_EQ: return num >= node->num_start; case FSEARCH_QUERY_NODE_COMPARISON_SMALLER_EQ: return num <= node->num_start; case FSEARCH_QUERY_NODE_COMPARISON_RANGE: return node->num_start <= num && num < node->num_end; default: return 0; } } uint32_t fsearch_query_matcher_date_modified(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry) { const int64_t time = db_entry_get_mtime(entry); return cmp_num(time, node); } return 0; } uint32_t fsearch_query_matcher_depth(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry) { const int64_t depth = db_entry_get_depth(entry); return cmp_num(depth, node); } return 0; } uint32_t fsearch_query_matcher_childcount(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry && db_entry_is_folder(entry)) { const int64_t num_children = db_entry_folder_get_num_children((FsearchDatabaseEntryFolder *)entry); return cmp_num(num_children, node); } return 0; } uint32_t fsearch_query_matcher_childfilecount(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry && db_entry_is_folder(entry)) { const int64_t num_files = db_entry_folder_get_num_files((FsearchDatabaseEntryFolder *)entry); return cmp_num(num_files, node); } return 0; } uint32_t fsearch_query_matcher_childfoldercount(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry && db_entry_is_folder(entry)) { const int64_t num_folders = db_entry_folder_get_num_folders((FsearchDatabaseEntryFolder *)entry); return cmp_num(num_folders, node); } return 0; } uint32_t fsearch_query_matcher_size(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); if (entry) { const int64_t size = db_entry_get_size(entry); return cmp_num(size, node); } return 0; } static void add_path_highlight(FsearchQueryMatchData *match_data, uint32_t start_idx, uint32_t needle_len) { // It's possible that the path highlighting spans across both the path and name string const char *name = fsearch_query_match_data_get_name_str(match_data); const char *path = fsearch_query_match_data_get_path_str(match_data); const size_t name_len = strlen(name); const size_t path_len = strlen(path); const size_t parent_len = path_len - name_len; PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa->start_index = start_idx; if (pa->start_index > parent_len) { // the matching part is only in the file name pa->start_index -= parent_len; pa->end_index = pa->start_index + needle_len; fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_NAME); return; } else if (pa->start_index + needle_len > parent_len) { // the matching part spans across the path and name pa->end_index = G_MAXUINT; fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_PATH); PangoAttribute *pa_name = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa_name->start_index = 0; pa_name->end_index = pa->start_index + needle_len - parent_len; fsearch_query_match_data_add_highlight(match_data, pa_name, DATABASE_INDEX_TYPE_NAME); return; } else { // the matching part is only in the path name pa->end_index = pa->start_index + needle_len; fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_PATH); return; } } uint32_t fsearch_query_matcher_regex(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { const char *haystack = node->haystack_func(match_data); const size_t haystack_len = strlen(haystack); if (G_UNLIKELY(!node->regex)) { return 0; } const int32_t thread_id = fsearch_query_match_data_get_thread_id(match_data); pcre2_match_data *regex_match_data = g_ptr_array_index(node->regex_match_data_for_threads, thread_id); if (G_UNLIKELY(!regex_match_data)) { return 0; } int num_matches = 0; if (G_LIKELY(node->regex_jit_available)) { num_matches = pcre2_jit_match(node->regex, (PCRE2_SPTR)haystack, (PCRE2_SIZE)haystack_len, 0, 0, regex_match_data, NULL); } else { num_matches = pcre2_match(node->regex, (PCRE2_SPTR)haystack, (PCRE2_SIZE)haystack_len, 0, 0, regex_match_data, NULL); } return num_matches > 0 ? 1 : 0; } uint32_t fsearch_query_matcher_utf_strcasestr(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchUtfBuilder *haystack_builder = node->haystack_func(match_data); FsearchUtfBuilder *needle_builder = node->needle_builder; if (G_LIKELY(haystack_builder->string_is_folded_and_normalized)) { return u_strFindFirst(haystack_builder->string_normalized_folded, haystack_builder->string_normalized_folded_len, needle_builder->string_normalized_folded, needle_builder->string_normalized_folded_len) ? 1 : 0; } return 0; } uint32_t fsearch_query_matcher_utf_strcasecmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { FsearchUtfBuilder *haystack_builder = node->haystack_func(match_data); FsearchUtfBuilder *needle_builder = node->needle_builder; if (G_LIKELY(haystack_builder->string_is_folded_and_normalized)) { return !u_strCompare(haystack_builder->string_normalized_folded, haystack_builder->string_normalized_folded_len, needle_builder->string_normalized_folded, needle_builder->string_normalized_folded_len, false) ? 1 : 0; } return 0; } uint32_t fsearch_query_matcher_strstr(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return strstr(node->haystack_func(match_data), node->needle) ? 1 : 0; } uint32_t fsearch_query_matcher_strcasestr(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return strcasestr(node->haystack_func(match_data), node->needle) ? 1 : 0; } uint32_t fsearch_query_matcher_strcmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return !strcmp(node->haystack_func(match_data), node->needle) ? 1 : 0; } uint32_t fsearch_query_matcher_strcasecmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return !strcasecmp(node->haystack_func(match_data), node->needle) ? 1 : 0; } uint32_t fsearch_query_matcher_highlight_none(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { return 1; } uint32_t fsearch_query_matcher_highlight_extension(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { if (!node->search_term_list) { return 0; } if (!fsearch_query_matcher_extension(node, match_data)) { return 0; } FsearchDatabaseEntry *entry = fsearch_query_match_data_get_entry(match_data); const char *ext = db_entry_get_extension(entry); const char *name = fsearch_query_match_data_get_name_str(match_data); if (!name) { return 0; } const size_t name_len = strlen(name); const size_t ext_len = strlen(ext); PangoAttribute *pa_name = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa_name->start_index = name_len - ext_len; pa_name->end_index = G_MAXUINT; fsearch_query_match_data_add_highlight(match_data, pa_name, DATABASE_INDEX_TYPE_NAME); PangoAttribute *pa_ext = pango_attr_weight_new(PANGO_WEIGHT_BOLD); fsearch_query_match_data_add_highlight(match_data, pa_ext, DATABASE_INDEX_TYPE_EXTENSION); return 1; } uint32_t fsearch_query_matcher_highlight_size(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { if (fsearch_query_matcher_size(node, match_data)) { PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_SIZE); return 1; } return 0; } uint32_t fsearch_query_matcher_highlight_regex(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { const bool search_in_path = node->flags & QUERY_FLAG_SEARCH_IN_PATH; const char *haystack = node->haystack_func(match_data); const int32_t thread_id = fsearch_query_match_data_get_thread_id(match_data); const size_t haystack_len = strlen(haystack); pcre2_match_data *regex_match_data = g_ptr_array_index(node->regex_match_data_for_threads, thread_id); if (!regex_match_data) { return 0; } const int num_matches = pcre2_match(node->regex, (PCRE2_SPTR)haystack, (PCRE2_SIZE)haystack_len, 0, 0, regex_match_data, NULL); if (num_matches <= 0) { return 0; } PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(regex_match_data); for (int i = 0; i < num_matches; i++) { const uint32_t start_idx = ovector[2 * i]; const uint32_t end_idx = ovector[2 * i + 1]; if (!search_in_path) { PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa->start_index = start_idx; pa->end_index = end_idx; fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_NAME); } else { add_path_highlight(match_data, start_idx, end_idx - start_idx); } } return 1; } uint32_t fsearch_query_matcher_highlight_ascii(FsearchQueryNode *node, FsearchQueryMatchData *match_data) { const bool search_in_path = node->flags & QUERY_FLAG_SEARCH_IN_PATH; const char *haystack = node->haystack_func(match_data); if (node->flags & QUERY_FLAG_EXACT_MATCH) { if (node->flags & QUERY_FLAG_MATCH_CASE ? !strcmp(haystack, node->needle) : !strcasecmp(haystack, node->needle)) { PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_NAME); if (search_in_path) { PangoAttribute *pa_path = pango_attr_weight_new(PANGO_WEIGHT_BOLD); fsearch_query_match_data_add_highlight(match_data, pa_path, DATABASE_INDEX_TYPE_PATH); } return 1; } return 0; } char *dest = node->flags & QUERY_FLAG_MATCH_CASE ? strstr(haystack, node->needle) : strcasestr(haystack, node->needle); if (!dest) { return 0; } if (search_in_path) { const size_t needle_len = strlen(node->needle); add_path_highlight(match_data, dest - haystack, needle_len); } else { PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa->start_index = dest - haystack; pa->end_index = pa->start_index + strlen(node->needle); fsearch_query_match_data_add_highlight(match_data, pa, DATABASE_INDEX_TYPE_NAME); } return 1; } fsearch-0.2.3/src/fsearch_query_matchers.h000066400000000000000000000043751446344336300206400ustar00rootroot00000000000000#pragma once #include "fsearch_query_match_data.h" #include "fsearch_query_node.h" #include #include uint32_t fsearch_query_matcher_false(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_true(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_extension(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_date_modified(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_depth(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_childcount(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_childfilecount(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_childfoldercount(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_size(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_regex(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_utf_strcasecmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_utf_strcasestr(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_strstr(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_strcasestr(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_strcmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_strcasecmp(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_highlight_none(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_highlight_extension(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_highlight_size(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_highlight_regex(FsearchQueryNode *node, FsearchQueryMatchData *match_data); uint32_t fsearch_query_matcher_highlight_ascii(FsearchQueryNode *node, FsearchQueryMatchData *match_data); fsearch-0.2.3/src/fsearch_query_node.c000066400000000000000000000424741446344336300177540ustar00rootroot00000000000000#define _GNU_SOURCE #define G_LOG_DOMAIN "fsearch-query-node" #include "fsearch_query_node.h" #include "fsearch_limits.h" #include "fsearch_query_matchers.h" #include "fsearch_size_utils.h" #include "fsearch_string_utils.h" #include "fsearch_utf.h" #include #include #include static void node_init_needle(FsearchQueryNode *node, const char *needle) { g_assert(node); g_assert(needle); // node->needle must not be set already g_assert_null(node->needle); g_assert_null(node->needle_builder); node->needle = g_strdup(needle); node->needle_len = strlen(needle); // set up case folded needle in UTF16 format node->needle_builder = calloc(1, sizeof(FsearchUtfBuilder)); fsearch_utf_builder_init(node->needle_builder, 8 * node->needle_len); const bool utf_ready = fsearch_utf_builder_normalize_and_fold_case(node->needle_builder, needle); g_assert(utf_ready == true); } void fsearch_query_node_free(FsearchQueryNode *node) { g_assert(node); fsearch_utf_builder_clear(node->needle_builder); if (node->description) { g_string_free(g_steal_pointer(&node->description), TRUE); } g_clear_pointer(&node->search_term_list, g_ptr_array_unref); g_clear_pointer(&node->needle_builder, free); g_clear_pointer(&node->needle, g_free); if (node->regex_match_data_for_threads) { g_ptr_array_free(g_steal_pointer(&node->regex_match_data_for_threads), TRUE); } g_clear_pointer(&node->regex, pcre2_code_free); g_clear_pointer(&node, g_free); } static char * get_needle_description_for_comparison_type(int64_t start, int64_t end, FsearchQueryNodeComparison comp_type) { switch (comp_type) { case FSEARCH_QUERY_NODE_COMPARISON_EQUAL: return g_strdup_printf("=%ld", start); case FSEARCH_QUERY_NODE_COMPARISON_GREATER_EQ: return g_strdup_printf(">=%ld", start); case FSEARCH_QUERY_NODE_COMPARISON_GREATER: return g_strdup_printf(">%ld", start); case FSEARCH_QUERY_NODE_COMPARISON_SMALLER_EQ: return g_strdup_printf("<=%ld", start); case FSEARCH_QUERY_NODE_COMPARISON_SMALLER: return g_strdup_printf("<%ld", start); case FSEARCH_QUERY_NODE_COMPARISON_RANGE: return g_strdup_printf("%ld..%ld", start, end); default: return g_strdup("invalid"); } } static FsearchQueryNode * new_numeric_node(int64_t num_start, int64_t num_end, FsearchQueryNodeComparison comp_type, const char *description, FsearchQueryNodeMatchFunc search_func, FsearchQueryNodeMatchFunc highlight_func, FsearchQueryFlags flags) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->needle = get_needle_description_for_comparison_type(num_start, num_end, comp_type); qnode->description = g_string_new(description); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->num_start = num_start; qnode->num_end = num_end; qnode->comparison_type = comp_type; qnode->search_func = search_func; qnode->highlight_func = highlight_func; qnode->flags = flags; return qnode; } FsearchQueryNode * fsearch_query_node_new_date_modified(FsearchQueryFlags flags, int64_t dm_start, int64_t dm_end, FsearchQueryNodeComparison comp_type) { if (comp_type == FSEARCH_QUERY_NODE_COMPARISON_EQUAL) { // For dates we need to convert comparisons for equality to ranges. // E.g. dm:=january doesn't mean 1 January 00:00 but the whole January comp_type = FSEARCH_QUERY_NODE_COMPARISON_RANGE; } return new_numeric_node(dm_start, dm_end, comp_type, "date-modified", fsearch_query_matcher_date_modified, NULL, flags); } FsearchQueryNode * fsearch_query_node_new_size(FsearchQueryFlags flags, int64_t size_start, int64_t size_end, FsearchQueryNodeComparison comp_type) { return new_numeric_node(size_start, size_end, comp_type, "size", fsearch_query_matcher_size, fsearch_query_matcher_highlight_size, flags); } FsearchQueryNode * fsearch_query_node_new_depth(FsearchQueryFlags flags, int64_t child_count_start, int64_t child_count_end, FsearchQueryNodeComparison comp_type) { return new_numeric_node(child_count_start, child_count_end, comp_type, "depth", fsearch_query_matcher_depth, NULL, flags); } FsearchQueryNode * fsearch_query_node_new_childcount(FsearchQueryFlags flags, int64_t child_count_start, int64_t child_count_end, FsearchQueryNodeComparison comp_type) { return new_numeric_node(child_count_start, child_count_end, comp_type, "childcount", fsearch_query_matcher_childcount, NULL, flags); } FsearchQueryNode * fsearch_query_node_new_childfilecount(FsearchQueryFlags flags, int64_t child_file_count_start, int64_t child_file_count_end, FsearchQueryNodeComparison comp_type) { return new_numeric_node(child_file_count_start, child_file_count_end, comp_type, "childfilecount", fsearch_query_matcher_childfilecount, NULL, flags); } FsearchQueryNode * fsearch_query_node_new_childfoldercount(FsearchQueryFlags flags, int64_t child_folder_count_start, int64_t child_folder_count_end, FsearchQueryNodeComparison comp_type) { return new_numeric_node(child_folder_count_start, child_folder_count_end, comp_type, "childfoldercount", fsearch_query_matcher_childfoldercount, NULL, flags); } FsearchQueryNode * fsearch_query_node_new_operator(FsearchQueryNodeOperator operator) { g_assert(operator== FSEARCH_QUERY_NODE_OPERATOR_AND || operator== FSEARCH_QUERY_NODE_OPERATOR_OR || operator== FSEARCH_QUERY_NODE_OPERATOR_NOT); FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->description = g_string_new(operator== FSEARCH_QUERY_NODE_OPERATOR_AND ? "AND" : (operator== FSEARCH_QUERY_NODE_OPERATOR_OR ? "OR" : "NOT")); qnode->type = FSEARCH_QUERY_NODE_TYPE_OPERATOR; qnode->operator= operator; return qnode; } FsearchQueryNode * fsearch_query_node_new_match_nothing(void) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->description = g_string_new("match_nothing"); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->search_func = fsearch_query_matcher_false; qnode->highlight_func = fsearch_query_matcher_highlight_none; qnode->flags = 0; return qnode; } FsearchQueryNode * fsearch_query_node_new_match_everything(FsearchQueryFlags flags) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->description = g_string_new("match_everything"); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->search_func = fsearch_query_matcher_true; qnode->highlight_func = fsearch_query_matcher_highlight_none; qnode->flags = flags; return qnode; } FsearchQueryNode * fsearch_query_node_new_regex(const char *search_term, FsearchQueryFlags flags) { int error_code; PCRE2_SIZE erroroffset; uint32_t regex_options = PCRE2_UTF | (flags & QUERY_FLAG_MATCH_CASE ? 0 : PCRE2_CASELESS); pcre2_code *regex = pcre2_compile((PCRE2_SPTR)search_term, (PCRE2_SIZE)strlen(search_term), regex_options, &error_code, &erroroffset, NULL); if (!regex) { PCRE2_UCHAR buffer[256] = ""; pcre2_get_error_message(error_code, buffer, sizeof(buffer)); g_debug("[regex] PCRE2 compilation failed at offset %d. Error message: %s", (int)erroroffset, buffer); return fsearch_query_node_new_match_nothing(); } FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->description = g_string_new("regex"); qnode->needle = g_strdup(search_term); qnode->regex = regex; qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->flags = flags; if (pcre2_jit_compile(regex, PCRE2_JIT_COMPLETE) != 0) { g_debug("[regex] JIT compilation failed.\n"); qnode->regex_jit_available = false; } else { qnode->regex_jit_available = true; } qnode->regex_match_data_for_threads = g_ptr_array_sized_new(FSEARCH_THREAD_LIMIT); g_ptr_array_set_free_func(qnode->regex_match_data_for_threads, (GDestroyNotify)pcre2_match_data_free); for (int32_t i = 0; i < FSEARCH_THREAD_LIMIT; i++) { g_ptr_array_add(qnode->regex_match_data_for_threads, pcre2_match_data_create_from_pattern(qnode->regex, NULL)); } qnode->search_func = fsearch_query_matcher_regex; qnode->haystack_func = (FsearchQueryNodeHaystackFunc *)(flags & QUERY_FLAG_SEARCH_IN_PATH ? fsearch_query_match_data_get_path_str : fsearch_query_match_data_get_name_str); qnode->highlight_func = fsearch_query_matcher_highlight_regex; return qnode; } FsearchQueryNode * fsearch_query_node_new_parent(const char *search_term, FsearchQueryFlags flags) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->description = g_string_new("parent"); node_init_needle(qnode, search_term); qnode->highlight_func = NULL; qnode->flags = flags; if (fsearch_string_is_ascii_icase(qnode->needle) || flags & QUERY_FLAG_MATCH_CASE) { qnode->search_func = flags & QUERY_FLAG_MATCH_CASE ? fsearch_query_matcher_strcmp : fsearch_query_matcher_strcasecmp; qnode->haystack_func = (FsearchQueryNodeHaystackFunc *)fsearch_query_match_data_get_parent_path_str; qnode->description = g_string_new("parent_ascii"); } else { qnode->search_func = fsearch_query_matcher_utf_strcasecmp; qnode->haystack_func = (FsearchQueryNodeHaystackFunc *)fsearch_query_match_data_get_utf_parent_path_builder; qnode->description = g_string_new("parent_utf"); } return qnode; } static int32_t cmp_strcasecmp(gconstpointer a, gconstpointer b) { const char *aa = *(char **)a; const char *bb = *(char **)b; return strcasecmp(aa, bb); } static int32_t cmp_strcmp(gconstpointer a, gconstpointer b) { const char *aa = *(char **)a; const char *bb = *(char **)b; return strcmp(aa, bb); } FsearchQueryNode * fsearch_query_node_new_extension(const char *search_term, FsearchQueryFlags flags) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->description = g_string_new("ext"); qnode->search_func = fsearch_query_matcher_extension; qnode->highlight_func = fsearch_query_matcher_highlight_extension; qnode->flags = flags | QUERY_FLAG_FILES_ONLY; qnode->search_term_list = g_ptr_array_new_full(16, g_free); if (!search_term) { // Show all files with no extension qnode->needle = g_strdup(""); g_ptr_array_add(qnode->search_term_list, g_strdup("")); } else { qnode->needle = g_strdup(search_term); g_auto(GStrv) search_terms = g_strsplit(search_term, ";", -1); const uint32_t num_search_terms = g_strv_length(search_terms); for (uint32_t i = 0; i < num_search_terms; ++i) { g_ptr_array_add(qnode->search_term_list, g_strdup(search_terms[i])); } g_ptr_array_sort(qnode->search_term_list, (qnode->flags & QUERY_FLAG_MATCH_CASE) ? cmp_strcmp : cmp_strcasecmp); } return qnode; } FsearchQueryNode * fsearch_query_node_new_wildcard(const char *search_term, FsearchQueryFlags flags) { // We convert the wildcard pattern to a regex pattern // The regex engine is not only faster than fnmatch, but it also handles utf8 strings better // and it provides matching information, which are useful for the highlighting engine g_autofree char *regex_search_term = fsearch_string_convert_wildcard_to_regex_expression(search_term); if (!regex_search_term) { return fsearch_query_node_new_match_nothing(); } return fsearch_query_node_new_regex(regex_search_term, flags); } static FsearchQueryNode * query_node_new_string_comparison(const char *search_term, FsearchQueryFlags flags) { FsearchQueryNode *qnode = calloc(1, sizeof(FsearchQueryNode)); g_assert(qnode); qnode->type = FSEARCH_QUERY_NODE_TYPE_QUERY; qnode->flags = flags; node_init_needle(qnode, search_term); if (fsearch_string_is_ascii_icase(search_term) || flags & QUERY_FLAG_MATCH_CASE) { if (flags & QUERY_FLAG_EXACT_MATCH) { qnode->search_func = flags & QUERY_FLAG_MATCH_CASE ? fsearch_query_matcher_strcmp : fsearch_query_matcher_strcasecmp; } else { qnode->search_func = flags & QUERY_FLAG_MATCH_CASE ? fsearch_query_matcher_strstr : fsearch_query_matcher_strcasestr; } qnode->haystack_func = (FsearchQueryNodeHaystackFunc *)(flags & QUERY_FLAG_SEARCH_IN_PATH ? fsearch_query_match_data_get_path_str : fsearch_query_match_data_get_name_str); qnode->highlight_func = fsearch_query_matcher_highlight_ascii; qnode->description = g_string_new("ascii_icase"); } else { qnode->search_func = flags & QUERY_FLAG_EXACT_MATCH ? fsearch_query_matcher_utf_strcasecmp : fsearch_query_matcher_utf_strcasestr; qnode->haystack_func = (FsearchQueryNodeHaystackFunc *)(flags & QUERY_FLAG_SEARCH_IN_PATH ? fsearch_query_match_data_get_utf_path_builder : fsearch_query_match_data_get_utf_name_builder); qnode->highlight_func = NULL; qnode->description = g_string_new("utf_icase"); } return qnode; } FsearchQueryNode * fsearch_query_node_new_contenttype(const char *search_term, FsearchQueryFlags flags) { FsearchQueryNode *res = NULL; if (flags & QUERY_FLAG_REGEX) { res = fsearch_query_node_new_regex(search_term, flags); } else if (fsearch_string_has_wildcards(search_term)) { res = fsearch_query_node_new_wildcard(search_term, flags); } else { res = query_node_new_string_comparison(search_term, flags); } if (res) { g_string_prepend(res->description, "contenttype_"); res->haystack_func = (FsearchQueryNodeHaystackFunc *)fsearch_query_match_data_get_content_type_str; res->highlight_func = fsearch_query_matcher_highlight_none; res->wants_single_threaded_search = true; } return res; } FsearchQueryNode * fsearch_query_node_new(const char *search_term, FsearchQueryFlags flags) { const bool has_separator = strchr(search_term, G_DIR_SEPARATOR) ? 1 : 0; const bool triggers_auto_match_case = !(flags & QUERY_FLAG_MATCH_CASE) && flags & QUERY_FLAG_AUTO_MATCH_CASE && fsearch_string_utf8_has_upper(search_term); const bool triggers_auto_match_path = !(flags & QUERY_FLAG_SEARCH_IN_PATH) && flags & QUERY_FLAG_AUTO_SEARCH_IN_PATH && has_separator; if (triggers_auto_match_path) { flags |= QUERY_FLAG_SEARCH_IN_PATH; } if (triggers_auto_match_case) { flags |= QUERY_FLAG_MATCH_CASE; } FsearchQueryNode *res = NULL; if (flags & QUERY_FLAG_REGEX) { res = fsearch_query_node_new_regex(search_term, flags); } else if (fsearch_string_has_wildcards(search_term)) { res = fsearch_query_node_new_wildcard(search_term, flags); } else { res = query_node_new_string_comparison(search_term, flags); } if (res) { res->triggers_auto_match_case = triggers_auto_match_case; res->triggers_auto_match_path = triggers_auto_match_path; } return res; } fsearch-0.2.3/src/fsearch_query_node.h000066400000000000000000000115151446344336300177510ustar00rootroot00000000000000 #pragma once #define PCRE2_CODE_UNIT_WIDTH 8 #include #include #include #include #include #include #include "fsearch_database_index.h" #include "fsearch_filter_manager.h" #include "fsearch_query_flags.h" #include "fsearch_query_match_data.h" #include "fsearch_utf.h" typedef struct FsearchQueryNode FsearchQueryNode; typedef uint32_t(FsearchQueryNodeMatchFunc)(FsearchQueryNode *, FsearchQueryMatchData *); typedef void *(FsearchQueryNodeHaystackFunc)(FsearchQueryMatchData *); typedef enum FsearchQueryNodeType { FSEARCH_QUERY_NODE_TYPE_OPERATOR, FSEARCH_QUERY_NODE_TYPE_QUERY, NUM_FSEARCH_QUERY_NODE_TYPES, } FsearchQueryNodeType; typedef enum FsearchQueryNodeComparison { FSEARCH_QUERY_NODE_COMPARISON_EQUAL, FSEARCH_QUERY_NODE_COMPARISON_GREATER, FSEARCH_QUERY_NODE_COMPARISON_GREATER_EQ, FSEARCH_QUERY_NODE_COMPARISON_SMALLER, FSEARCH_QUERY_NODE_COMPARISON_SMALLER_EQ, FSEARCH_QUERY_NODE_COMPARISON_RANGE, NUM_FSEARCH_QUERY_NODE_COMPARISONS, } FsearchQueryNodeComparison; typedef enum FsearchQueryNodeOperator { FSEARCH_QUERY_NODE_OPERATOR_AND, FSEARCH_QUERY_NODE_OPERATOR_OR, FSEARCH_QUERY_NODE_OPERATOR_NOT, NUM_FSEARCH_QUERY_NODE_OPERATORS, } FsearchQueryNodeOperator; struct FsearchQueryNode { FsearchQueryNodeType type; GString *description; FsearchQueryNodeOperator operator; char *needle; size_t needle_len; GPtrArray *search_term_list; int64_t num_start; int64_t num_end; FsearchQueryNodeComparison comparison_type; FsearchQueryNodeMatchFunc *search_func; FsearchQueryNodeMatchFunc *highlight_func; FsearchQueryNodeHaystackFunc *haystack_func; FsearchUtfBuilder *needle_builder; // Using the pcre2_code with multiple threads is safe. // However, pcre2_match_data can't be shared across threads. // So to avoid frequent calls to pcre2_match_data_create_from_pattern during the matching process, // we simply generate an array which holds a unique instance for each thread per regex node. pcre2_code *regex; GPtrArray *regex_match_data_for_threads; bool regex_jit_available; FsearchQueryFlags flags; bool triggers_auto_match_case; bool triggers_auto_match_path; bool wants_single_threaded_search; }; void fsearch_query_node_free(FsearchQueryNode *node); FsearchQueryNode * fsearch_query_node_new_date_modified(FsearchQueryFlags flags, int64_t dm_start, int64_t dm_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode * fsearch_query_node_new_size(FsearchQueryFlags flags, int64_t size_start, int64_t size_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode * fsearch_query_node_new_depth(FsearchQueryFlags flags, int64_t child_folder_count_start, int64_t child_folder_count_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode * fsearch_query_node_new_childcount(FsearchQueryFlags flags, int64_t child_folder_count_start, int64_t child_folder_count_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode * fsearch_query_node_new_childfoldercount(FsearchQueryFlags flags, int64_t child_folder_count_start, int64_t child_folder_count_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode * fsearch_query_node_new_childfilecount(FsearchQueryFlags flags, int64_t child_file_count_start, int64_t child_file_count_end, FsearchQueryNodeComparison comp_type); FsearchQueryNode *fsearch_query_node_new_operator(FsearchQueryNodeOperator operator); FsearchQueryNode * fsearch_query_node_new_match_nothing(void); FsearchQueryNode * fsearch_query_node_new_match_everything(FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new_regex(const char *search_term, FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new_wildcard(const char *search_term, FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new_parent(const char *search_term, FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new_extension(const char *search_term, FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new_contenttype(const char *search_term, FsearchQueryFlags flags); FsearchQueryNode * fsearch_query_node_new(const char *search_term, FsearchQueryFlags flags); fsearch-0.2.3/src/fsearch_query_parser.c000066400000000000000000000707231446344336300203210ustar00rootroot00000000000000#include "fsearch_query_parser.h" #include "fsearch_query_lexer.h" #include "fsearch_query_node.h" #include "fsearch_size_utils.h" #include "fsearch_string_utils.h" #include "fsearch_time_utils.h" #include typedef FsearchQueryNode *(FsearchQueryComparisonNewNodeFunc)(FsearchQueryFlags, int64_t, int64_t, FsearchQueryNodeComparison); typedef bool(FsearchQueryIntegerParserFunc)(const char *, int64_t *, int64_t *); static GList * parse_open_bracket(FsearchQueryParseContext *parse_ctx); static GList * parse_close_bracket(FsearchQueryParseContext *parse_ctx); static GList * parse_operator(FsearchQueryParseContext *parse_ctx, FsearchQueryToken token); static GList * parse_word(GString *field_name, FsearchQueryFlags flags); static GList * parse_field(FsearchQueryParseContext *parse_ctx, GString *field_name, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_modifier(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_date_modified(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_depth(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_size(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_empty(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_childcount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_childfilecount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_childfoldercount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_contenttype(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_extension(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * parse_function_parent(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags); static GList * get_implicit_and_if_necessary(FsearchQueryParseContext *parse_ctx, FsearchQueryToken last_token, FsearchQueryToken next_token); typedef GList *(FsearchTokenFunctionParser)(FsearchQueryParseContext *parse_ctx, bool, FsearchQueryFlags); typedef enum { ADD_FLAG, REMOVE_FLAG, } FsearchQueryFlagOperation; typedef struct FsearchTokenModifier { const char *name; FsearchQueryFlags flag; FsearchQueryFlagOperation flag_operation; } FsearchTokenModifier; typedef struct FsearchTokenFunction { const char *name; FsearchTokenFunctionParser *parser; } FsearchTokenFunction; FsearchTokenModifier supported_modifiers[] = { {"case", QUERY_FLAG_MATCH_CASE, ADD_FLAG}, {"nocase", QUERY_FLAG_MATCH_CASE, REMOVE_FLAG}, {"exact", QUERY_FLAG_EXACT_MATCH, ADD_FLAG}, {"file", QUERY_FLAG_FILES_ONLY, ADD_FLAG}, {"nofileonly", QUERY_FLAG_FILES_ONLY, REMOVE_FLAG}, {"files", QUERY_FLAG_FILES_ONLY, ADD_FLAG}, {"nofilesonly", QUERY_FLAG_FILES_ONLY, REMOVE_FLAG}, {"folder", QUERY_FLAG_FOLDERS_ONLY, ADD_FLAG}, {"nofolderonly", QUERY_FLAG_FOLDERS_ONLY, REMOVE_FLAG}, {"folders", QUERY_FLAG_FOLDERS_ONLY, ADD_FLAG}, {"nofoldersonly", QUERY_FLAG_FOLDERS_ONLY, REMOVE_FLAG}, {"path", QUERY_FLAG_SEARCH_IN_PATH, ADD_FLAG}, {"nopath", QUERY_FLAG_SEARCH_IN_PATH, REMOVE_FLAG}, {"regex", QUERY_FLAG_REGEX, ADD_FLAG}, {"noregex", QUERY_FLAG_REGEX, REMOVE_FLAG}, }; FsearchTokenFunction supported_functions[] = { {"childcount", parse_function_childcount}, {"childfilecount", parse_function_childfilecount}, {"childfoldercount", parse_function_childfoldercount}, {"contenttype", parse_function_contenttype}, {"depth", parse_function_depth}, {"dm", parse_function_date_modified}, {"datemodified", parse_function_date_modified}, {"empty", parse_function_empty}, {"ext", parse_function_extension}, {"parent", parse_function_parent}, {"parents", parse_function_depth}, {"size", parse_function_size}, }; static GList * new_list(void *element) { return element ? g_list_append(NULL, element) : NULL; } static GList * append_to_list_if_nonnull(GList *list, void *element) { return element ? g_list_append(list, element) : list; } static bool expect_word(FsearchQueryLexer *lexer, GString **string) { if (fsearch_query_lexer_get_next_token(lexer, string) == FSEARCH_QUERY_TOKEN_WORD) { return true; } return false; } static FsearchQueryNode * parse_numeric_field_with_optional_range(const char *field_name, FsearchQueryIntegerParserFunc parse_value_func, FsearchQueryComparisonNewNodeFunc new_node_func, GString *string, FsearchQueryFlags flags) { g_auto(GStrv) elements = g_strsplit(string->str, "..", 2); if (!elements || !elements[0]) { goto fail; } int64_t start = 0; int64_t end = 0; FsearchQueryNodeComparison comp_type = FSEARCH_QUERY_NODE_COMPARISON_EQUAL; if (fsearch_string_is_empty(elements[0])) { // query starts with .. // e.g. dm:..january start = 0; comp_type = FSEARCH_QUERY_NODE_COMPARISON_RANGE; } else { if (parse_value_func(elements[0], &start, &end)) { comp_type = FSEARCH_QUERY_NODE_COMPARISON_RANGE; } else { goto fail; } } if (elements[1]) { if (fsearch_string_is_empty(elements[1])) { // query ends with .. // e.g. dm:january.. end = INT32_MAX; comp_type = FSEARCH_QUERY_NODE_COMPARISON_GREATER_EQ; } else { if (parse_value_func(elements[1], NULL, &end)) { comp_type = FSEARCH_QUERY_NODE_COMPARISON_RANGE; } else { goto fail; } } } if (start == end) { comp_type = FSEARCH_QUERY_NODE_COMPARISON_EQUAL; } return new_node_func(flags, start, end, comp_type); fail: g_debug("[%s:] invalid argument: %s", field_name, string->str); return fsearch_query_node_new_match_nothing(); } static bool parse_integer(const char *str, int64_t *num_out, int64_t *num_2_out) { char *num_suffix = NULL; int64_t num = strtoll(str, &num_suffix, 10); if (num_suffix == str) { // Failed to parse a number return false; } if (num_suffix && num_suffix[0] != '\0') { // We don't accept numbers followed by non-digit characters return false; } if (num_out) { *num_out = num; } if (num_2_out) { *num_2_out = num; } return true; } static GList * parse_numeric_function(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags, const char *field_name, FsearchQueryComparisonNewNodeFunc new_node_func, FsearchQueryIntegerParserFunc parse_value_func) { if (is_empty_field) { // we want to match every entry for an empty numeric field return new_list(fsearch_query_node_new_match_everything(flags)); } g_autoptr(GString) token_value = NULL; FsearchQueryToken token = fsearch_query_lexer_get_next_token(parse_ctx->lexer, &token_value); FsearchQueryNodeComparison comp_type = FSEARCH_QUERY_NODE_COMPARISON_EQUAL; switch (token) { case FSEARCH_QUERY_TOKEN_EQUAL: comp_type = FSEARCH_QUERY_NODE_COMPARISON_EQUAL; break; case FSEARCH_QUERY_TOKEN_SMALLER: comp_type = FSEARCH_QUERY_NODE_COMPARISON_SMALLER; break; case FSEARCH_QUERY_TOKEN_SMALLER_EQ: comp_type = FSEARCH_QUERY_NODE_COMPARISON_SMALLER_EQ; break; case FSEARCH_QUERY_TOKEN_GREATER: comp_type = FSEARCH_QUERY_NODE_COMPARISON_GREATER; break; case FSEARCH_QUERY_TOKEN_GREATER_EQ: comp_type = FSEARCH_QUERY_NODE_COMPARISON_GREATER_EQ; break; case FSEARCH_QUERY_TOKEN_WORD: // query has the form of field: or field:.. return new_list( parse_numeric_field_with_optional_range(field_name, parse_value_func, new_node_func, token_value, flags)); default: g_debug("[%s:] invalid or missing argument", field_name); return new_list(fsearch_query_node_new_match_nothing()); } g_autoptr(GString) next_token_value = NULL; if (expect_word(parse_ctx->lexer, &next_token_value)) { int64_t val_1 = 0; int64_t val_2 = 0; if (parse_value_func(next_token_value->str, &val_1, &val_2)) { return new_list(new_node_func(flags, val_1, val_2, comp_type)); } } return new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_function_size(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "size", fsearch_query_node_new_size, fsearch_size_parse); } static GList * parse_function_empty(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return new_list(fsearch_query_node_new_childcount(flags, 0, 0, FSEARCH_QUERY_NODE_COMPARISON_EQUAL)); } static GList * parse_function_depth(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "depth", fsearch_query_node_new_depth, parse_integer); } static GList * parse_function_childcount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "childcount", fsearch_query_node_new_childcount, parse_integer); } static GList * parse_function_childfilecount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "childfilecount", fsearch_query_node_new_childfilecount, parse_integer); } static GList * parse_function_childfoldercount(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "childfoldercount", fsearch_query_node_new_childfoldercount, parse_integer); } static GList * parse_function_date_modified(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { return parse_numeric_function(parse_ctx, is_empty_field, flags, "date-modified", fsearch_query_node_new_date_modified, fsearch_date_time_parse_interval); } static GList * parse_function_extension(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { if (is_empty_field) { // an empty field means that we want to match all files which lack file extensions return new_list(fsearch_query_node_new_extension(NULL, flags)); } g_autoptr(GString) token_value = NULL; if (expect_word(parse_ctx->lexer, &token_value)) { return new_list(fsearch_query_node_new_extension(token_value->str, flags)); } return new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_function_contenttype(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { if (is_empty_field) { return new_list(fsearch_query_node_new_match_everything(flags)); } g_autoptr(GString) token_value = NULL; if (expect_word(parse_ctx->lexer, &token_value)) { return new_list(fsearch_query_node_new_contenttype(token_value->str, flags)); } return new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_function_parent(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { FsearchQueryFlags parent_flags = flags | QUERY_FLAG_EXACT_MATCH; if (is_empty_field) { // an empty field means that we want to match all entries without a parent return new_list(fsearch_query_node_new_parent("", parent_flags)); } g_autoptr(GString) token_value = NULL; if (expect_word(parse_ctx->lexer, &token_value)) { return new_list(fsearch_query_node_new_parent(token_value->str, parent_flags)); } return new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_modifier(FsearchQueryParseContext *parse_ctx, bool is_empty_field, FsearchQueryFlags flags) { if (is_empty_field) { return new_list(fsearch_query_node_new_match_everything(flags)); } g_autoptr(GString) token_value = NULL; FsearchQueryToken token = fsearch_query_lexer_get_next_token(parse_ctx->lexer, &token_value); if (token == FSEARCH_QUERY_TOKEN_WORD) { return parse_word(token_value, flags); } else if (token == FSEARCH_QUERY_TOKEN_BRACKET_OPEN) { GList *res = parse_open_bracket(parse_ctx); return g_list_concat(res, fsearch_query_parser_parse_expression(parse_ctx, true, flags)); } else if (token == FSEARCH_QUERY_TOKEN_FIELD) { return parse_field(parse_ctx, token_value, false, flags); } else if (token == FSEARCH_QUERY_TOKEN_FIELD_EMPTY) { return parse_field(parse_ctx, token_value, true, flags); } return new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_filter_macros(FsearchQueryParseContext *parse_ctx, GString *name, FsearchQueryFlags flags) { GList *res = NULL; for (uint32_t i = 0; i < parse_ctx->macro_filters->len; ++i) { FsearchFilter *filter = g_ptr_array_index(parse_ctx->macro_filters, i); if (strcmp(name->str, filter->macro) != 0) { continue; } // Make sure that macros don't call themselves, which would end up in an endless loop if (g_queue_find(parse_ctx->macro_stack, filter)) { g_debug("[expand_filter_macros] nested macro detected. Stop parsing of macro."); break; } if (fsearch_string_is_empty(filter->query)) { // We don't need to process an empty macro query break; } // Apply the filter flags if (filter->flags & QUERY_FLAG_SEARCH_IN_PATH) { flags |= QUERY_FLAG_SEARCH_IN_PATH; } if (filter->flags & QUERY_FLAG_MATCH_CASE) { flags |= QUERY_FLAG_MATCH_CASE; } if (filter->flags & QUERY_FLAG_REGEX) { flags |= QUERY_FLAG_REGEX; } g_queue_push_tail(parse_ctx->macro_stack, filter); // The process of parsing macros gets its own lexer and operator stack // to make sure that they're not affected by the current parsing state // and vice versa GQueue *main_operator_stack = parse_ctx->operator_stack; FsearchQueryLexer *main_lexer = parse_ctx->lexer; parse_ctx->lexer = fsearch_query_lexer_new(filter->query); parse_ctx->operator_stack = g_queue_new(); res = fsearch_query_parser_parse_expression(parse_ctx, false, flags); if (!g_queue_is_empty(parse_ctx->operator_stack)) { g_warning("[parse_macro] operator stack not empty after parsing!\n"); } g_clear_pointer(&parse_ctx->lexer, fsearch_query_lexer_free); g_clear_pointer(&parse_ctx->operator_stack, g_queue_free); parse_ctx->operator_stack = main_operator_stack; parse_ctx->lexer = main_lexer; g_queue_pop_tail(parse_ctx->macro_stack); break; } return res; } static GList * parse_field(FsearchQueryParseContext *parse_ctx, GString *field_name, bool is_empty_field, FsearchQueryFlags flags) { // Macros have precedence over native fields GList *res = parse_filter_macros(parse_ctx, field_name, flags); if (!res) { for (uint32_t i = 0; i < G_N_ELEMENTS(supported_modifiers); ++i) { FsearchTokenModifier *modifier = &supported_modifiers[i]; if (!strcmp(modifier->name, field_name->str)) { if (modifier->flag_operation == ADD_FLAG) { flags |= modifier->flag; } else { flags &= ~modifier->flag; } return parse_modifier(parse_ctx, is_empty_field, flags); } } for (uint32_t i = 0; i < G_N_ELEMENTS(supported_functions); ++i) { FsearchTokenFunction *function = &supported_functions[i]; if (!strcmp(function->name, field_name->str)) { return function->parser(parse_ctx, is_empty_field, flags); } } } return res ? res : new_list(fsearch_query_node_new_match_nothing()); } static GList * parse_word(GString *field_name, FsearchQueryFlags flags) { if (!field_name) { return NULL; } return new_list(fsearch_query_node_new(field_name->str, flags)); } static FsearchQueryToken top_query_token(GQueue *stack) { if (g_queue_is_empty(stack)) { return FSEARCH_QUERY_TOKEN_NONE; } return (FsearchQueryToken)GPOINTER_TO_UINT(g_queue_peek_tail(stack)); } static FsearchQueryToken pop_query_token(GQueue *stack) { if (g_queue_is_empty(stack)) { return FSEARCH_QUERY_TOKEN_NONE; } return (FsearchQueryToken)(GPOINTER_TO_UINT(g_queue_pop_tail(stack))); } static void push_query_token(GQueue *stack, FsearchQueryToken token) { g_queue_push_tail(stack, GUINT_TO_POINTER((guint)token)); } static uint32_t get_operator_precedence(FsearchQueryToken operator) { switch (operator) { case FSEARCH_QUERY_TOKEN_NOT: return 3; case FSEARCH_QUERY_TOKEN_AND: return 2; case FSEARCH_QUERY_TOKEN_OR: return 1; default: return 0; } } static FsearchQueryNode * get_operator_node_for_query_token(FsearchQueryToken token) { FsearchQueryNodeOperator op = 0; switch (token) { case FSEARCH_QUERY_TOKEN_AND: op = FSEARCH_QUERY_NODE_OPERATOR_AND; break; case FSEARCH_QUERY_TOKEN_OR: op = FSEARCH_QUERY_NODE_OPERATOR_OR; break; case FSEARCH_QUERY_TOKEN_NOT: op = FSEARCH_QUERY_NODE_OPERATOR_NOT; break; default: return NULL; } return fsearch_query_node_new_operator(op); } static bool is_operand_token(FsearchQueryToken token) { switch (token) { case FSEARCH_QUERY_TOKEN_WORD: case FSEARCH_QUERY_TOKEN_FIELD: case FSEARCH_QUERY_TOKEN_FIELD_EMPTY: return true; default: return false; } } static GList * get_implicit_and_if_necessary(FsearchQueryParseContext *parse_ctx, FsearchQueryToken last_token, FsearchQueryToken next_token) { // Before an implicit and there must either be an operand or a closing bracket if (is_operand_token(last_token) || last_token == FSEARCH_QUERY_TOKEN_BRACKET_CLOSE) { // After an implicit AND there must either be an operand or an opening bracket or a NOT operator if (is_operand_token(next_token) || next_token == FSEARCH_QUERY_TOKEN_BRACKET_OPEN || next_token == FSEARCH_QUERY_TOKEN_NOT) { return parse_operator(parse_ctx, FSEARCH_QUERY_TOKEN_AND); } } return NULL; } static bool is_binary_operator_token(FsearchQueryToken token) { if (token == FSEARCH_QUERY_TOKEN_AND || token == FSEARCH_QUERY_TOKEN_OR) { return true; } return false; } static bool is_operator_token(FsearchQueryToken token) { if (is_binary_operator_token(token) || token == FSEARCH_QUERY_TOKEN_NOT) { return true; } return false; } static bool is_operator_token_followed_by_operand(FsearchQueryLexer *lexer, FsearchQueryToken op_token) { g_assert(is_operator_token(op_token)); FsearchQueryToken next_token = fsearch_query_lexer_peek_next_token(lexer, NULL); // FIXME: while a NOT operator usually is followed directly by an operand this assumption might cause some bugs if (is_binary_operator_token(op_token) && next_token == FSEARCH_QUERY_TOKEN_NOT) { return true; } return is_operand_token(next_token) || next_token == FSEARCH_QUERY_TOKEN_BRACKET_OPEN; } static GList * parse_operator(FsearchQueryParseContext *parse_ctx, FsearchQueryToken token) { g_assert(is_operator_token(token)); parse_ctx->last_token = token; GList *res = NULL; // Before we can add the operator token to the operator stack we first have to pop and handle all operators on the // stack until we find the first one with a lower precedence than the one we're about to add while (!g_queue_is_empty(parse_ctx->operator_stack) && get_operator_precedence(token) <= get_operator_precedence(top_query_token(parse_ctx->operator_stack))) { res = append_to_list_if_nonnull(res, get_operator_node_for_query_token(pop_query_token(parse_ctx->operator_stack))); } push_query_token(parse_ctx->operator_stack, token); return res; } static bool consume_consecutive_not_token(FsearchQueryLexer *lexer) { bool uneven_number_of_not_tokens = true; while (fsearch_query_lexer_peek_next_token(lexer, NULL) == FSEARCH_QUERY_TOKEN_NOT) { fsearch_query_lexer_get_next_token(lexer, NULL); uneven_number_of_not_tokens = !uneven_number_of_not_tokens; } return uneven_number_of_not_tokens; } static void discard_consecutive_binary_operator_tokens(FsearchQueryLexer *lexer) { // discard all consecutive AND and OR operators until we find a different token while (is_binary_operator_token(fsearch_query_lexer_peek_next_token(lexer, NULL))) { fsearch_query_lexer_get_next_token(lexer, NULL); } } static GList * parse_close_bracket(FsearchQueryParseContext *parse_ctx) { GList *res = NULL; // pop and handle all operators from the stack until we either find our matching open bracket // or reach the end of the stack while (true) { FsearchQueryToken t = top_query_token(parse_ctx->operator_stack); if (t == FSEARCH_QUERY_TOKEN_BRACKET_OPEN) { // Found first and matching open bracket. Done. pop_query_token(parse_ctx->operator_stack); break; } if (t == FSEARCH_QUERY_TOKEN_NONE) { // There hasn't been an open bracket on the stack. This must not happen, because we earlier made sure // that closing brackets will only be handled if there are at least as much open as closing brackets. g_warning("[infix-postfix] Matching open bracket not found!\n"); g_assert_not_reached(); } // AND, OR, NOT operator found, append them to the result list res = append_to_list_if_nonnull(res, get_operator_node_for_query_token(pop_query_token(parse_ctx->operator_stack))); } parse_ctx->last_token = FSEARCH_QUERY_TOKEN_BRACKET_CLOSE; return res; } static GList * parse_open_bracket(FsearchQueryParseContext *parse_ctx) { GList *res = get_implicit_and_if_necessary(parse_ctx, parse_ctx->last_token, FSEARCH_QUERY_TOKEN_BRACKET_OPEN); parse_ctx->last_token = FSEARCH_QUERY_TOKEN_BRACKET_OPEN; push_query_token(parse_ctx->operator_stack, FSEARCH_QUERY_TOKEN_BRACKET_OPEN); return res; } GList * fsearch_query_parser_parse_expression(FsearchQueryParseContext *parse_ctx, bool in_open_bracket, FsearchQueryFlags flags) { GList *res = NULL; uint32_t num_open_brackets = in_open_bracket ? 1 : 0; uint32_t num_close_brackets = 0; while (true) { g_autoptr(GString) token_value = NULL; FsearchQueryToken token = fsearch_query_lexer_get_next_token(parse_ctx->lexer, &token_value); FsearchQueryToken last_token = parse_ctx->last_token; // When a NOT operator is parsed, an implicit AND is added in the process (if necessary) // so in that case an additional implicit AND check before adding the parsed result to the final list // isn't necessary anymore and can be skipped bool skip_implicit_and_check = false; GList *to_append = NULL; switch (token) { case FSEARCH_QUERY_TOKEN_EOS: goto out; case FSEARCH_QUERY_TOKEN_NOT: if (consume_consecutive_not_token(parse_ctx->lexer)) { // We want to support consecutive NOT operators (i.e. `NOT NOT a`) // so even numbers of NOT operators get ignored and for uneven numbers we add a single one only if (is_operator_token_followed_by_operand(parse_ctx->lexer, token)) { skip_implicit_and_check = true; to_append = get_implicit_and_if_necessary(parse_ctx, last_token, token); to_append = g_list_concat(to_append, parse_operator(parse_ctx, token)); } } break; case FSEARCH_QUERY_TOKEN_AND: case FSEARCH_QUERY_TOKEN_OR: // only add an operator if it's followed by an operand if (is_operator_token_followed_by_operand(parse_ctx->lexer, token)) { to_append = parse_operator(parse_ctx, token); } break; case FSEARCH_QUERY_TOKEN_BRACKET_OPEN: num_open_brackets++; to_append = parse_open_bracket(parse_ctx); // We discard any operator tokens directly after an open bracket (excluding NOT operators), // because there's no left-hand side operand they could act on. // It's safe to assume that queries like `( OR abc OR efg)` should be interpreted as `(abc OR efg)` anyway discard_consecutive_binary_operator_tokens(parse_ctx->lexer); break; case FSEARCH_QUERY_TOKEN_BRACKET_CLOSE: // only add closing bracket if there's a matching open bracket if (num_open_brackets > num_close_brackets) { num_close_brackets++; to_append = parse_close_bracket(parse_ctx); if (in_open_bracket && num_close_brackets == num_open_brackets) { // We found the matching closing bracket which marks the end of this expression, return. if (to_append) { return g_list_concat(res, to_append); } else { return res; } } } else { g_debug("[infix-postfix] closing bracket found without a corresponding open bracket, abort " "parsing!\n"); g_list_free_full(g_steal_pointer(&res), (GDestroyNotify)fsearch_query_node_free); return new_list(fsearch_query_node_new_match_nothing()); } break; case FSEARCH_QUERY_TOKEN_WORD: to_append = parse_word(token_value, flags); break; case FSEARCH_QUERY_TOKEN_FIELD: to_append = parse_field(parse_ctx, token_value, false, flags); break; case FSEARCH_QUERY_TOKEN_FIELD_EMPTY: to_append = parse_field(parse_ctx, token_value, true, flags); break; default: g_debug("[infix-postfix] ignoring unexpected token: %d", token); break; } if (to_append) { if (!skip_implicit_and_check) { res = g_list_concat(res, get_implicit_and_if_necessary(parse_ctx, last_token, token)); } parse_ctx->last_token = token; res = g_list_concat(res, to_append); } } out: while (!g_queue_is_empty(parse_ctx->operator_stack)) { res = append_to_list_if_nonnull(res, get_operator_node_for_query_token(pop_query_token(parse_ctx->operator_stack))); } return res; } fsearch-0.2.3/src/fsearch_query_parser.h000066400000000000000000000007261446344336300203220ustar00rootroot00000000000000#pragma once #include "fsearch_query_flags.h" #include "fsearch_query_lexer.h" #include #include typedef struct FsearchQueryParseContext { FsearchQueryLexer *lexer; GPtrArray *macro_filters; GQueue *operator_stack; GQueue *macro_stack; FsearchQueryToken last_token; } FsearchQueryParseContext; GList * fsearch_query_parser_parse_expression(FsearchQueryParseContext *parse_ctx, bool in_open_bracket, FsearchQueryFlags flags); fsearch-0.2.3/src/fsearch_query_tree.c000066400000000000000000000233041446344336300177550ustar00rootroot00000000000000#define G_LOG_DOMAIN "fsearch-query-tree" #include "fsearch_query_tree.h" #include "fsearch_query_node.h" #include "fsearch_query_parser.h" #include "fsearch_string_utils.h" static gboolean free_tree_node(GNode *node, gpointer data); static void free_tree(GNode *root) { g_node_traverse(root, G_IN_ORDER, G_TRAVERSE_ALL, -1, free_tree_node, NULL); g_clear_pointer(&root, g_node_destroy); } static gboolean free_tree_node(GNode *node, gpointer data) { FsearchQueryNode *n = node->data; g_clear_pointer(&n, fsearch_query_node_free); return FALSE; } static GNode * get_everything_matching_node(FsearchQueryFlags flags) { return g_node_new(fsearch_query_node_new_match_everything(flags)); } static GNode * build_query_tree_from_suffix_list(GList *postfix_query, FsearchQueryFlags flags) { if (!postfix_query) { return get_everything_matching_node(flags); } GQueue *query_stack = g_queue_new(); for (GList *n = postfix_query; n != NULL; n = n->next) { FsearchQueryNode *node = n->data; g_assert(node); if (node->type == FSEARCH_QUERY_NODE_TYPE_OPERATOR) { GNode *op_node = g_node_new(node); GNode *right = g_queue_pop_tail(query_stack); if (node->operator!= FSEARCH_QUERY_NODE_OPERATOR_NOT) { GNode *left = g_queue_pop_tail(query_stack); g_node_append(op_node, left ? left : get_everything_matching_node(flags)); } g_node_append(op_node, right ? right : get_everything_matching_node(flags)); g_queue_push_tail(query_stack, op_node); } else { g_queue_push_tail(query_stack, g_node_new(node)); } } GNode *root = g_queue_pop_tail(query_stack); if (!g_queue_is_empty(query_stack)) { g_critical("[get_query_tree] query stack still has nodes left!!"); } g_queue_free_full(g_steal_pointer(&query_stack), (GDestroyNotify)free_tree); return root; } static char * query_flags_to_string_expressive(FsearchQueryFlags flags) { GString *flag_string = g_string_sized_new(10); uint32_t num_flags = 0; const char *sep = ", "; if (flags & QUERY_FLAG_EXACT_MATCH) { g_string_append_printf(flag_string, "%sExact Match", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_AUTO_MATCH_CASE) { g_string_append_printf(flag_string, "%sAuto Match Case", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_MATCH_CASE) { g_string_append_printf(flag_string, "%sMatch Case", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_AUTO_SEARCH_IN_PATH) { g_string_append_printf(flag_string, "%sAuto Search in Path", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_SEARCH_IN_PATH) { g_string_append_printf(flag_string, "%sSearch in Path", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_REGEX) { g_string_append_printf(flag_string, "%sRegex", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_FOLDERS_ONLY) { g_string_append_printf(flag_string, "%sFolders only", num_flags ? sep : ""); num_flags++; } if (flags & QUERY_FLAG_FILES_ONLY) { g_string_append_printf(flag_string, "%sFiles only", num_flags ? sep : ""); num_flags++; } return g_string_free(flag_string, FALSE); } static char * query_flags_to_string(FsearchQueryFlags flags) { GString *flag_string = g_string_sized_new(10); if (flags & QUERY_FLAG_EXACT_MATCH) { g_string_append_c(flag_string, 'e'); } if (flags & QUERY_FLAG_AUTO_MATCH_CASE) { g_string_append_c(flag_string, 'C'); } if (flags & QUERY_FLAG_MATCH_CASE) { g_string_append_c(flag_string, 'c'); } if (flags & QUERY_FLAG_AUTO_SEARCH_IN_PATH) { g_string_append_c(flag_string, 'P'); } if (flags & QUERY_FLAG_SEARCH_IN_PATH) { g_string_append_c(flag_string, 'p'); } if (flags & QUERY_FLAG_REGEX) { g_string_append_c(flag_string, 'r'); } if (flags & QUERY_FLAG_FOLDERS_ONLY) { g_string_append_c(flag_string, 'F'); } if (flags & QUERY_FLAG_FILES_ONLY) { g_string_append_c(flag_string, 'f'); } return g_string_free(flag_string, FALSE); } static GPtrArray * get_filters_with_macros(FsearchFilterManager *manager) { GPtrArray *macros = g_ptr_array_sized_new(10); g_ptr_array_set_free_func(macros, (GDestroyNotify)fsearch_filter_unref); if (manager) { for (uint32_t i = 0; i < fsearch_filter_manager_get_num_filters(manager); ++i) { FsearchFilter *filter = fsearch_filter_manager_get_filter(manager, i); if (filter && filter->macro && !fsearch_string_is_empty(filter->macro)) { g_ptr_array_add(macros, fsearch_filter_ref(filter)); } g_clear_pointer(&filter, fsearch_filter_unref); } } return macros; } static void print_parser_result(const char *input, FsearchQueryFlags flags, GList *result) { if (!result) { return; } g_debug("[QueryParser]"); g_debug(" * global_flags: %s", query_flags_to_string_expressive(flags)); g_debug(" * input: %s", input); g_autoptr(GString) result_str = g_string_new(" * output: "); for (GList *n = result; n != NULL; n = n->next) { FsearchQueryNode *node = n->data; g_assert(node); if (node->type == FSEARCH_QUERY_NODE_TYPE_OPERATOR) { g_string_append(result_str, node->description->str); g_string_append_c(result_str, ' '); } else { g_autofree char *flag_string = query_flags_to_string(node->flags); g_string_append_printf(result_str, "[%s:'%s':%s] ", node->description ? node->description->str : "unknown query", node->needle ? node->needle : "", flag_string); } } g_debug("%s", result_str->str); } static GNode * get_query_tree(const char *input, FsearchFilterManager *filters, FsearchQueryFlags flags) { g_assert(input); FsearchQueryParseContext *parse_context = calloc(1, sizeof(FsearchQueryParseContext)); g_assert(parse_context); parse_context->lexer = fsearch_query_lexer_new(input); parse_context->macro_filters = get_filters_with_macros(filters); parse_context->macro_stack = g_queue_new(); parse_context->last_token = FSEARCH_QUERY_TOKEN_NONE; parse_context->operator_stack = g_queue_new(); GList *suffix_list = fsearch_query_parser_parse_expression(parse_context, false, flags); print_parser_result(input, flags, suffix_list); GNode *root = build_query_tree_from_suffix_list(suffix_list, flags); g_clear_pointer(&suffix_list, g_list_free); g_clear_pointer(&parse_context->lexer, fsearch_query_lexer_free); g_clear_pointer(&parse_context->macro_stack, g_queue_free); g_clear_pointer(&parse_context->operator_stack, g_queue_free); g_clear_pointer(&parse_context->macro_filters, g_ptr_array_unref); g_clear_pointer(&parse_context, free); return root; } static gboolean node_triggers_auto_match_path(GNode *node, gpointer data) { FsearchQueryNode *n = node->data; g_assert(data); g_assert(n); bool *triggers_auto_match_path = data; if (n && *triggers_auto_match_path == false) { *triggers_auto_match_path = n->triggers_auto_match_path; } return FALSE; } bool fsearch_query_node_tree_triggers_auto_match_path(GNode *tree) { g_assert(tree); bool triggers_auto_match_path = false; g_node_traverse(tree, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_triggers_auto_match_path, &triggers_auto_match_path); return triggers_auto_match_path; } static gboolean node_triggers_auto_match_case(GNode *node, gpointer data) { FsearchQueryNode *n = node->data; g_assert(data); g_assert(n); bool *triggers_auto_match_case = data; if (n && *triggers_auto_match_case == false) { *triggers_auto_match_case = n->triggers_auto_match_case; } return FALSE; } bool fsearch_query_node_tree_triggers_auto_match_case(GNode *tree) { g_assert(tree); bool triggers_auto_match_case = false; g_node_traverse(tree, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_triggers_auto_match_case, &triggers_auto_match_case); return triggers_auto_match_case; } static gboolean node_wants_single_threaded_search(GNode *node, gpointer data) { FsearchQueryNode *n = node->data; g_assert(data); g_assert(n); bool *wants_single_threaded_search = data; if (n && *wants_single_threaded_search == false) { *wants_single_threaded_search = n->wants_single_threaded_search; } return FALSE; } bool fsearch_query_node_tree_wants_single_threaded_search(GNode *tree) { g_assert(tree); bool wants_single_threaded_search = false; g_node_traverse(tree, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_wants_single_threaded_search, &wants_single_threaded_search); return wants_single_threaded_search; } GNode * fsearch_query_node_tree_new(const char *search_term, FsearchFilterManager *filters, FsearchQueryFlags flags) { g_autofree char *query = g_strdup(search_term); char *query_stripped = g_strstrip(query); GNode *res = NULL; if (flags & QUERY_FLAG_REGEX) { // If we're in regex mode we're passing the whole query to the regex engine // i.e. there's only one query node res = g_node_new(fsearch_query_node_new(query_stripped, flags)); } else { res = get_query_tree(query_stripped, filters, flags); } return res; } void fsearch_query_node_tree_free(GNode *node) { if (!node) { return; } g_clear_pointer(&node, free_tree); } fsearch-0.2.3/src/fsearch_query_tree.h000066400000000000000000000007001446344336300177550ustar00rootroot00000000000000#pragma once #include "fsearch_filter_manager.h" #include bool fsearch_query_node_tree_triggers_auto_match_path(GNode *tree); bool fsearch_query_node_tree_triggers_auto_match_case(GNode *tree); bool fsearch_query_node_tree_wants_single_threaded_search(GNode *tree); GNode * fsearch_query_node_tree_new(const char *search_term, FsearchFilterManager *filters, FsearchQueryFlags flags); void fsearch_query_node_tree_free(GNode *node); fsearch-0.2.3/src/fsearch_result_view.c000066400000000000000000000415131446344336300201430ustar00rootroot00000000000000#define G_LOG_DOMAIN "fsearch-result-view" #include "fsearch_result_view.h" #include "fsearch.h" #include "fsearch_config.h" #include "fsearch_file_utils.h" #include "fsearch_query.h" #include #include #include #include static int32_t get_icon_size_for_height(int32_t height) { if (height < 24) { return 16; } if (height < 32) { return 24; } if (height < 48) { return 32; } return 48; } static void reset_icon_caches(FsearchResultView *result_view) { g_hash_table_remove_all(result_view->pixbuf_cache); g_hash_table_remove_all(result_view->app_gicon_cache); } static void maybe_reset_icon_caches(FsearchResultView *result_view) { const uint32_t cached_icon_limit = 200; if (g_hash_table_size(result_view->pixbuf_cache) > cached_icon_limit) { g_hash_table_remove_all(result_view->pixbuf_cache); } if (g_hash_table_size(result_view->app_gicon_cache) > cached_icon_limit) { g_hash_table_remove_all(result_view->app_gicon_cache); } } static GIcon * get_desktop_file_icon(FsearchResultView *result_view, const char *path) { GIcon *icon = g_hash_table_lookup(result_view->app_gicon_cache, path); if (!icon) { icon = fsearch_file_utils_get_desktop_file_icon(path); g_hash_table_insert(result_view->app_gicon_cache, g_strdup(path), icon); } return g_object_ref(icon); } static GdkPixbuf * get_pixbuf_from_gicon(FsearchResultView *result_view, GIcon *icon, int32_t icon_size, int32_t scale_factor) { GdkPixbuf *pixbuf = g_hash_table_lookup(result_view->pixbuf_cache, icon); if (pixbuf) { return pixbuf; } GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); g_return_val_if_fail(icon_theme, NULL); if (G_IS_THEMED_ICON(icon)) { const char *const *names = g_themed_icon_get_names(G_THEMED_ICON(icon)); if (!names) { return NULL; } g_autoptr(GtkIconInfo) icon_info = gtk_icon_theme_choose_icon_for_scale(icon_theme, (const char **)names, icon_size, scale_factor, GTK_ICON_LOOKUP_FORCE_SIZE); if (!icon_info) { return NULL; } pixbuf = gtk_icon_info_load_icon(icon_info, NULL); } else if (G_IS_LOADABLE_ICON(icon)) { g_autoptr(GInputStream) stream = g_loadable_icon_load(G_LOADABLE_ICON(icon), icon_size, NULL, NULL, NULL); if (stream) { pixbuf = gdk_pixbuf_new_from_stream_at_scale(stream, icon_size, icon_size, TRUE, NULL, NULL); } } if (pixbuf) { g_hash_table_insert(result_view->pixbuf_cache, g_object_ref(icon), pixbuf); } return pixbuf; } static cairo_surface_t * get_icon_surface(FsearchResultView *result_view, GdkWindow *win, const char *name, const char *path, FsearchDatabaseEntryType type, int32_t icon_size, int32_t scale_factor) { maybe_reset_icon_caches(result_view); g_autoptr(GIcon) icon = NULL; if (type == DATABASE_ENTRY_TYPE_FOLDER && fsearch_file_utils_is_desktop_file(path)) { icon = get_desktop_file_icon(result_view, path); } else { icon = fsearch_file_utils_guess_icon(name, path, type == DATABASE_ENTRY_TYPE_FOLDER); } GdkPixbuf *pixbuf = get_pixbuf_from_gicon(result_view, icon, icon_size, scale_factor); if (!pixbuf) { return NULL; } return gdk_cairo_surface_create_from_pixbuf(pixbuf, scale_factor, win); } typedef struct { char *display_name; FsearchQueryMatchData *match_data; PangoAttrList *highlights[NUM_DATABASE_INDEX_TYPES]; FsearchDatabaseEntryType entry_type; GString *name; GString *path; GString *full_path; char *size; char *type; char *extension; char *time; } DrawRowContext; static void draw_row_ctx_free(DrawRowContext *ctx) { g_clear_pointer(&ctx->match_data, fsearch_query_match_data_free); g_clear_pointer(&ctx->display_name, g_free); g_clear_pointer(&ctx->extension, g_free); g_clear_pointer(&ctx->type, g_free); g_clear_pointer(&ctx->size, g_free); g_clear_pointer(&ctx->time, g_free); for (uint32_t i = 0; i < NUM_DATABASE_INDEX_TYPES; i++) { if (ctx->highlights[i]) { g_clear_pointer(&ctx->highlights[i], pango_attr_list_unref); } } if (ctx->name) { g_string_free(g_steal_pointer(&ctx->name), TRUE); } if (ctx->path) { g_string_free(g_steal_pointer(&ctx->path), TRUE); } if (ctx->full_path) { g_string_free(g_steal_pointer(&ctx->full_path), TRUE); } g_clear_pointer(&ctx, free); } static DrawRowContext * draw_row_ctx_new(FsearchDatabaseView *view, uint32_t row, GdkWindow *bin_window, int32_t icon_size) { DrawRowContext *ctx = calloc(1, sizeof(DrawRowContext)); g_assert(ctx); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); bool ret = true; db_view_lock(view); g_autoptr(GDateTime) dtime = NULL; const uint32_t num_items = db_view_get_num_entries(view); if (row >= num_items) { g_debug("[draw_row] row idx out of bound"); ret = false; goto out; } ctx->name = db_view_entry_get_name_for_idx(view, row); if (!ctx->name) { g_debug("[draw_row] failed to get entry name"); ret = false; goto out; } ctx->display_name = g_filename_display_name(ctx->name->str); ctx->extension = db_view_entry_get_extension_for_idx(view, row); ctx->path = db_view_entry_get_path_for_idx(view, row); FsearchQuery *query = db_view_get_query(view); if (query) { FsearchDatabaseEntry *entry = db_view_entry_get_for_idx(view, row); ctx->match_data = fsearch_query_match_data_new(); fsearch_query_match_data_set_entry(ctx->match_data, entry); fsearch_query_highlight(query, ctx->match_data); g_clear_pointer(&query, fsearch_query_unref); } ctx->full_path = db_view_entry_get_path_full_for_idx(view, row); ctx->entry_type = db_view_entry_get_type_for_idx(view, row); ctx->type = fsearch_file_utils_get_file_type(ctx->name->str, ctx->entry_type == DATABASE_ENTRY_TYPE_FOLDER ? TRUE : FALSE); off_t size = db_view_entry_get_size_for_idx(view, row); ctx->size = fsearch_file_utils_get_size_formatted(size, config->show_base_2_units); const int64_t mtime = db_view_entry_get_mtime_for_idx(view, row); dtime = g_date_time_new_from_unix_local(mtime); if (dtime) { ctx->time = g_date_time_format(dtime, "%Y-%m-%d %H:%M"); } else { ctx->time = g_strdup(_("Date out of range")); } out: db_view_unlock(view); if (ret) { return ctx; } g_clear_pointer(&ctx, draw_row_ctx_free); return NULL; } static DrawRowContext * draw_row_ctx_get(FsearchResultView *result_view, uint32_t row, GdkWindow *bin_window, int32_t icon_size) { g_return_val_if_fail(result_view, NULL); if (g_hash_table_size(result_view->row_cache) > 100) { fsearch_result_view_row_cache_reset(result_view); } DrawRowContext *ctx = g_hash_table_lookup(result_view->row_cache, GINT_TO_POINTER(row + 1)); if (ctx) { return ctx; } ctx = draw_row_ctx_new(result_view->database_view, row, bin_window, icon_size); if (!ctx) { return NULL; } g_hash_table_insert(result_view->row_cache, GINT_TO_POINTER(row + 1), ctx); return ctx; } char * fsearch_result_view_query_tooltip(FsearchDatabaseView *view, uint32_t row, FsearchListViewColumn *col, PangoLayout *layout, uint32_t row_height) { FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); db_view_lock(view); g_autoptr(GString) name = db_view_entry_get_name_for_idx(view, row); if (!name) { db_view_unlock(view); return NULL; } int32_t width = col->effective_width - 2 * ROW_PADDING_X; g_autofree char *text = NULL; switch (col->type) { case DATABASE_INDEX_TYPE_NAME: if (config->show_listview_icons) { int32_t icon_size = get_icon_size_for_height((int32_t)row_height - ROW_PADDING_X); width -= 2 * ROW_PADDING_X + icon_size; } text = g_filename_display_name(name->str); break; case DATABASE_INDEX_TYPE_PATH: { g_autoptr(GString) path = db_view_entry_get_path_for_idx(view, row); text = g_filename_display_name(path->str); break; } case DATABASE_INDEX_TYPE_EXTENSION: { text = db_view_entry_get_extension_for_idx(view, row); break; } case DATABASE_INDEX_TYPE_FILETYPE: { text = fsearch_file_utils_get_file_type( name->str, db_view_entry_get_type_for_idx(view, row) == DATABASE_ENTRY_TYPE_FOLDER ? TRUE : FALSE); break; } case DATABASE_INDEX_TYPE_SIZE: text = fsearch_file_utils_get_size_formatted(db_view_entry_get_size_for_idx(view, row), config->show_base_2_units); break; case DATABASE_INDEX_TYPE_MODIFICATION_TIME: { const int64_t mtime = db_view_entry_get_mtime_for_idx(view, row); g_autoptr(GDateTime) dtime = g_date_time_new_from_unix_local(mtime); if (dtime) { text = g_date_time_format(dtime, "%Y-%m-%d %H:%M"); } else { text = g_strdup(_("Date out of range")); } break; } default: g_warning("[query_tooltip] unknown index type"); } db_view_unlock(view); g_return_val_if_fail(text, NULL); pango_layout_set_text(layout, text, -1); int32_t layout_width = 0; pango_layout_get_pixel_size(layout, &layout_width, NULL); width -= layout_width; if (width < 0) { return g_steal_pointer(&text); } return NULL; } static void set_attributes(PangoLayout *layout, FsearchQueryMatchData *match_data, FsearchDatabaseIndexType idx) { g_assert(idx >= 0 && idx < NUM_DATABASE_INDEX_TYPES); PangoAttrList *attrs = fsearch_query_match_get_highlight(match_data, idx); if (attrs) { pango_layout_set_attributes(layout, attrs); } } void fsearch_result_view_draw_row(FsearchResultView *result_view, cairo_t *cr, GdkWindow *bin_window, PangoLayout *layout, GtkStyleContext *context, GList *columns, cairo_rectangle_int_t *rect, uint32_t row, gboolean row_selected, gboolean row_focused, gboolean row_hovered, gboolean right_to_left_text) { if (!columns) { return; } const int32_t icon_size = get_icon_size_for_height(rect->height - ROW_PADDING_X); if (result_view->row_height != rect->height) { reset_icon_caches(result_view); } result_view->row_height = rect->height; DrawRowContext *ctx = draw_row_ctx_get(result_view, row, bin_window, icon_size); if (!ctx) { return; } GtkStateFlags flags = gtk_style_context_get_state(context); if (row_selected) { flags |= GTK_STATE_FLAG_SELECTED; } if (row_focused) { flags |= GTK_STATE_FLAG_FOCUSED; } gtk_style_context_save(context); gtk_style_context_set_state(context, flags); // Render row background gtk_render_background(context, cr, rect->x, rect->y, rect->width, rect->height); if (row_hovered) { GdkRGBA color = {}; gtk_style_context_get_color(context, flags, &color); color.alpha = 0.05; cairo_save(cr); gdk_cairo_set_source_rgba(cr, &color); cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); cairo_fill(cr); cairo_restore(cr); } FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); // Render row foreground int32_t x = rect->x; for (GList *col = columns; col != NULL; col = col->next) { FsearchListViewColumn *column = col->data; if (!column->visible) { continue; } cairo_save(cr); cairo_rectangle(cr, x, rect->y, column->effective_width, rect->height); cairo_clip(cr); int32_t dx = 0; int32_t dw = 0; pango_layout_set_attributes(layout, NULL); const char *text = NULL; int text_len = -1; switch (column->type) { case DATABASE_INDEX_TYPE_NAME: { if (config->show_listview_icons) { cairo_surface_t *icon_surface = config->show_listview_icons ? get_icon_surface(result_view, bin_window, ctx->name->str, ctx->full_path->str, ctx->entry_type, icon_size, gdk_window_get_scale_factor(bin_window)) : NULL; if (icon_surface) { int32_t x_icon = x; if (right_to_left_text) { x_icon += column->effective_width - icon_size - ROW_PADDING_X; } else { x_icon += ROW_PADDING_X; dx += icon_size + 2 * ROW_PADDING_X; } dw += icon_size + 2 * ROW_PADDING_X; gtk_render_icon_surface(context, cr, icon_surface, x_icon, rect->y + floor((rect->height - icon_size) / 2.0)); g_clear_pointer(&icon_surface, cairo_surface_destroy); } } text = ctx->display_name; } break; case DATABASE_INDEX_TYPE_PATH: text = ctx->path->str; text_len = (int32_t)ctx->path->len; break; case DATABASE_INDEX_TYPE_SIZE: text = ctx->size; break; case DATABASE_INDEX_TYPE_EXTENSION: text = ctx->extension; break; case DATABASE_INDEX_TYPE_FILETYPE: text = ctx->type; break; case DATABASE_INDEX_TYPE_MODIFICATION_TIME: text = ctx->time; break; default: text = NULL; } if (config->highlight_search_terms) { set_attributes(layout, ctx->match_data, column->type); } pango_layout_set_text(layout, text ? text : _("Invalid row data"), text_len); pango_layout_set_width(layout, (column->effective_width - 2 * ROW_PADDING_X - dw) * PANGO_SCALE); pango_layout_set_alignment(layout, column->alignment); pango_layout_set_ellipsize(layout, column->ellipsize_mode); gtk_render_layout(context, cr, x + ROW_PADDING_X + dx, rect->y + ROW_PADDING_Y, layout); x += column->effective_width; cairo_restore(cr); } gtk_style_context_restore(context); } void fsearch_result_view_row_cache_reset(FsearchResultView *result_view) { g_return_if_fail(result_view); g_hash_table_remove_all(result_view->row_cache); } FsearchResultView * fsearch_result_view_new(void) { FsearchResultView *result_view = calloc(1, sizeof(FsearchResultView)); g_assert(result_view); result_view->row_cache = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)draw_row_ctx_free); result_view->pixbuf_cache = g_hash_table_new_full(g_icon_hash, (GEqualFunc)g_icon_equal, g_object_unref, g_object_unref); result_view->app_gicon_cache = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); return result_view; } void fsearch_result_view_free(FsearchResultView *result_view) { g_clear_pointer(&result_view->pixbuf_cache, g_hash_table_unref); g_clear_pointer(&result_view->app_gicon_cache, g_hash_table_unref); g_clear_pointer(&result_view->row_cache, g_hash_table_unref); g_clear_pointer(&result_view, free); } fsearch-0.2.3/src/fsearch_result_view.h000066400000000000000000000030611446344336300201440ustar00rootroot00000000000000#pragma once #include "fsearch_database_view.h" #include "fsearch_list_view.h" typedef struct { FsearchDatabaseView *database_view; FsearchListView *list_view; GHashTable *row_cache; GHashTable *pixbuf_cache; GHashTable *app_gicon_cache; // remember the row height from the last draw call // when it changes we need to reset the icon cache int32_t row_height; FsearchDatabaseIndexType sort_order; GtkSortType sort_type; } FsearchResultView; FsearchResultView * fsearch_result_view_new(void); void fsearch_result_view_free(FsearchResultView *result_view); void fsearch_result_view_row_cache_reset(FsearchResultView *result_view); char * fsearch_result_view_query_tooltip(FsearchDatabaseView *view, uint32_t row, FsearchListViewColumn *col, PangoLayout *layout, uint32_t row_height); void fsearch_result_view_draw_row(FsearchResultView *view, cairo_t *cr, GdkWindow *bin_window, PangoLayout *layout, GtkStyleContext *context, GList *columns, cairo_rectangle_int_t *rect, uint32_t row, gboolean row_selected, gboolean row_focused, gboolean row_hovered, gboolean right_to_left_text); fsearch-0.2.3/src/fsearch_selection.c000066400000000000000000000042671446344336300175650ustar00rootroot00000000000000#define G_LOG_DOMAIN "fsearch-selection" #include "fsearch_selection.h" void fsearch_selection_free(GHashTable *selection) { g_assert(selection); g_clear_pointer(&selection, g_hash_table_destroy); } GHashTable * fsearch_selection_new(void) { return g_hash_table_new(g_direct_hash, g_direct_equal); } void fsearch_selection_select_toggle(GHashTable *selection, gpointer item) { g_assert(selection); g_assert(item); if (g_hash_table_steal(selection, item)) { return; } g_hash_table_add(selection, item); } void fsearch_selection_select(GHashTable *selection, gpointer item) { g_assert(selection); g_assert(item); g_hash_table_add(selection, item); } bool fsearch_selection_is_selected(GHashTable *selection, gpointer item) { g_assert(selection); g_assert(item); return g_hash_table_contains(selection, item); } void fsearch_selection_select_all(GHashTable *selection, DynamicArray *items) { g_assert(selection); g_assert(items); const uint32_t num_items = darray_get_num_items(items); for (uint32_t i = 0; i < num_items; i++) { void *item = darray_get_item(items, i); if (!item) { g_debug("[select_all] item is NULL"); } g_hash_table_add(selection, item); } } void fsearch_selection_unselect_all(GHashTable *selection) { g_assert(selection); g_hash_table_remove_all(selection); } void fsearch_selection_invert(GHashTable *selection, DynamicArray *items) { g_assert(selection); g_assert(items); const uint32_t num_items = darray_get_num_items(items); for (uint32_t i = 0; i < num_items; i++) { void *item = darray_get_item(items, i); if (!item) { g_debug("[select_all] item is NULL"); } if (g_hash_table_steal(selection, item)) { continue; } g_hash_table_add(selection, item); } } uint32_t fsearch_selection_get_num_selected(GHashTable *selection) { g_assert(selection); return g_hash_table_size(selection); } void fsearch_selection_for_each(GHashTable *selection, GHFunc func, gpointer user_data) { g_assert(selection); g_hash_table_foreach(selection, func, user_data); } fsearch-0.2.3/src/fsearch_selection.h000066400000000000000000000014331446344336300175620ustar00rootroot00000000000000#pragma once #include "fsearch_array.h" #include #include #include void fsearch_selection_free(GHashTable *selection); GHashTable * fsearch_selection_new(void); void fsearch_selection_select_toggle(GHashTable *selection, gpointer item); void fsearch_selection_select(GHashTable *selection, gpointer item); bool fsearch_selection_is_selected(GHashTable *selection, gpointer item); void fsearch_selection_select_all(GHashTable *selection, DynamicArray *items); void fsearch_selection_unselect_all(GHashTable *selection); void fsearch_selection_invert(GHashTable *selection, DynamicArray *items); uint32_t fsearch_selection_get_num_selected(GHashTable *selection); void fsearch_selection_for_each(GHashTable *selection, GHFunc func, gpointer user_data); fsearch-0.2.3/src/fsearch_size_utils.c000066400000000000000000000026501446344336300177640ustar00rootroot00000000000000#include "fsearch_size_utils.h" #include #include bool fsearch_size_parse(const char *str, int64_t *size_out, int64_t *size_end_out) { g_assert(str); char *size_suffix = NULL; int64_t size = strtoll(str, &size_suffix, 10); if (size_suffix == str) { return false; } int64_t plus = 0; if (size_suffix && *size_suffix != '\0') { switch (*size_suffix) { case 'k': case 'K': size *= 1000; plus = 1000 - 50 - 1; break; case 'm': case 'M': size *= 1000 * 1000; plus = 1000 * (1000 - 50) - 1; break; case 'g': case 'G': size *= 1000 * 1000 * 1000; plus = 1000 * 1000 * (1000 - 50) - 1; break; case 't': case 'T': size *= (int64_t)1000 * 1000 * 1000 * 1000; plus = (int64_t)1000 * 1000 * 1000 * (1000 - 50) - 1; break; default: goto out; } size_suffix++; switch (*size_suffix) { case 'b': case 'B': size_suffix++; break; default: goto out; } } out: if (size_suffix && size_suffix[0] != '\0') { return false; } if (size_end_out) { *size_end_out = size + plus; } if (size_out) { *size_out = size; } return true; } fsearch-0.2.3/src/fsearch_size_utils.h000066400000000000000000000002141446344336300177630ustar00rootroot00000000000000#pragma once #include #include bool fsearch_size_parse(const char *str, int64_t *size_out, int64_t *size_end_out); fsearch-0.2.3/src/fsearch_statusbar.c000066400000000000000000000346221446344336300176060ustar00rootroot00000000000000#define G_LOG_DOMAIN "fsearch-window" #include "fsearch_statusbar.h" #include "fsearch.h" #include struct _FsearchStatusbar { GtkRevealer parent_instance; GtkWidget *statusbar_database_stack; GtkWidget *statusbar_database_status_box; GtkWidget *statusbar_database_status_label; GtkWidget *statusbar_database_updating_box; GtkWidget *statusbar_database_updating_label; GtkWidget *statusbar_database_updating_spinner; GtkWidget *statusbar_match_case_revealer; GtkWidget *statusbar_scan_label; GtkWidget *statusbar_scan_status_label; GtkWidget *statusbar_search_stack; GtkWidget *statusbar_search_status_box; GtkWidget *statusbar_search_task_box; GtkWidget *statusbar_search_task_spinner; GtkWidget *statusbar_search_task_label; GtkWidget *statusbar_search_filter_revealer; GtkWidget *statusbar_search_in_path_revealer; GtkWidget *statusbar_search_filter_label; GtkWidget *statusbar_search_label; GtkWidget *statusbar_search_mode_revealer; GtkWidget *statusbar_selection_num_files_label; GtkWidget *statusbar_selection_num_folders_label; GtkWidget *statusbar_selection_revealer; GtkWidget *statusbar_smart_case_revealer; GtkWidget *statusbar_smart_path_revealer; guint statusbar_timeout_id; }; G_DEFINE_TYPE(FsearchStatusbar, fsearch_statusbar, GTK_TYPE_REVEALER) static void statusbar_remove_status_update_timeout(FsearchStatusbar *sb) { if (sb->statusbar_timeout_id) { g_source_remove(sb->statusbar_timeout_id); sb->statusbar_timeout_id = 0; } } void fsearch_statusbar_set_num_search_results(FsearchStatusbar *sb, uint32_t num_results) { statusbar_remove_status_update_timeout(sb); gtk_stack_set_visible_child(GTK_STACK(sb->statusbar_search_stack), sb->statusbar_search_status_box); gtk_spinner_stop(GTK_SPINNER(sb->statusbar_search_task_spinner)); gchar sb_text[100] = ""; snprintf(sb_text, sizeof(sb_text), num_results == 1 ? _("%'d Item") : _("%'d Items"), num_results); gtk_label_set_text(GTK_LABEL(sb->statusbar_search_label), sb_text); } static void set_task_status(FsearchStatusbar *sb, const char *label) { gtk_label_set_text(GTK_LABEL(sb->statusbar_search_task_label), label); gtk_spinner_start(GTK_SPINNER(sb->statusbar_search_task_spinner)); gtk_stack_set_visible_child(GTK_STACK(sb->statusbar_search_stack), sb->statusbar_search_task_box); sb->statusbar_timeout_id = 0; } static gboolean on_statusbar_set_sort_status(gpointer user_data) { FsearchStatusbar *sb = user_data; set_task_status(sb, _("Sorting…")); return G_SOURCE_REMOVE; } static gboolean on_statusbar_set_query_status(gpointer user_data) { FsearchStatusbar *sb = user_data; set_task_status(sb, _("Querying…")); return G_SOURCE_REMOVE; } void fsearch_statusbar_set_sort_status_delayed(FsearchStatusbar *sb) { statusbar_remove_status_update_timeout(sb); sb->statusbar_timeout_id = g_timeout_add(100, on_statusbar_set_sort_status, sb); } void fsearch_statusbar_set_query_status_delayed(FsearchStatusbar *sb) { statusbar_remove_status_update_timeout(sb); sb->statusbar_timeout_id = g_timeout_add(200, on_statusbar_set_query_status, sb); } void fsearch_statusbar_set_revealer_visibility(FsearchStatusbar *sb, FsearchStatusbarRevealer revealer, gboolean visible) { GtkRevealer *r = NULL; switch (revealer) { case FSEARCH_STATUSBAR_REVEALER_MATCH_CASE: r = GTK_REVEALER(sb->statusbar_match_case_revealer); break; case FSEARCH_STATUSBAR_REVEALER_SMART_MATCH_CASE: r = GTK_REVEALER(sb->statusbar_smart_case_revealer); break; case FSEARCH_STATUSBAR_REVEALER_SEARCH_IN_PATH: r = GTK_REVEALER(sb->statusbar_search_in_path_revealer); break; case FSEARCH_STATUSBAR_REVEALER_SMART_SEARCH_IN_PATH: r = GTK_REVEALER(sb->statusbar_smart_path_revealer); break; case FSEARCH_STATUSBAR_REVEALER_REGEX: r = GTK_REVEALER(sb->statusbar_search_mode_revealer); break; default: g_debug("unknown revealer"); } if (r) { gtk_revealer_set_reveal_child(r, visible); } } void fsearch_statusbar_set_filter(FsearchStatusbar *sb, const char *filter_name) { gtk_label_set_text(GTK_LABEL(sb->statusbar_search_filter_label), filter_name); gtk_revealer_set_reveal_child(GTK_REVEALER(sb->statusbar_search_filter_revealer), filter_name ? TRUE : FALSE); } void fsearch_statusbar_set_database_index_text(FsearchStatusbar *sb, const char *text) { if (!text) { gtk_widget_hide(sb->statusbar_scan_label); gtk_widget_hide(sb->statusbar_scan_status_label); } else { gtk_widget_show(sb->statusbar_scan_label); gtk_widget_show(sb->statusbar_scan_status_label); gtk_label_set_text(GTK_LABEL(sb->statusbar_scan_status_label), text); } } void fsearch_statusbar_set_selection(FsearchStatusbar *sb, uint32_t num_files_selected, uint32_t num_folders_selected, uint32_t num_files, uint32_t num_folders) { if (!num_folders_selected && !num_files_selected) { gtk_revealer_set_reveal_child(GTK_REVEALER(sb->statusbar_selection_revealer), FALSE); } else { gtk_revealer_set_reveal_child(GTK_REVEALER(sb->statusbar_selection_revealer), TRUE); char text[100] = ""; snprintf(text, sizeof(text), "%d/%d", num_folders_selected, num_folders); gtk_label_set_text(GTK_LABEL(sb->statusbar_selection_num_folders_label), text); snprintf(text, sizeof(text), "%d/%d", num_files_selected, num_files); gtk_label_set_text(GTK_LABEL(sb->statusbar_selection_num_files_label), text); } } static void fsearch_statusbar_set_database_updating(FsearchStatusbar *sb, const char *text) { gtk_stack_set_visible_child(GTK_STACK(sb->statusbar_database_stack), sb->statusbar_database_updating_box); gtk_spinner_start(GTK_SPINNER(sb->statusbar_database_updating_spinner)); gchar db_text[100] = ""; snprintf(db_text, sizeof(db_text), "%s", text); gtk_label_set_text(GTK_LABEL(sb->statusbar_database_updating_label), db_text); } static void fsearch_statusbar_set_database_loading(FsearchStatusbar *sb) { fsearch_statusbar_set_database_updating(sb, _("Loading…")); } static void fsearch_statusbar_set_database_scanning(FsearchStatusbar *sb) { fsearch_statusbar_set_database_updating(sb, _("Scanning…")); } static void fsearch_statusbar_set_database_idle(FsearchStatusbar *sb) { fsearch_statusbar_set_num_search_results(sb, 0); gtk_spinner_stop(GTK_SPINNER(sb->statusbar_database_updating_spinner)); gtk_widget_hide(sb->statusbar_scan_label); gtk_widget_hide(sb->statusbar_scan_status_label); gtk_stack_set_visible_child(GTK_STACK(sb->statusbar_database_stack), sb->statusbar_database_status_box); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; const uint32_t num_entries = fsearch_application_get_num_db_entries(app); gchar db_text[100] = ""; snprintf(db_text, sizeof(db_text), _("%'d Items"), num_entries); gtk_label_set_text(GTK_LABEL(sb->statusbar_database_status_label), db_text); } static void on_database_scan_started(gpointer data, gpointer user_data) { FsearchStatusbar *statusbar = FSEARCH_STATUSBAR(user_data); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); if (config->show_indexing_status) { gtk_widget_show(statusbar->statusbar_scan_label); gtk_widget_show(statusbar->statusbar_scan_status_label); } fsearch_statusbar_set_database_scanning(statusbar); } static void on_database_load_started(gpointer data, gpointer user_data) { FsearchStatusbar *statusbar = FSEARCH_STATUSBAR(user_data); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); if (config->show_indexing_status) { gtk_widget_show(statusbar->statusbar_scan_label); gtk_widget_show(statusbar->statusbar_scan_status_label); } fsearch_statusbar_set_database_loading(statusbar); } static void on_database_update_finished(gpointer data, gpointer user_data) { FsearchStatusbar *statusbar = FSEARCH_STATUSBAR(user_data); fsearch_statusbar_set_database_idle(statusbar); } static gboolean toggle_action_on_2button_press(GdkEvent *event, const char *action, gpointer user_data) { guint button; gdk_event_get_button(event, &button); GdkEventType type = gdk_event_get_event_type(event); if (button != GDK_BUTTON_PRIMARY || type != GDK_2BUTTON_PRESS) { return FALSE; } GtkWidget *widget = GTK_WIDGET(user_data); GActionGroup *group = gtk_widget_get_action_group(widget, "win"); if (!group) { return FALSE; } GVariant *state = g_action_group_get_action_state(group, action); g_action_group_change_action_state(group, action, g_variant_new_boolean(!g_variant_get_boolean(state))); g_clear_pointer(&state, g_variant_unref); return TRUE; } static gboolean on_search_filter_label_button_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { guint button; gdk_event_get_button(event, &button); GdkEventType type = gdk_event_get_event_type(event); if (button != GDK_BUTTON_PRIMARY || type != GDK_2BUTTON_PRESS) { return FALSE; } GActionGroup *group = gtk_widget_get_action_group(widget, "win"); if (!group) { return FALSE; } GVariant *state = g_action_group_get_action_state(group, "filter"); g_action_group_change_action_state(group, "filter", g_variant_new_int32(0)); g_clear_pointer(&state, g_variant_unref); return TRUE; } static gboolean on_search_mode_label_button_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { return toggle_action_on_2button_press(event, "search_mode", widget); } static gboolean on_search_in_path_label_button_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { return toggle_action_on_2button_press(event, "search_in_path", widget); } static gboolean on_match_case_label_button_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { return toggle_action_on_2button_press(event, "match_case", widget); } static void fsearch_statusbar_init(FsearchStatusbar *self) { g_assert(FSEARCH_IS_STATUSBAR(self)); gtk_widget_init_template(GTK_WIDGET(self)); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; switch (fsearch_application_get_db_state(app)) { case FSEARCH_DATABASE_STATE_LOADING: fsearch_statusbar_set_database_loading(self); break; case FSEARCH_DATABASE_STATE_SCANNING: fsearch_statusbar_set_database_scanning(self); break; default: fsearch_statusbar_set_database_idle(self); break; } fsearch_statusbar_set_selection(self, 0, 0, 0, 0); g_signal_connect_object(app, "database-scan-started", G_CALLBACK(on_database_scan_started), self, G_CONNECT_AFTER); g_signal_connect_object(app, "database-update-finished", G_CALLBACK(on_database_update_finished), self, G_CONNECT_AFTER); g_signal_connect_object(app, "database-load-started", G_CALLBACK(on_database_load_started), self, G_CONNECT_AFTER); } static void fsearch_statusbar_class_init(FsearchStatusbarClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); gtk_widget_class_set_template_from_resource(widget_class, "/io/github/cboxdoerfer/fsearch/ui/fsearch_statusbar.ui"); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_stack); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_status_box); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_status_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_updating_box); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_updating_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_database_updating_spinner); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_match_case_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_scan_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_scan_status_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_filter_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_filter_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_in_path_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_stack); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_status_box); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_task_box); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_task_spinner); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_task_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_search_mode_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_selection_num_files_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_selection_num_folders_label); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_selection_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_smart_case_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchStatusbar, statusbar_smart_path_revealer); gtk_widget_class_bind_template_callback(widget_class, on_match_case_label_button_press_event); gtk_widget_class_bind_template_callback(widget_class, on_search_filter_label_button_press_event); gtk_widget_class_bind_template_callback(widget_class, on_search_in_path_label_button_press_event); gtk_widget_class_bind_template_callback(widget_class, on_search_mode_label_button_press_event); } FsearchStatusbar * fsearch_statusbar_new() { return g_object_new(FSEARCH_STATUSBAR_TYPE, NULL, NULL, NULL); } fsearch-0.2.3/src/fsearch_statusbar.h000066400000000000000000000037021446344336300176060ustar00rootroot00000000000000#pragma once #include #include #include G_BEGIN_DECLS #define FSEARCH_STATUSBAR_TYPE (fsearch_statusbar_get_type()) G_DECLARE_FINAL_TYPE(FsearchStatusbar, fsearch_statusbar, FSEARCH, STATUSBAR, GtkRevealer) FsearchStatusbar * fsearch_statusbar_new(void); G_END_DECLS typedef enum { FSEARCH_STATUSBAR_REVEALER_MATCH_CASE, FSEARCH_STATUSBAR_REVEALER_SMART_MATCH_CASE, FSEARCH_STATUSBAR_REVEALER_SEARCH_IN_PATH, FSEARCH_STATUSBAR_REVEALER_SMART_SEARCH_IN_PATH, FSEARCH_STATUSBAR_REVEALER_REGEX, NUM_FSEARCH_STATUSBAR_REVEALERS, } FsearchStatusbarRevealer; typedef enum { FSEARCH_STATUSBAR_DATABASE_STATE_IDLE, FSEARCH_STATUSBAR_DATABASE_STATE_LOADING, FSEARCH_STATUSBAR_DATABASE_STATE_SCANNING, NUM_FSEARCH_STATUSBAR_DATABASE_STATES, } FsearchStatusbarState; void fsearch_statusbar_set_query_text(FsearchStatusbar *sb, const char *text); void fsearch_statusbar_set_num_search_results(FsearchStatusbar *sb, uint32_t num_results); void fsearch_statusbar_set_query_status_delayed(FsearchStatusbar *sb); void fsearch_statusbar_set_sort_status_delayed(FsearchStatusbar *sb); void fsearch_statusbar_set_revealer_visibility(FsearchStatusbar *sb, FsearchStatusbarRevealer revealer, gboolean visible); void fsearch_statusbar_set_filter(FsearchStatusbar *sb, const char *filter_name); void fsearch_statusbar_set_database_state(FsearchStatusbar *sb, FsearchStatusbarState state, uint32_t num_files, uint32_t num_folders); void fsearch_statusbar_set_database_index_text(FsearchStatusbar *sb, const char *text); void fsearch_statusbar_set_selection(FsearchStatusbar *sb, uint32_t num_files_selected, uint32_t num_folders_selected, uint32_t num_files, uint32_t num_folders); fsearch-0.2.3/src/fsearch_statusbar.ui000066400000000000000000001073401446344336300177770ustar00rootroot00000000000000 True False process-stop-symbolic True False process-stop-symbolic fsearch-0.2.3/src/fsearch_string_utils.c000066400000000000000000000101301446344336300203100ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-string-utils" #include "fsearch_string_utils.h" #include #include #include bool fsearch_string_is_empty(const char *str) { // query is considered empty if: // - fist character is null terminator // - or it has only space characters g_assert(str); while (*str != '\0') { if (!isspace(*str)) { return false; } str++; } return true; } bool fsearch_string_is_ascii_icase(const char *str) { g_assert(str); const gssize str_len = (gssize)strlen(str); if (str_len == 0) { return true; } g_autofree char *down = g_utf8_strdown(str, str_len); g_autofree char *up = g_utf8_strup(str, str_len); if (g_str_is_ascii(down) && g_str_is_ascii(up)) { return true; } else { g_debug("[non_ascii_string] \"%s\" (down: \"%s\", up: \"%s\")", str, down, up); return false; } } bool fsearch_string_utf8_has_upper(const char *str) { g_assert(str); char *p = (char *)str; if (!g_utf8_validate(p, -1, NULL)) { return false; } while (p && *p != '\0') { gunichar c = g_utf8_get_char(p); if (g_unichar_isupper(c)) { return true; } p = g_utf8_next_char(p); } return false; } bool fsearch_string_has_upper(const char *str) { g_assert(str); const char *ptr = str; while (*ptr != '\0') { if (isupper(*ptr)) { return true; } ptr++; } return false; } const char * fsearch_string_get_extension(const char *str) { const char *ext = strrchr(str, '.'); if (!ext || ext == str || ext[1] == '\0') { // filename has no dot // OR filename starts with dot (i.e. hidden file) // OR filename ends with dot return ""; } return ext + 1; } bool fsearch_string_has_wildcards(const char *str) { if (strchr(str, '*') || strchr(str, '?')) { return true; } return false; } char * fsearch_string_convert_wildcard_to_regex_expression(const char *str) { g_assert(str); GString *regex_epxression = g_string_sized_new(strlen(str)); g_string_append_c(regex_epxression, '^'); const char *s = str; while (*s != '\0') { switch (*s) { case '.': case '^': case '$': case '+': case '(': case ')': case '[': case ']': case '{': case '}': case '\\': case '|': g_string_append_c(regex_epxression, '\\'); g_string_append_c(regex_epxression, *s); break; case '*': g_string_append_c(regex_epxression, '.'); g_string_append_c(regex_epxression, '*'); break; case '?': g_string_append_c(regex_epxression, '.'); break; default: g_string_append_c(regex_epxression, *s); break; } s++; } g_string_append_c(regex_epxression, '$'); return g_string_free(regex_epxression, FALSE); } bool fsearch_string_starts_with_interval(char *str, char **end_ptr) { g_assert(str); g_assert(end_ptr); if (g_str_has_prefix(str, "..")) { *end_ptr = str + 2; return true; } else if (g_str_has_prefix(str, "-")) { *end_ptr = str + 1; return true; } *end_ptr = str; return false; } fsearch-0.2.3/src/fsearch_string_utils.h000066400000000000000000000032511446344336300203230ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include bool fsearch_string_is_empty(const char *str); bool fsearch_string_has_upper(const char *str); const char * fsearch_string_get_extension(const char *str); bool fsearch_string_utf8_has_upper(const char *str); // Detect if str is pure ascii characters in both its lower and upper case form. bool fsearch_string_is_ascii_icase(const char *str); bool fsearch_string_has_wildcards(const char *str); // Converts a wildcard expression to a regular expression, i.e. // `*` becomes `.*` // `?` becomes `.` // and properly escapes other valid regular expression tokens char * fsearch_string_convert_wildcard_to_regex_expression(const char *str); // Detect if str starts with a interval identifier (i.e. `..` or `-`). // At success end_ptr will point to the first character after the interval. // If no interval was detected end_ptr will point to str. bool fsearch_string_starts_with_interval(char *str, char **end_ptr); fsearch-0.2.3/src/fsearch_task.c000066400000000000000000000132421446344336300165330ustar00rootroot00000000000000#define G_LOG_DOMAIN "fsearch-task" #include "fsearch_task.h" #include #include typedef struct FsearchTask { enum { FSEARCH_TASK_TYPE_QUIT, FSEARCH_TASK_TYPE_NORMAL, } type; int id; GCancellable *task_cancellable; FsearchTaskFunc task_func; FsearchTaskFinishedFunc task_finished_func; FsearchTaskCancelledFunc task_cancelled_func; gpointer data; } FsearchTask; struct FsearchTaskQueue { GAsyncQueue *queue; GThread *queue_thread; FsearchTask *current_task; GMutex current_task_lock; }; static void fsearch_task_free(FsearchTask *task) { g_clear_object(&task->task_cancellable); g_clear_pointer(&task, free); } static FsearchTask * fsearch_task_new(int id, FsearchTaskFunc task_func, FsearchTaskFinishedFunc task_finished_func, FsearchTaskCancelledFunc task_cancelled_func, gpointer data) { FsearchTask *task = calloc(1, sizeof(FsearchTask)); g_assert(task); task->type = FSEARCH_TASK_TYPE_NORMAL; task->task_cancellable = g_cancellable_new(); task->task_func = task_func; task->task_finished_func = task_finished_func; task->task_cancelled_func = task_cancelled_func; task->data = data; task->id = id; return task; } static gpointer fsearch_task_queue_thread(FsearchTaskQueue *queue) { while (true) { FsearchTask *task = g_async_queue_pop(queue->queue); if (!task) { continue; } if (task->type == FSEARCH_TASK_TYPE_QUIT) { // quit task queue thread g_debug("[queue_thread] quit"); g_clear_pointer(&task, fsearch_task_free); break; } g_mutex_lock(&queue->current_task_lock); queue->current_task = task; g_mutex_unlock(&queue->current_task_lock); g_cancellable_reset(task->task_cancellable); gpointer result = task->task_func(task->data, task->task_cancellable); g_mutex_lock(&queue->current_task_lock); queue->current_task = NULL; g_mutex_unlock(&queue->current_task_lock); g_cancellable_reset(task->task_cancellable); task->task_finished_func(result, task->data); g_clear_pointer(&task, fsearch_task_free); } return NULL; } void fsearch_task_queue_cancel_current(FsearchTaskQueue *queue) { g_mutex_lock(&queue->current_task_lock); if (queue->current_task) { g_cancellable_cancel(queue->current_task->task_cancellable); } g_mutex_unlock(&queue->current_task_lock); } static void fsearch_task_queue_clear(FsearchTaskQueue *queue, FsearchTaskQueueClearPolicy clear_policy, int id) { if (clear_policy == FSEARCH_TASK_CLEAR_NONE) { return; } GQueue *task_queue = g_queue_new(); g_async_queue_lock(queue->queue); while (true) { // clear all queued tasks FsearchTask *task = g_async_queue_try_pop_unlocked(queue->queue); if (!task) { break; } if (clear_policy == FSEARCH_TASK_CLEAR_SAME_ID && task->id != id) { // remember tasks which need to be inserted back into the async queue later g_queue_push_tail(task_queue, g_steal_pointer(&task)); continue; } if (task->task_cancelled_func) { task->task_cancelled_func(task->data); } g_clear_pointer(&task, fsearch_task_free); } // insert all the tasks back into the async queue, which still need to be processed while (true) { FsearchTask *task = g_queue_pop_head(task_queue); if (task) { g_async_queue_push_unlocked(queue->queue, g_steal_pointer(&task)); } else { break; } } g_async_queue_unlock(queue->queue); g_clear_pointer(&task_queue, g_queue_free); } void fsearch_task_queue_free(FsearchTaskQueue *queue) { g_assert(queue); fsearch_task_queue_clear(queue, FSEARCH_TASK_CLEAR_ALL, -1); fsearch_task_queue_cancel_current(queue); FsearchTask *task = calloc(1, sizeof(FsearchTask)); g_assert(task); task->type = FSEARCH_TASK_TYPE_QUIT; g_async_queue_push(queue->queue, g_steal_pointer(&task)); g_thread_join(g_steal_pointer(&queue->queue_thread)); g_mutex_clear(&queue->current_task_lock); g_clear_pointer(&queue->queue, g_async_queue_unref); g_clear_pointer(&queue, g_free); } FsearchTaskQueue * fsearch_task_queue_new(const char *name) { FsearchTaskQueue *queue = calloc(1, sizeof(FsearchTaskQueue)); g_assert(queue); queue->queue = g_async_queue_new(); queue->queue_thread = g_thread_new(name, (GThreadFunc)fsearch_task_queue_thread, queue); g_mutex_init(&queue->current_task_lock); return queue; } void fsearch_task_queue(FsearchTaskQueue *queue, gint id, FsearchTaskFunc task_func, FsearchTaskFinishedFunc task_finished_func, FsearchTaskCancelledFunc task_cancelled_func, FsearchTaskQueueClearPolicy clear_policy, gpointer data) { FsearchTask *task = fsearch_task_new(id, task_func, task_finished_func, task_cancelled_func, data); if (clear_policy != FSEARCH_TASK_CLEAR_NONE) { fsearch_task_queue_clear(queue, clear_policy, task->id); g_mutex_lock(&queue->current_task_lock); if (queue->current_task) { if (clear_policy != FSEARCH_TASK_CLEAR_SAME_ID || queue->current_task->id == task->id) { g_cancellable_cancel(queue->current_task->task_cancellable); } } g_mutex_unlock(&queue->current_task_lock); } g_async_queue_push(queue->queue, g_steal_pointer(&task)); } fsearch-0.2.3/src/fsearch_task.h000066400000000000000000000017341446344336300165430ustar00rootroot00000000000000 #pragma once #include #include typedef struct FsearchTaskQueue FsearchTaskQueue; typedef gpointer (*FsearchTaskFunc)(gpointer data, GCancellable *cancellable); typedef void (*FsearchTaskCancelledFunc)(gpointer data); typedef void (*FsearchTaskFinishedFunc)(gpointer result, gpointer data); typedef enum { FSEARCH_TASK_CLEAR_NONE = -1, FSEARCH_TASK_CLEAR_SAME_ID, FSEARCH_TASK_CLEAR_ALL, } FsearchTaskQueueClearPolicy; void fsearch_task_queue_free(FsearchTaskQueue *queue); FsearchTaskQueue * fsearch_task_queue_new(const char *name); void fsearch_task_queue(FsearchTaskQueue *queue, gint id, FsearchTaskFunc task_func, FsearchTaskFinishedFunc task_finished_func, FsearchTaskCancelledFunc task_cancelled_func, FsearchTaskQueueClearPolicy clear_policy, gpointer data); void fsearch_task_queue_cancel_current(FsearchTaskQueue *queue); fsearch-0.2.3/src/fsearch_task_ids.h000066400000000000000000000001611446344336300173730ustar00rootroot00000000000000#pragma once typedef enum FsearchTaskId { FSEARCH_TASK_ID_SEARCH, FSEARCH_TASK_ID_SORT, } FsearchTaskId;fsearch-0.2.3/src/fsearch_thread_pool.c000066400000000000000000000137661446344336300201040ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-thread-pool" #include #include "fsearch_limits.h" #include "fsearch_thread_pool.h" struct FsearchThreadPool { GList *threads; uint32_t num_threads; }; typedef struct { GThread *thread; FsearchThreadPoolFunc thread_func; gpointer *thread_data; GMutex mutex; GCond start_cond; GCond finished_cond; FsearchThreadStatus status; bool terminate; } FsearchThreadPoolContext; static bool thread_pool_has_thread(FsearchThreadPool *pool, GList *thread) { GList *temp = pool->threads; while (temp) { if (temp == thread) { return true; } temp = temp->next; } return false; } static gpointer fsearch_thread_pool_thread(gpointer user_data) { FsearchThreadPoolContext *ctx = user_data; g_mutex_lock(&ctx->mutex); while (!ctx->terminate) { g_cond_wait(&ctx->start_cond, &ctx->mutex); ctx->status = THREAD_BUSY; if (ctx->thread_data) { ctx->thread_func(ctx->thread_data); ctx->status = THREAD_FINISHED; ctx->thread_data = NULL; g_cond_signal(&ctx->finished_cond); } ctx->status = THREAD_IDLE; } g_mutex_unlock(&ctx->mutex); return NULL; } static void thread_context_free(FsearchThreadPoolContext *ctx) { g_return_if_fail(ctx); g_mutex_lock(&ctx->mutex); if (ctx->thread_data) { g_debug("[thread_pool] search data still there"); } // terminate thread ctx->terminate = true; g_cond_signal(&ctx->start_cond); g_mutex_unlock(&ctx->mutex); g_thread_join(g_steal_pointer(&ctx->thread)); g_mutex_clear(&ctx->mutex); g_cond_clear(&ctx->start_cond); g_cond_clear(&ctx->finished_cond); g_clear_pointer(&ctx, g_free); } static FsearchThreadPoolContext * thread_context_new(void) { FsearchThreadPoolContext *ctx = g_new0(FsearchThreadPoolContext, 1); g_assert(ctx); ctx->thread_data = NULL; ctx->thread_func = NULL; ctx->terminate = false; ctx->status = THREAD_IDLE; g_mutex_init(&ctx->mutex); g_cond_init(&ctx->start_cond); g_cond_init(&ctx->finished_cond); ctx->thread = g_thread_new("thread pool", fsearch_thread_pool_thread, ctx); return ctx; } FsearchThreadPool * fsearch_thread_pool_init(void) { FsearchThreadPool *pool = g_new0(FsearchThreadPool, 1); pool->threads = NULL; pool->num_threads = 0; uint32_t num_cpus = MIN(g_get_num_processors(), FSEARCH_THREAD_LIMIT); for (uint32_t i = 0; i < num_cpus; i++) { FsearchThreadPoolContext *ctx = thread_context_new(); if (ctx) { pool->threads = g_list_prepend(pool->threads, ctx); pool->num_threads++; } } return pool; } void fsearch_thread_pool_free(FsearchThreadPool *pool) { g_return_if_fail(pool); g_list_free_full(g_steal_pointer(&pool->threads), (GDestroyNotify)thread_context_free); g_clear_pointer(&pool, g_free); } GList * fsearch_thread_pool_get_threads(FsearchThreadPool *pool) { g_return_val_if_fail(pool, NULL); return pool->threads; } gpointer fsearch_thread_pool_get_data(FsearchThreadPool *pool, GList *thread) { if (!pool || !thread) { return NULL; } if (!thread_pool_has_thread(pool, thread)) { return NULL; } FsearchThreadPoolContext *ctx = thread->data; if (!ctx) { return NULL; } return ctx->thread_data; } bool fsearch_thread_pool_task_is_idle(FsearchThreadPool *pool, GList *thread) { bool res = false; if (!thread_pool_has_thread(pool, thread)) { return res; } FsearchThreadPoolContext *ctx = thread->data; if (!ctx) { return res; } res = ctx->status == THREAD_IDLE ? true : false; return res; } bool fsearch_thread_pool_task_is_busy(FsearchThreadPool *pool, GList *thread) { bool res = false; if (!thread_pool_has_thread(pool, thread)) { return res; } FsearchThreadPoolContext *ctx = thread->data; if (!ctx) { return res; } res = ctx->status == THREAD_BUSY ? true : false; return res; } bool fsearch_thread_pool_wait_for_thread(FsearchThreadPool *pool, GList *thread) { FsearchThreadPoolContext *ctx = thread->data; g_mutex_lock(&ctx->mutex); while (fsearch_thread_pool_task_is_busy(pool, thread)) { g_debug("[thread_pool] busy, waiting..."); g_cond_wait(&ctx->finished_cond, &ctx->mutex); g_debug("[thread_pool] continue..."); } g_mutex_unlock(&ctx->mutex); return true; } uint32_t fsearch_thread_pool_get_num_threads(FsearchThreadPool *pool) { g_return_val_if_fail(pool, 0); return pool->num_threads; } bool fsearch_thread_pool_push_data(FsearchThreadPool *pool, GList *thread, FsearchThreadPoolFunc thread_func, gpointer thread_data) { if (!pool || !thread || !thread_func || !thread_data) { return false; } if (!thread_pool_has_thread(pool, thread)) { return false; } FsearchThreadPoolContext *ctx = thread->data; g_mutex_lock(&ctx->mutex); ctx->thread_func = thread_func; ctx->thread_data = thread_data; ctx->status = THREAD_BUSY; g_cond_signal(&ctx->start_cond); g_mutex_unlock(&ctx->mutex); return true; } fsearch-0.2.3/src/fsearch_thread_pool.h000066400000000000000000000035461446344336300201040ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include #include typedef struct FsearchThreadPool FsearchThreadPool; typedef void (*FsearchThreadPoolFunc)(void *data); ; typedef enum FsearchThreadStatus { THREAD_IDLE, THREAD_BUSY, THREAD_FINISHED } FsearchThreadStatus; FsearchThreadPool * fsearch_thread_pool_init(void); void fsearch_thread_pool_free(FsearchThreadPool *pool); GList * fsearch_thread_pool_get_threads(FsearchThreadPool *pool); uint32_t fsearch_thread_pool_get_num_threads(FsearchThreadPool *pool); bool fsearch_thread_pool_push_data(FsearchThreadPool *pool, GList *thread, FsearchThreadPoolFunc thread_func, gpointer thread_data); bool fsearch_thread_pool_wait_for_thread(FsearchThreadPool *pool, GList *thread); bool fsearch_thread_pool_task_is_busy(FsearchThreadPool *pool, GList *thread); bool fsearch_thread_pool_task_is_idle(FsearchThreadPool *pool, GList *thread); gpointer fsearch_thread_pool_get_data(FsearchThreadPool *pool, GList *thread); bool fsearch_thread_pool_set_task_finished(FsearchThreadPool *pool, GList *thread); fsearch-0.2.3/src/fsearch_time_utils.c000066400000000000000000000426421446344336300177550ustar00rootroot00000000000000#define _GNU_SOURCE #include "fsearch_time_utils.h" #include #include #include typedef enum FsearchDateTimeType { FSEARCH_DATE_TIME_TYPE_SECOND, FSEARCH_DATE_TIME_TYPE_MINUTE, FSEARCH_DATE_TIME_TYPE_HOUR, FSEARCH_DATE_TIME_TYPE_WEEK, FSEARCH_DATE_TIME_TYPE_DAY, FSEARCH_DATE_TIME_TYPE_MONTH, FSEARCH_DATE_TIME_TYPE_YEAR, NUM_FSEARCH_DATE_TIME_TYPES, } FsearchDateTimeType; typedef struct FsearchDateTimeConstant { const char *format; int32_t val; FsearchDateTimeType type; } FsearchDateTimeConstant; static time_t get_unix_time_from_tm(struct tm *tm) { return MAX(0, mktime(tm)); } static int32_t get_weekday_from_gdate(GDate *date) { g_assert(date); switch (g_date_get_weekday(date)) { case G_DATE_BAD_WEEKDAY: return 0; case G_DATE_MONDAY: return 1; case G_DATE_TUESDAY: return 2; case G_DATE_WEDNESDAY: return 3; case G_DATE_THURSDAY: return 4; case G_DATE_FRIDAY: return 5; case G_DATE_SATURDAY: return 6; case G_DATE_SUNDAY: return 7; } return 0; } FsearchDateTimeConstant date_constants[] = { // relative to today {"today", 0, FSEARCH_DATE_TIME_TYPE_DAY}, {"yesterday", 1, FSEARCH_DATE_TIME_TYPE_DAY}, // weekdays {"monday", 1, FSEARCH_DATE_TIME_TYPE_WEEK}, {"mon", 1, FSEARCH_DATE_TIME_TYPE_WEEK}, {"tuesday", 2, FSEARCH_DATE_TIME_TYPE_WEEK}, {"tue", 2, FSEARCH_DATE_TIME_TYPE_WEEK}, {"wednesday", 3, FSEARCH_DATE_TIME_TYPE_WEEK}, {"wed", 3, FSEARCH_DATE_TIME_TYPE_WEEK}, {"thursday", 4, FSEARCH_DATE_TIME_TYPE_WEEK}, {"thu", 4, FSEARCH_DATE_TIME_TYPE_WEEK}, {"friday", 5, FSEARCH_DATE_TIME_TYPE_WEEK}, {"fri", 5, FSEARCH_DATE_TIME_TYPE_WEEK}, {"saturday", 6, FSEARCH_DATE_TIME_TYPE_WEEK}, {"sat", 6, FSEARCH_DATE_TIME_TYPE_WEEK}, {"sunday", 7, FSEARCH_DATE_TIME_TYPE_WEEK}, {"sun", 7, FSEARCH_DATE_TIME_TYPE_WEEK}, // months {"january", 1, FSEARCH_DATE_TIME_TYPE_MONTH}, {"jan", 1, FSEARCH_DATE_TIME_TYPE_MONTH}, {"february", 2, FSEARCH_DATE_TIME_TYPE_MONTH}, {"feb", 2, FSEARCH_DATE_TIME_TYPE_MONTH}, {"march", 3, FSEARCH_DATE_TIME_TYPE_MONTH}, {"mar", 3, FSEARCH_DATE_TIME_TYPE_MONTH}, {"april", 4, FSEARCH_DATE_TIME_TYPE_MONTH}, {"apr", 4, FSEARCH_DATE_TIME_TYPE_MONTH}, {"may", 5, FSEARCH_DATE_TIME_TYPE_MONTH}, {"june", 6, FSEARCH_DATE_TIME_TYPE_MONTH}, {"jun", 6, FSEARCH_DATE_TIME_TYPE_MONTH}, {"july", 7, FSEARCH_DATE_TIME_TYPE_MONTH}, {"jul", 7, FSEARCH_DATE_TIME_TYPE_MONTH}, {"august", 8, FSEARCH_DATE_TIME_TYPE_MONTH}, {"aug", 8, FSEARCH_DATE_TIME_TYPE_MONTH}, {"september", 9, FSEARCH_DATE_TIME_TYPE_MONTH}, {"sep", 9, FSEARCH_DATE_TIME_TYPE_MONTH}, {"october", 10, FSEARCH_DATE_TIME_TYPE_MONTH}, {"oct", 10, FSEARCH_DATE_TIME_TYPE_MONTH}, {"november", 11, FSEARCH_DATE_TIME_TYPE_MONTH}, {"nov", 11, FSEARCH_DATE_TIME_TYPE_MONTH}, {"december", 12, FSEARCH_DATE_TIME_TYPE_MONTH}, {"dec", 12, FSEARCH_DATE_TIME_TYPE_MONTH}, }; static bool parse_explicit_date_time_constants(const char *str, struct tm *start, struct tm *end) { const time_t t_now = time(NULL); for (uint32_t i = 0; i < G_N_ELEMENTS(date_constants); ++i) { if (g_strcmp0(str, date_constants[i].format) == 0) { GDate *date = g_date_new(); g_date_set_time_t(date, t_now); int32_t diff = 0; switch (date_constants[i].type) { case FSEARCH_DATE_TIME_TYPE_WEEK: { // The amount of days which have passed since the requested weekday diff = get_weekday_from_gdate(date) - date_constants[i].val; if (diff < 0) { diff += 7; } g_date_subtract_days(date, diff); g_date_to_struct_tm(date, start); g_date_add_days(date, 1); g_date_to_struct_tm(date, end); } break; case FSEARCH_DATE_TIME_TYPE_DAY: g_date_subtract_days(date, date_constants[i].val); g_date_to_struct_tm(date, start); g_date_add_days(date, 1); g_date_to_struct_tm(date, end); break; case FSEARCH_DATE_TIME_TYPE_MONTH: g_date_subtract_days(date, date->day - 1); // The amount of months which have passed since the requested month diff = date->month - date_constants[i].val; if (diff < 0) { diff += 12; } g_date_subtract_months(date, diff); g_date_to_struct_tm(date, start); g_date_add_months(date, 1); g_date_to_struct_tm(date, end); break; default: break; } g_clear_pointer(&date, g_date_free); return true; } } return false; } static struct tm subtract_from_tm(struct tm tm, FsearchDateTimeType type, gint num) { struct tm tm_res = tm; mktime(&tm); switch (type) { case FSEARCH_DATE_TIME_TYPE_YEAR: tm_res.tm_year -= num; break; case FSEARCH_DATE_TIME_TYPE_MONTH: tm_res.tm_mon -= num; break; case FSEARCH_DATE_TIME_TYPE_WEEK: tm_res.tm_mday -= 7 * num; break; case FSEARCH_DATE_TIME_TYPE_DAY: tm_res.tm_mday -= num; break; case FSEARCH_DATE_TIME_TYPE_HOUR: tm_res.tm_hour -= num; break; case FSEARCH_DATE_TIME_TYPE_MINUTE: tm_res.tm_min -= num; break; default: break; } mktime(&tm_res); return tm_res; } static struct tm round_down_tm_with_date_time_accuracy(struct tm tm, FsearchDateTimeType type) { struct tm tm_res = {}; tm_res.tm_mday = 1; tm_res.tm_isdst = tm.tm_isdst; mktime(&tm); switch (type) { case FSEARCH_DATE_TIME_TYPE_MINUTE: tm_res.tm_min = tm.tm_min; case FSEARCH_DATE_TIME_TYPE_HOUR: tm_res.tm_hour = tm.tm_hour; case FSEARCH_DATE_TIME_TYPE_DAY: tm_res.tm_mday = tm.tm_mday; case FSEARCH_DATE_TIME_TYPE_MONTH: tm_res.tm_mon = tm.tm_mon; case FSEARCH_DATE_TIME_TYPE_YEAR: tm_res.tm_year = tm.tm_year; break; case FSEARCH_DATE_TIME_TYPE_WEEK: // tm_wday starts with 0 for Sunday // shift one to the left to have 0 start at Monday instead tm_res.tm_mday = tm.tm_mday - (tm.tm_wday == 0 ? 6 : tm.tm_wday - 1); tm_res.tm_mon = tm.tm_mon; tm_res.tm_year = tm.tm_year; break; default: break; } mktime(&tm_res); return tm_res; } FsearchDateTimeConstant num_constants[] = { {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4}, {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}, {"ten", 10}, {"dozen", 12}, {"hundred", 100}, }; enum { // when it's 14 August, then ... FSEARCH_DATE_REFERS_TO_PAST_FINAL, // "last month" means July (1-31) FSEARCH_DATE_REFERS_TO_PAST, // "past month" means 14 July - 14 August FSEARCH_DATE_REFERS_TO_NOW, // "this month" means August (1-14) }; FsearchDateTimeConstant prefix_constants[] = { {"last", FSEARCH_DATE_REFERS_TO_PAST_FINAL}, {"inthelast", FSEARCH_DATE_REFERS_TO_PAST_FINAL}, {"past", FSEARCH_DATE_REFERS_TO_PAST}, {"previous", FSEARCH_DATE_REFERS_TO_PAST_FINAL}, {"prev", FSEARCH_DATE_REFERS_TO_PAST_FINAL}, {"this", FSEARCH_DATE_REFERS_TO_NOW}, }; FsearchDateTimeConstant suffix_singular_constants[] = { {"year", .type = FSEARCH_DATE_TIME_TYPE_YEAR}, {"month", .type = FSEARCH_DATE_TIME_TYPE_MONTH}, {"week", .type = FSEARCH_DATE_TIME_TYPE_WEEK}, {"day", .type = FSEARCH_DATE_TIME_TYPE_DAY}, {"hour", .type = FSEARCH_DATE_TIME_TYPE_HOUR}, {"min", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"minute", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"sec", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, {"second", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, }; FsearchDateTimeConstant suffix_plural_constants[] = { {"years", .type = FSEARCH_DATE_TIME_TYPE_YEAR}, {"months", .type = FSEARCH_DATE_TIME_TYPE_MONTH}, {"weeks", .type = FSEARCH_DATE_TIME_TYPE_WEEK}, {"days", .type = FSEARCH_DATE_TIME_TYPE_DAY}, {"hours", .type = FSEARCH_DATE_TIME_TYPE_HOUR}, {"min", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"minutes", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"sec", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, {"seconds", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, }; static void print_tm(struct tm *tm) { if (!tm) { return; } g_print("%04d/%02d/%02d %02d:%02d:%02d (%d)\n", tm->tm_year + 1900, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_isdst); } static bool parse_implicit_date_time_constants(const char *str, struct tm *start, struct tm *end) { g_assert(start); g_assert(end); const char *s = str; int32_t date_type = FSEARCH_DATE_REFERS_TO_PAST; // Check if there's a prefix (e.g. last, this) for (uint32_t i = 0; i < G_N_ELEMENTS(prefix_constants); ++i) { if (g_str_has_prefix(s, prefix_constants[i].format)) { date_type = prefix_constants[i].val; s += strlen(prefix_constants[i].format); } } // Check if there's a number FsearchDateTimeType type = NUM_FSEARCH_DATE_TIME_TYPES; int64_t num = 1; if (date_type != FSEARCH_DATE_REFERS_TO_NOW) { char *end_of_num = (char *)s; num = strtoll(s, &end_of_num, 10); if (end_of_num == s) { num = 1; for (uint32_t i = 0; i < G_N_ELEMENTS(num_constants); ++i) { if (g_str_has_prefix(s, num_constants[i].format)) { num = num_constants[i].val; end_of_num += strlen(num_constants[i].format); } } } s = end_of_num; } if (num > 1) { for (uint32_t i = 0; i < G_N_ELEMENTS(suffix_plural_constants); ++i) { if (g_strcmp0(s, suffix_plural_constants[i].format) == 0) { type = suffix_plural_constants[i].type; } } } else if (num == 1) { for (uint32_t i = 0; i < G_N_ELEMENTS(suffix_singular_constants); ++i) { if (g_strcmp0(s, suffix_singular_constants[i].format) == 0) { type = suffix_singular_constants[i].type; } } } else { return false; } if (type == NUM_FSEARCH_DATE_TIME_TYPES) { // No date/time type was specified return false; } const time_t t_now = time(NULL); struct tm tm_now = *localtime(&t_now); struct tm tm_start = {}; struct tm tm_end = {}; if (date_type == FSEARCH_DATE_REFERS_TO_NOW) { // start of the current year/month/... until now tm_start = round_down_tm_with_date_time_accuracy(tm_now, type); tm_end = tm_now; } else { if (date_type == FSEARCH_DATE_REFERS_TO_PAST_FINAL) { // end at the beginning of the current year/month/... tm_end = round_down_tm_with_date_time_accuracy(tm_now, type); } else { // end at now tm_end = tm_now; } // start num * years/months/... before tm_end tm_start = subtract_from_tm(tm_end, type, (gint)num); } *start = tm_start; *end = tm_end; return true; } static bool parse_date_time_constants(const char *str, time_t *time_start_out, time_t *time_end_out) { struct tm tm_start = {}; struct tm tm_end = {}; if (parse_explicit_date_time_constants(str, &tm_start, &tm_end) || parse_implicit_date_time_constants(str, &tm_start, &tm_end)) { if (time_start_out) { *time_start_out = get_unix_time_from_tm(&tm_start); } if (time_end_out) { *time_end_out = get_unix_time_from_tm(&tm_end); } return true; } return false; } static int cmp_int(int64_t i1, int64_t i2) { if (i1 < i2) { return -1; } else if (i1 > i2) { return 1; } return 0; } static int cmp_tm(struct tm *tm1, struct tm *tm2, FsearchDateTimeType interval) { g_assert(tm1); g_assert(tm2); int res = cmp_int(tm1->tm_year, tm2->tm_year); if (res != 0 || interval == FSEARCH_DATE_TIME_TYPE_YEAR) { return res; } res = cmp_int(tm1->tm_mon, tm2->tm_mon); if (res != 0 || interval == FSEARCH_DATE_TIME_TYPE_MONTH) { return res; } res = cmp_int(tm1->tm_mday, tm2->tm_mday); if (res != 0 || interval == FSEARCH_DATE_TIME_TYPE_DAY) { return res; } res = cmp_int(tm1->tm_hour, tm2->tm_hour); if (res != 0 || interval == FSEARCH_DATE_TIME_TYPE_HOUR) { return res; } res = cmp_int(tm1->tm_min, tm2->tm_min); if (res != 0 || interval == FSEARCH_DATE_TIME_TYPE_MINUTE) { return res; } return cmp_int(tm1->tm_sec, tm2->tm_sec); } static void lower_clamp_tm(struct tm *tm_to_clamp, struct tm *tm_lower_bound) { g_return_if_fail(tm_to_clamp); g_return_if_fail(tm_lower_bound); int cmp_res = cmp_tm(tm_to_clamp, tm_lower_bound, FSEARCH_DATE_TIME_TYPE_SECOND); if (cmp_res >= 0) { return; } tm_to_clamp->tm_year = tm_lower_bound->tm_year; tm_to_clamp->tm_mon = tm_lower_bound->tm_mon; tm_to_clamp->tm_mday = tm_lower_bound->tm_mday; tm_to_clamp->tm_hour = tm_lower_bound->tm_hour; tm_to_clamp->tm_min = tm_lower_bound->tm_min; tm_to_clamp->tm_sec = tm_lower_bound->tm_sec; } static bool round_down_tm_to_reference_with_date_time_accuracy(struct tm *tm, struct tm *tm_reference, FsearchDateTimeType type) { const int cmp_result = cmp_tm(tm, tm_reference, type); if (cmp_result < 0) { // tm is smaller than tm_reference and can't be represented with unix time return false; } if (cmp_result == 0) { // Even though they're reported as equal, tm can still point to a date before tm_reference. // That's because we're only comparing tm up to the specified accuracy of type // E.g. a query like `dm:1970` might translate to tm referring to 1969-12-31 23:00:00 UTC // due to the current timezone being one hour ahead of UTC. lower_clamp_tm(tm, tm_reference); } return true; } bool fsearch_date_time_parse_interval(const char *str, time_t *time_start_out, time_t *time_end_out) { if (parse_date_time_constants(str, time_start_out, time_end_out)) { return true; } FsearchDateTimeConstant formats[] = { {"%Y-%m-%d %H:%M:%S", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, {"%y-%m-%d %H:%M:%S", .type = FSEARCH_DATE_TIME_TYPE_SECOND}, {"%Y-%m-%d %H:%M", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"%y-%m-%d %H:%M", .type = FSEARCH_DATE_TIME_TYPE_MINUTE}, {"%Y-%m-%d %H", .type = FSEARCH_DATE_TIME_TYPE_HOUR}, {"%y-%m-%d %H", .type = FSEARCH_DATE_TIME_TYPE_HOUR}, {"%Y-%m-%d", .type = FSEARCH_DATE_TIME_TYPE_DAY}, {"%y-%m-%d", .type = FSEARCH_DATE_TIME_TYPE_DAY}, {"%Y-%m", .type = FSEARCH_DATE_TIME_TYPE_MONTH}, {"%y-%m", .type = FSEARCH_DATE_TIME_TYPE_MONTH}, {"%Y", .type = FSEARCH_DATE_TIME_TYPE_YEAR}, {"%y", .type = FSEARCH_DATE_TIME_TYPE_YEAR}, }; // Get a struct tm of timestamp 0 // This is used to determine if our parsed time would result in a timestamp < 0 time_t time_zero = 0; struct tm *tm_zero = localtime(&time_zero); for (uint32_t i = 0; i < G_N_ELEMENTS(formats); ++i) { struct tm tm_start = {0}; tm_start.tm_mday = 1; char *date_suffix = strptime(str, formats[i].format, &tm_start); if (!date_suffix || date_suffix[0] != '\0') { continue; } if (tm_start.tm_year < tm_zero->tm_year) { // Try again with a different format. // This is necessary to handle cases like the following: // dm:14 will be successfully parsed by %Y, with tm_year set to -1886 // But we want tm_year to be 2014, so we'll let the next format (%y) handle this case, // which will parse the year as expect. continue; } tm_start.tm_isdst = -1; struct tm tm_end = tm_start; switch (formats[i].type) { case FSEARCH_DATE_TIME_TYPE_YEAR: tm_end.tm_year++; break; case FSEARCH_DATE_TIME_TYPE_MONTH: tm_end.tm_mon++; break; case FSEARCH_DATE_TIME_TYPE_DAY: tm_end.tm_mday++; break; case FSEARCH_DATE_TIME_TYPE_HOUR: tm_end.tm_hour++; break; case FSEARCH_DATE_TIME_TYPE_MINUTE: tm_end.tm_min++; break; case FSEARCH_DATE_TIME_TYPE_SECOND: tm_end.tm_sec++; break; default: continue; } if (!round_down_tm_to_reference_with_date_time_accuracy(&tm_start, tm_zero, formats[i].type) && !round_down_tm_to_reference_with_date_time_accuracy(&tm_end, tm_zero, formats[i].type)) { // both tm_start and tm_end can't be represented with unix time // e.g. dm:1965 return false; } if (time_start_out) { *time_start_out = get_unix_time_from_tm(&tm_start); } if (time_end_out) { *time_end_out = get_unix_time_from_tm(&tm_end); } return true; } return false; } fsearch-0.2.3/src/fsearch_time_utils.h000066400000000000000000000002331446344336300177500ustar00rootroot00000000000000#pragma once #include #include bool fsearch_date_time_parse_interval(const char *str, time_t *time_start_out, time_t *time_end_out);fsearch-0.2.3/src/fsearch_ui_utils.c000066400000000000000000000046021446344336300174260ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include "fsearch_ui_utils.h" void ui_utils_run_gtk_dialog_async(GtkWidget *parent, GtkMessageType type, GtkButtonsType buttons, const gchar *primary_text, const gchar *sec_text, GCallback response_cb, gpointer response_cb_data) { g_return_if_fail(primary_text); GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, type, buttons, primary_text, NULL); if (sec_text) { gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), sec_text, NULL); } gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_title(GTK_WINDOW(dialog), ""); g_signal_connect(dialog, "response", G_CALLBACK(response_cb), response_cb_data); gtk_widget_show(dialog); } gint ui_utils_run_gtk_dialog(GtkWidget *parent, GtkMessageType type, GtkButtonsType buttons, const gchar *primary_text, const gchar *sec_text) { if (!parent || !primary_text) { return GTK_RESPONSE_CANCEL; } GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, type, buttons, primary_text, NULL); if (sec_text) { gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), sec_text, NULL); } gtk_window_set_title(GTK_WINDOW(dialog), ""); gint response = gtk_dialog_run(GTK_DIALOG(dialog)); g_clear_pointer(&dialog, gtk_widget_destroy); return response; } fsearch-0.2.3/src/fsearch_ui_utils.h000066400000000000000000000025561446344336300174410ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include void ui_utils_run_gtk_dialog_async(GtkWidget *parent, GtkMessageType type, GtkButtonsType buttons, const gchar *primary_text, const gchar *sec_text, GCallback response_cb, gpointer response_cb_data); gint ui_utils_run_gtk_dialog(GtkWidget *parent, GtkMessageType type, GtkButtonsType buttons, const gchar *primary_text, const gchar *sec_text); fsearch-0.2.3/src/fsearch_utf.c000066400000000000000000000131261446344336300163700ustar00rootroot00000000000000#include "fsearch_utf.h" #include #include #include #include #include void fsearch_utf_builder_init(FsearchUtfBuilder *builder, int32_t num_characters) { g_return_if_fail(builder); builder->initialized = true; builder->fold_options = U_FOLD_CASE_DEFAULT; const char *current_locale = setlocale(LC_CTYPE, NULL); if (current_locale && (!strncmp(current_locale, "tr", 2) || !strncmp(current_locale, "az", 2))) { // Use special case mapping for Turkic languages builder->fold_options = U_FOLD_CASE_EXCLUDE_SPECIAL_I; } UErrorCode status = U_ZERO_ERROR; builder->case_map = ucasemap_open(current_locale, builder->fold_options, &status); g_assert(U_SUCCESS(status)); builder->normalizer = unorm2_getNFDInstance(&status); g_assert(U_SUCCESS(status)); builder->string_utf8_is_folded = false; builder->string_is_folded_and_normalized = false; builder->num_characters = num_characters; builder->string_utf8_folded = calloc(builder->num_characters, sizeof(char)); builder->string_utf8_folded_len = 0; builder->string_folded = calloc(builder->num_characters, sizeof(UChar)); builder->string_folded_len = 0; builder->string_normalized_folded = calloc(builder->num_characters, sizeof(UChar)); builder->string_normalized_folded_len = 0; } void fsearch_utf_builder_clear(FsearchUtfBuilder *builder) { if (!builder) { return; } builder->initialized = false; g_clear_pointer(&builder->case_map, ucasemap_close); g_clear_pointer(&builder->string, free); g_clear_pointer(&builder->string_utf8_folded, free); g_clear_pointer(&builder->string_folded, free); g_clear_pointer(&builder->string_normalized_folded, free); } bool fsearch_utf_fold_case_utf8(UCaseMap *case_map, FsearchUtfBuilder *builder, const char *string) { if (!builder || !builder->initialized) { return false; } UErrorCode status = U_ZERO_ERROR; // first perform case folding (this can be done while our string is still in UTF8 form) builder->string_utf8_folded_len = ucasemap_utf8FoldCase(case_map, builder->string_utf8_folded, builder->num_characters, string, -1, &status); if (G_UNLIKELY(U_FAILURE(status))) { return false; } builder->string_utf8_is_folded = true; builder->string_is_folded_and_normalized = false; return true; } bool fsearch_utf_builder_normalize_and_fold_case(FsearchUtfBuilder *builder, const char *string) { g_assert(builder); if (!builder->initialized) { goto fail; } UErrorCode status = U_ZERO_ERROR; builder->string = g_strdup(string); // first perform case folding (this can be done while our string is still in UTF8 form) builder->string_utf8_folded_len = ucasemap_utf8FoldCase(builder->case_map, builder->string_utf8_folded, builder->num_characters, string, -1, &status); if (G_UNLIKELY(U_FAILURE(status))) { goto fail; } builder->string_utf8_is_folded = true; // then convert folded UTF8 string to UTF16 for normalizer u_strFromUTF8(builder->string_folded, builder->num_characters, &builder->string_folded_len, builder->string_utf8_folded, builder->string_utf8_folded_len, &status); if (G_UNLIKELY(U_FAILURE(status))) { goto fail; } // check how much of the string needs to be normalized (if anything at all) const int32_t span_end = unorm2_spanQuickCheckYes(builder->normalizer, builder->string_folded, builder->string_folded_len, &status); if (G_UNLIKELY(U_FAILURE(status))) { goto fail; } if (G_LIKELY(span_end == builder->string_folded_len)) { // the string is already normalized // this should be the most common case and fortunately is the quickest (simple memcpy) memcpy(builder->string_normalized_folded, builder->string_folded, span_end * sizeof(UChar)); builder->string_normalized_folded_len = builder->string_folded_len; } else if (span_end < builder->string_folded_len) { // the string isn't fully normalized // normalize everything after string_folded + span_end u_strncpy(builder->string_normalized_folded, builder->string_folded, span_end); builder->string_normalized_folded_len = unorm2_normalizeSecondAndAppend(builder->normalizer, builder->string_normalized_folded, span_end, builder->num_characters, builder->string_folded + span_end, builder->string_folded_len - span_end, &status); if (G_UNLIKELY(U_FAILURE(status))) { goto fail; } } else { // span_end is reported to be after string_folded_len, there's likely a bug in our code g_assert_not_reached(); } builder->string_is_folded_and_normalized = true; return true; fail: builder->string_utf8_folded_len = 0; builder->string_folded_len = 0; builder->string_normalized_folded_len = 0; builder->string_is_folded_and_normalized = false; builder->string_utf8_is_folded = false; return false; } fsearch-0.2.3/src/fsearch_utf.h000066400000000000000000000017531446344336300164000ustar00rootroot00000000000000#pragma once #include #include #include #include typedef struct FsearchUtfBuilder { UCaseMap *case_map; const UNormalizer2 *normalizer; char *string; char *string_utf8_folded; UChar *string_folded; UChar *string_normalized_folded; int32_t string_folded_len; int32_t string_normalized_folded_len; int32_t string_utf8_folded_len; uint32_t fold_options; int32_t num_characters; bool initialized; bool string_is_folded_and_normalized; bool string_utf8_is_folded; } FsearchUtfBuilder; void fsearch_utf_builder_init(FsearchUtfBuilder *builder, int32_t num_characters); void fsearch_utf_builder_clear(FsearchUtfBuilder *builder); bool fsearch_utf_fold_case_utf8(UCaseMap *case_map, FsearchUtfBuilder *builder, const char *string); bool fsearch_utf_builder_normalize_and_fold_case(FsearchUtfBuilder *builder, const char *string); fsearch-0.2.3/src/fsearch_window.c000066400000000000000000001537301446344336300171070ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define G_LOG_DOMAIN "fsearch-window" #ifdef HAVE_CONFIG_H #include #endif #include "fsearch_array.h" #include "fsearch_config.h" #include "fsearch_database_entry.h" #include "fsearch_database_view.h" #include "fsearch_file_utils.h" #include "fsearch_list_view.h" #include "fsearch_listview_popup.h" #include "fsearch_result_view.h" #include "fsearch_statusbar.h" #include "fsearch_string_utils.h" #include "fsearch_task.h" #include "fsearch_ui_utils.h" #include "fsearch_window.h" #include "fsearch_window_actions.h" #include struct _FsearchApplicationWindow { GtkApplicationWindow parent_instance; GtkWidget *app_menu; GtkWidget *filter_combobox; GtkWidget *filter_revealer; GtkWidget *headerbar_box; GtkWidget *listview_scrolled_window; GtkWidget *main_box; GtkWidget *menu_box; GtkWidget *overlay_database_empty; GtkWidget *overlay_database_loading; GtkWidget *overlay_database_updating; GtkWidget *overlay_query_empty; GtkWidget *overlay_results_empty; GtkWidget *overlay_results_sorting; GtkWidget *popover_update_button_stack; GtkWidget *search_box; GtkWidget *search_button_revealer; GtkWidget *search_entry; GtkWidget *main_stack; GtkWidget *main_database_overlay_stack; GtkWidget *main_result_overlay; GtkWidget *main_search_overlay_stack; GtkWidget *statusbar; char *active_filter_name; FsearchResultView *result_view; }; typedef enum { OVERLAY_DATABASE, OVERLAY_DATABASE_EMPTY, OVERLAY_DATABASE_LOADING, OVERLAY_DATABASE_UPDATING, OVERLAY_QUERY_EMPTY, OVERLAY_RESULTS, OVERLAY_RESULTS_EMPTY, OVERLAY_RESULTS_SORTING, NUM_OVERLAYS, } FsearchOverlay; static void perform_search(FsearchApplicationWindow *win); static void show_overlay(FsearchApplicationWindow *win, FsearchOverlay overlay); static void on_filter_combobox_changed(GtkComboBox *widget, gpointer user_data); static FsearchFilter * get_active_filter(FsearchApplicationWindow *win) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); const uint32_t active_filter = gtk_combo_box_get_active(GTK_COMBO_BOX(win->filter_combobox)); return fsearch_filter_manager_get_filter(config->filters, active_filter); } static FsearchQueryFlags get_query_flags() { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); FsearchQueryFlags flags = 0; if (config->match_case) { flags |= QUERY_FLAG_MATCH_CASE; } if (config->auto_match_case) { flags |= QUERY_FLAG_AUTO_MATCH_CASE; } if (config->enable_regex) { flags |= QUERY_FLAG_REGEX; } if (config->search_in_path) { flags |= QUERY_FLAG_SEARCH_IN_PATH; } if (config->auto_search_in_path) { flags |= QUERY_FLAG_AUTO_SEARCH_IN_PATH; } return flags; } static const char * get_query_text(FsearchApplicationWindow *win) { return gtk_entry_get_text(GTK_ENTRY(win->search_entry)); } static FsearchApplicationWindow * get_window_for_id(uint32_t win_id) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; return FSEARCH_APPLICATION_WINDOW(gtk_application_get_window_by_id(GTK_APPLICATION(app), win_id)); } static gboolean is_empty_search(FsearchApplicationWindow *win) { const gchar *text = gtk_entry_get_text(GTK_ENTRY(win->search_entry)); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); if (text && text[0] == '\0' && config->hide_results_on_empty_search) { return TRUE; } return FALSE; } static void fsearch_window_listview_set_empty(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); self->result_view->sort_order = fsearch_list_view_get_sort_order(self->result_view->list_view); self->result_view->sort_type = fsearch_list_view_get_sort_type(self->result_view->list_view); fsearch_list_view_set_config(self->result_view->list_view, 0, self->result_view->sort_order, self->result_view->sort_type); } static void database_load_started(FsearchApplicationWindow *win) { show_overlay(win, OVERLAY_DATABASE_LOADING); } static void database_scan_started(FsearchApplicationWindow *win) { show_overlay(win, OVERLAY_DATABASE_UPDATING); GtkWidget *cancel_update_button = gtk_stack_get_child_by_name(GTK_STACK(win->popover_update_button_stack), "cancel_database_update"); if (cancel_update_button) { gtk_stack_set_visible_child(GTK_STACK(win->popover_update_button_stack), cancel_update_button); } } static void fsearch_window_apply_menubar_config(FsearchApplicationWindow *win) { FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); gtk_widget_set_visible(win->menu_box, config->show_menubar); gtk_widget_set_visible(win->app_menu, !config->show_menubar); if (config->show_menubar) { gtk_window_set_titlebar(GTK_WINDOW(win), NULL); gtk_window_set_title(GTK_WINDOW(win), g_get_application_name()); g_object_ref(G_OBJECT(win->search_box)); gtk_container_remove(GTK_CONTAINER(win->headerbar_box), win->search_box); gtk_box_pack_start(GTK_BOX(win->menu_box), win->search_box, TRUE, TRUE, 0); gtk_box_reorder_child(GTK_BOX(win->menu_box), win->search_box, 0); g_object_unref(G_OBJECT(win->search_box)); } else { GtkStyleContext *list_style = gtk_widget_get_style_context(win->listview_scrolled_window); gtk_style_context_add_class(list_style, "results_frame_csd_mode"); } // ensure search entry still has focus after reordering the search_box gtk_widget_grab_focus(win->search_entry); } static void fsearch_window_set_overlay_for_database_state(FsearchApplicationWindow *win) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchDatabaseState state = fsearch_application_get_db_state(app); const uint32_t num_items = fsearch_application_get_num_db_entries(app); if (num_items > 0) { show_overlay(win, OVERLAY_RESULTS); return; } show_overlay(win, OVERLAY_DATABASE); if (state == FSEARCH_DATABASE_STATE_LOADING) { show_overlay(win, OVERLAY_DATABASE_LOADING); } else if (state == FSEARCH_DATABASE_STATE_SCANNING) { show_overlay(win, OVERLAY_DATABASE_UPDATING); } else { show_overlay(win, OVERLAY_DATABASE_EMPTY); } } static void apply_filter_config(FsearchApplicationWindow *win) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); g_signal_handlers_block_by_func(win->filter_combobox, on_filter_combobox_changed, win); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(win->filter_combobox)); uint32_t active_filter = 0; for (uint32_t i = 0; i < fsearch_filter_manager_get_num_filters(config->filters); ++i) { FsearchFilter *filter = fsearch_filter_manager_get_filter(config->filters, i); if (filter && filter->name) { if (win->active_filter_name && !strcmp(win->active_filter_name, filter->name)) { // in order to restore the previously active filter we remember the index of the filter which matches // the active filter name active_filter = i; } gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(win->filter_combobox), NULL, filter->name); g_clear_pointer(&filter, fsearch_filter_unref); } } g_signal_handlers_unblock_by_func(win->filter_combobox, on_filter_combobox_changed, win); gtk_combo_box_set_active(GTK_COMBO_BOX(win->filter_combobox), (int32_t)active_filter); if (win->result_view && win->result_view->database_view) { db_view_set_filters(win->result_view->database_view, config->filters); } } static void fsearch_window_apply_config(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); if (config->restore_window_size) { gtk_window_set_default_size(GTK_WINDOW(self), config->window_width, config->window_height); } fsearch_application_window_apply_search_revealer_config(self); fsearch_application_window_apply_statusbar_revealer_config(self); apply_filter_config(self); fsearch_window_set_overlay_for_database_state(self); } G_DEFINE_TYPE(FsearchApplicationWindow, fsearch_application_window, GTK_TYPE_APPLICATION_WINDOW) static void fsearch_application_window_constructed(GObject *object) { FsearchApplicationWindow *self = (FsearchApplicationWindow *)object; g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); G_OBJECT_CLASS(fsearch_application_window_parent_class)->constructed(object); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; fsearch_window_apply_config(self); fsearch_window_apply_menubar_config(self); switch (fsearch_application_get_db_state(app)) { case FSEARCH_DATABASE_STATE_LOADING: database_load_started(self); break; case FSEARCH_DATABASE_STATE_SCANNING: database_scan_started(self); break; default: break; } } static void fsearch_application_window_finalize(GObject *object) { FsearchApplicationWindow *self = (FsearchApplicationWindow *)object; g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); g_clear_pointer(&self->active_filter_name, free); g_clear_pointer(&self->result_view->database_view, db_view_unref); g_clear_pointer(&self->result_view, fsearch_result_view_free); G_OBJECT_CLASS(fsearch_application_window_parent_class)->finalize(object); } static void show_overlay(FsearchApplicationWindow *win, FsearchOverlay overlay) { switch (overlay) { case OVERLAY_RESULTS: gtk_stack_set_visible_child(GTK_STACK(win->main_stack), win->main_result_overlay); break; case OVERLAY_RESULTS_EMPTY: gtk_stack_set_visible_child(GTK_STACK(win->main_search_overlay_stack), win->overlay_results_empty); break; case OVERLAY_RESULTS_SORTING: gtk_stack_set_visible_child(GTK_STACK(win->main_stack), win->overlay_results_sorting); break; case OVERLAY_DATABASE: gtk_stack_set_visible_child(GTK_STACK(win->main_stack), win->main_database_overlay_stack); break; case OVERLAY_DATABASE_EMPTY: gtk_stack_set_visible_child(GTK_STACK(win->main_database_overlay_stack), win->overlay_database_empty); break; case OVERLAY_QUERY_EMPTY: gtk_stack_set_visible_child(GTK_STACK(win->main_search_overlay_stack), win->overlay_query_empty); break; case OVERLAY_DATABASE_LOADING: gtk_stack_set_visible_child(GTK_STACK(win->main_database_overlay_stack), win->overlay_database_loading); break; case OVERLAY_DATABASE_UPDATING: gtk_stack_set_visible_child(GTK_STACK(win->main_database_overlay_stack), win->overlay_database_updating); break; default: gtk_stack_set_visible_child(GTK_STACK(win->main_stack), win->main_result_overlay); g_debug("[win] overlay %d unknown", overlay); } } static void fsearch_window_db_view_apply_changes(FsearchApplicationWindow *win) { db_view_lock(win->result_view->database_view); const uint32_t num_rows = is_empty_search(win) ? 0 : db_view_get_num_entries(win->result_view->database_view); win->result_view->sort_order = db_view_get_sort_order(win->result_view->database_view); win->result_view->sort_type = db_view_get_sort_type(win->result_view->database_view); FsearchQuery *query = db_view_get_query(win->result_view->database_view); if (query) { fsearch_statusbar_set_revealer_visibility(FSEARCH_STATUSBAR(win->statusbar), FSEARCH_STATUSBAR_REVEALER_SMART_MATCH_CASE, query->triggers_auto_match_case); fsearch_statusbar_set_revealer_visibility(FSEARCH_STATUSBAR(win->statusbar), FSEARCH_STATUSBAR_REVEALER_SMART_SEARCH_IN_PATH, query->triggers_auto_match_path); g_clear_pointer(&query, fsearch_query_unref); } db_view_unlock(win->result_view->database_view); fsearch_statusbar_set_num_search_results(FSEARCH_STATUSBAR(win->statusbar), num_rows); fsearch_result_view_row_cache_reset(win->result_view); fsearch_list_view_set_config(win->result_view->list_view, num_rows, win->result_view->sort_order, win->result_view->sort_type); } static gboolean fsearch_window_db_view_sort_finished_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); if (win) { fsearch_window_db_view_apply_changes(win); } return G_SOURCE_REMOVE; } static gboolean fsearch_window_db_view_sort_started_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); if (win) { fsearch_statusbar_set_sort_status_delayed(FSEARCH_STATUSBAR(win->statusbar)); } return G_SOURCE_REMOVE; } static gboolean fsearch_window_db_view_search_finished_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); if (win) { fsearch_window_db_view_apply_changes(win); } return G_SOURCE_REMOVE; } static gboolean fsearch_window_db_view_search_started_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); if (win) { fsearch_statusbar_set_query_status_delayed(FSEARCH_STATUSBAR(win->statusbar)); } return G_SOURCE_REMOVE; } static void perform_search(FsearchApplicationWindow *win) { if (!win || !win->result_view->database_view) { return; } const gchar *text = get_query_text(win); db_view_set_query_text(win->result_view->database_view, text); } typedef struct { uint32_t num_folders; uint32_t num_files; } count_results_ctx; static void count_results_cb(gpointer key, gpointer value, count_results_ctx *ctx) { if (!value) { return; } FsearchDatabaseEntry *entry = value; FsearchDatabaseEntryType type = db_entry_get_type(entry); if (type == DATABASE_ENTRY_TYPE_FOLDER) { ctx->num_folders++; } else if (type == DATABASE_ENTRY_TYPE_FILE) { ctx->num_files++; } } static gboolean on_fsearch_list_view_popup(FsearchListView *view, gpointer user_data) { FsearchApplicationWindow *win = user_data; if (!win->result_view->database_view) { return FALSE; } return listview_popup_menu(user_data, win->result_view->database_view); } static gboolean on_listview_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { FsearchApplicationWindow *win = user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); GActionGroup *group = G_ACTION_GROUP(win); GdkModifierType default_modifiers = gtk_accelerator_get_default_mod_mask(); guint keyval; GdkModifierType state; gdk_event_get_state(event, &state); gdk_event_get_keyval(event, &keyval); if ((state & default_modifiers) == (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) { switch (keyval) { case GDK_KEY_C: g_action_group_activate_action(group, "copy_filepath_clipboard", NULL); return GDK_EVENT_STOP; default: return GDK_EVENT_PROPAGATE; } } else if ((state & default_modifiers) == GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_Return: case GDK_KEY_KP_Enter: g_action_group_activate_action(group, "open_folder", NULL); return GDK_EVENT_STOP; case GDK_KEY_c: g_action_group_activate_action(group, "copy_clipboard", NULL); return GDK_EVENT_STOP; case GDK_KEY_x: g_action_group_activate_action(group, "cut_clipboard", NULL); return GDK_EVENT_STOP; default: return GDK_EVENT_PROPAGATE; } } else if ((state & default_modifiers) == GDK_SHIFT_MASK) { switch (keyval) { case GDK_KEY_Delete: g_action_group_activate_action(group, "delete_selection", NULL); return GDK_EVENT_STOP; default: return GDK_EVENT_PROPAGATE; } } else { switch (keyval) { case GDK_KEY_Delete: g_action_group_activate_action(group, "move_to_trash", NULL); return GDK_EVENT_STOP; case GDK_KEY_Return: case GDK_KEY_KP_Enter: g_action_group_activate_action(group, "open", NULL); return GDK_EVENT_STOP; default: return GDK_EVENT_PROPAGATE; } } return GDK_EVENT_PROPAGATE; } static void on_fsearch_list_view_row_activated(FsearchListView *view, FsearchDatabaseIndexType col, int row_idx, gpointer user_data) { FsearchApplicationWindow *self = user_data; if (!self->result_view->database_view) { return; } FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); int launch_folder = false; if (config->double_click_path && col == DATABASE_INDEX_TYPE_PATH) { launch_folder = true; } fsearch_window_action_open_generic(self, launch_folder ? true : false, true); return; } static void on_search_entry_changed(GtkEntry *entry, gpointer user_data) { FsearchApplicationWindow *win = user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); if (config->search_as_you_type) { perform_search(win); } } static char * fsearch_list_view_query_tooltip(PangoLayout *layout, uint32_t row_height, uint32_t row_idx, FsearchListViewColumn *col, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (!win->result_view->database_view) { return NULL; } return fsearch_result_view_query_tooltip(win->result_view->database_view, row_idx, col, layout, row_height); } static void fsearch_list_view_draw_row(cairo_t *cr, GdkWindow *bin_window, PangoLayout *layout, GtkStyleContext *context, GList *columns, cairo_rectangle_int_t *rect, uint32_t row, gboolean row_selected, gboolean row_focused, gboolean row_hovered, gboolean right_to_left_text, gpointer user_data) { if (!columns) { return; } FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (!win->result_view->database_view) { return; } fsearch_result_view_draw_row(win->result_view, cr, bin_window, layout, context, columns, rect, row, row_selected, row_focused, row_hovered, right_to_left_text); } static void fsearch_results_sort_func(int sort_order, GtkSortType sort_type, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (!win->result_view->database_view) { return; } // win->result_view->sort_type = fsearch_list_view_get_sort_type(win->result_view->list_view); // win->result_view->sort_order = sort_order; db_view_set_sort_order(win->result_view->database_view, sort_order, sort_type); } static void add_columns(FsearchListView *view, FsearchConfig *config) { const bool restore = config->restore_column_config; FsearchListViewColumn *name_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_NAME, _("Name"), PANGO_ALIGN_LEFT, PANGO_ELLIPSIZE_END, TRUE, TRUE, restore ? config->name_column_width : 250); FsearchListViewColumn *path_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_PATH, _("Path"), PANGO_ALIGN_LEFT, PANGO_ELLIPSIZE_END, restore ? config->show_path_column : TRUE, FALSE, restore ? config->path_column_width : 250); FsearchListViewColumn *size_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_SIZE, _("Size"), PANGO_ALIGN_RIGHT, PANGO_ELLIPSIZE_END, restore ? config->show_size_column : TRUE, FALSE, restore ? config->size_column_width : 75); FsearchListViewColumn *type_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_FILETYPE, _("Type"), PANGO_ALIGN_LEFT, PANGO_ELLIPSIZE_END, restore ? config->show_type_column : FALSE, FALSE, restore ? config->type_column_width : 100); FsearchListViewColumn *ext_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_EXTENSION, _("Extension"), PANGO_ALIGN_LEFT, PANGO_ELLIPSIZE_END, restore ? config->show_extension_column : TRUE, FALSE, restore ? config->extension_column_width : 100); FsearchListViewColumn *changed_col = fsearch_list_view_column_new(DATABASE_INDEX_TYPE_MODIFICATION_TIME, _("Date Modified"), PANGO_ALIGN_RIGHT, PANGO_ELLIPSIZE_END, restore ? config->show_modified_column : TRUE, FALSE, restore ? config->modified_column_width : 125); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), name_col); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), path_col); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), ext_col); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), type_col); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), size_col); fsearch_list_view_append_column(FSEARCH_LIST_VIEW(view), changed_col); fsearch_list_view_column_set_tooltip(type_col, _("Sorting by Type can take a few seconds with many results.\n\n" "This sort order is not persistent, it will be reset when the search term " "changes.")); fsearch_list_view_column_set_emblem(type_col, "emblem-important-symbolic", TRUE); } static guint on_listview_row_num_selected(gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); return win->result_view->database_view ? db_view_get_num_selected(win->result_view->database_view) : 0; } static void on_listview_row_unselect_all(gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { db_view_unselect_all(win->result_view->database_view); } } static void on_listview_row_toggle_range(int start_row, int end_row, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { db_view_toggle_range(win->result_view->database_view, start_row, end_row); } } static void on_listview_row_select_range(int start_row, int end_row, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { db_view_select_range(win->result_view->database_view, start_row, end_row); } } static void on_listview_row_select_toggle(int row, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { db_view_select_toggle(win->result_view->database_view, row); } } static void on_listview_row_select(int row, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { db_view_select(win->result_view->database_view, row); } } static gboolean on_listview_row_is_selected(int row, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(user_data); if (win->result_view->database_view) { return db_view_is_selected(win->result_view->database_view, row); } return FALSE; } static void fsearch_application_window_init_overlays(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); g_autoptr(GtkBuilder) builder = gtk_builder_new_from_resource("/io/github/cboxdoerfer/fsearch/ui/" "fsearch_overlay.ui"); win->main_database_overlay_stack = GTK_WIDGET(gtk_builder_get_object(builder, "main_database_overlay_stack")); win->main_search_overlay_stack = GTK_WIDGET(gtk_builder_get_object(builder, "main_search_overlay_stack")); // Overlay when no search results are found win->overlay_results_empty = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_results_empty")); // Overlay when database is empty win->overlay_database_empty = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_database_empty")); // Overlay when search query is empty win->overlay_query_empty = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_query_empty")); // Overlay when database is updating win->overlay_database_updating = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_database_updating")); // Overlay when database is loading win->overlay_database_loading = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_database_loading")); // Overlay when results are being sorted win->overlay_results_sorting = GTK_WIDGET(gtk_builder_get_object(builder, "overlay_results_sorting")); gtk_stack_add_named(GTK_STACK(win->main_stack), win->overlay_results_sorting, "overlay_results_sorting"); gtk_stack_add_named(GTK_STACK(win->main_stack), win->main_database_overlay_stack, "overlay_database_stack"); gtk_overlay_add_overlay(GTK_OVERLAY(win->main_result_overlay), win->main_search_overlay_stack); gtk_stack_set_visible_child(GTK_STACK(win->main_stack), win->main_database_overlay_stack); gtk_widget_show_all(win->main_stack); } static void fsearch_application_window_init_listview(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); GtkAdjustment *hadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(win->listview_scrolled_window)); GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(win->listview_scrolled_window)); FsearchListView *list_view = fsearch_list_view_new(hadj, vadj); gtk_container_add(GTK_CONTAINER(win->listview_scrolled_window), GTK_WIDGET(list_view)); gtk_widget_show((GTK_WIDGET(list_view))); fsearch_list_view_set_query_tooltip_func(list_view, fsearch_list_view_query_tooltip, win); fsearch_list_view_set_draw_row_func(list_view, fsearch_list_view_draw_row, win); fsearch_list_view_set_sort_func(list_view, fsearch_results_sort_func, win); fsearch_list_view_set_selection_handlers(list_view, on_listview_row_is_selected, on_listview_row_select, on_listview_row_select_toggle, on_listview_row_select_range, on_listview_row_toggle_range, on_listview_row_unselect_all, on_listview_row_num_selected, win); fsearch_list_view_set_single_click_activate(list_view, config->single_click_open); gtk_widget_set_has_tooltip(GTK_WIDGET(list_view), config->enable_list_tooltips); add_columns(list_view, config); g_signal_connect_object(list_view, "row-popup", G_CALLBACK(on_fsearch_list_view_popup), win, G_CONNECT_AFTER); g_signal_connect_object(list_view, "row-activated", G_CALLBACK(on_fsearch_list_view_row_activated), win, G_CONNECT_AFTER); g_signal_connect(list_view, "key-press-event", G_CALLBACK(on_listview_key_press_event), win); win->result_view->list_view = list_view; } static void on_database_update_finished(gpointer data, gpointer user_data) { FsearchApplicationWindow *win = (FsearchApplicationWindow *)user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); fsearch_statusbar_set_num_search_results(FSEARCH_STATUSBAR(win->statusbar), 0); GtkWidget *update_database_button = gtk_stack_get_child_by_name(GTK_STACK(win->popover_update_button_stack), "update_database"); if (update_database_button) { gtk_stack_set_visible_child(GTK_STACK(win->popover_update_button_stack), update_database_button); } fsearch_window_set_overlay_for_database_state(win); FsearchDatabase *db = fsearch_application_get_db(FSEARCH_APPLICATION_DEFAULT); db_view_register_database(win->result_view->database_view, db); g_clear_pointer(&db, db_unref); } static void on_database_load_started(gpointer data, gpointer user_data) { FsearchApplicationWindow *win = (FsearchApplicationWindow *)user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); database_load_started(win); } static void on_database_scan_started(gpointer data, gpointer user_data) { FsearchApplicationWindow *win = (FsearchApplicationWindow *)user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); database_scan_started(win); } static void fsearch_application_window_init(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); gtk_widget_init_template(GTK_WIDGET(self)); self->result_view = fsearch_result_view_new(); self->statusbar = GTK_WIDGET(fsearch_statusbar_new()); gtk_box_pack_end(GTK_BOX(self->main_box), self->statusbar, FALSE, TRUE, 0); fsearch_window_actions_init(self); fsearch_application_window_init_listview(self); fsearch_application_window_init_overlays(self); FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; g_signal_connect_object(app, "database-scan-started", G_CALLBACK(on_database_scan_started), self, G_CONNECT_AFTER); g_signal_connect_object(app, "database-update-finished", G_CALLBACK(on_database_update_finished), self, G_CONNECT_AFTER); g_signal_connect_object(app, "database-load-started", G_CALLBACK(on_database_load_started), self, G_CONNECT_AFTER); } static void on_filter_combobox_changed(GtkComboBox *widget, gpointer user_data) { FsearchApplicationWindow *win = user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); int active = gtk_combo_box_get_active(GTK_COMBO_BOX(win->filter_combobox)); char *active_filter_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(win->filter_combobox)); if (active_filter_name) { g_clear_pointer(&win->active_filter_name, free); win->active_filter_name = active_filter_name; } fsearch_statusbar_set_filter(FSEARCH_STATUSBAR(win->statusbar), active ? active_filter_name : NULL); FsearchFilter *filter = get_active_filter(win); db_view_set_filter(win->result_view->database_view, filter); g_clear_pointer(&filter, fsearch_filter_unref); } static gboolean on_search_entry_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { FsearchApplicationWindow *win = user_data; guint keyval; gdk_event_get_keyval(event, &keyval); if (keyval == GDK_KEY_Down) { const gint cursor_idx = fsearch_list_view_get_cursor(win->result_view->list_view); gtk_widget_grab_focus(GTK_WIDGET(win->result_view->list_view)); fsearch_list_view_set_cursor(win->result_view->list_view, cursor_idx); return TRUE; } return FALSE; } static void on_search_entry_activate(GtkButton *widget, gpointer user_data) { FsearchApplicationWindow *win = user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); perform_search(win); } static gboolean on_fsearch_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { FsearchApplicationWindow *win = FSEARCH_APPLICATION_WINDOW(widget); fsearch_application_window_prepare_shutdown(win); g_clear_pointer(&widget, gtk_widget_destroy); return TRUE; } static void fsearch_application_window_redraw_listview(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); gtk_widget_queue_draw(GTK_WIDGET(self->result_view->list_view)); } static gboolean fsearch_window_db_view_selection_changed_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); fsearch_application_window_redraw_listview(win); fsearch_window_actions_update(win); uint32_t num_folders = 0; uint32_t num_files = 0; if (win->result_view->database_view) { db_view_lock(win->result_view->database_view); num_folders = db_view_get_num_folders(win->result_view->database_view); num_files = db_view_get_num_files(win->result_view->database_view); db_view_unlock(win->result_view->database_view); } count_results_ctx ctx = {0, 0}; fsearch_application_window_selection_for_each(win, (GHFunc)count_results_cb, &ctx); fsearch_statusbar_set_selection(FSEARCH_STATUSBAR(win->statusbar), ctx.num_files, ctx.num_folders, num_files, num_folders); return G_SOURCE_REMOVE; } static gboolean fsearch_window_db_view_content_changed_cb(gpointer data) { const guint win_id = GPOINTER_TO_UINT(data); FsearchApplicationWindow *win = get_window_for_id(win_id); if (!win) { return G_SOURCE_REMOVE; } fsearch_window_db_view_apply_changes(win); fsearch_window_actions_update(win); db_view_lock(win->result_view->database_view); const uint32_t num_rows = is_empty_search(win) ? 0 : db_view_get_num_entries(win->result_view->database_view); db_view_unlock(win->result_view->database_view); if (is_empty_search(win)) { show_overlay(win, OVERLAY_QUERY_EMPTY); gtk_widget_show(win->main_search_overlay_stack); } else if (num_rows == 0) { show_overlay(win, OVERLAY_RESULTS_EMPTY); gtk_widget_show(win->main_search_overlay_stack); } else { gtk_widget_hide(win->main_search_overlay_stack); } return G_SOURCE_REMOVE; } static void fsearch_window_db_view_notify(FsearchDatabaseView *view, FsearchDatabaseViewNotify id, gpointer user_data) { if (!user_data) { return; } switch (id) { case DATABASE_VIEW_NOTIFY_CONTENT_CHANGED: g_idle_add(fsearch_window_db_view_content_changed_cb, user_data); break; case DATABASE_VIEW_NOTIFY_SELECTION_CHANGED: g_idle_add(fsearch_window_db_view_selection_changed_cb, user_data); break; case DATABASE_VIEW_NOTIFY_SEARCH_STARTED: g_idle_add(fsearch_window_db_view_search_started_cb, user_data); break; case DATABASE_VIEW_NOTIFY_SEARCH_FINISHED: g_idle_add(fsearch_window_db_view_search_finished_cb, user_data); break; case DATABASE_VIEW_NOTIFY_SORT_STARTED: g_idle_add(fsearch_window_db_view_sort_started_cb, user_data); break; case DATABASE_VIEW_NOTIFY_SORT_FINISHED: g_idle_add(fsearch_window_db_view_sort_finished_cb, user_data); break; default: g_debug("[view_notify] unknown id: %d", id); break; } } static void fsearch_application_window_class_init(FsearchApplicationWindowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); object_class->constructed = fsearch_application_window_constructed; object_class->finalize = fsearch_application_window_finalize; gtk_widget_class_set_template_from_resource(widget_class, "/io/github/cboxdoerfer/fsearch/ui/fsearch_window.ui"); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, app_menu); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, filter_combobox); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, filter_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, headerbar_box); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, listview_scrolled_window); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, main_box); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, main_stack); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, main_result_overlay); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, menu_box); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, popover_update_button_stack); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, search_box); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, search_button_revealer); gtk_widget_class_bind_template_child(widget_class, FsearchApplicationWindow, search_entry); gtk_widget_class_bind_template_callback(widget_class, on_filter_combobox_changed); gtk_widget_class_bind_template_callback(widget_class, on_fsearch_window_delete_event); gtk_widget_class_bind_template_callback(widget_class, on_search_entry_activate); gtk_widget_class_bind_template_callback(widget_class, on_search_entry_changed); gtk_widget_class_bind_template_callback(widget_class, on_search_entry_key_press_event); } void fsearch_application_window_apply_statusbar_revealer_config(FsearchApplicationWindow *win) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); GtkStyleContext *filter_style = gtk_widget_get_style_context(win->listview_scrolled_window); if (!config->show_statusbar) { gtk_style_context_add_class(filter_style, "results_frame_last"); } else { gtk_style_context_remove_class(filter_style, "results_frame_last"); } gtk_revealer_set_reveal_child(GTK_REVEALER(win->statusbar), config->show_statusbar); fsearch_statusbar_set_revealer_visibility(FSEARCH_STATUSBAR(win->statusbar), FSEARCH_STATUSBAR_REVEALER_MATCH_CASE, config->match_case); fsearch_statusbar_set_revealer_visibility(FSEARCH_STATUSBAR(win->statusbar), FSEARCH_STATUSBAR_REVEALER_REGEX, config->enable_regex); fsearch_statusbar_set_revealer_visibility(FSEARCH_STATUSBAR(win->statusbar), FSEARCH_STATUSBAR_REVEALER_SEARCH_IN_PATH, config->search_in_path); } void fsearch_application_window_apply_search_revealer_config(FsearchApplicationWindow *win) { FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); GtkStyleContext *filter_style = gtk_widget_get_style_context(win->filter_combobox); if (config->show_search_button && config->show_filter) { gtk_style_context_add_class(filter_style, "filter_centered"); } else { gtk_style_context_remove_class(filter_style, "filter_centered"); } GtkStyleContext *entry_style = gtk_widget_get_style_context(win->search_entry); if (config->show_search_button || config->show_filter) { gtk_style_context_add_class(entry_style, "search_entry_has_neighbours"); } else { gtk_style_context_remove_class(entry_style, "search_entry_has_neighbours"); } gtk_revealer_set_reveal_child(GTK_REVEALER(win->filter_revealer), config->show_filter); gtk_revealer_set_reveal_child(GTK_REVEALER(win->search_button_revealer), config->show_search_button); } void fsearch_application_window_update_query_flags(FsearchApplicationWindow *win) { apply_filter_config(win); db_view_set_query_flags(win->result_view->database_view, get_query_flags()); } static FsearchDatabaseIndexType get_sort_type_for_name(const char *name) { if (!name) { g_warning("[get_sort_type_for_name] name is nullptr"); return DATABASE_INDEX_TYPE_NAME; } if (!strcmp(name, DATABASE_INDEX_TYPE_NAME_STRING)) { return DATABASE_INDEX_TYPE_NAME; } else if (!strcmp(name, DATABASE_INDEX_TYPE_PATH_STRING)) { return DATABASE_INDEX_TYPE_PATH; } else if (!strcmp(name, DATABASE_INDEX_TYPE_SIZE_STRING)) { return DATABASE_INDEX_TYPE_SIZE; } else if (!strcmp(name, DATABASE_INDEX_TYPE_MODIFICATION_TIME_STRING)) { return DATABASE_INDEX_TYPE_MODIFICATION_TIME; } else if (!strcmp(name, DATABASE_INDEX_TYPE_EXTENSION_STRING)) { return DATABASE_INDEX_TYPE_EXTENSION; } else if (!strcmp(name, DATABASE_INDEX_TYPE_FILETYPE_STRING)) { return DATABASE_INDEX_TYPE_FILETYPE; } else { return DATABASE_INDEX_TYPE_NAME; } } static char * get_sort_name_for_type(FsearchDatabaseIndexType type) { const char *name = NULL; switch (type) { case DATABASE_INDEX_TYPE_NAME: name = DATABASE_INDEX_TYPE_NAME_STRING; break; case DATABASE_INDEX_TYPE_PATH: name = DATABASE_INDEX_TYPE_PATH_STRING; break; case DATABASE_INDEX_TYPE_MODIFICATION_TIME: name = DATABASE_INDEX_TYPE_MODIFICATION_TIME_STRING; break; case DATABASE_INDEX_TYPE_EXTENSION: name = DATABASE_INDEX_TYPE_EXTENSION_STRING; break; case DATABASE_INDEX_TYPE_FILETYPE: name = DATABASE_INDEX_TYPE_FILETYPE_STRING; break; case DATABASE_INDEX_TYPE_SIZE: name = DATABASE_INDEX_TYPE_SIZE_STRING; break; default: name = DATABASE_INDEX_TYPE_NAME_STRING; } return g_strdup(name); } void fsearch_application_window_prepare_shutdown(gpointer self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); FsearchApplicationWindow *win = self; FsearchApplication *app = FSEARCH_APPLICATION_DEFAULT; FsearchConfig *config = fsearch_application_get_config(app); gint width = 850; gint height = 800; gtk_window_get_size(GTK_WINDOW(self), &width, &height); config->window_width = width; config->window_height = height; if (win->result_view) { if (win->result_view->database_view) { FsearchDatabaseView *db_view = win->result_view->database_view; db_view_lock(db_view); config->sort_ascending = db_view_get_sort_type(db_view) == GTK_SORT_ASCENDING ? true : false; if (config->sort_by) { g_clear_pointer(&config->sort_by, g_free); } config->sort_by = get_sort_name_for_type(db_view_get_sort_order(db_view)); db_view_unlock(db_view); } if (win->result_view->list_view) { FsearchListView *list_view = win->result_view->list_view; config->sort_ascending = fsearch_list_view_get_sort_type(list_view) == GTK_SORT_ASCENDING ? true : false; if (config->sort_by) { g_clear_pointer(&config->sort_by, g_free); } config->sort_by = get_sort_name_for_type(fsearch_list_view_get_sort_order(list_view)); // update the config with the widths of all columns whose width we can store const struct { int type; uint32_t *width; } columns[] = { {DATABASE_INDEX_TYPE_NAME, &config->name_column_width}, {DATABASE_INDEX_TYPE_PATH, &config->path_column_width}, {DATABASE_INDEX_TYPE_FILETYPE, &config->type_column_width}, {DATABASE_INDEX_TYPE_EXTENSION, &config->extension_column_width}, {DATABASE_INDEX_TYPE_SIZE, &config->size_column_width}, {DATABASE_INDEX_TYPE_MODIFICATION_TIME, &config->modified_column_width}, }; for (int i = 0; i < G_N_ELEMENTS(columns); i++) { const FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list_view, columns[i].type); if (col) { *columns[i].width = col->width; } } } } } void fsearch_application_window_remove_model(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); fsearch_window_listview_set_empty(win); } void fsearch_application_window_added(FsearchApplicationWindow *win, FsearchApplication *app) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); guint win_id = gtk_application_window_get_id(GTK_APPLICATION_WINDOW(win)); if (win_id <= 0) { g_warning("[window_added] window isn't part of FsearchApplication"); return; } FsearchConfig *config = fsearch_application_get_config(app); FsearchDatabaseIndexType sort_order = config->restore_sort_order ? get_sort_type_for_name(config->sort_by) : DATABASE_INDEX_TYPE_NAME; if (sort_order == DATABASE_INDEX_TYPE_FILETYPE) { // file type order is not indexed, so it would make startup really slow // -> fall back to sort by name instead sort_order = DATABASE_INDEX_TYPE_NAME; } GtkSortType sort_type = config->restore_sort_order ? (config->sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING) : GTK_SORT_ASCENDING; FsearchFilter *filter = get_active_filter(win); win->result_view->database_view = db_view_new(get_query_text(win), get_query_flags(), filter, config->filters, sort_order, sort_type, fsearch_window_db_view_notify, GUINT_TO_POINTER(win_id)); g_clear_pointer(&filter, fsearch_filter_unref); FsearchDatabase *db = fsearch_application_get_db(FSEARCH_APPLICATION_DEFAULT); if (db) { db_view_register_database(win->result_view->database_view, db); g_clear_pointer(&db, db_unref); } } void fsearch_application_window_cancel_current_task(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); if (win->result_view && win->result_view->database_view) { db_view_cancel_current_task(win->result_view->database_view); } } void fsearch_application_window_removed(FsearchApplicationWindow *win, FsearchApplication *app) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); } void fsearch_application_window_invert_selection(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); if (self->result_view->database_view) { db_view_invert_selection(self->result_view->database_view); } } void fsearch_application_window_unselect_all(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); if (self->result_view->database_view) { db_view_unselect_all(self->result_view->database_view); } } void fsearch_application_window_select_all(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); if (self->result_view->database_view) { db_view_select_all(self->result_view->database_view); } } uint32_t fsearch_application_window_get_num_selected(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); if (self->result_view->database_view) { return db_view_get_num_selected(self->result_view->database_view); } return 0; } void fsearch_application_window_selection_for_each(FsearchApplicationWindow *self, GHFunc func, gpointer user_data) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); if (self->result_view->database_view) { db_view_selection_for_each(self->result_view->database_view, func, user_data); } } void fsearch_application_window_focus_search_entry(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); // Make sure the entry also has focus and the text is selected gtk_widget_grab_focus(win->search_entry); } GtkEntry * fsearch_application_window_get_search_entry(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); return GTK_ENTRY(self->search_entry); } FsearchStatusbar * fsearch_application_window_get_statusbar(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); return FSEARCH_STATUSBAR(self->statusbar); } void fsearch_application_window_set_database_index_progress(FsearchApplicationWindow *self, const char *text) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); fsearch_statusbar_set_database_index_text(FSEARCH_STATUSBAR(self->statusbar), text); } uint32_t fsearch_application_window_get_num_results(FsearchApplicationWindow *self) { uint32_t num_results = 0; if (self->result_view->database_view) { db_view_lock(self->result_view->database_view); num_results = db_view_get_num_entries(self->result_view->database_view); db_view_unlock(self->result_view->database_view); } return num_results; } gint fsearch_application_window_get_active_filter(FsearchApplicationWindow *self) { return gtk_combo_box_get_active(GTK_COMBO_BOX(self->filter_combobox)); } void fsearch_application_window_set_active_filter(FsearchApplicationWindow *self, guint active_filter) { gtk_combo_box_set_active(GTK_COMBO_BOX(self->filter_combobox), (gint)active_filter); } void fsearch_application_window_update_listview_config(FsearchApplicationWindow *win) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(win)); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); fsearch_list_view_set_single_click_activate(win->result_view->list_view, config->single_click_open); gtk_widget_set_has_tooltip(GTK_WIDGET(win->result_view->list_view), config->enable_list_tooltips); fsearch_application_window_redraw_listview(win); } FsearchListView * fsearch_application_window_get_listview(FsearchApplicationWindow *self) { g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); return self->result_view->list_view; } FsearchApplicationWindow * fsearch_application_window_new(FsearchApplication *app) { g_assert(FSEARCH_IS_APPLICATION(app)); return g_object_new(FSEARCH_APPLICATION_WINDOW_TYPE, "application", app, NULL); } fsearch-0.2.3/src/fsearch_window.h000066400000000000000000000062111446344336300171030ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include #include #include #include "fsearch.h" #include "fsearch_database.h" #include "fsearch_list_view.h" #include "fsearch_query.h" #include "fsearch_statusbar.h" G_BEGIN_DECLS #define FSEARCH_APPLICATION_WINDOW_TYPE (fsearch_application_window_get_type()) G_DECLARE_FINAL_TYPE(FsearchApplicationWindow, fsearch_application_window, FSEARCH, APPLICATION_WINDOW, GtkApplicationWindow) FsearchApplicationWindow * fsearch_application_window_new(FsearchApplication *app); void fsearch_application_window_prepare_shutdown(gpointer self); FsearchListView * fsearch_application_window_get_listview(FsearchApplicationWindow *self); void fsearch_application_window_update_listview_config(FsearchApplicationWindow *self); void fsearch_application_window_apply_statusbar_revealer_config(FsearchApplicationWindow *win); void fsearch_application_window_focus_search_entry(FsearchApplicationWindow *win); GtkEntry * fsearch_application_window_get_search_entry(FsearchApplicationWindow *self); FsearchStatusbar * fsearch_application_window_get_statusbar(FsearchApplicationWindow *self); void fsearch_application_window_update_query_flags(FsearchApplicationWindow *self); void fsearch_application_window_remove_model(FsearchApplicationWindow *self); void fsearch_application_window_set_database_index_progress(FsearchApplicationWindow *self, const char *text); uint32_t fsearch_application_window_get_num_results(FsearchApplicationWindow *self); gint fsearch_application_window_get_active_filter(FsearchApplicationWindow *self); void fsearch_application_window_set_active_filter(FsearchApplicationWindow *self, guint active_filter); void fsearch_application_window_apply_search_revealer_config(FsearchApplicationWindow *win); void fsearch_application_window_added(FsearchApplicationWindow *win, FsearchApplication *app); void fsearch_application_window_removed(FsearchApplicationWindow *win, FsearchApplication *app); void fsearch_application_window_cancel_current_task(FsearchApplicationWindow *win); void fsearch_application_window_invert_selection(FsearchApplicationWindow *self); void fsearch_application_window_unselect_all(FsearchApplicationWindow *self); void fsearch_application_window_select_all(FsearchApplicationWindow *self); uint32_t fsearch_application_window_get_num_selected(FsearchApplicationWindow *self); void fsearch_application_window_selection_for_each(FsearchApplicationWindow *self, GHFunc func, gpointer user_data); G_END_DECLS fsearch-0.2.3/src/fsearch_window.ui000066400000000000000000000724471446344336300173070ustar00rootroot00000000000000 True False view-refresh-symbolic True False process-stop-symbolic True False window-new-symbolic False True False 6 6 6 6 vertical True True True FSearch Online main True True False True 0 True True True Donate donate_menu False True 1 True True True app.forum Forum False True 2 True True True app.bug_report Bug Reports and Feature Requests False True 3 True True True app.help Help False True 4 online_menu 1 True False 6 6 6 6 vertical True True True Donate online_menu True True False True 0 True True True app.donate_github GitHub Sponsors False True 1 True True True app.donate_paypal PayPal False True 2 donate_menu 2 True False 6 6 6 6 vertical True False 3 3 3 3 6 True True True True New window app.new_window image_window_new False True 0 True False crossfade True True True Update database app.update_database image_update_database update_database page0 True True True Cancel database update app.cancel_update_database image_update_database1 cancel_database_update page1 1 False True 1 True True 0 True False False True 1 True True True win.search_in_path Search in Path False True 2 True True True win.match_case Match Case False True 3 True True True win.search_mode Enable RegEx False True 4 True False False True 5 True True True win.show_statusbar Show Statusbar False True 6 True True True win.show_filter Show Filter False True 7 True True True win.show_search_button Show Search Button False True 8 True False False True 9 True True True app.preferences uint32 0 Preferences False True 10 True False False True 11 True True True FSearch Online online_menu False True 13 True True True app.about About False True 14 True False False True 15 True True True app.quit Quit False True 16 main 3 fsearch-0.2.3/src/fsearch_window_actions.c000066400000000000000000001106201446344336300206160ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "fsearch_clipboard.h" #include "fsearch_config.h" #include "fsearch_database_entry.h" #include "fsearch_file_utils.h" #include "fsearch_list_view.h" #include "fsearch_statusbar.h" #include "fsearch_ui_utils.h" #include "fsearch_window_actions.h" static void action_set_active_int(GActionGroup *group, const gchar *action_name, int32_t value) { g_assert(G_IS_ACTION_GROUP(group)); g_assert(G_IS_ACTION_MAP(group)); GAction *action = g_action_map_lookup_action(G_ACTION_MAP(group), action_name); if (action) { g_simple_action_set_state(G_SIMPLE_ACTION(action), g_variant_new_int32(value)); } } static void action_set_active_bool(GActionGroup *group, const gchar *action_name, bool value) { g_assert(G_IS_ACTION_GROUP(group)); g_assert(G_IS_ACTION_MAP(group)); GAction *action = g_action_map_lookup_action(G_ACTION_MAP(group), action_name); if (action) { g_simple_action_set_state(G_SIMPLE_ACTION(action), g_variant_new_boolean(value)); } } static void action_set_enabled(GActionGroup *group, const gchar *action_name, bool value) { g_assert(G_IS_ACTION_GROUP(group)); g_assert(G_IS_ACTION_MAP(group)); GAction *action = g_action_map_lookup_action(G_ACTION_MAP(group), action_name); if (action) { g_simple_action_set_enabled(G_SIMPLE_ACTION(action), value); } } static bool confirm_action(GtkWidget *parent, const char *title, const char *question, int limit, int value) { if (value < limit) { return true; } const gint response = ui_utils_run_gtk_dialog(parent, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, title, question); if (response == GTK_RESPONSE_YES) { return true; } return false; } static bool confirm_file_open_action(GtkWidget *parent, int num_files) { char question[1024] = ""; snprintf(question, sizeof(question), _("Do you really want to open %d file(s)?"), num_files); return confirm_action(parent, _("Opening Files…"), question, 10, num_files); } static void prepend_path_uri_to_array(gpointer key, gpointer value, gpointer user_data) { g_return_if_fail(value); GPtrArray **file_array = (GPtrArray **)user_data; FsearchDatabaseEntry *entry = value; GString *path_full = db_entry_get_path_full(entry); g_return_if_fail(path_full); char *file_uri = g_filename_to_uri(g_string_free(g_steal_pointer(&path_full), FALSE), NULL, NULL); if (file_uri) { g_ptr_array_add(*file_array, file_uri); } } static void prepend_string_to_list(GList **string_list, FsearchDatabaseEntry *entry, GString *(*get_string_func)(FsearchDatabaseEntry *)) { if (!entry || !string_list || !get_string_func) { return; } GString *string = get_string_func(entry); if (!string) { return; } *string_list = g_list_prepend(*string_list, g_string_free(g_steal_pointer(&string), FALSE)); } static void append_line(GString *str, const char *text) { if (str->len > 0) { g_string_append_c(str, '\n'); } g_string_append(str, text); } static void append_line_to_string(GString *buffer, FsearchDatabaseEntry *entry, GString *(*get_string_func)(FsearchDatabaseEntry *)) { if (!entry || !buffer || !get_string_func) { return; } g_autoptr(GString) string = get_string_func(entry); if (!string) { return; } append_line(buffer, string->str); } static void prepend_full_path_to_list(gpointer key, gpointer value, gpointer user_data) { prepend_string_to_list(user_data, value, db_entry_get_path_full); } static void append_full_path_to_string(gpointer key, gpointer value, gpointer user_data) { append_line_to_string(user_data, value, db_entry_get_path_full); } static void append_path_to_string(gpointer key, gpointer value, gpointer user_data) { append_line_to_string(user_data, value, db_entry_get_path); } static void append_name_to_string(gpointer key, gpointer value, gpointer user_data) { append_line_to_string(user_data, value, db_entry_get_name_for_display); } static void fsearch_delete_selection(GSimpleAction *action, GVariant *variant, bool delete, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_autoptr(GString) error_message = g_string_new(NULL); const guint num_selected_rows = fsearch_application_window_get_num_selected(self); GList *file_list = NULL; fsearch_application_window_selection_for_each(self, prepend_full_path_to_list, &file_list); if (delete || num_selected_rows > 20) { g_autoptr(GString) warning_message = g_string_new(NULL); g_string_printf(warning_message, _("Do you really want to remove %d file(s)?"), num_selected_rows); gint response = ui_utils_run_gtk_dialog(GTK_WIDGET(self), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, delete ? _("Deleting files…") : _("Moving files to trash…"), warning_message->str); if (response != GTK_RESPONSE_OK) { goto save_fail; } } uint32_t num_trashed_or_deleted = 0; for (GList *f = file_list; f != NULL; f = f->next) { char *path = f->data; if (delete) { if (fsearch_file_utils_remove(path, error_message)) { num_trashed_or_deleted++; } } else { if (fsearch_file_utils_trash(path, error_message)) { num_trashed_or_deleted++; } } } if (error_message->len > 0) { ui_utils_run_gtk_dialog_async(GTK_WIDGET(self), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Something went wrong."), error_message->str, G_CALLBACK(gtk_widget_destroy), NULL); } if (num_trashed_or_deleted > 0) { g_autoptr(GString) trashed_or_deleted_message = g_string_new(NULL); g_string_printf(trashed_or_deleted_message, delete ? _("Deleted %d file(s).") : _("Moved %d file(s) to the trash."), num_trashed_or_deleted); ui_utils_run_gtk_dialog_async(GTK_WIDGET(self), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, trashed_or_deleted_message->str, _("The database needs to be updated before it becomes aware of those changes! " "This will be fixed with future updates."), G_CALLBACK(gtk_widget_destroy), NULL); } save_fail: if (file_list) { g_list_free_full(g_steal_pointer(&file_list), (GDestroyNotify)g_free); } } static void fsearch_window_action_file_properties(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GDBusConnection *connection = g_application_get_dbus_connection(G_APPLICATION(FSEARCH_APPLICATION_DEFAULT)); if (!connection) { g_debug("[file_properties] failed to get bus connection"); } const guint num_selected_rows = fsearch_application_window_get_num_selected(self); g_autoptr(GPtrArray) file_array = g_ptr_array_new_full(num_selected_rows, g_free); fsearch_application_window_selection_for_each(self, prepend_path_uri_to_array, &file_array); if (num_selected_rows > 20) { g_autoptr(GString) warning_message = g_string_new(NULL); g_string_printf(warning_message, _("Do you really want to open %d file property windows?"), num_selected_rows); gint response = ui_utils_run_gtk_dialog(GTK_WIDGET(self), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, _("Opening file properties…"), warning_message->str); if (response != GTK_RESPONSE_OK) { return; } } // ensure we have a NULL terminated array g_ptr_array_add(file_array, NULL); g_auto(GStrv) file_uris = (GStrv)g_ptr_array_free(g_steal_pointer(&file_array), FALSE); if (!file_uris) { return; } g_autoptr(GError) error = NULL; g_dbus_connection_call_sync(connection, "org.freedesktop.FileManager1", "/org/freedesktop/FileManager1", "org.freedesktop.FileManager1", "ShowItemProperties", g_variant_new("(^ass)", file_uris, ""), NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error) { g_debug("[file_properties] %s", error->message); } } static void fsearch_window_action_move_to_trash(GSimpleAction *action, GVariant *variant, gpointer user_data) { fsearch_delete_selection(action, variant, false, user_data); } static void fsearch_window_action_delete(GSimpleAction *action, GVariant *variant, gpointer user_data) { fsearch_delete_selection(action, variant, true, user_data); } static void fsearch_window_action_invert_selection(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; fsearch_application_window_invert_selection(self); } static void fsearch_window_action_deselect_all(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; fsearch_application_window_unselect_all(self); } static void fsearch_window_action_select_all(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GtkEntry *entry = fsearch_application_window_get_search_entry(self); if (entry && gtk_widget_is_focus(GTK_WIDGET(entry))) { gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1); } else { fsearch_application_window_select_all(self); } } static void fsearch_window_action_cut_or_copy(GSimpleAction *action, GVariant *variant, bool copy, gpointer user_data) { FsearchApplicationWindow *self = user_data; GList *file_list = NULL; fsearch_application_window_selection_for_each(self, prepend_full_path_to_list, &file_list); file_list = g_list_reverse(file_list); clipboard_copy_file_list(file_list, copy); } static void fsearch_window_action_cut(GSimpleAction *action, GVariant *variant, gpointer user_data) { fsearch_window_action_cut_or_copy(action, variant, false, user_data); } static void fsearch_window_action_copy(GSimpleAction *action, GVariant *variant, gpointer user_data) { fsearch_window_action_cut_or_copy(action, variant, true, user_data); } static void copy_selection_as_text(FsearchApplicationWindow *win, GHFunc text_copy_func) { g_autoptr(GString) file_list_buffer = g_string_sized_new(8192); fsearch_application_window_selection_for_each(win, text_copy_func, file_list_buffer); GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_text(clip, file_list_buffer->str, (gint)file_list_buffer->len); } static void fsearch_window_action_copy_full_path(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *win = user_data; copy_selection_as_text(win, append_full_path_to_string); } static void fsearch_window_action_copy_path(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *win = user_data; copy_selection_as_text(win, append_path_to_string); } static void fsearch_window_action_copy_name(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *win = user_data; copy_selection_as_text(win, append_name_to_string); } static void collect_selected_entry_parent_path(gpointer key, FsearchDatabaseEntry *entry, GList **paths) { g_return_if_fail(paths); g_return_if_fail(entry); GString *parent_path = db_entry_get_path(entry); g_return_if_fail(parent_path); *paths = g_list_append(*paths, g_string_free(parent_path, FALSE)); } static void collect_selected_entry_path(gpointer key, FsearchDatabaseEntry *entry, GList **paths) { g_return_if_fail(paths); g_return_if_fail(entry); GString *path = db_entry_get_path_full(entry); g_return_if_fail(path); *paths = g_list_append(*paths, g_string_free(path, FALSE)); } static void append_file_to_list(gpointer key, gpointer value, gpointer data) { g_return_if_fail(value); FsearchDatabaseEntry *entry = value; g_autoptr(GString) path_full = db_entry_get_path_full(entry); g_return_if_fail(path_full); GList **list = data; *list = g_list_append(*list, g_file_new_for_path(path_full->str)); } static void action_after_open(bool action_mouse) { FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); if ((config->action_after_file_open_keyboard && !action_mouse) || (config->action_after_file_open_mouse && action_mouse)) { if (config->action_after_file_open == ACTION_AFTER_OPEN_CLOSE) { g_application_quit(G_APPLICATION(FSEARCH_APPLICATION_DEFAULT)); } else if (config->action_after_file_open == ACTION_AFTER_OPEN_MINIMIZE) { gtk_window_iconify(gtk_application_get_active_window(GTK_APPLICATION(FSEARCH_APPLICATION_DEFAULT))); } } } static void launch_selection_for_app_info(FsearchApplicationWindow *win, GAppInfo *app_info) { g_return_if_fail(win); g_return_if_fail(app_info); const guint selected_rows = fsearch_application_window_get_num_selected(win); if (!confirm_file_open_action(GTK_WIDGET(win), (gint)selected_rows)) { return; } GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(win)); g_autoptr(GdkAppLaunchContext) launch_context = gdk_display_get_app_launch_context(display); if (!launch_context) { return; } GList *file_list = NULL; fsearch_application_window_selection_for_each(win, append_file_to_list, &file_list); if (file_list) { g_app_info_launch(app_info, file_list, G_APP_LAUNCH_CONTEXT(launch_context), NULL); g_list_free_full(g_steal_pointer(&file_list), g_object_unref); } } static void fsearch_window_action_open_with(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; const char *app_id = g_variant_get_string(variant, NULL); if (!app_id) { return; } g_autoptr(GDesktopAppInfo) app_info = g_desktop_app_info_new(app_id); if (!app_info) { return; } launch_selection_for_app_info(self, G_APP_INFO(app_info)); } typedef struct FsearchOpenPathContext { guint win_id; gboolean triggered_with_mouse; gboolean show_dialog_failed_opening; } FsearchOpenPathContext; static void open_path_list_callback(gboolean result, const char *error_message, gpointer user_data) { g_autofree FsearchOpenPathContext *ctx = user_data; if (result) { // open succeeded action_after_open(ctx->triggered_with_mouse); } else if (error_message) { // open failed if (ctx->show_dialog_failed_opening) { GtkWindow *win = gtk_application_get_window_by_id(GTK_APPLICATION(FSEARCH_APPLICATION_DEFAULT), ctx->win_id); if (win) { ui_utils_run_gtk_dialog_async(GTK_WIDGET(win), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Something went wrong."), error_message, G_CALLBACK(gtk_widget_destroy), NULL); } } } } void fsearch_window_action_open_generic(FsearchApplicationWindow *win, bool open_parent_folder, bool triggered_with_mouse) { const guint selected_rows = fsearch_application_window_get_num_selected(win); if (!confirm_file_open_action(GTK_WIDGET(win), (gint)selected_rows)) { return; } g_autoptr(GString) error_message = g_string_sized_new(8192); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); GList *paths = NULL; if (open_parent_folder && !config->folder_open_cmd) { fsearch_application_window_selection_for_each(win, (GHFunc)collect_selected_entry_parent_path, &paths); } else { fsearch_application_window_selection_for_each(win, (GHFunc)collect_selected_entry_path, &paths); } if (open_parent_folder && config->folder_open_cmd) { fsearch_file_utils_open_path_list_with_command(paths, config->folder_open_cmd, error_message); if (error_message->len == 0) { // open succeeded action_after_open(triggered_with_mouse); } else { // open failed if (config->show_dialog_failed_opening) { ui_utils_run_gtk_dialog_async(GTK_WIDGET(win), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Something went wrong."), error_message->str, G_CALLBACK(gtk_widget_destroy), NULL); } } } else { GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(win)); g_autoptr(GdkAppLaunchContext) launch_context = gdk_display_get_app_launch_context(display); FsearchOpenPathContext *open_ctx = g_new0(FsearchOpenPathContext, 1); open_ctx->win_id = gtk_application_window_get_id(GTK_APPLICATION_WINDOW(win)); open_ctx->triggered_with_mouse = triggered_with_mouse; open_ctx->show_dialog_failed_opening = config->show_dialog_failed_opening; fsearch_file_utils_open_path_list(paths, config->launch_desktop_files, G_APP_LAUNCH_CONTEXT(launch_context), open_path_list_callback, open_ctx); } g_list_free_full(paths, g_free); } static void fsearch_window_action_close_window(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_assert(FSEARCH_IS_APPLICATION_WINDOW(self)); fsearch_application_window_prepare_shutdown(self); gtk_widget_destroy(GTK_WIDGET(self)); } static void fsearch_window_action_open(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; fsearch_window_action_open_generic(self, false, false); } static void fsearch_window_action_open_folder(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; fsearch_window_action_open_generic(self, true, false); } static void on_fsearch_window_action_open_with_response(GtkDialog *dialog, gint response_id, gpointer user_data) { if (response_id != GTK_RESPONSE_OK) { gtk_widget_destroy(GTK_WIDGET(dialog)); return; } FsearchApplicationWindow *self = user_data; g_autoptr(GAppInfo) app_info = gtk_app_chooser_get_app_info(GTK_APP_CHOOSER(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog)); launch_selection_for_app_info(self, app_info); } static void fsearch_window_action_open_with_other(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; const char *content_type = g_variant_get_string(variant, NULL); if (!content_type) { content_type = ""; } GtkWidget *app_chooser_dlg = gtk_app_chooser_dialog_new_for_content_type(GTK_WINDOW(self), GTK_DIALOG_MODAL, content_type); gtk_widget_show(app_chooser_dlg); GtkWidget *widget = gtk_app_chooser_dialog_get_widget(GTK_APP_CHOOSER_DIALOG(app_chooser_dlg)); g_object_set(widget, "show-fallback", TRUE, "show-other", TRUE, NULL); g_signal_connect(app_chooser_dlg, "response", G_CALLBACK(on_fsearch_window_action_open_with_response), self); } static void fsearch_window_action_toggle_focus(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GtkWidget *widget = GTK_WIDGET(fsearch_application_window_get_search_entry(self)); if (gtk_widget_is_focus(widget)) { widget = GTK_WIDGET(fsearch_application_window_get_listview(self)); } gtk_widget_grab_focus(widget); } static void fsearch_window_action_focus_search(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GtkWidget *entry = GTK_WIDGET(fsearch_application_window_get_search_entry(self)); gtk_widget_grab_focus(entry); } static void fsearch_window_action_hide_window(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; gtk_window_iconify(GTK_WINDOW(self)); } static void fsearch_window_action_show_filter(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_filter = g_variant_get_boolean(variant); fsearch_application_window_apply_search_revealer_config(self); } static void fsearch_window_action_show_search_button(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_search_button = g_variant_get_boolean(variant); fsearch_application_window_apply_search_revealer_config(self); } static void fsearch_window_action_show_statusbar(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_statusbar = g_variant_get_boolean(variant); fsearch_application_window_apply_statusbar_revealer_config(self); } static void fsearch_window_action_search_in_path(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); bool search_in_path_old = config->search_in_path; config->search_in_path = g_variant_get_boolean(variant); FsearchStatusbar *sb = fsearch_application_window_get_statusbar(self); fsearch_statusbar_set_revealer_visibility(sb, FSEARCH_STATUSBAR_REVEALER_SEARCH_IN_PATH, config->search_in_path); if (search_in_path_old != config->search_in_path) { fsearch_application_window_update_query_flags(self); } } static void fsearch_window_action_search_mode(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); bool enable_regex_old = config->enable_regex; config->enable_regex = g_variant_get_boolean(variant); FsearchStatusbar *sb = fsearch_application_window_get_statusbar(self); fsearch_statusbar_set_revealer_visibility(sb, FSEARCH_STATUSBAR_REVEALER_REGEX, config->enable_regex); if (enable_regex_old != config->enable_regex) { fsearch_application_window_update_query_flags(self); } } static void fsearch_window_action_cancel_current_task(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; fsearch_application_window_cancel_current_task(self); } static void fsearch_window_action_match_case(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); bool match_case_old = config->match_case; config->match_case = g_variant_get_boolean(variant); FsearchStatusbar *sb = fsearch_application_window_get_statusbar(self); fsearch_statusbar_set_revealer_visibility(sb, FSEARCH_STATUSBAR_REVEALER_MATCH_CASE, config->match_case); if (match_case_old != config->match_case) { fsearch_application_window_update_query_flags(self); } } static void fsearch_window_action_set_filter(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); guint active_filter = g_variant_get_int32(variant); fsearch_application_window_set_active_filter(self, active_filter); } static void fsearch_window_action_show_path_column(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; gboolean value = g_variant_get_boolean(variant); FsearchListView *list = FSEARCH_LIST_VIEW(fsearch_application_window_get_listview(self)); FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list, DATABASE_INDEX_TYPE_PATH); if (!col) { return; } fsearch_list_view_column_set_visible(list, col, value); g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_path_column = g_variant_get_boolean(variant); } static void fsearch_window_action_show_extension_column(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); gboolean value = g_variant_get_boolean(variant); FsearchListView *list = FSEARCH_LIST_VIEW(fsearch_application_window_get_listview(self)); FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list, DATABASE_INDEX_TYPE_EXTENSION); if (!col) { return; } fsearch_list_view_column_set_visible(list, col, value); g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_extension_column = g_variant_get_boolean(variant); } static void fsearch_window_action_show_type_column(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); gboolean value = g_variant_get_boolean(variant); FsearchListView *list = FSEARCH_LIST_VIEW(fsearch_application_window_get_listview(self)); FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list, DATABASE_INDEX_TYPE_FILETYPE); if (!col) { return; } fsearch_list_view_column_set_visible(list, col, value); g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_type_column = g_variant_get_boolean(variant); } static void fsearch_window_action_show_size_column(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); gboolean value = g_variant_get_boolean(variant); FsearchListView *list = FSEARCH_LIST_VIEW(fsearch_application_window_get_listview(self)); FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list, DATABASE_INDEX_TYPE_SIZE); if (!col) { return; } fsearch_list_view_column_set_visible(list, col, value); g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_size_column = g_variant_get_boolean(variant); } static void fsearch_window_action_show_modified_column(GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; g_simple_action_set_state(action, variant); gboolean value = g_variant_get_boolean(variant); FsearchListView *list = FSEARCH_LIST_VIEW(fsearch_application_window_get_listview(self)); FsearchListViewColumn *col = fsearch_list_view_get_first_column_for_type(list, DATABASE_INDEX_TYPE_MODIFICATION_TIME); if (!col) { return; } fsearch_list_view_column_set_visible(list, col, value); g_simple_action_set_state(action, variant); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); config->show_modified_column = g_variant_get_boolean(variant); } static void action_toggle_state_cb(GSimpleAction *saction, GVariant *parameter, gpointer user_data) { GAction *action = G_ACTION(saction); g_autoptr(GVariant) state = g_action_get_state(action); g_action_change_state(action, g_variant_new_boolean(!g_variant_get_boolean(state))); } static GActionEntry FsearchWindowActions[] = { {"open", fsearch_window_action_open}, {"open_with", fsearch_window_action_open_with, "s"}, {"open_with_other", fsearch_window_action_open_with_other, "s"}, {"open_folder", fsearch_window_action_open_folder}, {"close_window", fsearch_window_action_close_window}, {"copy_clipboard", fsearch_window_action_copy}, {"copy_as_text_path_and_name_clipboard", fsearch_window_action_copy_full_path}, {"copy_as_text_name_clipboard", fsearch_window_action_copy_name}, {"copy_as_text_path_clipboard", fsearch_window_action_copy_path}, {"cut_clipboard", fsearch_window_action_cut}, {"file_properties", fsearch_window_action_file_properties}, {"move_to_trash", fsearch_window_action_move_to_trash}, {"delete_selection", fsearch_window_action_delete}, {"select_all", fsearch_window_action_select_all}, {"deselect_all", fsearch_window_action_deselect_all}, {"invert_selection", fsearch_window_action_invert_selection}, {"toggle_focus", fsearch_window_action_toggle_focus}, {"focus_search", fsearch_window_action_focus_search}, {"hide_window", fsearch_window_action_hide_window}, {"cancel_task", action_toggle_state_cb, NULL, "true", fsearch_window_action_cancel_current_task}, // Column popup {"show_path_column", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_path_column}, {"show_type_column", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_type_column}, {"show_extension_column", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_extension_column}, {"show_size_column", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_size_column}, {"show_modified_column", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_modified_column}, //{ "update_database", fsearch_window_action_update_database }, // View {"show_statusbar", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_statusbar}, {"show_filter", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_filter}, {"show_search_button", action_toggle_state_cb, NULL, "true", fsearch_window_action_show_search_button}, // Search {"search_in_path", action_toggle_state_cb, NULL, "true", fsearch_window_action_search_in_path}, {"search_mode", action_toggle_state_cb, NULL, "true", fsearch_window_action_search_mode}, {"match_case", action_toggle_state_cb, NULL, "true", fsearch_window_action_match_case}, {"filter", NULL, "i", "0", fsearch_window_action_set_filter}, }; void fsearch_window_actions_update(FsearchApplicationWindow *self) { const gint num_rows = fsearch_application_window_get_num_results(self); GActionGroup *group = G_ACTION_GROUP(self); FsearchListView *view = fsearch_application_window_get_listview(self); const gint active_filter = fsearch_application_window_get_active_filter(self); gint num_rows_selected = 0; if (view) { num_rows_selected = fsearch_application_window_get_num_selected(self); } const bool has_file_manager_on_bus = fsearch_application_has_file_manager_on_bus(FSEARCH_APPLICATION_DEFAULT); action_set_enabled(group, "close_window", TRUE); action_set_enabled(group, "select_all", num_rows >= 1 ? TRUE : FALSE); action_set_enabled(group, "deselect_all", num_rows_selected); action_set_enabled(group, "invert_selection", num_rows_selected); action_set_enabled(group, "copy_clipboard", num_rows_selected); action_set_enabled(group, "copy_as_text_path_and_name_clipboard", num_rows_selected); action_set_enabled(group, "copy_as_text_name_clipboard", num_rows_selected); action_set_enabled(group, "copy_as_text_path_clipboard", num_rows_selected); action_set_enabled(group, "cut_clipboard", num_rows_selected); action_set_enabled(group, "delete_selection", FALSE); action_set_enabled(group, "file_properties", has_file_manager_on_bus && num_rows_selected >= 1 ? TRUE : FALSE); action_set_enabled(group, "move_to_trash", num_rows_selected); action_set_enabled(group, "open", num_rows_selected); action_set_enabled(group, "open_with", num_rows_selected >= 1 ? TRUE : FALSE); action_set_enabled(group, "open_with_other", num_rows_selected >= 1 ? TRUE : FALSE); action_set_enabled(group, "open_folder", num_rows_selected); action_set_enabled(group, "focus_search", TRUE); action_set_enabled(group, "toggle_focus", TRUE); action_set_enabled(group, "hide_window", TRUE); action_set_enabled(group, "update_database", TRUE); action_set_enabled(group, "show_statusbar", TRUE); action_set_enabled(group, "show_filter", TRUE); action_set_enabled(group, "show_search_button", TRUE); action_set_enabled(group, "show_name_column", FALSE); action_set_enabled(group, "show_path_column", TRUE); action_set_enabled(group, "show_type_column", TRUE); action_set_enabled(group, "show_extension_column", TRUE); action_set_enabled(group, "show_size_column", TRUE); action_set_enabled(group, "show_modified_column", TRUE); FsearchConfig *config = fsearch_application_get_config(FSEARCH_APPLICATION_DEFAULT); action_set_active_bool(group, "show_statusbar", config->show_statusbar); action_set_active_bool(group, "show_filter", config->show_filter); action_set_active_bool(group, "show_search_button", config->show_search_button); action_set_active_bool(group, "search_in_path", config->search_in_path); action_set_active_bool(group, "search_mode", config->enable_regex); action_set_active_bool(group, "match_case", config->match_case); action_set_active_bool(group, "show_name_column", true); action_set_active_bool(group, "show_path_column", config->show_path_column); action_set_active_bool(group, "show_type_column", config->show_type_column); action_set_active_bool(group, "show_extension_column", config->show_extension_column); action_set_active_bool(group, "show_size_column", config->show_size_column); action_set_active_bool(group, "show_modified_column", config->show_modified_column); action_set_active_int(group, "filter", active_filter); } void fsearch_window_actions_init(FsearchApplicationWindow *self) { g_action_map_add_action_entries(G_ACTION_MAP(self), FsearchWindowActions, G_N_ELEMENTS(FsearchWindowActions), self); fsearch_window_actions_update(self); } fsearch-0.2.3/src/fsearch_window_actions.h000066400000000000000000000020141446344336300206200ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #pragma once #include "fsearch_window.h" void fsearch_window_actions_init(FsearchApplicationWindow *self); void fsearch_window_actions_update(FsearchApplicationWindow *self); void fsearch_window_action_open_generic(FsearchApplicationWindow *win, bool open_parent_folder, bool triggered_with_mouse); fsearch-0.2.3/src/gresource.xml000066400000000000000000000010351446344336300164470ustar00rootroot00000000000000 fsearch_filter_editor.ui fsearch_overlay.ui fsearch_preferences.ui fsearch_statusbar.ui fsearch_window.ui menus.ui shared.css fsearch-0.2.3/src/main.c000066400000000000000000000022551446344336300150240ustar00rootroot00000000000000/* FSearch - A fast file search utility Copyright © 2020 Christian Boxdörfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "fsearch.h" #include #include #include int main(int argc, char *argv[]) { setlocale(LC_ALL, ""); bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); g_set_application_name(_("FSearch")); return g_application_run(G_APPLICATION(fsearch_application_new()), argc, argv); } fsearch-0.2.3/src/menus.ui000066400000000000000000000323401446344336300154200ustar00rootroot00000000000000 _File
New Window app.new_window window-new
_Open win.open document-open Open Folder win.open_folder folder-open
update_database_menu_item Update Database app.update_database view-refresh cancel_update_database_menu_item Cancel Update app.cancel_update_database process-stop
Close Window win.close_window window-close Quit app.quit application-exit
_Edit
_Copy win.copy_clipboard edit-copy Cu_t win.cut_clipboard edit-cut
Select All win.select_all edit-select-all Deselect All win.deselect_all Invert Selection win.invert_selection
Preferences app.preferences 0 preferences-desktop
_View
Show Statusbar win.show_statusbar Show Filter win.show_filter Show Search Button win.show_search_button
_Search
Search in Path win.search_in_path Match Case win.match_case Enable RegEx win.search_mode
_Help
FSearch Online Donate GitHub Sponsors app.donate_github PayPal app.donate_paypal Forum app.forum Bug Reports and Feature Requests app.bug_report Help app.help About app.about help-about
_Open win.open Return document-open Open _With document-open
_Open Folder win.open_folder <control>Return folder-open
_Copy win.copy_clipboard <control>c edit-copy Copy as Text Name win.copy_as_text_name_clipboard Path win.copy_as_text_path_clipboard Path + Name win.copy_as_text_path_and_name_clipboard Cu_t win.cut_clipboard <control>x edit-cut
Move to _Trash win.move_to_trash Delete user-trash
Name win.show_name_column Path win.show_path_column Extension win.show_extension_column Type win.show_type_column Size win.show_size_column Date Modified win.show_modified_column
fsearch-0.2.3/src/meson.build000066400000000000000000000044021446344336300160720ustar00rootroot00000000000000resources = gnome.compile_resources('ui_resources', 'gresource.xml', source_dir: '.', c_name: 'fsearch_ui', ) resources += gnome.compile_resources('icon_resources', join_paths(meson.source_root(), 'data', 'gresource.xml'), source_dir: join_paths(meson.source_root(), 'data'), c_name: 'fsearch_icons', ) libfsearch_sources = [ resources, 'fsearch.c', 'fsearch_array.c', 'fsearch_clipboard.c', 'fsearch_config.c', 'fsearch_database.c', 'fsearch_database_entry.c', 'fsearch_database_index.c', 'fsearch_database_search.c', 'fsearch_database_view.c', 'fsearch_exclude_path.c', 'fsearch_file_utils.c', 'fsearch_filter.c', 'fsearch_filter_editor.c', 'fsearch_filter_manager.c', 'fsearch_index.c', 'fsearch_list_view.c', 'fsearch_listview_popup.c', 'fsearch_memory_pool.c', 'fsearch_preferences_ui.c', 'fsearch_preferences_widgets.c', 'fsearch_query.c', 'fsearch_query_match_data.c', 'fsearch_query_matchers.c', 'fsearch_query_node.c', 'fsearch_query_lexer.c', 'fsearch_query_parser.c', 'fsearch_query_tree.c', 'fsearch_result_view.c', 'fsearch_selection.c', 'fsearch_size_utils.c', 'fsearch_statusbar.c', 'fsearch_string_utils.c', 'fsearch_task.c', 'fsearch_thread_pool.c', 'fsearch_time_utils.c', 'fsearch_ui_utils.c', 'fsearch_utf.c', 'fsearch_window.c', 'fsearch_window_actions.c', ] fsearch_deps = [ cc.find_library('m', required: true), dependency('gio-unix-2.0', version: '>= 2.50'), dependency('gtk+-3.0', version: '>= 3.18'), dependency('libpcre2-8', version: '>= 10.21'), dependency('icu-uc', version: '>= 3.8'), ] libfsearch = static_library( 'fsearch', libfsearch_sources, dependencies: fsearch_deps, include_directories: fsearch_include_dirs, ) libfsearch_include_dirs = include_directories('.') libfsearch_dep = declare_dependency( link_with: libfsearch, include_directories: [ fsearch_include_dirs, libfsearch_include_dirs ], dependencies: fsearch_deps, sources: resources ) fsearch = executable('fsearch', 'main.c', include_directories: fsearch_include_dirs, dependencies: libfsearch_dep, install: true, ) subdir('tests') fsearch-0.2.3/src/shared.css000066400000000000000000000030241446344336300157070ustar00rootroot00000000000000.fsearch-statusbar-cancel-update-button { padding: 0px; min-height: 20px; min-width: 20px; border-radius: 0px; border-bottom-width: 0px; border-top-width: 0px; } .filter_combobox box.linked button:dir(ltr) { border-bottom-left-radius: 0; border-top-left-radius: 0; border-left-width: 0; } .filter_combobox box.linked button:dir(rtl) { border-bottom-right-radius: 0; border-top-right-radius: 0; border-right-width: 0; } .filter_centered box.linked button { border-radius: 0; } .search_button:dir(ltr) { border-bottom-left-radius: 0; border-top-left-radius: 0; border-left-width: 0; } .search_button:dir(rtl) { border-bottom-right-radius: 0; border-top-right-radius: 0; border-right-width: 0; } .search_entry_has_neighbours:dir(ltr) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .search_entry_has_neighbours:dir(rtl) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .fsearch-statusbar-button { border-radius: 0px; border-top: none; border-bottom: none; } .results_frame { border-left: none; border-right: none; } .results_frame_last { border-bottom: none; } .results_frame_csd_mode { border-top: none; } .results_frame treeview button { border-radius: 0; border-top: 0; border-right: 0; margin-left: 0; margin-right: 0; } .results_frame treeview button:first-child:dir(rtl) { border-right: 0; } .results_frame treeview button:first-child:dir(ltr) { border-left: 0; }fsearch-0.2.3/src/tests/000077500000000000000000000000001446344336300150725ustar00rootroot00000000000000fsearch-0.2.3/src/tests/meson.build000066400000000000000000000026271446344336300172430ustar00rootroot00000000000000test_array = executable('test_array', 'test_array.c', dependencies: libfsearch_dep) test_query = executable('test_query', 'test_query.c', dependencies: libfsearch_dep) test_size_utils = executable('test_size_utils', 'test_size_utils.c', dependencies: libfsearch_dep) test_string_utils = executable('test_string_utils', 'test_string_utils.c', dependencies: libfsearch_dep) test_time_utils = executable('test_time_utils', 'test_time_utils.c', dependencies: libfsearch_dep) test('test_array', test_array, env: [ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), ], ) test('test_query', test_query, env: [ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), ], ) test('test_size_utils', test_size_utils, env: [ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), ], ) test('test_string_utils', test_string_utils, env: [ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), ], ) test('test_time_utils', test_time_utils, env: [ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), ], ) fsearch-0.2.3/src/tests/test_array.c000066400000000000000000000074251446344336300174230ustar00rootroot00000000000000#include #include #include #include static int32_t sort_int_descending(void **a, void **b, void *data) { int32_t ia = GPOINTER_TO_INT(*a); int32_t ib = GPOINTER_TO_INT(*b); return ib - ia; } static int32_t sort_int_ascending(void **a, void **b, void *data) { return -1 * sort_int_descending(a, b, data); } static void test_main(void) { DynamicArray *array = darray_new(10); g_assert_true(darray_get_size(array) == 10); const int32_t upper_limit = 42; for (int32_t i = 0; i < upper_limit; ++i) { darray_add_item(array, GINT_TO_POINTER(i)); } for (int32_t i = 0; i < upper_limit; ++i) { int32_t j = GPOINTER_TO_INT(darray_get_item(array, i)); g_assert_true(i == j); } g_assert_true(darray_get_num_items(array) == upper_limit); darray_sort(array, (DynamicArrayCompareDataFunc)sort_int_descending, NULL, NULL); for (int32_t i = 0; i < upper_limit; ++i) { int32_t j = GPOINTER_TO_INT(darray_get_item(array, i)); int32_t expected_val = upper_limit - i - 1; if (expected_val != j) { g_print("[sort] Expect %d at index %d. Result: %d\n", expected_val, i, j); } g_assert_true(expected_val == j); uint32_t matched_idx = 0; if (darray_binary_search_with_data(array, GINT_TO_POINTER(i), (DynamicArrayCompareDataFunc)sort_int_descending, NULL, &matched_idx)) { if (matched_idx != expected_val) { g_print("[bin_search] Expect %d to be at idx %d\n", i, expected_val); } g_assert_true(matched_idx == expected_val); } else { g_print("[bin_search] Didn't find %d!\n", i); g_assert_not_reached(); } } darray_sort_multi_threaded(array, (DynamicArrayCompareDataFunc)sort_int_ascending, NULL, NULL); for (int32_t i = 0; i < upper_limit; ++i) { int32_t j = GPOINTER_TO_INT(darray_get_item(array, i)); g_print("%d:%d\n", i, j); } for (int32_t i = 0; i < upper_limit; ++i) { int32_t j = GPOINTER_TO_INT(darray_get_item(array, i)); int32_t expected_val = i; if (expected_val != j) { g_print("[threaded_sort] Expect %d at index %d. Result: %d\n", expected_val, i, j); } g_assert_true(expected_val == j); uint32_t matched_idx = 0; if (darray_binary_search_with_data(array, GINT_TO_POINTER(i), (DynamicArrayCompareDataFunc)sort_int_ascending, NULL, &matched_idx)) { if (expected_val != matched_idx) { g_print("[bin_search] Expect %d to be at idx %d\n", i, expected_val); } g_assert_true(matched_idx == expected_val); } else { g_print("[bin_search] Didn't find %d!\n", i); g_assert_not_reached(); } } for (uint32_t i = 0; i < upper_limit - 1; ++i) { int32_t i1 = GPOINTER_TO_INT(darray_get_item(array, i)); g_assert_true(i1 == i); uint32_t i2_idx = 0; int32_t i2 = GPOINTER_TO_INT( darray_get_item_next(array, GINT_TO_POINTER(i1), (DynamicArrayCompareDataFunc)sort_int_ascending, NULL, &i2_idx)); g_assert_true(i2 == i1 + 1); g_assert_true(i2_idx == i1 + 1); } g_clear_pointer(&array, darray_unref); } int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); g_test_add_func("/FSearch/array/main", test_main); return g_test_run(); } fsearch-0.2.3/src/tests/test_query.c000066400000000000000000000353041446344336300174470ustar00rootroot00000000000000#include #include #include #include #include #include typedef struct QueryTest { const char *needle; const char *haystack; bool is_dir; off_t size; FsearchQueryFlags flags; bool result; } QueryTest; static void test_query(QueryTest *t) { FsearchFilterManager *manager = fsearch_filter_manager_new_with_defaults(); FsearchMemoryPool *file_pool = fsearch_memory_pool_new(100, db_entry_get_sizeof_file_entry(), (GDestroyNotify)db_entry_destroy); FsearchMemoryPool *folder_pool = fsearch_memory_pool_new(100, db_entry_get_sizeof_folder_entry(), (GDestroyNotify)db_entry_destroy); FsearchQuery *q = fsearch_query_new(t->needle, NULL, 0, NULL, manager, NULL, t->flags, "debug_query", true); FsearchDatabaseEntry *entry = NULL; if (g_str_has_prefix(t->haystack, "/")) { const char *haystack = t->haystack + 1; g_auto(GStrv) names = g_strsplit(haystack, "/", -1); const guint names_len = g_strv_length(names); entry = fsearch_memory_pool_malloc(folder_pool); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FOLDER); db_entry_set_name(entry, ""); if (names_len > 0) { for (int i = 0; i < names_len - 1; i++) { FsearchDatabaseEntry *old = entry; entry = fsearch_memory_pool_malloc(folder_pool); db_entry_set_type(entry, DATABASE_ENTRY_TYPE_FOLDER); db_entry_set_name(entry, names[i]); db_entry_set_parent(entry, (FsearchDatabaseEntryFolder *)old); } FsearchDatabaseEntry *old = entry; entry = fsearch_memory_pool_malloc(t->is_dir ? folder_pool : file_pool); db_entry_set_name(entry, names[names_len - 1]); db_entry_set_type(entry, t->is_dir ? DATABASE_ENTRY_TYPE_FOLDER : DATABASE_ENTRY_TYPE_FILE); db_entry_set_size(entry, t->size); db_entry_set_parent(entry, (FsearchDatabaseEntryFolder *)old); } } else { entry = fsearch_memory_pool_malloc(t->is_dir ? folder_pool : file_pool); db_entry_set_name(entry, t->haystack); db_entry_set_size(entry, t->size); db_entry_set_type(entry, t->is_dir ? DATABASE_ENTRY_TYPE_FOLDER : DATABASE_ENTRY_TYPE_FILE); } FsearchQueryMatchData *match_data = fsearch_query_match_data_new(); fsearch_query_match_data_set_entry(match_data, entry); const bool found = fsearch_query_match(q, match_data); g_clear_pointer(&manager, fsearch_filter_manager_free); g_clear_pointer(&q, fsearch_query_unref); g_clear_pointer(&match_data, fsearch_query_match_data_free); if (found != t->result) { g_printerr("[%s] should%s match [name:%s, size:%ld]\n", t->needle, t->result ? "" : " NOT", t->haystack, t->size); } g_assert_true(found == t->result); g_clear_pointer(&file_pool, fsearch_memory_pool_free_pool); g_clear_pointer(&folder_pool, fsearch_memory_pool_free_pool); } static bool set_locale(const char *locale) { char *current_locale = setlocale(LC_CTYPE, NULL); if (strcmp(locale, current_locale) != 0) { setlocale(LC_CTYPE, locale); current_locale = setlocale(LC_CTYPE, NULL); if (strncmp(current_locale, locale, 2) != 0) { g_printerr("Failed to set locale to %s. Skipping test.\n", locale); return false; } } return true; } static void test_main(void) { if (set_locale("en_US.UTF-8")) { QueryTest main_tests[] = { // Mismatches {"i j l", "I J K", false, 0, 0, false}, {"i", "j", false, 0, 0, false}, {"i", "ı", false, 0, 0, false}, {"abc", "ab_c", false, 0, 0, false}, {"é", "e", false, 0, 0, false}, {"ó", "o", false, 0, 0, false}, {"å", "a", false, 0, 0, false}, // ensure that we don't match turkic "i" mappings {"ı", "i", false, 0, 0, false}, {"ı", "I", false, 0, 0, false}, {"i", "ı", false, 0, 0, false}, {"i", "İ", false, 0, 0, false}, {"I", "ı", false, 0, 0, false}, {"İ", "i", false, 0, 0, false}, // wildcards {"?", "aa", false, 0, 0, false}, {"*.txt", "testtxt", false, 0, 0, false}, // regex {"^a", "ba", false, 0, QUERY_FLAG_REGEX, false}, // match case {"a", "A", false, 0, QUERY_FLAG_MATCH_CASE, false}, // auto match case {"A", "a", false, 0, QUERY_FLAG_AUTO_MATCH_CASE, false}, // Matches {"é", "É", false, 0, 0, true}, {"ó", "Ó", false, 0, 0, true}, {"å", "Å", false, 0, 0, true}, {"É", "é", false, 0, 0, true}, {"Ó", "Ó", false, 0, 0, true}, {"Å", "å", false, 0, 0, true}, {"ff", "affe", false, 0, 0, true}, {"i", "I J K", false, 0, 0, true}, {"j i", "I J K", false, 0, 0, true}, {"i j", "İIäój", false, 0, 0, true}, {"abc", "abcdef", false, 0, 0, true}, {"ab cd", "abcdef", false, 0, 0, true}, // wildcards {"?", "ı", false, 0, 0, true}, {"*c*f", "abcdef", false, 0, 0, true}, {"ab*ef", "abcdef", false, 0, 0, true}, {"abc?ef", "abcdef", false, 0, 0, true}, // regex {"^b", "ba", false, 0, QUERY_FLAG_REGEX, true}, {"^B", "ba", false, 0, QUERY_FLAG_REGEX, true}, // match case {"a", "a", false, 0, QUERY_FLAG_MATCH_CASE, true}, // auto match case {"A", "A", false, 0, QUERY_FLAG_AUTO_MATCH_CASE, true}, // boolean logic {"a && (b || c)", "ab", false, 0, 0, true}, {"a && (b || c)", "ac", false, 0, 0, true}, {"a && (b || c)", "ad", false, 0, 0, false}, {"a && (b || c)", "bc", false, 0, 0, false}, {"a && (b || c || d || e)", "ae", false, 0, 0, true}, {"a && (b || (c && d))", "bc", false, 0, 0, false}, {"a && (b || (c && d))", "ac", false, 0, 0, false}, {"a && (b || (c && d))", "bcd", false, 0, 0, false}, {"a && (b || (c && d))", "acd", false, 0, 0, true}, {"a && (b || (c && d))", "ab", false, 0, 0, true}, {"!a", "b", false, 0, 0, true}, {"!b", "b", false, 0, 0, false}, {"!!b", "b", false, 0, 0, true}, {"a && !(b || c)", "abc", false, 0, 0, false}, {"a && !(b || !c)", "ac", false, 0, 0, true}, {"a && !(b || !c)", "ac", false, 0, 0, true}, {"a (b || c)", "ac", false, 0, 0, true}, {"a (b || c)", "ab", false, 0, 0, true}, {"a (b || c)", "a", false, 0, 0, false}, {"a (b || c)", "b", false, 0, 0, false}, {"a (b || c)", "c", false, 0, 0, false}, {"a (b || c)", "bc", false, 0, 0, false}, {"a !b", "ac", false, 0, 0, true}, {"a !b", "ab", false, 0, 0, false}, {"a !b", "cd", false, 0, 0, false}, {"a b !c", "abc", false, 0, 0, false}, {"a b !c", "abd", false, 0, 0, true}, {"a b c !d", "abcd", false, 0, 0, false}, {"a b c !d", "abce", false, 0, 0, true}, // Closing bracket without corresponding open bracket //{"a)", "a", 0, 0, false}, {"a !b || c)", "ad", false, 0, 0, false}, {"a !b || c)", "c", false, 0, 0, false}, {"a !b || c)", "ac", false, 0, 0, false}, {"a !b || c)", "ab", false, 0, 0, false}, {"a !b || c)", "b", false, 0, 0, false}, // fields {"size:1", "test", false, 1, 0, true}, {"size:300..", "test", false, 1000, 0, true}, {"size:300..", "test", false, 200, 0, false}, {"size:>300", "test", false, 301, 0, true}, {"size:>300", "test", false, 300, 0, false}, {"size:>=300", "test", false, 300, 0, true}, {"size:>300 size:<400", "test", false, 350, 0, true}, {"size:>300 size:<400", "test", false, 250, 0, false}, {"size:>300 size:<400", "test", false, 450, 0, false}, {"size:>1MB", "test", false, 1000001, 0, true}, {"size:>1MB", "test", false, 1000000, 0, false}, {"size:abc", "test", false, 1000000, 0, false}, {"size:abc test", "test", false, 1000000, 0, false}, {"size:abc abc", "test", false, 1000000, 0, false}, // bug #388 {"size:1kb..2kb", "test", false, 1000, 0, true}, {"regex:suffix$", "suffix prefix", false, 0, 0, false}, {"regex:suffix$", "prefix suffix", false, 0, 0, true}, {"exact:ABC", "aBc", false, 0, 0, true}, {"exact:ABC", "aBcd", false, 0, 0, false}, {"case:exact:ABC", "aBc", false, 0, 0, false}, {"exact:Ȁ", "Ȁ", false, 0, 0, true}, {"exact:ȁ", "Ȁ", false, 0, 0, true}, {"exact:Ȁ", "ȁ", false, 0, 0, true}, {"case:exact:ȁ", "Ȁ", false, 0, 0, false}, {"case:exact:Ȁ", "ȁ", false, 0, 0, false}, {"case:exact:Ȁ", "Ȁ", false, 0, 0, true}, {"exact:Ȁ", "Ȁb", false, 0, 0, false}, {"case:(A (b || c)) d", "AbD", false, 0, 0, true}, {"D case:(A (b || c))", "Acd", false, 0, 0, true}, {"case:(A (b || c)) d", "ab", false, 0, 0, false}, {"case:(A (b || c)) d", "AC", false, 0, 0, false}, {"!case:(A || B) c", "ac", false, 0, 0, true}, {"!case:(A || B) c", "bc", false, 0, 0, true}, {"!case:(A || B) c", "abc", false, 0, 0, true}, {"!case:(A || B) c", "Ac", false, 0, 0, false}, {"!case:(A || B) c", "Bc", false, 0, 0, false}, {"!case:(A || B) c", "ABc", false, 0, 0, false}, {"!case:(A || B) c", "abd", false, 0, 0, false}, {"ext:pdf;jpg", "test.pdf", false, 0, 0, true}, {"ext:pdf;jpg", "test.jpg", false, 0, 0, true}, {"ext:pdf;jpg", "test.c", false, 0, 0, false}, {"ext:", "test.c", false, 0, 0, false}, {"ext:", "test", false, 0, 0, true}, {"case:(TE || AB) cd", "TEcd", false, 0, 0, true}, {"case:(TE || AB) cd", "ABcd", false, 0, 0, true}, {"case:(TE || AB) cd", "AB", false, 0, 0, false}, {"case:(TE || AB) cd", "TE", false, 0, 0, false}, {"case:(TE || AB) cd", "ABTE", false, 0, 0, false}, {"case:(TE || AB) cd", "cd", false, 0, 0, false}, {"nocase:a", "A", false, 0, QUERY_FLAG_MATCH_CASE, true}, {"depth:0", "/", false, 0, 0, true}, {"depth:2", "/1/2/3", false, 0, 0, false}, {"depth:3", "/1/2/3", false, 0, 0, true}, {"path:d", "/a/b/c", false, 0, 0, false}, {"path:a", "/a/b/c", false, 0, 0, true}, {"path:b", "/a/b/c", false, 0, 0, true}, {"path:c", "/a/b/c", false, 0, 0, true}, {"path:/", "/a/b/c", false, 0, 0, true}, {"path:/a/b/c", "/a/b/c", false, 0, 0, true}, {"path:(a && b && c && d)", "/a/b/c", false, 0, 0, false}, {"path:(a && b && c)", "/a/b/c", false, 0, 0, true}, {"parent:/b/a", "/a/b/c", false, 0, 0, false}, {"parent:/a/b", "/a/b/c", false, 0, 0, true}, // macros {"test || (pic: video:)", "test.jpg", false, 0, 0, true}, {"test || (pic: video:)", "test.mp4", false, 0, 0, true}, {"test || (pic: video:)", "test.mp4", false, 0, 0, true}, {"test || (pic: video:)", "test.doc", false, 0, 0, true}, {"test || (pic: video:)", "test.doc", false, 0, 0, true}, // bug reports: // #360 {"(", "test", false, 0, QUERY_FLAG_REGEX, false}, {"folder:", "", false, 0, 0, false}, }; for (uint32_t i = 0; i < G_N_ELEMENTS(main_tests); i++) { QueryTest *t = &main_tests[i]; test_query(t); } } } static void test_turkic_case_mapping(void) { if (set_locale("tr_TR.UTF-8")) { QueryTest tr_tests[] = { // Mismatches {"i", "ı", false, 0, false}, {"i", "I", false, 0, false}, {"ı", "i", false, 0, false}, {"ı", "İ", false, 0, false}, {"İ", "ı", false, 0, false}, {"İ", "I", false, 0, false}, {"I", "i", false, 0, false}, {"I", "İ", false, 0, false}, // Matches {"ı", "I", false, 0, true}, {"i", "İ", false, 0, true}, // trigger 0, wildcard search //{"ı*", "I", 0, true}, //{"i*", "İ", 0, true}, //{"I*", "ı", 0, true}, //{"İ*", "i", 0, true}, }; for (uint32_t i = 0; i < G_N_ELEMENTS(tr_tests); i++) { QueryTest *t = &tr_tests[i]; test_query(t); // the tests still need to pass if haystack and needle are swapped, since they're all single characters test_query(t); } } } static void test_german_case_mapping(void) { if (set_locale("de_DE.UTF-8")) { QueryTest de_tests[] = { // Mismatches {"a", "ä", false, 0, 0, false}, {"A", "ä", false, 0, 0, false}, {"a", "Ä", false, 0, 0, false}, {"A", "Ä", false, 0, 0, false}, {"o", "ö", false, 0, 0, false}, {"O", "ö", false, 0, 0, false}, {"o", "Ö", false, 0, 0, false}, {"O", "Ö", false, 0, 0, false}, {"u", "ü", false, 0, 0, false}, {"U", "ü", false, 0, 0, false}, {"u", "Ü", false, 0, 0, false}, {"U", "Ü", false, 0, 0, false}, // Matches {"ä", "ä", false, 0, 0, true}, {"ö", "ö", false, 0, 0, true}, {"ü", "ü", false, 0, 0, true}, {"Ä", "ä", false, 0, 0, true}, {"Ö", "ö", false, 0, 0, true}, {"Ü", "ü", false, 0, 0, true}, {"ß", "ẞ", false, 0, 0, true}, }; for (uint32_t i = 0; i < G_N_ELEMENTS(de_tests); i++) { QueryTest *t = &de_tests[i]; test_query(t); // the tests still need to pass if haystack and needle are swapped, since they're all single characters test_query(t); } } } int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); g_test_add_func("/FSearch/query/main", test_main); g_test_add_func("/FSearch/query/mappings_turkic", test_turkic_case_mapping); g_test_add_func("/FSearch/query/mappings_german", test_german_case_mapping); return g_test_run(); }fsearch-0.2.3/src/tests/test_size_utils.c000066400000000000000000000034731446344336300204760ustar00rootroot00000000000000#include #include static void test_parse_size(void) { typedef struct { const char *string; gboolean expected_success; int64_t expected_size; int64_t expected_plus; } FsearchTestSizeParseContext; // size factors const int64_t fkb = 1000; const int64_t fmb = 1000 * fkb; const int64_t fgb = 1000 * fmb; const int64_t ftb = 1000 * fgb; // expected plus const int64_t pkb = 1000 - 50 - 1; const int64_t pmb = fkb * (1000 - 50) - 1; const int64_t pgb = fmb * (1000 - 50) - 1; const int64_t ptb = fgb * (1000 - 50) - 1; FsearchTestSizeParseContext file_names[] = { {"abc", FALSE, 0, 0}, {"mb", FALSE, 0, 0}, {"0m", TRUE, 0, pmb}, {"100", TRUE, 100, 0}, {"100abc", FALSE, 100, 0}, {"100k", TRUE, 100 * fkb, pkb}, {"100K", TRUE, 100 * fkb, pkb}, {"12mb", TRUE, 12 * fmb, pmb}, {"12Mb", TRUE, 12 * fmb, pmb}, {"12mB", TRUE, 12 * fmb, pmb}, {"123MB", TRUE, 123 * fmb, pmb}, {"1234GB", TRUE, 1234 * fgb, pgb}, {"12345TB", TRUE, 12345 * ftb, ptb}, }; for (gint i = 0; i < G_N_ELEMENTS(file_names); ++i) { FsearchTestSizeParseContext *ctx = &file_names[i]; int64_t size_start = 0; int64_t size_end = 0; gboolean res = fsearch_size_parse(ctx->string, &size_start, &size_end); g_assert_true(res == ctx->expected_success); if (res == TRUE) { g_assert_cmpint(size_start, ==, ctx->expected_size); g_assert_cmpint(size_end, ==, ctx->expected_size + ctx->expected_plus); } } } int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); g_test_add_func("/FSearch/size_utils/parse_size", test_parse_size); return g_test_run(); } fsearch-0.2.3/src/tests/test_string_utils.c000066400000000000000000000173371446344336300210360ustar00rootroot00000000000000#include #include #include #include static bool set_locale(const char *locale) { char *current_locale = setlocale(LC_CTYPE, NULL); if (strcmp(locale, current_locale) != 0) { setlocale(LC_CTYPE, locale); current_locale = setlocale(LC_CTYPE, NULL); if (strncmp(current_locale, locale, 2) != 0) { g_printerr("Failed to set locale to %s. Skipping test.\n", locale); return false; } } return true; } void test_str_get_extension(void) { typedef struct { const char *file_name; const char *extension; } FsearchTestExtensionContext; FsearchTestExtensionContext file_names[] = { {".hidden_file", ""}, {"ends_with_dot.", ""}, {"no_extension", ""}, {"has_extension.ext", "ext"}, {"has_short_extension.1", "1"}, {"has.extension.and.dots.in.name.txt", "txt"}, {"", ""}, }; for (gint i = 0; i < G_N_ELEMENTS(file_names); ++i) { FsearchTestExtensionContext *ctx = &file_names[i]; const char *ext = fsearch_string_get_extension(ctx->file_name); g_assert_cmpstr(ext, ==, ctx->extension); } } void test_str_is_empty(void) { typedef struct { const char *string; gboolean string_is_empty; } FsearchTestIsEmptyContext; FsearchTestIsEmptyContext strings[] = { {"non_empty_string", FALSE}, {" non_empty_string_surrounded_by_space ", FALSE}, {" \\ ", FALSE}, {" ", TRUE}, {"", TRUE}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestIsEmptyContext *ctx = &strings[i]; const gboolean is_empty = fsearch_string_is_empty(ctx->string); g_assert_true(is_empty == ctx->string_is_empty); } } void test_str_utf8_has_upper(void) { if (!set_locale("en_US.UTF-8")) { return; } typedef struct { const char *string; gboolean string_has_upper; } FsearchTestHasUpperContext; FsearchTestHasUpperContext strings[] = { {"has_no_upper_character", FALSE}, {" ", FALSE}, {"123abc", FALSE}, {"", FALSE}, {"ä", FALSE}, {"ı", FALSE}, {"Ä", TRUE}, {"İ", TRUE}, {"ABC", TRUE}, {"aBc", TRUE}, {" B ", TRUE}, {" B", TRUE}, {"A ", TRUE}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestHasUpperContext *ctx = &strings[i]; const gboolean has_upper = fsearch_string_utf8_has_upper(ctx->string); if (has_upper != ctx->string_has_upper) { g_print("Expected '%s' to%s have upper case characters!\n", ctx->string, has_upper ? "" : " not"); } g_assert_true(has_upper == ctx->string_has_upper); } } void test_str_has_upper(void) { if (!set_locale("en_US.UTF-8")) { return; } typedef struct { const char *string; gboolean string_has_upper; } FsearchTestHasUpperContext; FsearchTestHasUpperContext strings[] = { {"has_no_upper_character", FALSE}, {" ", FALSE}, {"123abc", FALSE}, {"", FALSE}, {"ä", FALSE}, // non-ascii -> no upper case {"Ä", FALSE}, // non-ascii -> no upper case {"ı", FALSE}, // non-ascii -> no upper case {"İ", FALSE}, // non-ascii -> no upper case {"ABC", TRUE}, {"aBc", TRUE}, {" B ", TRUE}, {" B", TRUE}, {"A ", TRUE}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestHasUpperContext *ctx = &strings[i]; const gboolean has_upper = fsearch_string_has_upper(ctx->string); if (has_upper != ctx->string_has_upper) { g_print("Expected '%s' to%s have upper case characters!\n", ctx->string, has_upper ? "" : " not"); } g_assert_true(has_upper == ctx->string_has_upper); } } void test_str_icase_is_ascii(void) { if (!set_locale("en_US.UTF-8")) { return; } typedef struct { const char *string; gboolean is_ascii; } FsearchTestIsAsciiContext; FsearchTestIsAsciiContext strings[] = { {"is_ascii_string", TRUE}, {"IS_ALSO_ASCII_STRING", TRUE}, {" ", TRUE}, {"123abc", TRUE}, {"", TRUE}, {"aäA", FALSE}, // non-ascii {"aÄA", FALSE}, // non-ascii {"iıI", FALSE}, // non-ascii {"iİI", FALSE}, // non-ascii }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestIsAsciiContext *ctx = &strings[i]; const gboolean is_ascii = fsearch_string_is_ascii_icase(ctx->string); if (is_ascii != ctx->is_ascii) { g_print("Expected '%s' to be an %s string!\n", ctx->string, is_ascii ? "ascii" : "non-ascii"); } g_assert_true(is_ascii == ctx->is_ascii); } } void test_str_wildcard_to_regex(void) { typedef struct { const char *wildcard_expression; const char *expected_regex_expression; } FsearchTestWildcardToRegexContext; FsearchTestWildcardToRegexContext strings[] = { {"", "^$"}, {"abc", "^abc$"}, {"?bc", "^.bc$"}, {"ab?", "^ab.$"}, {"ab.", "^ab\\.$"}, {"abc*", "^abc.*$"}, {"*abc*", "^.*abc.*$"}, {"(abc)", "^\\(abc\\)$"}, {"[abc]", "^\\[abc\\]$"}, {"{abc}", "^\\{abc\\}$"}, {"^abc$", "^\\^abc\\$$"}, {"+abc.", "^\\+abc\\.$"}, {"|abc|", "^\\|abc\\|$"}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestWildcardToRegexContext *ctx = &strings[i]; g_autofree char *regex = fsearch_string_convert_wildcard_to_regex_expression(ctx->wildcard_expression); g_assert_cmpstr(regex, ==, ctx->expected_regex_expression); } } void test_str_starts_with_interval(void) { typedef struct { const char *string; gboolean starts_with_interval; int end_idx; } FsearchTestStartsWithIntervalContext; FsearchTestStartsWithIntervalContext strings[] = { {"does_not_start_with_interval", FALSE, 0}, {".does_not_start_with_interval", FALSE, 0}, {"does-not-start-with-interval-", FALSE, 0}, {"does..not..start..with..interval..", FALSE, 0}, {"-does-start-with-interval", TRUE, 1}, {"--does-start-with-interval", TRUE, 1}, {"..does..start..with..interval", TRUE, 2}, {"....does..start..with..interval", TRUE, 2}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestStartsWithIntervalContext *ctx = &strings[i]; char *end_ptr = NULL; const gboolean starts_with_interval = fsearch_string_starts_with_interval((char *)ctx->string, &end_ptr); if (starts_with_interval != ctx->starts_with_interval) { g_print("Expected '%s' to%s start with a interval!\n", ctx->string, starts_with_interval ? "" : " not"); } g_assert_true(starts_with_interval == ctx->starts_with_interval); g_assert_cmpstr(end_ptr, ==, ctx->string + ctx->end_idx); } } int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); g_test_add_func("/FSearch/string_utils/get_extension", test_str_get_extension); g_test_add_func("/FSearch/string_utils/is_empty", test_str_is_empty); g_test_add_func("/FSearch/string_utils/has_upper", test_str_has_upper); g_test_add_func("/FSearch/string_utils/has_upper_utf8", test_str_utf8_has_upper); g_test_add_func("/FSearch/string_utils/is_ascii_icase", test_str_icase_is_ascii); g_test_add_func("/FSearch/string_utils/convert_wildcard_to_regex", test_str_wildcard_to_regex); g_test_add_func("/FSearch/string_utils/starts_with_interval", test_str_starts_with_interval); return g_test_run(); } fsearch-0.2.3/src/tests/test_time_utils.c000066400000000000000000000042741446344336300204620ustar00rootroot00000000000000#include #include static void test_parse_time_interval(void) { typedef struct { const char *string; gboolean expected_success; time_t expected_time_start; time_t expected_time_end; } FsearchTestTimeIntervalParseContext; FsearchTestTimeIntervalParseContext strings[] = { {"2000abc", FALSE, -1, -1}, {"abc2000", FALSE, -1, -1}, {"abc", FALSE, -1, -1}, {"today", TRUE, -1, -1}, {"yesterday", TRUE, -1, -1}, {"thishour", TRUE, -1, -1}, {"pastyear", TRUE, -1, -1}, {"past4year", FALSE, -1, -1}, {"pastyears", FALSE, -1, -1}, {"past3years", TRUE, -1, -1}, {"lastweek", TRUE, -1, -1}, {"last2weeks", TRUE, -1, -1}, {"lasttwoweeks", TRUE, -1, -1}, {"lastweeks", FALSE, -1, -1}, {"inthelastday", TRUE, -1, -1}, {"4months", TRUE, -1, -1}, {"4month", FALSE, -1, -1}, {"3min", TRUE, -1, -1}, {"3minutes", TRUE, -1, -1}, {"2022", TRUE, -1, -1}, {"22", TRUE, -1, -1}, {"2022-01", TRUE, -1, -1}, {"22-01", TRUE, -1, -1}, {"22-1", TRUE, -1, -1}, {"22-1-1", TRUE, -1, -1}, {"22-1-1 12:00:00", TRUE, -1, -1}, {"2022-01-01 12:00:00", TRUE, -1, -1}, {"2022-01-01 12:00", TRUE, -1, -1}, {"2022-01-01 12", TRUE, -1, -1}, {"2022-01 12:00:00", FALSE, -1, -1}, {"1960", FALSE, -1, -1}, }; for (gint i = 0; i < G_N_ELEMENTS(strings); ++i) { FsearchTestTimeIntervalParseContext *ctx = &strings[i]; time_t time_start = 0; time_t time_end = 0; gboolean res = fsearch_date_time_parse_interval(ctx->string, &time_start, &time_end); g_assert_true(res == ctx->expected_success); if (res == TRUE && ctx->expected_time_start != -1) { g_assert_cmpint(time_start, ==, ctx->expected_time_start); g_assert_cmpint(time_end, ==, ctx->expected_time_end); } } } int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); g_test_add_func("/FSearch/time_utils/parse_time_interval", test_parse_time_interval); return g_test_run(); }