1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-03-12 03:31:37 +00:00

Compare commits

...

217 Commits

Author SHA1 Message Date
4a40b346a4 Update to 4.1.1 2021-03-21 22:50:33 -05:00
035cdc23b1 Update translations from Transifex 2021-03-21 22:45:19 -05:00
fbdb333457 Update a few translation items
- Add Japanese as a selectable language
- Wrap a few missed strings in tr()
- Regenerate .pot files
2021-03-17 20:21:29 -05:00
e36aab177c Add import feature to build.py for translations 2021-03-17 19:55:00 -05:00
77116ba94b Bring in the languages that came incorrect last import again 2021-03-17 19:44:16 -05:00
d7f79aefd2 Remove translations imported incorrectly 2021-03-17 19:40:47 -05:00
4c939f379c Update translations from transifex 2021-03-09 21:16:37 -06:00
d098fe2281 Update translation pot files 2021-03-09 20:38:03 -06:00
09cfbad38d Merge pull request #844 from glubsy/translation_fixes
Fix problematic string for translations
2021-03-09 20:19:08 -06:00
glubsy
528dedd813 Fix problematic string for translations
Some languages have very different phrase syntaxes depending on which word is used.
Better used two separate strings than a dynamically created one.
2021-02-09 01:40:00 +01:00
b30d67b834 Merge pull request #775 from glubsy/PR_typo_fix
Fix label strings
2021-02-02 19:08:28 -06:00
glubsy
3e6e74e2a9 Update URL 2021-01-30 22:17:43 +01:00
glubsy
b919b3ddc8 Fix typo 2021-01-30 04:20:22 +01:00
glubsy
be3862fa8f fix typo 2021-01-29 18:56:29 +01:00
glubsy
da09920553 Update exclusion filter help string 2021-01-29 17:57:44 +01:00
glubsy
2baba3bfa0 Fix selection label 2021-01-29 17:38:37 +01:00
a659a70dbe Add transifex project link to readme 2021-01-28 23:04:44 -06:00
c9e48a5e3b Update pyrcc5 note with new information
New information about the other system package which resolves the dependency
added.
This was brought up in #766.
2021-01-21 19:08:59 -06:00
68711162d1 Add note about pyrcc5 2021-01-21 18:49:44 -06:00
0b0fd36629 Revert "Update ReadMe and requirements"
This reverts commit bf5d151799.
2021-01-21 18:33:40 -06:00
bf5d151799 Update ReadMe and requirements
- On linux (Debian based) pyrcc5 does not make it onto the path so
updating the notes here to take care of this behavior and update requirements
so virtual environment load it correctly.
- Fix #766
2021-01-21 18:13:17 -06:00
e29a427caf Update translation files 2021-01-11 22:38:03 -06:00
95ccbad92b Fix #760, issue with language on windows
Fix the issue related to run.py qsettings not using the same options as
in preferences.py
2021-01-11 21:41:14 -06:00
421a58a61c Merge pull request #758 from serg-z/serg-z/prioritize-dialog-multi-selections
Prioritize dialog: adding/removing multiple items, adding/removing on double clicking an item, drag-n-drop fix
2021-01-11 18:50:15 -06:00
Sergey Zhuravlevich
b5a3313f80 Prioritize dialog: fix drag-n-drop putting items before the last item
When the items in the prioritizations list were drag-n-dropped to the
empty space, the row was equal to -1 and the dropped items ended up
being moved to the position before the last item. Fixing the row value
helps to avoid that behavior.

Signed-off-by: Sergey Zhuravlevich <sergey@zhur.xyz>
2021-01-07 17:42:43 +01:00
Sergey Zhuravlevich
116ac18e13 Prioritize dialog: add/remove criteria on double clicking an item
Signed-off-by: Sergey Zhuravlevich <sergey@zhur.xyz>
2021-01-07 17:42:43 +01:00
Sergey Zhuravlevich
32dcd90b50 Prioritize dialog: allow removing multiple prioritizations at once
Removing prioritizations one-by-one can be tedious. This commit enables
extended selection in the prioritizations list. Multiple items can be
selected with conventional methods, such as holding down Ctrl or Shift
key and clicking the items or holding down the left mouse button and
hovering the cursor over the list. All items also can be selected with
Ctrl+A.

Multiple items drag-n-drop is also possible.

To avoid confusion, the selection in the prioritizations list is cleared
after the items are removed or drag-n-dropped.

Signed-off-by: Sergey Zhuravlevich <sergey@zhur.xyz>
2021-01-07 17:42:30 +01:00
Sergey Zhuravlevich
c2fef8d624 Prioritize dialog: allow adding multiple criteria at once
Adding criteria to the prioritizations list one-by-one can be tedious.
This commit enables extended selection in the criteria list and
implements adding multiple items. Multiple criteria can be selected with
conventional methods, such as holding down Ctrl or Shift keys and
clicking the items or holding down the left mouse button and hovering
the cursor over the list. All items also can be selected with Ctrl+A.

Signed-off-by: Sergey Zhuravlevich <sergey@zhur.xyz>
2021-01-07 17:42:07 +01:00
fd0adc77b3 Update Readme notes for system setup 2021-01-06 12:22:15 -06:00
6a03e1e399 Update URLs 2021-01-05 23:21:44 -06:00
ae51842007 Update README.md 2021-01-05 23:04:42 -06:00
ab6acd9e88 Merge pull request #733 from glubsy/dev
Increment version to 4.1.0
2021-01-05 22:48:21 -06:00
6a2c1eb293 Fix flake8 issues introduced in package.py 2020-12-30 20:04:14 -06:00
7b4c31d262 Update for macos Qt version
- Update package.py to include a pyinstaller based packaging
- Update requirements and requirements-extra
- Add icon for macos
- Add macos.md for instructions
2020-12-30 16:44:27 -06:00
glubsy
5553414205 Fix updating QTableView on input
* When clicking on the test regex button or editing the test input field, the tableView doesn't update its data properly.
* Somehow QTableView.update() doesn't request the data from the model.
* The workaround is to call refresh on the model directly, which will in turn update its view.
2020-12-30 23:18:42 +01:00
glubsy
b138dfad33 Fix exception when testing invalid regex
* If a regex in the table is invalid and failed to compile, its "compiled" property is None.
* Only test against the regex if its compilation worked.
2020-12-30 22:50:42 +01:00
701e6d4bb2 Merge pull request #755 from glubsy/packaging
Fix Debian packaging issues
2020-12-30 14:41:34 -06:00
b44d1652b6 Change windows to use ini in AppData 2020-12-30 12:43:10 -06:00
glubsy
990eaaa797 Update requirements.txt
* Recently, the "hsaudiotag3k" on pypi has changed name slightly
* The actual version is now "1.1.3.post1"
* This avoids errors when invoking `pip -r requirements.txt`
2020-12-30 18:52:37 +01:00
glubsy
348ce95f83 Remove comment
* There is a bug with pyqt5<=5.14 where the table does not update after a call to update() and needs to receive a mouse click event in order to repaint as expected.
* This does not affect Windows only as this is a Qt5 bug.
* This seems to be fixed with pyqt5>=5.15.1.
2020-12-30 18:44:38 +01:00
glubsy
3255bdf0a2 Fix incorrect path 2020-12-30 17:55:53 +01:00
glubsy
1058247b44 Fix missing application icon
Should be placed in /usr/share/pixmaps for .dekstop file to point to it.
2020-12-30 00:24:15 +01:00
glubsy
7414f82e28 Fix missing directory for pixmap symlink in Debian 2020-12-29 23:57:10 +01:00
glubsy
8105bb709f Fix debian src package build
Workaround "dpkg-source: error: can't build with source format '3.0 (native)': native package version may not have a revision" error as mentioned in #753
2020-12-29 23:45:15 +01:00
ec628751af Minor cleanup to Windows.md 2020-12-29 14:56:37 -06:00
glubsy
288023d03e Update changelog 2020-12-29 21:51:16 +01:00
glubsy
7740dfca0e Update Readme 2020-12-29 21:31:36 +01:00
1e12ad8d4c Clean up Makefile & unused files
- Remove requirements-windows.txt as no longer used
- Remove srcpkg.sh as not up to date and not used
- Minor cleanup in makefile
- Update minimum python version to 3.6 in makefile
2020-12-29 14:08:37 -06:00
glubsy
c1d94d6771 Merge branch 'master' into dev 2020-12-29 20:10:42 +01:00
7f691d3c31 Merge pull request #705 from glubsy/exclude_list
Add Exclusion Filters
2020-12-29 12:56:44 -06:00
glubsy
a93bd3aeee Add missing translation hooks 2020-12-29 18:52:22 +01:00
glubsy
39d353d073 Add comment about Win7 bug
* For some reason the table view doesn't update properly after the test string button is clicked nor when the input field is edited
* The table rows only get repainted the rows properly after receiving a mouse click event
* This doesn't happen on Linux
2020-12-29 18:28:30 +01:00
glubsy
b76e86686a Tweak green color on exclude table 2020-12-29 16:41:34 +01:00
glubsy
b5f59d27c9 Brighten up validation color
Dark green lacks contrast against black foreground font
2020-12-29 16:31:03 +01:00
glubsy
f0d3dec517 Fix exclude tests 2020-12-29 16:07:55 +01:00
glubsy
90c7c067b7 Merge branch 'master' into exclude_list 2020-12-29 15:55:44 +01:00
c8cfa954d5 Minor packaging cleanups
- Fix issue with newline in pkg/debian/source/format
- Update pyinstaller requirement to support python 3.8/3.9
2020-12-28 22:51:09 -06:00
glubsy
e533a396fb Remove redundant check 2020-12-29 05:39:26 +01:00
glubsy
4b4cc04e87 Fix directories tests on Windows
Regexes did not match properly because the separator for Windows is '\\'
2020-12-29 05:35:30 +01:00
e822a67b38 Force correct python environment for tox on windows 2020-12-28 21:18:16 -06:00
c30c3400d4 Fix typo in .travis.yml 2020-12-28 21:07:49 -06:00
d539517525 Update Windows Requirements & CI
- Merge windows requirements into requirements.txt and requirements-extra.txt
- Update tox.ini to always use build.py
- Update build.py to have module only option
- Update tox.ini to text python 3.9
- Update .travis.yml to test 3.8 and 3.9 on newer Ubuntu LTS
-Update .travis.yml to work with changes to windows tox
(also update windows to 3.8)
2020-12-28 20:59:01 -06:00
glubsy
07eba09ec2 Fix error after merging branches 2020-12-29 01:01:26 +01:00
glubsy
7f19647e4b Remove unused lines 2020-12-29 00:56:25 +01:00
bf7d720126 Merge pull request #746 from glubsy/PR_iconpath
Make icon path relative
2020-12-28 14:47:34 -06:00
glubsy
6bc619055e Change version to 4.1.0 2020-12-06 20:13:03 +01:00
glubsy
452d1604bd Make icon path relative
* Removes the hardcoded path to the icon in the .desktop file
* Allows themes to override the default application icon (icons are searched for in theme paths first)
* Debian: create symbolic link in /usr/share/pixmaps that points to the icon file
* Arch: the same thing is done by PKGBUILD maintainers downstream
2020-12-06 18:36:52 +01:00
glubsy
680cb581c1 Merge branch 'master' into exclude_list 2020-10-28 03:58:05 +01:00
1d05f8910d Merge pull request #701 from glubsy/PR_ref_row_background_color
Change reference row background color
2020-10-27 21:53:53 -05:00
glubsy
bd09b30468 Merge branch 'master' into PR_ref_row_background_color 2020-10-28 03:50:13 +01:00
8d9933d035 Merge pull request #683 from glubsy/details_dialog_improvements
Add image comparison features to details dialog
2020-10-27 21:28:23 -05:00
glubsy
cf5ba038d7 Remove icon credits from about box
* Moved credits to CREDITS file
* Updated exchange icon with higher hue contrast for better visibility on dark backgrounds
2020-10-28 02:18:41 +01:00
glubsy
59ce740369 Remove print debug statements 2020-10-28 01:50:49 +01:00
glubsy
92feba5f08 Remove obsolete UI setup code 2020-10-28 01:48:39 +01:00
glubsy
a265b71d36 Improve comment reflecting modification of function 2020-10-28 01:45:03 +01:00
8d26c921a0 Merge pull request #706 from glubsy/save_directories
Save/Load directories in Directories
2020-10-27 19:10:11 -05:00
glubsy
32d66cd19b Move up to 4.0.5
* Initial push to 4.0.5 milestone
* Update changelog
2020-10-27 19:38:51 +01:00
glubsy
735ba2fd0e Update error dialog traceback message for users
* Incite users to look for already existing issues
* Also invite them to test the very latest version available first
2020-10-27 18:23:14 +01:00
glubsy
b16b6ecf4d Fix error after merging branches 2020-10-27 18:15:15 +01:00
glubsy
2875448c71 Merge branch 'save_directories' into dev 2020-10-27 16:23:49 +01:00
glubsy
51b76385c0 Merge branch 'exclude_list' into dev 2020-10-27 16:23:43 +01:00
glubsy
b9f8dd6ea0 Merge branch 'PR_ref_row_background_color' into dev 2020-10-27 16:23:35 +01:00
glubsy
6623b04403 Merge branch 'details_dialog_improvements' into dev 2020-10-27 16:23:23 +01:00
glubsy
424d34a7ed Add desktop.ini to filter list 2020-09-04 19:07:07 +02:00
glubsy
2a032d24bc Save/Load directories in Directories
* Add the ability to save / load directories as XML, just like the last_directories.xml which get loaded on program start.
2020-09-04 18:56:25 +02:00
glubsy
b8af2a4eb5 Don't show parent window's context menu on viewers
* When right clicking on image viewers while they are docked, the context menu of the Results window showed up.
* This also enables capture of right click and middle click buttons to drag around images, which solves a conflict with some theme engines that enable left mouse button click to drag a window's position regardless of where the event happens, hence blocking the panning.
* Probably unnecessary to check which button is released.
2020-09-03 01:44:01 +02:00
glubsy
a55e02b36d Fix table maximum size being off by a few pixels
* Sometimes, the splitter doesn't fully reach the table maximum height, and the scrollbar is still displayed on the right because a few pixels are still hidden.
* It seems the splitter handle counts towards the total height of the widget (the table), so we add it to the maximum height of the table
* The scrollbar disappears when we reach just above the actual table's height
2020-09-02 23:45:31 +02:00
glubsy
18c933b4bf Prevent widget from stretching in layout
* In some themes, the color picker widgets get stretched, while the color picker for the details dialog group doesn't.
This should keep them a bit more consistent across themes.
2020-09-02 20:26:23 +02:00
glubsy
ea11a566af Highlight rows when testing regex string
* Add testing feature to Exclusion dialog to allow users to test regexes against an arbitrary string.
* Fixed test suites.
* Improve comments and help dialog box.
2020-09-01 23:02:58 +02:00
glubsy
584e9c92d9 Fix duplicate items in menubar
* When recreating the Results window, the menubar had duplicate items added each time.
* Removing the underlying C++ object is apparently enough to fix the issue.
* SetParent(None) can still be used in case of floating windows
2020-08-31 21:23:53 +02:00
glubsy
4a1641e39d Add test suite, fix bugs 2020-08-31 20:35:56 +02:00
glubsy
26d18945b1 Fix tab indices not aligned with stackwidget's
* The custom QStackWidget+QTabBar class did not manage the tabs properly because the indices in the stackwidget were not aligned with the ones in the tab bar.
* Properly disable exclude list action when it is the currently displayed widget.
* Merge action callbacks for triggering ignore list or exclude list to avoid repeating code and remove unused checks for tab visibility.
* Remove unused SetTabVisible() function.
2020-08-23 16:49:43 +02:00
glubsy
3382bd5e5b Fix crash when recreating Results window/tab
* We need to set the Details Dialog's previous instance to None when recreating a new Results window
otherwise Qt crashes since we are probably dereferencing a dangling reference.
* Also fixes Results tab not showing up when selecting it from the View menu.
2020-08-20 17:12:39 +02:00
glubsy
9f223f3964 Concatenate regexes prio to compilation
* Concatenating regexes into one Pattern might yield better performance under (un)certain conditions.
* Filenames are tested against regexes with no os.sep in them. This may or may not be what we want to do.
And alternative would be to test against the whole (absolute) path of each file, which would filter more agressively.
2020-08-20 02:46:06 +02:00
glubsy
2eaf7e7893 Implement exclude list dialog on the Qt side 2020-08-17 05:54:59 +02:00
glubsy
a26de27c47 Implement dialog and base classes for model/view 2020-08-14 20:19:47 +02:00
glubsy
21e62b7374 Colorize background for reference row
As per issue #647, highlight background color for reference for better readability.
2020-08-12 21:37:29 +02:00
9e6b117327 Merge pull request #698 from glubsy/fix_630
Workaround for #630
2020-08-06 23:16:02 -05:00
glubsy
3333d26557 Try to handle conversion to int or fail gracefully 2020-08-07 00:37:37 +02:00
glubsy
6e81042989 Workaround for #630
* In some cases, the function dump_IFD() in core/pe/exif.py assigns a string instead of an int as "values".
* This value is then used as _cached_orientation in core/pe/photo.py in _get_orientation().
* The method _plat_get_blocks() in qt/pe/photo.py was only expecting an integer for the orientation argument, so we work around the issue for now by ignoring the value if it's a string.
2020-08-06 00:23:49 +02:00
glubsy
470307aa3c Ignore path and filename based on regex
* Added initial draft for test suit
* Fixed small logging bug
2020-08-03 16:19:27 +02:00
glubsy
089f00adb8 Fix typo in class member reference 2020-08-03 16:18:15 +02:00
glubsy
76fbfc2822 Fix adding new Result tab if already existed
* Whenever the Result Window already existed and its tab was in second position, and if the ignore list tab was in 3rd position, asking to show the Result window through the View menu would add a new tab and push the Result tab to the third position (ignore list tab would then become 2nd position).
* Fix view menu Directories entry not switching to index "0" in custom tab bar.
2020-08-02 16:12:47 +02:00
glubsy
866bf996cf Prevent Directories tab from closing on MacOS
* The close button on custom tabs cannot be hidden on MacOS for some reason.
* Prevent the directories tab from closing if the close button was clicked by mistake
2020-08-01 19:35:12 +02:00
glubsy
0104d8922c Fix alignment for combo box's label 2020-08-01 19:11:37 +02:00
glubsy
fbd7c4fe5f Tweak visuals for cache selection item 2020-08-01 19:07:45 +02:00
glubsy
de5e61293b Add stretch to bottom of General pref tab 2020-08-01 19:02:04 +02:00
glubsy
a3e402a3af Group general interface options together
* Use QGroupBox to keep items together on the display tab in the preference dialog just like for the other options.
* It is probably not be necessary to keep these as class members
2020-08-01 18:50:44 +02:00
glubsy
056fa819cc Revert stretching last section in Result window
* It seems that stretching the last section automatically is a bit inconvenient on MacOS as it will grow beyond the window border.
* Keep it as it was before for now until a better solution is devised.
2020-08-01 18:42:46 +02:00
glubsy
3be1ee87c6 Merge branch 'master' into details_dialog_improvements 2020-08-01 18:29:22 +02:00
glubsy
628d772766 Use FormLayout instead of GridLayout
QFormLayout should adhere to each platform's style better. It also simplifies the code a bit since we don't have to setup the labels, etc.
2020-08-01 17:40:31 +02:00
glubsy
acdeb01206 Tweak preference layout for better readability
* We use GroupBoxes to group items together and surround them in a frame
* Remove separator lines to avoid cluttering
* Adjust columns and their stretch factors for better alignment of buttons
2020-08-01 16:42:14 +02:00
ab402d4024 Merge pull request #688 from glubsy/tab_window
Use tabs instead of floating windows
2020-07-31 22:11:31 -05:00
glubsy
d2cdcc989b Fix 1 pixel sized color in color picker buttons
* On Linux, even with 1 pixel size, the button is filled entirely with the color selected
* On MacOS, the color pixmap stays at 1 pixel so we hard code the size to 16x16
2020-08-01 02:09:38 +02:00
glubsy
2620d0080c Fix layout error
* Avoid attempting to add a QLayout to DetailsDialog which already has a layout by removing superfluous layout setup.
2020-07-31 22:37:18 +02:00
glubsy
63a9f00552 Add minor change to variable names 2020-07-31 22:27:18 +02:00
glubsy
87f9317805 Place tab bar below menu bar by default 2020-07-31 16:59:34 +02:00
glubsy
a542168a0d Reorganize view menu entries and keep consistency 2020-07-31 16:57:18 +02:00
glubsy
86e1b55b02 Fix menu items being wrongly disabled
* Add Directories to the View menu.
* View menu items should be disabled properly depending on whether they point to the current page/tab.
* Keep "Load scan results" actions active while viewing pages other than the Directories tab.
2020-07-31 05:08:08 +02:00
glubsy
1b3b40543b Fix ignore list view menu entry being disabled 2020-07-31 03:59:37 +02:00
glubsy
dd6ffe08d7 Add option to place tab bar below main menu 2020-07-31 01:32:29 +02:00
glubsy
11254381a8 Save dock panel position on quit
* Restore the details dialog dock position if it was previously docked (i.e. not floating).
* Since the details_dialog instance was not deleted after closing by default, the previous instances were still saving their own geometry. We now delete them explicitely if we have to recreate a new instance to avoid the signal triggering the callback to save the geometry.
* Since restoreGeometry() and saveGeometry() are only called in our QDockWidget, it should be safe to modify the methods for the Preferences class (in qtlib).
2020-07-30 20:25:20 +02:00
glubsy
23642815f6 Remove unused properties in details table headers 2020-07-30 15:38:37 +02:00
glubsy
7e4f371841 Avoid crash when quitting
* If details dialog failed to be created for some reason, avoid crashing by dereferencing a null pointer
2020-07-30 15:30:09 +02:00
glubsy
9b8637ffc8 Stretch last header section in Result window 2020-07-30 15:16:31 +02:00
glubsy
79613f9b1e Fix crash quitting while details dialog active
* While the details dialog is opened, if quit is triggered, the error message "'DetailsPanel' object has no attribute '_table'" is reported
* A workaround is to cleanly close the dialog before tear down
2020-07-30 03:22:13 +02:00
glubsy
fa54e93236 Add preference to turn off scrollbars in viewers
Refactor preference Display page to only include PE specific preferences in the PE mode.
2020-07-30 03:13:58 +02:00
glubsy
8fb82ae3d8 Merge branch 'master' into tab_window 2020-07-29 21:48:32 +02:00
glubsy
eab5003e61 Add color preference for delta in details table 2020-07-29 21:43:45 +02:00
glubsy
da8c493c9f Toggle visibility of details dialog
* When using the Ctrl+I shortcut or the "Details" button in the Results window, toggle the details dialog on/off.
* This works also while it is docked.
2020-07-29 20:43:18 +02:00
glubsy
9795f14176 Fix title bar toggling on/off when dialog 2020-07-29 20:00:27 +02:00
glubsy
1937120ad7 Fix toggling details view via menu or shortcut
* Using Ctrl+I would toggle the title bar on/off
2020-07-29 04:51:03 +02:00
glubsy
1823575af4 Fix swapping table view columns
We now have only two columns to swap, not 3.
2020-07-29 04:26:40 +02:00
glubsy
7dc9f25b06 Merge branch 'master' into details_dialog_improvements 2020-07-29 04:20:16 +02:00
5502b48089 Merge pull request #685 from glubsy/fix_result_window_action
Fix updating result window action upon creation
2020-07-28 20:05:10 -05:00
f02b66fd54 Merge pull request #682 from glubsy/details_table_tweaks
Colorize details table differences, allow moving around of rows
2020-07-28 19:33:21 -05:00
d2235f9bc9 Merge pull request #694 from glubsy/fix_matchblock_freeze
Work around frozen progress dialog
2020-07-28 18:10:24 -05:00
glubsy
5f5f9232c1 Properly wait for multiprocesses to exit
* Fix for #693
2020-07-28 16:44:06 +02:00
c36fd84512 Merge pull request #691 from glubsy/fix_package_script
Fix error in package script for (Arch) Linux
2020-07-28 00:51:17 -05:00
glubsy
63b2f95cfa Work around frozen progress dialog
* It seems that matchblock.getmatches() returns too early and the (multi-)processes become zombies
* This is a workaround which seems to work by sleeping for one second and avoid zombie processes
2020-07-25 23:37:41 +02:00
glubsy
d193e1fd12 Fix typo in error message 2020-07-24 03:50:08 +02:00
glubsy
f0adf35db4 Add helpful message in build files are missing 2020-07-24 03:48:07 +02:00
glubsy
49a1beb225 Avoid using workarounds in package script
* Just like the Windows package function counterpart, better abort building the package if the help and locale files have not been build instead of ignoring the error
2020-07-24 03:33:13 +02:00
glubsy
f19b5d6ea6 Fix error in package script for (Arch) Linux
* While packaging, the "build/help" and "build/locale" directories are not found.
* Work around the issue with try/except statements.
2020-07-24 03:23:03 +02:00
glubsy
730fadf63f Merge branch 'preferences_tabs' into details_dialog_improvements 2020-07-22 22:41:22 +02:00
glubsy
9ae0d7e5cf Add color picker buttons to preferences dialog
* Buttons display the color currently in use
* Result table uses selected colors accordingly
* Keep items aligned with GridLayouts in preference dialog
* Reordering of items in a more logical manner*
2020-07-22 22:12:46 +02:00
1167519730 Merge pull request #687 from glubsy/ignore_list_wordwrap
Fix word wrap in ignore list dialog
2020-07-21 20:39:14 -05:00
glubsy
cf64565012 Add option to use internal icons in details dialog
* On Windows and MacOS, no idea how themes work so only allow Linux to use their theme icons
* Internal icons are used by default on non-Linux platforms
2020-07-21 03:52:15 +02:00
glubsy
298f659f6e Fix Restore Default Preferences button
* When clicking the "Restore Default" in the preferences dialog, only affect the preferences displayed in the current tab. The hidden tab should not be affected by this button.
2020-07-20 05:04:25 +02:00
glubsy
3539263437 Add tabs to preference dialog. 2020-07-20 03:10:06 +02:00
glubsy
6213d50670 Squashed commit of the following:
commit ac941037ff
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Thu Jul 16 22:21:24 2020 +0200

    Fix resize of top frame not updating scaled pixmap

    * Also limit viewing features such as zoom levels when files have different dimensions
    * GraphicsViewImageViewer is still a bit buggy: the scrollbars are toggled on when the pixmap is null in the reference viewer (we do not use that class right anyway)

commit 733b3b0ed4
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Thu Jul 16 01:31:24 2020 +0200

    Prevent zoom for images of differing dimensions

    * If images are not the same size, prevent zooming features from being used by disabling the normal size button, only enable swap

commit 9168d72f38
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 22:47:32 2020 +0200

    Update preferences on show(), not in constructor

    * If the dialog window shouldn't have a titlebar during construction, update accordingly only when showing to fix Windows displaying a window without titlebar on first show
    * Only save geometry if the window is floating. Otherwise geometry while docked is saved whih gives weird results on subsequent starts, since it may be floating by default anyway (at least on Linux where titlebar being disabled is allowed while floating)
    * Vertical title bar doesn't seem to work on Windows, add note in preferences dialog

commit 75621cc816
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 22:04:19 2020 +0200

    Prevent Windows from floating if no decoration

    * Windows users cannot move a window which has no native decorations. Toggling a dock widget's titlebar off also removes native decorations on a floating window. Until we implement a replacement titlebar by overriding paintEvents, simply force the floating window to go back to docked state after we toggled the titlebar off.

commit 3c816b2f11
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 21:43:01 2020 +0200

    Fix computing and setting offset to 0 for tableview

commit 85d6e05cd4
Merge: 66127d02 3eddeb6a
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 21:25:44 2020 +0200

    Merge branch 'dockable_windows' into details_dialog_improvements_dev

commit 66127d025e
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 20:22:13 2020 +0200

    Add credit for icons used, upscale exchange icon

    * Jason Cho gave his express permission to use the icon (it was made 10 years ago and he doesn't have the source files anymore)
    * Used waifu2x to upscale the icon
    * Used GIMP to draw dark outline around the icon
    * Source files are included

commit 58c675d1fa
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 05:25:47 2020 +0200

    Add custom icons

    * Use custom icons on platforms which do not provide theme
    * Old zoom icons credits to "schollidesign" from icon pack Office and Entertainment (GPL licence).
    * Exchange icon credit to Jason Cho (Unknown license).
    * Use hack to resize viewers on first show() as well

commit 95b8406c7b
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Wed Jul 15 04:14:24 2020 +0200

    Fix scrollbar displayed while splitter maxed out

    * For some reason the table's height is a few pixel longer on Windows so we work around the issue by adding a small offset to the maximum height hint.
    * No idea about MacOS yet but this might need the same treatment.

commit 3eddeb6aeb
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Tue Jul 14 17:37:48 2020 +0200

    Fix ME/SE details dialogs, add preferences

    * Fix ME and SE versions of details dialog not displaying their content properly after change to QDockWidget
    * Add option to toggle titlebar and orientation of titlebar in preferences dialog
    * Fix setting layout on PE details dialog window while layout already set, by removing the self (parent) reference in constructing the QSplitter

commit 56912a7108
Author: glubsy <glubsy@users.noreply.github.com>
Date:   Mon Jul 13 05:06:04 2020 +0200

    Make details dialog dockable
2020-07-16 22:31:54 +02:00
glubsy
ac941037ff Fix resize of top frame not updating scaled pixmap
* Also limit viewing features such as zoom levels when files have different dimensions
* GraphicsViewImageViewer is still a bit buggy: the scrollbars are toggled on when the pixmap is null in the reference viewer (we do not use that class right anyway)
2020-07-16 22:21:24 +02:00
glubsy
733b3b0ed4 Prevent zoom for images of differing dimensions
* If images are not the same size, prevent zooming features from being used by disabling the normal size button, only enable swap
2020-07-16 01:31:24 +02:00
glubsy
9168d72f38 Update preferences on show(), not in constructor
* If the dialog window shouldn't have a titlebar during construction, update accordingly only when showing to fix Windows displaying a window without titlebar on first show
* Only save geometry if the window is floating. Otherwise geometry while docked is saved whih gives weird results on subsequent starts, since it may be floating by default anyway (at least on Linux where titlebar being disabled is allowed while floating)
* Vertical title bar doesn't seem to work on Windows, add note in preferences dialog
2020-07-15 23:00:55 +02:00
glubsy
75621cc816 Prevent Windows from floating if no decoration
* Windows users cannot move a window which has no native decorations. Toggling a dock widget's titlebar off also removes native decorations on a floating window. Until we implement a replacement titlebar by overriding paintEvents, simply force the floating window to go back to docked state after we toggled the titlebar off.
2020-07-15 22:12:19 +02:00
glubsy
3c816b2f11 Fix computing and setting offset to 0 for tableview 2020-07-15 21:48:11 +02:00
glubsy
85d6e05cd4 Merge branch 'dockable_windows' into details_dialog_improvements_dev 2020-07-15 21:25:44 +02:00
glubsy
66127d025e Add credit for icons used, upscale exchange icon
* Jason Cho gave his express permission to use the icon (it was made 10 years ago and he doesn't have the source files anymore)
* Used waifu2x to upscale the icon
* Used GIMP to draw dark outline around the icon
* Source files are included
2020-07-15 20:22:13 +02:00
glubsy
58c675d1fa Add custom icons
* Use custom icons on platforms which do not provide theme
* Old zoom icons credits to "schollidesign" from icon pack Office and Entertainment (GPL licence).
* Exchange icon credit to Jason Cho (Unknown license).
* Use hack to resize viewers on first show() as well
2020-07-15 05:25:47 +02:00
glubsy
95b8406c7b Fix scrollbar displayed while splitter maxed out
* For some reason the table's height is a few pixel longer on Windows so we work around the issue by adding a small offset to the maximum height hint.
* No idea about MacOS yet but this might need the same treatment.
2020-07-15 04:14:24 +02:00
glubsy
3eddeb6aeb Fix ME/SE details dialogs, add preferences
* Fix ME and SE versions of details dialog not displaying their content properly after change to QDockWidget
* Add option to toggle titlebar and orientation of titlebar in preferences dialog
* Fix setting layout on PE details dialog window while layout already set, by removing the self (parent) reference in constructing the QSplitter
2020-07-14 17:37:48 +02:00
glubsy
56912a7108 Make details dialog dockable 2020-07-13 05:06:04 +02:00
glubsy
7ab299874d Merge commit 'b0a256f0' 2020-07-12 17:54:51 +02:00
glubsy
a4265e7fff Use tabs instead of floating windows
* Directories dialog, Results window and ignore list dialog are the three dialog windows which can now be tabbed instead of previously floating.
* Menus are automatically updated depending on the type of dialog as the current tab. Menu items which do not apply to the currently displayed tab are disabled but not hidden.
* The floating windows logic is preserved in case we want to use them again later (I don't see why though)
* There are two different versions of the tab bar: the default one used in TabBarWindow class places the tabs next to the top menu to save screen real estate. The other option is to use TabWindow which uses a regular QTabWidget where the tab bar is placed right on top of the displayed window.
* There is a toggle option in the View menu to hide the tabs, the windows can still be navigated to with the View menu items.
2020-07-12 17:23:35 +02:00
glubsy
db228ec8a3 Fix word wrap in ignore list dialog 2020-07-12 16:17:18 +02:00
glubsy
61fc4f07ae Fix updating result window action upon creation
* Result Window action was not being properly updated
after the ResultWindow had been created.
There was no way of retrieving the window after it had been closed.
2020-07-07 16:54:08 +02:00
glubsy
b0a256f0d4 Fix flake8 minor issues 2020-07-02 23:09:02 +02:00
glubsy
4ee9479a5f Add image comparison features to details dialog
* Add splitter in order to hide the details table.
* Add a toolbar to the Details Dialog window to allow for better image
comparisons: zoom in/out, swap pixmaps in place, best-fit-to-viewport.
Scrollbars and viewports are synchronized.
2020-07-02 22:52:47 +02:00
glubsy
e7b3252534 Cleanup of details table 2020-07-02 22:36:57 +02:00
glubsy
36ab84423a Move buttons into the toolbar class.
* Moved the QToolbar into the image viewer's  translation unit.
* QAction are still attached to the dialog window for shortcuts to work
2020-07-02 22:36:57 +02:00
glubsy
370b582c9b Add working zoom functions to GraphicsView viewers. 2020-07-02 22:36:57 +02:00
glubsy
9f15139d5f Fix view resetting when selecting reference only.
* Needed to ignore the scrollbar changes in the disabled
panel, sine a null pixmap would reset the bars to 0 and affect
the selected viewer.
* Keep view as same scale accross entries from the same group.
2020-07-02 22:36:57 +02:00
glubsy
011939f5ee Keep scale accross files of the same dupe group.
* Also fix scaled down pixmap when updating pixmap in the same group
* Fix ignoring mouse wheel event when max scale has been reached
* Fix toggle scrollbars when asking for normal size
2020-07-02 22:36:57 +02:00
glubsy
977c20f7c4 Add QSplitter to hide TableView in DetailsDialog 2020-07-02 22:36:57 +02:00
glubsy
aa79b31aae Work around resizing down offset by 1 pixel. 2020-07-02 22:36:57 +02:00
glubsy
970bb5e19d Add mostly working ScrollArea imge viewers
* Work around flickering of scrollbars due to
GridLayout resizing on odd pixels by disabling
the scrollbars while BestFit is active
* Also setting minimum column width to work around
the issue above.
* Avoid updating scrollbar values twice by using a
simple boolean lock
2020-07-02 22:36:57 +02:00
glubsy
a706d0ebe5 Implement mostly working ScrollArea viewer
Using a QWidget inside the QScrollArea mostly works
but we only move around the pixmap inside the QWidget,
not the QWidget itself, which doesn't update scrollbars.
Need a better implementation.
2020-07-02 22:36:57 +02:00
glubsy
b7abcf2989 Use native QPixmap swap() method instead of manual setPixmap()
When swapping images, use getters to hopefully get a reference to
each pixmap and swap them within a single slot.
2020-07-02 22:36:57 +02:00
glubsy
8103cb3664 Disable unused methods from controller
* setPixmap() now disables the QWidget automatically if the pixmap passed is null.
* the controller relays repaint events to the other widget
2020-07-02 22:36:57 +02:00
glubsy
c3797918d2 Controller class to decouple from the dialog class
The controller singleton acts as a proxy to relay
signals from each widget to the other
It should help encapsulating things better if we need to
use a different class for image viewers in the future.
2020-07-02 22:36:57 +02:00
glubsy
60ddb9b596 Working synchronized views. 2020-07-02 22:36:57 +02:00
glubsy
a29f3fb407 only update delta when mouse is being dragged to reduce paint events 2020-07-02 22:36:57 +02:00
glubsy
c6162914ed working synchronized panning 2020-07-02 22:36:57 +02:00
glubsy
02bd822ca0 working zoom functions, mouse wheel event 2020-07-02 22:36:57 +02:00
glubsy
ea6197626b drag mouse with ImageViewer class 2020-07-02 22:36:57 +02:00
glubsy
468a736bfb add normal size button 2020-07-02 22:36:57 +02:00
glubsy
f42df12a29 attempt at double click on Qlabel 2020-07-02 22:36:57 +02:00
glubsy
9b48e1851d add zoom and swap buttons to details dialog 2020-07-02 22:36:57 +02:00
glubsy
c973224fa4 Fix flake8 identation warnings 2020-07-01 03:05:59 +02:00
092cf1471b Add details to commented out tests. 2020-06-30 12:25:23 -05:00
glubsy
5cbe342d5b Ignore formatting if no data returned from model 2020-06-30 18:32:20 +02:00
4f252480d3 Fix pywin32 dependency 2020-06-30 00:52:04 -05:00
5cc439d846 Clean up rest of DeprecationWarnings 2020-06-30 00:51:06 -05:00
glubsy
c6f5031dd8 Add color and bold font if difference in model
* Could be better optimized if there is a way to
set those variables earlier in the model or somewhere
in the viewer when it requests the data.
* Right now it compares strings(?) many times for every role
we handle, which is not ideal.
2020-06-30 04:20:27 +02:00
glubsy
eb6946343b Remove superflous top-left corner button 2020-06-30 01:19:25 +02:00
glubsy
e41a6b878c Allow moving rows around in details table
* Replaces the "Attribute" column with a horizontal header
* We ignore the first value in each row from the model and instead
populate a horizontal header with the value in order to allow
2020-06-30 01:02:56 +02:00
ee2671a5f3 More Test and Flake8 Cleanup
- Allow flake8 to check more files as well.
2020-06-27 01:08:12 -05:00
e05c72ad8c Upgrade to latest pytest
- Currently some incompatibility in the hscommon tests, commented out
the ones with issues temporarily
- Also updated some deprecation warnings, still more to do
2020-06-25 23:26:48 -05:00
7658cdafbc Merge pull request #665 from KIAaze/fix_packaging_ubu20.04
Fix packaging on *ubuntu 20.04 (more specifically python version >=3.8)
2020-06-24 18:47:09 -05:00
ecf005fad0 Add distro to requirements and use for packaging
- Add distro as a requirement
- Use distro.id() to get the id as it is a bit cleaner than distro.linux_distribution()
2020-06-24 18:39:06 -05:00
de0542d2a8 Merge pull request #677 from glubsy/fix_folder
Fix standard mode folder comparison view generating "---" in results table
2020-06-24 18:30:30 -05:00
glubsy
bcb26507fe Remove superfluous argument 2020-06-25 01:23:03 +02:00
c35db7f698 Merge pull request #672 from jpvlsmv/variable_fix_trivial
Rename an ell variable into something that flake8 doesn't complain about
2020-06-24 17:18:49 -05:00
d2193328a7 Add e to lin 2020-06-24 17:11:09 -05:00
glubsy
ed64428c80 Add missing file class for folder type.
* results.py doesn't set the proper type for dupes at the line
"file = get_file(path)" so we add it on top
* Perhap it could have been added to _get_fileclasses() in core.app.py too
but I have not tested it
2020-06-24 23:32:04 +02:00
glubsy
e89156e55c Add temporary workaround for bug #676
* In standard mode, for folder comparison, dupe type is wrongly set as core.fs.Folder
while it should be core.se.fs.Folder.
* Catching the NotImplementedError exception redirects to the appropriate handler
* This is only a temporary workaround until a better fix is implemented
2020-06-24 22:01:30 +02:00
4c9309ea9c Add changelog to pkg/debian
May try some other way of doing this later, but for now this will
let the PPA build make some progress.
2020-06-16 20:45:48 -05:00
1c00331bc2 Remove Old Issue Template 2020-06-15 23:28:31 -05:00
427e32f406 Update issue templates
Change to the new issue template flow.
2020-06-15 23:18:13 -05:00
Joe Moore
b048fa5968 Rename an ell variable into something that flake8 doesn't complain about 2020-06-05 19:44:08 -04:00
d5a6ca7488 Merge pull request #669 from jpvlsmv/refactor_ci
Refactor ci a little bit
2020-06-01 11:57:58 -05:00
Joe Moore
d15dea7aa0 Move flake8 requirement out of .txt into tox environment spec 2020-05-30 09:49:17 -04:00
Joe Moore
ccb1c75f22 Call style-checker tox environment 2020-05-30 09:40:23 -04:00
Joe Moore
dffbed8e22 Use build and package scripts on windows 2020-05-30 09:34:03 -04:00
Joe Moore
50ce010212 Move flake8 to a separate tox env 2020-05-30 09:33:35 -04:00
KIAaze
0e8cd32a6e Changed to -F option to build everything (source and binary packages). 2020-05-20 23:15:49 +01:00
KIAaze
ea191a8924 Fixed AttributeError in the packaging script when using python>=3.8.
platform.dist() is deprecated since python version 3.5 and was removed in version 3.8.
Added exception to use the distro package in that case, as suggested by the python documentation:
https://docs.python.org/3.7/library/platform.html?highlight=platform#module-platform
2020-05-20 23:13:11 +01:00
175 changed files with 19920 additions and 7865 deletions

View File

@@ -1,24 +0,0 @@
# Instructions
1. Provide a short descriptive title for the issue. A good example is 'Results window appears off screen.', a non-optimal example is 'Problem with App'.
2. Please fill out either the 'Bug / Issue' or the 'Feature Request' section. Replace values in ` `.
3. Delete these instructions and the unused sections.
# Bug / issue Report
System Information:
- DupeGuru Version: `version`
- Operating System: `Windows/Linux/OSX` `distribution` `version`
If using the source distribution and building yourself also provide (otherwise remove):
- Python Version: `version ex. 3.6.6` `32/64bit`
- Complier: `gcc/llvm/msvc` `version`
## Description
`Provide a detailed description of the issue to help reproduce it. If it happens after a specific sequence of events provide them here.`
## Debug Log
```
If reporting an error provide the debug log and/or the error message information. If the debug log is short < 40 lines you can provide it here, otherwise attach the text file to this issue.
```
# Feature Requests
`Provide a detailed description of the feature.`

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
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. Windows 10 / OSX 10.15 / Ubuntu 20.04 / Arch Linux]
- Version [e.g. 4.1.0]
**Additional context**
Add any other context about the problem here. You may include the debug log although it is normally best to attach it as a file.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature
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.

3
.gitignore vendored
View File

@@ -19,7 +19,10 @@ cocoa/autogen
/qt/*_rc.py /qt/*_rc.py
/help/*/conf.py /help/*/conf.py
/help/*/changelog.rst /help/*/changelog.rst
/transifex
*.pyd *.pyd
*.exe *.exe
*.spec *.spec
.vscode

View File

@@ -12,18 +12,16 @@ matrix:
dist: "xenial" dist: "xenial"
python: "3.7" python: "3.7"
- os: "linux" - os: "linux"
dist: "xenial" dist: "focal"
python: "3.8" python: "3.8"
- os: "linux"
dist: "focal"
python: "3.9"
- os: "windows" - os: "windows"
language: shell language: shell
python: "3.7" python: "3.8"
env: "PATH=/c/python37:/c/python37/Scripts:$PATH" env: "PATH=/c/python38:/c/python38/Scripts:$PATH"
before_install: before_install:
- choco install python --version=3.7.6 - choco install python --version=3.8.6
- choco install make - cp /c/python38/python.exe /c/python38/python3.exe
- cp /c/python37/python.exe /c/python37/python3.exe script: tox -e py38
before_script:
- pip3 install -r requirements-windows.txt
- python3 build.py
script:
- tox -e WINDOWS

View File

@@ -1,6 +1,8 @@
To know who contributed to dupeGuru, you can look at the commit log, but not all contributions To know who contributed to dupeGuru, you can look at the commit log, but not all contributions
result in a commit. This file lists contributors who don't necessarily appear in the commit log. result in a commit. This file lists contributors who don't necessarily appear in the commit log.
* Jason Cho, Exchange icon
* schollidesign (https://findicons.com/pack/1035/human_o2), Zoom-in, Zoom-out, Zoom-best-fit, Zoom-original icons
* Jérôme Cantin, Main icon * Jérôme Cantin, Main icon
* Gregor Tätzner, German localization * Gregor Tätzner, German localization
* Frank Weber, German localization * Frank Weber, German localization

View File

@@ -1,7 +1,7 @@
PYTHON ?= python3 PYTHON ?= python3
PYTHON_VERSION_MINOR := $(shell ${PYTHON} -c "import sys; print(sys.version_info.minor)") PYTHON_VERSION_MINOR := $(shell ${PYTHON} -c "import sys; print(sys.version_info.minor)")
PYRCC5 ?= pyrcc5 PYRCC5 ?= pyrcc5
REQ_MINOR_VERSION = 4 REQ_MINOR_VERSION = 6
PREFIX ?= /usr/local PREFIX ?= /usr/local
# Window compatability via Msys2 # Window compatability via Msys2
@@ -15,7 +15,7 @@ ifeq ($(shell ${PYTHON} -c "import platform; print(platform.system())"), Windows
VENV_OPTIONS = VENV_OPTIONS =
else else
BIN = bin BIN = bin
SO = cpython-3$(PYTHON_VERSION_MINOR)*.so SO = *.so
VENV_OPTIONS = --system-site-packages VENV_OPTIONS = --system-site-packages
endif endif
@@ -43,16 +43,16 @@ mofiles = $(patsubst %.po,%.mo,$(pofiles))
vpath %.po $(localedirs) vpath %.po $(localedirs)
vpath %.mo $(localedirs) vpath %.mo $(localedirs)
all : | env i18n modules qt/dg_rc.py all: | env i18n modules qt/dg_rc.py
@echo "Build complete! You can run dupeGuru with 'make run'" @echo "Build complete! You can run dupeGuru with 'make run'"
run: run:
$(VENV_PYTHON) run.py $(VENV_PYTHON) run.py
pyc: pyc: | env
${PYTHON} -m compileall ${packages} ${VENV_PYTHON} -m compileall ${packages}
reqs : reqs:
ifneq ($(shell test $(PYTHON_VERSION_MINOR) -gt $(REQ_MINOR_VERSION); echo $$?),0) ifneq ($(shell test $(PYTHON_VERSION_MINOR) -gt $(REQ_MINOR_VERSION); echo $$?),0)
$(error "Python 3.${REQ_MINOR_VERSION}+ required. Aborting.") $(error "Python 3.${REQ_MINOR_VERSION}+ required. Aborting.")
endif endif
@@ -63,7 +63,7 @@ endif
@${PYTHON} -c 'import PyQt5' >/dev/null 2>&1 || \ @${PYTHON} -c 'import PyQt5' >/dev/null 2>&1 || \
{ echo "PyQt 5.4+ required. Install it and try again. Aborting"; exit 1; } { echo "PyQt 5.4+ required. Install it and try again. Aborting"; exit 1; }
env : | reqs env: | reqs
ifndef NO_VENV ifndef NO_VENV
@echo "Creating our virtualenv" @echo "Creating our virtualenv"
${PYTHON} -m venv env ${PYTHON} -m venv env
@@ -73,40 +73,26 @@ ifndef NO_VENV
${PYTHON} -m venv --upgrade ${VENV_OPTIONS} env ${PYTHON} -m venv --upgrade ${VENV_OPTIONS} env
endif endif
build/help : | env build/help: | env
$(VENV_PYTHON) build.py --doc $(VENV_PYTHON) build.py --doc
qt/dg_rc.py : qt/dg.qrc qt/dg_rc.py: qt/dg.qrc
$(PYRCC5) qt/dg.qrc > qt/dg_rc.py $(PYRCC5) qt/dg.qrc > qt/dg_rc.py
i18n: $(mofiles) i18n: $(mofiles)
%.mo : %.po %.mo: %.po
msgfmt -o $@ $< msgfmt -o $@ $<
core/pe/_block.$(SO) : core/pe/modules/block.c core/pe/modules/common.c modules: | env
$(PYTHON) hscommon/build_ext.py $^ _block $(VENV_PYTHON) build.py --modules
mv _block.$(SO) core/pe
core/pe/_cache.$(SO) : core/pe/modules/cache.c core/pe/modules/common.c mergepot: | env
$(PYTHON) hscommon/build_ext.py $^ _cache
mv _cache.$(SO) core/pe
qt/pe/_block_qt.$(SO) : qt/pe/modules/block.c
$(PYTHON) hscommon/build_ext.py $^ _block_qt
mv _block_qt.$(SO) qt/pe
modules : core/pe/_block.$(SO) core/pe/_cache.$(SO) qt/pe/_block_qt.$(SO)
mergepot :
$(VENV_PYTHON) build.py --mergepot $(VENV_PYTHON) build.py --mergepot
normpo : normpo: | env
$(VENV_PYTHON) build.py --normpo $(VENV_PYTHON) build.py --normpo
srcpkg :
./scripts/srcpkg.sh
install: all pyc install: all pyc
mkdir -p ${DESTDIR}${PREFIX}/share/dupeguru mkdir -p ${DESTDIR}${PREFIX}/share/dupeguru
cp -rf ${packages} locale ${DESTDIR}${PREFIX}/share/dupeguru cp -rf ${packages} locale ${DESTDIR}${PREFIX}/share/dupeguru
@@ -123,7 +109,7 @@ installdocs: build/help
mkdir -p ${DESTDIR}${PREFIX}/share/dupeguru mkdir -p ${DESTDIR}${PREFIX}/share/dupeguru
cp -rf build/help ${DESTDIR}${PREFIX}/share/dupeguru cp -rf build/help ${DESTDIR}${PREFIX}/share/dupeguru
uninstall : uninstall:
rm -rf "${DESTDIR}${PREFIX}/share/dupeguru" rm -rf "${DESTDIR}${PREFIX}/share/dupeguru"
rm -f "${DESTDIR}${PREFIX}/bin/dupeguru" rm -f "${DESTDIR}${PREFIX}/bin/dupeguru"
rm -f "${DESTDIR}${PREFIX}/share/applications/dupeguru.desktop" rm -f "${DESTDIR}${PREFIX}/share/applications/dupeguru.desktop"
@@ -134,4 +120,4 @@ clean:
-rm locale/*/LC_MESSAGES/*.mo -rm locale/*/LC_MESSAGES/*.mo
-rm core/pe/*.$(SO) qt/pe/*.$(SO) -rm core/pe/*.$(SO) qt/pe/*.$(SO)
.PHONY : clean srcpkg normpo mergepot modules i18n reqs run pyc install uninstall all .PHONY: clean normpo mergepot modules i18n reqs run pyc install uninstall all

View File

@@ -1,19 +1,18 @@
# dupeGuru # dupeGuru
[dupeGuru][dupeguru] is a cross-platform (Linux, OS X, Windows) GUI tool to find duplicate files in [dupeGuru][dupeguru] is a cross-platform (Linux, OS X, Windows) GUI tool to find duplicate files in
a system. It's written mostly in Python 3 and has the peculiarity of using a system. It is written mostly in Python 3 and has the peculiarity of using
[multiple GUI toolkits][cross-toolkit], all using the same core Python code. On OS X, the UI layer [multiple GUI toolkits][cross-toolkit], all using the same core Python code. On OS X, the UI layer
is written in Objective-C and uses Cocoa. On Linux, it's written in Python and uses Qt5. is written in Objective-C and uses Cocoa. On Linux, it is written in Python and uses Qt5.
The Cocoa UI of dupeGuru is hosted in a separate repo: https://github.com/hsoft/dupeguru-cocoa The Cocoa UI of dupeGuru is hosted in a separate repo: https://github.com/arsenetar/dupeguru-cocoa
## Current status ## Current status
Development has been slow this past year, however very close to getting all the different 4.0.4 releases posted. Most of the work this past year (2019) has been towards packaging the application and issues related to that.
Still looking for additional help especially with regards to: Still looking for additional help especially with regards to:
- OSX maintenance (reproducing bugs & cocoa version) * OSX maintenance: reproducing bugs & cocoa version, building package with Cocoa UI.
- Linux maintenance (reproducing bugs) * Linux maintenance: reproducing bugs, maintaining PPA repository, Debian package.
* Translations: updating missing strings, transifex project at https://www.transifex.com/voltaicideas/dupeguru-1
* Documentation: keeping it up-to-date.
## Contents of this folder ## Contents of this folder
@@ -31,26 +30,61 @@ This folder contains the source for dupeGuru. Its documentation is in `help`, bu
## How to build dupeGuru from source ## How to build dupeGuru from source
### Windows ### Windows & macOS specific additional instructions
For windows instructions see the [Windows Instructions](Windows.md). For windows instructions see the [Windows Instructions](Windows.md).
### Prerequisites For macos instructions (qt version) see the [macOS Instructions](macos.md).
* [Python 3.5+][python] ### Prerequisites
* [Python 3.6+][python]
* PyQt5 * PyQt5
### make ### System Setup
When running in a linux based environment the following system packages or equivalents are needed to build:
* python3-pyqt5
* pyqt5-dev-tools (on some systems, see note)
* python3-wheel (for hsaudiotag3k)
* python3-venv (only if using a virtual environment)
* python3-dev
* build-essential
dupeGuru is built with "make":
$ make Note: On some linux systems pyrcc5 is not put on the path when installing python3-pyqt5, this will cause some issues with the resource files (and icons). These systems should have a respective pyqt5-dev-tools package, which should also be installed. The presence of pyrcc5 can be checked with `which pyrcc5`. Debian based systems need the extra package, and Arch does not.
$ make run
### Generate Debian/Ubuntu package To create packages the following are also needed:
* python3-setuptools
* debhelper
$ bash -c "python3 -m venv --system-site-packages env && source env/bin/activate && pip install -r requirements.txt && python3 build.py --clean && python3 package.py" ### Building with Make
dupeGuru comes with a makefile that can be used to build and run:
### Running tests $ make && make run
### Building without Make
$ cd <dupeGuru directory>
$ python3 -m venv --system-site-packages ./env
$ source ./env/bin/activate
$ pip install -r requirements.txt
$ python build.py
$ python run.py
### Generating Debian/Ubuntu package
To generate packages the extra requirements in requirements-extra.txt must be installed, the
steps are as follows:
$ cd <dupeGuru directory>
$ python3 -m venv --system-site-packages ./env
$ source ./env/bin/activate
$ pip install -r requirements.txt -r requirements-extra.txt
$ python build.py --clean
$ python package.py
This can be made a one-liner (once in the directory) as:
$ bash -c "python3 -m venv --system-site-packages env && source env/bin/activate && pip install -r requirements.txt -r requirements-extra.txt && python build.py --clean && python package.py"
## Running tests
The complete test suite is run with [Tox 1.7+][tox]. If you have it installed system-wide, you The complete test suite is run with [Tox 1.7+][tox]. If you have it installed system-wide, you
don't even need to set up a virtualenv. Just `cd` into the root project folder and run `tox`. don't even need to set up a virtualenv. Just `cd` into the root project folder and run `tox`.

View File

@@ -2,26 +2,26 @@
### Prerequisites ### Prerequisites
- [Python 3.5+][python] - [Python 3.6+][python]
- [Visual Studio 2017][vs] or [Visual Studio Build Tools 2017][vsBuildTools] with the Windows 10 SDK - [Visual Studio 2019][vs] or [Visual Studio Build Tools 2019][vsBuildTools] with the Windows 10 SDK
- [nsis][nsis] (for installer creation) - [nsis][nsis] (for installer creation)
- [msys2][msys2] (for using makefile method) - [msys2][msys2] (for using makefile method)
When installing Visual Studio or the Visual Studio Build Tools with the Windows 10 SDK on versions of Windows below 10 be sure to make sure that the Universal CRT is installed before installing Visual studio as noted in the [Windows 10 SDK Notes][win10sdk] and found at [KB2999226][KB2999226]. NOTE: When installing Visual Studio or the Visual Studio Build Tools with the Windows 10 SDK on versions of Windows below 10 be sure to make sure that the Universal CRT is installed before installing Visual studio as noted in the [Windows 10 SDK Notes][win10sdk] and found at [KB2999226][KB2999226].
After installing python it is recommended to update setuptools before compiling packages. To update run (example is for python launcher and 3.7): After installing python it is recommended to update setuptools before compiling packages. To update run (example is for python launcher and 3.8):
$ py -3.7 -m pip install --upgrade setuptools $ py -3.8 -m pip install --upgrade setuptools
More details on setting up python for compiling packages on windows can be found on the [python wiki][pythonWindowsCompilers] More details on setting up python for compiling packages on windows can be found on the [python wiki][pythonWindowsCompilers] Take note of the required vc++ versions.
### With build.py (preferred) ### With build.py (preferred)
To build with a different python version 3.5 vs 3.7 or 32 bit vs 64 bit specify that version instead of -3.7 to the `py` command below. If you want to build additional versions while keeping all virtual environments setup use a different location for each vritual environment. To build with a different python version 3.6 vs 3.8 or 32 bit vs 64 bit specify that version instead of -3.8 to the `py` command below. If you want to build additional versions while keeping all virtual environments setup use a different location for each virtual environment.
$ cd <dupeGuru directory> $ cd <dupeGuru directory>
$ py -3.7 -m venv .\env $ py -3.8 -m venv .\env
$ .\env\Scripts\activate $ .\env\Scripts\activate
$ pip install -r requirements.txt -r requirements-windows.txt $ pip install -r requirements.txt
$ python build.py $ python build.py
$ python run.py $ python run.py
@@ -34,23 +34,21 @@ It is possible to build dupeGuru with the makefile on windows using a compatable
Then the following execution of the makefile should work. Pass the correct value for PYTHON to the makefile if not on the path as python3. Then the following execution of the makefile should work. Pass the correct value for PYTHON to the makefile if not on the path as python3.
$ cd <dupeGuru directory> $ cd <dupeGuru directory>
$ make PYTHON='py -3.7' $ make PYTHON='py -3.8'
$ make run $ make run
NOTE: Install PyQt5 & cx-Freeze with requirements-windows.txt into the venv before running the packaging scripts in the section below.
### Generate Windows Installer Packages ### Generate Windows Installer Packages
You need to use the respective x86 or x64 version of python to build the 32 bit and 64 bit versions. The build scripts will automatically detect the python architecture for you. When using build.py make sure the resulting python works before continuing to package.py. NOTE: package.py looks for the 'makensis' executable in the default location for a 64 bit windows system. Run the following in the respective virtual environment. You need to use the respective x86 or x64 version of python to build the 32 bit and 64 bit versions. The build scripts will automatically detect the python architecture for you. When using build.py make sure the resulting python works before continuing to package.py. NOTE: package.py looks for the 'makensis' executable in the default location for a 64 bit windows system. The extra requirements need to be installed to run packaging: `pip install -r requirements-extra.txt`. Run the following in the respective virtual environment.
$ python package.py $ python package.py
### Running tests ### Running tests
The complete test suite can be run with tox just like on linux. The complete test suite can be run with tox just like on linux. NOTE: The extra requirements need to be installed to run unit tests: `pip install -r requirements-extra.txt`.
[python]: http://www.python.org/ [python]: http://www.python.org/
[nsis]: http://nsis.sourceforge.net/Main_Page [nsis]: http://nsis.sourceforge.net/Main_Page
[vs]: https://www.visualstudio.com/downloads/#visual-studio-community-2017 [vs]: https://www.visualstudio.com/downloads/#visual-studio-community-2019
[vsBuildTools]: https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017 [vsBuildTools]: https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019
[win10sdk]: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk [win10sdk]: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
[KB2999226]: https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows [KB2999226]: https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows
[pythonWindowsCompilers]: https://wiki.python.org/moin/WindowsCompilers [pythonWindowsCompilers]: https://wiki.python.org/moin/WindowsCompilers

View File

@@ -8,6 +8,7 @@ import os
import os.path as op import os.path as op
from optparse import OptionParser from optparse import OptionParser
import shutil import shutil
from pathlib import Path
from setuptools import setup, Extension from setuptools import setup, Extension
@@ -54,6 +55,18 @@ def parse_args():
dest="normpo", dest="normpo",
help="Normalize all PO files (do this before commit).", help="Normalize all PO files (do this before commit).",
) )
parser.add_option(
"--modules",
action="store_true",
dest="modules",
help="Build the python modules.",
)
parser.add_option(
"--importpo",
action="store_true",
dest="importpo",
help="Import all PO files downloaded from transifex.",
)
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
return options return options
@@ -64,7 +77,7 @@ def build_help():
help_basepath = op.join(current_path, "help", "en") help_basepath = op.join(current_path, "help", "en")
help_destpath = op.join(current_path, "build", "help") help_destpath = op.join(current_path, "build", "help")
changelog_path = op.join(current_path, "help", "changelog") changelog_path = op.join(current_path, "help", "changelog")
tixurl = "https://github.com/hsoft/dupeguru/issues/{}" tixurl = "https://github.com/arsenetar/dupeguru/issues/{}"
confrepl = {"language": "en"} confrepl = {"language": "en"}
changelogtmpl = op.join(current_path, "help", "changelog.tmpl") changelogtmpl = op.join(current_path, "help", "changelog.tmpl")
conftmpl = op.join(current_path, "help", "conf.tmpl") conftmpl = op.join(current_path, "help", "conf.tmpl")
@@ -114,13 +127,40 @@ def build_mergepot():
print("Updating .po files using .pot files") print("Updating .po files using .pot files")
loc.merge_pots_into_pos("locale") loc.merge_pots_into_pos("locale")
loc.merge_pots_into_pos(op.join("qtlib", "locale")) loc.merge_pots_into_pos(op.join("qtlib", "locale"))
loc.merge_pots_into_pos(op.join("cocoalib", "locale")) # loc.merge_pots_into_pos(op.join("cocoalib", "locale"))
def build_normpo(): def build_normpo():
loc.normalize_all_pos("locale") loc.normalize_all_pos("locale")
loc.normalize_all_pos(op.join("qtlib", "locale")) loc.normalize_all_pos(op.join("qtlib", "locale"))
loc.normalize_all_pos(op.join("cocoalib", "locale")) # loc.normalize_all_pos(op.join("cocoalib", "locale"))
def build_importpo():
basePath = Path.cwd()
# expect a folder named transifex with all the .po files from the exports
translationsPath = basePath.joinpath("transifex")
# locations where the translation files go
qtlibPath = basePath.joinpath("qtlib", "locale")
localePath = basePath.joinpath("locale")
for translation in translationsPath.iterdir():
# transifex files are named resource_lang.po so split on first '_'
parts = translation.stem.split("_", 1)
resource = parts[0]
language = parts[1]
# make sure qtlib resources go to dedicated folder
if resource == "qtlib":
outputPath = qtlibPath
else:
outputPath = localePath
outputFolder = outputPath.joinpath(language, "LC_MESSAGES")
# create the language folder if it is new
if not outputFolder.exists():
outputFolder.mkdir(parents=True)
# copy the po file over
shutil.copy(translation, outputFolder.joinpath(resource + ".po"))
# normalize files after complete
build_normpo()
def build_pe_modules(): def build_pe_modules():
@@ -143,7 +183,8 @@ def build_pe_modules():
] ]
exts.append(Extension("_block_qt", [op.join("qt", "pe", "modules", "block.c")])) exts.append(Extension("_block_qt", [op.join("qt", "pe", "modules", "block.c")]))
setup( setup(
script_args=["build_ext", "--inplace"], ext_modules=exts, script_args=["build_ext", "--inplace"],
ext_modules=exts,
) )
move_all("_block_qt*", op.join("qt", "pe")) move_all("_block_qt*", op.join("qt", "pe"))
move_all("_block*", op.join("core", "pe")) move_all("_block*", op.join("core", "pe"))
@@ -182,6 +223,10 @@ def main():
build_mergepot() build_mergepot()
elif options.normpo: elif options.normpo:
build_normpo() build_normpo()
elif options.modules:
build_pe_modules()
elif options.importpo:
build_importpo()
else: else:
build_normal() build_normal()

View File

@@ -1,2 +1,2 @@
__version__ = "4.0.4" __version__ = "4.1.1"
__appname__ = "dupeGuru" __appname__ = "dupeGuru"

View File

@@ -26,11 +26,13 @@ from .pe.photo import get_delta_dimensions
from .util import cmp_value, fix_surrogate_encoding from .util import cmp_value, fix_surrogate_encoding
from . import directories, results, export, fs, prioritize from . import directories, results, export, fs, prioritize
from .ignore import IgnoreList from .ignore import IgnoreList
from .exclude import ExcludeDict as ExcludeList
from .scanner import ScanType from .scanner import ScanType
from .gui.deletion_options import DeletionOptions from .gui.deletion_options import DeletionOptions
from .gui.details_panel import DetailsPanel from .gui.details_panel import DetailsPanel
from .gui.directory_tree import DirectoryTree from .gui.directory_tree import DirectoryTree
from .gui.ignore_list_dialog import IgnoreListDialog from .gui.ignore_list_dialog import IgnoreListDialog
from .gui.exclude_list_dialog import ExcludeListDialogCore
from .gui.problem_dialog import ProblemDialog from .gui.problem_dialog import ProblemDialog
from .gui.stats_label import StatsLabel from .gui.stats_label import StatsLabel
@@ -137,7 +139,8 @@ class DupeGuru(Broadcaster):
os.makedirs(self.appdata) os.makedirs(self.appdata)
self.app_mode = AppMode.Standard self.app_mode = AppMode.Standard
self.discarded_file_count = 0 self.discarded_file_count = 0
self.directories = directories.Directories() self.exclude_list = ExcludeList()
self.directories = directories.Directories(self.exclude_list)
self.results = results.Results(self) self.results = results.Results(self)
self.ignore_list = IgnoreList() self.ignore_list = IgnoreList()
# In addition to "app-level" options, this dictionary also holds options that will be # In addition to "app-level" options, this dictionary also holds options that will be
@@ -155,6 +158,7 @@ class DupeGuru(Broadcaster):
self.directory_tree = DirectoryTree(self) self.directory_tree = DirectoryTree(self)
self.problem_dialog = ProblemDialog(self) self.problem_dialog = ProblemDialog(self)
self.ignore_list_dialog = IgnoreListDialog(self) self.ignore_list_dialog = IgnoreListDialog(self)
self.exclude_list_dialog = ExcludeListDialogCore(self)
self.stats_label = StatsLabel(self) self.stats_label = StatsLabel(self)
self.result_table = None self.result_table = None
self.deletion_options = DeletionOptions() self.deletion_options = DeletionOptions()
@@ -259,7 +263,7 @@ class DupeGuru(Broadcaster):
def _create_file(self, path): def _create_file(self, path):
# We add fs.Folder to fileclasses in case the file we're loading contains folder paths. # We add fs.Folder to fileclasses in case the file we're loading contains folder paths.
return fs.get_file(path, self.fileclasses + [fs.Folder]) return fs.get_file(path, self.fileclasses + [se.fs.Folder])
def _get_file(self, str_path): def _get_file(self, str_path):
path = Path(str_path) path = Path(str_path)
@@ -478,9 +482,9 @@ class DupeGuru(Broadcaster):
if not self.results.mark_count: if not self.results.mark_count:
self.view.show_message(MSG_NO_MARKED_DUPES) self.view.show_message(MSG_NO_MARKED_DUPES)
return return
opname = tr("copy") if copy else tr("move") destination = self.view.select_dest_folder(
prompt = tr("Select a directory to {} marked files to").format(opname) tr("Select a directory to copy marked files to") if copy
destination = self.view.select_dest_folder(prompt) else tr("Select a directory to move marked files to"))
if destination: if destination:
desttype = self.options["copymove_dest_type"] desttype = self.options["copymove_dest_type"]
jobid = JobType.Copy if copy else JobType.Move jobid = JobType.Copy if copy else JobType.Move
@@ -539,8 +543,8 @@ class DupeGuru(Broadcaster):
return dupe.get_display_info(group, delta) return dupe.get_display_info(group, delta)
except Exception as e: except Exception as e:
logging.warning( logging.warning(
"Exception on GetDisplayInfo for %s: %s", str(dupe.path), str(e) "Exception (type: %s) on GetDisplayInfo for %s: %s",
) type(e), str(dupe.path), str(e))
return empty_data() return empty_data()
def invoke_custom_command(self): def invoke_custom_command(self):
@@ -587,6 +591,15 @@ class DupeGuru(Broadcaster):
p = op.join(self.appdata, "ignore_list.xml") p = op.join(self.appdata, "ignore_list.xml")
self.ignore_list.load_from_xml(p) self.ignore_list.load_from_xml(p)
self.ignore_list_dialog.refresh() self.ignore_list_dialog.refresh()
p = op.join(self.appdata, "exclude_list.xml")
self.exclude_list.load_from_xml(p)
self.exclude_list_dialog.refresh()
def load_directories(self, filepath):
# Clear out previous entries
self.directories.__init__()
self.directories.load_from_file(filepath)
self.notify("directories_changed")
def load_from(self, filename): def load_from(self, filename):
"""Start an async job to load results from ``filename``. """Start an async job to load results from ``filename``.
@@ -773,6 +786,8 @@ class DupeGuru(Broadcaster):
self.directories.save_to_file(op.join(self.appdata, "last_directories.xml")) self.directories.save_to_file(op.join(self.appdata, "last_directories.xml"))
p = op.join(self.appdata, "ignore_list.xml") p = op.join(self.appdata, "ignore_list.xml")
self.ignore_list.save_to_xml(p) self.ignore_list.save_to_xml(p)
p = op.join(self.appdata, "exclude_list.xml")
self.exclude_list.save_to_xml(p)
self.notify("save_session") self.notify("save_session")
def save_as(self, filename): def save_as(self, filename):
@@ -785,6 +800,16 @@ class DupeGuru(Broadcaster):
except OSError as e: except OSError as e:
self.view.show_message(tr("Couldn't write to file: {}").format(str(e))) self.view.show_message(tr("Couldn't write to file: {}").format(str(e)))
def save_directories_as(self, filename):
"""Save directories in ``filename``.
:param str filename: path of the file to save directories (as XML) to.
"""
try:
self.directories.save_to_file(filename)
except OSError as e:
self.view.show_message(tr("Couldn't write to file: {}").format(str(e)))
def start_scanning(self): def start_scanning(self):
"""Starts an async job to scan for duplicates. """Starts an async job to scan for duplicates.

View File

@@ -54,10 +54,11 @@ class Directories:
""" """
# ---Override # ---Override
def __init__(self): def __init__(self, exclude_list=None):
self._dirs = [] self._dirs = []
# {path: state} # {path: state}
self.states = {} self.states = {}
self._exclude_list = exclude_list
def __contains__(self, path): def __contains__(self, path):
for p in self._dirs: for p in self._dirs:
@@ -76,39 +77,62 @@ class Directories:
# ---Private # ---Private
def _default_state_for_path(self, path): def _default_state_for_path(self, path):
# New logic with regex filters
if self._exclude_list is not None and self._exclude_list.mark_count > 0:
# We iterate even if we only have one item here
for denied_path_re in self._exclude_list.compiled:
if denied_path_re.match(str(path.name)):
return DirectoryState.Excluded
# return # We still use the old logic to force state on hidden dirs
# Override this in subclasses to specify the state of some special folders. # Override this in subclasses to specify the state of some special folders.
if path.name.startswith("."): # hidden if path.name.startswith("."):
return DirectoryState.Excluded return DirectoryState.Excluded
def _get_files(self, from_path, fileclasses, j): def _get_files(self, from_path, fileclasses, j):
for root, dirs, files in os.walk(str(from_path)): for root, dirs, files in os.walk(str(from_path)):
j.check_if_cancelled() j.check_if_cancelled()
root = Path(root) rootPath = Path(root)
state = self.get_state(root) state = self.get_state(rootPath)
if state == DirectoryState.Excluded: if state == DirectoryState.Excluded:
# Recursively get files from folders with lots of subfolder is expensive. However, there # Recursively get files from folders with lots of subfolder is expensive. However, there
# might be a subfolder in this path that is not excluded. What we want to do is to skim # might be a subfolder in this path that is not excluded. What we want to do is to skim
# through self.states and see if we must continue, or we can stop right here to save time # through self.states and see if we must continue, or we can stop right here to save time
if not any(p[: len(root)] == root for p in self.states): if not any(p[: len(rootPath)] == rootPath for p in self.states):
del dirs[:] del dirs[:]
try: try:
if state != DirectoryState.Excluded: if state != DirectoryState.Excluded:
found_files = [ # Old logic
fs.get_file(root + f, fileclasses=fileclasses) for f in files if self._exclude_list is None or not self._exclude_list.mark_count:
] found_files = [fs.get_file(rootPath + f, fileclasses=fileclasses) for f in files]
else:
found_files = []
# print(f"len of files: {len(files)} {files}")
for f in files:
found = False
for expr in self._exclude_list.compiled_files:
if expr.match(f):
found = True
break
if not found:
for expr in self._exclude_list.compiled_paths:
if expr.match(root + os.sep + f):
found = True
break
if not found:
found_files.append(fs.get_file(rootPath + f, fileclasses=fileclasses))
found_files = [f for f in found_files if f is not None] found_files = [f for f in found_files if f is not None]
# In some cases, directories can be considered as files by dupeGuru, which is # In some cases, directories can be considered as files by dupeGuru, which is
# why we have this line below. In fact, there only one case: Bundle files under # why we have this line below. In fact, there only one case: Bundle files under
# OS X... In other situations, this forloop will do nothing. # OS X... In other situations, this forloop will do nothing.
for d in dirs[:]: for d in dirs[:]:
f = fs.get_file(root + d, fileclasses=fileclasses) f = fs.get_file(rootPath + d, fileclasses=fileclasses)
if f is not None: if f is not None:
found_files.append(f) found_files.append(f)
dirs.remove(d) dirs.remove(d)
logging.debug( logging.debug(
"Collected %d files in folder %s", "Collected %d files in folder %s",
len(found_files), len(found_files),
str(from_path), str(rootPath),
) )
for file in found_files: for file in found_files:
file.is_ref = state == DirectoryState.Reference file.is_ref = state == DirectoryState.Reference
@@ -194,8 +218,14 @@ class Directories:
if path in self.states: if path in self.states:
return self.states[path] return self.states[path]
state = self._default_state_for_path(path) or DirectoryState.Normal state = self._default_state_for_path(path) or DirectoryState.Normal
# Save non-default states in cache, necessary for _get_files()
if state != DirectoryState.Normal:
self.states[path] = state
return state
prevlen = 0 prevlen = 0
# we loop through the states to find the longest matching prefix # we loop through the states to find the longest matching prefix
# if the parent has a state in cache, return that state
for p, s in self.states.items(): for p, s in self.states.items():
if p.is_parent_of(path) and len(p) > prevlen: if p.is_parent_of(path) and len(p) > prevlen:
prevlen = len(p) prevlen = len(p)
@@ -224,7 +254,7 @@ class Directories:
root = ET.parse(infile).getroot() root = ET.parse(infile).getroot()
except Exception: except Exception:
return return
for rdn in root.getiterator("root_directory"): for rdn in root.iter("root_directory"):
attrib = rdn.attrib attrib = rdn.attrib
if "path" not in attrib: if "path" not in attrib:
continue continue
@@ -233,7 +263,7 @@ class Directories:
self.add_path(Path(path)) self.add_path(Path(path))
except (AlreadyThereError, InvalidPathError): except (AlreadyThereError, InvalidPathError):
pass pass
for sn in root.getiterator("state"): for sn in root.iter("state"):
attrib = sn.attrib attrib = sn.attrib
if not ("path" in attrib and "value" in attrib): if not ("path" in attrib and "value" in attrib):
continue continue

499
core/exclude.py Normal file
View File

@@ -0,0 +1,499 @@
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
from .markable import Markable
from xml.etree import ElementTree as ET
# TODO: perhaps use regex module for better Unicode support? https://pypi.org/project/regex/
# also https://pypi.org/project/re2/
# TODO update the Result list with newly added regexes if possible
import re
from os import sep
import logging
import functools
from hscommon.util import FileOrPath
from hscommon.plat import ISWINDOWS
import time
default_regexes = [r"^thumbs\.db$", # Obsolete after WindowsXP
r"^desktop\.ini$", # Windows metadata
r"^\.DS_Store$", # MacOS metadata
r"^\.Trash\-.*", # Linux trash directories
r"^\$Recycle\.Bin$", # Windows
r"^\..*", # Hidden files on Unix-like
]
# These are too broad
forbidden_regexes = [r".*", r"\/.*", r".*\/.*", r".*\\\\.*", r".*\..*"]
def timer(func):
@functools.wraps(func)
def wrapper_timer(*args):
start = time.perf_counter_ns()
value = func(*args)
end = time.perf_counter_ns()
print(f"DEBUG: func {func.__name__!r} took {end - start} ns.")
return value
return wrapper_timer
def memoize(func):
func.cache = dict()
@functools.wraps(func)
def _memoize(*args):
if args not in func.cache:
func.cache[args] = func(*args)
return func.cache[args]
return _memoize
class AlreadyThereException(Exception):
"""Expression already in the list"""
def __init__(self, arg="Expression is already in excluded list."):
super().__init__(arg)
class ExcludeList(Markable):
"""A list of lists holding regular expression strings and the compiled re.Pattern"""
# Used to filter out directories and files that we would rather avoid scanning.
# The list() class allows us to preserve item order without too much hassle.
# The downside is we have to compare strings every time we look for an item in the list
# since we use regex strings as keys.
# If _use_union is True, the compiled regexes will be combined into one single
# Pattern instead of separate Patterns which may or may not give better
# performance compared to looping through each Pattern individually.
# ---Override
def __init__(self, union_regex=True):
Markable.__init__(self)
self._use_union = union_regex
# list([str regex, bool iscompilable, re.error exception, Pattern compiled], ...)
self._excluded = []
self._excluded_compiled = set()
self._dirty = True
def __iter__(self):
"""Iterate in order."""
for item in self._excluded:
regex = item[0]
yield self.is_marked(regex), regex
def __contains__(self, item):
return self.isExcluded(item)
def __len__(self):
"""Returns the total number of regexes regardless of mark status."""
return len(self._excluded)
def __getitem__(self, key):
"""Returns the list item corresponding to key."""
for item in self._excluded:
if item[0] == key:
return item
raise KeyError(f"Key {key} is not in exclusion list.")
def __setitem__(self, key, value):
# TODO if necessary
pass
def __delitem__(self, key):
# TODO if necessary
pass
def get_compiled(self, key):
"""Returns the (precompiled) Pattern for key"""
return self.__getitem__(key)[3]
def is_markable(self, regex):
return self._is_markable(regex)
def _is_markable(self, regex):
"""Return the cached result of "compilable" property"""
for item in self._excluded:
if item[0] == regex:
return item[1]
return False # should not be necessary, the regex SHOULD be in there
def _did_mark(self, regex):
self._add_compiled(regex)
def _did_unmark(self, regex):
self._remove_compiled(regex)
def _add_compiled(self, regex):
self._dirty = True
if self._use_union:
return
for item in self._excluded:
# FIXME probably faster to just rebuild the set from the compiled instead of comparing strings
if item[0] == regex:
# no need to test if already present since it's a set()
self._excluded_compiled.add(item[3])
break
def _remove_compiled(self, regex):
self._dirty = True
if self._use_union:
return
for item in self._excluded_compiled:
if regex in item.pattern:
self._excluded_compiled.remove(item)
break
# @timer
@memoize
def _do_compile(self, expr):
try:
return re.compile(expr)
except Exception as e:
raise(e)
# @timer
# @memoize # probably not worth memoizing this one if we memoize the above
def compile_re(self, regex):
compiled = None
try:
compiled = self._do_compile(regex)
except Exception as e:
return False, e, compiled
return True, None, compiled
def error(self, regex):
"""Return the compilation error Exception for regex.
It should have a "msg" attr."""
for item in self._excluded:
if item[0] == regex:
return item[2]
def build_compiled_caches(self, union=False):
if not union:
self._cached_compiled_files =\
[x for x in self._excluded_compiled if not has_sep(x.pattern)]
self._cached_compiled_paths =\
[x for x in self._excluded_compiled if has_sep(x.pattern)]
return
marked_count = [x for marked, x in self if marked]
# If there is no item, the compiled Pattern will be '' and match everything!
if not marked_count:
self._cached_compiled_union_all = []
self._cached_compiled_union_files = []
self._cached_compiled_union_paths = []
else:
# HACK returned as a tuple to get a free iterator and keep interface
# the same regardless of whether the client asked for union or not
self._cached_compiled_union_all =\
(re.compile('|'.join(marked_count)),)
files_marked = [x for x in marked_count if not has_sep(x)]
if not files_marked:
self._cached_compiled_union_files = tuple()
else:
self._cached_compiled_union_files =\
(re.compile('|'.join(files_marked)),)
paths_marked = [x for x in marked_count if has_sep(x)]
if not paths_marked:
self._cached_compiled_union_paths = tuple()
else:
self._cached_compiled_union_paths =\
(re.compile('|'.join(paths_marked)),)
@property
def compiled(self):
"""Should be used by other classes to retrieve the up-to-date list of patterns."""
if self._use_union:
if self._dirty:
self.build_compiled_caches(True)
self._dirty = False
return self._cached_compiled_union_all
return self._excluded_compiled
@property
def compiled_files(self):
"""When matching against filenames only, we probably won't be seeing any
directory separator, so we filter out regexes with os.sep in them.
The interface should be expected to be a generator, even if it returns only
one item (one Pattern in the union case)."""
if self._dirty:
self.build_compiled_caches(True if self._use_union else False)
self._dirty = False
return self._cached_compiled_union_files if self._use_union\
else self._cached_compiled_files
@property
def compiled_paths(self):
"""Returns patterns with only separators in them, for more precise filtering."""
if self._dirty:
self.build_compiled_caches(True if self._use_union else False)
self._dirty = False
return self._cached_compiled_union_paths if self._use_union\
else self._cached_compiled_paths
# ---Public
def add(self, regex, forced=False):
"""This interface should throw exceptions if there is an error during
regex compilation"""
if self.isExcluded(regex):
# This exception should never be ignored
raise AlreadyThereException()
if regex in forbidden_regexes:
raise Exception("Forbidden (dangerous) expression.")
iscompilable, exception, compiled = self.compile_re(regex)
if not iscompilable and not forced:
# This exception can be ignored, but taken into account
# to avoid adding to compiled set
raise exception
else:
self._do_add(regex, iscompilable, exception, compiled)
def _do_add(self, regex, iscompilable, exception, compiled):
# We need to insert at the top
self._excluded.insert(0, [regex, iscompilable, exception, compiled])
@property
def marked_count(self):
"""Returns the number of marked regexes only."""
return len([x for marked, x in self if marked])
def isExcluded(self, regex):
for item in self._excluded:
if regex == item[0]:
return True
return False
def remove(self, regex):
for item in self._excluded:
if item[0] == regex:
self._excluded.remove(item)
self._remove_compiled(regex)
def rename(self, regex, newregex):
if regex == newregex:
return
found = False
was_marked = False
is_compilable = False
for item in self._excluded:
if item[0] == regex:
found = True
was_marked = self.is_marked(regex)
is_compilable, exception, compiled = self.compile_re(newregex)
# We overwrite the found entry
self._excluded[self._excluded.index(item)] =\
[newregex, is_compilable, exception, compiled]
self._remove_compiled(regex)
break
if not found:
return
if is_compilable and was_marked:
# Not marked by default when added, add it back
self.mark(newregex)
# def change_index(self, regex, new_index):
# """Internal list must be a list, not dict."""
# item = self._excluded.pop(regex)
# self._excluded.insert(new_index, item)
def restore_defaults(self):
for _, regex in self:
if regex not in default_regexes:
self.unmark(regex)
for default_regex in default_regexes:
if not self.isExcluded(default_regex):
self.add(default_regex)
self.mark(default_regex)
def load_from_xml(self, infile):
"""Loads the ignore list from a XML created with save_to_xml.
infile can be a file object or a filename.
"""
try:
root = ET.parse(infile).getroot()
except Exception as e:
logging.warning(f"Error while loading {infile}: {e}")
self.restore_defaults()
return e
marked = set()
exclude_elems = (e for e in root if e.tag == "exclude")
for exclude_item in exclude_elems:
regex_string = exclude_item.get("regex")
if not regex_string:
continue
try:
# "forced" avoids compilation exceptions and adds anyway
self.add(regex_string, forced=True)
except AlreadyThereException:
logging.error(f"Regex \"{regex_string}\" \
loaded from XML was already present in the list.")
continue
if exclude_item.get("marked") == "y":
marked.add(regex_string)
for item in marked:
self.mark(item)
def save_to_xml(self, outfile):
"""Create a XML file that can be used by load_from_xml.
outfile can be a file object or a filename."""
root = ET.Element("exclude_list")
# reversed in order to keep order of entries when reloading from xml later
for item in reversed(self._excluded):
exclude_node = ET.SubElement(root, "exclude")
exclude_node.set("regex", str(item[0]))
exclude_node.set("marked", ("y" if self.is_marked(item[0]) else "n"))
tree = ET.ElementTree(root)
with FileOrPath(outfile, "wb") as fp:
tree.write(fp, encoding="utf-8")
class ExcludeDict(ExcludeList):
"""Exclusion list holding a set of regular expressions as keys, the compiled
Pattern, compilation error and compilable boolean as values."""
# Implemntation around a dictionary instead of a list, which implies
# to keep the index of each string-key as its sub-element and keep it updated
# whenever insert/remove is done.
def __init__(self, union_regex=False):
Markable.__init__(self)
self._use_union = union_regex
# { "regex string":
# {
# "index": int,
# "compilable": bool,
# "error": str,
# "compiled": Pattern or None
# }
# }
self._excluded = {}
self._excluded_compiled = set()
self._dirty = True
def __iter__(self):
"""Iterate in order."""
for regex in ordered_keys(self._excluded):
yield self.is_marked(regex), regex
def __getitem__(self, key):
"""Returns the dict item correponding to key"""
return self._excluded.__getitem__(key)
def get_compiled(self, key):
"""Returns the compiled item for key"""
return self.__getitem__(key).get("compiled")
def is_markable(self, regex):
return self._is_markable(regex)
def _is_markable(self, regex):
"""Return the cached result of "compilable" property"""
exists = self._excluded.get(regex)
if exists:
return exists.get("compilable")
return False
def _add_compiled(self, regex):
self._dirty = True
if self._use_union:
return
try:
self._excluded_compiled.add(self._excluded[regex]["compiled"])
except Exception as e:
logging.warning(f"Exception while adding regex {regex} to compiled set: {e}")
return
def is_compilable(self, regex):
"""Returns the cached "compilable" value"""
return self._excluded[regex]["compilable"]
def error(self, regex):
"""Return the compilation error message for regex string"""
return self._excluded.get(regex).get("error")
# ---Public
def _do_add(self, regex, iscompilable, exception, compiled):
# We always insert at the top, so index should be 0
# and other indices should be pushed by one
for value in self._excluded.values():
value["index"] += 1
self._excluded[regex] = {
"index": 0,
"compilable": iscompilable,
"error": exception,
"compiled": compiled
}
def isExcluded(self, regex):
if regex in self._excluded.keys():
return True
return False
def remove(self, regex):
old_value = self._excluded.pop(regex)
# Bring down all indices which where above it
index = old_value["index"]
if index == len(self._excluded) - 1: # we start at 0...
# Old index was at the end, no need to update other indices
self._remove_compiled(regex)
return
for value in self._excluded.values():
if value.get("index") > old_value["index"]:
value["index"] -= 1
self._remove_compiled(regex)
def rename(self, regex, newregex):
if regex == newregex or regex not in self._excluded.keys():
return
was_marked = self.is_marked(regex)
previous = self._excluded.pop(regex)
iscompilable, error, compiled = self.compile_re(newregex)
self._excluded[newregex] = {
"index": previous["index"],
"compilable": iscompilable,
"error": error,
"compiled": compiled
}
self._remove_compiled(regex)
if was_marked and iscompilable:
self.mark(newregex)
def save_to_xml(self, outfile):
"""Create a XML file that can be used by load_from_xml.
outfile can be a file object or a filename.
"""
root = ET.Element("exclude_list")
# reversed in order to keep order of entries when reloading from xml later
reversed_list = []
for key in ordered_keys(self._excluded):
reversed_list.append(key)
for item in reversed(reversed_list):
exclude_node = ET.SubElement(root, "exclude")
exclude_node.set("regex", str(item))
exclude_node.set("marked", ("y" if self.is_marked(item) else "n"))
tree = ET.ElementTree(root)
with FileOrPath(outfile, "wb") as fp:
tree.write(fp, encoding="utf-8")
def ordered_keys(_dict):
"""Returns an iterator over the keys of dictionary sorted by "index" key"""
if not len(_dict):
return
list_of_items = []
for item in _dict.items():
list_of_items.append(item)
list_of_items.sort(key=lambda x: x[1].get("index"))
for item in list_of_items:
yield item[0]
if ISWINDOWS:
def has_sep(x):
return '\\' + sep in x
else:
def has_sep(x):
return sep in x

View File

@@ -0,0 +1,71 @@
# Created On: 2012/03/13
# Copyright 2015 Hardcoded Software (http://www.hardcoded.net)
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
# from hscommon.trans import tr
from .exclude_list_table import ExcludeListTable
import logging
class ExcludeListDialogCore:
def __init__(self, app):
self.app = app
self.exclude_list = self.app.exclude_list # Markable from exclude.py
self.exclude_list_table = ExcludeListTable(self, app) # GUITable, this is the "model"
def restore_defaults(self):
self.exclude_list.restore_defaults()
self.refresh()
def refresh(self):
self.exclude_list_table.refresh()
def remove_selected(self):
for row in self.exclude_list_table.selected_rows:
self.exclude_list_table.remove(row)
self.exclude_list.remove(row.regex)
self.refresh()
def rename_selected(self, newregex):
"""Renames the selected regex to ``newregex``.
If there's more than one selected row, the first one is used.
:param str newregex: The regex to rename the row's regex to.
"""
try:
r = self.exclude_list_table.selected_rows[0]
self.exclude_list.rename(r.regex, newregex)
self.refresh()
return True
except Exception as e:
logging.warning(f"Error while renaming regex to {newregex}: {e}")
return False
def add(self, regex):
try:
self.exclude_list.add(regex)
except Exception as e:
raise(e)
self.exclude_list.mark(regex)
self.exclude_list_table.add(regex)
def test_string(self, test_string):
"""Sets property on row to highlight if its regex matches test_string supplied."""
matched = False
for row in self.exclude_list_table.rows:
compiled_regex = self.exclude_list.get_compiled(row.regex)
if compiled_regex and compiled_regex.match(test_string):
matched = True
row.highlight = True
else:
row.highlight = False
return matched
def reset_rows_highlight(self):
for row in self.exclude_list_table.rows:
row.highlight = False
def show(self):
self.view.show()

View File

@@ -0,0 +1,98 @@
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
from .base import DupeGuruGUIObject
from hscommon.gui.table import GUITable, Row
from hscommon.gui.column import Column, Columns
from hscommon.trans import trget
tr = trget("ui")
class ExcludeListTable(GUITable, DupeGuruGUIObject):
COLUMNS = [
Column("marked", ""),
Column("regex", tr("Regular Expressions"))
]
def __init__(self, exclude_list_dialog, app):
GUITable.__init__(self)
DupeGuruGUIObject.__init__(self, app)
self.columns = Columns(self)
self.dialog = exclude_list_dialog
def rename_selected(self, newname):
row = self.selected_row
if row is None:
return False
row._data = None
return self.dialog.rename_selected(newname)
# --- Virtual
def _do_add(self, regex):
"""(Virtual) Creates a new row, adds it in the table.
Returns ``(row, insert_index)``."""
# Return index 0 to insert at the top
return ExcludeListRow(self, self.dialog.exclude_list.is_marked(regex), regex), 0
def _do_delete(self):
self.dalog.exclude_list.remove(self.selected_row.regex)
# --- Override
def add(self, regex):
row, insert_index = self._do_add(regex)
self.insert(insert_index, row)
self.view.refresh()
def _fill(self):
for enabled, regex in self.dialog.exclude_list:
self.append(ExcludeListRow(self, enabled, regex))
def refresh(self, refresh_view=True):
"""Override to avoid keeping previous selection in case of multiple rows
selected previously."""
self.cancel_edits()
del self[:]
self._fill()
if refresh_view:
self.view.refresh()
class ExcludeListRow(Row):
def __init__(self, table, enabled, regex):
Row.__init__(self, table)
self._app = table.app
self._data = None
self.enabled = str(enabled)
self.regex = str(regex)
self.highlight = False
@property
def data(self):
if self._data is None:
self._data = {"marked": self.enabled, "regex": self.regex}
return self._data
@property
def markable(self):
return self._app.exclude_list.is_markable(self.regex)
@property
def marked(self):
return self._app.exclude_list.is_marked(self.regex)
@marked.setter
def marked(self, value):
if value:
self._app.exclude_list.mark(self.regex)
else:
self._app.exclude_list.unmark(self.regex)
@property
def error(self):
# This assumes error() returns an Exception()
message = self._app.exclude_list.error(self.regex)
if hasattr(message, "msg"):
return self._app.exclude_list.error(self.regex).msg
else:
return message # Exception object

View File

@@ -17,7 +17,7 @@ class IgnoreListDialog:
def __init__(self, app): def __init__(self, app):
self.app = app self.app = app
self.ignore_list = self.app.ignore_list self.ignore_list = self.app.ignore_list
self.ignore_list_table = IgnoreListTable(self) self.ignore_list_table = IgnoreListTable(self) # GUITable
def clear(self): def clear(self):
if not self.ignore_list: if not self.ignore_list:

View File

@@ -72,13 +72,15 @@ class PrioritizeDialog(GUIObject):
# Add selected criteria in criteria_list to prioritization_list. # Add selected criteria in criteria_list to prioritization_list.
if self.criteria_list.selected_index is None: if self.criteria_list.selected_index is None:
return return
crit = self.criteria[self.criteria_list.selected_index] for i in self.criteria_list.selected_indexes:
crit = self.criteria[i]
self.prioritizations.append(crit) self.prioritizations.append(crit)
del crit del crit
self.prioritization_list[:] = [crit.display for crit in self.prioritizations] self.prioritization_list[:] = [crit.display for crit in self.prioritizations]
def remove_selected(self): def remove_selected(self):
self.prioritization_list.remove_selected() self.prioritization_list.remove_selected()
self.prioritization_list.select([])
def perform_reprioritization(self): def perform_reprioritization(self):
self.app.reprioritize_groups(self._sort_key) self.app.reprioritize_groups(self._sort_key)

View File

@@ -254,6 +254,7 @@ def getmatches(pictures, cache_path, threshold, match_scaled=False, j=job.nulljo
ref.dimensions # pre-read dimensions for display in results ref.dimensions # pre-read dimensions for display in results
other.dimensions other.dimensions
result.append(get_match(ref, other, percentage)) result.append(get_match(ref, other, percentage))
pool.join()
return result return result

View File

@@ -241,13 +241,13 @@ class Results(Markable):
self.apply_filter(None) self.apply_filter(None)
root = ET.parse(infile).getroot() root = ET.parse(infile).getroot()
group_elems = list(root.getiterator("group")) group_elems = list(root.iter("group"))
groups = [] groups = []
marked = set() marked = set()
for group_elem in j.iter_with_progress(group_elems, every=100): for group_elem in j.iter_with_progress(group_elems, every=100):
group = engine.Group() group = engine.Group()
dupes = [] dupes = []
for file_elem in group_elem.getiterator("file"): for file_elem in group_elem.iter("file"):
path = file_elem.get("path") path = file_elem.get("path")
words = file_elem.get("words", "") words = file_elem.get("words", "")
if not path: if not path:
@@ -260,7 +260,7 @@ class Results(Markable):
dupes.append(file) dupes.append(file)
if file_elem.get("marked") == "y": if file_elem.get("marked") == "y":
marked.add(file) marked.add(file)
for match_elem in group_elem.getiterator("match"): for match_elem in group_elem.iter("match"):
try: try:
attrs = match_elem.attrib attrs = match_elem.attrib
first_file = dupes[int(attrs["first"])] first_file = dupes[int(attrs["first"])]

View File

@@ -8,7 +8,7 @@ import os
import os.path as op import os.path as op
import logging import logging
from pytest import mark import pytest
from hscommon.path import Path from hscommon.path import Path
import hscommon.conflict import hscommon.conflict
import hscommon.util import hscommon.util
@@ -109,7 +109,7 @@ class TestCaseDupeGuru:
add_fake_files_to_directories(app.directories, [f1, f2]) add_fake_files_to_directories(app.directories, [f1, f2])
app.start_scanning() # no exception app.start_scanning() # no exception
@mark.skipif("not hasattr(os, 'link')") @pytest.mark.skipif("not hasattr(os, 'link')")
def test_ignore_hardlink_matches(self, tmpdir): def test_ignore_hardlink_matches(self, tmpdir):
# If the ignore_hardlink_matches option is set, don't match files hardlinking to the same # If the ignore_hardlink_matches option is set, don't match files hardlinking to the same
# inode. # inode.
@@ -133,8 +133,9 @@ class TestCaseDupeGuru:
class TestCaseDupeGuru_clean_empty_dirs: class TestCaseDupeGuru_clean_empty_dirs:
def pytest_funcarg__do_setup(self, request): @pytest.fixture
monkeypatch = request.getfuncargvalue("monkeypatch") def do_setup(self, request):
monkeypatch = request.getfixturevalue("monkeypatch")
monkeypatch.setattr( monkeypatch.setattr(
hscommon.util, hscommon.util,
"delete_if_empty", "delete_if_empty",
@@ -175,7 +176,8 @@ class TestCaseDupeGuru_clean_empty_dirs:
class TestCaseDupeGuruWithResults: class TestCaseDupeGuruWithResults:
def pytest_funcarg__do_setup(self, request): @pytest.fixture
def do_setup(self, request):
app = TestApp() app = TestApp()
self.app = app.app self.app = app.app
self.objects, self.matches, self.groups = GetTestGroups() self.objects, self.matches, self.groups = GetTestGroups()
@@ -184,7 +186,7 @@ class TestCaseDupeGuruWithResults:
self.dtree = app.dtree self.dtree = app.dtree
self.rtable = app.rtable self.rtable = app.rtable
self.rtable.refresh() self.rtable.refresh()
tmpdir = request.getfuncargvalue("tmpdir") tmpdir = request.getfixturevalue("tmpdir")
tmppath = Path(str(tmpdir)) tmppath = Path(str(tmpdir))
tmppath["foo"].mkdir() tmppath["foo"].mkdir()
tmppath["bar"].mkdir() tmppath["bar"].mkdir()
@@ -430,8 +432,9 @@ class TestCaseDupeGuruWithResults:
class TestCaseDupeGuru_renameSelected: class TestCaseDupeGuru_renameSelected:
def pytest_funcarg__do_setup(self, request): @pytest.fixture
tmpdir = request.getfuncargvalue("tmpdir") def do_setup(self, request):
tmpdir = request.getfixturevalue("tmpdir")
p = Path(str(tmpdir)) p = Path(str(tmpdir))
fp = open(str(p["foo bar 1"]), mode="w") fp = open(str(p["foo bar 1"]), mode="w")
fp.close() fp.close()
@@ -493,8 +496,9 @@ class TestCaseDupeGuru_renameSelected:
class TestAppWithDirectoriesInTree: class TestAppWithDirectoriesInTree:
def pytest_funcarg__do_setup(self, request): @pytest.fixture
tmpdir = request.getfuncargvalue("tmpdir") def do_setup(self, request):
tmpdir = request.getfixturevalue("tmpdir")
p = Path(str(tmpdir)) p = Path(str(tmpdir))
p["sub1"].mkdir() p["sub1"].mkdir()
p["sub2"].mkdir() p["sub2"].mkdir()

View File

@@ -147,6 +147,8 @@ def GetTestGroups():
class TestApp(TestAppBase): class TestApp(TestAppBase):
__test__ = False
def __init__(self): def __init__(self):
def link_gui(gui): def link_gui(gui):
gui.view = self.make_logger() gui.view = self.make_logger()

View File

@@ -1 +1 @@
from hscommon.testutil import pytest_funcarg__app # noqa from hscommon.testutil import app # noqa

View File

@@ -12,6 +12,7 @@ import shutil
from pytest import raises from pytest import raises
from hscommon.path import Path from hscommon.path import Path
from hscommon.testutil import eq_ from hscommon.testutil import eq_
from hscommon.plat import ISWINDOWS
from ..fs import File from ..fs import File
from ..directories import ( from ..directories import (
@@ -20,6 +21,7 @@ from ..directories import (
AlreadyThereError, AlreadyThereError,
InvalidPathError, InvalidPathError,
) )
from ..exclude import ExcludeList, ExcludeDict
def create_fake_fs(rootpath): def create_fake_fs(rootpath):
@@ -341,3 +343,200 @@ def test_default_path_state_override(tmpdir):
d.set_state(p1["foobar"], DirectoryState.Normal) d.set_state(p1["foobar"], DirectoryState.Normal)
eq_(d.get_state(p1["foobar"]), DirectoryState.Normal) eq_(d.get_state(p1["foobar"]), DirectoryState.Normal)
eq_(len(list(d.get_files())), 2) eq_(len(list(d.get_files())), 2)
class TestExcludeList():
def setup_method(self, method):
self.d = Directories(exclude_list=ExcludeList(union_regex=False))
def get_files_and_expect_num_result(self, num_result):
"""Calls get_files(), get the filenames only, print for debugging.
num_result is how many files are expected as a result."""
print(f"EXCLUDED REGEX: paths {self.d._exclude_list.compiled_paths} \
files: {self.d._exclude_list.compiled_files} all: {self.d._exclude_list.compiled}")
files = list(self.d.get_files())
files = [file.name for file in files]
print(f"FINAL FILES {files}")
eq_(len(files), num_result)
return files
def test_exclude_recycle_bin_by_default(self, tmpdir):
regex = r"^.*Recycle\.Bin$"
self.d._exclude_list.add(regex)
self.d._exclude_list.mark(regex)
p1 = Path(str(tmpdir))
p1["$Recycle.Bin"].mkdir()
p1["$Recycle.Bin"]["subdir"].mkdir()
self.d.add_path(p1)
eq_(self.d.get_state(p1["$Recycle.Bin"]), DirectoryState.Excluded)
# By default, subdirs should be excluded too, but this can be overriden separately
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Excluded)
self.d.set_state(p1["$Recycle.Bin"]["subdir"], DirectoryState.Normal)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
def test_exclude_refined(self, tmpdir):
regex1 = r"^\$Recycle\.Bin$"
self.d._exclude_list.add(regex1)
self.d._exclude_list.mark(regex1)
p1 = Path(str(tmpdir))
p1["$Recycle.Bin"].mkdir()
p1["$Recycle.Bin"]["somefile.png"].open("w").close()
p1["$Recycle.Bin"]["some_unwanted_file.jpg"].open("w").close()
p1["$Recycle.Bin"]["subdir"].mkdir()
p1["$Recycle.Bin"]["subdir"]["somesubdirfile.png"].open("w").close()
p1["$Recycle.Bin"]["subdir"]["unwanted_subdirfile.gif"].open("w").close()
p1["$Recycle.Bin"]["subdar"].mkdir()
p1["$Recycle.Bin"]["subdar"]["somesubdarfile.jpeg"].open("w").close()
p1["$Recycle.Bin"]["subdar"]["unwanted_subdarfile.png"].open("w").close()
self.d.add_path(p1["$Recycle.Bin"])
# Filter should set the default state to Excluded
eq_(self.d.get_state(p1["$Recycle.Bin"]), DirectoryState.Excluded)
# The subdir should inherit its parent state
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Excluded)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdar"]), DirectoryState.Excluded)
# Override a child path's state
self.d.set_state(p1["$Recycle.Bin"]["subdir"], DirectoryState.Normal)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
# Parent should keep its default state, and the other child too
eq_(self.d.get_state(p1["$Recycle.Bin"]), DirectoryState.Excluded)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdar"]), DirectoryState.Excluded)
# print(f"get_folders(): {[x for x in self.d.get_folders()]}")
# only the 2 files directly under the Normal directory
files = self.get_files_and_expect_num_result(2)
assert "somefile.png" not in files
assert "some_unwanted_file.jpg" not in files
assert "somesubdarfile.jpeg" not in files
assert "unwanted_subdarfile.png" not in files
assert "somesubdirfile.png" in files
assert "unwanted_subdirfile.gif" in files
# Overriding the parent should enable all children
self.d.set_state(p1["$Recycle.Bin"], DirectoryState.Normal)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdar"]), DirectoryState.Normal)
# all files there
files = self.get_files_and_expect_num_result(6)
assert "somefile.png" in files
assert "some_unwanted_file.jpg" in files
# This should still filter out files under directory, despite the Normal state
regex2 = r".*unwanted.*"
self.d._exclude_list.add(regex2)
self.d._exclude_list.mark(regex2)
files = self.get_files_and_expect_num_result(3)
assert "somefile.png" in files
assert "some_unwanted_file.jpg" not in files
assert "unwanted_subdirfile.gif" not in files
assert "unwanted_subdarfile.png" not in files
if ISWINDOWS:
regex3 = r".*Recycle\.Bin\\.*unwanted.*subdirfile.*"
else:
regex3 = r".*Recycle\.Bin\/.*unwanted.*subdirfile.*"
self.d._exclude_list.rename(regex2, regex3)
assert self.d._exclude_list.error(regex3) is None
# print(f"get_folders(): {[x for x in self.d.get_folders()]}")
# Directory shouldn't change its state here, unless explicitely done by user
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
files = self.get_files_and_expect_num_result(5)
assert "unwanted_subdirfile.gif" not in files
assert "unwanted_subdarfile.png" in files
# using end of line character should only filter the directory, or file ending with subdir
regex4 = r".*subdir$"
self.d._exclude_list.rename(regex3, regex4)
assert self.d._exclude_list.error(regex4) is None
p1["$Recycle.Bin"]["subdar"]["file_ending_with_subdir"].open("w").close()
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Excluded)
files = self.get_files_and_expect_num_result(4)
assert "file_ending_with_subdir" not in files
assert "somesubdarfile.jpeg" in files
assert "somesubdirfile.png" not in files
assert "unwanted_subdirfile.gif" not in files
self.d.set_state(p1["$Recycle.Bin"]["subdir"], DirectoryState.Normal)
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
# print(f"get_folders(): {[x for x in self.d.get_folders()]}")
files = self.get_files_and_expect_num_result(6)
assert "file_ending_with_subdir" not in files
assert "somesubdirfile.png" in files
assert "unwanted_subdirfile.gif" in files
regex5 = r".*subdir.*"
self.d._exclude_list.rename(regex4, regex5)
# Files containing substring should be filtered
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
# The path should not match, only the filename, the "subdir" in the directory name shouldn't matter
p1["$Recycle.Bin"]["subdir"]["file_which_shouldnt_match"].open("w").close()
files = self.get_files_and_expect_num_result(5)
assert "somesubdirfile.png" not in files
assert "unwanted_subdirfile.gif" not in files
assert "file_ending_with_subdir" not in files
assert "file_which_shouldnt_match" in files
def test_japanese_unicode(self, tmpdir):
p1 = Path(str(tmpdir))
p1["$Recycle.Bin"].mkdir()
p1["$Recycle.Bin"]["somerecycledfile.png"].open("w").close()
p1["$Recycle.Bin"]["some_unwanted_file.jpg"].open("w").close()
p1["$Recycle.Bin"]["subdir"].mkdir()
p1["$Recycle.Bin"]["subdir"]["過去白濁物語~]_カラー.jpg"].open("w").close()
p1["$Recycle.Bin"]["思叫物語"].mkdir()
p1["$Recycle.Bin"]["思叫物語"]["なししろ会う前"].open("w").close()
p1["$Recycle.Bin"]["思叫物語"]["堂~ロ"].open("w").close()
self.d.add_path(p1["$Recycle.Bin"])
regex3 = r".*物語.*"
self.d._exclude_list.add(regex3)
self.d._exclude_list.mark(regex3)
# print(f"get_folders(): {[x for x in self.d.get_folders()]}")
eq_(self.d.get_state(p1["$Recycle.Bin"]["思叫物語"]), DirectoryState.Excluded)
files = self.get_files_and_expect_num_result(2)
assert "過去白濁物語~]_カラー.jpg" not in files
assert "なししろ会う前" not in files
assert "堂~ロ" not in files
# using end of line character should only filter that directory, not affecting its files
regex4 = r".*物語$"
self.d._exclude_list.rename(regex3, regex4)
assert self.d._exclude_list.error(regex4) is None
self.d.set_state(p1["$Recycle.Bin"]["思叫物語"], DirectoryState.Normal)
files = self.get_files_and_expect_num_result(5)
assert "過去白濁物語~]_カラー.jpg" in files
assert "なししろ会う前" in files
assert "堂~ロ" in files
def test_get_state_returns_excluded_for_hidden_directories_and_files(self, tmpdir):
# This regex only work for files, not paths
regex = r"^\..*$"
self.d._exclude_list.add(regex)
self.d._exclude_list.mark(regex)
p1 = Path(str(tmpdir))
p1["foobar"].mkdir()
p1["foobar"][".hidden_file.txt"].open("w").close()
p1["foobar"][".hidden_dir"].mkdir()
p1["foobar"][".hidden_dir"]["foobar.jpg"].open("w").close()
p1["foobar"][".hidden_dir"][".hidden_subfile.png"].open("w").close()
self.d.add_path(p1["foobar"])
# It should not inherit its parent's state originally
eq_(self.d.get_state(p1["foobar"][".hidden_dir"]), DirectoryState.Excluded)
self.d.set_state(p1["foobar"][".hidden_dir"], DirectoryState.Normal)
# The files should still be filtered
files = self.get_files_and_expect_num_result(1)
eq_(len(self.d._exclude_list.compiled_paths), 0)
eq_(len(self.d._exclude_list.compiled_files), 1)
assert ".hidden_file.txt" not in files
assert ".hidden_subfile.png" not in files
assert "foobar.jpg" in files
class TestExcludeDict(TestExcludeList):
def setup_method(self, method):
self.d = Directories(exclude_list=ExcludeDict(union_regex=False))
class TestExcludeListunion(TestExcludeList):
def setup_method(self, method):
self.d = Directories(exclude_list=ExcludeList(union_regex=True))
class TestExcludeDictunion(TestExcludeList):
def setup_method(self, method):
self.d = Directories(exclude_list=ExcludeDict(union_regex=True))

282
core/tests/exclude_test.py Normal file
View File

@@ -0,0 +1,282 @@
# Copyright 2016 Hardcoded Software (http://www.hardcoded.net)
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
import io
# import os.path as op
from xml.etree import ElementTree as ET
# from pytest import raises
from hscommon.testutil import eq_
from hscommon.plat import ISWINDOWS
from .base import DupeGuru
from ..exclude import ExcludeList, ExcludeDict, default_regexes, AlreadyThereException
from re import error
# Two slightly different implementations here, one around a list of lists,
# and another around a dictionary.
class TestCaseListXMLLoading:
def setup_method(self, method):
self.exclude_list = ExcludeList()
def test_load_non_existant_file(self):
# Loads the pre-defined regexes
self.exclude_list.load_from_xml("non_existant.xml")
eq_(len(default_regexes), len(self.exclude_list))
# they should also be marked by default
eq_(len(default_regexes), self.exclude_list.marked_count)
def test_save_to_xml(self):
f = io.BytesIO()
self.exclude_list.save_to_xml(f)
f.seek(0)
doc = ET.parse(f)
root = doc.getroot()
eq_("exclude_list", root.tag)
def test_save_and_load(self, tmpdir):
e1 = ExcludeList()
e2 = ExcludeList()
eq_(len(e1), 0)
e1.add(r"one")
e1.mark(r"one")
e1.add(r"two")
tmpxml = str(tmpdir.join("exclude_testunit.xml"))
e1.save_to_xml(tmpxml)
e2.load_from_xml(tmpxml)
# We should have the default regexes
assert r"one" in e2
assert r"two" in e2
eq_(len(e2), 2)
eq_(e2.marked_count, 1)
def test_load_xml_with_garbage_and_missing_elements(self):
root = ET.Element("foobar") # The root element shouldn't matter
exclude_node = ET.SubElement(root, "bogus")
exclude_node.set("regex", "None")
exclude_node.set("marked", "y")
exclude_node = ET.SubElement(root, "exclude")
exclude_node.set("regex", "one")
# marked field invalid
exclude_node.set("markedddd", "y")
exclude_node = ET.SubElement(root, "exclude")
exclude_node.set("regex", "two")
# missing marked field
exclude_node = ET.SubElement(root, "exclude")
exclude_node.set("regex", "three")
exclude_node.set("markedddd", "pazjbjepo")
f = io.BytesIO()
tree = ET.ElementTree(root)
tree.write(f, encoding="utf-8")
f.seek(0)
self.exclude_list.load_from_xml(f)
print(f"{[x for x in self.exclude_list]}")
# only the two "exclude" nodes should be added,
eq_(3, len(self.exclude_list))
# None should be marked
eq_(0, self.exclude_list.marked_count)
class TestCaseDictXMLLoading(TestCaseListXMLLoading):
def setup_method(self, method):
self.exclude_list = ExcludeDict()
class TestCaseListEmpty:
def setup_method(self, method):
self.app = DupeGuru()
self.app.exclude_list = ExcludeList(union_regex=False)
self.exclude_list = self.app.exclude_list
def test_add_mark_and_remove_regex(self):
regex1 = r"one"
regex2 = r"two"
self.exclude_list.add(regex1)
assert(regex1 in self.exclude_list)
self.exclude_list.add(regex2)
self.exclude_list.mark(regex1)
self.exclude_list.mark(regex2)
eq_(len(self.exclude_list), 2)
eq_(len(self.exclude_list.compiled), 2)
compiled_files = [x for x in self.exclude_list.compiled_files]
eq_(len(compiled_files), 2)
self.exclude_list.remove(regex2)
assert(regex2 not in self.exclude_list)
eq_(len(self.exclude_list), 1)
def test_add_duplicate(self):
self.exclude_list.add(r"one")
eq_(1 , len(self.exclude_list))
try:
self.exclude_list.add(r"one")
except Exception:
pass
eq_(1 , len(self.exclude_list))
def test_add_not_compilable(self):
# Trying to add a non-valid regex should not work and raise exception
regex = r"one))"
try:
self.exclude_list.add(regex)
except Exception as e:
# Make sure we raise a re.error so that the interface can process it
eq_(type(e), error)
added = self.exclude_list.mark(regex)
eq_(added, False)
eq_(len(self.exclude_list), 0)
eq_(len(self.exclude_list.compiled), 0)
compiled_files = [x for x in self.exclude_list.compiled_files]
eq_(len(compiled_files), 0)
def test_force_add_not_compilable(self):
"""Used when loading from XML for example"""
regex = r"one))"
try:
self.exclude_list.add(regex, forced=True)
except Exception as e:
# Should not get an exception here unless it's a duplicate regex
raise e
marked = self.exclude_list.mark(regex)
eq_(marked, False) # can't be marked since not compilable
eq_(len(self.exclude_list), 1)
eq_(len(self.exclude_list.compiled), 0)
compiled_files = [x for x in self.exclude_list.compiled_files]
eq_(len(compiled_files), 0)
# adding a duplicate
regex = r"one))"
try:
self.exclude_list.add(regex, forced=True)
except Exception as e:
# we should have this exception, and it shouldn't be added
assert type(e) is AlreadyThereException
eq_(len(self.exclude_list), 1)
eq_(len(self.exclude_list.compiled), 0)
def test_rename_regex(self):
regex = r"one"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
regex_renamed = r"one))"
# Not compilable, can't be marked
self.exclude_list.rename(regex, regex_renamed)
assert regex not in self.exclude_list
assert regex_renamed in self.exclude_list
eq_(self.exclude_list.is_marked(regex_renamed), False)
self.exclude_list.mark(regex_renamed)
eq_(self.exclude_list.is_marked(regex_renamed), False)
regex_renamed_compilable = r"two"
self.exclude_list.rename(regex_renamed, regex_renamed_compilable)
assert regex_renamed_compilable in self.exclude_list
eq_(self.exclude_list.is_marked(regex_renamed), False)
self.exclude_list.mark(regex_renamed_compilable)
eq_(self.exclude_list.is_marked(regex_renamed_compilable), True)
eq_(len(self.exclude_list), 1)
# Should still be marked after rename
regex_compilable = r"three"
self.exclude_list.rename(regex_renamed_compilable, regex_compilable)
eq_(self.exclude_list.is_marked(regex_compilable), True)
def test_restore_default(self):
"""Only unmark previously added regexes and mark the pre-defined ones"""
regex = r"one"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
self.exclude_list.restore_defaults()
eq_(len(default_regexes), self.exclude_list.marked_count)
# added regex shouldn't be marked
eq_(self.exclude_list.is_marked(regex), False)
# added regex shouldn't be in compiled list either
compiled = [x for x in self.exclude_list.compiled]
assert regex not in compiled
# Only default regexes marked and in compiled list
for re in default_regexes:
assert self.exclude_list.is_marked(re)
found = False
for compiled_re in compiled:
if compiled_re.pattern == re:
found = True
if not found:
raise(Exception(f"Default RE {re} not found in compiled list."))
continue
eq_(len(default_regexes), len(self.exclude_list.compiled))
class TestCaseDictEmpty(TestCaseListEmpty):
"""Same, but with dictionary implementation"""
def setup_method(self, method):
self.app = DupeGuru()
self.app.exclude_list = ExcludeDict(union_regex=False)
self.exclude_list = self.app.exclude_list
def split_union(pattern_object):
"""Returns list of strings for each union pattern"""
return [x for x in pattern_object.pattern.split("|")]
class TestCaseCompiledList():
"""Test consistency between union or and separate versions."""
def setup_method(self, method):
self.e_separate = ExcludeList(union_regex=False)
self.e_separate.restore_defaults()
self.e_union = ExcludeList(union_regex=True)
self.e_union.restore_defaults()
def test_same_number_of_expressions(self):
# We only get one union Pattern item in a tuple, which is made of however many parts
eq_(len(split_union(self.e_union.compiled[0])), len(default_regexes))
# We get as many as there are marked items
eq_(len(self.e_separate.compiled), len(default_regexes))
exprs = split_union(self.e_union.compiled[0])
# We should have the same number and the same expressions
eq_(len(exprs), len(self.e_separate.compiled))
for expr in self.e_separate.compiled:
assert expr.pattern in exprs
def test_compiled_files(self):
# is path separator checked properly to yield the output
if ISWINDOWS:
regex1 = r"test\\one\\sub"
else:
regex1 = r"test/one/sub"
self.e_separate.add(regex1)
self.e_separate.mark(regex1)
self.e_union.add(regex1)
self.e_union.mark(regex1)
separate_compiled_dirs = self.e_separate.compiled
separate_compiled_files = [x for x in self.e_separate.compiled_files]
# HACK we need to call compiled property FIRST to generate the cache
union_compiled_dirs = self.e_union.compiled
# print(f"type: {type(self.e_union.compiled_files[0])}")
# A generator returning only one item... ugh
union_compiled_files = [x for x in self.e_union.compiled_files][0]
print(f"compiled files: {union_compiled_files}")
# Separate should give several plus the one added
eq_(len(separate_compiled_dirs), len(default_regexes) + 1)
# regex1 shouldn't be in the "files" version
eq_(len(separate_compiled_files), len(default_regexes))
# Only one Pattern returned, which when split should be however many + 1
eq_(len(split_union(union_compiled_dirs[0])), len(default_regexes) + 1)
# regex1 shouldn't be here either
eq_(len(split_union(union_compiled_files)), len(default_regexes))
class TestCaseCompiledDict(TestCaseCompiledList):
"""Test the dictionary version"""
def setup_method(self, method):
self.e_separate = ExcludeDict(union_regex=False)
self.e_separate.restore_defaults()
self.e_union = ExcludeDict(union_regex=True)
self.e_union.restore_defaults()

View File

@@ -414,12 +414,12 @@ class TestCaseResultsMarkings:
f.seek(0) f.seek(0)
doc = ET.parse(f) doc = ET.parse(f)
root = doc.getroot() root = doc.getroot()
g1, g2 = root.getiterator("group") g1, g2 = root.iter("group")
d1, d2, d3 = g1.getiterator("file") d1, d2, d3 = g1.iter("file")
eq_("n", d1.get("marked")) eq_("n", d1.get("marked"))
eq_("n", d2.get("marked")) eq_("n", d2.get("marked"))
eq_("y", d3.get("marked")) eq_("y", d3.get("marked"))
d1, d2 = g2.getiterator("file") d1, d2 = g2.iter("file")
eq_("n", d1.get("marked")) eq_("n", d1.get("marked"))
eq_("y", d2.get("marked")) eq_("y", d2.get("marked"))

View File

@@ -4,6 +4,8 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
import pytest
from hscommon.jobprogress import job from hscommon.jobprogress import job
from hscommon.path import Path from hscommon.path import Path
from hscommon.testutil import eq_ from hscommon.testutil import eq_
@@ -33,10 +35,11 @@ class NamedObject:
no = NamedObject no = NamedObject
def pytest_funcarg__fake_fileexists(request): @pytest.fixture
def fake_fileexists(request):
# This is a hack to avoid invalidating all previous tests since the scanner started to test # This is a hack to avoid invalidating all previous tests since the scanner started to test
# for file existence before doing the match grouping. # for file existence before doing the match grouping.
monkeypatch = request.getfuncargvalue("monkeypatch") monkeypatch = request.getfixturevalue("monkeypatch")
monkeypatch.setattr(Path, "exists", lambda _: True) monkeypatch.setattr(Path, "exists", lambda _: True)

View File

@@ -1,3 +1,38 @@
=== 4.1.1 (2021-03-21)
* Add Japanese
* Update internationalization and translations to be up to date with current UI.
* Minor translation and UI language updates
* Fix language selection issues on Windows (#760)
* Add some additional notes about builds on Linux based systems
* Add import from transifex export to build.py
=== 4.1.0 (2020-12-29)
* Use tabs instead of separate windows (#688)
* Show the shortcut for "mark selected" in results dialog (#656, #641)
* Add image comparison features to details dialog (#683)
* Add the ability to use regex based exclusion filters (#705)
* Change reference row background color, and allow user to adjust the color (#701)
* Save / Load directories as XML (#706)
* Workaround for EXIF IFD type mismatch in parsing function (#630, #698)
* Progress dialog stuck at "Verified X/X matches" (#693, #694)
* Fix word wrap in ignore list dialog (#687)
* Fix issue with result window action on creation (#685)
* Colorize details table differences, allow moving rows (#682)
* Fix loading Result of 'Scan Type: Folders' shows only '---' in every table cell (#677, #676)
* Fix issue with details and results dialog row trimming (#655, #654)
* Add option to enable/disable bold font (#646, #314)
* Use relative icon path for themes to override more easily (#746)
* Fix issues with Python 3.8 compatibility (#665)
* Fix flake8 issues (#672)
* Update to use newer pytest and expand flake8 checking, cleanup various Deprecation Warnings
* Add warnings to packaging script when files are not built (#691)
* Use relative icon path for themes to override more easily (#746)
* Update Packaging for Ubuntu (#593)
* Minor Build Updates (#627, #575, #628, #614)
* Update CI builds and add windows CI (#572, #669)
=== 4.0.4 (2019-05-13) === 4.0.4 (2019-05-13)
* Update qt/platform.py to support other Unix style OSes (#444) * Update qt/platform.py to support other Unix style OSes (#444)

View File

@@ -295,7 +295,7 @@ def build_debian_changelog(
return [s.strip() for s in result if s.strip()] return [s.strip() for s in result if s.strip()]
ENTRY_MODEL = ( ENTRY_MODEL = (
"{pkg} ({version}-1) {distribution}; urgency=low\n\n{changes}\n " "{pkg} ({version}) {distribution}; urgency=low\n\n{changes}\n "
"-- Virgil Dupras <hsoft@hardcoded.net> {date}\n\n" "-- Virgil Dupras <hsoft@hardcoded.net> {date}\n\n"
) )
CHANGE_MODEL = " * {description}\n" CHANGE_MODEL = " * {description}\n"
@@ -557,7 +557,7 @@ def fix_qt_resource_file(path):
with open(path, "rb") as fp: with open(path, "rb") as fp:
contents = fp.read() contents = fp.read()
lines = contents.split(b"\n") lines = contents.split(b"\n")
lines = [l for l in lines if not l.startswith(b"#")] lines = [line for line in lines if not line.startswith(b"#")]
with open(path, "wb") as fp: with open(path, "wb") as fp:
fp.write(b"\n".join(lines)) fp.write(b"\n".join(lines))

View File

@@ -6,7 +6,7 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
from collections import Sequence, MutableSequence from collections.abc import Sequence, MutableSequence
from .base import GUIObject from .base import GUIObject

View File

@@ -6,7 +6,8 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
from collections import MutableSequence, namedtuple from collections.abc import MutableSequence
from collections import namedtuple
from .base import GUIObject from .base import GUIObject
from .selectable_list import Selectable from .selectable_list import Selectable

View File

@@ -4,7 +4,7 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
from collections import MutableSequence from collections.abc import MutableSequence
from .base import GUIObject from .base import GUIObject

View File

@@ -45,7 +45,10 @@ def generate_pot(folders, outpath, keywords, merge=False):
pygettext.main(pyfiles, outpath=genpath, keywords=keywords) pygettext.main(pyfiles, outpath=genpath, keywords=keywords)
if merge: if merge:
merge_po_and_preserve(genpath, outpath) merge_po_and_preserve(genpath, outpath)
try:
os.remove(genpath) os.remove(genpath)
except Exception:
print("Exception while removing temporary folder %s\n", genpath)
def compile_all_po(base_folder): def compile_all_po(base_folder):

View File

@@ -257,6 +257,6 @@ def log_io_error(func):
msg = 'Error "{0}" during operation "{1}" on "{2}": "{3}"' msg = 'Error "{0}" during operation "{1}" on "{2}": "{3}"'
classname = e.__class__.__name__ classname = e.__class__.__name__
funcname = func.__name__ funcname = func.__name__
logging.warn(msg.format(classname, funcname, str(path), str(e))) logging.warning(msg.format(classname, funcname, str(path), str(e)))
return wrapper return wrapper

View File

@@ -6,7 +6,15 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
from ..conflict import * import pytest
from ..conflict import (
get_conflicted_name,
get_unconflicted_name,
is_conflicted,
smart_copy,
smart_move,
)
from ..path import Path from ..path import Path
from ..testutil import eq_ from ..testutil import eq_
@@ -59,8 +67,9 @@ class TestCase_IsConflicted:
class TestCase_move_copy: class TestCase_move_copy:
def pytest_funcarg__do_setup(self, request): @pytest.fixture
tmpdir = request.getfuncargvalue("tmpdir") def do_setup(self, request):
tmpdir = request.getfixturevalue("tmpdir")
self.path = Path(str(tmpdir)) self.path = Path(str(tmpdir))
self.path["foo"].open("w").close() self.path["foo"].open("w").close()
self.path["bar"].open("w").close() self.path["bar"].open("w").close()

View File

@@ -28,8 +28,8 @@ class HelloRepeater(Repeater):
def create_pair(): def create_pair():
b = Broadcaster() b = Broadcaster()
l = HelloListener(b) listener = HelloListener(b)
return b, l return b, listener
def test_disconnect_during_notification(): def test_disconnect_during_notification():
@@ -60,53 +60,53 @@ def test_disconnect_during_notification():
def test_disconnect(): def test_disconnect():
# After a disconnect, the listener doesn't hear anything. # After a disconnect, the listener doesn't hear anything.
b, l = create_pair() b, listener = create_pair()
l.connect() listener.connect()
l.disconnect() listener.disconnect()
b.notify("hello") b.notify("hello")
eq_(l.hello_count, 0) eq_(listener.hello_count, 0)
def test_disconnect_when_not_connected(): def test_disconnect_when_not_connected():
# When disconnecting an already disconnected listener, nothing happens. # When disconnecting an already disconnected listener, nothing happens.
b, l = create_pair() b, listener = create_pair()
l.disconnect() listener.disconnect()
def test_not_connected_on_init(): def test_not_connected_on_init():
# A listener is not initialized connected. # A listener is not initialized connected.
b, l = create_pair() b, listener = create_pair()
b.notify("hello") b.notify("hello")
eq_(l.hello_count, 0) eq_(listener.hello_count, 0)
def test_notify(): def test_notify():
# The listener listens to the broadcaster. # The listener listens to the broadcaster.
b, l = create_pair() b, listener = create_pair()
l.connect() listener.connect()
b.notify("hello") b.notify("hello")
eq_(l.hello_count, 1) eq_(listener.hello_count, 1)
def test_reconnect(): def test_reconnect():
# It's possible to reconnect a listener after disconnection. # It's possible to reconnect a listener after disconnection.
b, l = create_pair() b, listener = create_pair()
l.connect() listener.connect()
l.disconnect() listener.disconnect()
l.connect() listener.connect()
b.notify("hello") b.notify("hello")
eq_(l.hello_count, 1) eq_(listener.hello_count, 1)
def test_repeater(): def test_repeater():
b = Broadcaster() b = Broadcaster()
r = HelloRepeater(b) r = HelloRepeater(b)
l = HelloListener(r) listener = HelloListener(r)
r.connect() r.connect()
l.connect() listener.connect()
b.notify("hello") b.notify("hello")
eq_(r.hello_count, 1) eq_(r.hello_count, 1)
eq_(l.hello_count, 1) eq_(listener.hello_count, 1)
def test_repeater_with_repeated_notifications(): def test_repeater_with_repeated_notifications():
@@ -124,15 +124,15 @@ def test_repeater_with_repeated_notifications():
b = Broadcaster() b = Broadcaster()
r = MyRepeater(b) r = MyRepeater(b)
l = HelloListener(r) listener = HelloListener(r)
r.connect() r.connect()
l.connect() listener.connect()
b.notify("hello") b.notify("hello")
b.notify( b.notify(
"foo" "foo"
) # if the repeater repeated this notif, we'd get a crash on HelloListener ) # if the repeater repeated this notif, we'd get a crash on HelloListener
eq_(r.hello_count, 1) eq_(r.hello_count, 1)
eq_(l.hello_count, 1) eq_(listener.hello_count, 1)
eq_(r.foo_count, 1) eq_(r.foo_count, 1)
@@ -140,18 +140,18 @@ def test_repeater_doesnt_try_to_dispatch_to_self_if_it_cant():
# if a repeater doesn't handle a particular message, it doesn't crash and simply repeats it. # if a repeater doesn't handle a particular message, it doesn't crash and simply repeats it.
b = Broadcaster() b = Broadcaster()
r = Repeater(b) # doesnt handle hello r = Repeater(b) # doesnt handle hello
l = HelloListener(r) listener = HelloListener(r)
r.connect() r.connect()
l.connect() listener.connect()
b.notify("hello") # no crash b.notify("hello") # no crash
eq_(l.hello_count, 1) eq_(listener.hello_count, 1)
def test_bind_messages(): def test_bind_messages():
b, l = create_pair() b, listener = create_pair()
l.bind_messages({"foo", "bar"}, l.hello) listener.bind_messages({"foo", "bar"}, listener.hello)
l.connect() listener.connect()
b.notify("foo") b.notify("foo")
b.notify("bar") b.notify("bar")
b.notify("hello") # Normal dispatching still work b.notify("hello") # Normal dispatching still work
eq_(l.hello_count, 3) eq_(listener.hello_count, 3)

View File

@@ -9,14 +9,15 @@
import sys import sys
import os import os
from pytest import raises, mark import pytest
from ..path import Path, pathify from ..path import Path, pathify
from ..testutil import eq_ from ..testutil import eq_
def pytest_funcarg__force_ossep(request): @pytest.fixture
monkeypatch = request.getfuncargvalue("monkeypatch") def force_ossep(request):
monkeypatch = request.getfixturevalue("monkeypatch")
monkeypatch.setattr(os, "sep", "/") monkeypatch.setattr(os, "sep", "/")
@@ -50,7 +51,7 @@ def test_init_with_tuple_and_list(force_ossep):
def test_init_with_invalid_value(force_ossep): def test_init_with_invalid_value(force_ossep):
try: try:
path = Path(42) path = Path(42) # noqa: F841
assert False assert False
except TypeError: except TypeError:
pass pass
@@ -142,8 +143,8 @@ def test_path_slice(force_ossep):
eq_((), foobar[:foobar]) eq_((), foobar[:foobar])
abcd = Path("a/b/c/d") abcd = Path("a/b/c/d")
a = Path("a") a = Path("a")
b = Path("b") b = Path("b") # noqa: #F841
c = Path("c") c = Path("c") # noqa: #F841
d = Path("d") d = Path("d")
z = Path("z") z = Path("z")
eq_("b/c", abcd[a:d]) eq_("b/c", abcd[a:d])
@@ -236,12 +237,12 @@ def test_getitem_path(force_ossep):
eq_(p[Path("baz/bleh")], Path("/foo/bar/baz/bleh")) eq_(p[Path("baz/bleh")], Path("/foo/bar/baz/bleh"))
@mark.xfail(reason="pytest's capture mechanism is flaky, I have to investigate") @pytest.mark.xfail(reason="pytest's capture mechanism is flaky, I have to investigate")
def test_log_unicode_errors(force_ossep, monkeypatch, capsys): def test_log_unicode_errors(force_ossep, monkeypatch, capsys):
# When an there's a UnicodeDecodeError on path creation, log it so it can be possible # When an there's a UnicodeDecodeError on path creation, log it so it can be possible
# to debug the cause of it. # to debug the cause of it.
monkeypatch.setattr(sys, "getfilesystemencoding", lambda: "ascii") monkeypatch.setattr(sys, "getfilesystemencoding", lambda: "ascii")
with raises(UnicodeDecodeError): with pytest.raises(UnicodeDecodeError):
Path(["", b"foo\xe9"]) Path(["", b"foo\xe9"])
out, err = capsys.readouterr() out, err = capsys.readouterr()
assert repr(b"foo\xe9") in err assert repr(b"foo\xe9") in err

View File

@@ -95,7 +95,7 @@ def test_make_sure_theres_no_messup_between_queries():
threads.append(t) threads.append(t)
while threads: while threads:
time.sleep(0.1) time.sleep(0.1)
threads = [t for t in threads if t.isAlive()] threads = [t for t in threads if t.is_alive()]
def test_query_after_close(): def test_query_after_close():

View File

@@ -11,6 +11,8 @@ from ..gui.table import Table, GUITable, Row
class TestRow(Row): class TestRow(Row):
__test__ = False
def __init__(self, table, index, is_new=False): def __init__(self, table, index, is_new=False):
Row.__init__(self, table) Row.__init__(self, table)
self.is_new = is_new self.is_new = is_new
@@ -28,6 +30,8 @@ class TestRow(Row):
class TestGUITable(GUITable): class TestGUITable(GUITable):
__test__ = False
def __init__(self, rowcount, viewclass=CallLogger): def __init__(self, rowcount, viewclass=CallLogger):
GUITable.__init__(self) GUITable.__init__(self)
self.view = viewclass() self.view = viewclass()

View File

@@ -12,7 +12,31 @@ from pytest import raises
from ..testutil import eq_ from ..testutil import eq_
from ..path import Path from ..path import Path
from ..util import * from ..util import (
nonone,
tryint,
minmax,
first,
flatten,
dedupe,
stripfalse,
extract,
allsame,
trailiter,
format_time,
format_time_decimal,
format_size,
remove_invalid_xml,
multi_replace,
delete_if_empty,
open_if_filename,
FileOrPath,
iterconsume,
escape,
get_file_ext,
rem_file_ext,
pluralize,
)
def test_nonone(): def test_nonone():
@@ -214,42 +238,46 @@ def test_multi_replace():
# --- Files # --- Files
# These test cases needed https://github.com/hsoft/pytest-monkeyplus/ which appears to not be compatible with latest
# pytest, looking at where this is used only appears to be in hscommon.localize_all_stringfiles at top level.
# Right now this repo does not seem to utilize any of that functionality so going to leave these tests out for now.
# TODO decide if fixing these tests is worth it or not.
class TestCase_modified_after: # class TestCase_modified_after:
def test_first_is_modified_after(self, monkeyplus): # def test_first_is_modified_after(self, monkeyplus):
monkeyplus.patch_osstat("first", st_mtime=42) # monkeyplus.patch_osstat("first", st_mtime=42)
monkeyplus.patch_osstat("second", st_mtime=41) # monkeyplus.patch_osstat("second", st_mtime=41)
assert modified_after("first", "second") # assert modified_after("first", "second")
def test_second_is_modified_after(self, monkeyplus): # def test_second_is_modified_after(self, monkeyplus):
monkeyplus.patch_osstat("first", st_mtime=42) # monkeyplus.patch_osstat("first", st_mtime=42)
monkeyplus.patch_osstat("second", st_mtime=43) # monkeyplus.patch_osstat("second", st_mtime=43)
assert not modified_after("first", "second") # assert not modified_after("first", "second")
def test_same_mtime(self, monkeyplus): # def test_same_mtime(self, monkeyplus):
monkeyplus.patch_osstat("first", st_mtime=42) # monkeyplus.patch_osstat("first", st_mtime=42)
monkeyplus.patch_osstat("second", st_mtime=42) # monkeyplus.patch_osstat("second", st_mtime=42)
assert not modified_after("first", "second") # assert not modified_after("first", "second")
def test_first_file_does_not_exist(self, monkeyplus): # def test_first_file_does_not_exist(self, monkeyplus):
# when the first file doesn't exist, we return False # # when the first file doesn't exist, we return False
monkeyplus.patch_osstat("second", st_mtime=42) # monkeyplus.patch_osstat("second", st_mtime=42)
assert not modified_after("does_not_exist", "second") # no crash # assert not modified_after("does_not_exist", "second") # no crash
def test_second_file_does_not_exist(self, monkeyplus): # def test_second_file_does_not_exist(self, monkeyplus):
# when the second file doesn't exist, we return True # # when the second file doesn't exist, we return True
monkeyplus.patch_osstat("first", st_mtime=42) # monkeyplus.patch_osstat("first", st_mtime=42)
assert modified_after("first", "does_not_exist") # no crash # assert modified_after("first", "does_not_exist") # no crash
def test_first_file_is_none(self, monkeyplus): # def test_first_file_is_none(self, monkeyplus):
# when the first file is None, we return False # # when the first file is None, we return False
monkeyplus.patch_osstat("second", st_mtime=42) # monkeyplus.patch_osstat("second", st_mtime=42)
assert not modified_after(None, "second") # no crash # assert not modified_after(None, "second") # no crash
def test_second_file_is_none(self, monkeyplus): # def test_second_file_is_none(self, monkeyplus):
# when the second file is None, we return True # # when the second file is None, we return True
monkeyplus.patch_osstat("first", st_mtime=42) # monkeyplus.patch_osstat("first", st_mtime=42)
assert modified_after("first", None) # no crash # assert modified_after("first", None) # no crash
class TestCase_delete_if_empty: class TestCase_delete_if_empty:

View File

@@ -6,6 +6,8 @@
# which should be included with this package. The terms are also available at # which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html # http://www.gnu.org/licenses/gpl-3.0.html
import pytest
import threading import threading
import py.path import py.path
@@ -148,7 +150,7 @@ class TestApp:
return gui return gui
# To use @with_app, you have to import pytest_funcarg__app in your conftest.py file. # To use @with_app, you have to import app in your conftest.py file.
def with_app(setupfunc): def with_app(setupfunc):
def decorator(func): def decorator(func):
func.setupfunc = setupfunc func.setupfunc = setupfunc
@@ -157,7 +159,8 @@ def with_app(setupfunc):
return decorator return decorator
def pytest_funcarg__app(request): @pytest.fixture
def app(request):
setupfunc = request.function.setupfunc setupfunc = request.function.setupfunc
if hasattr(setupfunc, "__code__"): if hasattr(setupfunc, "__code__"):
argnames = setupfunc.__code__.co_varnames[: setupfunc.__code__.co_argcount] argnames = setupfunc.__code__.co_varnames[: setupfunc.__code__.co_argcount]

BIN
images/dialog-error.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/dupeguru.icns Executable file

Binary file not shown.

BIN
images/exchange.icns Normal file

Binary file not shown.

BIN
images/exchange.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
images/exchange.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

BIN
images/exchange_purple.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
images/old_zoom_in.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
images/old_zoom_out.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr ""
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
"Language: ar\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\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"
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core\gui\problem_table.py:18
msgid "File Path"
msgstr ""
#: core\gui\problem_table.py:19
msgid "Error Message"
msgstr ""
#: core\me\prioritize.py:23
msgid "Duration"
msgstr ""
#: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate"
msgstr ""
#: core\me\prioritize.py:37
msgid "Samplerate"
msgstr ""
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr ""
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr ""
#: core\me\result_table.py:21
msgid "Size (MB)"
msgstr ""
#: core\me\result_table.py:22
msgid "Time"
msgstr ""
#: core\me\result_table.py:24
msgid "Sample Rate"
msgstr ""
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr ""
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr ""
#: core\me\result_table.py:27
msgid "Title"
msgstr ""
#: core\me\result_table.py:28
msgid "Artist"
msgstr ""
#: core\me\result_table.py:29
msgid "Album"
msgstr ""
#: core\me\result_table.py:30
msgid "Genre"
msgstr ""
#: core\me\result_table.py:31
msgid "Year"
msgstr ""
#: core\me\result_table.py:32
msgid "Track Number"
msgstr ""
#: core\me\result_table.py:33
msgid "Comment"
msgstr ""
#: core\me\result_table.py:34 core\pe\result_table.py:26
#: core\se\result_table.py:24
msgid "Match %"
msgstr ""
#: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used"
msgstr ""
#: core\me\result_table.py:36 core\pe\result_table.py:27
#: core\se\result_table.py:26
msgid "Dupe Count"
msgstr ""
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions"
msgstr ""
#: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)"
msgstr ""
#: core\pe\result_table.py:24
msgid "EXIF Timestamp"
msgstr ""
#: core\prioritize.py:156
msgid "Size"
msgstr ""

View File

@@ -0,0 +1,246 @@
#
msgid ""
msgstr ""
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
"Language: ar\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\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"
#: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core\app.py:44
msgid ""
"You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?"
msgstr ""
#: core\app.py:71
msgid "Scanning for duplicates"
msgstr ""
#: core\app.py:72
msgid "Loading"
msgstr ""
#: core\app.py:73
msgid "Moving"
msgstr ""
#: core\app.py:74
msgid "Copying"
msgstr ""
#: core\app.py:75
msgid "Sending to Trash"
msgstr ""
#: core\app.py:308
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
#: core\app.py:318
msgid "No duplicates found."
msgstr ""
#: core\app.py:333
msgid "All marked files were copied successfully."
msgstr ""
#: core\app.py:334
msgid "All marked files were moved successfully."
msgstr ""
#: core\app.py:335
msgid "All marked files were successfully sent to Trash."
msgstr ""
#: core\app.py:343
msgid "Could not load file: {}"
msgstr ""
#: core\app.py:399
msgid "'{}' already is in the list."
msgstr ""
#: core\app.py:401
msgid "'{}' does not exist."
msgstr ""
#: core\app.py:410
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
#: core\app.py:486
msgid "Select a directory to copy marked files to"
msgstr ""
#: core\app.py:487
msgid "Select a directory to move marked files to"
msgstr ""
#: core\app.py:527
msgid "Select a destination for your exported CSV"
msgstr ""
#: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr ""
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
#: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
#: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core\app.py:821
msgid "The selected directories contain no scannable file."
msgstr ""
#: core\app.py:835
msgid "Collecting files to scan"
msgstr ""
#: core\app.py:891
msgid "%s (%d discarded)"
msgstr ""
#: core\engine.py:244 core\engine.py:288
msgid "0 matches found"
msgstr ""
#: core\engine.py:262 core\engine.py:296
msgid "%d matches found"
msgstr ""
#: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash."
msgstr ""
#: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr ""
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr ""
#: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename"
msgstr ""
#: core\me\scanner.py:21
msgid "Filename - Fields"
msgstr ""
#: core\me\scanner.py:22
msgid "Filename - Fields (No Order)"
msgstr ""
#: core\me\scanner.py:23
msgid "Tags"
msgstr ""
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents"
msgstr ""
#: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr ""
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr ""
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core\pe\scanner.py:22
msgid "EXIF Timestamp"
msgstr ""
#: core\prioritize.py:70
msgid "None"
msgstr ""
#: core\prioritize.py:100
msgid "Ends with number"
msgstr ""
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr ""
#: core\prioritize.py:102
msgid "Longest"
msgstr ""
#: core\prioritize.py:103
msgid "Shortest"
msgstr ""
#: core\prioritize.py:140
msgid "Highest"
msgstr ""
#: core\prioritize.py:140
msgid "Lowest"
msgstr ""
#: core\prioritize.py:169
msgid "Newest"
msgstr ""
#: core\prioritize.py:169
msgid "Oldest"
msgstr ""
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core\results.py:149
msgid " filter: %s"
msgstr ""
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr ""
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr ""
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core\se\scanner.py:18
msgid "Folders"
msgstr ""

910
locale/ar/LC_MESSAGES/ui.po Normal file
View File

@@ -0,0 +1,910 @@
#
msgid ""
msgstr ""
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
"Language: ar\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\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"
#: qt/app.py:81
msgid "Quit"
msgstr ""
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr ""
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr ""
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr ""
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr ""
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr ""
#: qt/app.py:87
msgid "Open Debug Log"
msgstr ""
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr ""
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr ""
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr ""
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr ""
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
msgstr ""
#: qt/deletion_options.py:44
msgid "Hardlink"
msgstr ""
#: qt/deletion_options.py:44
msgid "Symlink"
msgstr ""
#: qt/deletion_options.py:48
msgid " (unsupported)"
msgstr ""
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files"
msgstr ""
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
msgstr ""
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed"
msgstr ""
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr ""
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr ""
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr ""
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr ""
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
msgstr ""
#: qt/directories_dialog.py:65 cocoa/en.lproj/Localizable.strings:0
msgid "Results Window"
msgstr ""
#: qt/directories_dialog.py:66
msgid "Add Folder..."
msgstr ""
#: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0
msgid "File"
msgstr ""
#: qt/directories_dialog.py:76 qt/result_window.py:108
msgid "View"
msgstr ""
#: qt/directories_dialog.py:78 qt/result_window.py:110
#: cocoa/en.lproj/Localizable.strings:0
msgid "Help"
msgstr ""
#: qt/directories_dialog.py:80 cocoa/en.lproj/Localizable.strings:0
msgid "Load Recent Results"
msgstr ""
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr ""
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr ""
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr ""
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"."
msgstr ""
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results"
msgstr ""
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
msgid "Scan"
msgstr ""
#: qt/directories_dialog.py:230
msgid "Unsaved results"
msgstr ""
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to quit?"
msgstr ""
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list"
msgstr ""
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load"
msgstr ""
#: qt/directories_dialog.py:267
msgid "All Files (*.*)"
msgstr ""
#: qt/directories_dialog.py:267 qt/result_window.py:311
msgid "dupeGuru Results (*.dupeguru)"
msgstr ""
#: qt/directories_dialog.py:278
msgid "Start a new scan"
msgstr ""
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to continue?"
msgstr ""
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "Name"
msgstr ""
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "State"
msgstr ""
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Excluded"
msgstr ""
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Normal"
msgstr ""
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected"
msgstr ""
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear"
msgstr ""
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close"
msgstr ""
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr ""
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr ""
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr ""
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr ""
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr ""
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr ""
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr ""
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr ""
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr ""
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr ""
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr ""
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr ""
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr ""
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr ""
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr ""
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr ""
#: qt/preferences_dialog.py:43
msgid "Filter Hardness:"
msgstr ""
#: qt/preferences_dialog.py:69
msgid "More Results"
msgstr ""
#: qt/preferences_dialog.py:74
msgid "Fewer Results"
msgstr ""
#: qt/preferences_dialog.py:81
msgid "Font size:"
msgstr ""
#: qt/preferences_dialog.py:85
msgid "Language:"
msgstr ""
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
msgid "Copy and Move:"
msgstr ""
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
msgid "Right in destination"
msgstr ""
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate relative path"
msgstr ""
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate absolute path"
msgstr ""
#: qt/preferences_dialog.py:99
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
msgstr ""
#: qt/preferences_dialog.py:174
msgid "dupeGuru has to restart for language changes to take effect."
msgstr ""
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize duplicates"
msgstr ""
#: qt/prioritize_dialog.py:79 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
msgstr ""
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
msgid "Problems!"
msgstr ""
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
msgstr ""
#: qt/problem_dialog.py:56
msgid "Reveal Selected"
msgstr ""
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions"
msgstr ""
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
msgid "Show Dupes Only"
msgstr ""
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Show Delta Values"
msgstr ""
#: qt/result_window.py:60
msgid "Send Marked to Recycle Bin..."
msgstr ""
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
msgid "Move Marked to..."
msgstr ""
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Copy Marked to..."
msgstr ""
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Marked from Results"
msgstr ""
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..."
msgstr ""
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results"
msgstr ""
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
msgid "Add Selected to Ignore List"
msgstr ""
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference"
msgstr ""
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application"
msgstr ""
#: qt/result_window.py:80
msgid "Open Containing Folder of Selected"
msgstr ""
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
msgid "Rename Selected"
msgstr ""
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
msgid "Mark All"
msgstr ""
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
msgid "Mark None"
msgstr ""
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "Invert Marking"
msgstr ""
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "Mark Selected"
msgstr ""
#: qt/result_window.py:87
msgid "Export To HTML"
msgstr ""
#: qt/result_window.py:88
msgid "Export To CSV"
msgstr ""
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..."
msgstr ""
#: qt/result_window.py:90 cocoa/en.lproj/Localizable.strings:0
msgid "Invoke Custom Command"
msgstr ""
#: qt/result_window.py:102
msgid "Mark"
msgstr ""
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
msgid "Columns"
msgstr ""
#: qt/result_window.py:163
msgid "Reset to Defaults"
msgstr ""
#: qt/result_window.py:185
msgid "{} Results"
msgstr ""
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only"
msgstr ""
#: qt/result_window.py:194
msgid "Delta Values"
msgstr ""
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to"
msgstr ""
#: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than"
msgstr ""
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
msgid "KB"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Action"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Add New Folder..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Advanced"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Automatically check for updates"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Basic"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Bring All to Front"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Check for update..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close Window"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Copy"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Custom command (arguments: %d for dupe, %r for ref):"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Cut"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Delta"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details of Selected File"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details Panel"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Directories"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Edit"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter hardness:"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide Others"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore files smaller than:"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Load from file..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Minimize"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Mode"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "More results"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ok"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Paste"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Preferences..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset to Default"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Select All"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Services"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Show All"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Start Duplicate Scan"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "The name '%@' already exists."
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Window"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "Zoom"
msgstr ""
#: qt\app.py:158
msgid "Exclusion Filters"
msgstr ""
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr ""
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr ""
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr ""
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr ""
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr ""
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr ""
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr ""
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr ""
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr ""
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr ""
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr ""
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr ""
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
#: qt\exclude_list_table.py:36
msgid "Compilation error: "
msgstr ""
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr ""
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr ""
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr ""
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr ""
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr ""
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr ""
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr ""
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr ""
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
#: qt\pe\preferences_dialog.py:66
msgid "Show scrollbars in image viewers"
msgstr ""
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
#: qt\preferences_dialog.py:156
msgid "Use default position for tab bar (requires restart)"
msgstr ""
#: qt\preferences_dialog.py:158
msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
#: qt\preferences_dialog.py:172
msgid "Use bold font for references"
msgstr ""
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr ""
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr ""
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr ""
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr ""
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr ""
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr ""
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr ""
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
#: qt\app.py:256
msgid "Results"
msgstr ""
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr ""
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr ""
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr ""
#: qt\preferences_dialog.py:285
msgid "General"
msgstr ""
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr ""

View File

@@ -4,114 +4,114 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "" msgstr ""
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "" msgstr ""
#: core/me/prioritize.py:18 #: core\me\prioritize.py:23
msgid "Duration" msgid "Duration"
msgstr "" msgstr ""
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "" msgstr ""
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "" msgstr ""
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core/se/result_table.py:18 #: core\se\result_table.py:19
msgid "Filename" msgid "Filename"
msgstr "" msgstr ""
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72 #: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core/se/result_table.py:19 #: core\se\result_table.py:20
msgid "Folder" msgid "Folder"
msgstr "" msgstr ""
#: core/me/result_table.py:20 #: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "" msgstr ""
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "" msgstr ""
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "" msgstr ""
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core/se/result_table.py:21 #: core\se\result_table.py:22
msgid "Kind" msgid "Kind"
msgstr "" msgstr ""
#: core/me/result_table.py:25 core/pe/result_table.py:24 #: core\me\result_table.py:26 core\pe\result_table.py:25
#: core/prioritize.py:153 core/se/result_table.py:22 #: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification" msgid "Modification"
msgstr "" msgstr ""
#: core/me/result_table.py:26 #: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "" msgstr ""
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "" msgstr ""
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "" msgstr ""
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "" msgstr ""
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "" msgstr ""
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "" msgstr ""
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "" msgstr ""
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "" msgstr ""
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "" msgstr ""
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "" msgstr ""
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "" msgstr ""
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "" msgstr ""
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr ""
#: core/prioritize.py:147 #: core\prioritize.py:156
msgid "Size" msgid "Size"
msgstr "" msgstr ""

View File

@@ -4,235 +4,235 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:42 #: core\app.py:44
msgid "You're about to open many files at once. Depending on what those files are opened with, doing so can create quite a mess. Continue?" msgid "You're about to open many files at once. Depending on what those files are opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "" msgstr ""
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "" msgstr ""
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "" msgstr ""
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "" msgstr ""
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "" msgstr ""
#: core/app.py:279 #: core\app.py:308
msgid "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again." msgid "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again."
msgstr "" msgstr ""
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "" msgstr ""
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr ""
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
#: core/app.py:312 #: core\app.py:343
msgid "Could not load file: {}" msgid "Could not load file: {}"
msgstr "" msgstr ""
#: core/app.py:368 #: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:379 #: core\app.py:410
msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?"
msgstr "" msgstr ""
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "" msgstr ""
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "" msgstr ""
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:496 core/app.py:742 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}" msgid "Couldn't write to file: {}"
msgstr "" msgstr ""
#: core/app.py:518 #: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "" msgstr ""
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:751 #: core\app.py:821
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "" msgstr ""
#: core/app.py:762 #: core\app.py:835
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "" msgstr ""
#: core/app.py:810 #: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "" msgstr ""
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "" msgstr ""
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "" msgstr ""
#: core/gui/deletion_options.py:69 #: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "" msgstr ""
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr ""
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename" msgid "Filename"
msgstr "" msgstr ""
#: core/me/scanner.py:20 #: core\me\scanner.py:21
msgid "Filename - Fields" msgid "Filename - Fields"
msgstr "" msgstr ""
#: core/me/scanner.py:21 #: core\me\scanner.py:22
msgid "Filename - Fields (No Order)" msgid "Filename - Fields (No Order)"
msgstr "" msgstr ""
#: core/me/scanner.py:22 #: core\me\scanner.py:23
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents" msgid "Contents"
msgstr "" msgstr ""
#: core/pe/matchblock.py:61 #: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "" msgstr ""
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "" msgstr ""
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "" msgstr ""
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "" msgstr ""
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr ""
#: core/pe/scanner.py:21 #: core\pe\scanner.py:22
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr ""
#: core/prioritize.py:68 #: core\prioritize.py:70
msgid "None" msgid "None"
msgstr "" msgstr ""
#: core/prioritize.py:96 #: core\prioritize.py:100
msgid "Ends with number" msgid "Ends with number"
msgstr "" msgstr ""
#: core/prioritize.py:97 #: core\prioritize.py:101
msgid "Doesn't end with number" msgid "Doesn't end with number"
msgstr "" msgstr ""
#: core/prioritize.py:98 #: core\prioritize.py:102
msgid "Longest" msgid "Longest"
msgstr "" msgstr ""
#: core/prioritize.py:99 #: core\prioritize.py:103
msgid "Shortest" msgid "Shortest"
msgstr "" msgstr ""
#: core/prioritize.py:132 #: core\prioritize.py:140
msgid "Highest" msgid "Highest"
msgstr "" msgstr ""
#: core/prioritize.py:132 #: core\prioritize.py:140
msgid "Lowest" msgid "Lowest"
msgstr "" msgstr ""
#: core/prioritize.py:159 #: core\prioritize.py:169
msgid "Newest" msgid "Newest"
msgstr "" msgstr ""
#: core/prioritize.py:159 #: core\prioritize.py:169
msgid "Oldest" msgid "Oldest"
msgstr "" msgstr ""
#: core/results.py:129 #: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked." msgid "%d / %d (%s / %s) duplicates marked."
msgstr "" msgstr ""
#: core/results.py:136 #: core\results.py:149
msgid " filter: %s" msgid " filter: %s"
msgstr "" msgstr ""
#: core/scanner.py:77 #: core\scanner.py:85
msgid "Read size of %d/%d files" msgid "Read size of %d/%d files"
msgstr "" msgstr ""
#: core/scanner.py:101 #: core\scanner.py:109
msgid "Read metadata of %d/%d files" msgid "Read metadata of %d/%d files"
msgstr "" msgstr ""
#: core/scanner.py:139 #: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr ""
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr ""

View File

@@ -1,122 +1,123 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: Czech (https://www.transifex.com/voltaicideas/teams/116153/cs/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: cs\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/dupeguru/language/cs/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Cesta k souboru" msgstr "Cesta k souboru"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Chybové hlášení" msgstr "Chybové hlášení"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Typ"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Složka"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Název souboru"
#: core/prioritize.py:147
msgid "Size"
msgstr "Velikost"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Změna"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "" msgstr "Doba trvání"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "" msgstr "Vzorkovací frekvence"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Název souboru"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Složka"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Velikost (MB)" msgstr "Velikost (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Čas" msgstr "Čas"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Vzorkovací frekvence" msgstr "Vzorkovací frekvence"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Typ"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Změna"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Titul" msgstr "Titul"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Umělec" msgstr "Umělec"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Žánr" msgstr "Žánr"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Rok" msgstr "Rok"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Číslo stopy" msgstr "Číslo stopy"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Komentář" msgstr "Komentář"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Shoda %" msgstr "Shoda %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Slov" msgstr "Slov"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Počet kopií" msgstr "Počet kopií"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Rozměry" msgstr "Rozměry"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Velikost (KB)" msgstr "Velikost (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Časové razítko EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Velikost"

View File

@@ -1,50 +1,53 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Czech (https://www.transifex.com/voltaicideas/teams/116153/cs/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: cs\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/dupeguru/language/cs/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr "Neexistují žádné označené duplikáty. Nic se nestalo."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr "Nejsou k dispozici žádné vybrané duplikáty. Nic se nestalo."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
"Chystáte se otevřít více souborů najednou. V závislosti na tom, s čím jsou "
"tyto soubory otevřeny, to může způsobit docela nepořádek. Pokračovat?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Vyhledávám duplicity" msgstr "Vyhledávám duplicity"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Nahrávám" msgstr "Nahrávám"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Přesouvám" msgstr "Přesouvám"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Kopíruji" msgstr "Kopíruji"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Vyhazuji do koše" msgstr "Vyhazuji do koše"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -52,31 +55,35 @@ msgstr ""
"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte" "Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte"
" pár sekund a zkuste to znovu." " pár sekund a zkuste to znovu."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Nebyli nalezeny žádné duplicity." msgstr "Nebyli nalezeny žádné duplicity."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr "Všechny označené soubory byly úspěšně zkopírovány."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr "Všechny označené soubory byly úspěšně přesunuty."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr "Všechny označené soubory byly úspěšně odeslány do koše."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Soubor se nepodařilo načíst: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr "'{}' již je v seznamu."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr "'{}' neexistuje."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -84,186 +91,167 @@ msgstr ""
"Všech %d vybraných shod bude v následujících hledáních ignorováno. " "Všech %d vybraných shod bude v následujících hledáních ignorováno. "
"Pokračovat?" "Pokračovat?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "" msgstr "Vyberte adresář, do kterého chcete zkopírovat označené soubory"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "" msgstr "Vyberte adresář, kam chcete přesunout označené soubory"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr "Vyberte cíl pro exportovaný soubor CSV"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Nelze zapisovat do souboru: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách." "Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?" msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr "{} duplicitní skupiny byly změněny změně priorit."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Shromažďuji prohlížené soubory"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání." msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Shromažďuji prohlížené soubory"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d vyřazeno)" msgstr "%s (%d vyřazeno)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "Nalezeno 0 shod" msgstr "Nalezeno 0 shod"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "Nalezeno %d shod" msgstr "Nalezeno %d shod"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Read size of %d/%d files"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "" msgstr "Posíláte-{} soubory do koše."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Regulární výrazy"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Opravdu chcete odstranit všech %d položek ze seznamu výjimek?" msgstr "Opravdu chcete odstranit všech %d položek ze seznamu výjimek?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "" msgstr "Název souboru"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Končí číslem" msgstr "Název souboru - pole"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Nekončí číslem" msgstr "Název souboru - pole (bez objednávky)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "" msgstr "Tagy"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "" msgstr "Obsah"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "Nejvyšší"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Nejnižší"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Nejnovější"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Nejstarší"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicit označeno."
#: core/results.py:136
msgid " filter: %s"
msgstr " filtr: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Načtena metadata %d/%d souborů"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "Analyzováno %d/%d snímků" msgstr "Analyzováno %d/%d snímků"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "Provedeno %d/%d porovnání bloků" msgstr "Provedeno %d/%d porovnání bloků"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Připravuji porovnávání" msgstr "Připravuji porovnávání"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "Ověřeno %d/%d shod" msgstr "Ověřeno %d/%d shod"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr "Přečetl EXIF %d/%d obrázků"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Časové razítko EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Zádný"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Končí číslem"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Nekončí číslem"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Nejdelší"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Nejkratší"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Nejvyšší"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Nejnižší"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Nejnovější"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Nejstarší"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicit označeno."
#: core\results.py:149
msgid " filter: %s"
msgstr " filtr: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Read size of %d/%d files"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Načtena metadata %d/%d souborů"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Skoro hotovo! Fidlování s výsledky..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Složky"
#~ msgid "Sending files to the recycle bin"
#~ msgstr ""
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Grouped %d/%d matches"
#~ msgid "Removing false matches"
#~ msgstr "Odstraňuji falešné shody"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Zpracováno %d/%d shod se seznamem výjimek"
#~ msgid "Doing group prioritization"
#~ msgstr "Přiřazuji prioritu skupině"

File diff suppressed because it is too large Load Diff

View File

@@ -1,123 +1,122 @@
# Translators: # Translators:
# Harakiri1337, 2014 # Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2014-06-03 21:56+0000\n" "Language-Team: German (https://www.transifex.com/voltaicideas/teams/116153/de/)\n"
"Last-Translator: Harakiri1337\n" "Language: de\n"
"Language-Team: German (http://www.transifex.com/projects/p/dupeguru/language/de/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Dateipfad" msgstr "Dateipfad"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Fehlermeldung" msgstr "Fehlermeldung"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Typ"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Ordner"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Dateiname"
#: core/prioritize.py:147
msgid "Size"
msgstr "Größe"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Geändert"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Dauer" msgstr "Dauer"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Abtastrate" msgstr "Abtastrate"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Dateiname"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Ordner"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Größe (MB)" msgstr "Größe (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Zeit" msgstr "Zeit"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Abtastrate" msgstr "Abtastrate"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Typ"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Geändert"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Künstler" msgstr "Künstler"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Genre" msgstr "Genre"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Jahr" msgstr "Jahr"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Titel Nummer" msgstr "Titel Nummer"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Übereinstimmung %" msgstr "Übereinstimmung %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "genutzte Wörter" msgstr "genutzte Wörter"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Anzahl der Duplikate" msgstr "Anzahl der Duplikate"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Auflösung" msgstr "Auflösung"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Größe (KB)" msgstr "Größe (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "EXIF Zeitstempel" msgstr "EXIF Zeitstempel"
#: core\prioritize.py:156
msgid "Size"
msgstr "Größe"

View File

@@ -1,26 +1,25 @@
# Translators: # Translators:
# Harakiri1337, 2014 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Frank Weber <frank.weber@gmail.com>, 2014 # Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2014-09-26 21:24+0000\n" "Language-Team: German (https://www.transifex.com/voltaicideas/teams/116153/de/)\n"
"Last-Translator: Frank Weber <frank.weber@gmail.com>\n" "Language: de\n"
"Language-Team: German (http://www.transifex.com/projects/p/dupeguru/language/de/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Keine markierten Duplikate, daher wurde nichts getan." msgstr "Keine markierten Duplikate, daher wurde nichts getan."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Keine ausgewählten Duplikate, daher wurde nichts getan." msgstr "Keine ausgewählten Duplikate, daher wurde nichts getan."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -28,27 +27,27 @@ msgstr ""
"Sie sind dabei, sehr viele Dateien gleichzeitig zu öffnen. Das kann zu " "Sie sind dabei, sehr viele Dateien gleichzeitig zu öffnen. Das kann zu "
"ziemlichem Durcheinander führen! Trotzdem fortfahren?" "ziemlichem Durcheinander führen! Trotzdem fortfahren?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Suche nach Duplikaten" msgstr "Suche nach Duplikaten"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Lade" msgstr "Lade"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Verschiebe" msgstr "Verschiebe"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Kopiere" msgstr "Kopiere"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Verschiebe in den Papierkorb" msgstr "Verschiebe in den Papierkorb"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -56,32 +55,36 @@ msgstr ""
"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine " "Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine "
"Neue starten. Warten Sie einige Sekunden und versuchen es erneut." "Neue starten. Warten Sie einige Sekunden und versuchen es erneut."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Keine Duplikate gefunden." msgstr "Keine Duplikate gefunden."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Alle markierten Dateien wurden erfolgreich kopiert." msgstr "Alle markierten Dateien wurden erfolgreich kopiert."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Alle markierten Dateien wurden erfolgreich verschoben." msgstr "Alle markierten Dateien wurden erfolgreich verschoben."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
"Alle markierten Dateien wurden erfolgreich in den Papierkorb verschoben." "Alle markierten Dateien wurden erfolgreich in den Papierkorb verschoben."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Konnte Datei {} nicht laden."
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' ist bereits in der Liste." msgstr "'{}' ist bereits in der Liste."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' existiert nicht." msgstr "'{}' existiert nicht."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -89,187 +92,172 @@ msgstr ""
"Alle %d ausgewählten Dateien werden in zukünftigen Scans ignoriert. " "Alle %d ausgewählten Dateien werden in zukünftigen Scans ignoriert. "
"Fortfahren?" "Fortfahren?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "kopieren" msgstr ""
"Wählen Sie ein Verzeichnis aus, in das markierte Dateien kopiert werden "
"sollen"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "verschieben" msgstr ""
"Wählen Sie ein Verzeichnis aus, in das markierte Dateien verschoben werden "
"sollen"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Wählen Sie einen Ordner zum {} der ausgewählten Dateien."
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Zielverzeichnis für den CSV Export angeben" msgstr "Zielverzeichnis für den CSV Export angeben"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Konnte Datei {} nicht schreiben."
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Sie haben noch keinen Befehl erstellt. Bitte dies in den Einstellungen vornehmen.\n" "Sie haben noch keinen Befehl erstellt. Bitte dies in den Einstellungen vornehmen.\n"
"Bsp.: \"C:\\Program Files\\Diff\\Diff.exe\" \"%d\" \"%r\"" "Bsp.: \"C:\\Program Files\\Diff\\Diff.exe\" \"%d\" \"%r\""
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?" msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} Duplikat-Gruppen wurden durch die Neu-Priorisierung geändert." msgstr "{} Duplikat-Gruppen wurden durch die Neu-Priorisierung geändert."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Sammle zu scannende Dateien..."
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Ausgewählte Ordner enthalten keine scannbaren Dateien." msgstr "Ausgewählte Ordner enthalten keine scannbaren Dateien."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Sammle zu scannende Dateien..."
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d verworfen)" msgstr "%s (%d verworfen)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 Übereinstimmungen gefunden" msgstr "0 Übereinstimmungen gefunden"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d Übereinstimmungen gefunden" msgstr "%d Übereinstimmungen gefunden"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Lese Größe von %d/%d Dateien"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Verschiebe {} Datei(en) in den Papierkorb." msgstr "Verschiebe {} Datei(en) in den Papierkorb."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Reguläre Ausdrücke"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Möchten Sie wirklich alle %d Einträge aus der Ausnahmeliste löschen?" msgstr "Möchten Sie wirklich alle %d Einträge aus der Ausnahmeliste löschen?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None"
msgstr "Nichts"
#: core/prioritize.py:96
msgid "Ends with number"
msgstr "Endet mit Zahl"
#: core/prioritize.py:97
msgid "Doesn't end with number"
msgstr "Endet nicht mit Zahl"
#: core/prioritize.py:98
msgid "Longest"
msgstr "Längste"
#: core/prioritize.py:99
msgid "Shortest"
msgstr "Kürzeste"
#: core/prioritize.py:132
msgid "Highest"
msgstr "Höchste"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Niedrigste"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Neuste"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Älterste"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) Duplikate markiert."
#: core/results.py:136
msgid " filter: %s"
msgstr " Filter: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lese Metadaten von %d/%d Dateien"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analysiere Bild %d/%d"
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d Chunk-Matches ausgeführt"
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Bereite Matching vor"
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "%d/%d verifizierte Übereinstimmungen"
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Lese EXIF von Bild %d/%d"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr "Konnte Datei {} nicht laden."
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr "Konnte Datei {} nicht schreiben."
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename" msgid "Filename"
msgstr "Dateiname" msgstr "Dateiname"
#: core/me/scanner.py:20 #: core\me\scanner.py:21
msgid "Filename - Fields" msgid "Filename - Fields"
msgstr "Dateiname - Bereiche" msgstr "Dateiname - Bereiche"
#: core/me/scanner.py:21 #: core\me\scanner.py:22
msgid "Filename - Fields (No Order)" msgid "Filename - Fields (No Order)"
msgstr "Dateiname - Bereiche (ohne Reihenfolge)" msgstr "Dateiname - Bereiche (ohne Reihenfolge)"
#: core/me/scanner.py:22 #: core\me\scanner.py:23
msgid "Tags" msgid "Tags"
msgstr "Tags" msgstr "Tags"
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents" msgid "Contents"
msgstr "Inhalt" msgstr "Inhalt"
#: core/pe/scanner.py:21 #: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "Analysiere Bild %d/%d"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d Chunk-Matches ausgeführt"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "Bereite Matching vor"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "%d/%d verifizierte Übereinstimmungen"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "Lese EXIF von Bild %d/%d"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "EXIF Zeitstempel" msgstr "EXIF Zeitstempel"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Nichts"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Endet mit Zahl"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Endet nicht mit Zahl"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Längste"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Kürzeste"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Höchste"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Niedrigste"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Neuste"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Älterste"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) Duplikate markiert."
#: core\results.py:149
msgid " filter: %s"
msgstr " Filter: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Lese Größe von %d/%d Dateien"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Lese Metadaten von %d/%d Dateien"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "Fast fertig! Arrangiere Ergebnisse..." msgstr "Fast fertig! Arrangiere Ergebnisse..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "Ordner" msgstr "Ordner"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Verschiebe Dateien in den Papierkorb"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d Übereinstimmungen gruppiert"
#~ msgid "Removing false matches"
#~ msgstr "Entferne falsche Übereinstimmungen"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "%d/%d Treffer mit der Ausnahmeliste abgeglichen"
#~ msgid "Doing group prioritization"
#~ msgstr "Gruppenpriorisierung"

View File

@@ -1,26 +1,34 @@
# Translators: # Translators:
# Harakiri1337, 2014 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Frank Weber <frank.weber@gmail.com>, 2014 # Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2014-09-26 21:15+0000\n" "Language-Team: German (https://www.transifex.com/voltaicideas/teams/116153/de/)\n"
"Last-Translator: Frank Weber <frank.weber@gmail.com>\n" "Language: de\n"
"Language-Team: German (http://www.transifex.com/projects/p/dupeguru/language/de/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Optionen"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Ausnahme-Liste" msgstr "Ausnahme-Liste"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Bilder-Cache leeren"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "dupeGuru Hilfe" msgstr "dupeGuru Hilfe"
@@ -33,6 +41,15 @@ msgstr "Über dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Debug Log öffnen" msgstr "Debug Log öffnen"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Möchten Sie wirklich alle zwischengespeicherten Bildanalysen entfernen?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Bilder-Cache geleert."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "{} Datei (*.{})" msgstr "{} Datei (*.{})"
@@ -129,6 +146,30 @@ msgstr "Hilfe"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Lade letztes Suchergebnis" msgstr "Lade letztes Suchergebnis"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Anwendungsmodus:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Musik"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Bild"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standard"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Scantyp:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Optionen"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Zu durchsuchende Ordner auswählen und \"Suche starten\" drücken." msgstr "Zu durchsuchende Ordner auswählen und \"Suche starten\" drücken."
@@ -203,9 +244,78 @@ msgstr "Liste leeren"
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Scantyp:" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Details"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Folgende Tags scannen:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Track"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Künstler"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titel"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Jahr"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Wortgewichtung"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Gleiche ähnliche Wörter ab"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Dateitypen dürfen gemischt werden"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Nutze reguläre Ausdrücke beim Filtern"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Entferne leere Ordner beim Löschen oder Verschieben"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignoriere Duplikate mit Hardlinks auf dieselbe Datei"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Debug Modus (Neustart nötig)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Gleiche Bilder mit unterschiedlicher Auflösung ab"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -283,12 +393,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Zeige Markierte" msgstr "Zeige Markierte"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Details"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -406,86 +510,6 @@ msgstr "Zeige Delta-Werte"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Datei zum Speichern der Suchergebnisse auswählen" msgstr "Datei zum Speichern der Suchergebnisse auswählen"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Folgende Tags scannen:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Track"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Künstler"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titel"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Jahr"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Wortgewichtung"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Gleiche ähnliche Wörter ab"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Dateitypen dürfen gemischt werden"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Nutze reguläre Ausdrücke beim Filtern"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Entferne leere Ordner beim Löschen oder Verschieben"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignoriere Duplikate mit Hardlinks auf dieselbe Datei"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Debug Modus (Neustart nötig)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Gleiche Bilder mit unterschiedlicher Auflösung ab"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Bilder-Cache leeren"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Möchten Sie wirklich alle zwischengespeicherten Bildanalysen entfernen?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Bilder-Cache geleert."
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Ignoriere Dateien kleiner als" msgstr "Ignoriere Dateien kleiner als"
@@ -642,11 +666,6 @@ msgstr "Mehr Suchergebnisse"
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Optionen"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Einfügen" msgstr "Einfügen"
@@ -711,112 +730,219 @@ msgstr "Fenster"
msgid "Zoom" msgid "Zoom"
msgstr "Zoom" msgstr "Zoom"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Anwendungsmodus:" msgstr "Ausschlussfilter"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:91
msgid "Music" msgid "Scan Results"
msgstr "Musik" msgstr "Scan-Ergebnisse"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:95
msgid "Picture" msgid "Load Directories..."
msgstr "Bild" msgstr "Verzeichnisse laden..."
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:96
msgid "Standard" msgid "Save Directories..."
msgstr "Standard" msgstr "Verzeichnisse speichern..."
#: qt/directories_dialog.py:135 #: qt\directories_dialog.py:337
msgid "More Options" msgid "Select a directories file to load"
msgstr "Optionen" msgstr "Wählen Sie eine zu ladende Verzeichnisdatei aus"
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\directories_dialog.py:338
#~ msgstr "Entferne tote Tracks aus Ihrer iTunes Bibliothek" msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuru Verzeichnisse (*.dupegurudirs)"
#~ msgid "Scanning the iTunes Library" #: qt\directories_dialog.py:347
#~ msgstr "Durchsuche die iTunes-Bibliothek" msgid "Select a file to save your directories to"
msgstr ""
"Wählen Sie eine Datei aus, in der Ihre Verzeichnisse gespeichert werden "
"sollen"
#~ msgid "Sending dupes to the Trash" #: qt\directories_dialog.py:348
#~ msgstr "Schicke Duplikate in den Papierkorb" msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuru Verzeichnisse (*.dupegurudirs)"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\exclude_list_dialog.py:44
#~ msgstr "Kommuniziere mit iTunes. Bitte warten!" msgid "Add"
msgstr "Addieren"
#~ msgid "" #: qt\exclude_list_dialog.py:46
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Restore defaults"
#~ msgstr "" msgstr "Standardeinstellungen wiederherstellen"
#~ "Ihre iTunes-Bibliothek enthält %d tote Tracks zum Entfernen. Fortsetzen?"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\exclude_list_dialog.py:47
#~ msgstr "Sie haben keine toten Tracks in Ihrer iTunes-Bibliothek" msgid "Test string"
msgstr "Testzeichenfolge"
#~ msgid "The iTunes application couldn't be found." #: qt\exclude_list_dialog.py:83
#~ msgstr "Das iTunes-Programm konnte nicht gefunden werden." msgid "Type a python regular expression here..."
msgstr "Geben Sie hier einen regulären Python-Ausdruck ein..."
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\exclude_list_dialog.py:85
#~ msgstr "Kommuniziere mit iPhoto. Bitte warten!" msgid "Type a file system path or filename here..."
msgstr "Geben Sie hier einen Dateisystempfad oder Dateinamen ein..."
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\exclude_list_dialog.py:152
#~ msgstr "Kommuniziere mit Aperture. Bitte warten!" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Diese regulären Python-Ausdrücke (Groß- und Kleinschreibung beachten) filtern Dateien während des Scannens heraus.<br>Der <strong>Standardstatus</strong> von Verzeichnissen wird auf der Registerkarte \"Verzeichnisse\" auf \"Ausgeschlossen\" gesetzt, wenn ihr Name zufällig mit einem der ausgewählten regulären Ausdrücke übereinstimmt.<br>Für jede gesammelte Datei werden zwei Tests durchgeführt, um festzustellen, ob sie vollständig ignoriert werden soll oder nicht:<br><li>1. Reguläre Ausdrücke ohne Pfadtrennzeichen werden nur mit dem Dateinamen verglichen.</li>\n"
"<li>2. Reguläre Ausdrücke mit mindestens einem Pfadtrennzeichen werden mit dem vollständigen Pfad zur Datei verglichen.</li><br>\n"
"Beispiel: Wenn Sie PNG-Dateien nur aus dem Verzeichnis \"Meine Bilder\" herausfiltern möchten:<br><code>.*Meine\\sBilder\\\\.*\\.png</code><br><br>Sie können den regulären Ausdruck mit der Schaltfläche \"Testzeichenfolge\" testen, nachdem Sie einen falschen Pfad in das Testfeld eingefügt haben:<br><code>C:\\\\Nutzer\\Meine Bilder\\test.png</code><br><br>\n"
"Übereinstimmende reguläre Ausdrücke werden hervorgehoben.<br>Wenn mindestens eine Markierung vorhanden ist, wird der getestete Pfad oder Dateiname beim Scannen ignoriert.<br><br>Verzeichnisse und Dateien, die mit einem Punkt '.' Beginnen. werden standardmäßig herausgefiltert.<br><br>"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\exclude_list_table.py:36
#~ msgstr "" msgid "Compilation error: "
#~ "Gelöschte Aperture-Fotos wurden dem Projekt \"dupeGuru Trash\" hinzugefügt." msgstr "Kompilierungsfehler:"
#~ msgid "The iPhoto application couldn't be found." #: qt\pe\image_viewer.py:56
#~ msgstr "Das iPhoto-Programm konnte nicht gefunden werden." msgid "Increase zoom"
msgstr "Erhöhen Sie den Zoom"
#~ msgid "Preferences" #: qt\pe\image_viewer.py:66
#~ msgstr "Einstellungen" msgid "Decrease zoom"
msgstr "Verringern Sie den Zoom"
#~ msgid "Check for Update" #: qt\pe\image_viewer.py:71
#~ msgstr "Auf Updates überprüfen" msgid "Ctrl+/"
msgstr "Ctrl+/"
#~ msgid "Filename" #: qt\pe\image_viewer.py:76
#~ msgstr "Dateiname" msgid "Normal size"
msgstr "Normale Größe"
#~ msgid "Filename - Fields" #: qt\pe\image_viewer.py:81
#~ msgstr "Dateiname - Felder" msgid "Ctrl+*"
msgstr "Ctrl+*"
#~ msgid "Filename - Fields (No Order)" #: qt\pe\image_viewer.py:86
#~ msgstr "Dateiname - Felder (ohne Reihenfolge)" msgid "Best fit"
msgstr "Beste Passform"
#~ msgid "Tags" #: qt\pe\preferences_dialog.py:49
#~ msgstr "Tags" msgid "Picture cache mode:"
msgstr "Bild-Cache-Modus:"
#~ msgid "Contents" #: qt\pe\preferences_dialog.py:56
#~ msgstr "Inhalte" msgid "Override theme icons in viewer toolbar"
msgstr "Überschreiben Sie Themensymbole in der Viewer-Symbolleiste"
#~ msgid "Audio Contents" #: qt\pe\preferences_dialog.py:58
#~ msgstr "Audio Inhalte" msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
"Verwenden Sie unsere eigenen internen Symbole anstelle der von der Theme "
"Engine bereitgestellten"
#~ msgid "EXIF Timestamp" #: qt\pe\preferences_dialog.py:66
#~ msgstr "EXIF Zeitstempel" msgid "Show scrollbars in image viewers"
msgstr "Bildlaufleisten in Bildbetrachtern anzeigen"
#~ msgid "Folders" #: qt\pe\preferences_dialog.py:68
#~ msgstr "Ordner" msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
"Wenn das angezeigte Bild nicht zum Ansichtsfenster passt, zeigen Sie "
"Bildlaufleisten an, um die Ansicht zu überspannen"
#~ msgid "Add Aperture Library" #: qt\preferences_dialog.py:156
#~ msgstr "Füge Aperture-Bibliothek hinzu" msgid "Use default position for tab bar (requires restart)"
msgstr ""
"Standardposition für Registerkartenleiste verwenden (Neustart erforderlich)"
#~ msgid "Add iPhoto Library" #: qt\preferences_dialog.py:158
#~ msgstr "Füge iPhoto-Bibliothek hinzu" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"Platzieren Sie die Registerkartenleiste unter dem Hauptmenü und nicht daneben\n"
"Unter MacOS füllt die Registerkartenleiste stattdessen die Fensterbreite aus."
#~ msgid "Add iTunes Library" #: qt\preferences_dialog.py:172
#~ msgstr "Füge iTunes-Bibliothek hinzu" msgid "Use bold font for references"
msgstr "Verwenden Sie Fettdruck als Referenz"
#~ msgid "Audio Content" #: qt\preferences_dialog.py:176
#~ msgstr "Audio Inhalt" msgid "Reference foreground color:"
msgstr "Vordergrundfarbe für Referenzen:"
#~ msgid "Content" #: qt\preferences_dialog.py:179
#~ msgstr "Inhalt" msgid "Reference background color:"
msgstr "Hintergrundfarbe für Referenzen:"
#~ msgid "dupeGuru ME Preferences" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ msgstr "dupeGuru ME Einstellungen" msgid "Delta foreground color:"
msgstr "Vordergrundfarbe für Delta:"
#~ msgid "dupeGuru PE Preferences" #: qt\preferences_dialog.py:195
#~ msgstr "dupeGuru PE Einstellungen" msgid "Show the title bar and can be docked"
msgstr "Zeigt die Titelleiste an und kann angedockt werden"
#~ msgid "Remove Dead Tracks in iTunes" #: qt\preferences_dialog.py:197
#~ msgstr "Entferne tote Tracks in iTunes" msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Während die Titelleiste ausgeblendet ist, ziehen Sie das schwebende Fenster "
"mit der Modifikatortaste herum"
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"Die Titelleiste kann nur deaktiviert werden, während das Fenster angedockt "
"ist"
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr "Vertikale Titelleiste"
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr "Ändern Sie die Titelleiste von horizontal oben in vertikal links"
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr "Registerkartenleiste anzeigen"
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Diese regulären Python-Ausdrücke (Groß- und Kleinschreibung beachten) filtern Dateien während des Scannens heraus.<br>Der <strong>Standardstatus</strong> von Verzeichnissen wird auf der Registerkarte \"Verzeichnisse\" auf \"Ausgeschlossen\" gesetzt, wenn ihr Name zufällig mit einem der ausgewählten regulären Ausdrücke übereinstimmt.<br>Für jede gesammelte Datei werden zwei Tests durchgeführt, um festzustellen, ob sie vollständig ignoriert werden soll oder nicht:<br><li>1. Reguläre Ausdrücke ohne Pfadtrennzeichen werden nur mit dem Dateinamen verglichen.</li>\n"
"<li>2. Reguläre Ausdrücke mit mindestens einem Pfadtrennzeichen werden mit dem vollständigen Pfad zur Datei verglichen.</li><br>\n"
"Beispiel: Wenn Sie PNG-Dateien nur aus dem Verzeichnis \"Meine Bilder\" herausfiltern möchten:<br><code>.*Meine\\sBilder\\\\.*\\.png</code><br><br>Sie können den regulären Ausdruck mit der Schaltfläche \"Testzeichenfolge\" testen, nachdem Sie einen falschen Pfad in das Testfeld eingefügt haben:<br><code>C:\\\\Nutzer\\Meine Bilder\\test.png</code><br><br>\n"
"Übereinstimmende reguläre Ausdrücke werden hervorgehoben.<br>Wenn mindestens eine Markierung vorhanden ist, wird der getestete Pfad oder Dateiname beim Scannen ignoriert.<br><br>Verzeichnisse und Dateien, die mit einem Punkt '.' Beginnen. werden standardmäßig herausgefiltert.<br><br>"
#: qt\app.py:256
msgid "Results"
msgstr "Ergebnisse"
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr "Allgemeine Schnittstelle"
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr "Ergebnistabelle"
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr "Detailfenster"
#: qt\preferences_dialog.py:285
msgid "General"
msgstr "Allgemeines"
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr "Anzeige"

View File

@@ -1,121 +1,123 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n" "Language-Team: Greek (https://www.transifex.com/voltaicideas/teams/116153/el/)\n"
"Last-Translator: 1kakarot\n" "Language: el\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Διαδρομή αρχείου" msgstr "Διαδρομή αρχείου"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Μήνυμα σφάλματος" msgstr "Μήνυμα σφάλματος"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Τύπος"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Φάκελος"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Όνομα αρχείου"
#: core/prioritize.py:147
msgid "Size"
msgstr "Μέγεθος-Διαστάσεις?"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Τροποποίηση"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Διάρκεια" msgstr "Διάρκεια"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "" msgstr "Ρυθμός δειγματοληψίας"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Όνομα αρχείου"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Φάκελος"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Μέγεθος (MB)" msgstr "Μέγεθος (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Χρόνος" msgstr "Χρόνος"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Ρυθμός δειγματοληψίας" msgstr "Ρυθμός δειγματοληψίας"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Τύπος"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Τροποποίηση"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Τίτλος" msgstr "Τίτλος"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Καλλιτέχνης" msgstr "Καλλιτέχνης"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Αλμπουμ" msgstr "Αλμπουμ"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Είδος" msgstr "Είδος"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Έτος" msgstr "Έτος"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Αριθμός κομματιού" msgstr "Αριθμός κομματιού"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Σχόλιο" msgstr "Σχόλιο"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Ταύτιση %" msgstr "Ταύτιση %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Χρησιμοποιημένες λέξεις" msgstr "Χρησιμοποιημένες λέξεις"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Αριθμός διπλοτύπων" msgstr "Αριθμός διπλοτύπων"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Διαστάσεις" msgstr "Διαστάσεις"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Μέγεθος (KB)" msgstr "Μέγεθος (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Χρονοσήμανση EXIF" msgstr "Χρονοσήμανση EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Μέγεθος-Διαστάσεις?"

View File

@@ -1,23 +1,25 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n" "Language-Team: Greek (https://www.transifex.com/voltaicideas/teams/116153/el/)\n"
"Last-Translator: 1kakarot\n" "Language: el\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Δεν υπάρχουν μαρκαρισμένα διπλότυπα. Δεν έγινε τίποτα." msgstr "Δεν υπάρχουν μαρκαρισμένα διπλότυπα. Δεν έγινε τίποτα."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Δεν υπάρχουν επιλεγμένα διπλότυπα. Δεν έγινε τίποτα." msgstr "Δεν υπάρχουν επιλεγμένα διπλότυπα. Δεν έγινε τίποτα."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -26,27 +28,27 @@ msgstr ""
"ανοίγουν αυτάτα αρχεία, κάτι τέτοιο μπορεί να προκαλέσει ένα μικρό χάος. " "ανοίγουν αυτάτα αρχεία, κάτι τέτοιο μπορεί να προκαλέσει ένα μικρό χάος. "
"Συνέχεια;" "Συνέχεια;"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Σάρωση για διπλότυπα" msgstr "Σάρωση για διπλότυπα"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Φόρτωση" msgstr "Φόρτωση"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Μετακίνηση" msgstr "Μετακίνηση"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Αντιγραφή" msgstr "Αντιγραφή"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Αποστολή στα σκουπίδια" msgstr "Αποστολή στα σκουπίδια"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -54,216 +56,201 @@ msgstr ""
"Μια προηγούμενη ενέργεια είναι σε εξέλιξη. Δεν μπορείτε να ξεκινήσετε " "Μια προηγούμενη ενέργεια είναι σε εξέλιξη. Δεν μπορείτε να ξεκινήσετε "
"καινούργια ακόμα. Περιμένετε λίγα δευτερόλεπτα, έπειτα προσπαθήστε ξανά." "καινούργια ακόμα. Περιμένετε λίγα δευτερόλεπτα, έπειτα προσπαθήστε ξανά."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Δεν βρέθηκαν διπλότυπα." msgstr "Δεν βρέθηκαν διπλότυπα."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Όλα τα επιλεγμένα αρχεία αντιγράφηκαν επιτυχώς." msgstr "Όλα τα επιλεγμένα αρχεία αντιγράφηκαν επιτυχώς."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Όλα τα επιλεγμένα αρχεία μετακινήθηκαν επιτυχώς." msgstr "Όλα τα επιλεγμένα αρχεία μετακινήθηκαν επιτυχώς."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Όλα τα επιλεγμένα αρχεία στάλθηκαν με επιτυχία στον κάδο." msgstr "Όλα τα επιλεγμένα αρχεία στάλθηκαν με επιτυχία στον κάδο."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Δεν ήταν δυνατή η φόρτωση του αρχείου: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' υπάρχει ήδη στη λίστα." msgstr "'{}' υπάρχει ήδη στη λίστα."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' δεν υπάρχει." msgstr "'{}' δεν υπάρχει."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "" msgstr ""
"Όλα τα επιλεγμένα %d στοιχεία θα αγνοηθούν σε μελλοντικές σαρώσεις.Συνέχεια;" "Όλα τα επιλεγμένα %d στοιχεία θα αγνοηθούν σε μελλοντικές σαρώσεις.Συνέχεια;"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "αντιγραφή" msgstr "Επιλέξτε έναν κατάλογο για να αντιγράψετε επισημασμένα αρχεία."
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "μετακίνηση" msgstr "Επιλέξτε έναν κατάλογο για να μετακινήσετε τα επισημασμένα αρχεία."
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Επιλέξτε ένα φάκελο {} για τα μαρκαρισμένα αρχεία"
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Επιλέξτε έναν προορισμό για το εξαγόμενο CSV σας" msgstr "Επιλέξτε έναν προορισμό για το εξαγόμενο CSV σας"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Δεν έχετε ορίσει ειδική εντολή. Ρυθμίστε τη στις προτιμήσεις σας. " msgstr "Δεν έχετε ορίσει ειδική εντολή. Ρυθμίστε τη στις προτιμήσεις σας. "
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Πρόκειται να αφαιρέσετε %d αρχεία από τα αποτελέσματα. Συνέχεια;" msgstr "Πρόκειται να αφαιρέσετε %d αρχεία από τα αποτελέσματα. Συνέχεια;"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} ομάδες διπλοτύπων άλλαξαν από το επαναπροσδιορισμό." msgstr "{} ομάδες διπλοτύπων άλλαξαν από το επαναπροσδιορισμό."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Συλλογή αρχείων για σάρωση"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Οι επιλεγμένοι φάκελοι δεν περιέχουν σαρώσιμα αρχεία." msgstr "Οι επιλεγμένοι φάκελοι δεν περιέχουν σαρώσιμα αρχεία."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Συλλογή αρχείων για σάρωση"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d απορρίφθηκαν)" msgstr "%s (%d απορρίφθηκαν)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 διπλότυπα βρέθηκαν" msgstr "0 διπλότυπα βρέθηκαν"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "Βρέθηκαν %d διπλότυπα" msgstr "Βρέθηκαν %d διπλότυπα"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Ανάγνωση μεγέθους %d/%d αρχείων"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Στέλνετε {} αρχεία στα σκουπίδια." msgstr "Στέλνετε {} αρχεία στα σκουπίδια."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Κανονικές εκφράσεις"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Θέλετε να αφαιρέσετε όλα τα %d στοιχεία από τη λίστα αγνόησης; " msgstr "Θέλετε να αφαιρέσετε όλα τα %d στοιχεία από τη λίστα αγνόησης; "
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Καμμία" msgstr "Ονομα αρχείου"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Λήγει με αριθμό" msgstr "Όνομα αρχείου - Πεδία"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Δεν λήγει με αριθμό" msgstr "Όνομα αρχείου - Πεδία (Χωρίς παραγγελία)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "Μεγαλύτερο" msgstr "ετικέτα"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "Μικρότερο" msgstr "Περιεχόμενα"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "Υψηλότερη"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Χαμηλότερη"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Νεώτερο"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Παλαιότερο"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) επιλεγμένα διπλότυπα."
#: core/results.py:136
msgid " filter: %s"
msgstr " φίλτρο: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Ανάγνωση μεταδεδομένων των %d/%d αρχείων"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "Ανάλυση %d/%d εικόνων" msgstr "Ανάλυση %d/%d εικόνων"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "Εκτέλεση %d/%d μερικής ταυτοποίησης" msgstr "Εκτέλεση %d/%d μερικής ταυτοποίησης"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Προετοιμασία για σύγκριση" msgstr "Προετοιμασία για σύγκριση"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "Πιστοποίηση %d/%d ταυτόσημων" msgstr "Πιστοποίηση %d/%d ταυτόσημων"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Ανάγνωση EXIF %d/%d εικόνες" msgstr "Ανάγνωση EXIF %d/%d εικόνες"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Χρονική σήμανση EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Καμμία"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Λήγει με αριθμό"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Δεν λήγει με αριθμό"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Μεγαλύτερο"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Μικρότερο"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Υψηλότερη"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Χαμηλότερη"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Νεώτερο"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Παλαιότερο"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) επιλεγμένα διπλότυπα."
#: core\results.py:149
msgid " filter: %s"
msgstr " φίλτρο: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Ανάγνωση μεγέθους %d/%d αρχείων"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Ανάγνωση μεταδεδομένων των %d/%d αρχείων"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Σχεδόν τελείωσα! Παιχνίδι με αποτελέσματα ..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "ντοσιέ"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Αποστολή στον κάδο ανακύκλωσης"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Ομαδοποιημένα %d/%d διπλότυπα"
#~ msgid "Removing false matches"
#~ msgstr "Αφαίρεση ψευδών διπλοτύπων"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Επεξεργάσία %d/%d διπλοτύπων σε σχέση με τη λίστα αγνόησης"
#~ msgid "Doing group prioritization"
#~ msgstr "Εργασία ομαδοποιημένης προτεραιότητας"

View File

@@ -1,27 +1,34 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n" "Language-Team: Greek (https://www.transifex.com/voltaicideas/teams/116153/el/)\n"
"Last-Translator: 1kakarot\n" "Language: el\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Λειτουργία εφαρμογής:"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Έξοδος" msgstr "Έξοδος"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Επιλογές"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Λίστα αγνόησης" msgstr "Λίστα αγνόησης"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Εκκαθάριση μνήμης cache εικόνων"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "Βοήθεια για το dupeGuru" msgstr "Βοήθεια για το dupeGuru"
@@ -34,6 +41,15 @@ msgstr "Σχετικά με το dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Άνοιγμα αρχείου αποσφαλμάτωσης" msgstr "Άνοιγμα αρχείου αποσφαλμάτωσης"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Θέλετε πραγματικά να αφαιρέσετε όλη την αποθηκευμένη ανάλυση εικόνων σας;"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Μνήμη cache εικόνων εκκαθαρίστηκε."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "{} αρχείο (*.{})" msgstr "{} αρχείο (*.{})"
@@ -56,11 +72,11 @@ msgstr ""
#: qt/deletion_options.py:44 #: qt/deletion_options.py:44
msgid "Hardlink" msgid "Hardlink"
msgstr "" msgstr "Σκληρός σύνδεσμος"
#: qt/deletion_options.py:44 #: qt/deletion_options.py:44
msgid "Symlink" msgid "Symlink"
msgstr "" msgstr "συμβολικός σύνδεσμος"
#: qt/deletion_options.py:48 #: qt/deletion_options.py:48
msgid " (unsupported)" msgid " (unsupported)"
@@ -130,6 +146,30 @@ msgstr "Βοήθεια"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Φόρτωση πρόσφατων αποτελεσμάτων" msgstr "Φόρτωση πρόσφατων αποτελεσμάτων"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Λειτουργία εφαρμογής:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "μουσική"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Εικόνα"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "πρότυπο"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Είδος σάρωσης"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Περισσότερες επιλογές"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Επιλέξτε τους φακέλους για να σαρώσετε και πατήστε το πλήκτρο \"Σάρωση\"." msgstr "Επιλέξτε τους φακέλους για να σαρώσετε και πατήστε το πλήκτρο \"Σάρωση\"."
@@ -205,9 +245,78 @@ msgstr "Αφαίρεση"
msgid "Close" msgid "Close"
msgstr "Κλείσιμο" msgstr "Κλείσιμο"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Είδος σάρωσης" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Λεπτομέρειες"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Ετικέτες προς σάρωση:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Κομμάτι"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Καλλιτέχνης"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Άλμπουμ"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Τίτλος"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Είδος"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Έτος"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Στάθμιση λέξης"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Ταίριασμα παρόμοιων λέξεων"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Να περιλαμβάνουν διαφορετικούς τύπους αρχείων"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Χρήση κανονικών εκφράσεων κατά το φιλτράρισμα"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Κατάργηση κενών φακέλων για διαγραφή ή μετακίνηση"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Αγνόηση διπλοτύπων με hardlinking στο ίδιο αρχείο"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Λειτουργία αποσφαλμάτωσης(απαιτείται επανεκκίνηση)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Ταίριασμα εικόνων διαφορετικών διαστάσεων"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -289,12 +398,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Αποκάλυψη επιλεγμένων" msgstr "Αποκάλυψη επιλεγμένων"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Λεπτομέρειες"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -412,86 +515,6 @@ msgstr "Τιμές διαφοράς (Delta)"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Επιλέξτε ένα αρχείο για να αποθηκεύσετε τα αποτελέσματα σας" msgstr "Επιλέξτε ένα αρχείο για να αποθηκεύσετε τα αποτελέσματα σας"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Ετικέτες προς σάρωση:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Κομμάτι"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Καλλιτέχνης"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Άλμπουμ"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Τίτλος"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Είδος"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Έτος"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Στάθμιση λέξης"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Ταίριασμα παρόμοιων λέξεων"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Να περιλαμβάνουν διαφορετικούς τύπους αρχείων"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Χρήση κανονικών εκφράσεων κατά το φιλτράρισμα"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Κατάργηση κενών φακέλων για διαγραφή ή μετακίνηση"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Αγνόηση διπλοτύπων με hardlinking στο ίδιο αρχείο"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Λειτουργία αποσφαλμάτωσης(απαιτείται επανεκκίνηση)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Ταίριασμα εικόνων διαφορετικών διαστάσεων"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Εκκαθάριση μνήμης cache εικόνων"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Θέλετε πραγματικά να αφαιρέσετε όλη την αποθηκευμένη ανάλυση εικόνων σας;"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Μνήμη cache εικόνων εκκαθαρίστηκε."
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Αγνόηση αρχείων μικρότερων από" msgstr "Αγνόηση αρχείων μικρότερων από"
@@ -567,7 +590,7 @@ msgstr "Φάκελοι"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru" msgid "dupeGuru"
msgstr "" msgstr "dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences" msgid "dupeGuru Preferences"
@@ -649,11 +672,6 @@ msgstr "Περισσότερα αποτελέσματα"
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Επιλογές"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Επικόλληση" msgstr "Επικόλληση"
@@ -718,110 +736,221 @@ msgstr "Παράθυρο"
msgid "Zoom" msgid "Zoom"
msgstr "Ζουμ" msgstr "Ζουμ"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Music" msgid "Exclusion Filters"
msgstr "Φίλτρα αποκλεισμού"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Αποτελέσματα σάρωσης"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Φόρτωση καταλόγων..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Αποθήκευση καταλόγων..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Επιλέξτε ένα αρχείο καταλόγων για φόρτωση"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "καταλόγους του dupeguru (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Επιλέξτε ένα αρχείο για να αποθηκεύσετε τους καταλόγους σας"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "καταλόγους του dupeguru (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Προσθήκη"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Επαναφέρετε τις προεπιλογές"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Σειρά δοκιμής"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Πληκτρολογήστε μια τυπική έκφραση python εδώ..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Πληκτρολογήστε μια διαδρομή συστήματος ή ένα όνομα αρχείου εδώ..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
"Αυτές οι τυπικές εκφράσεις python (πεζών-κεφαλαίων) θα φιλτράρουν τα αρχεία κατά τη διάρκεια των σαρώσεων.<br>Οι διευθυντές θα έχουν επίσης την <strong>προεπιλεγμένη κατάστασή</strong> τους σε Εξαίρεση στην καρτέλα Κατάλογοι εάν το όνομά τους συμβαίνει να ταιριάζει με μία από τις επιλεγμένες κανονικές εκφράσεις.<br>Για κάθε αρχείο που συλλέγεται, εκτελούνται δύο δοκιμές για να προσδιοριστεί εάν θα το αγνοηθεί πλήρως ή όχι:<br><li>1. Οι κανονικές εκφράσεις χωρίς διαχωριστικό διαδρομών σε αυτές θα συγκρίνονται μόνο με το όνομα αρχείου.</li>\n"
"<li>2. Οι κανονικές εκφράσεις με τουλάχιστον ένα διαχωριστικό διαδρομών σε αυτές θα συγκριθούν με την πλήρη διαδρομή προς το αρχείο.</li><br>\n"
"Παράδειγμα: εάν θέλετε να φιλτράρετε αρχεία .PNG μόνο από τον κατάλογο \"Οι εικόνες μου\":<br><code>.*Οι\\sεικόνες\\sμου\\\\.*\\.png</code><br><br>Μπορείτε να δοκιμάσετε την κανονική έκφραση με το κουμπί \"δοκιμαστική συμβολοσειρά\" αφού επικολλήσετε μια ψεύτικη διαδρομή στο πεδίο δοκιμής:<br><code>C:\\\\χρήστης\\Οι εικόνες μου\\test.png</code><br><br>\n"
"Θα επισημανθεί η αντιστοίχιση των τυπικών εκφράσεων.<br>Εάν υπάρχει τουλάχιστον μία επισήμανση, η διαδρομή ή το όνομα αρχείου που δοκιμάστηκε θα αγνοηθεί κατά τη διάρκεια των σαρώσεων.<br><br>Κατάλογοι και αρχεία που ξεκινούν με τελεία \".\" φιλτράρονται από προεπιλογή.<br><br>"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Picture" msgid "Compilation error: "
msgstr "Σφάλμα συλλογής:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Αυξήστε το ζουμ"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Μείωση ζουμ"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Κανονικό μέγεθος"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "ταιριάζει καλύτερα"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Λειτουργία προσωρινής μνήμης εικόνας:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "" msgstr ""
"Παράκαμψη εικονιδίων θέματος στη γραμμή εργαλείων του προγράμματος προβολής"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\pe\preferences_dialog.py:58
msgid "Standard" msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "" msgstr ""
"Χρησιμοποιήστε τα δικά μας εσωτερικά εικονίδια αντί αυτών που παρέχονται από"
" τη μηχανή θέματος"
#: qt/directories_dialog.py:135 #: qt\pe\preferences_dialog.py:66
msgid "More Options" msgid "Show scrollbars in image viewers"
msgstr "Εμφάνιση γραμμών κύλισης σε προγράμματα προβολής εικόνων"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "" msgstr ""
"Όταν η εικόνα που εμφανίζεται δεν ταιριάζει στη θύρα προβολής, εμφανίστε τις"
" γραμμές κύλισης για να εκτείνετε την προβολή γύρω"
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\preferences_dialog.py:156
#~ msgstr "Αφαίρεση νεκρών κομματιών από την βιβλιοθήκη σας iTunes" msgid "Use default position for tab bar (requires restart)"
msgstr ""
"Χρησιμοποιήστε την προεπιλεγμένη θέση για τη γραμμή καρτελών (απαιτείται "
"επανεκκίνηση)"
#~ msgid "Scanning the iTunes Library" #: qt\preferences_dialog.py:158
#~ msgstr "Σάρωση της βιβλιοθήκης σας iTunes" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"Τοποθετήστε τη γραμμή καρτελών κάτω από το κύριο μενού και όχι δίπλα σε αυτό\n"
"Σε MacOS, η γραμμή καρτελών θα γεμίσει το πλάτος του παραθύρου."
#~ msgid "Sending dupes to the Trash" #: qt\preferences_dialog.py:172
#~ msgstr "Αποστολή διπλοτύπων στα Σκουπίδια" msgid "Use bold font for references"
msgstr "Χρησιμοποιήστε έντονη γραμματοσειρά για αναφορές"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\preferences_dialog.py:176
#~ msgstr "Μιλώντας στο iTunes. Μην το αγγίζετε!" msgid "Reference foreground color:"
msgstr "Χρώμα προσκηνίου αναφοράς:"
#~ msgid "" #: qt\preferences_dialog.py:179
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Reference background color:"
#~ msgstr "" msgstr "Χρώμα προσκηνίου αναφοράς:"
#~ "Η βιβλιοθήκη σας iTunes περιέχει %d νεκρά κομμάτια έτοιμα να αφαιρεθούν. "
#~ "Συνέχεια;"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ msgstr "Η βιβλιοθήκη σας iTunes δεν περιέχει νεκρά κομμάτια" msgid "Delta foreground color:"
msgstr "Χρώμα προσκηνίου δέλτα:"
#~ msgid "The iTunes application couldn't be found." #: qt\preferences_dialog.py:195
#~ msgstr "Η εφαρμογή iTunes δεν βρέθηκε." msgid "Show the title bar and can be docked"
msgstr "Εμφάνιση της γραμμής τίτλου και δυνατότητα σύνδεσης"
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\preferences_dialog.py:197
#~ msgstr "Μιλώντας στο iPhoto. Μην το αγγίζετε!" msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Ενώ η γραμμή τίτλου είναι κρυφή, χρησιμοποιήστε το πλήκτρο τροποποίησης για "
"να σύρετε το κυμαινόμενο παράθυρο γύρω"
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\preferences_dialog.py:199
#~ msgstr "Μιλώντας στο Aperture. Μην το αγγίζετε!" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"Η γραμμή τίτλου μπορεί να απενεργοποιηθεί μόνο όταν το παράθυρο είναι "
"συνδεδεμένο"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\preferences_dialog.py:202
#~ msgstr "" msgid "Vertical title bar"
#~ "Οι διαγεγραμμένες φωτογραφίες από το Aperture στάλθηκαν σε ένα έργο που " msgstr "Κάθετη γραμμή τίτλου"
#~ "ονομάζεται \"dupeGuru Trash\"."
#~ msgid "The iPhoto application couldn't be found." #: qt\preferences_dialog.py:204
#~ msgstr "Η εφαρμογή iPhoto δεν βρέθηκε." msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
"Αλλάξτε τη γραμμή τίτλου από οριζόντια στην κορυφή, σε κατακόρυφη στην "
"αριστερή πλευρά"
#~ msgid "Preferences" #: qt\tabbed_window.py:44
#~ msgstr "Προτιμήσεις" msgid "Show tab bar"
msgstr "Εμφάνιση γραμμής καρτελών"
#~ msgid "Check for Update" #: qt\exclude_list_dialog.py:152
#~ msgstr "Έλεγχος για αναβάθμιση" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Αυτές οι τυπικές εκφράσεις python (πεζών-κεφαλαίων) θα φιλτράρουν τα αρχεία κατά τη διάρκεια των σαρώσεων.<br>Οι διευθυντές θα έχουν επίσης την <strong>προεπιλεγμένη κατάστασή</strong> τους σε Εξαίρεση στην καρτέλα Κατάλογοι εάν το όνομά τους συμβαίνει να ταιριάζει με μία από τις επιλεγμένες κανονικές εκφράσεις.<br>Για κάθε αρχείο που συλλέγεται, εκτελούνται δύο δοκιμές για να προσδιοριστεί εάν θα το αγνοηθεί πλήρως ή όχι:<br><li>1. Οι κανονικές εκφράσεις χωρίς διαχωριστικό διαδρομών σε αυτές θα συγκρίνονται μόνο με το όνομα αρχείου.</li>\n"
"<li>2. Οι κανονικές εκφράσεις με τουλάχιστον ένα διαχωριστικό διαδρομών σε αυτές θα συγκριθούν με την πλήρη διαδρομή προς το αρχείο.</li><br>\n"
"Παράδειγμα: εάν θέλετε να φιλτράρετε αρχεία .PNG μόνο από τον κατάλογο \"Οι εικόνες μου\":<br><code>.*Οι\\sεικόνες\\sμου\\\\.*\\.png</code><br><br>Μπορείτε να δοκιμάσετε την κανονική έκφραση με το κουμπί \"δοκιμαστική συμβολοσειρά\" αφού επικολλήσετε μια ψεύτικη διαδρομή στο πεδίο δοκιμής:<br><code>C:\\\\χρήστης\\Οι εικόνες μου\\test.png</code><br><br>\n"
"Θα επισημανθεί η αντιστοίχιση των τυπικών εκφράσεων.<br>Εάν υπάρχει τουλάχιστον μία επισήμανση, η διαδρομή ή το όνομα αρχείου που δοκιμάστηκε θα αγνοηθεί κατά τη διάρκεια των σαρώσεων.<br><br>Κατάλογοι και αρχεία που ξεκινούν με τελεία \".\" φιλτράρονται από προεπιλογή.<br><br>"
#~ msgid "Filename" #: qt\app.py:256
#~ msgstr "Όνομα αρχείου" msgid "Results"
msgstr "Αποτελέσματα"
#~ msgid "Filename - Fields" #: qt\preferences_dialog.py:150
#~ msgstr "Όνομα αρχείου - Πεδία" msgid "General Interface"
msgstr "Γενική διεπαφή"
#~ msgid "Filename - Fields (No Order)" #: qt\preferences_dialog.py:176
#~ msgstr "Όνομα αρχείου - Πεδία (Αταξινόμητα)" msgid "Result Table"
msgstr "Πίνακας αποτελεσμάτων"
#~ msgid "Tags" #: qt\preferences_dialog.py:205
#~ msgstr "Ετικέτες" msgid "Details Window"
msgstr "Παράθυρο λεπτομερειών"
#~ msgid "Contents" #: qt\preferences_dialog.py:285
#~ msgstr "Περιεχόμενα" msgid "General"
msgstr "Γενικός"
#~ msgid "Audio Contents" #: qt\preferences_dialog.py:286
#~ msgstr "Μουσικά περιεχόμενα" msgid "Display"
msgstr "Απεικόνιση"
#~ msgid "EXIF Timestamp"
#~ msgstr "Χρονοσήμανση EXIF"
#~ msgid "Folders"
#~ msgstr "Φάκελοι"
#~ msgid "Προσθήκη βιβλιοθήκης Aperture"
#~ msgstr ""
#~ msgid "Add iPhoto Library"
#~ msgstr "Προσθήκη βιβλιοθήκης iPhoto"
#~ msgid "Add iTunes Library"
#~ msgstr "Προσθήκη βιβλιοθήκης iTunes"
#~ msgid "Audio Content"
#~ msgstr "Μουσικό περιεχόμενο"
#~ msgid "Content"
#~ msgstr "Περιεχόμενο"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "Προτιμήσεις dupeGuru ME"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "Προτιμήσεις dupeGuru PE"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Αφαίρεση νεκρών κομματιών από το iTunes"

View File

@@ -0,0 +1,116 @@
#
msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core\gui\problem_table.py:18
msgid "File Path"
msgstr "File Path"
#: core\gui\problem_table.py:19
msgid "Error Message"
msgstr "Error Message"
#: core\me\prioritize.py:23
msgid "Duration"
msgstr "Duration"
#: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate"
msgstr "Bitrate"
#: core\me\prioritize.py:37
msgid "Samplerate"
msgstr "Samplerate"
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Filename"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Folder"
#: core\me\result_table.py:21
msgid "Size (MB)"
msgstr "Size (MB)"
#: core\me\result_table.py:22
msgid "Time"
msgstr "Time"
#: core\me\result_table.py:24
msgid "Sample Rate"
msgstr "Sample Rate"
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Kind"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modification"
#: core\me\result_table.py:27
msgid "Title"
msgstr "Title"
#: core\me\result_table.py:28
msgid "Artist"
msgstr "Artist"
#: core\me\result_table.py:29
msgid "Album"
msgstr "Album"
#: core\me\result_table.py:30
msgid "Genre"
msgstr "Genre"
#: core\me\result_table.py:31
msgid "Year"
msgstr "Year"
#: core\me\result_table.py:32
msgid "Track Number"
msgstr "Track Number"
#: core\me\result_table.py:33
msgid "Comment"
msgstr "Comment"
#: core\me\result_table.py:34 core\pe\result_table.py:26
#: core\se\result_table.py:24
msgid "Match %"
msgstr "Match %"
#: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used"
msgstr "Words Used"
#: core\me\result_table.py:36 core\pe\result_table.py:27
#: core\se\result_table.py:26
msgid "Dupe Count"
msgstr "Dupe Count"
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions"
msgstr "Dimensions"
#: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)"
msgstr "Size (KB)"
#: core\pe\result_table.py:24
msgid "EXIF Timestamp"
msgstr "EXIF Timestamp"
#: core\prioritize.py:156
msgid "Size"
msgstr "Size"

View File

@@ -0,0 +1,249 @@
#
msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
#: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done."
msgstr "There are no marked duplicates. Nothing has been done."
#: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done."
msgstr "There are no selected duplicates. Nothing has been done."
#: core\app.py:44
msgid ""
"You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?"
msgstr ""
"You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?"
#: core\app.py:71
msgid "Scanning for duplicates"
msgstr "Scanning for duplicates"
#: core\app.py:72
msgid "Loading"
msgstr "Loading"
#: core\app.py:73
msgid "Moving"
msgstr "Moving"
#: core\app.py:74
msgid "Copying"
msgstr "Copying"
#: core\app.py:75
msgid "Sending to Trash"
msgstr "Sending to Trash"
#: core\app.py:308
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
#: core\app.py:318
msgid "No duplicates found."
msgstr "No duplicates found."
#: core\app.py:333
msgid "All marked files were copied successfully."
msgstr "All marked files were copied successfully."
#: core\app.py:334
msgid "All marked files were moved successfully."
msgstr "All marked files were moved successfully."
#: core\app.py:335
msgid "All marked files were successfully sent to Trash."
msgstr "All marked files were successfully sent to Trash."
#: core\app.py:343
msgid "Could not load file: {}"
msgstr "Could not load file: {}"
#: core\app.py:399
msgid "'{}' already is in the list."
msgstr "'{}' already is in the list."
#: core\app.py:401
msgid "'{}' does not exist."
msgstr "'{}' does not exist."
#: core\app.py:410
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
#: core\app.py:486
msgid "Select a directory to copy marked files to"
msgstr "Select a directory to copy marked files to"
#: core\app.py:487
msgid "Select a directory to move marked files to"
msgstr "Select a directory to move marked files to"
#: core\app.py:527
msgid "Select a destination for your exported CSV"
msgstr "Select a destination for your exported CSV"
#: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Couldn't write to file: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "You have no custom command set up. Set it up in your preferences."
#: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?"
msgstr "You are about to remove %d files from results. Continue?"
#: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} duplicate groups were changed by the re-prioritization."
#: core\app.py:821
msgid "The selected directories contain no scannable file."
msgstr "The selected directories contain no scannable file."
#: core\app.py:835
msgid "Collecting files to scan"
msgstr "Collecting files to scan"
#: core\app.py:891
msgid "%s (%d discarded)"
msgstr "%s (%d discarded)"
#: core\engine.py:244 core\engine.py:288
msgid "0 matches found"
msgstr "0 matches found"
#: core\engine.py:262 core\engine.py:296
msgid "%d matches found"
msgstr "%d matches found"
#: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash."
msgstr "You are sending {} file(s) to the Trash."
#: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Regular Expressions"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Do you really want to remove all %d items from the ignore list?"
#: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename"
msgstr "Filename"
#: core\me\scanner.py:21
msgid "Filename - Fields"
msgstr "Filename - Fields"
#: core\me\scanner.py:22
msgid "Filename - Fields (No Order)"
msgstr "Filename - Fields (No Order)"
#: core\me\scanner.py:23
msgid "Tags"
msgstr "Tags"
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents"
msgstr "Contents"
#: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "Analyzed %d/%d pictures"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "Performed %d/%d chunk matches"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "Preparing for matching"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "Verified %d/%d matches"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "Read EXIF of %d/%d pictures"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp"
msgstr "EXIF Timestamp"
#: core\prioritize.py:70
msgid "None"
msgstr "None"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Ends with number"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Doesn't end with number"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Longest"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Shortest"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Highest"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Lowest"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Newest"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Oldest"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicates marked."
#: core\results.py:149
msgid " filter: %s"
msgstr " filter: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Read size of %d/%d files"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Read metadata of %d/%d files"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..."
msgstr "Almost done! Fiddling with results..."
#: core\se\scanner.py:18
msgid "Folders"
msgstr "Folders"

933
locale/en/LC_MESSAGES/ui.po Normal file
View File

@@ -0,0 +1,933 @@
#
msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
#: qt/app.py:81
msgid "Quit"
msgstr "Quit"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Options"
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr "Ignore List"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Clear Picture Cache"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr "dupeGuru Help"
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr "About dupeGuru"
#: qt/app.py:87
msgid "Open Debug Log"
msgstr "Open Debug Log"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Do you really want to remove all your cached picture analysis?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Picture cache cleared."
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr "{} file (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr "Deletion Options"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr "Link deleted files"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
msgstr ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
#: qt/deletion_options.py:44
msgid "Hardlink"
msgstr "Hardlink"
#: qt/deletion_options.py:44
msgid "Symlink"
msgstr "Symlink"
#: qt/deletion_options.py:48
msgid " (unsupported)"
msgstr " (unsupported)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files"
msgstr "Directly delete files"
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
msgstr ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed"
msgstr "Proceed"
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr "Cancel"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr "Attribute"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr "Selected"
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr "Reference"
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
msgstr "Load Results..."
#: qt/directories_dialog.py:65 cocoa/en.lproj/Localizable.strings:0
msgid "Results Window"
msgstr "Results Window"
#: qt/directories_dialog.py:66
msgid "Add Folder..."
msgstr "Add Folder..."
#: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0
msgid "File"
msgstr "File"
#: qt/directories_dialog.py:76 qt/result_window.py:108
msgid "View"
msgstr "View"
#: qt/directories_dialog.py:78 qt/result_window.py:110
#: cocoa/en.lproj/Localizable.strings:0
msgid "Help"
msgstr "Help"
#: qt/directories_dialog.py:80 cocoa/en.lproj/Localizable.strings:0
msgid "Load Recent Results"
msgstr "Load Recent Results"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Application Mode:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Music"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Picture"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standard"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Scan Type:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "More Options"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"."
msgstr "Select folders to scan and press \"Scan\"."
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results"
msgstr "Load Results"
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
msgid "Scan"
msgstr "Scan"
#: qt/directories_dialog.py:230
msgid "Unsaved results"
msgstr "Unsaved results"
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to quit?"
msgstr "You have unsaved results, do you really want to quit?"
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list"
msgstr "Select a folder to add to the scanning list"
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load"
msgstr "Select a results file to load"
#: qt/directories_dialog.py:267
msgid "All Files (*.*)"
msgstr "All Files (*.*)"
#: qt/directories_dialog.py:267 qt/result_window.py:311
msgid "dupeGuru Results (*.dupeguru)"
msgstr "dupeGuru Results (*.dupeguru)"
#: qt/directories_dialog.py:278
msgid "Start a new scan"
msgstr "Start a new scan"
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to continue?"
msgstr "You have unsaved results, do you really want to continue?"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "Name"
msgstr "Name"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "State"
msgstr "State"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Excluded"
msgstr "Excluded"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Normal"
msgstr "Normal"
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected"
msgstr "Remove Selected"
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear"
msgstr "Clear"
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close"
msgstr "Close"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Details"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Tags to scan:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Track"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artist"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Title"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Year"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Word weighting"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Match similar words"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Can mix file kind"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Use regular expressions when filtering"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Remove empty folders on delete or move"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignore duplicates hardlinking to the same file"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Debug mode (restart required)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Match pictures of different dimensions"
#: qt/preferences_dialog.py:43
msgid "Filter Hardness:"
msgstr "Filter Hardness:"
#: qt/preferences_dialog.py:69
msgid "More Results"
msgstr "More Results"
#: qt/preferences_dialog.py:74
msgid "Fewer Results"
msgstr "Fewer Results"
#: qt/preferences_dialog.py:81
msgid "Font size:"
msgstr "Font size:"
#: qt/preferences_dialog.py:85
msgid "Language:"
msgstr "Language:"
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
msgid "Copy and Move:"
msgstr "Copy and Move:"
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
msgid "Right in destination"
msgstr "Right in destination"
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate relative path"
msgstr "Recreate relative path"
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate absolute path"
msgstr "Recreate absolute path"
#: qt/preferences_dialog.py:99
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
msgstr "Custom Command (arguments: %d for dupe, %r for ref):"
#: qt/preferences_dialog.py:174
msgid "dupeGuru has to restart for language changes to take effect."
msgstr "dupeGuru has to restart for language changes to take effect."
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize duplicates"
msgstr "Re-Prioritize duplicates"
#: qt/prioritize_dialog.py:79 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
msgstr ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
msgid "Problems!"
msgstr "Problems!"
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
msgstr ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
#: qt/problem_dialog.py:56
msgid "Reveal Selected"
msgstr "Reveal Selected"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions"
msgstr "Actions"
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
msgid "Show Dupes Only"
msgstr "Show Dupes Only"
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Show Delta Values"
msgstr "Show Delta Values"
#: qt/result_window.py:60
msgid "Send Marked to Recycle Bin..."
msgstr "Send Marked to Recycle Bin..."
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
msgid "Move Marked to..."
msgstr "Move Marked to..."
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Copy Marked to..."
msgstr "Copy Marked to..."
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Marked from Results"
msgstr "Remove Marked from Results"
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..."
msgstr "Re-Prioritize Results..."
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results"
msgstr "Remove Selected from Results"
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
msgid "Add Selected to Ignore List"
msgstr "Add Selected to Ignore List"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference"
msgstr "Make Selected into Reference"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application"
msgstr "Open Selected with Default Application"
#: qt/result_window.py:80
msgid "Open Containing Folder of Selected"
msgstr "Open Containing Folder of Selected"
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
msgid "Rename Selected"
msgstr "Rename Selected"
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
msgid "Mark All"
msgstr "Mark All"
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
msgid "Mark None"
msgstr "Mark None"
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "Invert Marking"
msgstr "Invert Marking"
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "Mark Selected"
msgstr "Mark Selected"
#: qt/result_window.py:87
msgid "Export To HTML"
msgstr "Export To HTML"
#: qt/result_window.py:88
msgid "Export To CSV"
msgstr "Export To CSV"
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..."
msgstr "Save Results..."
#: qt/result_window.py:90 cocoa/en.lproj/Localizable.strings:0
msgid "Invoke Custom Command"
msgstr "Invoke Custom Command"
#: qt/result_window.py:102
msgid "Mark"
msgstr "Mark"
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
msgid "Columns"
msgstr "Columns"
#: qt/result_window.py:163
msgid "Reset to Defaults"
msgstr "Reset to Defaults"
#: qt/result_window.py:185
msgid "{} Results"
msgstr "{} Results"
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only"
msgstr "Dupes Only"
#: qt/result_window.py:194
msgid "Delta Values"
msgstr "Delta Values"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to"
msgstr "Select a file to save your results to"
#: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than"
msgstr "Ignore files smaller than"
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
msgid "KB"
msgstr "KB"
#: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results"
msgstr "%@ Results"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Action"
msgstr "Action"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Add New Folder..."
msgstr "Add New Folder..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Advanced"
msgstr "Advanced"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Automatically check for updates"
msgstr "Automatically check for updates"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Basic"
msgstr "Basic"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Bring All to Front"
msgstr "Bring All to Front"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Check for update..."
msgstr "Check for update..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close Window"
msgstr "Close Window"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Copy"
msgstr "Copy"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Custom command (arguments: %d for dupe, %r for ref):"
msgstr "Custom command (arguments: %d for dupe, %r for ref):"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Cut"
msgstr "Cut"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Delta"
msgstr "Delta"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details of Selected File"
msgstr "Details of Selected File"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details Panel"
msgstr "Details Panel"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Directories"
msgstr "Directories"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru"
msgstr "dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences"
msgstr "dupeGuru Preferences"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results"
msgstr "dupeGuru Results"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website"
msgstr "dupeGuru Website"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Edit"
msgstr "Edit"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV"
msgstr "Export Results to CSV"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML"
msgstr "Export Results to XHTML"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results"
msgstr "Fewer results"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter"
msgstr "Filter"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter hardness:"
msgstr "Filter hardness:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..."
msgstr "Filter Results..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window"
msgstr "Folder Selection Window"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:"
msgstr "Font Size:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru"
msgstr "Hide dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide Others"
msgstr "Hide Others"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore files smaller than:"
msgstr "Ignore files smaller than:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Load from file..."
msgstr "Load from file..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Minimize"
msgstr "Minimize"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Mode"
msgstr "Mode"
#: cocoa/en.lproj/Localizable.strings:0
msgid "More results"
msgstr "More results"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ok"
msgstr "Ok"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Paste"
msgstr "Paste"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Preferences..."
msgstr "Preferences..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look"
msgstr "Quick Look"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru"
msgstr "Quit dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset to Default"
msgstr "Reset to Default"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults"
msgstr "Reset To Defaults"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal"
msgstr "Reveal"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder"
msgstr "Reveal Selected in Finder"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Select All"
msgstr "Select All"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..."
msgstr "Send Marked to Trash..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Services"
msgstr "Services"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Show All"
msgstr "Show All"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Start Duplicate Scan"
msgstr "Start Duplicate Scan"
#: cocoa/en.lproj/Localizable.strings:0
msgid "The name '%@' already exists."
msgstr "The name '%@' already exists."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Window"
msgstr "Window"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Zoom"
msgstr "Zoom"
#: qt\app.py:158
msgid "Exclusion Filters"
msgstr "Exclusion Filters"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Scan Results"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Load Directories..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Save Directories..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Select a directories file to load"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuru Results (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Select a file to save your directories to"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuru Directories (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Add"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Restore defaults"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Test string"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Type a python regular expression here..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Type a file system path or filename here..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
#: qt\exclude_list_table.py:36
msgid "Compilation error: "
msgstr "Compilation error: "
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Increase zoom"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Decrease zoom"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Normal size"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "Best fit"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Picture cache mode:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Override theme icons in viewer toolbar"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
"Use our own internal icons instead of those provided by the theme engine"
#: qt\pe\preferences_dialog.py:66
msgid "Show scrollbars in image viewers"
msgstr "Show scrollbars in image viewers"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
#: qt\preferences_dialog.py:156
msgid "Use default position for tab bar (requires restart)"
msgstr "Use default position for tab bar (requires restart)"
#: qt\preferences_dialog.py:158
msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
#: qt\preferences_dialog.py:172
msgid "Use bold font for references"
msgstr "Use bold font for references"
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr "Reference foreground color:"
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr "Reference background color:"
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr "Delta foreground color:"
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr "Show the title bar and can be docked"
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr "The title bar can only be disabled while the window is docked"
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr "Vertical title bar"
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
"Change the title bar from horizontal on top, to vertical on the left side"
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr "Show tab bar"
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
#: qt\app.py:256
msgid "Results"
msgstr "Results"
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr "General Interface"
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr "Result Table"
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr "Details Window"
#: qt\preferences_dialog.py:285
msgid "General"
msgstr "General"
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr "Display"

View File

@@ -1,123 +1,122 @@
# Translators: # Translators:
# Josep <tu154m@gmail.com>, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2015-04-16 22:52+0000\n" "Language-Team: Spanish (https://www.transifex.com/voltaicideas/teams/116153/es/)\n"
"Last-Translator: Josep <tu154m@gmail.com>\n" "Language: es\n"
"Language-Team: Spanish (http://www.transifex.com/p/dupeguru/language/es/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Ruta de Fichero" msgstr "Ruta de Fichero"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Mensaje de error" msgstr "Mensaje de error"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Clase"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Carpeta"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nombre de fichero"
#: core/prioritize.py:147
msgid "Size"
msgstr "Tamaño"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificación"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Duración" msgstr "Duración"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Tasa de bits" msgstr "Tasa de bits"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Tasa de Muestreo" msgstr "Tasa de Muestreo"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Nombre de fichero"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Carpeta"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Tamaño (MB)" msgstr "Tamaño (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Hora" msgstr "Hora"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Tasa de Muestreo" msgstr "Tasa de Muestreo"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Clase"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modificación"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Título" msgstr "Título"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Artista" msgstr "Artista"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Álbum" msgstr "Álbum"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Género" msgstr "Género"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Año" msgstr "Año"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Pista Número" msgstr "Pista Número"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Comentario" msgstr "Comentario"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Coincidencia %" msgstr "Coincidencia %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Palabras Empleadas" msgstr "Palabras Empleadas"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Duplicado Número" msgstr "Duplicado Número"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Dimensiones" msgstr "Dimensiones"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Tamaño (KB)" msgstr "Tamaño (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Marca horaria EXIF" msgstr "Marca horaria EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Tamaño"

View File

@@ -1,25 +1,25 @@
# Translators: # Translators:
# Josep <tu154m@gmail.com>, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2015-04-19 20:05+0000\n" "Language-Team: Spanish (https://www.transifex.com/voltaicideas/teams/116153/es/)\n"
"Last-Translator: Josep <tu154m@gmail.com>\n" "Language: es\n"
"Language-Team: Spanish (http://www.transifex.com/p/dupeguru/language/es/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "No hay duplicados marcados. No se ha hecho nada." msgstr "No hay duplicados marcados. No se ha hecho nada."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "No hay duplicados seleccionados. No se ha hecho nada." msgstr "No hay duplicados seleccionados. No se ha hecho nada."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -27,27 +27,27 @@ msgstr ""
"Está a punto de abrir muchas imágenes. Dependiendo de los ficheros que se " "Está a punto de abrir muchas imágenes. Dependiendo de los ficheros que se "
"abran, abrirlos puede colgar la máquina. ¿Continuar?" "abran, abrirlos puede colgar la máquina. ¿Continuar?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Buscando duplicados" msgstr "Buscando duplicados"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Cargando" msgstr "Cargando"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Moviendo" msgstr "Moviendo"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Copiando" msgstr "Copiando"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Enviando a la Papelera" msgstr "Enviando a la Papelera"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -55,32 +55,36 @@ msgstr ""
"Una acción previa sigue ejecutándose. No puede abrir una nueva todavía. " "Una acción previa sigue ejecutándose. No puede abrir una nueva todavía. "
"Espere unos segundos y vuelva a intentarlo." "Espere unos segundos y vuelva a intentarlo."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "No se han encontrado duplicados." msgstr "No se han encontrado duplicados."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
"Todos los ficheros seleccionados han sido copiados satisfactoriamente." "Todos los ficheros seleccionados han sido copiados satisfactoriamente."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Todos los ficheros seleccionados se han movidos satisfactoriamente." msgstr "Todos los ficheros seleccionados se han movidos satisfactoriamente."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Todo los ficheros marcados se han enviado a la papelera exitosamente." msgstr "Todo los ficheros marcados se han enviado a la papelera exitosamente."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "No se pudo cargar el archivo: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' ya está en la lista." msgstr "'{}' ya está en la lista."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' no existe." msgstr "'{}' no existe."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -88,186 +92,167 @@ msgstr ""
"Todas las %d coincidencias seleccionadas van a ser ignoradas en las " "Todas las %d coincidencias seleccionadas van a ser ignoradas en las "
"subsiguientes exploraciones. ¿Continuar?" "subsiguientes exploraciones. ¿Continuar?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "copiar" msgstr "Seleccione un directorio donde desee copiar los archivos marcados"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "mover" msgstr "Seleccione un directorio al que desee mover los archivos marcados"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Seleccionar un directorio al que {} enviar los ficheros seleccionados"
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Seleccionar un destino para el CSV seleccionado" msgstr "Seleccionar un destino para el CSV seleccionado"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "No se pudo escribir en el archivo: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "No hay comandos configurados. Establézcalos en sus preferencias." msgstr "No hay comandos configurados. Establézcalos en sus preferencias."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Está a punto de eliminar %d ficheros de resultados. ¿Continuar?" msgstr "Está a punto de eliminar %d ficheros de resultados. ¿Continuar?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} grupos de duplicados han sido cambiados por la re-priorización" msgstr "{} grupos de duplicados han sido cambiados por la re-priorización"
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Recopilando ficheros a explorar"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Las carpetas seleccionadas no contienen ficheros para explorar." msgstr "Las carpetas seleccionadas no contienen ficheros para explorar."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Recopilando ficheros a explorar"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d descartados)" msgstr "%s (%d descartados)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 coincidencias" msgstr "0 coincidencias"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d coincidencias encontradas" msgstr "%d coincidencias encontradas"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Tamaño de lectura de %d/%d ficheros"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Enviando {} fichero(s) a la Papelera" msgstr "Enviando {} fichero(s) a la Papelera"
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Expresiones regulares"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr ""
"¿Desea realmente eliminar todos los %d elementos de la lista de exclusión?" "¿Desea realmente eliminar todos los %d elementos de la lista de exclusión?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Ninguno" msgstr "Nombre de archivo"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Termina con un número" msgstr "Nombre de archivo - Campos"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "No termina con un número" msgstr "Nombre de archivo - Campos (sin orden)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "El más largo" msgstr "Etiquetas"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "El más corto" msgstr "Contenido"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "El más alto"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "El más bajo"
#: core/prioritize.py:159
msgid "Newest"
msgstr "El más nuevo"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "El más antiguo"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicados marcados."
#: core/results.py:136
msgid " filter: %s"
msgstr "filtro: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Leyendo metadatos de %d/%d ficheros"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "Analizadas %d/%d imágenes" msgstr "Analizadas %d/%d imágenes"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "Realizado %d/%d trozos coincidentes" msgstr "Realizado %d/%d trozos coincidentes"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Preparando para coincidencias" msgstr "Preparando para coincidencias"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "Verificadas %d/%d coincidencias" msgstr "Verificadas %d/%d coincidencias"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Leído EXIF de %d/%d imágenes" msgstr "Leído EXIF de %d/%d imágenes"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Marca horaria EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Ninguno"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Termina con un número"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "No termina con un número"
#: core\prioritize.py:102
msgid "Longest"
msgstr "El más largo"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "El más corto"
#: core\prioritize.py:140
msgid "Highest"
msgstr "El más alto"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "El más bajo"
#: core\prioritize.py:169
msgid "Newest"
msgstr "El más nuevo"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "El más antiguo"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicados marcados."
#: core\results.py:149
msgid " filter: %s"
msgstr "filtro: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Tamaño de lectura de %d/%d ficheros"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Leyendo metadatos de %d/%d ficheros"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "¡Casi termino! Jugando con los resultados..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Carpetas"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Enviando ficheros a la papelera de reciclaje"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Coincidencias %d/%d agrupadas"
#~ msgid "Removing false matches"
#~ msgstr "Descartando falsas coincidencias"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Procesadas %d/%d coincidencias de la lista de exclusión"
#~ msgid "Doing group prioritization"
#~ msgstr "Ejecutando priorización de grupo"

View File

@@ -1,25 +1,34 @@
# Translators: # Translators:
# Josep <tu154m@gmail.com>, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2015-04-19 20:20+0000\n" "Language-Team: Spanish (https://www.transifex.com/voltaicideas/teams/116153/es/)\n"
"Last-Translator: Josep <tu154m@gmail.com>\n" "Language: es\n"
"Language-Team: Spanish (http://www.transifex.com/p/dupeguru/language/es/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Salir" msgstr "Salir"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opciones"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Lista de exclusión" msgstr "Lista de exclusión"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Limpiar el Cache de Fotos"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "Ayuda de dupeGuru" msgstr "Ayuda de dupeGuru"
@@ -32,6 +41,14 @@ msgstr "Acerca de dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Abrir Registro de Depuración" msgstr "Abrir Registro de Depuración"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "¿Desea realmente eliminar todo el caché de análisis de imágenes?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Caché de fotos limpio."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "{} fichero (*.{})" msgstr "{} fichero (*.{})"
@@ -128,6 +145,30 @@ msgstr "Ayuda"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Cargar Resultados Recientes" msgstr "Cargar Resultados Recientes"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Modo de aplicación:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Música"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Imagen"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Estándar"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Tipo de Exploración:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Mas Opciones"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Seleccionar carpetas a explorar y pulsar \"Explorar\"." msgstr "Seleccionar carpetas a explorar y pulsar \"Explorar\"."
@@ -201,9 +242,78 @@ msgstr "Limpiar"
msgid "Close" msgid "Close"
msgstr "Cerrar" msgstr "Cerrar"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Tipo de Exploración:" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Detalles"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Etiquetas a explorar:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Pista"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Álbum"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Título"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Género"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Año"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Ponderación de Palabra"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Coincidencia con palabras similares"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Puede mezclar tipos de fichero"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Use expresiones regulares cuando filtre"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Eliminar carpetas vacías al borrar o mover"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorar duplicados enlazando al mismo fichero"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Mode de depuración (se requiere reinicio)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Coincidencia de imágenes de distintas dimensiones"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -283,12 +393,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Revelar seleccionados" msgstr "Revelar seleccionados"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Detalles"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -406,85 +510,6 @@ msgstr "Valores Delta"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Seleccionar un fichero al que guardar los resultados" msgstr "Seleccionar un fichero al que guardar los resultados"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Etiquetas a explorar:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Pista"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Álbum"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Título"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Género"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Año"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Ponderación de Palabra"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Coincidencia con palabras similares"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Puede mezclar tipos de fichero"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Use expresiones regulares cuando filtre"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Eliminar carpetas vacías al borrar o mover"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorar duplicados enlazando al mismo fichero"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Mode de depuración (se requiere reinicio)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Coincidencia de imágenes de distintas dimensiones"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Limpiar el Cache de Fotos"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "¿Desea realmente eliminar todo el caché de análisis de imágenes?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Caché de fotos limpio."
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Ignorar ficheros más pequeños de" msgstr "Ignorar ficheros más pequeños de"
@@ -641,11 +666,6 @@ msgstr "Más resultados"
msgid "Ok" msgid "Ok"
msgstr "De acuerdo" msgstr "De acuerdo"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opciones"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Pegar" msgstr "Pegar"
@@ -710,114 +730,220 @@ msgstr "Ventana"
msgid "Zoom" msgid "Zoom"
msgstr "Zoom" msgstr "Zoom"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Filtros de exclusión"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Resultados del Escáner"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Cargar Carpetas..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Guardar Carpetas..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Seleccione un archivo de carpetas para cargar"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "Resultados dupeGuru (*.dupeguru)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Seleccionar un fichero al que guardar las carpetas"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "Carpetas dupeGuru (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Agregar"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Reiniciar a Valores por Defecto"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Cadena de prueba"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Escriba una expresión regular de Python aquí..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "" msgstr ""
"Escriba una ruta del sistema de archivos o un nombre de archivo aquí..."
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_dialog.py:152
msgid "Music" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
"Estas expresiones regulares de Python (sensibles a mayúsculas y minúsculas) filtrarán los archivos durante los escaneos.<br> Carpetas también tendrá su <strong>establecido en Excluido</strong> en la pestaña Carpetas si su nombre coincide con una de las expresiones regulares seleccionadas.<br>Para cada archivo recopilado, se realizan dos pruebas para determinar si se debe ignorar por completo o no.<br><li>1. Las expresiones regulares sin separador de ruta se compararán solo con el nombre del archivo.</li>\n"
"<li>2. Las expresiones regulares con al menos un separador de ruta en ellas se compararán con la ruta completa al archivo.</li><br>\n"
"Ejemplo: si desea filtrar archivos .PNG solo del directorio \"Mis imágenes\":<br><code>.*Mis\\sImágenes\\\\.*\\.png</code><br><br>Puede probar la expresión regular con el botón \"cadena de prueba\" después de pegar una ruta falsa en el campo de prueba:<br><code>C:\\\\Usario\\Mis Imágenes\\test.png</code><br><br>\n"
"Se resaltarán las expresiones regulares coincidentes.<br>Si hay al menos un resaltado, la ruta o el nombre de archivo probado se ignorará durante los escaneos.<br><br>Directorios y archivos que comienzan con un punto '.' se ignoran de forma predeterminada.<br><br>"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Picture" msgid "Compilation error: "
msgstr "Error de compilación:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Aumentar el zoom"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Disminuir zoom"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Tamaño normal"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "Mejor ajuste"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Modo de caché de imágenes:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Anula los iconos de temas en la barra de herramientas del visor"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "" msgstr ""
"Utilice nuestros propios iconos internos en lugar de los proporcionados por "
"el motor de temas"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\pe\preferences_dialog.py:66
msgid "Standard" msgid "Show scrollbars in image viewers"
msgstr "Mostrar barras de desplazamiento en visores de imágenes"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "" msgstr ""
"Cuando la imagen mostrada no se ajusta a la ventana gráfica, muestre barras "
"de desplazamiento para abarcar la vista"
#: qt/directories_dialog.py:135 #: qt\preferences_dialog.py:156
msgid "More Options" msgid "Use default position for tab bar (requires restart)"
msgstr "" msgstr ""
"Use la posición predeterminada para la barra de pestañas (requiere "
"reiniciar)."
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\preferences_dialog.py:158
#~ msgstr "Eliminando pistas muertas de la librería iTunes" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"Coloque la barra de pestañas debajo del menú principal en lugar de al lado.\n"
"En MacOS, la barra de pestañas llenará el ancho de la ventana."
#~ msgid "Scanning the iTunes Library" #: qt\preferences_dialog.py:172
#~ msgstr "Explorando la librería iTunes" msgid "Use bold font for references"
msgstr "Utilice fuente en negrita para las referencias."
#~ msgid "Sending dupes to the Trash" #: qt\preferences_dialog.py:176
#~ msgstr "Enviando duplicados a la Papelera" msgid "Reference foreground color:"
msgstr "Color del texto de referencia:"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\preferences_dialog.py:179
#~ msgstr "Conectando con iTunes. ¡No tocar!" msgid "Reference background color:"
msgstr "Color de fondo de referencia:"
#~ msgid "" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Delta foreground color:"
#~ msgstr "" msgstr "Color del texto de delta:"
#~ "Su librería iTunes contiene %d pistas muertas listas para ser eliminadas. "
#~ "¿Continuar?"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\preferences_dialog.py:195
#~ msgstr "No hay pistas muertas en la librería iTunes" msgid "Show the title bar and can be docked"
msgstr "Muestra la barra de título y se puede acoplar."
#~ msgid "The iTunes application couldn't be found." #: qt\preferences_dialog.py:197
#~ msgstr "El programa iTunes no se encuentra" msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Si la barra de título está ocultada, use la tecla modificadora para "
"arrastrar la ventana flotante."
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\preferences_dialog.py:199
#~ msgstr "Conectando con iPhoto. ¡No tocar!" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"La barra de título solo se puede desactivar si la ventana está acoplada."
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\preferences_dialog.py:202
#~ msgstr "Conectando con Aperture. ¡No tocar!" msgid "Vertical title bar"
msgstr "Barra de título vertical"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\preferences_dialog.py:204
#~ msgstr "" msgid ""
#~ "Las fotos borradas de Aperture han sido envíadas a un proyecto llamado " "Change the title bar from horizontal on top, to vertical on the left side"
#~ "\"Papelera dupeGuru\"" msgstr ""
"Cambie la barra de título de horizontal en la parte superior a vertical en "
"el lado izquierdo."
#~ msgid "The iPhoto application couldn't be found." #: qt\tabbed_window.py:44
#~ msgstr "No se puede encontrar el programa iPhoto." msgid "Show tab bar"
msgstr "Mostrar barra de pestañas"
#~ msgid "Preferences" #: qt\exclude_list_dialog.py:152
#~ msgstr "Preferencias" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Estas expresiones regulares de Python (sensibles a mayúsculas y minúsculas) filtrarán los archivos durante los escaneos.<br> Carpetas también tendrá su <strong>establecido en Excluido</strong> en la pestaña Carpetas si su nombre coincide con una de las expresiones regulares seleccionadas.<br>Para cada archivo recopilado, se realizan dos pruebas para determinar si se debe ignorar por completo o no.<br><li>1. Las expresiones regulares sin separador de ruta se compararán solo con el nombre del archivo.</li>\n"
"<li>2. Las expresiones regulares con al menos un separador de ruta en ellas se compararán con la ruta completa al archivo.</li><br>\n"
"Ejemplo: si desea filtrar archivos .PNG solo del directorio \"Mis imágenes\":<br><code>.*Mis\\sImágenes\\\\.*\\.png</code><br><br>Puede probar la expresión regular con el botón \"cadena de prueba\" después de pegar una ruta falsa en el campo de prueba:<br><code>C:\\\\Usario\\Mis Imágenes\\test.png</code><br><br>\n"
"Se resaltarán las expresiones regulares coincidentes.<br>Si hay al menos un resaltado, la ruta o el nombre de archivo probado se ignorará durante los escaneos.<br><br>Directorios y archivos que comienzan con un punto '.' se ignoran de forma predeterminada.<br><br>"
#~ msgid "Check for Update" #: qt\app.py:256
#~ msgstr "Comprobar Actualizaciones" msgid "Results"
msgstr "Resultados"
#~ msgid "Filename" #: qt\preferences_dialog.py:150
#~ msgstr "Nombre de fichero" msgid "General Interface"
msgstr "Interfaz general"
#~ msgid "Filename - Fields" #: qt\preferences_dialog.py:176
#~ msgstr "Nombre de fichero - Campos" msgid "Result Table"
msgstr "Tabla de resultados"
#~ msgid "Filename - Fields (No Order)" #: qt\preferences_dialog.py:205
#~ msgstr "Nombre de fichero - Campos (sin orden)" msgid "Details Window"
msgstr "Ventana de detalles"
#~ msgid "Tags" #: qt\preferences_dialog.py:285
#~ msgstr "Etiquetas" msgid "General"
msgstr "General"
#~ msgid "Contents" #: qt\preferences_dialog.py:286
#~ msgstr "Contenidos" msgid "Display"
msgstr "Visualización"
#~ msgid "Audio Contents"
#~ msgstr "Contenidos de Audio"
#~ msgid "EXIF Timestamp"
#~ msgstr "Marca horaria EXIF"
#~ msgid "Folders"
#~ msgstr "Carpetas"
#~ msgid "Add Aperture Library"
#~ msgstr "Añadir librería de Aperture"
#~ msgid "Add iPhoto Library"
#~ msgstr "Añadir librería de iPhoto"
#~ msgid "Add iTunes Library"
#~ msgstr "Añadir librería de iTunes"
#~ msgid "Audio Content"
#~ msgstr "Contenido de Audio"
#~ msgid "Content"
#~ msgstr "Contenido"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "Preferencias de dupeGuru ME"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "Preferencias de dupeGuru PE"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Quitar Pistar Muertes en iTunes"

View File

@@ -1,124 +1,123 @@
# Translators: # Translators:
# hsoft <hsoft@hardcoded.net>, 2012 # Andrew Senetar <arsenetar@gmail.com>, 2021
# hsoft <hsoft@hardcoded.net>, 2012 # Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: French (https://www.transifex.com/voltaicideas/teams/116153/fr/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: fr\n"
"Language-Team: French (http://www.transifex.com/projects/p/dupeguru/language/fr/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Chemin du fichier" msgstr "Chemin du fichier"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Message d'erreur" msgstr "Message d'erreur"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Type"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Dossier"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nom de fichier"
#: core/prioritize.py:147
msgid "Size"
msgstr "Taille"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modification"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Durée" msgstr "Durée"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Échantillonnage" msgstr "Échantillonnage"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Nom de fichier"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Dossier"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Taille (MB)" msgstr "Taille (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Temps" msgstr "Temps"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Sample Rate" msgstr "Sample Rate"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Type"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modification"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Artiste" msgstr "Artiste"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Genre" msgstr "Genre"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Année" msgstr "Année"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Track" msgstr "Track"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Match %" msgstr "Match %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Mots" msgstr "Mots"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "# Doublons" msgstr "Nombre de Doublons"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Dimensions" msgstr "Dimensions"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Taille (KB)" msgstr "Taille (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Date EXIF" msgstr "Date EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Taille"

View File

@@ -1,26 +1,25 @@
# Translators: # Translators:
# hsoft <hsoft@hardcoded.net>, 2013 # Andrew Senetar <arsenetar@gmail.com>, 2021
# hsoft <hsoft@hardcoded.net>, 2013 # Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: French (https://www.transifex.com/voltaicideas/teams/116153/fr/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: fr\n"
"Language-Team: French (http://www.transifex.com/projects/p/dupeguru/language/fr/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Aucun doublon marqué. Rien à faire." msgstr "Aucun doublon marqué. Rien à faire."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Aucun doublon sélectionné. Rien à faire." msgstr "Aucun doublon sélectionné. Rien à faire."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -28,27 +27,27 @@ msgstr ""
"Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement " "Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement "
"encombrer votre système. Continuer?" "encombrer votre système. Continuer?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Scan de doublons en cours" msgstr "Scan de doublons en cours"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Chargement en cours" msgstr "Chargement en cours"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Déplacement en cours" msgstr "Déplacement en cours"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Copie en cours" msgstr "Copie en cours"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Envoi de fichiers à la corbeille" msgstr "Envoi de fichiers à la corbeille"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -56,219 +55,204 @@ msgstr ""
"Une action précédente est encore en cours. Attendez quelques secondes avant " "Une action précédente est encore en cours. Attendez quelques secondes avant "
"d'en repartir une nouvelle." "d'en repartir une nouvelle."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Aucun doublon trouvé." msgstr "Aucun doublon trouvé."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Tous les fichiers marqués ont été copiés correctement." msgstr "Tous les fichiers marqués ont été copiés correctement."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Tous les fichiers marqués ont été déplacés correctement." msgstr "Tous les fichiers marqués ont été déplacés correctement."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
"Tous les fichiers marqués ont été correctement envoyés à la corbeille." "Tous les fichiers marqués ont été correctement envoyés à la corbeille."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Impossible d'ouvrir le fichier: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' est déjà dans la liste." msgstr "'{}' est déjà dans la liste."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' n'existe pas." msgstr "'{}' n'existe pas."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "%d fichiers seront ignorés des prochains scans. Continuer?" msgstr "%d fichiers seront ignorés des prochains scans. Continuer?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "copier" msgstr "Sélectionnez un dossier vers lequel copier les fichiers marqués."
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "déplacer" msgstr "Sélectionnez un dossier vers lequel déplacer les fichiers marqués."
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués."
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Choisissez une destination pour votre exportation CSV" msgstr "Choisissez une destination pour votre exportation CSV"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Impossible d'écrire le fichier: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences." "Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "%d fichiers seront retirés des résultats. Continuer?" msgstr "%d fichiers seront retirés des résultats. Continuer?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation." msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Collecte des fichiers à scanner"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides." msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Collecte des fichiers à scanner"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d hors-groupe)" msgstr "%s (%d hors-groupe)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 paires trouvées" msgstr "0 paires trouvées"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d paires trouvées" msgstr "%d paires trouvées"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Lu la taille de %d/%d fichiers"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Vous envoyez {} fichier(s) à la corbeille." msgstr "Vous envoyez {} fichier(s) à la corbeille."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Expressions régulières"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr ""
"Voulez-vous vider la liste de fichiers ignorés des %d items qu'elle " "Voulez-vous vider la liste de fichiers ignorés des %d items qu'elle "
"contient?" "contient?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Aucune" msgstr "Nom de fichier"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Chiffres à la fin" msgstr "Nom de fichier - Champs"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Pas de chiffres à la finr" msgstr "Nom de fichier - Champs (sans ordre)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "Le plus long" msgstr "Tags"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "Le plus court" msgstr "Contenu"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "Plus grand"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Moins grand"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Plus récent"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Moins récent"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) doublons marqués."
#: core/results.py:136
msgid " filter: %s"
msgstr " filtre: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lu les métadonnées de %d/%d fichiers"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "Analyzé %d/%d images" msgstr "Analyzé %d/%d images"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "%d/%d blocs d'images comparés" msgstr "%d/%d blocs d'images comparés"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Préparation pour la comparaison" msgstr "Préparation pour la comparaison"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "Vérifié %d/%d paires" msgstr "Vérifié %d/%d paires"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Lu l'EXIF de %d/%d images" msgstr "Lu l'EXIF de %d/%d images"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Date EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Aucune"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Chiffres à la fin"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Pas de chiffres à la finr"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Le plus long"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Le plus court"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Plus grand"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Moins grand"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Plus récent"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Moins récent"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) doublons marqués."
#: core\results.py:149
msgid " filter: %s"
msgstr " filtre: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Lu la taille de %d/%d fichiers"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Lu les métadonnées de %d/%d fichiers"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Bientôt terminé! Bidouille des résultats..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Dossiers"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Envoi de fichiers à la corbeille"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d paires groupées"
#~ msgid "Removing false matches"
#~ msgstr "Retrait des paires invalides"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Vérification de %d/%d paires dans la ignore list"
#~ msgid "Doing group prioritization"
#~ msgstr "Prioritization des groupes"

View File

@@ -1,27 +1,34 @@
# Translators: # Translators:
# hsoft <hsoft@hardcoded.net>, 2012 # Andrew Senetar <arsenetar@gmail.com>, 2021
# hsoft <hsoft@hardcoded.net>, 2012-2013 # Fuan <jcfrt@posteo.net>, 2021
# hsoft <hsoft@hardcoded.net>, 2013 #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: French (https://www.transifex.com/voltaicideas/teams/116153/fr/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: fr\n"
"Language-Team: French (http://www.transifex.com/projects/p/dupeguru/language/fr/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Quitter" msgstr "Quitter"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Options"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Liste de doublons ignorés" msgstr "Liste de doublons ignorés"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Vider la cache d'images"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "Aide dupeGuru" msgstr "Aide dupeGuru"
@@ -34,6 +41,14 @@ msgstr "À propos de dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Ouvrir logs de déboguage" msgstr "Ouvrir logs de déboguage"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Voulez-vous vraiment vider la cache de vos analyses précédentes?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "La cache des analyses précédentes a été vidée."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "Fichier {} (*.{})" msgstr "Fichier {} (*.{})"
@@ -64,7 +79,7 @@ msgstr "Symlink"
#: qt/deletion_options.py:48 #: qt/deletion_options.py:48
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr "(non pris en charge)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files" msgid "Directly delete files"
@@ -129,6 +144,30 @@ msgstr "Aide"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Charger résultats récents" msgstr "Charger résultats récents"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Mode de l'application:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Musique"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Image"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standard"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Type de scan:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Plus d'options"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Sélectionnez les dossiers à scanner puis faites \"Scan\"." msgstr "Sélectionnez les dossiers à scanner puis faites \"Scan\"."
@@ -203,9 +242,78 @@ msgstr "Vider"
msgid "Close" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Type de scan:" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Détails"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Tags à scanner:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Track"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artiste"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titre"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Année"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Proportionalité des mots"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Comparer les mots similaires"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Comparer les fichiers de différents types"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Utiliser les expressions régulières pour les filtres"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Effacer les dossiers vides après un déplacement"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorer doublons avec hardlink vers le même fichier"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Mode de déboguage (redémarrage requis)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Comparer les images de tailles différentes"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -213,11 +321,11 @@ msgstr "Seuil du filtre:"
#: qt/preferences_dialog.py:69 #: qt/preferences_dialog.py:69
msgid "More Results" msgid "More Results"
msgstr "+ de doublons" msgstr "Plus de doublons"
#: qt/preferences_dialog.py:74 #: qt/preferences_dialog.py:74
msgid "Fewer Results" msgid "Fewer Results"
msgstr "- de doublons" msgstr "Moins de doublons"
#: qt/preferences_dialog.py:81 #: qt/preferences_dialog.py:81
msgid "Font size:" msgid "Font size:"
@@ -283,12 +391,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Révéler Fichier" msgstr "Révéler Fichier"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Détails"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -392,7 +494,7 @@ msgstr "Réinitialiser"
#: qt/result_window.py:185 #: qt/result_window.py:185
msgid "{} Results" msgid "{} Results"
msgstr "{} (Résultats)" msgstr "{} résultats"
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only" msgid "Dupes Only"
@@ -404,86 +506,7 @@ msgstr "Delta"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Sélectionnez un fichier résultats dans lequel sauvegarder" msgstr "Sélectionnez un fichier dans lequel sauvegarder les résultats"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Tags à scanner:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Track"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artiste"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titre"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Année"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Proportionalité des mots"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Comparer les mots similaires"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Comparer les fichiers de différents types"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Utiliser les expressions régulières pour les filtres"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Effacer les dossiers vides après un déplacement"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorer doublons avec hardlink vers le même fichier"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Mode de déboguage (redémarrage requis)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Comparer les images de tailles différentes"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Vider la cache d'images"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Voulez-vous vraiment vider la cache de vos analyses précédentes?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "La cache des analyses précédentes a été vidée."
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
@@ -567,7 +590,7 @@ msgstr "Préférences de dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results" msgid "dupeGuru Results"
msgstr "dupeGuru (Résultats)" msgstr "Résultats dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website" msgid "dupeGuru Website"
@@ -587,7 +610,7 @@ msgstr "Exporter les résultats vers HTML"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results" msgid "Fewer results"
msgstr "- de doubles" msgstr "moins de doublons"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Filter" msgid "Filter"
@@ -635,17 +658,12 @@ msgstr "Mode"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "More results" msgid "More results"
msgstr "+ de doubles" msgstr "plus de doublons"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Options"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Coller" msgstr "Coller"
@@ -680,7 +698,7 @@ msgstr "Révéler sélectionné dans Finder"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Select All" msgid "Select All"
msgstr "" msgstr "Tout sélectionner"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..." msgid "Send Marked to Trash..."
@@ -710,114 +728,217 @@ msgstr "Fenêtre"
msgid "Zoom" msgid "Zoom"
msgstr "Réduire/agrandir" msgstr "Réduire/agrandir"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Filtres d'exclusion"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Résultats de scan"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Charger dossiers..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Sauvegarder dossiers..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Sélectionnez un fichier de dossier à charger"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "Dossiers dupeGuru (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Sélectionnez un fichier pour y sauvegarder vos dossiers"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "Dossiers dupeGuru (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Ajouter"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Réinitialiser"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Tester chaîne"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Tapez une expression régulière python ici..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Tapez un chemin ou un nom de fichier ici..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
"Ces expressions régulières python (sensible aux majuscules) peuvent ignorer les fichiers pendant les scans. Les dossiers auront également leur <strong>état par défaut</strong> mis sur Exclus dans l'onglet Dossiers si leur nom correspond à une des expressions régulières sélectionnées<br>Pour chaque fichier collecté, deux tests sont faits pour déterminer s'il doit être totalement ignoré:<br><li>1. Les expressions régulières sans séparateur de chemin sont comparées au nom de fichier seul.</li>\n"
"<li>2. Les expressions régulières avec au moins un séparateur de chemin sont comparées au chemin complet vers le fichier.</li><br>\n"
"Exemple: si vous voulez uniquement ignorer les fichiers .PNG du dossier \"Mes Images\":<br><code>.*Mes\\sImages\\\\.*\\.png</code><br><br>Vous pouvez tester l'expression régulière via le bouton \"Tester la chaîne de caractères\" après avoir tapé un faux chemin de fichier dans le champs correspondant:<br><code>C:\\\\Utilisateur\\Mes Images\\test.png</code><br><br>\n"
"Les expressions régulières qui fonctionnent seront surlignées.<br>S'il y a au moins un surlignage, le chemin ou nom de fichier testé sera ignoré durant les scans.<br><br>Les dossiers et fichiers commençant par un point '.' sont ignorés par défaut.<br><br>"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Music" msgid "Compilation error: "
msgstr "Erreur de compilation:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Accroître zoom"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Décroître zoom"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Taille normale"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "Meilleur ajustement"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Mode de cache d'images:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Outrepasser le thème dicônes dans le visualiseur"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "" msgstr ""
"Utiliser nos propres icônes plutôt que celles fournies par le moteur du "
"thème"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\pe\preferences_dialog.py:66
msgid "Picture" msgid "Show scrollbars in image viewers"
msgstr "Afficher les barres de défilement dans visualiseur d'images"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "" msgstr ""
"Si l'image affichée ne rentre par dans la fenêtre, afficher les barres de "
"défilement pour faire glisser la vue"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\preferences_dialog.py:156
msgid "Standard" msgid "Use default position for tab bar (requires restart)"
msgstr "Position par défaut pour la barre d'onglets (redémarrage requis)"
#: qt\preferences_dialog.py:158
msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr "" msgstr ""
"Placer la barre d'onglets sous le menu principal plutôt qu'à côté.\n"
"Sur MacOS, cette barre remplira la fenêtre en largeur."
#: qt/directories_dialog.py:135 #: qt\preferences_dialog.py:172
msgid "More Options" msgid "Use bold font for references"
msgstr "Utiliser police en gras pour les références"
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr "Couleur du texte des référénces:"
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr "Couleur de fond pour les références:"
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr "Couleur du texte des delta:"
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr "Affiche barre de titre et peut être ancrée"
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr "" msgstr ""
"Quand la barre de titre est cachée, utilisez la touche méta pour déplacer la"
" fenêtre flottante"
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\preferences_dialog.py:199
#~ msgstr "Retrait des tracks mortes de votre librairie iTunes" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"La barre de titre ne peut être désactivée que quand la fenêtre est ancrée"
#~ msgid "Scanning the iTunes Library" #: qt\preferences_dialog.py:202
#~ msgstr "Scan de la librairie iTunes en cours" msgid "Vertical title bar"
msgstr "Barre de titre verticale"
#~ msgid "Sending dupes to the Trash" #: qt\preferences_dialog.py:204
#~ msgstr "Envoi de doublons à la corbeille en cours" msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
"Placer la barre de titre à la verticale côté gauche plutôt que à "
"l'horizontale en haut"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\tabbed_window.py:44
#~ msgstr "En communication avec iTunes. N'y touchez pas!" msgid "Show tab bar"
msgstr "Afficher la barre d'onglets"
#~ msgid "" #: qt\exclude_list_dialog.py:152
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid ""
#~ msgstr "" "These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
#~ "Votre librairie iTunes contient %d tracks mortes qui seront retirées. " "<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
#~ "Continuer?" "Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Ces expressions régulières python (sensible aux majuscules) peuvent ignorer les fichiers pendant les scans. Les dossiers auront également leur <strong>état par défaut</strong> mis sur Exclus dans l'onglet Dossiers si leur nom correspond à une des expressions régulières sélectionnées<br>Pour chaque fichier collecté, deux tests sont faits pour déterminer s'il doit être totalement ignoré:<br><li>1. Les expressions régulières sans séparateur de chemin sont comparées au nom de fichier seul.</li>\n"
"<li>2. Les expressions régulières avec au moins un séparateur de chemin sont comparées au chemin complet vers le fichier.</li><br>\n"
"Exemple: si vous voulez uniquement ignorer les fichiers .PNG du dossier \"Mes Images\":<br><code>.*Mes\\sImages\\\\.*\\.png</code><br><br>Vous pouvez tester l'expression régulière via le bouton \"Tester la chaîne de caractères\" après avoir tapé un faux chemin de fichier dans le champs correspondant:<br><code>C:\\\\Utilisateur\\Mes Images\\test.png</code><br><br>\n"
"Les expressions régulières qui fonctionnent seront surlignées.<br>S'il y a au moins un surlignage, le chemin ou nom de fichier testé sera ignoré durant les scans.<br><br>Les dossiers et fichiers commençant par un point '.' sont ignorés par défaut.<br><br>"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\app.py:256
#~ msgstr "Votre librairie iTunes ne contient aucune track morte." msgid "Results"
msgstr "Résultats"
#~ msgid "The iTunes application couldn't be found." #: qt\preferences_dialog.py:150
#~ msgstr "L'application iTunes n'a pas pu être trouvée" msgid "General Interface"
msgstr "Interface générale"
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\preferences_dialog.py:176
#~ msgstr "En communication avec iPhoto. N'y touchez pas!" msgid "Result Table"
msgstr "Tableau de résultats"
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\preferences_dialog.py:205
#~ msgstr "En communication avec Aperture. N'y touchez pas!" msgid "Details Window"
msgstr "Fenêtre de détails"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\preferences_dialog.py:285
#~ msgstr "" msgid "General"
#~ "Les photos supprimés d'Aperture sont dans le projet nommé \"dupeGuru " msgstr "Général"
#~ "Trash\"."
#~ msgid "The iPhoto application couldn't be found." #: qt\preferences_dialog.py:286
#~ msgstr "iPhoto n'a pas pu être trouvée dans vos applications." msgid "Display"
msgstr "Affichage"
#~ msgid "Preferences"
#~ msgstr "Préférences"
#~ msgid "Check for Update"
#~ msgstr "Vérifier les mises à jour"
#~ msgid "Filename"
#~ msgstr "Nom de fichier"
#~ msgid "Filename - Fields"
#~ msgstr "Nom de fichier (Champs)"
#~ msgid "Filename - Fields (No Order)"
#~ msgstr "Nom de fichier (Champs sans ordre)"
#~ msgid "Tags"
#~ msgstr "Tags"
#~ msgid "Contents"
#~ msgstr "Contenu"
#~ msgid "Audio Contents"
#~ msgstr "Contenu Audio"
#~ msgid "EXIF Timestamp"
#~ msgstr "EXIF Timestamp"
#~ msgid "Folders"
#~ msgstr "Dossiers"
#~ msgid "Add Aperture Library"
#~ msgstr "Ajouter librairie Aperture"
#~ msgid "Add iPhoto Library"
#~ msgstr "Ajouter librairie iPhoto"
#~ msgid "Add iTunes Library"
#~ msgstr "Ajouter librairie iTunes"
#~ msgid "Audio Content"
#~ msgstr "Contenu Audio"
#~ msgid "Content"
#~ msgstr "Contenu"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "Préférences de dupeGuru ME"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "Préférences de dupeGuru PE"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Retirer les tracks mortes dans iTunes"

View File

@@ -1,122 +1,123 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: Armenian (https://www.transifex.com/voltaicideas/teams/116153/hy/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: hy\n"
"Language-Team: Armenian (http://www.transifex.com/projects/p/dupeguru/language/hy/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Ֆայլի ճ-ը" msgstr "Ֆայլի ճ-ը"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Սխալի գրությունը" msgstr "Սխալի գրությունը"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Տեսակ"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Թղթապանակ"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Ֆայլի անունը"
#: core/prioritize.py:147
msgid "Size"
msgstr "Չափը"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Փոփոխությունը"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Տևողությունը" msgstr "Տևողությունը"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Բիթրեյթը" msgstr "Բիթրեյթը"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Սիմպլրեյթը" msgstr "Սիմպլրեյթը"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Ֆայլի անունը"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Թղթապանակ"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Չափը (ՄԲ)" msgstr "Չափը (ՄԲ)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Ժամանակը" msgstr "Ժամանակը"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Սեմփլրեյթը" msgstr "Սեմփլրեյթը"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Տեսակ"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Փոփոխությունը"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Անունը" msgstr "Անունը"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Կատարողը" msgstr "Կատարողը"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Ալբոմը" msgstr "Ալբոմը"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Ժանրը" msgstr "Ժանրը"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Տարին" msgstr "Տարին"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Շավիղի համարը" msgstr "Շավիղի համարը"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Մեկնաբանություն" msgstr "Մեկնաբանություն"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Համընկնում %-ին" msgstr "Համընկնում %-ին"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Բառ է օգտ." msgstr "Բառ է օգտ."
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Խաբկանքի ք-ը" msgstr "Խաբկանքի ք-ը"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Չափերը" msgstr "Չափերը"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Չափը (ԿԲ)" msgstr "Չափը (ԿԲ)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "EXIF Timestamp"
#: core\prioritize.py:156
msgid "Size"
msgstr "Չափը"

View File

@@ -1,50 +1,54 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Armenian (https://www.transifex.com/voltaicideas/teams/116153/hy/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: hy\n"
"Language-Team: Armenian (http://www.transifex.com/projects/p/dupeguru/language/hy/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr "Նշված կրկնօրինակներ չկան: Ոչինչ չի արվել."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr "Ընտրված կրկնօրինակներ չկան: Ոչինչ չի արվել."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
"Դուք պատրաստվում եք միանգամից շատ ֆայլեր բացել: Կախված այն բանից, թե ինչով "
"են բացվում այդ ֆայլերը, դա անելը կարող է բավականին խառնաշփոթ ստեղծել: "
"Շարունակել?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Ստուգվում են կրկնօրինակները" msgstr "Ստուգվում են կրկնօրինակները"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Բացվում է" msgstr "Բացվում է"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Տեղափոխվում է" msgstr "Տեղափոխվում է"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Պատճենվում է" msgstr "Պատճենվում է"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Ուղարկվում է Աղբարկղ" msgstr "Ուղարկվում է Աղբարկղ"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -52,216 +56,202 @@ msgstr ""
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: " "Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:" "Սպասեք մի քանի վայրկյան և կրկին փորձեք:"
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Կրկնօրինակներ չկան:" msgstr "Կրկնօրինակներ չկան:"
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:"
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:"
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:"
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Հնարավոր չէ բեռնել ֆայլը: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}'-ը արդեն առկա է ցանկում:" msgstr "'{}'-ը արդեն առկա է ցանկում:"
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}'-ը գոյություն չունի:" msgstr "'{}'-ը գոյություն չունի:"
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "" msgstr ""
"Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:" "Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "պատճենել" msgstr "Ընտրեք գրացուցակ, որտեղ ցանկանում եք պատճենել նշված ֆայլերը"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "տեղափոխել"
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար"
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
"Խնդրում ենք ընտրել գրացուցակ, որտեղ ցանկանում եք տեղափոխել նշված ֆայլերը"
#: core/app.py:518 #: core\app.py:527
msgid "Select a destination for your exported CSV"
msgstr "Ընտրեք նպատակակետ ձեր արտահանված CSV- ի համար"
#: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Չէր կարող գրել է ֆայլը: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:" msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:"
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:" msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr "{} կրկնօրինակ խմբերը փոխվել են առաջնահերթության կարգով:"
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:" msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:"
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d անպիտան)" msgstr "%s (%d անպիտան)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 համընկնում է գտնվել" msgstr "0 համընկնում է գտնվել"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d համընկնում է գտնվել" msgstr "%d համընկնում է գտնվել"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի չափը"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "" msgstr "Դուք {} ֆայլ եք ուղարկում աղբարկղ:"
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Կանոնավոր արտահայտություններ"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Ցանկանու՞մ եք հեռացնել բոլոր %d ֆայլերը անտեսումների ցանկից:" msgstr "Ցանկանու՞մ եք հեռացնել բոլոր %d ֆայլերը անտեսումների ցանկից:"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Ոչինչ" msgstr "Ֆայլի անունը"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Ավարտվում է թվով" msgstr "Ֆայլի անվանումը - Դաշտեր"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Չի ավարտվում է թվով" msgstr "Ֆայլի անուն - դաշտեր (պատվեր չկա)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "" msgstr "Tags"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "" msgstr "Բովանդակություն"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "Ամենաբարձրը"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Ամենացածրը"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Նորագույնը"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Ամենահինը"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) նշված կրկնօրինակներ:"
#: core/results.py:136
msgid " filter: %s"
msgstr "ֆիլտր. %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի մետատվյալները"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "Ստուգվում է %d/%d նկարները" msgstr "Ստուգվում է %d/%d նկարները"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "Կատարվում է %d/%d տվյալի համընկնում" msgstr "Կատարվում է %d/%d տվյալի համընկնում"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Նախապատրաստեցվում է համընկնումը" msgstr "Նախապատրաստեցվում է համընկնումը"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "Ստուգում է %d/%d համընկնումները" msgstr "Ստուգում է %d/%d համընկնումները"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Կարդալ EXIF-ը d/%d նկարներից" msgstr "Կարդալ EXIF-ը d/%d նկարներից"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "EXIF Timestamp"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Ոչինչ"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Ավարտվում է թվով"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Չի ավարտվում է թվով"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Ամենաերկար"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Ամենակարճը"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Ամենաբարձրը"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Ամենացածրը"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Նորագույնը"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Ամենահինը"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) նշված կրկնօրինակներ:"
#: core\results.py:149
msgid " filter: %s"
msgstr "ֆիլտր. %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի չափը"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի մետատվյալները"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Գրեթե արված է! Արդյունքների կազմակերպում..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Թղթապանակներ"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Ֆայլերը ուղարկվում են Աղբարկղ"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Խմբավորվել է %d/%d համընկնում"
#~ msgid "Removing false matches"
#~ msgstr "Սխալ համընկնումների հեռացում"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Ընթացքում է %d/%d համընկնումները ընդդեմ անտեսվող ցանկի"
#~ msgid "Doing group prioritization"
#~ msgstr "Խմբի առաջնայնացում"

View File

@@ -1,23 +1,33 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Armenian (https://www.transifex.com/voltaicideas/teams/116153/hy/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: hy\n"
"Language-Team: Armenian (http://www.transifex.com/projects/p/dupeguru/language/hy/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Փակել" msgstr "Փակել"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Ընտրանքներ"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "" msgstr "անտեսել ցուցակ"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Մաքրել նկարի պահոցը"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
@@ -31,49 +41,62 @@ msgstr "dupeGuru-ի մասին"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Բացել Սխալների մատյանը" msgstr "Բացել Սխալների մատյանը"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Ցանկանու՞մ եք հեռացնել բոլոր պահված նկարները ստուգելուց:"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Նկարի պահոցը մաքրվել է:"
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr "{} ֆայլ (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options" msgid "Deletion Options"
msgstr "" msgstr "Ջնջումների Ընտրանքներ"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files" msgid "Link deleted files"
msgstr "" msgstr "Կապել ջնջված ֆայլերը"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid "" msgid ""
"After having deleted a duplicate, place a link targeting the reference file " "After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file." "to replace the deleted file."
msgstr "" msgstr ""
"րկնօրինակը ջնջելուց հետո տեղադրեք հղում, տեղադրել հղում նպատակային հղվող "
"ֆայլը փոխարինել ջնջված ֆայլը."
#: qt/deletion_options.py:44 #: qt/deletion_options.py:44
msgid "Hardlink" msgid "Hardlink"
msgstr "" msgstr "Hardlink"
#: qt/deletion_options.py:44 #: qt/deletion_options.py:44
msgid "Symlink" msgid "Symlink"
msgstr "" msgstr "Symlink"
#: qt/deletion_options.py:48 #: qt/deletion_options.py:48
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr " (չաջակցվող)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files" msgid "Directly delete files"
msgstr "" msgstr "Ուղղակիորեն ջնջեք ֆայլերը"
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid "" msgid ""
"Instead of sending files to trash, delete them directly. This option is " "Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work." "usually used as a workaround when the normal deletion method doesn't work."
msgstr "" msgstr ""
"Ֆայլերը աղբարկղ ուղարկելու փոխարեն, դրանք ուղղակիորեն ջնջեք: Այս տարբերակը "
"սովորաբար օգտագործվում է որպես լուծում, երբ ջնջման սովորական մեթոդը չի "
"գործում:"
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed" msgid "Proceed"
msgstr "" msgstr "Շարունակել"
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel" msgid "Cancel"
@@ -122,6 +145,30 @@ msgstr "Օգնություն"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Բացել Վերջին արդյունքները" msgstr "Բացել Վերջին արդյունքները"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Դիմումի ռեժիմ"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Երաժշտություն"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Նկար"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Ստանդարտ"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Ստուգելու տեսակը."
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Լրացուցիչ ընտրանքներ"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Ընտրեք ստուգելու թղթապանակները և սեղմեք \"Ստուգել\":" msgstr "Ընտրեք ստուգելու թղթապանակները և սեղմեք \"Ստուգել\":"
@@ -184,20 +231,89 @@ msgstr "Նորմալ"
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0 #: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected" msgid "Remove Selected"
msgstr "" msgstr "Հեռացնել ընտրվածը"
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0 #: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear" msgid "Clear"
msgstr "" msgstr "Մաքրել"
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61 #: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Close" msgid "Close"
msgstr "Փակել" msgstr "Փակել"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Ստուգելու տեսակը." #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Մանրամասն"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Ստուգվող կցապիտակները."
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Շավիղը"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Կատարողը"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Ալբոմը"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Վերնագիրը"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Ժանրը"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Տարին"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Բառի չափը"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Ըստ նման բառերի համընկնման"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Կարող է խառը տեսակի"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Օգտ. կանոնավոր սահմանումներ ֆիլտրելիս"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Հեռացնել"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Անտեսել կրկնօրինակները հարդ նույն ֆայլը"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Սխալի եղանակը (պահանջում է վերագործարկում)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Նկարների համընկնում տարբեր չափերով"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -274,12 +390,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Ցուցադրել ընտրվածը" msgstr "Ցուցադրել ընտրվածը"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Մանրամասն"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -323,7 +433,7 @@ msgstr "Ավելացնել ընտրվածը Անտեսումների ցանկ"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference" msgid "Make Selected into Reference"
msgstr "" msgstr "Ընտրված նյութը դարձրեք տեղեկատու նյութ:"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application" msgid "Open Selected with Default Application"
@@ -359,7 +469,7 @@ msgstr "Արտածել HTML-ով"
#: qt/result_window.py:88 #: qt/result_window.py:88
msgid "Export To CSV" msgid "Export To CSV"
msgstr "" msgstr "Արտահանել CSV"
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..." msgid "Save Results..."
@@ -391,91 +501,12 @@ msgstr "Միայն կրկ."
#: qt/result_window.py:194 #: qt/result_window.py:194
msgid "Delta Values" msgid "Delta Values"
msgstr "" msgstr "Դելտա արժեքներ"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Ընտրեք ֆայլը՝ պահպանելու արդյունքները՝" msgstr "Ընտրեք ֆայլը՝ պահպանելու արդյունքները՝"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Ստուգվող կցապիտակները."
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Շավիղը"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Կատարողը"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Ալբոմը"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Վերնագիրը"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Ժանրը"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Տարին"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Բառի չափը"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Ըստ նման բառերի համընկնման"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Կարող է խառը տեսակի"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Օգտ. կանոնավոր սահմանումներ ֆիլտրելիս"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Հեռացնել"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Անտեսել կրկնօրինակները հարդ նույն ֆայլը"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Սխալի եղանակը (պահանջում է վերագործարկում)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Նկարների համընկնում տարբեր չափերով"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Մաքրել նկարի պահոցը"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Ցանկանու՞մ եք հեռացնել բոլոր պահված նկարները ստուգելուց:"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Նկարի պահոցը մաքրվել է:"
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Անտեսել ֆայլերը, որոնք փոքր են՝" msgstr "Անտեսել ֆայլերը, որոնք փոքր են՝"
@@ -486,7 +517,7 @@ msgstr "ԿԲ"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results" msgid "%@ Results"
msgstr "" msgstr "%@ Արդյունքներ"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Action" msgid "Action"
@@ -550,7 +581,7 @@ msgstr "Թղթապանակներ"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru" msgid "dupeGuru"
msgstr "" msgstr "dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences" msgid "dupeGuru Preferences"
@@ -570,7 +601,7 @@ msgstr "Խմբագրել"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV" msgid "Export Results to CSV"
msgstr "" msgstr "Արտահանել արդյունքները CSV ձևաչափով:"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML" msgid "Export Results to XHTML"
@@ -590,7 +621,7 @@ msgstr "Ֆիլտրի կարգը."
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..." msgid "Filter Results..."
msgstr "" msgstr "Զտել արդյունքները:"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window" msgid "Folder Selection Window"
@@ -598,7 +629,7 @@ msgstr "Թղթապանակը ընտրելու պատուհանը"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:" msgid "Font Size:"
msgstr "" msgstr "Տառատեսակի չափը ՝"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru" msgid "Hide dupeGuru"
@@ -632,11 +663,6 @@ msgstr "Լր. արդյունքներ"
msgid "Ok" msgid "Ok"
msgstr "ԼԱՎ" msgstr "ԼԱՎ"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Ընտրանքներ"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Տեղադրել" msgstr "Տեղադրել"
@@ -647,7 +673,7 @@ msgstr "Կարգավորումներ..."
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look" msgid "Quick Look"
msgstr "" msgstr "Quick Look"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru" msgid "Quit dupeGuru"
@@ -659,11 +685,11 @@ msgstr "Ետարկել ծրագրայինի"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults" msgid "Reset To Defaults"
msgstr "" msgstr "Զրոյացնել լռելյայն"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal" msgid "Reveal"
msgstr "" msgstr "Բացահայտել"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder" msgid "Reveal Selected in Finder"
@@ -671,7 +697,7 @@ msgstr "Ցուցադրել ընտրվածը Գտնվածում"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Select All" msgid "Select All"
msgstr "" msgstr "Ընտրել բոլորը"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..." msgid "Send Marked to Trash..."
@@ -679,7 +705,7 @@ msgstr "Ուղարկել նշվածները Աղբարկղ..."
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Services" msgid "Services"
msgstr "" msgstr "Առայություններ"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Show All" msgid "Show All"
@@ -701,112 +727,198 @@ msgstr "Պատուհանը"
msgid "Zoom" msgid "Zoom"
msgstr "Չափը" msgstr "Չափը"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Բացառման ֆիլտրեր"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Սկան արդյունքներ"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "բեռնվածքի տեղեկագրքեր..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Պահել գրացուցակները..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Ընտրեք գրացուցակների ֆայլ `բեռնելու համար"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuru տեղեկատուներ (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Ընտրեք ֆայլ, ձեր գրացուցակները պահելու համար"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuru տեղեկատուներ (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Ավելացնել"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Վերականգնել Նախնականը"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Թեստային լարային"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "" msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_dialog.py:85
msgid "Music" msgid "Type a file system path or filename here..."
msgstr "" msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_dialog.py:152
msgid "Picture" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Standard" msgid "Compilation error: "
msgstr "" msgstr ""
#: qt/directories_dialog.py:135 #: qt\pe\image_viewer.py:56
msgid "More Options" msgid "Increase zoom"
msgstr "" msgstr ""
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\pe\image_viewer.py:66
#~ msgstr "Հեռացվում են վնասված շավիղները iTunes-ի Շտեմարանից" msgid "Decrease zoom"
msgstr ""
#~ msgid "Scanning the iTunes Library" #: qt\pe\image_viewer.py:71
#~ msgstr "Ստուգվում է iTunes-ի Շտեմարանը" msgid "Ctrl+/"
msgstr ""
#~ msgid "Sending dupes to the Trash" #: qt\pe\image_viewer.py:76
#~ msgstr "Խաբկանքները տեղափոխվում են Աղբարկղ" msgid "Normal size"
msgstr ""
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\pe\image_viewer.py:81
#~ msgstr "" msgid "Ctrl+*"
msgstr ""
#~ msgid "" #: qt\pe\image_viewer.py:86
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Best fit"
#~ msgstr "" msgstr ""
#~ "Ձեր iTunes- Շտեմարանը պարունակում է %d մահացած շավիղներ, որոնք կարող են "
#~ "ջնջվել: Շարունակե՞լ:"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\pe\preferences_dialog.py:49
#~ msgstr "Դուք չունեք շավիղներ Ձեր iTunes Շտեմարանում" msgid "Picture cache mode:"
msgstr "Նկարի քեշի ռեժիմ:"
#~ msgid "The iTunes application couldn't be found." #: qt\pe\preferences_dialog.py:56
#~ msgstr "" msgid "Override theme icons in viewer toolbar"
msgstr ""
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\pe\preferences_dialog.py:58
#~ msgstr "Զրույց iPhoto-ի հետ: Մի կպեք! " msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\pe\preferences_dialog.py:66
#~ msgstr "" msgid "Show scrollbars in image viewers"
msgstr ""
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\pe\preferences_dialog.py:68
#~ msgstr "" msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
#~ msgid "The iPhoto application couldn't be found." #: qt\preferences_dialog.py:156
#~ msgstr "iPhoto ծրագիրը չի գտնվել:" msgid "Use default position for tab bar (requires restart)"
msgstr ""
#~ msgid "Preferences" #: qt\preferences_dialog.py:158
#~ msgstr "Կարգավորումներ" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
#~ msgid "Check for Update" #: qt\preferences_dialog.py:172
#~ msgstr "Ստուգել թարմացումները" msgid "Use bold font for references"
msgstr ""
#~ msgid "Filename" #: qt\preferences_dialog.py:176
#~ msgstr "Ֆայլի անունը" msgid "Reference foreground color:"
msgstr ""
#~ msgid "Filename - Fields" #: qt\preferences_dialog.py:179
#~ msgstr "Ֆայլի անունը - Դաշտերը" msgid "Reference background color:"
msgstr ""
#~ msgid "Filename - Fields (No Order)" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ msgstr "Ֆայլի անունը - Դաշտերը (անկարգ)" msgid "Delta foreground color:"
msgstr ""
#~ msgid "Tags" #: qt\preferences_dialog.py:195
#~ msgstr "Կցապիտակներ" msgid "Show the title bar and can be docked"
msgstr ""
#~ msgid "Contents" #: qt\preferences_dialog.py:197
#~ msgstr "Բովանդակությունը" msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
#~ msgid "Audio Contents" #: qt\preferences_dialog.py:199
#~ msgstr "Ձայնային բովանդակությունը" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
#~ msgid "EXIF Timestamp" #: qt\preferences_dialog.py:202
#~ msgstr "EXIF Timestamp" msgid "Vertical title bar"
msgstr ""
#~ msgid "Folders" #: qt\preferences_dialog.py:204
#~ msgstr "Թղթապանակներ" msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
#~ msgid "Add Aperture Library" #: qt\tabbed_window.py:44
#~ msgstr "" msgid "Show tab bar"
msgstr ""
#~ msgid "Add iPhoto Library" #: qt\exclude_list_dialog.py:152
#~ msgstr "Ավելացնել iPhoto-ի Շտեմարանին" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
#~ msgid "Add iTunes Library" #: qt\app.py:256
#~ msgstr "Ավելացնել iTunes թղթապանակ" msgid "Results"
msgstr "Արդյունքներ"
#~ msgid "Audio Content" #: qt\preferences_dialog.py:150
#~ msgstr "Ձայնային բովանդակությունը" msgid "General Interface"
msgstr "Ընդհանուր միջերես"
#~ msgid "Content" #: qt\preferences_dialog.py:176
#~ msgstr "Բովանդակությունը" msgid "Result Table"
msgstr "Արդյունքների աղյուսակ"
#~ msgid "dupeGuru ME Preferences" #: qt\preferences_dialog.py:205
#~ msgstr "dupeGuru-ի ME կարգավորումները" msgid "Details Window"
msgstr "Մանրամասներ Պատուհան"
#~ msgid "dupeGuru PE Preferences" #: qt\preferences_dialog.py:285
#~ msgstr "dupeGuru PE կարգավորումները" msgid "General"
msgstr "Գեներալ"
#~ msgid "Remove Dead Tracks in iTunes" #: qt\preferences_dialog.py:286
#~ msgstr "Հեռացնել մահացած շավիղները iTunes-ից" msgid "Display"
msgstr "Ցուցադրման"

View File

@@ -1,122 +1,122 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: Italian (https://www.transifex.com/voltaicideas/teams/116153/it/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: it\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/dupeguru/language/it/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Percorso del file" msgstr "Percorso del file"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Messaggio di errore" msgstr "Messaggio di errore"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Tipo"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Cartella"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nome del file"
#: core/prioritize.py:147
msgid "Size"
msgstr "Dimensione"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificato"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Durata" msgstr "Durata"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Campionamento" msgstr "Campionamento"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Nome del file"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Cartella"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Dimensione (MB)" msgstr "Dimensione (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Tempo" msgstr "Tempo"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Campionamento" msgstr "Campionamento"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Tipo"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modificato"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Titolo" msgstr "Titolo"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Artista" msgstr "Artista"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Genere" msgstr "Genere"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Anno" msgstr "Anno"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Numero traccia" msgstr "Numero traccia"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Commento" msgstr "Commento"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Somiglianza %" msgstr "Somiglianza %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Parole usate" msgstr "Parole usate"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Conteggio duplicati" msgstr "Conteggio duplicati"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Dimensioni" msgstr "Dimensioni"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Dimensione (KB)" msgstr "Dimensione (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Data EXIF" msgstr "Data EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Dimensione"

View File

@@ -1,51 +1,54 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Italian (https://www.transifex.com/voltaicideas/teams/116153/it/)\n"
"Last-Translator: auanasgheps\n" "Language: it\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/dupeguru/language/it/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Non ci sono duplicati marcati. Nessuna operazione è stata completata." msgstr "Non ci sono duplicati marcati. Nessuna operazione è stata completata."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Non ci sono duplicati selezionati. Nessuna operazione è stata completata." msgstr ""
"Non ci sono duplicati selezionati. Nessuna operazione è stata completata."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "Stai per aprire molti file contemporaneamente. A seconda di quale programma " msgstr ""
"Stai per aprire molti file contemporaneamente. A seconda di quale programma "
"li aprirà, potrebbe crearsi un bel casino. Vuoi continuare?" "li aprirà, potrebbe crearsi un bel casino. Vuoi continuare?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Scansione per i duplicati" msgstr "Scansione per i duplicati"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Caricamento" msgstr "Caricamento"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Spostamento" msgstr "Spostamento"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Copia in corso" msgstr "Copia in corso"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Spostamento nel cestino" msgstr "Spostamento nel cestino"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -53,31 +56,35 @@ msgstr ""
"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. " "Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. "
"Aspetta qualche secondo e quindi riprova." "Aspetta qualche secondo e quindi riprova."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Non sono stati trovati dei duplicati." msgstr "Non sono stati trovati dei duplicati."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Tutti i file marcati sono stati copiati correttamente." msgstr "Tutti i file marcati sono stati copiati correttamente."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Tutti i file marcati sono stati spostati correttamente." msgstr "Tutti i file marcati sono stati spostati correttamente."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Tutti i file marcati sono stati spostati nel cestino." msgstr "Tutti i file marcati sono stati spostati nel cestino."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Impossibile caricare il file: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' è già nella lista." msgstr "'{}' è già nella lista."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' non esiste." msgstr "'{}' non esiste."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -85,190 +92,171 @@ msgstr ""
"Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni " "Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni "
"successive. Continuare?" "successive. Continuare?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "copiare" msgstr "Seleziona una directory in cui desideri copiare i file contrassegnati"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "spostare" msgstr ""
"Seleziona una directory in cui desideri spostare i file contrassegnati"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Seleziona una cartella per {} in essa i file marcati"
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Seleziona una destinazione per il file CSV" msgstr "Seleziona una destinazione per il file CSV"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Impossibile modificare il file: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Non hai impostato nessun comando personalizzato. Impostalo nelle tue " "Non hai impostato nessun comando personalizzato. Impostalo nelle tue "
"preferenze." "preferenze."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Stai per rimuovere %d file dai risultati. Continuare?" msgstr "Stai per rimuovere %d file dai risultati. Continuare?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} gruppi duplicati sono stati cambiati dalla nuova priorirità" msgstr "{} gruppi duplicati sono stati cambiati dalla nuova priorirità"
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Raccolta file da scansionare"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Le cartelle selezionate non contengono file da scansionare." msgstr "Le cartelle selezionate non contengono file da scansionare."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Raccolta file da scansionare"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d scartati)" msgstr "%s (%d scartati)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "Nessun duplicato trovato" msgstr "Nessun duplicato trovato"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "Trovato/i %d duplicato/i" msgstr "Trovato/i %d duplicato/i"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Lettura dimensione di %d/%d file"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Stai spostando {} file al Cestino." msgstr "Stai spostando {} file al Cestino."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Espressioni regolari"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr ""
"Vuoi veramente rimuovere tutti i %d elementi dalla lista dei file da " "Vuoi veramente rimuovere tutti i %d elementi dalla lista dei file da "
"ignorare?" "ignorare?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None"
msgstr "Nessuno"
#: core/prioritize.py:96
msgid "Ends with number"
msgstr "Termina con un numero"
#: core/prioritize.py:97
msgid "Doesn't end with number"
msgstr "Non termina con un numero"
#: core/prioritize.py:98
msgid "Longest"
msgstr "Più lungo"
#: core/prioritize.py:99
msgid "Shortest"
msgstr "Più corto"
#: core/prioritize.py:132
msgid "Highest"
msgstr "Il più alto"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Il più basso"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Il più nuovo"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Il più vecchio"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicati marcati."
#: core/results.py:136
msgid " filter: %s"
msgstr " filtro: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lettura metadata di %d/%d files"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analizzate %d/%d immagini"
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini"
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Preparazione per la comparazione"
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Verificate %d/%d somiglianze"
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Leggi dati EXIF da %d/%d immagini"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr "Impossibile caricare il file: {}"
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr "Impossibile modificare il file: {}"
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename" msgid "Filename"
msgstr "Nome del file" msgstr "Nome del file"
#: core/me/scanner.py:20 #: core\me\scanner.py:21
msgid "Filename - Fields" msgid "Filename - Fields"
msgstr "Nome file - Campi" msgstr "Nome file - Campi"
#: core/me/scanner.py:21 #: core\me\scanner.py:22
msgid "Filename - Fields (No Order)" msgid "Filename - Fields (No Order)"
msgstr "Nome file - Campi (Nessun Ordine)" msgstr "Nome file - Campi (Nessun Ordine)"
#: core/me/scanner.py:22 #: core\me\scanner.py:23
msgid "Tags" msgid "Tags"
msgstr "Tag" msgstr "Tag"
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents" msgid "Contents"
msgstr "Contenuti" msgstr "Contenuti"
#: core/pe/scanner.py:21 #: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "Analizzate %d/%d immagini"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "Preparazione per la comparazione"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "Verificate %d/%d somiglianze"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "Leggi dati EXIF da %d/%d immagini"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Timestamp EXIF" msgstr "Timestamp EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Nessuno"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Termina con un numero"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Non termina con un numero"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Più lungo"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Più corto"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Il più alto"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Il più basso"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Il più nuovo"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Il più vecchio"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicati marcati."
#: core\results.py:149
msgid " filter: %s"
msgstr " filtro: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Lettura dimensione di %d/%d file"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Lettura metadata di %d/%d files"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "Quasi finito! Sto organizzando i risultati..." msgstr "Quasi finito! Sto organizzando i risultati..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "Cartelle" msgstr "Cartelle"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Spostamento nel cestino"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Raggruppati %d/%d duplicati"
#~ msgid "Removing false matches"
#~ msgstr "Rimozione dei falsi positivi"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ "Processati %d/%d duplicati applicando le regole della lista da ignorare"
#~ msgid "Doing group prioritization"
#~ msgstr "Applicazione delle priorità di gruppo"

View File

@@ -1,24 +1,34 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Italian (https://www.transifex.com/voltaicideas/teams/116153/it/)\n"
"Last-Translator: auanasgheps\n" "Language: it\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/dupeguru/language/it/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Esci" msgstr "Esci"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opzioni"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Lista elementi ignorati" msgstr "Lista elementi ignorati"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Cancella la cache delle immagini"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "Aiuto di dupeGuru" msgstr "Aiuto di dupeGuru"
@@ -31,6 +41,16 @@ msgstr "Informazioni su dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Apri registro eventi" msgstr "Apri registro eventi"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Vuoi veramente rimuovere tutte le analisi delle immagini memorizzate nella "
"cache?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "La cache delle immagini è stata cancellata."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "{} file (*.{})" msgstr "{} file (*.{})"
@@ -48,8 +68,8 @@ msgid ""
"After having deleted a duplicate, place a link targeting the reference file " "After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file." "to replace the deleted file."
msgstr "" msgstr ""
"Dopo aver selezionato un duplicato, per sostituire il file eliminato posiziona un collegamento " "Dopo aver selezionato un duplicato, per sostituire il file eliminato "
"che ha come destinazione i file di referenza." "posiziona un collegamento che ha come destinazione i file di referenza."
#: qt/deletion_options.py:44 #: qt/deletion_options.py:44
msgid "Hardlink" msgid "Hardlink"
@@ -73,8 +93,8 @@ msgid ""
"usually used as a workaround when the normal deletion method doesn't work." "usually used as a workaround when the normal deletion method doesn't work."
msgstr "" msgstr ""
"Invece di spostare file nel cestino, eliminali direttamente. Questa opzione " "Invece di spostare file nel cestino, eliminali direttamente. Questa opzione "
"di solito è usata come alternativa al sistema di eliminazione standard quando " "di solito è usata come alternativa al sistema di eliminazione standard "
"non funziona." "quando non funziona."
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed" msgid "Proceed"
@@ -127,6 +147,30 @@ msgstr "Aiuto"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Carica i risultati recenti" msgstr "Carica i risultati recenti"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Modalità applicazione:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Musica"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Foto"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standard"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Tipo di scansione:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Più Opzioni"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Seleziona le cartelle da scansionare e premi \"Scansiona\"." msgstr "Seleziona le cartelle da scansionare e premi \"Scansiona\"."
@@ -149,7 +193,9 @@ msgstr "Hai dei risultati non salvati. Vuoi veramente chiudere?"
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list" msgid "Select a folder to add to the scanning list"
msgstr "Seleziona una cartella da aggiungere alla lista delle cartelle da scansionare" msgstr ""
"Seleziona una cartella da aggiungere alla lista delle cartelle da "
"scansionare"
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load" msgid "Select a results file to load"
@@ -200,9 +246,78 @@ msgstr "Deseleziona"
msgid "Close" msgid "Close"
msgstr "Chiudi" msgstr "Chiudi"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Tipo di scansione:" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Dettagli"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Etichette da scansionare:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Traccia"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titolo"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genere"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Anno"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "'Peso' della parola"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Fai coincidere parole simili"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Includi tipi diversi di file"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Usa le espressioni regolari per filtrare"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Rimuovi le cartelle vuote dopo aver cancellato o spostato"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Non creare gli hardlink per i duplicati verso il medesimo file"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Modalità 'Debug'(è richiesta la riapertura del programma)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Includi immagini di dimensione differente"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -281,12 +396,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Mostra i selezionati" msgstr "Mostra i selezionati"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Dettagli"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -330,7 +439,7 @@ msgstr "Aggiungi gli elementi selezionati alla lista da ignorare"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference" msgid "Make Selected into Reference"
msgstr "" msgstr "Rendi selezionato un Riferimento"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application" msgid "Open Selected with Default Application"
@@ -404,87 +513,6 @@ msgstr "Valori Delta"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Seleziona un file dove salvare i tuoi risultati" msgstr "Seleziona un file dove salvare i tuoi risultati"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Etichette da scansionare:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Traccia"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titolo"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genere"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Anno"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "'Peso' della parola"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Fai coincidere parole simili"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Includi tipi diversi di file"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Usa le espressioni regolari per filtrare"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Rimuovi le cartelle vuote dopo aver cancellato o spostato"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Non creare gli hardlink per i duplicati verso il medesimo file"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Modalità 'Debug'(è richiesta la riapertura del programma)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Includi immagini di dimensione differente"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Cancella la cache delle immagini"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Vuoi veramente rimuovere tutte le analisi delle immagini memorizzate nella "
"cache?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr ""
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Ignora file più piccoli di" msgstr "Ignora file più piccoli di"
@@ -642,11 +670,6 @@ msgstr "Più risultati"
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opzioni"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Incolla" msgstr "Incolla"
@@ -673,7 +696,7 @@ msgstr "Imposta prefefinite"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal" msgid "Reveal"
msgstr "" msgstr "Rivelare"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder" msgid "Reveal Selected in Finder"
@@ -711,112 +734,220 @@ msgstr "Finestra"
msgid "Zoom" msgid "Zoom"
msgstr "Zoom" msgstr "Zoom"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Modalità applicazione:" msgstr "Filtri di esclusione"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:91
msgid "Music" msgid "Scan Results"
msgstr "Musica" msgstr "Risultati della scansione"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:95
msgid "Picture" msgid "Load Directories..."
msgstr "Foto" msgstr "Carica cartelle..."
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\directories_dialog.py:96
msgid "Standard" msgid "Save Directories..."
msgstr "Standard" msgstr "Salva cartelle..."
#: qt/directories_dialog.py:135 #: qt\directories_dialog.py:337
msgid "More Options" msgid "Select a directories file to load"
msgstr "Più Opzioni" msgstr "Seleziona un file delle cartelle da caricare"
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\directories_dialog.py:338
#~ msgstr "Rimozione delle tracce insistenti dalla libreria di iTunes" msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "cartelle di dupeGuru (*.dupegurudirs)"
#~ msgid "Scanning the iTunes Library" #: qt\directories_dialog.py:347
#~ msgstr "Scansione della libreria di iTunes" msgid "Select a file to save your directories to"
msgstr "Seleziona un file in cui salvare le cartelle"
#~ msgid "Sending dupes to the Trash" #: qt\directories_dialog.py:348
#~ msgstr "Spostamento dei duplicati nel cestino" msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "cartelle di dupeGuru (*.dupegurudirs)"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\exclude_list_dialog.py:44
#~ msgstr "" msgid "Add"
msgstr "Addizionare"
#~ msgid "" #: qt\exclude_list_dialog.py:46
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Restore defaults"
#~ msgstr "" msgstr "Ripristina i valori predefiniti"
#~ "La tua libreria di iTunes contiene %d tracce inesistenti pronte per essere "
#~ "rimosse. Continuare?"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\exclude_list_dialog.py:47
#~ msgstr "La tua libreria di iTunes non contiene tracce inesistenti" msgid "Test string"
msgstr "Stringa di prova"
#~ msgid "The iTunes application couldn't be found." #: qt\exclude_list_dialog.py:83
#~ msgstr "" msgid "Type a python regular expression here..."
msgstr "Digita qui un'espressione regolare Python..."
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\exclude_list_dialog.py:85
#~ msgstr "" msgid "Type a file system path or filename here..."
msgstr "Digitare un percorso del file system o un nome file qui..."
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\exclude_list_dialog.py:152
#~ msgstr "" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>I direttori avranno anche il loro <strong>stato predefinito</strong> impostato su Escluso nella scheda Directory se il loro nome corrisponde a una delle espressioni regolari selezionate.<br>Per ogni file raccolto vengono eseguiti due test per determinare se ignorarlo o meno completamente:<br><li>1. Le espressioni regolari prive di separatori di percorso verranno confrontate solo con il nome del file.</li>\n"
"<li>2. Le espressioni regolari contenenti almeno un separatore di percorso verranno confrontate con il percorso completo del file.</li><br>\n"
"Esempio: se desideri filtrare i file .PNG solo dalla directory \"Mie Immagini\":<br><code>.*Mie\\sImmagini\\\\.*\\.png</code><br><br>Puoi testare l'espressione regolare con il pulsante \"stringa di prova\" dopo aver incollato un percorso falso nel campo di prova:<br><code>C:\\\\Utente\\Mie Immagini\\test.png</code><br><br>\n"
"Verranno evidenziate le espressioni regolari corrispondenti.<br>Se è presente almeno un'evidenziazione, il percorso o il nome del file testato verrà ignorato durante le scansioni.<br><br>Directory e file che iniziano con un punto \".\" vengono filtrati per impostazione predefinita.<br><br>"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\exclude_list_table.py:36
#~ msgstr "" msgid "Compilation error: "
msgstr "Errore di compilazione:"
#~ msgid "The iPhoto application couldn't be found." #: qt\pe\image_viewer.py:56
#~ msgstr "Non trovo l'applicazione iPhoto." msgid "Increase zoom"
msgstr "Aumenta lo zoom"
#~ msgid "Preferences" #: qt\pe\image_viewer.py:66
#~ msgstr "Impostazioni" msgid "Decrease zoom"
msgstr "Diminuisci lo zoom"
#~ msgid "Check for Update" #: qt\pe\image_viewer.py:71
#~ msgstr "Controlla aggiornamenti" msgid "Ctrl+/"
msgstr "Ctrl+/"
#~ msgid "Filename" #: qt\pe\image_viewer.py:76
#~ msgstr "Nome del file" msgid "Normal size"
msgstr "Dimensione normale"
#~ msgid "Filename - Fields" #: qt\pe\image_viewer.py:81
#~ msgstr "Nome del file - Campi" msgid "Ctrl+*"
msgstr "Ctrl+*"
#~ msgid "Filename - Fields (No Order)" #: qt\pe\image_viewer.py:86
#~ msgstr "Nome del file - Campi (senza ordine)" msgid "Best fit"
msgstr "Il più adatto"
#~ msgid "Tags" #: qt\pe\preferences_dialog.py:49
#~ msgstr "Tags" msgid "Picture cache mode:"
msgstr "Modalità cache immagini:"
#~ msgid "Contents" #: qt\pe\preferences_dialog.py:56
#~ msgstr "Contenuti" msgid "Override theme icons in viewer toolbar"
msgstr ""
"Ignora le icone del tema nella barra degli strumenti del visualizzatore"
#~ msgid "Audio Contents" #: qt\pe\preferences_dialog.py:58
#~ msgstr "Contenuti Audio" msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
"Usa le nostre icone interne invece di quelle fornite dal motore del tema"
#~ msgid "EXIF Timestamp" #: qt\pe\preferences_dialog.py:66
#~ msgstr "Data e ora EXIF" msgid "Show scrollbars in image viewers"
msgstr "Mostra le barre di scorrimento nei visualizzatori di immagini"
#~ msgid "Folders" #: qt\pe\preferences_dialog.py:68
#~ msgstr "Cartelle" msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
"Quando l'immagine visualizzata non si adatta alla visualizzazione, mostra le"
" barre di scorrimento per estendere la visualizzazione"
#~ msgid "Add Aperture Library" #: qt\preferences_dialog.py:156
#~ msgstr "" msgid "Use default position for tab bar (requires restart)"
msgstr ""
"Usa la posizione predefinita per la barra di tabulazione (richiede il "
"riavvio)"
#~ msgid "Add iPhoto Library" #: qt\preferences_dialog.py:158
#~ msgstr "Aggiungi alla libreria di iPhoto" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"Posiziona la barra di tabulazione sotto il menu principale anziché accanto ad esso\n"
"Su MacOS, la barra delle schede riempirà invece la larghezza della finestra."
#~ msgid "Add iTunes Library" #: qt\preferences_dialog.py:172
#~ msgstr "Aggiungi alla lista di iTunes" msgid "Use bold font for references"
msgstr "Usa caratteri in grassetto per i riferimenti"
#~ msgid "Audio Content" #: qt\preferences_dialog.py:176
#~ msgstr "Contenuto audio" msgid "Reference foreground color:"
msgstr "Colore di primo piano per i riferimenti:"
#~ msgid "Content" #: qt\preferences_dialog.py:179
#~ msgstr "Contenuto" msgid "Reference background color:"
msgstr "Colore di sfondo per i riferimenti:"
#~ msgid "dupeGuru ME Preferences" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ msgstr "Preferenze di dupeGuru ME" msgid "Delta foreground color:"
msgstr "colore di primo piano per i delta:"
#~ msgid "dupeGuru PE Preferences" #: qt\preferences_dialog.py:195
#~ msgstr "Preferenze di dupeGuru PE" msgid "Show the title bar and can be docked"
msgstr "Mostra la barra del titolo e può essere agganciata"
#~ msgid "Remove Dead Tracks in iTunes" #: qt\preferences_dialog.py:197
#~ msgstr "Rimuovi le tracce inesistenti da iTunes" msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Mentre la barra del titolo è nascosta, usa il tasto modificatore per "
"trascinare la finestra mobile"
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"La barra del titolo può essere disabilitata solo mentre la finestra è "
"agganciata"
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr "Barra del titolo verticale"
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
"Cambia la barra del titolo da orizzontale in alto a verticale sul lato "
"sinistro"
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr "Mostra la barra di tabulazione"
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>I direttori avranno anche il loro <strong>stato predefinito</strong> impostato su Escluso nella scheda Directory se il loro nome corrisponde a una delle espressioni regolari selezionate.<br>Per ogni file raccolto vengono eseguiti due test per determinare se ignorarlo o meno completamente:<br><li>1. Le espressioni regolari prive di separatori di percorso verranno confrontate solo con il nome del file.</li>\n"
"<li>2. Le espressioni regolari contenenti almeno un separatore di percorso verranno confrontate con il percorso completo del file.</li><br>\n"
"Esempio: se desideri filtrare i file .PNG solo dalla directory \"Mie Immagini\":<br><code>.*Mie\\sImmagini\\\\.*\\.png</code><br><br>Puoi testare l'espressione regolare con il pulsante \"stringa di prova\" dopo aver incollato un percorso falso nel campo di prova:<br><code>C:\\\\Utente\\Mie Immagini\\test.png</code><br><br>\n"
"Verranno evidenziate le espressioni regolari corrispondenti.<br>Se è presente almeno un'evidenziazione, il percorso o il nome del file testato verrà ignorato durante le scansioni.<br><br>Directory e file che iniziano con un punto \".\" vengono filtrati per impostazione predefinita.<br><br>"
#: qt\app.py:256
msgid "Results"
msgstr "Risultati"
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr "Interfaccia generale"
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr "Tabella dei risultati"
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr "Finestra Dettagli"
#: qt\preferences_dialog.py:285
msgid "General"
msgstr "Generale"
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr "Schermo"

View File

@@ -0,0 +1,122 @@
# Translators:
# Fuan <jcfrt@posteo.net>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"Language-Team: Japanese (https://www.transifex.com/voltaicideas/teams/116153/ja/)\n"
"Language: ja\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core\gui\problem_table.py:18
msgid "File Path"
msgstr "ファイルパス"
#: core\gui\problem_table.py:19
msgid "Error Message"
msgstr "エラーメッセージ"
#: core\me\prioritize.py:23
msgid "Duration"
msgstr "デュレーション"
#: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate"
msgstr "ビットレート"
#: core\me\prioritize.py:37
msgid "Samplerate"
msgstr "サンプルレート"
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "ファイル名"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "フォルダ"
#: core\me\result_table.py:21
msgid "Size (MB)"
msgstr "サイズMB"
#: core\me\result_table.py:22
msgid "Time"
msgstr "デュレーション"
#: core\me\result_table.py:24
msgid "Sample Rate"
msgstr "サンプルレート"
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "種類"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "変更"
#: core\me\result_table.py:27
msgid "Title"
msgstr "タイトル"
#: core\me\result_table.py:28
msgid "Artist"
msgstr "アーティスト"
#: core\me\result_table.py:29
msgid "Album"
msgstr "アルバム"
#: core\me\result_table.py:30
msgid "Genre"
msgstr "ジャンル"
#: core\me\result_table.py:31
msgid "Year"
msgstr "年"
#: core\me\result_table.py:32
msgid "Track Number"
msgstr "トラック番号"
#: core\me\result_table.py:33
msgid "Comment"
msgstr "コメント"
#: core\me\result_table.py:34 core\pe\result_table.py:26
#: core\se\result_table.py:24
msgid "Match %"
msgstr "一致率"
#: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used"
msgstr "使用した単語"
#: core\me\result_table.py:36 core\pe\result_table.py:27
#: core\se\result_table.py:26
msgid "Dupe Count"
msgstr "重複カウント"
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions"
msgstr "寸法"
#: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)"
msgstr "サイズKB"
#: core\pe\result_table.py:24
msgid "EXIF Timestamp"
msgstr "EXIFタイムスタンプ"
#: core\prioritize.py:156
msgid "Size"
msgstr "サイズ"

View File

@@ -0,0 +1,249 @@
# Translators:
# Fuan <jcfrt@posteo.net>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"Language-Team: Japanese (https://www.transifex.com/voltaicideas/teams/116153/ja/)\n"
"Language: ja\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done."
msgstr "マークされた重複はありません。 何も行われていません。"
#: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done."
msgstr "選択された重複はありません。 何も行われていません。"
#: core\app.py:44
msgid ""
"You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?"
msgstr "一度に多くのファイルを開こうとしています。 これらのファイルを開く対象によっては、これを行うとかなり混乱する可能性があります。 継続する?"
#: core\app.py:71
msgid "Scanning for duplicates"
msgstr "重複のスキャン"
#: core\app.py:72
msgid "Loading"
msgstr "読み込み中"
#: core\app.py:73
msgid "Moving"
msgstr "移動します"
#: core\app.py:74
msgid "Copying"
msgstr "コピー中"
#: core\app.py:75
msgid "Sending to Trash"
msgstr "ごみ箱に送信します"
#: core\app.py:308
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr "前のアクションはまだそこにぶら下がっています。 まだ新しいものを始めることはできません。 数秒待ってから、再試行してください。"
#: core\app.py:318
msgid "No duplicates found."
msgstr "重複は見つかりませんでした。"
#: core\app.py:333
msgid "All marked files were copied successfully."
msgstr "マークされたファイルはすべて正常にコピーされました。"
#: core\app.py:334
msgid "All marked files were moved successfully."
msgstr "マークされたファイルはすべて正常に移動されました。"
#: core\app.py:335
msgid "All marked files were successfully sent to Trash."
msgstr "マークされたファイルはすべてごみ箱に正常に送信されました。"
#: core\app.py:343
msgid "Could not load file: {}"
msgstr "ファイルを読み込めませんでした:{}"
#: core\app.py:399
msgid "'{}' already is in the list."
msgstr "「{}」既にリストに含まれています。"
#: core\app.py:401
msgid "'{}' does not exist."
msgstr "'{}' 存在しません。"
#: core\app.py:410
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr "選択した%d個の一致は、以降のすべてのスキャンで無視されます。 継続する?"
#: core\app.py:486
msgid "Select a directory to copy marked files to"
msgstr "マークされたファイルをコピーするディレクトリを選択してください"
#: core\app.py:487
msgid "Select a directory to move marked files to"
msgstr "マークされたファイルを移動するディレクトリを選択してください"
#: core\app.py:527
msgid "Select a destination for your exported CSV"
msgstr "エクスポートしたCSVの宛先を選択します。"
#: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "ファイルに書き込めませんでした:{}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "カスタムコマンドは設定されていません。 お好みで設定してください。"
#: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?"
msgstr "結果から%d個のファイルを削除しようとしています。 継続する?"
#: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{}重複するグループは、再優先順位付けによって変更されました。"
#: core\app.py:821
msgid "The selected directories contain no scannable file."
msgstr "選択したディレクトリにはスキャン可能なファイルが含まれていません。"
#: core\app.py:835
msgid "Collecting files to scan"
msgstr "スキャンするファイルを収集しています"
#: core\app.py:891
msgid "%s (%d discarded)"
msgstr "%s (%d 廃棄)"
#: core\engine.py:244 core\engine.py:288
msgid "0 matches found"
msgstr "一致するものが見つかりません"
#: core\engine.py:262 core\engine.py:296
msgid "%d matches found"
msgstr "%d の一致が見つかりました"
#: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash."
msgstr "{}個のファイルをゴミ箱に送信しています"
#: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "正規表現"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "本当に除外リストから%d個の項目を削除しますか"
#: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename"
msgstr "ファイル名"
#: core\me\scanner.py:21
msgid "Filename - Fields"
msgstr "ファイル名 - フィールド"
#: core\me\scanner.py:22
msgid "Filename - Fields (No Order)"
msgstr "ファイル名 - フィールド(順序なし)"
#: core\me\scanner.py:23
msgid "Tags"
msgstr "タグ"
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents"
msgstr "内容"
#: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "%d/%d 枚の写真を分析しました"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "チャンクマッチを%d/%d回実行しました"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "マッチングの準備"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "%d/%d件の一致を確認"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "%d/%d枚の写真のEXIFを読みました"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp"
msgstr "EXIFタイムスタンプ"
#: core\prioritize.py:70
msgid "None"
msgstr "無し"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "番号で終わっている"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "数字で終わっていない"
#: core\prioritize.py:102
msgid "Longest"
msgstr "最長"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "最短"
#: core\prioritize.py:140
msgid "Highest"
msgstr "最高"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "最低"
#: core\prioritize.py:169
msgid "Newest"
msgstr "最新"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "最古"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s)マークされた重複。"
#: core\results.py:149
msgid " filter: %s"
msgstr "フィルタ: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "%d/%dファイルのサイズを読み取った"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "%d/%dファイルのメタデータを読み取った"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..."
msgstr "ほぼ完了しました! 結果をいじっています..."
#: core\se\scanner.py:18
msgid "Folders"
msgstr "フォルダー"

927
locale/ja/LC_MESSAGES/ui.po Normal file
View File

@@ -0,0 +1,927 @@
# Translators:
# Fuan <jcfrt@posteo.net>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"Language-Team: Japanese (https://www.transifex.com/voltaicideas/teams/116153/ja/)\n"
"Language: ja\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: qt/app.py:81
msgid "Quit"
msgstr "終了"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "オプション"
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr "無視リスト"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "画像キャッシュをクリア"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr "dupeGuruヘルプ"
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr "dupeGuruついて"
#: qt/app.py:87
msgid "Open Debug Log"
msgstr "デバッグログを開く"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "キャッシュされた画像分析をすべて削除しますか?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "画像キャッシュがクリアされました。"
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr "{} ファイル (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr "削除オプション"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr "削除されたファイルをリンクする"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
msgstr "重複を削除した後、参照ファイルをターゲットとするリンクを配置して、削除されたファイルを置き換えます。"
#: qt/deletion_options.py:44
msgid "Hardlink"
msgstr "ハードリンク"
#: qt/deletion_options.py:44
msgid "Symlink"
msgstr "シンボリックリンク"
#: qt/deletion_options.py:48
msgid " (unsupported)"
msgstr "(非対応)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files"
msgstr "ファイルを直接削除する"
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
msgstr ""
"ファイルを直接削除するファイルをゴミ箱に送る代わりに、直接削除します。 このオプションは通常、通常の削除方法が機能しない場合の回避策として使用されます。"
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed"
msgstr "続行"
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr "キャンセル"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr "アトリビュート"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr "選択した"
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr "参照"
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
msgstr "結果をロード..."
#: qt/directories_dialog.py:65 cocoa/en.lproj/Localizable.strings:0
msgid "Results Window"
msgstr "結果ウィンドウ"
#: qt/directories_dialog.py:66
msgid "Add Folder..."
msgstr "フォルダーを追加"
#: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0
msgid "File"
msgstr "ファイル"
#: qt/directories_dialog.py:76 qt/result_window.py:108
msgid "View"
msgstr "ビュー"
#: qt/directories_dialog.py:78 qt/result_window.py:110
#: cocoa/en.lproj/Localizable.strings:0
msgid "Help"
msgstr "ヘルプ"
#: qt/directories_dialog.py:80 cocoa/en.lproj/Localizable.strings:0
msgid "Load Recent Results"
msgstr "最近の結果を読み込む"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "アプリケーションモード:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "音楽"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "画像"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "標準"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "スキャンの種類:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "もっとオプション"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"."
msgstr "スキャンするフォルダを選択し、「スキャン」を押してください。"
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results"
msgstr "結果を読み込む"
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
msgid "Scan"
msgstr "スキャン"
#: qt/directories_dialog.py:230
msgid "Unsaved results"
msgstr "保存されていない結果"
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to quit?"
msgstr "保存されていない結果がありますが、本当に終了しますか?"
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list"
msgstr "スキャンリストに追加するフォルダを選択してください"
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load"
msgstr "ロードする結果ファイルを選択してください"
#: qt/directories_dialog.py:267
msgid "All Files (*.*)"
msgstr "すべてのファイル (*.*)"
#: qt/directories_dialog.py:267 qt/result_window.py:311
msgid "dupeGuru Results (*.dupeguru)"
msgstr "dupeGuruの結果 (*.dupeguru)"
#: qt/directories_dialog.py:278
msgid "Start a new scan"
msgstr "新しいスキャンを開始"
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to continue?"
msgstr "保存されていない結果がありますが、本当に続行しますか?"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "Name"
msgstr "名"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "State"
msgstr "状態"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Excluded"
msgstr "除外"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Normal"
msgstr "正常"
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected"
msgstr "選択を削除"
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear"
msgstr "クリアー"
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close"
msgstr "閉じる"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "詳細"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "スキャンするタグ:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "トラック"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "アーティスト"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "アルバム"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "タイトル"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "ジャンル"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "年"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "単語の重み付け"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "類似の単語に一致する"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "ファイルの種類を混在させることができる"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "フィルタリング時に正規表現を使用する"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "削除または移動時に空のフォルダを削除する"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "同じファイルへの重複ハードリンクを無視する"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "デバッグモード(再起動が必要)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "異なる寸法の写真を一致させる"
#: qt/preferences_dialog.py:43
msgid "Filter Hardness:"
msgstr "フィルター硬度:"
#: qt/preferences_dialog.py:69
msgid "More Results"
msgstr "より多くの結果"
#: qt/preferences_dialog.py:74
msgid "Fewer Results"
msgstr "より少ない結果"
#: qt/preferences_dialog.py:81
msgid "Font size:"
msgstr "フォントサイズ:"
#: qt/preferences_dialog.py:85
msgid "Language:"
msgstr "言語:"
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
msgid "Copy and Move:"
msgstr "コピーと移動:"
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
msgid "Right in destination"
msgstr "目的地で直接"
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate relative path"
msgstr "相対パスを再作成"
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate absolute path"
msgstr "絶対パスを再作成"
#: qt/preferences_dialog.py:99
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
msgstr "カスタムコマンド (引数重複の場合はd、参照の場合はr:"
#: qt/preferences_dialog.py:174
msgid "dupeGuru has to restart for language changes to take effect."
msgstr "言語の変更を有効にするには、dupeGuruを再起動する必要があります。"
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize duplicates"
msgstr "重複を再優先する"
#: qt/prioritize_dialog.py:79 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
msgstr ""
"右側のボックスに基準を追加し、[OK]をクリックして、これらの基準に最もよく対応する複製をそれぞれのグループの参照位置に送信します。 "
"詳細については、ヘルプファイルをお読みください。"
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
msgid "Problems!"
msgstr "問題!"
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
msgstr ""
"一部(またはすべて)のファイルの処理に問題がありました。 これらの問題の原因を次の表に示します。 これらのファイルは結果から削除されませんでした。"
#: qt/problem_dialog.py:56
msgid "Reveal Selected"
msgstr "選択したものを明らかにする"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions"
msgstr "作用"
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
msgid "Show Dupes Only"
msgstr "複製のみを表示"
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Show Delta Values"
msgstr "デルタ値を表示"
#: qt/result_window.py:60
msgid "Send Marked to Recycle Bin..."
msgstr "マークされたものをごみ箱に送る..."
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
msgid "Move Marked to..."
msgstr "マークされたものを移動..."
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Copy Marked to..."
msgstr "マークされたものをコピー..."
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Marked from Results"
msgstr "結果からマークされたものを削除"
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..."
msgstr "結果を再優先する..."
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results"
msgstr "結果から選択したアイテムを削除"
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
msgid "Add Selected to Ignore List"
msgstr "選択したアイテムを無視リストに追加"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference"
msgstr "選択したアイテムを参照にする"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application"
msgstr "デフォルトのアプリケーションで選択を開く"
#: qt/result_window.py:80
msgid "Open Containing Folder of Selected"
msgstr "選択したアイテムのコンテナフォルダを開く"
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
msgid "Rename Selected"
msgstr "選択したアイテムの名前を変更する"
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
msgid "Mark All"
msgstr "すべてのアイテムをマークする"
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
msgid "Mark None"
msgstr "何もマークしない"
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "Invert Marking"
msgstr "マーキングを反転"
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "Mark Selected"
msgstr "選択したアイテムにマークを付け"
#: qt/result_window.py:87
msgid "Export To HTML"
msgstr "HTMLにエクスポート"
#: qt/result_window.py:88
msgid "Export To CSV"
msgstr "CSVにエクスポート"
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..."
msgstr "結果を保存する"
#: qt/result_window.py:90 cocoa/en.lproj/Localizable.strings:0
msgid "Invoke Custom Command"
msgstr "カスタムコマンドを呼び出す"
#: qt/result_window.py:102
msgid "Mark"
msgstr "マーク"
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
msgid "Columns"
msgstr "コラム"
#: qt/result_window.py:163
msgid "Reset to Defaults"
msgstr "既定値にリセット"
#: qt/result_window.py:185
msgid "{} Results"
msgstr "{}結果"
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only"
msgstr "複製のみ"
#: qt/result_window.py:194
msgid "Delta Values"
msgstr "デルタ値"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to"
msgstr "結果を保存するファイルを選択してください"
#: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than"
msgstr "より小さいファイルは無視"
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
msgid "KB"
msgstr "KB"
#: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results"
msgstr "%@ 結果"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Action"
msgstr "作用"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Add New Folder..."
msgstr "新しいフォルダを追加..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Advanced"
msgstr "高度"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Automatically check for updates"
msgstr "更新を自動的にチェック"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Basic"
msgstr "基本"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Bring All to Front"
msgstr "すべてを前面に出す"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Check for update..."
msgstr "更新を確認..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close Window"
msgstr "ウィンドウを閉じる"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Copy"
msgstr "コピー"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Custom command (arguments: %d for dupe, %r for ref):"
msgstr "カスタムコマンド (引数重複の場合はd、参照の場合はr:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Cut"
msgstr "カット"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Delta"
msgstr "デルタ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details of Selected File"
msgstr "選択したファイルの詳細"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details Panel"
msgstr "詳細パネル"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Directories"
msgstr "ディレクトリ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru"
msgstr "dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences"
msgstr "dupeGuruの設定"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results"
msgstr "dupeGuruの結果"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website"
msgstr "dupeGuruウェブサイト"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Edit"
msgstr "編集"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV"
msgstr "結果をCSVにエクスポート"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML"
msgstr "結果をXHTMLにエクスポート"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results"
msgstr "より少ない結果"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter"
msgstr "フィルタ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter hardness:"
msgstr "フィルター硬度:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..."
msgstr "結果のフィルタリング"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window"
msgstr "フォルダ選択ウィンドウ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:"
msgstr "フォントサイズ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru"
msgstr "dupeGuruを隠す"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide Others"
msgstr "他を隠す"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore files smaller than:"
msgstr "以下よりも小さいファイルは無視:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Load from file..."
msgstr "ファイルからロード..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Minimize"
msgstr "最小化する"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Mode"
msgstr "モード"
#: cocoa/en.lproj/Localizable.strings:0
msgid "More results"
msgstr "より多くの結果"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ok"
msgstr "Ok"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Paste"
msgstr "ペースト"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Preferences..."
msgstr "環境設定"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look"
msgstr "クイックルック"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru"
msgstr "dupeGuruを終了"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset to Default"
msgstr "デフォルトにリセット"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults"
msgstr "既定値にリセット"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal"
msgstr "表す"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder"
msgstr "Finderで選択したものを表示"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Select All"
msgstr "すべて選択"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..."
msgstr "マークされたアイテムをゴミ箱に送る..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Services"
msgstr "サービス"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Show All"
msgstr "すべて表示"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Start Duplicate Scan"
msgstr "重複スキャンを開始"
#: cocoa/en.lproj/Localizable.strings:0
msgid "The name '%@' already exists."
msgstr "'@'名はすでに存在します。"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Window"
msgstr "ウィンドウ"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Zoom"
msgstr "ズーム"
#: qt\app.py:158
msgid "Exclusion Filters"
msgstr "除外フィルター"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "スキャン結果"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "ディレクトリをロード..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "ディレクトリを保存..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "ロードするディレクトリファイルを選択してください"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuruのディレクトリファイル (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "ディレクトリを保存するファイルを選択してください。"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuruのディレクトリファイル (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "追加"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "デフォルトに戻す"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "テスト文字列"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "ここではPythonの正規表現を入力して..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "ここにファイルシステムのパスまたはファイル名を入力してください..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"これらの大文字と小文字を区別するPython正規表現は、スキャン中にファイルを除外します。 <br>ディレクターの名前が正規表現の1つと一致する場合、ディレクトリの<strong>デフォルト状態</strong>は[ディレクトリ]タブで[除外]に設定されます。 <br>収集されたファイルごとに、2つのテストがそれぞれに対して実行され、それらをフィルターで除外するかどうかが決定されます:<br><li>1.パス区切り文字が含まれていない正規表現は、ファイル名のみと比較されます。</li>\n"
"<li>2.パス区切り文字が含まれていない正規表現は、ファイルへのフルパスと比較されます。</li>\n"
"例「My Pictures」ディレクトリからのみ.PNGファイルを除外する場合<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>偽のパスを貼り付けることで、テスト文字列機能を使用して正規表現をテストできます:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"一致する正規表現が強調表示されます。<br>ハイライトが少なくとも1つある場合、テストされたパスはスキャン中に無視されます。<br><br>ピリオド「。」で始まるディレクトリとファイル デフォルトでは除外されます。<br><br>"
#: qt\exclude_list_table.py:36
msgid "Compilation error: "
msgstr "コンパイルエラー:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "ズーム増やす"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "ズームを小さく"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "通常サイズ"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "最適"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "画像キャッシュモード:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "ビューアツールバーのテーマアイコンを上書きする"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "テーマエンジンによって提供されるアイコンの代わりに、独自の内部アイコンを使用します。"
#: qt\pe\preferences_dialog.py:66
msgid "Show scrollbars in image viewers"
msgstr "画像ビューアにスクロールバーを表示する"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "表示された画像がビューポートに適合しない場合に、ビュー全体にスクロールバーを表示する。"
#: qt\preferences_dialog.py:156
msgid "Use default position for tab bar (requires restart)"
msgstr "タブバーのデフォルトの位置を使用する(再起動が必要)"
#: qt\preferences_dialog.py:158
msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr ""
"タブバーをメインメニューの横ではなく下に配置する。\n"
"MacOSでは、代わりにタブバーがウィンドウの幅を埋める。"
#: qt\preferences_dialog.py:172
msgid "Use bold font for references"
msgstr "参照のために太字を使用する"
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr "参照の前景色:"
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr "参照の背景色:"
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr "デルタ値の背景色:"
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr "タイトルバーを表示し、ドッキングできます。"
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr "タイトルバーが非表示になっているときに、修飾キーを使用してフローティングウィンドウをドラッグできます。"
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr "タイトルバーは、ウィンドウがドッキングされている間のみ無効にできます。"
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr "垂直タイトルバー"
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr "タイトルバーを上部の水平から左側の垂直に変更する"
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr "タブバーを表示"
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"これらの大文字と小文字を区別するPython正規表現は、スキャン中にファイルを除外します。 <br>また、ディレクトリの名前が選択した正規表現の1つと一致する場合、ディレクトリの<strong>デフォルト状態</strong>は[ディレクトリ]タブで「除外」に設定されます。<br>収集された各ファイルのために、二つの試験は完全にそれを無視するか否かを決定するために実行される:<br><li>1.パス区切り文字が含まれていない正規表現は、ファイル名のみと比較されます。</li>\n"
"<li>2.少なくとも1つのパス区切り文字を含む正規表現は、ファイルへのフルパスと比較されます。</li>\n"
"<br>例「My Pictures」ディレクトリからのみ.PNGファイルを除外する場合<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>テストフィールドに偽のパスを貼り付けた後、[テスト文字列]ボタンを使用して正規表現をテストできます:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"一致する正規表現が強調表示されます。<br>ハイライトが少なくとも1つある場合、テストされたパスまたはファイル名はスキャン中に無視されます。<br><br>ピリオド「.」で始まるディレクトリとファイル デフォルトでは除外されます。<br><br>"
#: qt\app.py:256
msgid "Results"
msgstr "結果"
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr "一般的なインターフェイス"
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr "結果表"
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr "詳細ウィンドウ"
#: qt\preferences_dialog.py:285
msgid "General"
msgstr "一般"
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr "表示"

View File

@@ -1,123 +1,122 @@
# Translators: # Translators:
# woosuk park <bjh13579@gmail.com>, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2015-01-24 07:43+0000\n" "Language-Team: Korean (https://www.transifex.com/voltaicideas/teams/116153/ko/)\n"
"Last-Translator: woosuk park <bjh13579@gmail.com>\n" "Language: ko\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/dupeguru/language/ko/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "파일 경로" msgstr "파일 경로"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "에러 메시지" msgstr "에러 메시지"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "종류"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "폴더"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "폴더명"
#: core/prioritize.py:147
msgid "Size"
msgstr "크기"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "수정날짜"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "길이" msgstr "길이"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "비트레이트" msgstr "비트레이트"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "샘플레이트" msgstr "샘플레이트"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "폴더명"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "폴더"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "크기 (MB)" msgstr "크기 (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "시간" msgstr "시간"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "샘플레이트" msgstr "샘플레이트"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "종류"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "수정날짜"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "곡명" msgstr "곡명"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "아티스트" msgstr "아티스트"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "앨범" msgstr "앨범"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "장르" msgstr "장르"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "년도" msgstr "년도"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "트랙 번호" msgstr "트랙 번호"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "주석" msgstr "주석"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "일치정도" msgstr "일치정도"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "사용된 단어수" msgstr "사용된 단어수"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "중복파일 갯수" msgstr "중복파일 갯수"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "치수" msgstr "치수"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "크기 (KB)" msgstr "크기 (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "EXIF 타임스태프" msgstr "EXIF 타임스태프"
#: core\prioritize.py:156
msgid "Size"
msgstr "크기"

View File

@@ -1,265 +1,250 @@
# Translators: # Translators:
# woosuk park <bjh13579@gmail.com>, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2015-01-24 07:38+0000\n" "Language-Team: Korean (https://www.transifex.com/voltaicideas/teams/116153/ko/)\n"
"Last-Translator: woosuk park <bjh13579@gmail.com>\n" "Language: ko\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/dupeguru/language/ko/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr "표시된 중복 항목이 없습니다. 아무것도하지 않았습니다."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr "선택한 중복 항목이 없습니다. 아무것도하지 않았습니다."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr "한 번에 많은 파일을 열려고합니다. 그 파일을 여는 것에 따라 그렇게하면 꽤 엉망이 될 수 있습니다. 계속하다?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "" msgstr "중복 검색"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "불러오는중" msgstr "불러오는중"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "이동중" msgstr "이동중"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "복사중" msgstr "복사중"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "휴지통으로 보내기" msgstr "휴지통으로 보내기"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
msgstr "" msgstr "이전 작업이 여전히 거기에 걸려 있습니다. 아직 새로운 것을 시작할 수 없습니다. 몇 초 후에 다시 시도하십시오."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "중복 파일이 없습니다." msgstr "중복 파일이 없습니다."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr "표시된 모든 파일이 성공적으로 복사되었습니다."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr "표시된 모든 파일이 성공적으로 이동되었습니다."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr "표시된 모든 파일이 성공적으로 휴지통으로 전송되었습니다."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "파일을로드 할 수 없습니다 : {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' 는 이미 목록에 있습니다." msgstr "'{}' 는 이미 목록에 있습니다."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' 가 존재하지 않습니다." msgstr "'{}' 가 존재하지 않습니다."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "" msgstr "선택된 %d개의 일치 항목은 모든 후속 검색에서 무시됩니다. 계속하다?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "복사" msgstr "표시된 파일을 복사 할 디렉토리를 선택하십시오"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "이동" msgstr "표시된 파일을 이동할 디렉토리를 선택하십시오"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr "내 보낸 CSV의 대상을 선택하십시오"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:762
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr ""
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr ""
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr ""
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr ""
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr ""
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
#: core/gui/ignore_list_dialog.py:24
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr ""
#: core/prioritize.py:68
msgid "None"
msgstr ""
#: core/prioritize.py:96
msgid "Ends with number"
msgstr ""
#: core/prioritize.py:97
msgid "Doesn't end with number"
msgstr ""
#: core/prioritize.py:98
msgid "Longest"
msgstr ""
#: core/prioritize.py:99
msgid "Shortest"
msgstr ""
#: core/prioritize.py:132
msgid "Highest"
msgstr ""
#: core/prioritize.py:132
msgid "Lowest"
msgstr ""
#: core/prioritize.py:159
msgid "Newest"
msgstr ""
#: core/prioritize.py:159
msgid "Oldest"
msgstr ""
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core/results.py:136
msgid " filter: %s"
msgstr ""
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr ""
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr ""
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr ""
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}" msgid "Couldn't write to file: {}"
msgstr "" msgstr "파일에 쓸 수 없습니다 : {}"
#: core/me/scanner.py:19 core/se/scanner.py:15 #: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "사용자 지정 명령을 설정하지 않았습니다. 기본 설정에서 설정하십시오."
#: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?"
msgstr "결과에서 %d 개의 파일을 제거하려고합니다. 계속하다?"
#: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} 개의 중복 그룹이 우선 순위 재 지정으로 변경되었습니다."
#: core\app.py:821
msgid "The selected directories contain no scannable file."
msgstr "선택한 디렉토리에 스캔 가능한 파일이 없습니다."
#: core\app.py:835
msgid "Collecting files to scan"
msgstr "스캔 할 파일 수집"
#: core\app.py:891
msgid "%s (%d discarded)"
msgstr "%s (%d 폐기)"
#: core\engine.py:244 core\engine.py:288
msgid "0 matches found"
msgstr "일치하는 항목이 없습니다"
#: core\engine.py:262 core\engine.py:296
msgid "%d matches found"
msgstr "%d개의 일치 항목을 찾았습니다."
#: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash."
msgstr "{}개의 파일을 휴지통으로 보내고 있습니다."
#: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "정규식"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "무시 목록에서 항목 %d개를 정말로 제거 하시겠습니까?"
#: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename" msgid "Filename"
msgstr "" msgstr "파일 이름"
#: core/me/scanner.py:20 #: core\me\scanner.py:21
msgid "Filename - Fields" msgid "Filename - Fields"
msgstr "" msgstr "파일 이름 - 필드"
#: core/me/scanner.py:21 #: core\me\scanner.py:22
msgid "Filename - Fields (No Order)" msgid "Filename - Fields (No Order)"
msgstr "" msgstr "파일 이름 - 필드 (주문 없음)"
#: core/me/scanner.py:22 #: core\me\scanner.py:23
msgid "Tags" msgid "Tags"
msgstr "" msgstr "태그"
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents" msgid "Contents"
msgstr "" msgstr "내용"
#: core/pe/scanner.py:21 #: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "%d/%d 사진 분석"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d 청크 매치 수행"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "매칭 준비"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "%d/%d 일치 확인"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "%d/%d 사진의 EXIF 읽기"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "EXIF 타임 스탬프"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "없음"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "숫자로 끝남"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "숫자로 끝나지 않음"
#: core\prioritize.py:102
msgid "Longest"
msgstr "최장"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "최단"
#: core\prioritize.py:140
msgid "Highest"
msgstr "제일 높은"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "최저"
#: core\prioritize.py:169
msgid "Newest"
msgstr "최신"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "가장 오래된"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) 개의 중복이 표시되었습니다."
#: core\results.py:149
msgid " filter: %s"
msgstr "필터: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "%d/%d 개의 파일을 읽을 수 있습니다."
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "%d/%d 개 파일의 메타 데이터를 읽었습니다."
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "거의 완료되었습니다! 결과를 만지작 거리는 중..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "폴더"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "휴지통으로 보내기"
#~ msgid "Grouped %d/%d matches"
#~ msgstr ""
#~ msgid "Removing false matches"
#~ msgstr ""
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ msgid "Doing group prioritization"
#~ msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -1,123 +1,122 @@
# Translators: # Translators:
# Kees Duvekot, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2015-07-11 12:36+0000\n" "Language-Team: Dutch (https://www.transifex.com/voltaicideas/teams/116153/nl/)\n"
"Last-Translator: Kees Duvekot\n" "Language: nl\n"
"Language-Team: Dutch (http://www.transifex.com/p/dupeguru/language/nl/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Bestand locatie" msgstr "Bestand locatie"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Fout Melding" msgstr "Fout Melding"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Kind"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Folder"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Bestandsnaam"
#: core/prioritize.py:147
msgid "Size"
msgstr "Grote"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Aanpassing"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Tijdsduur" msgstr "Tijdsduur"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Bitrate" msgstr "Bitrate"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Sample frequentie" msgstr "Sample frequentie"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Bestandsnaam"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Folder"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Grote (MB)" msgstr "Grote (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Tijd" msgstr "Tijd"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Sample Frequentie" msgstr "Sample Frequentie"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Kind"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Aanpassing"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Artiest" msgstr "Artiest"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Genre" msgstr "Genre"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Jaar" msgstr "Jaar"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Track nummer" msgstr "Track nummer"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Commentaar" msgstr "Commentaar"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Zekerheid %" msgstr "Zekerheid %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Woorden gebruikt" msgstr "Woorden gebruikt"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Dubbel telling" msgstr "Dubbel telling"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Afmetingen" msgstr "Afmetingen"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Grote (KB)" msgstr "Grote (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "EXIF Tijdstip" msgstr "EXIF Tijdstip"
#: core\prioritize.py:156
msgid "Size"
msgstr "Grote"

View File

@@ -1,25 +1,25 @@
# Translators: # Translators:
# Kees Duvekot, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2015-07-11 12:39+0000\n" "Language-Team: Dutch (https://www.transifex.com/voltaicideas/teams/116153/nl/)\n"
"Last-Translator: Kees Duvekot\n" "Language: nl\n"
"Language-Team: Dutch (http://www.transifex.com/p/dupeguru/language/nl/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Er zijn geen gemarkeerde dubbelingen. Er is niks gedaam" msgstr "Er zijn geen gemarkeerde dubbelingen. Er is niks gedaam"
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Er zijn geen dubelingen geselecteerd. Er is niks gedaan" msgstr "Er zijn geen dubelingen geselecteerd. Er is niks gedaan"
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -28,27 +28,27 @@ msgstr ""
"Afhankelijk met welke applicaties die bestanden worden geopened kan het best" "Afhankelijk met welke applicaties die bestanden worden geopened kan het best"
" een rommeltje worden. Doorgaan?" " een rommeltje worden. Doorgaan?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Dubbelingen aan het opsporen" msgstr "Dubbelingen aan het opsporen"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Laden" msgstr "Laden"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Verplaatsen" msgstr "Verplaatsen"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Kopieeren" msgstr "Kopieeren"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Naar de prullebak verplaatsen" msgstr "Naar de prullebak verplaatsen"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -56,31 +56,35 @@ msgstr ""
"Er is nog een vorige actie bezig. Je kan nu nog geen nieuwe actie starten. " "Er is nog een vorige actie bezig. Je kan nu nog geen nieuwe actie starten. "
"Wacht een paar seconden en probeer het opnieuw" "Wacht een paar seconden en probeer het opnieuw"
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Geen dubbelingen gevonden" msgstr "Geen dubbelingen gevonden"
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Alle gemarkeerde bestanden zijn succesvol gekopieerd." msgstr "Alle gemarkeerde bestanden zijn succesvol gekopieerd."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Alle gemarkeerde bestanden zijn succesvol verplaatst." msgstr "Alle gemarkeerde bestanden zijn succesvol verplaatst."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Alle gemarkeerde bestanden zijn met succes in de prullenbak gedaan." msgstr "Alle gemarkeerde bestanden zijn met succes in de prullenbak gedaan."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Kan bestand niet laden: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}'staat al in de lijst." msgstr "'{}'staat al in de lijst."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' bestaat niet." msgstr "'{}' bestaat niet."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -88,193 +92,176 @@ msgstr ""
"Alle geselecteerde %d overeenkomsten zullen in toekomstige onderzoeken " "Alle geselecteerde %d overeenkomsten zullen in toekomstige onderzoeken "
"worden overgslagen. Doorgaan?" "worden overgslagen. Doorgaan?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "kopieer"
#: core/app.py:450
msgid "move"
msgstr "verplaats"
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "" msgstr ""
"Selecteer een map waar u de gemarkeerde bestanden naartoe wilt kopiëren"
#: core/app.py:490 #: core\app.py:487
msgid "Select a directory to move marked files to"
msgstr ""
"Selecteer een map waar u de gemarkeerde bestanden naartoe wilt verplaatsen"
#: core\app.py:527
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Selecteer een locatie voor de CSV export" msgstr "Selecteer een locatie voor de CSV export"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Kan niet schrijven naar bestand: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Er is nog geen \"aangepaste opdracht\" ingericht. Je kan dit doen bij de " "Er is nog geen \"aangepaste opdracht\" ingericht. Je kan dit doen bij de "
"voorkeuren." "voorkeuren."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "" msgstr ""
"Je staat op het punt om %d bestanden te verwijderen uit de resultaten. " "Je staat op het punt om %d bestanden te verwijderen uit de resultaten. "
"Doorgaan?" "Doorgaan?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
"{} dubbelingen groepen waren veranderd door de prioriteits verschuiving." "{} dubbelingen groepen waren veranderd door de prioriteits verschuiving."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Bestanden aan het verzamelen om te onderzoeken"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "" msgstr ""
"De geselecteerde folders bevatten geen bestanden die onderzocht kunnen " "De geselecteerde folders bevatten geen bestanden die onderzocht kunnen "
"worden." "worden."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Bestanden aan het verzamelen om te onderzoeken"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d weggelaten)" msgstr "%s (%d weggelaten)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 overeenkomsten gevonden" msgstr "0 overeenkomsten gevonden"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d overeenkomsten gevonden" msgstr "%d overeenkomsten gevonden"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Bestands grote van %d/%d bestanden aan het lezen."
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Je verplaatst {} bestanden naar de prullenbak" msgstr "Je verplaatst {} bestanden naar de prullenbak"
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Normale Uitdrukkingen"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr ""
"Weet je zeker dat je all %d regels uit de overslaan lijst wilt verwijderen?" "Weet je zeker dat je all %d regels uit de overslaan lijst wilt verwijderen?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Geen" msgstr "Bestandsnaam"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Eindigt met nummer" msgstr "Bestandsnaam - Velden"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Eindigt niet met een nummer" msgstr "Bestandsnaam - Velden (geen volgorde)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "langste" msgstr "Tags"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "kortste" msgstr "Inhoud"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "hoogste"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "laagste"
#: core/prioritize.py:159
msgid "Newest"
msgstr "nieuwste"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "oudste"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s /%s) dubbelingen gemarkeerd"
#: core/results.py:136
msgid " filter: %s"
msgstr "filter: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Metadata van %d/%d bestanden gelezen"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "%d van de %d afbeeldingen aan het analyseren" msgstr "%d van de %d afbeeldingen aan het analyseren"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "%d van de %d bulk overeenkomsten uitgevoerd" msgstr "%d van de %d bulk overeenkomsten uitgevoerd"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Voorbereiden voor dubbelingen bepaling" msgstr "Voorbereiden voor dubbelingen bepaling"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "%d van de %d overeenkomsten nagekeken" msgstr "%d van de %d overeenkomsten nagekeken"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "EXIF informatie van %d van de %d afbeeldingen gelezen" msgstr "EXIF informatie van %d van de %d afbeeldingen gelezen"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "EXIF-tijdstempel"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Geen"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Eindigt met nummer"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Eindigt niet met een nummer"
#: core\prioritize.py:102
msgid "Longest"
msgstr "langste"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "kortste"
#: core\prioritize.py:140
msgid "Highest"
msgstr "hoogste"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "laagste"
#: core\prioritize.py:169
msgid "Newest"
msgstr "nieuwste"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "oudste"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s /%s) dubbelingen gemarkeerd"
#: core\results.py:149
msgid " filter: %s"
msgstr "filter: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Bestands grote van %d/%d bestanden aan het lezen."
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Metadata van %d/%d bestanden gelezen"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Bijna klaar! Gehannes met resultaten..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Mappen"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Bestanden naar de prullebak aan het verplaatsen"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d van %d overeenkomsten gegroepeerd"
#~ msgid "Removing false matches"
#~ msgstr "Verkeerde overeenkomsten aan het verwijderen"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "% d van de %d overeenkomsten vergeleken met de overslaan lijst"
#~ msgid "Doing group prioritization"
#~ msgstr "Groepen aan het priotiriseren"

View File

@@ -1,25 +1,34 @@
# Translators: # Translators:
# Kees Duvekot, 2015 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2015-07-11 12:34+0000\n" "Language-Team: Dutch (https://www.transifex.com/voltaicideas/teams/116153/nl/)\n"
"Last-Translator: Kees Duvekot\n" "Language: nl\n"
"Language-Team: Dutch (http://www.transifex.com/p/dupeguru/language/nl/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Afsluiten" msgstr "Afsluiten"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opties"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Overslaan lijst" msgstr "Overslaan lijst"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Afbeelding cache leegmaken"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "dupeGuru Help" msgstr "dupeGuru Help"
@@ -32,6 +41,14 @@ msgstr "Over dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Debug Log openen" msgstr "Debug Log openen"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Weet je zeker dat je de afbeeldings-analyse cache wilt verwijderen"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Afbeelding cache leeggemaakt"
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "{} bestand (*.{})" msgstr "{} bestand (*.{})"
@@ -128,6 +145,30 @@ msgstr "Help"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Recente resultaten inlezen" msgstr "Recente resultaten inlezen"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Toepassingsmodus:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Muziek"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Beeld"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standaard"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Onderzoeks type"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Meer Opties"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "" msgstr ""
@@ -204,9 +245,78 @@ msgstr "opheffen"
msgid "Close" msgid "Close"
msgstr "sluiten" msgstr "sluiten"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Onderzoeks type" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "details"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Labels die onderzocht moeten worden"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Nummer"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artiest"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titel"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Jaar"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Word gewicht"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "vergelijk gelijkwaardige woorden"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Bestandsformaten mogen doorelkaar gebruikt worden"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Gebruik \"reguliere expressies\" tijdens het filteren"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Verwijder lege folders tijdens weggooien of verplaatsen"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "negeer dubbelingen die hard gelinkt zijn aan het zelfde bestand"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Debug stand (herstart is nodig)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Afbeeldingen met afwijkende afmetingen toch gebruiken bij onderzoek"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -284,12 +394,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Toon selectie" msgstr "Toon selectie"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "details"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -407,85 +511,6 @@ msgstr "Verschillen"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Selecteerd een bestand om het resultaat op te slaan" msgstr "Selecteerd een bestand om het resultaat op te slaan"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Labels die onderzocht moeten worden"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Nummer"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artiest"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Album"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Titel"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Genre"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Jaar"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Word gewicht"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "vergelijk gelijkwaardige woorden"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Bestandsformaten mogen doorelkaar gebruikt worden"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Gebruik \"reguliere expressies\" tijdens het filteren"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Verwijder lege folders tijdens weggooien of verplaatsen"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "negeer dubbelingen die hard gelinkt zijn aan het zelfde bestand"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Debug stand (herstart is nodig)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Afbeeldingen met afwijkende afmetingen toch gebruiken bij onderzoek"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Afbeelding cache leegmaken"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Weet je zeker dat je de afbeeldings-analyse cache wilt verwijderen"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Afbeelding cache leeggemaakt"
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Negeer bestanden kleiner dan" msgstr "Negeer bestanden kleiner dan"
@@ -642,11 +667,6 @@ msgstr "Meer resultaten"
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opties"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Plakken" msgstr "Plakken"
@@ -711,116 +731,216 @@ msgstr "Venster"
msgid "Zoom" msgid "Zoom"
msgstr "Zoom" msgstr "Zoom"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Uitsluitingsfilters"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Scanresultaten"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Mappen laden ..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Mappen opslaan ..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Selecteer een directory-bestand om te laden"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuru-mappen (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Selecteer een bestand om uw mappen in op te slaan"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuru-mappen (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Toevoegen"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Herstel de standaardinstellingen"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Test tekenreeks"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Typ hier een reguliere expressie voor python..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Typ hier een bestandssysteempad of bestandsnaam ..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
"Deze (hoofdlettergevoelige) reguliere expressies van Python filteren bestanden uit tijdens scans.<br>Mappen hebben ook hun <strong>standaardstatus</strong> ingesteld op \"Uitgesloten\" in het tabblad Mappen als hun naam overeenkomt met een van de reguliere expressies. <br>Voor elk verzameld bestand worden twee tests uitgevoerd op elk van hen om te bepalen of ze al dan niet moeten worden uitgefilterd:<br><li>1. Reguliere expressies zonder padscheidingsteken worden alleen vergeleken met de bestandsnaam.</li>\n"
"<li>2. Reguliere expressies zonder padscheidingsteken worden vergeleken met het volledige pad naar het bestand.</li><br>\n"
"Voorbeeld: als u de PNG-bestanden alleen uit de map \"My Pictures\" wilt filteren:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>U kunt de reguliere expressie testen met de functie teststring door er een neppad in te plakken:<br><code> C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Overeenkomende reguliere expressies worden gemarkeerd.<br>Als er ten minste één highlight is, wordt het geteste pad genegeerd tijdens scans.<br><br>Mappen en bestanden die beginnen met een punt '.' worden standaard uitgefilterd.<br><br>"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Music" msgid "Compilation error: "
msgstr "Compilatiefout:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Zoom vergroten"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Zoom verkleinen"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Normale grootte"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "Beste pasvorm"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Fotocachemodus:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Overschrijf themapictogrammen in de werkbalk van de viewer"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "" msgstr ""
"Gebruik onze eigen interne pictogrammen in plaats van die van de thema-"
"engine"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\pe\preferences_dialog.py:66
msgid "Picture" msgid "Show scrollbars in image viewers"
msgstr "Toon schuifbalken in afbeeldingsviewers"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "" msgstr ""
"Als de weergegeven afbeelding niet in de viewport past, laat dan "
"schuifbalken zien om de weergave rondom te omspannen"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\preferences_dialog.py:156
msgid "Standard" msgid "Use default position for tab bar (requires restart)"
msgstr "" msgstr ""
"Gebruik de standaardpositie voor de tabbalk (opnieuw opstarten vereist)"
#: qt/directories_dialog.py:135 #: qt\preferences_dialog.py:158
msgid "More Options" msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr "" msgstr ""
"Plaats de tabbalk onder het hoofdmenu in plaats van ernaast.\n"
"Op MacOS vult de tabbalk in plaats daarvan de breedte van het venster."
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\preferences_dialog.py:172
#~ msgstr "" msgid "Use bold font for references"
#~ "Bezig met niet bestaande nummers uit je iTunes bibliotheek te verwijderen" msgstr "Gebruik vet lettertype voor referenties"
#~ msgid "Scanning the iTunes Library" #: qt\preferences_dialog.py:176
#~ msgstr "iTunes biliotheek aan het doorzoeken" msgid "Reference foreground color:"
msgstr "Referentie voorgrondkleur:"
#~ msgid "Sending dupes to the Trash" #: qt\preferences_dialog.py:179
#~ msgstr "Dubbelingen naar de prullenbak aan het verplaatsen" msgid "Reference background color:"
msgstr "Referentie achtergrondkleur:"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
#~ msgstr "Bezig met communicatie met iTunes. Afblijven!" msgid "Delta foreground color:"
msgstr "Delta voorgrondkleur:"
#~ msgid "" #: qt\preferences_dialog.py:195
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid "Show the title bar and can be docked"
#~ msgstr "" msgstr "Toon de titelbalk en kan worden gedokt"
#~ "Je iTunes bibliotheek bevat %d niet bestaande nummer die verwijderd kunnen "
#~ "worden. Doorgaan?"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\preferences_dialog.py:197
#~ msgstr "" msgid ""
#~ "Er zijn geen niet bestaande nummers in je iTunes bilbiotheek aangetroffen" "While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Terwijl de titelbalk verborgen is, gebruik maken van de speciale toets op "
"het zwevende venster slepen"
#~ msgid "The iTunes application couldn't be found." #: qt\preferences_dialog.py:199
#~ msgstr "De iTunes toepassing kan niet gevonden worden" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"De titelbalk kan alleen worden uitgeschakeld terwijl het venster is gedokt"
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\preferences_dialog.py:202
#~ msgstr "Bezig met communicatie met iPhoto. Afblijven!" msgid "Vertical title bar"
msgstr "Verticale titelbalk"
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\preferences_dialog.py:204
#~ msgstr "Met Aperture aan het communiceren. Afblijven!" msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr "Wijzig de titelbalk van horizontaal geplaatst, verticale links"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\tabbed_window.py:44
#~ msgstr "" msgid "Show tab bar"
#~ "Verwijderde Aperture afbeeldingen zijn verplaats naar de \"dupeGuru Trash\" " msgstr "Tabbladbalk weergeven"
#~ "project"
#~ msgid "The iPhoto application couldn't be found." #: qt\exclude_list_dialog.py:152
#~ msgstr "de iPhoto toepassing kan niet gevonden worden" msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Deze (hoofdlettergevoelige) reguliere expressies van Python filteren bestanden uit tijdens scans.<br>Mappen hebben ook hun <strong>standaardstatus</strong> ingesteld op Uitgesloten in het tabblad Mappen als hun naam toevallig overeenkomt met een van de geselecteerde reguliere expressies. <br>Voor elk verzameld bestand worden twee tests uitgevoerd om te bepalen of het al dan niet volledig moet worden genegeerd:<br><li>1. Reguliere expressies zonder padscheidingsteken worden alleen vergeleken met de bestandsnaam.</li>\n"
"<li>2. Reguliere expressies met ten minste één padscheidingsteken worden vergeleken met het volledige pad naar het bestand.</li><br>\n"
"<br>Voorbeeld: als u .PNG-bestanden alleen uit de map \"My Pictures\" wilt filteren:<code>.*My\\sPictures\\\\.*\\.png</code><br><br>U kunt de reguliere expressie testen met de \"test string\" -knop nadat u een neppad in het testveld hebt geplakt:<br><code> C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Overeenkomende reguliere expressies worden gemarkeerd. <br>Als er ten minste één markering is, wordt het geteste pad of de bestandsnaam genegeerd tijdens het scannen.<br><br>Mappen en bestanden die beginnen met een punt '.' worden standaard uitgefilterd.<br><br>"
#~ msgid "Preferences" #: qt\app.py:256
#~ msgstr "Voorkeuren" msgid "Results"
msgstr "Resultaten"
#~ msgid "Check for Update" #: qt\preferences_dialog.py:150
#~ msgstr "Controleer nieuwere versie" msgid "General Interface"
msgstr "Algemene interface"
#~ msgid "Filename" #: qt\preferences_dialog.py:176
#~ msgstr "Bestandsnaam" msgid "Result Table"
msgstr "Resultaattabel"
#~ msgid "Filename - Fields" #: qt\preferences_dialog.py:205
#~ msgstr "Bestandsnaam - velden" msgid "Details Window"
msgstr "Details Venster"
#~ msgid "Filename - Fields (No Order)" #: qt\preferences_dialog.py:285
#~ msgstr "Bestandsnaam - velden (geen volgorde)" msgid "General"
msgstr "Algemeen"
#~ msgid "Tags" #: qt\preferences_dialog.py:286
#~ msgstr "Label" msgid "Display"
msgstr "Scherm"
#~ msgid "Contents"
#~ msgstr "inhoud"
#~ msgid "Audio Contents"
#~ msgstr "Geluidsinhoud"
#~ msgid "EXIF Timestamp"
#~ msgstr "EXIF tijdstip"
#~ msgid "Folders"
#~ msgstr "Folders"
#~ msgid "Add Aperture Library"
#~ msgstr "Aperture biliotheek toevoegen"
#~ msgid "Add iPhoto Library"
#~ msgstr "iPhoto bibliotheek toevoegen"
#~ msgid "Add iTunes Library"
#~ msgstr "iTunes biliotheek toevoegen"
#~ msgid "Audio Content"
#~ msgstr "geluidsinhoud"
#~ msgid "Content"
#~ msgstr "inhoud"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "dupeGuru ME voorkeuren"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "dupeGuru PE voorkeuren"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Niet bestaande nummer verwijderen in iTunes"

View File

@@ -1,121 +1,122 @@
# Translators: # Translators:
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2012-09-05 15:22+0000\n" "Language-Team: Polish (Poland) (https://www.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/dupeguru/language/pl_PL/)\n" "Language: pl_PL\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "" msgstr "Ścieżka pliku"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "" msgstr "Komunikat o błędzie"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr ""
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr ""
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr ""
#: core/prioritize.py:147
msgid "Size"
msgstr ""
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr ""
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "" msgstr "Trwanie"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "" msgstr "Szybkość transmisji"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "" msgstr "Samplerate"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Nazwa pliku"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Katalog"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "" msgstr "Rozmiar (MB)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "" msgstr "Czas"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "" msgstr "Częstotliwość próbkowania"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Rodzaj"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modyfikacja"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "" msgstr "Tytuł"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "" msgstr "Artysta"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "" msgstr "Album"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "" msgstr "Gatunek"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "" msgstr "Rok"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "" msgstr "Numer utworu"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "" msgstr "Komentarz"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "" msgstr "Mecz %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "" msgstr "Użyte słowa"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "" msgstr "Liczba duplikatów"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "" msgstr "Wymiary"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "" msgstr "Rozmiar (KB)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Sygnatura czasowa EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Rozmiar"

View File

@@ -1,81 +1,90 @@
# Translators: # Translators:
# mstefanski1987 <mstefanski1987@gmail.com>, 2014 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2014-06-09 16:28+0000\n" "Language-Team: Polish (Poland) (https://www.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
"Last-Translator: mstefanski1987 <mstefanski1987@gmail.com>\n" "Language: pl_PL\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/p/dupeguru/language/pl_PL/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Brak wykrytych duplikatów. Nic nie zrobiono." msgstr "Brak wykrytych duplikatów. Nic nie zrobiono."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Brak wybranych duplikatów. Nic nie zrobiono." msgstr "Brak wybranych duplikatów. Nic nie zrobiono."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
"Masz zamiar otworzyć wiele plików jednocześnie. W zależności od tego, za "
"pomocą czego te pliki są otwierane, może to spowodować spory bałagan. "
"Kontyntynuj?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "" msgstr "Wyszukiwanie duplikatów"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "" msgstr "Ładuję"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "" msgstr "Przenoszę"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "" msgstr "Kopiowanie"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "" msgstr "Wysyłam do kosza"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
msgstr "" msgstr ""
"Wciąż wisi tam poprzednia akcja. Nie możesz jeszcze rozpocząć nowego. "
"Poczekaj kilka sekund i spróbuj ponownie."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Nie znaleziono duplikatów." msgstr "Nie znaleziono duplikatów."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr "Wszystkie zaznaczone pliki zostały pomyślnie skopiowane."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr "Wszystkie zaznaczone pliki zostały pomyślnie przeniesione."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr "Wszystkie zaznaczone pliki zostały pomyślnie wysłane do kosza."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Nie udało się załadować pliku: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' jest już na liście." msgstr "'{}' jest już na liście."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' nie istnieje." msgstr "'{}' nie istnieje."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@@ -83,185 +92,168 @@ msgstr ""
"Wszystkie zaznaczone %d duplikaty będą ignorowane w kolejnych skanach. " "Wszystkie zaznaczone %d duplikaty będą ignorowane w kolejnych skanach. "
"Kontynuować?" "Kontynuować?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "kopiuj" msgstr "Wybierz katalog, do którego chcesz skopiować zaznaczone pliki"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "przenieś" msgstr "Wybierz katalog, do którego chcesz przenieść zaznaczone pliki"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Wybierz katalog do {} duplikatów"
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr "Wybierz miejsce docelowe dla eksportowanego pliku CSV"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Nie udało się zapisać do pliku: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Nie masz skonfigurowanego polecenia niestandardowego. Ustaw to w swoich "
"preferencjach."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "" msgstr "Zamierzasz usunąć %d plików z wyników. Kontyntynuj?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr "{} zduplikowanych grup zmieniono przez ponowne ustalenie priorytetów."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "" msgstr "Wybrane katalogi nie zawierają plik skanowalną."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Zbieranie plików do skanowania"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "" msgstr "%s(%d odrzucone)"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "" msgstr "Znaleziono 0 pasujących wyników"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "" msgstr "Znaleziono %d pasujących wyników"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr ""
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "" msgstr "Wysyłasz {} plików do Kosza"
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Wyrażenia regularne"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "" msgstr "Czy na pewno chcesz usunąć wszystkie %d pozycji z listy ignorowanych?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None"
msgstr ""
#: core/prioritize.py:96
msgid "Ends with number"
msgstr ""
#: core/prioritize.py:97
msgid "Doesn't end with number"
msgstr ""
#: core/prioritize.py:98
msgid "Longest"
msgstr ""
#: core/prioritize.py:99
msgid "Shortest"
msgstr ""
#: core/prioritize.py:132
msgid "Highest"
msgstr ""
#: core/prioritize.py:132
msgid "Lowest"
msgstr ""
#: core/prioritize.py:159
msgid "Newest"
msgstr ""
#: core/prioritize.py:159
msgid "Oldest"
msgstr ""
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core/results.py:136
msgid " filter: %s"
msgstr ""
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr ""
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr ""
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr ""
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename" msgid "Filename"
msgstr "" msgstr "Nazwa pliku"
#: core/me/scanner.py:20 #: core\me\scanner.py:21
msgid "Filename - Fields" msgid "Filename - Fields"
msgstr "" msgstr "Nazwa pliku - pola"
#: core/me/scanner.py:21 #: core\me\scanner.py:22
msgid "Filename - Fields (No Order)" msgid "Filename - Fields (No Order)"
msgstr "" msgstr "Nazwa pliku - pola (bez kolejności)"
#: core/me/scanner.py:22 #: core\me\scanner.py:23
msgid "Tags" msgid "Tags"
msgstr "" msgstr "Tagi"
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents" msgid "Contents"
msgstr "" msgstr "Treść"
#: core/pe/scanner.py:21 #: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr "Analizowane %d/%d zdjęć"
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "Wykonano %d/%d dopasowań fragmentów"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "Przygotowanie do dopasowania"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "Zweryfikowane %d/%d meczów"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "Przeczytaj EXIF z %d/%d zdjęć"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Sygnatura czasowa EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Nie"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Kończy się numerem"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Nie kończy się liczbą"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Najdłużej"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Najkrótsza"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Najwyższa"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Najniższa"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Najnowsza"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Najstarszy"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplikaty oznakowane."
#: core\results.py:149
msgid " filter: %s"
msgstr " filtr: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Odczytaj rozmiar %d/%d plików"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Przeczytaj metadane %d/%d plików"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Prawie skończone! Porządkowanie wyników..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Katalogi"
#~ msgid "Sending files to the recycle bin"
#~ msgstr ""
#~ msgid "Grouped %d/%d matches"
#~ msgstr ""
#~ msgid "Removing false matches"
#~ msgstr ""
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ msgid "Doing group prioritization"
#~ msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -1,125 +1,122 @@
# Translators: # Translators:
# Vitu <xcoisas@me.com>, 2012-2013 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Vitu <contact@brlingo.com>, 2013 #
# Vitu <contact@brlingo.com>, 2012
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
"Last-Translator: Vitu <contact@brlingo.com>\n" "Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/dupeguru/language/pt_BR/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Caminho" msgstr "Caminho"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Mensagem de Erro" msgstr "Mensagem de Erro"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Tipo"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Pasta"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nome do Arquivo"
#: core/prioritize.py:147
msgid "Size"
msgstr "Tamanho"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificado"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Duração" msgstr "Duração"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Taxa de Bits" msgstr "Taxa de Bits"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Amostragem" msgstr "Amostragem"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Nome do Arquivo"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Pasta"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Tamanho" msgstr "Tamanho"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Duração" msgstr "Duração"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Tamanho da Amostra" msgstr "Tamanho da Amostra"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Tipo"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Modificado"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Nome" msgstr "Nome"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Artista" msgstr "Artista"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Álbum" msgstr "Álbum"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Gênero" msgstr "Gênero"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Ano" msgstr "Ano"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Número da Faixa" msgstr "Número da Faixa"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Comentário" msgstr "Comentário"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "% Precisão" msgstr "% Precisão"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Palavras Usadas" msgstr "Palavras Usadas"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Duplicatas" msgstr "Duplicatas"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Dimensões" msgstr "Dimensões"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Tamanho" msgstr "Tamanho"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Timestamp EXIF" msgstr "Timestamp EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Tamanho"

View File

@@ -1,28 +1,25 @@
# Translators: # Translators:
# Vitu <contact@brlingo.com>, 2013 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Vitu <xcoisas@me.com>, 2012-2013 # Fuan <jcfrt@posteo.net>, 2021
# Vitu <contact@brlingo.com>, 2013 #
# Vitu <contact@brlingo.com>, 2012
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2013-12-07 15:22+0000\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
"Last-Translator: hsoft <hsoft@hardcoded.net>\n" "Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/dupeguru/language/pt_BR/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:40 #: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Não há duplicatas marcadas. Nada foi feito." msgstr "Não há duplicatas marcadas. Nada foi feito."
#: core/app.py:41 #: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Não há duplicatas selecionadas. Nada foi feito." msgstr "Não há duplicatas selecionadas. Nada foi feito."
#: core/app.py:42 #: core\app.py:44
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@@ -30,27 +27,27 @@ msgstr ""
"Você está prestes a abrir muitos arquivos de uma vez. Problemas podem surgir" "Você está prestes a abrir muitos arquivos de uma vez. Problemas podem surgir"
" dependendo de qual app seja usado para abri-los. Deseja continuar?" " dependendo de qual app seja usado para abri-los. Deseja continuar?"
#: core/app.py:65 #: core\app.py:71
msgid "Scanning for duplicates" msgid "Scanning for duplicates"
msgstr "Buscando por duplicatas" msgstr "Buscando por duplicatas"
#: core/app.py:66 #: core\app.py:72
msgid "Loading" msgid "Loading"
msgstr "Carregando" msgstr "Carregando"
#: core/app.py:67 #: core\app.py:73
msgid "Moving" msgid "Moving"
msgstr "Movendo" msgstr "Movendo"
#: core/app.py:68 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Copiando" msgstr "Copiando"
#: core/app.py:69 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
msgstr "Movendo para o Lixo" msgstr "Movendo para o Lixo"
#: core/app.py:279 #: core\app.py:308
msgid "" msgid ""
"A previous action is still hanging in there. You can't start a new one yet. " "A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again." "Wait a few seconds, then try again."
@@ -58,216 +55,201 @@ msgstr ""
"Ainda há uma ação em andamento. Não é possível iniciar outra agora. Espere " "Ainda há uma ação em andamento. Não é possível iniciar outra agora. Espere "
"alguns segundos e tente novamente." "alguns segundos e tente novamente."
#: core/app.py:289 #: core\app.py:318
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Nenhuma duplicata encontrada." msgstr "Nenhuma duplicata encontrada."
#: core/app.py:304 #: core\app.py:333
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Todos os arquivos marcados foram copiados corretamente." msgstr "Todos os arquivos marcados foram copiados corretamente."
#: core/app.py:305 #: core\app.py:334
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Todos os arquivos marcados foram relocados corretamente." msgstr "Todos os arquivos marcados foram relocados corretamente."
#: core/app.py:306 #: core\app.py:335
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Todos os arquivos marcados foram movidos para o Lixo corretamente." msgstr "Todos os arquivos marcados foram movidos para o Lixo corretamente."
#: core/app.py:368 #: core\app.py:343
msgid "Could not load file: {}"
msgstr "Não foi possível carregar o arquivo: {}"
#: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "{} já está na lista." msgstr "{} já está na lista."
#: core/app.py:370 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "{} não existe." msgstr "{} não existe."
#: core/app.py:379 #: core\app.py:410
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "Excluir %d duplicata(s) selecionada(s) de escaneamentos posteriores?" msgstr "Excluir %d duplicata(s) selecionada(s) de escaneamentos posteriores?"
#: core/app.py:450 #: core\app.py:486
msgid "copy" msgid "Select a directory to copy marked files to"
msgstr "copiar" msgstr "Selecione um diretório onde deseja copiar os arquivos marcados"
#: core/app.py:450 #: core\app.py:487
msgid "move" msgid "Select a directory to move marked files to"
msgstr "mover" msgstr "Selecione um diretório para onde deseja mover os arquivos marcados"
#: core/app.py:451 #: core\app.py:527
msgid "Select a directory to {} marked files to"
msgstr "Selecione uma pasta para {} os arquivos marcados"
#: core/app.py:490
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Selecione uma pasta para o CSV exportado" msgstr "Selecione uma pasta para o CSV exportado"
#: core/app.py:518 #: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Não foi possível gravar no arquivo: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Você não possui nenhum comando personalizado. Crie um nas preferências." "Você não possui nenhum comando personalizado. Crie um nas preferências."
#: core/app.py:672 core/app.py:685 #: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Remover %d arquivo(s) dos resultados?" msgstr "Remover %d arquivo(s) dos resultados?"
#: core/app.py:719 #: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} grupos de duplicatas alterados ao repriorizar." msgstr "{} grupos de duplicatas alterados ao repriorizar."
#: core/app.py:762 #: core\app.py:821
msgid "Collecting files to scan"
msgstr "Juntando arquivos para escanear"
#: core/app.py:751
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "As pastas selecionadas não contém arquivos escaneáveis." msgstr "As pastas selecionadas não contém arquivos escaneáveis."
#: core/app.py:810 #: core\app.py:835
msgid "Collecting files to scan"
msgstr "Juntando arquivos para escanear"
#: core\app.py:891
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d rejeitado(s))" msgstr "%s (%d rejeitado(s))"
#: core/engine.py:222 core/engine.py:262 #: core\engine.py:244 core\engine.py:288
msgid "0 matches found" msgid "0 matches found"
msgstr "0 resultados encontrados" msgstr "0 resultados encontrados"
#: core/engine.py:240 core/engine.py:270 #: core\engine.py:262 core\engine.py:296
msgid "%d matches found" msgid "%d matches found"
msgstr "%d resultados encontrados" msgstr "%d resultados encontrados"
#: core/scanner.py:77 #: core\gui\deletion_options.py:73
msgid "Read size of %d/%d files"
msgstr "Tamanho lido em %d/%d arquivos"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Você está movendo {} arquivo(s) para o Lixo." msgstr "Você está movendo {} arquivo(s) para o Lixo."
#: core/gui/ignore_list_dialog.py:24 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Expressões regulares"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?" msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Tem certeza de que deseja remover todos os %d itens da lista Ignorar?" msgstr "Tem certeza de que deseja remover todos os %d itens da lista Ignorar?"
#: core/prioritize.py:68 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "None" msgid "Filename"
msgstr "Nenhum" msgstr "Nome do arquivo"
#: core/prioritize.py:96 #: core\me\scanner.py:21
msgid "Ends with number" msgid "Filename - Fields"
msgstr "Termina com número" msgstr "Nome do arquivo - campos"
#: core/prioritize.py:97 #: core\me\scanner.py:22
msgid "Doesn't end with number" msgid "Filename - Fields (No Order)"
msgstr "Não termina com número" msgstr "Nome do arquivo - campos (sem pedido)"
#: core/prioritize.py:98 #: core\me\scanner.py:23
msgid "Longest" msgid "Tags"
msgstr "Mais longo" msgstr "Tags"
#: core/prioritize.py:99 #: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Shortest" msgid "Contents"
msgstr "Mais curto" msgstr "Conteúdo"
#: core/prioritize.py:132 #: core\pe\matchblock.py:72
msgid "Highest"
msgstr "Maior"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Menor"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Mais recente"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Mais antigo"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicatas marcadas."
#: core/results.py:136
msgid " filter: %s"
msgstr " filtro: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Metadados lidos em %d/%d arquivos"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures" msgid "Analyzed %d/%d pictures"
msgstr "%d/%d fotos analizadas" msgstr "%d/%d fotos analizadas"
#: core/pe/matchblock.py:156 #: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches" msgid "Performed %d/%d chunk matches"
msgstr "%d/%d resultados em blocos executados" msgstr "%d/%d resultados em blocos executados"
#: core/pe/matchblock.py:161 #: core\pe\matchblock.py:191
msgid "Preparing for matching" msgid "Preparing for matching"
msgstr "Preparando para comparação" msgstr "Preparando para comparação"
#: core/pe/matchblock.py:206 #: core\pe\matchblock.py:244
msgid "Verified %d/%d matches" msgid "Verified %d/%d matches"
msgstr "%d/%d resultados verificados" msgstr "%d/%d resultados verificados"
#: core/pe/matchexif.py:18 #: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "EXIF lido em %d/%d fotos" msgstr "EXIF lido em %d/%d fotos"
#: core/app.py:312 #: core\pe\scanner.py:22
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "" msgstr "Timestamp EXIF"
#: core/scanner.py:139 #: core\prioritize.py:70
msgid "None"
msgstr "Nenhum"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Termina com número"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Não termina com número"
#: core\prioritize.py:102
msgid "Longest"
msgstr "Mais longo"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "Mais curto"
#: core\prioritize.py:140
msgid "Highest"
msgstr "Maior"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "Menor"
#: core\prioritize.py:169
msgid "Newest"
msgstr "Mais recente"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "Mais antigo"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicatas marcadas."
#: core\results.py:149
msgid " filter: %s"
msgstr " filtro: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "Tamanho lido em %d/%d arquivos"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "Metadados lidos em %d/%d arquivos"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..." msgid "Almost done! Fiddling with results..."
msgstr "" msgstr "Quase pronto! Mexendo nos resultados ..."
#: core/se/scanner.py:17 #: core\se\scanner.py:18
msgid "Folders" msgid "Folders"
msgstr "" msgstr "Pastas"
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Movendo arquivos para o Lixo"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d resultados agrupados"
#~ msgid "Removing false matches"
#~ msgstr "Removendo resultados falsos"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "%d/%d resultados processados em oposição à lista Ignorar"
#~ msgid "Doing group prioritization"
#~ msgstr "Executando priorização de grupo"

View File

@@ -1,28 +1,34 @@
# Translators: # Translators:
# Vitu <contact@brlingo.com>, 2013 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Vitu <xcoisas@me.com>, 2012-2013 # Fuan <jcfrt@posteo.net>, 2021
# Vitu <contact@brlingo.com>, 2013 #
# Vitu <contact@brlingo.com>, 2012
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
"PO-Revision-Date: 2014-03-31 00:15+0000\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
"Last-Translator: Vitu <contact@brlingo.com>\n" "Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/p/dupeguru/language/pt_BR/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: qt/app.py:81 #: qt/app.py:81
msgid "Quit" msgid "Quit"
msgstr "Encerrar" msgstr "Encerrar"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opções"
#: qt/app.py:83 qt/ignore_list_dialog.py:32 #: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List" msgid "Ignore List"
msgstr "Lista Ignorar" msgstr "Lista Ignorar"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Apagar Cache de Fotos"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0 #: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help" msgid "dupeGuru Help"
msgstr "Ajuda dupeGuru" msgstr "Ajuda dupeGuru"
@@ -35,6 +41,14 @@ msgstr "Sobre o dupeGuru"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Abrir Registro de Depuração" msgstr "Abrir Registro de Depuração"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Deseja remover todo o cache das fotos já analizadas?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Cache de fotos apagado."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "Arquivo {} (*.{})" msgstr "Arquivo {} (*.{})"
@@ -130,6 +144,30 @@ msgstr "Ajuda"
msgid "Load Recent Results" msgid "Load Recent Results"
msgstr "Carregar Resultados Recentes" msgstr "Carregar Resultados Recentes"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Modo de Aplicação:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Música"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Imagem"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Padrão"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Tipo de Scan:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Mais opções"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0 #: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"." msgid "Select folders to scan and press \"Scan\"."
msgstr "Selecione as pastas desejadas e clique em “Escanear”." msgstr "Selecione as pastas desejadas e clique em “Escanear”."
@@ -203,9 +241,78 @@ msgstr "Limpar"
msgid "Close" msgid "Close"
msgstr "Fechar" msgstr "Fechar"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0 #: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
msgid "Scan Type:" #: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
msgstr "Tipo de Scan:" #: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Detalhes"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Escanear Tags:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Faixa"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Álbum"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Nome"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Gênero"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Ano"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Importância da palavra"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Coincidir palavras similares"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Pode misturar tipo de arquivo"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Usar expressões regulares ao filtrar"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Remover pastas vazias ao apagar ou mover"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorar duplicatas de hardlink a um mesmo arquivo"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Modo de Depuração (requer reinício)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Coincidir fotos de dimensões diferentes"
#: qt/preferences_dialog.py:43 #: qt/preferences_dialog.py:43
msgid "Filter Hardness:" msgid "Filter Hardness:"
@@ -285,12 +392,6 @@ msgstr ""
msgid "Reveal Selected" msgid "Reveal Selected"
msgstr "Mostrar Seleção" msgstr "Mostrar Seleção"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Detalhes"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167 #: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0 #: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions" msgid "Actions"
@@ -408,85 +509,6 @@ msgstr "Valores Delta"
msgid "Select a file to save your results to" msgid "Select a file to save your results to"
msgstr "Selecione onde salvar seus resultados" msgstr "Selecione onde salvar seus resultados"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Escanear Tags:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Faixa"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Artista"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Álbum"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Nome"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Gênero"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Ano"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Importância da palavra"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Coincidir palavras similares"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Pode misturar tipo de arquivo"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Usar expressões regulares ao filtrar"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Remover pastas vazias ao apagar ou mover"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Ignorar duplicatas de hardlink a um mesmo arquivo"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Modo de Depuração (requer reinício)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Coincidir fotos de dimensões diferentes"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Apagar Cache de Fotos"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr "Deseja remover todo o cache das fotos já analizadas?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Cache de fotos apagado."
#: qt/se/preferences_dialog.py:41 #: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than" msgid "Ignore files smaller than"
msgstr "Ignorar arquivos menores que" msgstr "Ignorar arquivos menores que"
@@ -643,11 +665,6 @@ msgstr "+ resultados"
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Opções"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Paste" msgid "Paste"
msgstr "Colar" msgstr "Colar"
@@ -712,112 +729,217 @@ msgstr "Janela"
msgid "Zoom" msgid "Zoom"
msgstr "Ampliar/Reduzir" msgstr "Ampliar/Reduzir"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0 #: qt\app.py:158
msgid "Application Mode:" msgid "Exclusion Filters"
msgstr "Filtros de Exclusão"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Resultados da varredura"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Carregar diretórios..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Salvar diretórios..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Selecione um arquivo de diretórios para carregar"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "Diretórios de dupeGuru (* .dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Selecione um arquivo para salvar seus diretórios"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "Diretórios de dupeGuru (* .dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Adicionar"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Restaurar padrões"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "String de teste"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Digite uma expressão regular python aqui..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Digite um caminho ou nome de arquivo do sistema de arquivos aqui..."
#: qt\exclude_list_dialog.py:152
msgid ""
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with no path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr "" msgstr ""
"Essas expressões regulares Python (diferenciando maiúsculas e minúsculas) filtrarão os arquivos durante as varreduras.<br>Directores também terão seu <strong>estado padrão</strong> definido como \"Excluído\" na guia Diretórios se seu nome corresponder a uma das expressões regulares selecionadas.<br>Para cada arquivo coletado, dois testes são realizados para determinar se deve ou não ignorá-lo completamente:<br><li>\n"
"1. Expressões regulares sem separador de caminho serão comparadas apenas ao nome do arquivo.<li>2. Expressões regulares com pelo menos um separador de caminho serão comparadas ao caminho completo para o arquivo.</li><br>\n"
"Exemplo: se você deseja filtrar arquivos .PNG apenas do diretório \"Minhas imagens\":<br><code>*Minhas\\sImagens\\\\.*\\.png</code><br><br>Você pode testar a expressão regular com o botão \"string de teste\" após colar um caminho falso no campo de teste:<br><code>C:\\\\Usuário\\Minhas Imagens\\test.png</code><br><br>\n"
"As expressões regulares correspondentes serão destacadas.<br>Se houver pelo menos um destaque, o caminho ou nome do arquivo testado será ignorado durante as varreduras.<br><br>Diretórios e arquivos que começam com um ponto '.' são filtrados por padrão.<br><br>"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\exclude_list_table.py:36
msgid "Music" msgid "Compilation error: "
msgstr "Erro de compilação:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Aumentar zoom"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Diminuir zoom"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Tamanho normal"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "Melhor ajuste"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Modo de cache de imagem:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Substituir os ícones do tema na barra de ferramentas do visualizador"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr "" msgstr ""
"Use nossos próprios ícones internos em vez dos fornecidos pelo mecanismo de "
"tema"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\pe\preferences_dialog.py:66
msgid "Picture" msgid "Show scrollbars in image viewers"
msgstr "Mostrar barras de rolagem em visualizadores de imagens"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr "" msgstr ""
"Quando a imagem exibida não couber na janela de visualização, mostre as "
"barras de rolagem para abranger a visualização"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0 #: qt\preferences_dialog.py:156
msgid "Standard" msgid "Use default position for tab bar (requires restart)"
msgstr "Use a posição padrão para a barra de guias (requer reinicialização)"
#: qt\preferences_dialog.py:158
msgid ""
"Place the tab bar below the main menu instead of next to it\n"
"On MacOS, the tab bar will fill up the window's width instead."
msgstr "" msgstr ""
"Coloque a barra de guias abaixo do menu principal em vez de ao lado dele\n"
"No MacOS, a barra de guias preencherá a largura da janela."
#: qt/directories_dialog.py:135 #: qt\preferences_dialog.py:172
msgid "More Options" msgid "Use bold font for references"
msgstr "Use fonte em negrito para referências"
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr "Cor de primeiro plano de referência:"
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr "Cor de fundo de referência:"
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr "Cor de primeiro plano do delta:"
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr "Mostra a barra de título e pode ser encaixada"
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr "" msgstr ""
"Enquanto a barra de título está oculta, use a tecla modificadora para "
"arrastar a janela flutuante"
#~ msgid "Removing dead tracks from your iTunes Library" #: qt\preferences_dialog.py:199
#~ msgstr "Removendo faixas sem referência da sua Biblioteca do iTunes" msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"A barra de título só pode ser desativada enquanto a janela está encaixada"
#~ msgid "Scanning the iTunes Library" #: qt\preferences_dialog.py:202
#~ msgstr "Escaneando Biblioteca do iTunes" msgid "Vertical title bar"
msgstr "Barra de título vertical"
#~ msgid "Sending dupes to the Trash" #: qt\preferences_dialog.py:204
#~ msgstr "Movendo duplicatas para o Lixo" msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr ""
"Altere a barra de título de horizontal na parte superior para vertical no "
"lado esquerdo"
#~ msgid "Talking to iTunes. Don't touch it!" #: qt\tabbed_window.py:44
#~ msgstr "Comunicando com o iTunes. Não mexa!" msgid "Show tab bar"
msgstr "Mostrar barra de abas"
#~ msgid "" #: qt\exclude_list_dialog.py:152
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgid ""
#~ msgstr "Remover %d faixas sem referência da Biblioteca do iTunes?" "These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>\n"
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
msgstr ""
"Essas expressões regulares Python (diferenciando maiúsculas e minúsculas) filtrarão os arquivos durante as varreduras.<br>Directores também terão seu <strong>estado padrão</strong> definido como \"Excluído\" na guia Diretórios se seu nome corresponder a uma das expressões regulares selecionadas.<br>Para cada arquivo coletado, dois testes são realizados para determinar se deve ou não ignorá-lo completamente:<br><li>\n"
"1. Expressões regulares sem separador de caminho serão comparadas apenas ao nome do arquivo.<li>2. Expressões regulares com pelo menos um separador de caminho serão comparadas ao caminho completo para o arquivo.</li><br>\n"
"Exemplo: se você deseja filtrar arquivos .PNG apenas do diretório \"Minhas imagens\":<br><code>*Minhas\\sImagens\\\\.*\\.png</code><br><br>Você pode testar a expressão regular com o botão \"string de teste\" após colar um caminho falso no campo de teste:<br><code>C:\\\\Usuário\\Minhas Imagens\\test.png</code><br><br>\n"
"As expressões regulares correspondentes serão destacadas.<br>Se houver pelo menos um destaque, o caminho ou nome do arquivo testado será ignorado durante as varreduras.<br><br>Diretórios e arquivos que começam com um ponto '.' são filtrados por padrão.<br><br>"
#~ msgid "You have no dead tracks in your iTunes Library" #: qt\app.py:256
#~ msgstr "Você não possui nenhuma faixa sem referência na Biblioteca do iTunes" msgid "Results"
msgstr "Resultados"
#~ msgid "The iTunes application couldn't be found." #: qt\preferences_dialog.py:150
#~ msgstr "O aplicativo iTunes não foi encontrado." msgid "General Interface"
msgstr "Interface Geral"
#~ msgid "Talking to iPhoto. Don't touch it!" #: qt\preferences_dialog.py:176
#~ msgstr "Comunicando com o iPhoto. Não mexa!" msgid "Result Table"
msgstr "Tabela de Resultados"
#~ msgid "Talking to Aperture. Don't touch it!" #: qt\preferences_dialog.py:205
#~ msgstr "Comunicando com o Aperture. Não mexa!" msgid "Details Window"
msgstr "Janela de Detalhes"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"." #: qt\preferences_dialog.py:285
#~ msgstr "" msgid "General"
#~ "As fotos apagadas do Aperture foram movidas para o projeto \"dupeGuru " msgstr "Geral"
#~ "Trash\"."
#~ msgid "The iPhoto application couldn't be found." #: qt\preferences_dialog.py:286
#~ msgstr "O aplicativo iPhoto não foi encontrado." msgid "Display"
msgstr "Exibição"
#~ msgid "Preferences"
#~ msgstr "Preferências"
#~ msgid "Check for Update"
#~ msgstr "Buscar Atualizaçõs"
#~ msgid "Filename"
#~ msgstr "Nome do Arquivo"
#~ msgid "Filename - Fields"
#~ msgstr "Nome do Arquivo - Campos"
#~ msgid "Filename - Fields (No Order)"
#~ msgstr "Nome do Arquivo - Campos (Sem Ordem)"
#~ msgid "Tags"
#~ msgstr "Tags"
#~ msgid "Contents"
#~ msgstr "Conteúdo"
#~ msgid "Audio Contents"
#~ msgstr "Conteúdo de Áudio"
#~ msgid "EXIF Timestamp"
#~ msgstr "Timestamp EXIF"
#~ msgid "Folders"
#~ msgstr "Pastas"
#~ msgid "Add Aperture Library"
#~ msgstr "Adicionar Biblioteca do Aperture"
#~ msgid "Add iPhoto Library"
#~ msgstr "Adicionar Biblioteca do iPhoto"
#~ msgid "Add iTunes Library"
#~ msgstr "Adicionar Biblioteca do iTunes"
#~ msgid "Audio Content"
#~ msgstr "Conteúdo de Áudio"
#~ msgid "Content"
#~ msgstr "Conteúdo"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "Preferências do dupeGuru ME"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "Preferências do dupeGuru PE"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Remover Faixas sem Referência do iTunes"

View File

@@ -1,123 +1,122 @@
# Translators: # Translators:
# Kyrill Detinov <lazy.kent@opensuse.org>, 2013 # Andrew Senetar <arsenetar@gmail.com>, 2021
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dupeGuru\n" "Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
"PO-Revision-Date: 2013-11-20 11:53+0000\n" "Language-Team: Russian (https://www.transifex.com/voltaicideas/teams/116153/ru/)\n"
"Last-Translator: Kyrill Detinov <lazy.kent@opensuse.org>\n" "Language: ru\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/dupeguru/language/ru/)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
"Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\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"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core/gui/problem_table.py:17 #: core\gui\problem_table.py:18
msgid "File Path" msgid "File Path"
msgstr "Путь к файлу" msgstr "Путь к файлу"
#: core/gui/problem_table.py:18 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Сообщение об ошибке" msgstr "Сообщение об ошибке"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63 #: core\me\prioritize.py:23
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Тип"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Каталог"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Имя файла"
#: core/prioritize.py:147
msgid "Size"
msgstr "Размер"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Время изменения"
#: core/me/prioritize.py:18
msgid "Duration" msgid "Duration"
msgstr "Продолжительность" msgstr "Продолжительность"
#: core/me/prioritize.py:24 core/me/result_table.py:22 #: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate" msgid "Bitrate"
msgstr "Битрейт" msgstr "Битрейт"
#: core/me/prioritize.py:30 #: core\me\prioritize.py:37
msgid "Samplerate" msgid "Samplerate"
msgstr "Частота оцифровки" msgstr "Частота оцифровки"
#: core/me/result_table.py:20 #: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Имя файла"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Каталог"
#: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Размер (МБ)" msgstr "Размер (МБ)"
#: core/me/result_table.py:21 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
msgstr "Время" msgstr "Время"
#: core/me/result_table.py:23 #: core\me\result_table.py:24
msgid "Sample Rate" msgid "Sample Rate"
msgstr "Частота" msgstr "Частота"
#: core/me/result_table.py:26 #: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Тип"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Время изменения"
#: core\me\result_table.py:27
msgid "Title" msgid "Title"
msgstr "Название" msgstr "Название"
#: core/me/result_table.py:27 #: core\me\result_table.py:28
msgid "Artist" msgid "Artist"
msgstr "Исполнитель" msgstr "Исполнитель"
#: core/me/result_table.py:28 #: core\me\result_table.py:29
msgid "Album" msgid "Album"
msgstr "Альбом" msgstr "Альбом"
#: core/me/result_table.py:29 #: core\me\result_table.py:30
msgid "Genre" msgid "Genre"
msgstr "Жанр" msgstr "Жанр"
#: core/me/result_table.py:30 #: core\me\result_table.py:31
msgid "Year" msgid "Year"
msgstr "Год" msgstr "Год"
#: core/me/result_table.py:31 #: core\me\result_table.py:32
msgid "Track Number" msgid "Track Number"
msgstr "Номер дорожки" msgstr "Номер дорожки"
#: core/me/result_table.py:32 #: core\me\result_table.py:33
msgid "Comment" msgid "Comment"
msgstr "Комментарий" msgstr "Комментарий"
#: core/me/result_table.py:33 core/pe/result_table.py:25 #: core\me\result_table.py:34 core\pe\result_table.py:26
#: core/se/result_table.py:23 #: core\se\result_table.py:24
msgid "Match %" msgid "Match %"
msgstr "Совпадение %" msgstr "Совпадение %"
#: core/me/result_table.py:34 core/se/result_table.py:24 #: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used" msgid "Words Used"
msgstr "Использованные слова" msgstr "Использованные слова"
#: core/me/result_table.py:35 core/pe/result_table.py:26 #: core\me\result_table.py:36 core\pe\result_table.py:27
#: core/se/result_table.py:25 #: core\se\result_table.py:26
msgid "Dupe Count" msgid "Dupe Count"
msgstr "Количество дубликатов" msgstr "Количество дубликатов"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22 #: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions" msgid "Dimensions"
msgstr "Размеры" msgstr "Размеры"
#: core/pe/result_table.py:20 core/se/result_table.py:20 #: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)" msgid "Size (KB)"
msgstr "Размер (КБ)" msgstr "Размер (КБ)"
#: core/pe/result_table.py:23 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
msgstr "Временная отметка EXIF" msgstr "Временная отметка EXIF"
#: core\prioritize.py:156
msgid "Size"
msgstr "Размер"

Some files were not shown because too many files have changed in this diff Show More